{"$schema":"http://json-schema.org/draft-07/schema#","$id":"component-schema.json","title":"JSON Schema for Oracle JET component.json files","type":"object","definitions":{"jetCustomElementNameDef":{"$comment":"central definition for JET custom element names","type":"string","pattern":"^([a-z][a-z0-9_-]*)$","not":{"enum":["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"]}},"propNameRestrictionsDef":{"$comment":"web component property names cannot conflict with HTML global attribute names","propertyNames":{"not":{"enum":["accesskey","accessKey","accessKeyLabel","autocapitalize","autoCapitalize","class","className","contenteditable","contentEditable","dir","draggable","enterkeyhint","enterKeyHint","hidden","id","inputmode","inputMode","is","itemid","itemprop","itemref","itemscope","itemtype","lang","nonce","role","slot","spellcheck","style","tabindex","tabIndex","title","translate"]}}},"eventNameRestrictionsDef":{"$comment":"web component event names, which become 'on<name>' attributes at runtime, cannot conflict with HTML GlobalEventHandlers","propertyNames":{"not":{"enum":["abort","animationcancel","animationend","animationiteration","animationstart","auxclick","blur","cancel","canplay","canplaythrough","change","click","close","contextmenu","copy","cuechange","cut","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","dragstart","drop","durationchange","emptied","ended","error","focus","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadeddata","loadedmetadata","loadstart","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","paste","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","securitypolicyviolation","seeked","seeking","select","slotchange","stalled","submit","suspend","timeupdate","toggle","touchcancel","touchend","touchmove","touchstart","volumechange","waiting","wheel"]}}},"commonPropsMetadataDef":{"$comment":"definitions of common Property metadata properties:  top-level, nested, or within an extension","properties":{"enumValues":{"type":"array","items":{"type":"string"}},"readOnly":{"type":"boolean"},"type":{"type":"string"},"value":{"type":["array","boolean","number","null","object","string"]},"writeback":{"type":"boolean"},"binding":{"$ref":"#/definitions/bindingDef"},"description":{"type":"string"},"displayName":{"type":"string"},"dynamicSlotDef":{"type":"string"},"eventGroup":{"type":"string"},"exclusiveMaximum":{"type":["number","string"]},"exclusiveMinimum":{"type":["number","string"]},"format":{"type":"string","enum":["double","float","int32","int64","binary","byte","color","date","date-time","email","time","password","uri"]},"help":{"type":"string"},"maximum":{"type":["number","string"]},"minimum":{"type":["number","string"]},"minCapabilities":{"$ref":"#/definitions/minCapabilitiesDef"},"pattern":{"type":"string","format":"regex"},"placeholder":{"type":"string"},"propertyEditorValues":{"type":"object","patternProperties":{"^([A-Za-z0-9_-])*$":{"type":"object","properties":{"description":{"type":"string"},"displayName":{"type":"string"},"icon":{"$ref":"#/definitions/iconsDef"}},"additionalProperties":false}},"additionalProperties":false},"propertyGroup":{"type":"string"},"required":{"type":"boolean"},"status":{"$ref":"#/definitions/statusDef"},"templateSlotAlias":{"type":"string"},"templateSlotRenderType":{"$comment":"deprecated since 19.0.0 - use templateSlotAlias instead","type":"string"},"translatable":{"type":"boolean"},"units":{"type":"string"},"visible":{"type":"boolean"}}},"commonVdomPropsMetadataDef":{"$comment":"definitions of common Property metadata properties for vdom components, hook/util param elements, and hook/util return elements","properties":{"type":{"type":"string"},"description":{"type":"string"},"optional":{"type":"boolean"},"status":{"$ref":"#/definitions/statusDef"},"value":true}},"extensionApiDecorationDef":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"enumValues":{"type":"array","items":{"type":"string"}},"visible":{"type":"boolean"},"properties":{"type":"object","additionalProperties":{"$ref":"#/definitions/extensionApiDecorationDef"}}}},"extensionDataProviderPropsDef":{"type":"object","$comment":"DataProvider property names follow JavaScript identifer naming restrictions","patternProperties":{"^[a-zA-Z_$][0-9a-zA-Z_$]*$":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"required":{"type":"boolean"},"value":{"type":["array","boolean","number","null","object","string"]},"key":{"type":"boolean"},"properties":{"$ref":"#/definitions/extensionDataProviderPropsDef"}},"required":["type"]}},"additionalProperties":false},"extensionDef":{"type":"object","properties":{"vbdt":{"type":"object"},"catalog":{"type":"object","properties":{"apiDecoration":{"$ref":"#/definitions/extensionApiDecorationDef"}}},"jet":{"$ref":"#/definitions/extensionJetDef"},"themes":{"$ref":"#/definitions/extensionThemesDef"},"webelement":{"$ref":"#/definitions/extensionWebElementExceptionStatusDef"}}},"extensionJetDef":{"type":"object","properties":{"unsupportedBrowsers":{"type":"array","items":{"type":"string","enum":["IE11"]}}}},"extensionThemesDef":{"type":"object","properties":{"unsupportedThemes":{"type":"array","items":{"$ref":"#/definitions/availableThemesDef"}}}},"extensionComponentDef":{"type":"object","properties":{"vbdt":{"type":"object","properties":{"audits":{"type":"string"},"componentPalette":{"type":"object","properties":{"visibility":{"type":"string","enum":["visible","whenPreferred","never"]}}},"defaultColumns":{"type":["number","string"],"multipleOf":1,"minimum":1,"maximum":12},"minColumns":{"type":["number","string"],"multipleOf":1,"minimum":1,"maximum":12},"usedFor":{"type":"array","items":{"type":"string","enum":["pageContent","page","formTemplate","fieldTemplate"]}},"visibility":{"type":"string","enum":["visible","oracleInternal"]}}},"jet":{"$ref":"#/definitions/extensionJetDef"},"themes":{"$ref":"#/definitions/extensionThemesDef"}}},"extensionSubPropsDef":{"type":"object","$comment":"relaxed definition for nested extension Properties; property names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"type":"object","allOf":[{"$ref":"#/definitions/commonPropsMetadataDef"},{"$comment":"list of properties with empty schemas MUST be kept in sync with commonPropsMetadataDef!!","properties":{"enumValues":{},"properties":{"$ref":"#/definitions/extensionSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionKeyedPropsDef"},"readOnly":{},"type":{},"value":{},"writeback":{},"binding":{},"description":{},"displayName":{},"dynamicSlotDef":{},"eventGroup":{},"exclusiveMaximum":{},"exclusiveMinimum":{},"format":{},"help":{},"maximum":{},"minimum":{},"minCapabilities":{},"pattern":{},"placeholder":{},"propertyEditorValues":{},"propertyGroup":{},"required":{},"status":{},"templateSlotAlias":{},"templateSlotRenderType":{},"translatable":{},"units":{},"visible":{}},"required":["type"]}]}},"additionalProperties":false},"extensionVdomSubPropsDef":{"type":"object","$comment":"relaxed definition for nested extension vdom (Preact) Properties; property names follow JavaScript identifer naming restrictions","patternProperties":{"^[a-zA-Z_$][0-9a-zA-Z_$]*$":{"type":"object","allOf":[{"$ref":"#/definitions/commonVdomPropsMetadataDef"},{"$comment":"list of properties with empty schemas MUST be kept in sync with commonVdomPropsMetadataDef!!","properties":{"type":{},"description":{},"optional":{},"status":{},"value":{},"properties":{"$ref":"#/definitions/extensionVdomSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionKeyedPropsDef"}},"required":["type"]}]}},"additionalProperties":false},"extensionPropsDef":{"type":"object","properties":{"vbdt":{"type":"object","properties":{"itemProperties":{"$ref":"#/definitions/extensionSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionKeyedPropsDef"}}},"catalog":{"type":"object","properties":{"apiDecoration":{"$ref":"#/definitions/extensionApiDecorationDef"},"dataProviderProperties":{"$ref":"#/definitions/extensionDataProviderPropsDef"}}},"jet":{"$ref":"#/definitions/extensionJetDef"},"themes":{"$ref":"#/definitions/extensionThemesDef"},"webelement":{"$ref":"#/definitions/extensionWebElementExceptionStatusDef"}}},"extensionVdomPropsDef":{"type":"object","properties":{"vbdt":{"type":"object","properties":{"itemProperties":{"$ref":"#/definitions/extensionVdomSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionVdomKeyedPropsDef"}}}}},"extensionKeyedPropsDef":{"type":"object","properties":{"keys":{"$ref":"#/definitions/keyedPropsKeysDef"},"values":{"type":"object","properties":{"type":{"type":"string"},"properties":{"$ref":"#/definitions/extensionSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionKeyedPropsDef"}}}}},"extensionVdomKeyedPropsDef":{"type":"object","properties":{"keys":{"$ref":"#/definitions/keyedPropsKeysDef"},"values":{"type":"object","properties":{"type":{"type":"string"},"properties":{"$ref":"#/definitions/extensionVdomSubPropsDef"},"keyedProperties":{"$ref":"#/definitions/extensionVdomKeyedPropsDef"}}}}},"extensionCatalogDef":{"type":"object","properties":{"catalog":{"type":"object","properties":{"audits":{"type":"string"},"category":{"type":"string"},"coverImage":{"type":"string"},"docUrl":{"type":"string","format":"uri"},"extraInfo":{"type":"object"},"readme":{"type":"string"},"referenceModules":{"type":"array","items":{"type":"string"}},"screenshots":{"type":"object","patternProperties":{"^(0|([1-9]{1}[0-9]*))$":{"type":"string"}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string"}}}}}},"extensionWebElementDef":{"type":"object","properties":{"webelement":{"type":"object","properties":{"package":{"$comment":"WebElement npm pkg name, with optional scope","type":"string"},"version":{"$ref":"#/definitions/semverRangeDef"},"docUrl":{"type":"string","format":"uri"},"export":{"type":"string"},"main":{"type":"string"}}}}},"extensionWebElementExceptionStatusDef":{"type":"object","properties":{"exceptionStatus":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["deprecated","getterOnly","unsupported"]},"since":{"$ref":"#/definitions/semverExactDef"},"description":{"type":"string"}}}}}},"extensionOracleDef":{"type":"object","properties":{"oracle":{"type":"object","properties":{"businessApprovals":{"type":"object","additionalProperties":{"type":"string"}},"icon":{"type":"string"},"uxSpecs":{"type":"array","items":{"type":"string"}}}}}},"iconsDef":{"type":"object","properties":{"iconPath":{"type":"string"},"selectedIconPath":{"type":"string"},"hoverIconPath":{"type":"string"}},"additionalProperties":false},"keyedPropsKeysDef":{"type":"object","properties":{"type":{"type":"string"},"enumValues":{"type":"array","items":{"type":["string","number"]}}}},"methodParamsDef":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"name":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"type":{"type":"string"}},"required":["name","type"],"additionalProperties":false}},"paramsDef":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionVdomPropsDef"},"name":{"type":"string"},"optional":{"type":"boolean"},"status":{"$ref":"#/definitions/statusDef"},"type":{"type":"string"},"value":{"$comment":"Allow ANY default value for a hook, util parameter"},"properties":{"$ref":"#/definitions/vdomPropsDef"}},"required":["name","type"],"additionalProperties":false}},"returnDef":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionVdomPropsDef"},"status":{"$ref":"#/definitions/statusDef"},"properties":{"$ref":"#/definitions/vdomPropsDef"}},"required":["type"],"additionalProperties":false},"bindingDef":{"type":"object","properties":{"consume":{"type":"object","properties":{"name":{"type":"string"}},"additionalProperties":false},"provide":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"default":{"type":["string","number","boolean","null"]},"transform":{"type":"object","additionalProperties":{"type":["string","number","boolean","null"]}}},"required":["name"],"additionalProperties":false}}},"additionalProperties":false},"minCapabilitiesDef":{"type":"object","properties":{"filter":{"type":"object","properties":{"nestedFilter":{"type":"boolean"},"textFilter":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"propsDef":{"type":"object","$comment":"strict definition for nested Properties; property names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"type":"object","allOf":[{"$ref":"#/definitions/commonPropsMetadataDef"},{"$comment":"list of properties with empty schemas MUST be kept in sync with commonPropsMetadataDef!!","properties":{"enumValues":{},"properties":{"$ref":"#/definitions/propsDef"},"readOnly":{},"type":{},"value":{},"writeback":{},"binding":{},"description":{},"displayName":{},"dynamicSlotDef":{},"eventGroup":{},"exclusiveMaximum":{},"exclusiveMinimum":{},"extension":{"$ref":"#/definitions/extensionPropsDef"},"format":{},"help":{},"maximum":{},"minimum":{},"minCapabilities":{},"pattern":{},"placeholder":{},"propertyEditorValues":{},"propertyGroup":{},"required":{},"status":{},"templateSlotAlias":{},"templateSlotRenderType":{},"translatable":{},"units":{},"visible":{}},"required":["type"],"additionalProperties":false}]}},"additionalProperties":false},"vdomPropsDef":{"type":"object","$comment":"strict definition for nested vdom (Preact) Properties; property names follow JavaScript identifer naming restrictions","patternProperties":{"^[a-zA-Z_$][0-9a-zA-Z_$]*$":{"type":"object","allOf":[{"$ref":"#/definitions/commonVdomPropsMetadataDef"},{"$comment":"list of properties with empty schemas MUST be kept in sync with commonVdomPropsMetadataDef!!","properties":{"type":{},"description":{},"extension":{"$ref":"#/definitions/extensionVdomPropsDef"},"optional":{},"status":{},"value":{},"properties":{"$ref":"#/definitions/vdomPropsDef"}},"required":["type"],"additionalProperties":false}]}},"additionalProperties":false},"methodsDef":{"type":"object","$comment":"method names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"type":"object","properties":{"internalName":{"type":"string","$comment":"method internalNames cannot conflict with reserved JS keywords","not":{"enum":["await","break","case","class","catch","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","implements","import","in","instanceof","interface","let","new","null","package","private","protected","public","return","super","static","switch","this","throw","true","try","typeof","var","void","while","with","yield"]}},"description":{"type":"string"},"displayName":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"params":{"$ref":"#/definitions/methodParamsDef"},"return":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"visible":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"eventsDef":{"type":"object","$comment":"event names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]+)$":{"properties":{"bubbles":{"type":"boolean"},"cancelable":{"type":"boolean"},"description":{"type":"string"},"detail":{"$comment":"we allow the 'detail' key to be an empty string to represent an event payload of a primitive type, array type, etc.","type":"object","patternProperties":{"^([A-Za-z0-9_-])*$":{"type":"object","properties":{"description":{"type":"string"},"type":{"type":"string"},"enumValues":{"type":"array","items":{"type":"string"}},"eventGroup":{"type":"string"},"extension":{"$ref":"#/definitions/extensionPropsDef"},"properties":{"$ref":"#/definitions/propsDef"},"status":{"$ref":"#/definitions/statusDef"}},"additionalProperties":false}},"additionalProperties":false},"displayName":{"type":"string"},"eventGroup":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"visible":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"slotDataDef":{"type":"object","patternProperties":{"^([A-Za-z0-9_-])+$":{"type":"object","properties":{"description":{"type":"string"},"type":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"properties":{"$ref":"#/definitions/propsDef"},"status":{"$ref":"#/definitions/statusDef"}},"additionalProperties":false}},"additionalProperties":false},"slotsDef":{"type":"object","$comment":"slot names & dynamic slot definition names follow HTML attribute name restrictions","patternProperties":{"^([^\t\n\f />\"'=]*)$":{"type":"object","properties":{"data":{"$ref":"#/definitions/slotDataDef"},"description":{"type":"string"},"displayName":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"implicitBusyContext":{"type":"boolean"},"maxItems":{"type":"number","multipleOf":1},"minItems":{"type":"number","multipleOf":1,"minimum":0},"preferredContent":{"type":"array","items":{"type":"string"}},"status":{"$ref":"#/definitions/statusDef"},"templateSlotAlias":{"type":"string"},"templateSlotRenderType":{"$comment":"deprecated since 19.0.0 - use templateSlotAlias instead","type":"string"},"visible":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"pathsDef":{"type":"object","properties":{"cdn":{"type":"object","properties":{"min":{"type":"string","format":"uri"},"debug":{"type":"string","format":"uri"}},"additionalProperties":false},"npm":{"type":"object","properties":{"min":{"type":"string"},"debug":{"type":"string"}},"additionalProperties":false},"name":{"type":"string"}},"additionalProperties":false},"propertyGroupObjDef":{"type":"object","properties":{"propertyGroup":{"type":"string"},"displayName":{"type":"string"},"items":{"type":"array","items":{"anyOf":[{"type":"string"},{"$ref":"#/definitions/propertyGroupObjDef"}]}}},"additionalProperties":false},"requirementDef":{"type":"object","properties":{"type":{"type":"string","enum":["anyOf","not"]},"label":{"type":"string"},"description":{"type":"string"},"properties":{"type":"array","items":{"type":"string"}},"slots":{"type":"array","items":{"type":"string"}}},"required":["type","label"],"additionalProperties":false},"semverExactDef":{"type":"string","$comment":"validates an EXACT semver string -- MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD], PRERELEASE and BUILD are optional -- see https://semver.org for details","pattern":"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"},"semverRangeDef":{"type":"string","$comment":"validates a semver range -- see https://github.com/npm/node-semver#ranges, https://github.com/npm/node-semver#advanced-range-syntax for details","pattern":"^(((=|>=|<=|=>|=<|>|<|!=|~|\\^)?(0|x|X|\\*|[1-9]\\d*)(\\.(0|x|X|\\*|[1-9]\\d*)){0,2}(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)(\\s|\\s\\|\\|\\s|\\s-\\s)?)+$"},"statusDef":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["antiPattern","candidate","deprecated","maintenance","production","supersedes"]},"since":{"$ref":"#/definitions/semverExactDef"},"description":{"type":"string"},"target":{"type":"string","enum":["propertyType","parameterType","returnType","propertyValue"]},"themes":{"type":"array","items":{"$ref":"#/definitions/availableThemesDef"}},"value":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"allOf":[{"if":{"$comment":"if the Status 'type' is explicitly set to anything other than 'antiPattern', then 'themes' is invalid","properties":{"type":{"not":{"const":"antiPattern"}}},"required":["type"]},"then":{"propertyNames":{"not":{"const":"themes"}}},"else":{"if":{"$comment":"otherwise if the Status 'type' is explicitly set to 'antiPattern', then 'themes' is required","properties":{"type":{"const":"antiPattern"}},"required":["type"]},"then":{"required":["themes"]}}},{"if":{"$comment":"if the Status 'type' is explicitly set to 'candidate', 'maintenance', 'production', or 'supersedes', then 'target' is invalid","properties":{"type":{"enum":["candidate","maintenance","production","supersedes"]}},"required":["type"]},"then":{"propertyNames":{"not":{"const":"target"}}}}]}},"styleClassItemDef":{"$comment":"Union of styleClass, styleSet, and styleTemplate properties, allowing for effective auto-completion in code editors","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["class","set","template"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleRelation":{"type":"string","enum":["exclusive","inclusive"]},"styleSelector":{"type":"string"},"styleItems":{"type":"array","items":{"$ref":"#/definitions/styleClassItemDef"}},"tokens":{"type":"array","items":{"$ref":"#/definitions/styleTemplateTokenDef"}}}},"styleClassStrictDef":{"$comment":"Strict styleClass definition (for conditional validation)","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["class"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleSelector":{"type":"string"}},"required":["name","kind"],"additionalProperties":false},"styleSetStrictDef":{"$comment":"Strict styleSet definition (for conditional validation)","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["set"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleRelation":{"type":"string","enum":["exclusive","inclusive"]},"styleItems":{"type":"array","items":{"anyOf":[{"$ref":"#/definitions/styleClassStrictDef"},{"$ref":"#/definitions/styleSetStrictDef"},{"$ref":"#/definitions/styleTemplateStrictDef"}]}}},"required":["name","kind","styleRelation","styleItems"],"additionalProperties":false},"styleTemplateStrictDef":{"$comment":"Strict styleTemplate definition (for conditional validation)","type":"object","properties":{"name":{"type":"string"},"kind":{"type":"string","enum":["template"]},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"help":{"type":"string"},"scope":{"type":"string","enum":["public","protected"]},"status":{"$ref":"#/definitions/statusDef"},"styleSelector":{"type":"string"},"tokens":{"type":"array","items":{"$ref":"#/definitions/styleTemplateTokenDef"}}},"required":["name","kind","tokens"],"additionalProperties":false},"styleTemplateTokenDef":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"styleRelation":{"type":"string","enum":["exclusive","inclusive"]},"values":{"type":"array","items":{"$ref":"#/definitions/styleTemplateTokenValueDef"}}},"required":["name","styleRelation","values"],"additionalProperties":false},"styleTemplateTokenValueDef":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"}},"required":["name"],"additionalProperties":false},"deprecatedStyleGroupDef":{"$comment":"DEPRECATED IN RELEASE 8.0.0.  SHOULD BE REMOVED WHEN THAT RELEASE REACHES ITS END-OF-LIFE.","type":"object","properties":{"styleGroup":{"type":"array","items":{"type":"string"}},"description":{"type":"string"}},"additionalProperties":false},"styleVariableDef":{"type":"object","properties":{"name":{"type":"string"},"displayName":{"type":"string"},"description":{"type":"string"},"extension":{"$ref":"#/definitions/extensionDef"},"formats":{"type":"array","items":{"type":"string","enum":["color","font_weight","length","number","percentage","rgb_values","time"]}},"help":{"type":"string"},"keywords":{"type":"array","items":{"type":"string"}},"status":{"$ref":"#/definitions/statusDef"}},"required":["name"],"additionalProperties":false},"contentItemsDef":{"type":"object","properties":{"name":{"$ref":"#/definitions/jetCustomElementNameDef"},"defaultExport":{"type":"boolean"},"description":{"type":"string"},"displayName":{"type":"string"},"export":{"type":"string"},"help":{"type":"string"},"main":{"type":"string"},"readme":{"type":"string"},"status":{"$ref":"#/definitions/statusDef"},"type":{"type":"string","enum":["component","resource","vdom","hook","util","vbcs-pattern","vbcs-fragment"]},"metadata":{"type":"string"}},"required":["name"],"allOf":[{"$comment":"if the content type is 'component' (default), 'resource', 'vdom', 'hook', 'vbcs-pattern', or 'vbcs-fragment' then 'defaultExport' is invalid","if":{"oneOf":[{"not":{"required":["type"]}},{"properties":{"type":{"enum":["component","resource","vdom","hook","vbcs-pattern","vbcs-fragment"]}},"required":["type"]}]},"then":{"propertyNames":{"not":{"enum":["defaultExport"]}}}},{"$comment":"if the content type is not explicitly set to 'vbcs-pattern' or 'vbcs-fragment' then 'metadata' is invalid","if":{"properties":{"type":{"not":{"enum":["vbcs-pattern","vbcs-fragment"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["metadata"]}}}},{"$comment":"if the content type is explicitly set to 'resource', 'vbcs-pattern', or 'vbcs-fragment' then 'export' is invalid","if":{"properties":{"type":{"enum":["resource","vbcs-pattern","vbcs-fragment"]}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["export"]}}}}],"additionalProperties":false},"contentsDef":{"type":"array","items":{"$ref":"#/definitions/contentItemsDef"}},"commonContentsPropNamesDef":{"enum":["name","type","description","displayName","defaultExport","export","main","since","status","version","jetVersion","pack","license","extension","help","icon"]},"preferredParentItemDef":{"type":"object","properties":{"parentInterface":{"type":"string"},"isDirectParent":{"type":"boolean"},"extension":{"$ref":"#/definitions/extensionDef"},"status":{"$ref":"#/definitions/statusDef"}},"required":["parentInterface"]},"availableThemesDef":{"anyOf":[{"type":"string","enum":["Alta","Redwood","Stable"]},{"type":"string"}]}},"properties":{"name":{"$ref":"#/definitions/jetCustomElementNameDef"},"version":{"$ref":"#/definitions/semverExactDef"},"jetVersion":{"$ref":"#/definitions/semverRangeDef"},"actionParams":{"$ref":"#/definitions/methodParamsDef"},"actionResult":{"type":"string"},"bundles":{"type":"object","patternProperties":{"^([A-Za-z0-9_/-])+$":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"contents":{"$ref":"#/definitions/contentsDef"},"defaultExport":{"type":"boolean"},"demoFor":{"type":"array","items":{"type":"string"}},"dependencies":{"$comment":"either an @dependencies@ token string OR an object with key-value pairs","oneOf":[{"const":"@dependencies@"},{"type":"object","additionalProperties":{"$comment":"values in 'dependencies' key-value pairs are USUALLY valid semver ranges, but JET Packs require exact semvers -- see conditional rules below","type":"string"}}]},"dependencyScope":{"type":"string","enum":["installable","provided","runtime"]},"description":{"type":"string"},"displayName":{"type":"string"},"export":{"type":"string"},"properties":{"$comment":"see conditional validation rules below for component type-specific definition of 'properties' metadata"},"methods":{"$ref":"#/definitions/methodsDef"},"events":{"$ref":"#/definitions/eventsDef"},"slots":{"$ref":"#/definitions/slotsDef"},"dynamicSlots":{"$ref":"#/definitions/slotsDef"},"extension":{"allOf":[{"$ref":"#/definitions/extensionComponentDef"},{"$ref":"#/definitions/extensionCatalogDef"},{"$ref":"#/definitions/extensionWebElementDef"},{"$ref":"#/definitions/extensionOracleDef"}]},"help":{"type":"string"},"icon":{"$ref":"#/definitions/iconsDef"},"implements":{"type":"array","items":{"type":"string"}},"license":{"type":"string"},"main":{"type":"string"},"pack":{"type":"string","pattern":"^([a-z][a-z0-9_-]*)$"},"package":{"type":"string"},"params":{"$comment":"needed for 'hook', 'util' types","$ref":"#/definitions/paramsDef"},"paths":{"oneOf":[{"$ref":"#/definitions/pathsDef"},{"type":"array","items":{"$ref":"#/definitions/pathsDef"}}]},"preferredParent":{"type":"array","items":{"$ref":"#/definitions/preferredParentItemDef"}},"propertyLayout":{"type":"array","items":{"$ref":"#/definitions/propertyGroupObjDef"}},"publicModules":{"type":"array","items":{"type":"string"}},"requirements":{"type":"array","items":{"$ref":"#/definitions/requirementDef"}},"return":{"$comment":"needed for 'hook', 'util' types","$ref":"#/definitions/returnDef"},"since":{"$ref":"#/definitions/semverExactDef"},"status":{"$ref":"#/definitions/statusDef"},"styleClasses":{"type":"array","items":{"$ref":"#/definitions/styleClassItemDef"}},"styleVariables":{"type":"array","items":{"$ref":"#/definitions/styleVariableDef"}},"subcomponentType":{"type":"string","enum":["data","patternImpl","packPrivate"]},"translationBundle":{"type":"string"},"type":{"type":"string","enum":["composite","core","pack","mono-pack","reference","resource","demo","stripe","vdom","hook","util","vbcs-pattern","vbcs-template","vbcs-action","vbcs-fragment"]},"typesRoot":{"type":"string"}},"patternProperties":{"^x-.+$":{"$comment":"Also allow OpenAPI extension properties at the top level."}},"required":["name"],"additionalProperties":false,"$comment":"the following 'allOf' array entries specify conditional validation rules, per JSON Schema draft-07","allOf":[{"$comment":"if the 'type' property is explicity set to 'vdom', 'hook', or 'util', then 'main' is required AND use 'vdomPropsDef' definition for 'properties' metadata; else use 'propsDef' definition","if":{"properties":{"type":{"enum":["vdom","hook","util"]}},"required":["type"]},"then":{"properties":{"properties":{"$ref":"#/definitions/vdomPropsDef"}},"required":["main"]},"else":{"properties":{"properties":{"$ref":"#/definitions/propsDef"}}}},{"$comment":"if the 'type' property is explicitly set to anything other than 'composite' or 'core', then 'implements','preferredParent', and 'requirements' are invalid","if":{"properties":{"type":{"not":{"enum":["core","composite"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["implements","preferredParent","requirements"]}}}},{"$comment":"if the 'type' property is explicitly set to anything other than 'composite', 'core', 'vdom', 'hook' or 'util', then 'export' and 'main' are invalid","if":{"properties":{"type":{"not":{"enum":["core","composite","vdom","hook","util"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["export","main"]}}}},{"$comment":"if the component type is explicitly set to 'core', then the 'since' property is required","if":{"properties":{"type":{"const":"core"}},"required":["type"]},"then":{"required":["since"]}},{"$comment":"if optional 'styleClasses' metadata exists, then apply strict validation rules","if":{"required":["styleClasses"]},"then":{"$comment":"stricter rules for 'styleClasses' metadata for validation purposes -- this will simplify once deprecated 'styleGroup' reaches end-of-life","oneOf":[{"$comment":"EITHER an array in which all items are instances of new 'styleClasses' metadata...","properties":{"styleClasses":{"type":"array","items":{"anyOf":[{"$ref":"#/definitions/styleClassStrictDef"},{"$ref":"#/definitions/styleSetStrictDef"},{"$ref":"#/definitions/styleTemplateStrictDef"}]}}}},{"$comment":"...OR an array in which all items are instances of old, deprecated 'styleGroup' metadata","properties":{"styleClasses":{"type":"array","items":{"$ref":"#/definitions/deprecatedStyleGroupDef"}}}}]}},{"$comment":"if the component type is explicitly set to 'reference', then the 'package' property is required","if":{"properties":{"type":{"const":"reference"}},"required":["type"]},"then":{"required":["package"]},"else":{"$comment":"otherwise, if the component type is not explicitly set to 'mono-pack', then 'package' property is invalid","if":{"not":{"properties":{"type":{"const":"mono-pack"}},"required":["type"]}},"then":{"propertyNames":{"not":{"enum":["package"]}}}}},{"$comment":"if the component type is explicitly NOT 'resource', then the 'publicModules' property is invalid","if":{"properties":{"type":{"not":{"const":"resource"}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["publicModules"]}}}},{"$comment":"if the component type is explicitly set to 'pack', then values of 'dependencies' property key-value pairs must be exact semver strings AND 'pack' property is invalid (nested JET Packs not allowed)","if":{"properties":{"type":{"const":"pack"}},"required":["type"]},"then":{"properties":{"dependencies":{"oneOf":[{"const":"@dependencies@"},{"type":"object","additionalProperties":{"$ref":"#/definitions/semverExactDef"}}]}},"propertyNames":{"not":{"enum":["pack"]}}},"else":{"$comment":"otherwise, the values of 'dependencies' property key-value pairs must be a semver range string","properties":{"dependencies":{"oneOf":[{"const":"@dependencies@"},{"type":"object","additionalProperties":{"$ref":"#/definitions/semverRangeDef"}}]}}}},{"$comment":"if the component type is explicitly set to 'mono-pack', then the 'contents', 'jetVersion', and 'version' properties are required AND 'pack' property is invalid (nested JET Packs not allowed)","if":{"properties":{"type":{"const":"mono-pack"}},"required":["type"]},"then":{"required":["contents","jetVersion","version"],"propertyNames":{"not":{"enum":["pack"]}}},"else":{"$comment":"otherwise, the 'contents' and 'typesRoot' properties are invalid (reserved for mono-packs)","propertyNames":{"not":{"enum":["contents","typesRoot"]}}}},{"$comment":"if the component type is explicitly set to 'reference', then the 'jetVersion' property is invalid","if":{"properties":{"type":{"const":"reference"}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["jetVersion"]}}}},{"$comment":"if the component type is explicitly neither 'mono-pack' nor 'reference', then the 'translationBundle' property is invalid","if":{"properties":{"type":{"not":{"enum":["mono-pack","reference"]}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["translationBundle"]}}}},{"$comment":"if the component type is explicitly set to 'vdom', then only a subset of metadata properties are supported","if":{"properties":{"type":{"const":"vdom"}},"required":["type"]},"then":{"propertyNames":{"anyOf":[{"$ref":"#/definitions/commonContentsPropNamesDef"},{"enum":["properties"]}]}}},{"$comment":"if the component type is explicitly set to 'hook' or 'util', then only a subset of metadata properties are supported","if":{"properties":{"type":{"enum":["hook","util"]}},"required":["type"]},"then":{"propertyNames":{"anyOf":[{"$ref":"#/definitions/commonContentsPropNamesDef"},{"enum":["params","return"]}]},"required":["params","return"]},"else":{"$comment":"otherwise, the 'params' and 'return' properties are invalid (reserved for 'hook' and 'util')","propertyNames":{"not":{"enum":["params","return"]}}}},{"$comment":"if the component type is explicitly NOT 'util', then the 'defaultExport' property is invalid","if":{"properties":{"type":{"not":{"const":"util"}}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["defaultExport"]}}}},{"$comment":"if the component type is explicitly set to 'demo', then the 'demoFor' property is required; else the 'demoFor' property is invalid","if":{"properties":{"type":{"const":"demo"}},"required":["type"]},"then":{"required":["demoFor"]},"else":{"propertyNames":{"not":{"enum":["demoFor"]}}}},{"$comment":"if the component type is explicitly set to 'stripe', then 'pack' property is invalid (stripe components are always singletons)","if":{"properties":{"type":{"const":"stripe"}},"required":["type"]},"then":{"propertyNames":{"not":{"enum":["pack"]}}}},{"$comment":"if the component type is explicitly set to 'vbcs-action', then the 'actionParams' and 'actionResult' properties are required; otherwise they are invalid","if":{"properties":{"type":{"const":"vbcs-action"}},"required":["type"]},"then":{"required":["actionParams","actionResult"]},"else":{"propertyNames":{"not":{"enum":["actionParams","actionResult"]}}}},{"$comment":"if the component type is NOT 'vbcs-fragment', then apply additional restrictions to property, event names; otherwise 'methods' is invalid","if":{"oneOf":[{"not":{"required":["type"]}},{"properties":{"type":{"not":{"const":"vbcs-fragment"}}},"required":["type"]}]},"then":{"properties":{"properties":{"$ref":"#/definitions/propNameRestrictionsDef"},"events":{"$ref":"#/definitions/eventNameRestrictionsDef"}}},"else":{"propertyNames":{"not":{"enum":["methods"]}}}}]}