@kosdev-code/kos-ui-plugin 2.1.20 → 2.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../../../../node_modules/stylis/src/Enum.js","../../../../node_modules/stylis/src/Utility.js","../../../../node_modules/stylis/src/Tokenizer.js","../../../../node_modules/stylis/src/Parser.js","../../../../node_modules/stylis/src/Serializer.js","../../../../node_modules/stylis/src/Middleware.js","../../../../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../../../../node_modules/react-is/cjs/react-is.production.min.js","../../../../node_modules/react-is/cjs/react-is.development.js","../../../../node_modules/react-is/index.js","../../../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../../../../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../../../../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../../../../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../../../../node_modules/@emotion/serialize/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../../../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../../../../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../../../../node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js","../../../../node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js","../../../../packages/sdk/kos-ui-plugin/src/lib/contexts/reactive-extension-registry-context.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-reactive-extension-registry.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-extension-point.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-dynamic-component.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/dynamic-component/error-boundary.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/dynamic-component/dynamic-component.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/plugin-explorer/extension-point-list.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/contexts/plugins-provider/plugins-provider.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-plugin-discovery.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/plugin-explorer/plugin-card.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/plugin-explorer/plugin-health-dashboard.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/plugin-explorer/plugin-explorer.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/plugin-explorer/floating-plugin-explorer.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-extension-component.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-typed-extensions.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-extension-i18n.tsx"],"sourcesContent":["var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n } // this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n this.tags.forEach(function (tag) {\n var _tag$parentNode;\n\n return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value;\n var parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else if (className) {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","import * as React from 'react';\n\nvar syncFallback = function syncFallback(create) {\n return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","import * as React from 'react';\nimport { useContext, forwardRef } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar isBrowser = \"object\" !== 'undefined';\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nif (!isBrowser) {\n withEmotionCache = function withEmotionCache(func) {\n return function (props) {\n var cache = useContext(EmotionCacheContext);\n\n if (cache === null) {\n // yes, we're potentially creating this on every render\n // it doesn't actually matter though since it's only on the server\n // so there will only every be a single render\n // that could change in the future because of suspense and etc. but for now,\n // this works and i don't want to optimise for a future thing that we aren't sure about\n cache = createCache({\n key: 'css'\n });\n return /*#__PURE__*/React.createElement(EmotionCacheContext.Provider, {\n value: cache\n }, func(props, cache));\n } else {\n return func(props, cache);\n }\n };\n };\n}\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = React.useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = React.useContext(ThemeContext);\n return /*#__PURE__*/React.createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/React.forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getLastPart = function getLastPart(functionName) {\n // The match may be something like 'Object.createEmotionProps' or\n // 'Loader.prototype.render'\n var parts = functionName.split('.');\n return parts[parts.length - 1];\n};\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n if (match) return getLastPart(match[1]); // Safari / Firefox\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return getLastPart(match[1]);\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nvar Emotion$1 = Emotion;\n\nexport { CacheProvider as C, Emotion$1 as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, isBrowser as i, useTheme as u, withEmotionCache as w };\n","import * as ReactJSXRuntime from 'react/jsx-runtime';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps } from '../../dist/emotion-element-c39617d8.browser.esm.js';\nimport 'react';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\nimport '@emotion/utils';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\n\nvar Fragment = ReactJSXRuntime.Fragment;\nfunction jsx(type, props, key) {\n if (!hasOwnProperty.call(props, 'css')) {\n return ReactJSXRuntime.jsx(type, props, key);\n }\n\n return ReactJSXRuntime.jsx(Emotion, createEmotionProps(type, props), key);\n}\nfunction jsxs(type, props, key) {\n if (!hasOwnProperty.call(props, 'css')) {\n return ReactJSXRuntime.jsxs(type, props, key);\n }\n\n return ReactJSXRuntime.jsxs(Emotion, createEmotionProps(type, props), key);\n}\n\nexport { Fragment, jsx, jsxs };\n","import { createContext } from \"react\";\nimport type { ReactiveExtensionRegistry } from \"../utils/reactive-extension-registry\";\n\n/**\n * Context for ReactiveExtensionRegistry\n *\n * Provides access to the reactive extension registry throughout the component tree.\n * The registry is created by the PluginsProvider and manages reactive extension state.\n */\nexport const ReactiveExtensionRegistryContext =\n createContext<ReactiveExtensionRegistry | null>(null);\n","import { useContext } from \"react\";\nimport { ReactiveExtensionRegistryContext } from \"../contexts/reactive-extension-registry-context\";\n\n/**\n * Custom hook for accessing the ReactiveExtensionRegistry\n *\n * Provides access to the reactive extension registry that filters contributions\n * by enabled state and emits change events.\n *\n * @throws Error if used outside of ReactiveExtensionRegistryProvider\n * @returns ReactiveExtensionRegistry instance\n *\n * @example\n * ```typescript\n * function MyComponent() {\n * const registry = useReactiveExtensionRegistry();\n * const extensions = registry.getExtensions('ddk.settings.view');\n * // ...\n * }\n * ```\n */\nexport const useReactiveExtensionRegistry = () => {\n const registry = useContext(ReactiveExtensionRegistryContext);\n if (!registry) {\n throw new Error(\n \"useReactiveExtensionRegistry must be used within a component that has access to ReactiveExtensionRegistryContext\"\n );\n }\n return registry;\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport type { PluginExtension } from \"../../types/plugins\";\nimport { resolveBestExtension } from \"../utils/plugin-system/resolve-best-extension\";\nimport { useReactiveExtensionRegistry } from \"./use-reactive-extension-registry\";\n\n/**\n * NOTE: This file exports `useReactiveExtensions` (not `useExtensionPoint`)\n * to avoid naming conflict with the existing `useExtensionPoint` hook in\n * use-plugin-discovery.tsx which returns discovery metadata (ExtensionPointInfo).\n *\n * This hook returns reactive plugin extensions with automatic re-rendering.\n */\n\n/**\n * Options for useExtensionPoint hook\n */\nexport interface UseExtensionPointOptions {\n /**\n * If true, include disabled contributions in results\n * Default: false\n */\n includeDisabled?: boolean;\n\n /**\n * If true, automatically resolve the best contribution\n * Default: false\n */\n autoResolve?: boolean;\n}\n\n/**\n * Return value from useExtensionPoint hook\n */\nexport interface UseExtensionPointResult {\n /**\n * Extensions for the extension point, filtered by enabled state\n */\n extensions: Record<string, PluginExtension>;\n\n /**\n * Best contribution (if autoResolve enabled)\n */\n best: PluginExtension | null;\n\n /**\n * Whether extensions are loading (always false for now)\n */\n isLoading: boolean;\n}\n\n/**\n * React hook to use reactive extensions for an extension point\n *\n * This hook provides reactive access to plugin extensions for a specific extension point.\n * It automatically subscribes to contribution state changes and triggers re-renders\n * when contributions are enabled/disabled or when the best contribution changes.\n *\n * Key features:\n * - Filters extensions by enabled state (by default)\n * - Subscribes to extension point changes\n * - Triggers re-render when contributions change\n * - Automatically resolves best contribution (optional)\n * - Cleans up subscriptions on unmount\n *\n * @param extensionPoint - Extension point identifier (e.g., 'ddk.settings.view')\n * @param options - Configuration options\n * @returns Object with extensions, best contribution, and loading state\n *\n * @example\n * ```typescript\n * // Get only enabled extensions\n * function SettingsPage() {\n * const { extensions } = useReactiveExtensions('ddk.settings.view');\n * // Component re-renders when contributions are enabled/disabled\n * return <div>{Object.keys(extensions).length} settings available</div>;\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Auto-resolve best contribution\n * function HomePage() {\n * const { best } = useReactiveExtensions('ddk.home.hero', {\n * autoResolve: true\n * });\n * // Component re-renders when best contribution changes\n * return <div>Best hero: {best?.id}</div>;\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Include disabled contributions\n * function DebugPanel() {\n * const { extensions } = useReactiveExtensions('ddk.features', {\n * includeDisabled: true\n * });\n * // Shows all contributions regardless of enabled state\n * return <div>Total features: {Object.keys(extensions).length}</div>;\n * }\n * ```\n */\nexport function useReactiveExtensions(\n extensionPoint: string,\n options?: UseExtensionPointOptions\n): UseExtensionPointResult {\n const registry = useReactiveExtensionRegistry();\n const includeDisabled = options?.includeDisabled ?? false;\n const autoResolve = options?.autoResolve ?? false;\n\n // Initialize with current extensions\n const [extensions, setExtensions] = useState<Record<string, PluginExtension>>(\n () => registry.getExtensions(extensionPoint, includeDisabled)\n );\n\n // Subscribe to extension point changes\n useEffect(() => {\n // Update to current state first (in case it changed before subscription)\n setExtensions(registry.getExtensions(extensionPoint, includeDisabled));\n\n // Subscribe to future changes\n const unsubscribe = registry.subscribe(extensionPoint, () => {\n // Refresh extensions when state changes\n setExtensions(registry.getExtensions(extensionPoint, includeDisabled));\n });\n\n // Cleanup subscription on unmount\n return unsubscribe;\n }, [registry, extensionPoint, includeDisabled]);\n\n // Calculate best contribution (memoized to avoid recalculating on every render)\n const best = useMemo(() => {\n if (!autoResolve) {\n return null;\n }\n return resolveBestExtension(extensions);\n }, [extensions, autoResolve]);\n\n return {\n extensions,\n best,\n isLoading: false, // Not async, so never loading\n };\n}\n","import { loadRemoteModule } from \"@nx/react/mf\";\n\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport type {\n BasePluginExtension,\n BaseViewPluginExtension,\n} from \"../../types/plugins\";\nimport { resolveBestExtension } from \"../utils/plugin-system/resolve-best-extension\";\nimport { useReactiveExtensions } from \"./use-extension-point\";\n\ninterface Props {\n /**\n * The extension point ID to resolve plugin modules from.\n * Example: \"ddk.ncui.settings.tabView\"\n */\n extension: string;\n\n /**\n * Optional module ID to load a specific plugin.\n * If not provided, the plugin with the **lowest rank** for the extension point is used.\n */\n module?: string;\n\n /**\n * Whether to show fallback when specified module is disabled\n * Default: true\n */\n fallbackOnDisabled?: boolean;\n\n /**\n * Whether to automatically switch to next best when current becomes disabled\n * Only applies if fallbackOnDisabled is false\n * Default: false\n */\n autoSwitchOnDisabled?: boolean;\n}\n\ntype DynamicComponentResult = [\n React.FunctionComponent | null,\n BasePluginExtension | null\n];\n\n/**\n * Determines whether a plugin extension follows the \"view\" structure.\n * This allows resolving the correct field (`view.component` vs `component`) when loading.\n */\nconst isViewPlugin = (module: any): module is BaseViewPluginExtension =>\n module?.view?.component !== undefined;\n\n/**\n * React hook to resolve and lazily load a plugin component for a given extension point.\n *\n * - If `module` is provided, it directly loads that plugin.\n * - If `module` is not provided, it uses the **lowest-ranked plugin** from the extension point.\n * - Supports both standard plugins (`component`) and view-style plugins (`view.component`)\n * - Uses React.lazy + Module Federation to dynamically import the remote component.\n *\n * @param props.extension The extension point to resolve plugins from\n * @param props.module (Optional) Specific module ID to use, otherwise the highest-priority plugin is loaded\n * @returns A tuple: `[Component, PluginExtension]`\n */\nexport const useDynamicComponent = ({\n extension,\n module,\n fallbackOnDisabled = true,\n autoSwitchOnDisabled = false,\n}: Props): DynamicComponentResult => {\n // Use the reactive useReactiveExtensions hook to get filtered extensions\n const { extensions } = useReactiveExtensions(extension, {\n includeDisabled: false, // Only get enabled contributions\n autoResolve: false, // We'll resolve manually based on module prop\n });\n\n const [Component, setComponent] = useState<React.FunctionComponent | null>(\n null\n );\n const [extensionPoint, setExtensionPoint] =\n useState<BasePluginExtension | null>(null);\n\n // Determine which module to use (memoized to avoid recalculation)\n const targetModule = useMemo(() => {\n // Case 1: Specific module requested\n if (module) {\n const requestedModule = extensions[module];\n\n // Check if requested module exists and is enabled\n if (requestedModule) {\n return requestedModule;\n }\n\n // Module not found or disabled\n if (autoSwitchOnDisabled && !fallbackOnDisabled) {\n // Switch to best alternative\n return resolveBestExtension(extensions);\n }\n\n // Show fallback (return null)\n return null;\n }\n\n // Case 2: No specific module - use best\n return resolveBestExtension(extensions);\n }, [extensions, module, fallbackOnDisabled, autoSwitchOnDisabled]);\n\n useEffect(() => {\n async function loadComponent() {\n // Use the target module from useMemo\n const _module = targetModule;\n\n setExtensionPoint(_module ?? null);\n\n const remote = _module?.remote || \"\";\n\n // Resolve the component path for the module\n const componentName = isViewPlugin(_module)\n ? _module.view.component\n : _module?.component;\n\n const componentPath = componentName ? `./${componentName}` : \"\";\n\n if (!remote) {\n // No remote means no enabled extensions - clear Component to trigger fallback rendering\n setComponent(null);\n return;\n }\n\n // Load the component using Module Federation\n const Comp = React.lazy(() => loadRemoteModule(remote, componentPath));\n setComponent(Comp);\n }\n\n loadComponent();\n }, [targetModule]);\n\n return [Component, extensionPoint];\n};\n","import React from \"react\";\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n}\n\ninterface ErrorBoundaryProps {\n fallback: React.ReactNode;\n children: React.ReactNode;\n}\n\nexport class ErrorBoundaryWithFallback extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(): ErrorBoundaryState {\n return { hasError: true };\n }\n\n override componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error(\"ErrorBoundary caught an error:\", error, errorInfo);\n }\n\n override render() {\n if (this.state.hasError) {\n return this.props.fallback;\n }\n\n return this.props.children;\n }\n}\n","import styled from \"@emotion/styled\";\nimport React, { Suspense } from \"react\";\nimport { useDynamicComponent } from \"../../hooks/use-dynamic-component\";\nimport { ErrorBoundaryWithFallback } from \"./error-boundary\";\n\nconst NotFound = styled.div`\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: center;\n width: 100%;\n`;\n\n/**\n * Props for DynamicComponent\n */\ninterface Props {\n /**\n * Extension point identifier (e.g., 'ddk.settings.view')\n */\n extension: string;\n\n /**\n * Fallback component to show when no component available\n */\n fallback?: React.ReactNode;\n\n /**\n * Specific module ID to load\n * If not provided, loads best-ranked enabled contribution\n */\n module?: string;\n\n /**\n * Props to pass to the loaded component\n */\n props?: any;\n\n /**\n * Whether to show fallback when specified module is disabled\n * Default: true\n */\n fallbackOnDisabled?: boolean;\n\n /**\n * Whether to automatically switch to next best when current becomes disabled\n * Only applies if fallbackOnDisabled is false\n * Default: false\n */\n autoSwitchOnDisabled?: boolean;\n}\n\nconst Skeleton = styled.div<{ width: string; height: string }>`\n align-items: center;\n background-color: transparent;\n display: flex;\n flex-direction: column;\n height: ${(props) => props.height};\n justify-content: center;\n width: ${(props) => props.width};\n`;\n\n/**\n * DynamicComponent - Dynamically loads and renders plugin components\n *\n * This component provides reactive plugin loading with automatic re-rendering\n * when contribution states change. It supports:\n * - Automatic filtering of disabled contributions\n * - Fallback rendering when modules become disabled\n * - Auto-switching to best alternative when current module disabled\n * - Backward compatibility with existing usage\n *\n * @example\n * ```typescript\n * // Basic usage - shows best enabled contribution\n * <DynamicComponent\n * extension=\"ddk.settings.view\"\n * fallback={<DefaultSettings />}\n * />\n * ```\n *\n * @example\n * ```typescript\n * // Specific module with fallback on disabled\n * <DynamicComponent\n * extension=\"ddk.features\"\n * module=\"premium-feature\"\n * fallback={<BasicFeature />}\n * fallbackOnDisabled={true}\n * />\n * ```\n *\n * @example\n * ```typescript\n * // Auto-switch to alternative when disabled\n * <DynamicComponent\n * extension=\"ddk.features\"\n * module=\"premium-feature\"\n * fallback={<BasicFeature />}\n * fallbackOnDisabled={false}\n * autoSwitchOnDisabled={true}\n * />\n * ```\n */\nexport const DynamicComponent: React.FunctionComponent<Props> = ({\n extension,\n fallback,\n module,\n props,\n fallbackOnDisabled = true,\n autoSwitchOnDisabled = false,\n}) => {\n // Get the reactive component and extension point\n // This automatically re-renders when contribution states change\n const [Component, extensionPoint] = useDynamicComponent({\n extension,\n module,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n });\n\n // Determine if we should show the component or fallback\n // Note: useDynamicComponent already filters by enabled state,\n // so if Component is null, the module is either not found or disabled\n const shouldShowFallback = !Component;\n\n const fb = fallback || (\n <NotFound>{`Dynamic component, ${extension}, not found...`}</NotFound>\n );\n\n // Show fallback if no component available\n if (shouldShowFallback) {\n return <>{fb}</>;\n }\n\n // Render the component\n return (\n <ErrorBoundaryWithFallback fallback={fb}>\n <Suspense\n fallback={\n extensionPoint?.size ? (\n <Skeleton\n width={extensionPoint.size.width}\n height={extensionPoint.size.height}\n />\n ) : null\n }\n >\n <Component {...props} />\n </Suspense>\n </ErrorBoundaryWithFallback>\n );\n};\n","/**\n * Extension Point List Component\n *\n * Focused component for displaying a searchable list of extension points.\n * Single responsibility: List display and selection.\n */\n\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport type { ExtensionPointInfo } from \"../../utils\";\n\nexport interface ExtensionPointListProps {\n extensionPoints: ExtensionPointInfo[];\n selectedExtensionId: string | null;\n onExtensionSelect: (extensionId: string) => void;\n searchTerm: string;\n onSearchChange: (searchTerm: string) => void;\n className?: string;\n}\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0; /* Important for flexbox children to shrink */\n`;\n\nconst Header = styled.div`\n padding: 16px;\n border-bottom: 1px solid #e1e5e9;\n background: #f6f8fa;\n flex-shrink: 0; /* Prevent header from shrinking */\n`;\n\nconst Title = styled.h3`\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: #24292f;\n`;\n\nconst SearchInput = styled.input`\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #d0d7de;\n border-radius: 6px;\n font-size: 14px;\n box-sizing: border-box;\n\n &:focus {\n outline: none;\n border-color: #0969da;\n box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.1);\n }\n`;\n\nconst List = styled.div`\n flex: 1;\n overflow-y: auto;\n min-height: 0; /* Critical for making overflow work in flexbox */\n`;\n\nconst ListItem = styled.div<{ selected: boolean }>`\n padding: 12px 16px;\n border-bottom: 1px solid #f0f0f0;\n cursor: pointer;\n background: ${(props) => (props.selected ? \"#f6f8fa\" : \"white\")};\n border-left: 3px solid\n ${(props) => (props.selected ? \"#0969da\" : \"transparent\")};\n\n &:hover {\n background: #f6f8fa;\n }\n`;\n\nconst ItemName = styled.div`\n font-weight: 500;\n font-size: 14px;\n color: #24292f;\n margin-bottom: 4px;\n`;\n\nconst ItemMeta = styled.div`\n font-size: 12px;\n color: #656d76;\n display: flex;\n justify-content: space-between;\n`;\n\nconst Badge = styled.span<{ variant: \"simplified\" | \"legacy\" | \"deprecated\" }>`\n display: inline-block;\n padding: 2px 6px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n\n ${(props) => {\n switch (props.variant) {\n case \"simplified\":\n return \"background: #ddf4ff; color: #0969da;\";\n case \"legacy\":\n return \"background: #fff8dc; color: #9a6700;\";\n case \"deprecated\":\n return \"background: #ffebe9; color: #cf222e;\";\n default:\n return \"background: #f6f8fa; color: #656d76;\";\n }\n }}\n`;\n\nconst EmptyState = styled.div`\n padding: 40px 16px;\n text-align: center;\n color: #656d76;\n font-size: 14px;\n`;\n\nexport const ExtensionPointList: React.FC<ExtensionPointListProps> = ({\n extensionPoints,\n selectedExtensionId,\n onExtensionSelect,\n searchTerm,\n onSearchChange,\n className,\n}) => (\n <Container className={className}>\n <Header>\n <Title>Extension Points</Title>\n <SearchInput\n placeholder=\"Search extension points...\"\n value={searchTerm}\n onChange={(e) => onSearchChange(e.target.value)}\n />\n </Header>\n\n <List>\n {extensionPoints.length > 0 ? (\n extensionPoints.map((point) => (\n <ListItem\n key={point.id}\n selected={point.id === selectedExtensionId}\n onClick={() => onExtensionSelect(point.id)}\n >\n <ItemName>{point.displayName || point.id}</ItemName>\n <ItemMeta>\n <div>\n <Badge variant={point.source}>{point.source}</Badge>\n {point.metadata?.deprecated && (\n <Badge variant=\"deprecated\" style={{ marginLeft: 4 }}>\n deprecated\n </Badge>\n )}\n </div>\n <div>\n {point.pluginCount} plugin{point.pluginCount !== 1 ? \"s\" : \"\"}\n </div>\n </ItemMeta>\n </ListItem>\n ))\n ) : (\n <EmptyState>\n {searchTerm\n ? `No extension points match \"${searchTerm}\"`\n : \"No extension points available\"}\n </EmptyState>\n )}\n </List>\n </Container>\n);\n","/**\n *\n *\n * @module remotes-provider\n * @description Provides a context for managing dynamic remotes and extensions in a React application.\n */\n\nimport styled from \"@emotion/styled\";\nimport {\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport type { DynamicRemotes } from \"../../../types/global\";\nimport type { PluginExtension } from \"../../../types/plugins\";\nimport { initPluginManager } from \"../../utils/plugin-system/plugin-extension-manager\";\nimport { initializeKosPlugins } from \"../../utils/processors/initialize-plugins\";\nimport { ReactiveExtensionRegistry } from \"../../utils/reactive-extension-registry\";\nimport { ReactiveExtensionRegistryContext } from \"../reactive-extension-registry-context\";\n\ninterface PluginsType {\n remotes?: DynamicRemotes;\n extensions?: PluginExtensionsType;\n extensionPoints?: Record<string, PluginExtension[]>;\n getExtensions: (extensionPointId: string) => PluginExtension[];\n}\n\nexport interface PluginExtensionsType {\n [k: string]: {\n [k: string]: PluginExtension;\n };\n}\n\n/**\n * The context for managing dynamic remotes and extensions.\n */\nexport const RemotesContext = createContext<PluginsType | undefined>(undefined);\n\ninterface Props {\n remotesOverride?: DynamicRemotes;\n /**\n * Optional async function to execute before initializing plugins.\n * This can be used to wait for specific events or conditions before\n * fetching and loading plugins.\n */\n onBeforeInitialize?: () => Promise<void>;\n /**\n * Optional configuration for plugin initialization\n */\n pluginConfig?: {\n pluginBaseUrl?: string;\n pluginApiPath?: string;\n pluginContext?: {\n context?: string | string[];\n group?: string;\n };\n overrides?: Record<string, string>;\n };\n}\n\nconst MessageContainer = styled.div`\n padding-inline: 20px;\n width: 100%;\n height: 100vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: fixed;\n font-size: 14px;\n top: 0;\n left: 0;\n z-index: 10000;\n`;\n/**\n * The provider component for the RemotesContext.\n */\nexport const KosPluginProvider: React.FunctionComponent<\n PropsWithChildren<Props>\n> = ({ remotesOverride, onBeforeInitialize, pluginConfig, children }) => {\n const [contextValue, setContextValue] = useState<PluginsType | undefined>();\n const [error, setError] = useState<Error | null>(null);\n\n // Create ReactiveExtensionRegistry instance when extensions are available\n // This registry is memoized to ensure single instance per context\n const reactiveRegistry = useMemo(() => {\n if (!contextValue?.extensions) {\n return null;\n }\n return new ReactiveExtensionRegistry(contextValue.extensions);\n }, [contextValue?.extensions]);\n\n // Cleanup registry on unmount\n useEffect(\n () => () => {\n reactiveRegistry?.destroy();\n },\n [reactiveRegistry]\n );\n\n useEffect(() => {\n const initialize = async () => {\n try {\n // Wait for any pre-initialization conditions\n if (onBeforeInitialize) {\n console.log(\n \"KosPluginProvider: Waiting for pre-initialization conditions...\"\n );\n await onBeforeInitialize();\n console.log(\"KosPluginProvider: Pre-initialization complete\");\n }\n\n let remotes = remotesOverride;\n\n // Check if plugins are already initialized (backwards compatibility)\n const existingRemotes = window.KosPlugins?.__dynamicRemotes;\n\n if (!remotes) {\n if (existingRemotes && Object.keys(existingRemotes).length > 0) {\n console.log(\n \"KosPluginProvider: Using existing plugin initialization\"\n );\n remotes = existingRemotes;\n } else {\n console.log(\"KosPluginProvider: Initializing plugins...\");\n await initializeKosPlugins(pluginConfig);\n // initializeKosPlugins sets window.KosPlugins.__dynamicRemotes\n remotes = window.KosPlugins?.__dynamicRemotes;\n }\n }\n\n // Initialize the plugin manager with the remotes\n const value = await initPluginManager(remotes);\n setContextValue(value);\n } catch (err) {\n console.error(\"KosPluginProvider: Failed to initialize plugins\", err);\n setError(err as Error);\n }\n };\n\n initialize();\n }, [remotesOverride, onBeforeInitialize, pluginConfig]);\n\n if (error) {\n return (\n <MessageContainer>\n <div>Failed to load plugins</div>\n <div style={{ fontSize: \"12px\", marginTop: \"10px\", opacity: 0.8 }}>\n {error.message}\n </div>\n </MessageContainer>\n );\n }\n\n return (\n <RemotesContext.Provider value={contextValue}>\n <ReactiveExtensionRegistryContext.Provider value={reactiveRegistry}>\n {contextValue ? (\n children\n ) : (\n <MessageContainer>Loading remote plugins...</MessageContainer>\n )}\n </ReactiveExtensionRegistryContext.Provider>\n </RemotesContext.Provider>\n );\n};\n\n/**\n * Custom hook for accessing the RemotesContext.\n */\nexport const useKosPluginsContext = () => {\n const context = useContext(RemotesContext);\n if (!context) {\n throw new Error(\n \"useKosPluginsContext must be used within a KosPluginProvider\"\n );\n }\n return context;\n};\n","/**\n * React hooks for plugin discovery\n *\n * Provides React-specific data management for plugin discovery functionality.\n * Thin layer over the service that handles React concerns (memoization, context, etc.)\n */\n\nimport { useMemo } from \"react\";\nimport { useKosPluginsContext } from \"../contexts/plugins-provider/plugins-provider\";\nimport {\n PluginDiscoveryService,\n type ExtensionPointInfo,\n type PluginDiscoveryOptions,\n type PluginHealthStats,\n} from \"../utils\";\n\nexport interface UsePluginDiscoveryResult {\n extensionPoints: ExtensionPointInfo[];\n healthStats: PluginHealthStats;\n isLoading: boolean;\n error?: Error;\n}\n\n/**\n * Hook for discovering extension points and plugins\n */\nexport function usePluginDiscovery(\n options?: PluginDiscoveryOptions\n): UsePluginDiscoveryResult {\n const { extensions } = useKosPluginsContext();\n\n const result = useMemo(() => {\n try {\n const extensionPoints = PluginDiscoveryService.getExtensionPoints(\n extensions,\n options\n );\n const healthStats =\n PluginDiscoveryService.calculateHealthStats(extensionPoints);\n\n return {\n extensionPoints,\n healthStats,\n isLoading: false,\n error: undefined,\n };\n } catch (error) {\n return {\n extensionPoints: [],\n healthStats: {\n totalExtensionPoints: 0,\n extensionPointsWithPlugins: 0,\n totalPlugins: 0,\n simplifiedExtensionPoints: 0,\n legacyExtensionPoints: 0,\n deprecatedExtensionPoints: 0,\n },\n isLoading: false,\n error: error as Error,\n };\n }\n }, [extensions, options]);\n\n return result;\n}\n\n/**\n * Hook for filtered extension points with search\n */\nexport function useFilteredExtensionPoints(\n searchTerm: string,\n options?: PluginDiscoveryOptions\n): UsePluginDiscoveryResult & {\n filteredExtensionPoints: ExtensionPointInfo[];\n} {\n const discovery = usePluginDiscovery(options);\n\n const filteredExtensionPoints = useMemo(\n () =>\n PluginDiscoveryService.filterExtensionPoints(\n discovery.extensionPoints,\n searchTerm\n ),\n [discovery.extensionPoints, searchTerm]\n );\n\n return {\n ...discovery,\n filteredExtensionPoints,\n };\n}\n\n/**\n * Hook for a specific extension point\n */\nexport function useExtensionPoint(\n extensionPointId: string\n): ExtensionPointInfo | undefined {\n const { extensionPoints } = usePluginDiscovery();\n\n return useMemo(\n () =>\n PluginDiscoveryService.getExtensionPointById(\n extensionPoints,\n extensionPointId\n ),\n [extensionPoints, extensionPointId]\n );\n}\n","/**\n * Plugin Card Component\n *\n * Focused component for displaying a single plugin's information and controls.\n * Single responsibility: Show plugin details and manage plugin-specific actions.\n */\n\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport type { PluginExtension } from \"../../../types/plugins\";\n// import { useKosPluginsContext } from \"../../contexts/plugins-provider\"; // Currently unused\nimport { getExtensionPointRegistry } from \"../../utils\";\nimport { getValidationResults } from \"../../utils\";\nimport { PluginDiscoveryService } from \"../../utils\";\n\nexport interface PluginCardProps {\n plugin: PluginExtension;\n extensionPointId: string;\n className?: string;\n}\n\nconst Card = styled.div`\n border: 1px solid #e1e5e9;\n border-radius: 6px;\n padding: 12px;\n background: white;\n transition: all 0.2s ease;\n`;\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n`;\n\nconst NameSection = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst HealthIndicator = styled.div<{ status: \"healthy\" | \"warning\" | \"error\" }>`\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-right: 6px;\n\n ${(props) => {\n switch (props.status) {\n case \"healthy\":\n return \"background: #1a7f37;\";\n case \"warning\":\n return \"background: #bf8700;\";\n case \"error\":\n return \"background: #cf222e;\";\n default:\n return \"background: #656d76;\";\n }\n }}\n`;\n\nconst PluginName = styled.h5`\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #24292f;\n`;\n\nconst Details = styled.div`\n font-size: 12px;\n color: #656d76;\n line-height: 1.4;\n display: grid;\n gap: 2px;\n`;\n\nconst DetailRow = styled.div`\n display: grid;\n grid-template-columns: 80px 1fr; /* Fixed label width, flexible value */\n gap: 8px;\n overflow: hidden;\n\n strong {\n font-weight: 600;\n color: #24292f;\n }\n\n span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nconst NoComponentNotice = styled.div`\n color: #656d76;\n font-style: italic;\n margin-top: 4px;\n font-size: 12px;\n`;\n\nconst CapabilitiesList = styled.div`\n margin-top: 6px;\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n`;\n\nconst CapabilityBadge = styled.span`\n background: #f6f8fa;\n border: 1px solid #d0d7de;\n border-radius: 12px;\n padding: 2px 6px;\n font-size: 10px;\n color: #24292f;\n`;\n\nconst ValidationSection = styled.div`\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid #f0f0f0;\n`;\n\nconst ValidationMessage = styled.div<{ type: \"error\" | \"warning\" | \"info\" }>`\n display: flex;\n align-items: flex-start;\n gap: 6px;\n padding: 6px 8px;\n border-radius: 4px;\n font-size: 11px;\n line-height: 1.3;\n margin-bottom: 4px;\n\n ${(props) => {\n switch (props.type) {\n case \"error\":\n return \"background: #ffebe9; color: #cf222e; border-left: 3px solid #cf222e;\";\n case \"warning\":\n return \"background: #fff8dc; color: #9a6700; border-left: 3px solid #bf8700;\";\n case \"info\":\n return \"background: #ddf4ff; color: #0969da; border-left: 3px solid #0969da;\";\n default:\n return \"background: #f6f8fa; color: #656d76;\";\n }\n }}\n`;\n\nconst ValidationIcon = styled.span<{ type: \"error\" | \"warning\" | \"info\" }>`\n font-size: 12px;\n font-weight: bold;\n flex-shrink: 0;\n margin-top: 1px;\n\n &::before {\n content: \"${(props) => {\n switch (props.type) {\n case \"error\":\n return \"❌\";\n case \"warning\":\n return \"⚠️\";\n case \"info\":\n return \"ℹ️\";\n default:\n return \"•\";\n }\n }}\";\n }\n`;\n\nconst ValidationText = styled.div`\n flex: 1;\n`;\n\n/**\n * Safely extract typed data from plugin based on extension point definition\n */\nfunction getTypedPluginData(plugin: PluginExtension, extensionPointId: string) {\n const registry = getExtensionPointRegistry();\n const extensionPoint = registry.getExtensionPoint(extensionPointId);\n\n // If we have an extension point definition, we can trust the data structure\n if (extensionPoint && plugin.data) {\n return plugin.data;\n }\n\n // Fallback to undefined if no extension point or no data\n return undefined;\n}\n\n/**\n * Get schema-defined fields for a plugin based on its extension point\n */\nfunction getSchemaFields(extensionPointId: string): string[] {\n const registry = getExtensionPointRegistry();\n const extensionPoint = registry.getExtensionPoint(extensionPointId);\n\n // If extension point has schema field extraction, use it\n if (extensionPoint?.getSchemaFieldInfo) {\n // Extract just the field names from the field info\n return extensionPoint.getSchemaFieldInfo().map((field) => field.name);\n }\n\n // Fallback to empty array if no schema available\n return [];\n}\n\nexport const PluginCard: React.FC<PluginCardProps> = ({\n plugin,\n extensionPointId,\n className,\n}) => {\n // const { extensions } = useKosPluginsContext(); // Currently unused\n const analysis = PluginDiscoveryService.analyzePlugin(plugin);\n const { hasComponent, healthStatus, capabilities } = analysis;\n\n // Get cached validation results from startup processing\n const allMessages = getValidationResults(plugin.id);\n\n // Get typed plugin data safely\n const pluginData = getTypedPluginData(plugin, extensionPointId);\n\n // Get schema-defined fields that should be displayed\n const schemaFields = getSchemaFields(extensionPointId);\n\n return (\n <Card className={className}>\n <Header>\n <NameSection>\n <HealthIndicator status={healthStatus} />\n <PluginName>{plugin.id}</PluginName>\n </NameSection>\n </Header>\n\n <Details>\n <DetailRow>\n <strong>Source:</strong>\n <span>{plugin.remote ? `${plugin.remote} plugin` : \"Local\"}</span>\n </DetailRow>\n <DetailRow>\n <strong>Type:</strong>\n <span>{plugin.type}</span>\n </DetailRow>\n {typeof plugin.rank === \"number\" && (\n <DetailRow>\n <strong>Priority:</strong>\n <span>{plugin.rank} (higher = preferred)</span>\n </DetailRow>\n )}\n {plugin.component && (\n <DetailRow>\n <strong>Component:</strong>\n <span>{plugin.component}</span>\n </DetailRow>\n )}\n\n {/* Dynamically render schema-defined fields */}\n {pluginData &&\n schemaFields.map((fieldName) => {\n const value = pluginData[fieldName];\n if (value == null) return null;\n\n // Format field name for display (camelCase to Title Case)\n const displayName = fieldName\n .replace(/([A-Z])/g, \" $1\")\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n\n return (\n <DetailRow key={fieldName}>\n <strong>{displayName}:</strong>\n <span>{String(value)}</span>\n </DetailRow>\n );\n })}\n\n {!hasComponent && (\n <NoComponentNotice>\n No UI component (data/utility plugin)\n </NoComponentNotice>\n )}\n\n {capabilities.length > 0 && (\n <CapabilitiesList>\n {capabilities.map((capability) => (\n <CapabilityBadge key={capability}>{capability}</CapabilityBadge>\n ))}\n </CapabilitiesList>\n )}\n\n {allMessages.length > 0 && (\n <ValidationSection>\n {allMessages.map((msg, index) => (\n <ValidationMessage key={index} type={msg.type}>\n <ValidationIcon type={msg.type} />\n <ValidationText>{msg.message}</ValidationText>\n </ValidationMessage>\n ))}\n </ValidationSection>\n )}\n </Details>\n </Card>\n );\n};\n","/**\n * Plugin Health Dashboard Component\n *\n * Focused component for displaying plugin system health statistics.\n * Single responsibility: Show health metrics in a compact format.\n */\n\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { useKosPluginsContext } from \"../../contexts/plugins-provider\";\nimport { DocumentationGenerator } from \"../../utils\";\nimport type { PluginHealthStats } from \"../../utils\";\n\nexport interface PluginHealthDashboardProps {\n healthStats: PluginHealthStats;\n className?: string;\n}\n\nconst Container = styled.div`\n padding: 12px 16px;\n border-bottom: 1px solid #e1e5e9;\n background: #f9f9f9;\n font-size: 12px;\n flex-shrink: 0; /* Prevent from shrinking */\n`;\n\nconst Title = styled.div`\n font-weight: 600;\n margin-bottom: 8px;\n color: #24292f;\n`;\n\nconst StatsRow = styled.div`\n display: flex;\n gap: 12px;\n align-items: center;\n\n &:not(:last-child) {\n margin-bottom: 4px;\n }\n`;\n\nconst Stat = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n`;\n\nconst HealthIndicator = styled.div<{ status: \"healthy\" | \"warning\" | \"error\" }>`\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-right: 6px;\n\n ${(props) => {\n switch (props.status) {\n case \"healthy\":\n return \"background: #1a7f37;\";\n case \"warning\":\n return \"background: #bf8700;\";\n case \"error\":\n return \"background: #cf222e;\";\n default:\n return \"background: #656d76;\";\n }\n }}\n`;\n\nconst Badge = styled.span<{ variant: \"simplified\" | \"legacy\" | \"deprecated\" }>`\n display: inline-block;\n padding: 2px 6px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n\n ${(props) => {\n switch (props.variant) {\n case \"simplified\":\n return \"background: #ddf4ff; color: #0969da;\";\n case \"legacy\":\n return \"background: #fff8dc; color: #9a6700;\";\n case \"deprecated\":\n return \"background: #ffebe9; color: #cf222e;\";\n default:\n return \"background: #f6f8fa; color: #656d76;\";\n }\n }}\n`;\n\nconst ExportButton = styled.button`\n background: #0969da;\n border: 1px solid #0969da;\n border-radius: 4px;\n color: white;\n cursor: pointer;\n font-size: 11px;\n padding: 4px 8px;\n margin-top: 8px;\n width: 100%;\n\n &:hover {\n background: #0860ca;\n border-color: #0860ca;\n }\n\n &:active {\n background: #0757ba;\n }\n`;\n\nexport const PluginHealthDashboard: React.FC<PluginHealthDashboardProps> = ({\n healthStats,\n className,\n}) => {\n const { extensions } = useKosPluginsContext();\n const {\n totalPlugins,\n extensionPointsWithPlugins,\n totalExtensionPoints,\n simplifiedExtensionPoints,\n legacyExtensionPoints,\n deprecatedExtensionPoints,\n } = healthStats;\n\n const handleExportDocumentation = () => {\n try {\n const documentation = DocumentationGenerator.generateFullDocumentation(\n extensions,\n {\n includeUsageExamples: true,\n includeTypeDefinitions: true,\n includeLegacyExtensions: true,\n includePluginHealth: true,\n }\n );\n\n // Create and download the file\n const blob = new Blob([documentation.content], { type: \"text/markdown\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `kos-extension-points-${\n new Date().toISOString().split(\"T\")[0]\n }.md`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } catch (error) {\n console.error(\"Failed to generate documentation:\", error);\n }\n };\n\n return (\n <Container className={className}>\n <Title>System Health</Title>\n\n <StatsRow>\n <Stat>\n <HealthIndicator status=\"healthy\" />\n <span>{totalPlugins} plugins</span>\n </Stat>\n <Stat>\n <span>\n {extensionPointsWithPlugins}/{totalExtensionPoints} active\n </span>\n </Stat>\n </StatsRow>\n\n <StatsRow>\n <Stat>\n <Badge variant=\"simplified\">{simplifiedExtensionPoints}</Badge>\n <span>simplified</span>\n </Stat>\n <Stat>\n <Badge variant=\"legacy\">{legacyExtensionPoints}</Badge>\n <span>legacy</span>\n </Stat>\n {deprecatedExtensionPoints > 0 && (\n <Stat>\n <Badge variant=\"deprecated\">{deprecatedExtensionPoints}</Badge>\n <span>deprecated</span>\n </Stat>\n )}\n </StatsRow>\n\n <ExportButton onClick={handleExportDocumentation}>\n Export Documentation\n </ExportButton>\n </Container>\n );\n};\n","/**\n * Plugin Explorer - Runtime Plugin Discovery Tool\n *\n * Orchestrates focused components with clear separation of concerns.\n * This component only handles layout and state coordination.\n */\n\nimport styled from \"@emotion/styled\";\nimport React, { useState } from \"react\";\nimport { useFilteredExtensionPoints } from \"../../hooks/use-plugin-discovery\";\nimport { ExtensionPointList } from \"./extension-point-list\";\nimport { PluginCard } from \"./plugin-card\";\nimport { PluginHealthDashboard } from \"./plugin-health-dashboard\";\n\nexport interface PluginExplorerProps {\n /** Optional CSS class name */\n className?: string;\n /** Whether to show legacy extension points (non-simplified) */\n showLegacyExtensions?: boolean;\n /** Optional filter for extension point IDs */\n extensionFilter?: string;\n}\n\nconst Container = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n min-height: 400px; /* Minimum usable height */\n border: 1px solid #e1e5e9;\n border-radius: 8px;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui,\n sans-serif;\n background: white;\n container-type: inline-size; /* Enable container queries */\n`;\n\nconst Sidebar = styled.div`\n flex: 0 0 35%; /* Take 35% of container width */\n min-width: 280px; /* Minimum usable width */\n max-width: 400px; /* Maximum width to prevent too wide */\n border-right: 1px solid #e1e5e9;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n /* Hide on very small screens */\n @media (max-width: 768px) {\n flex: 0 0 100%;\n max-width: 100%;\n border-right: none;\n }\n`;\n\nconst MainContent = styled.div`\n flex: 1;\n min-width: 0; /* Allows flex child to shrink below content size */\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n /* Hide on mobile when sidebar is showing */\n @media (max-width: 768px) {\n display: none; /* We'll add mobile navigation later if needed */\n }\n`;\n\nconst ContentHeader = styled.div`\n padding: 16px;\n border-bottom: 1px solid #e1e5e9;\n background: #f6f8fa;\n`;\n\nconst ContentTitle = styled.h4`\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: #24292f;\n`;\n\nconst ContentDescription = styled.p`\n margin: 0;\n font-size: 14px;\n color: #656d76;\n`;\n\nconst ContentBody = styled.div`\n flex: 1;\n padding: 16px;\n overflow-y: auto;\n`;\n\nconst PluginGrid = styled.div`\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 24px;\n`;\n\nconst EmptyState = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #656d76;\n text-align: center;\n`;\n\nconst MetadataSection = styled.div`\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #e1e5e9;\n`;\n\nconst MetadataTitle = styled.h5`\n margin: 0 0 8px 0;\n font-size: 14px;\n font-weight: 600;\n color: #24292f;\n`;\n\nconst MetadataGrid = styled.div`\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 8px 16px;\n font-size: 12px;\n`;\n\nconst MetadataLabel = styled.div`\n color: #656d76;\n font-weight: 500;\n`;\n\nconst MetadataValue = styled.div`\n color: #24292f;\n`;\n\nexport const PluginExplorer: React.FC<PluginExplorerProps> = ({\n className,\n showLegacyExtensions = true,\n extensionFilter = \"\",\n}) => {\n // State management - only UI concerns\n const [selectedExtensionId, setSelectedExtensionId] = useState<string | null>(\n null\n );\n const [searchTerm, setSearchTerm] = useState(extensionFilter);\n\n // Data layer - via hooks that use service layer\n const { filteredExtensionPoints, healthStats, isLoading, error } =\n useFilteredExtensionPoints(searchTerm, {\n includeLegacyExtensions: showLegacyExtensions,\n });\n\n // Derived state\n const selectedExtensionPoint = filteredExtensionPoints.find(\n (point) => point.id === selectedExtensionId\n );\n\n // Event handlers - only coordinate between components\n const handleExtensionSelect = (extensionId: string) => {\n setSelectedExtensionId(extensionId);\n };\n\n const handleSearchChange = (term: string) => {\n setSearchTerm(term);\n };\n\n if (error) {\n return (\n <Container className={className}>\n <EmptyState>\n <div>Error loading plugins: {error.message}</div>\n </EmptyState>\n </Container>\n );\n }\n\n if (isLoading) {\n return (\n <Container className={className}>\n <EmptyState>\n <div>Loading plugins...</div>\n </EmptyState>\n </Container>\n );\n }\n\n return (\n <Container className={className}>\n <Sidebar>\n {/* Health dashboard - focused component */}\n <PluginHealthDashboard healthStats={healthStats} />\n\n {/* Extension point list - focused component */}\n <ExtensionPointList\n extensionPoints={filteredExtensionPoints}\n selectedExtensionId={selectedExtensionId}\n onExtensionSelect={handleExtensionSelect}\n searchTerm={searchTerm}\n onSearchChange={handleSearchChange}\n />\n </Sidebar>\n\n <MainContent>\n {selectedExtensionPoint ? (\n <>\n <ContentHeader>\n <ContentTitle>\n {selectedExtensionPoint.displayName ||\n selectedExtensionPoint.id}\n </ContentTitle>\n {selectedExtensionPoint.description && (\n <ContentDescription>\n {selectedExtensionPoint.description}\n </ContentDescription>\n )}\n </ContentHeader>\n\n <ContentBody>\n {selectedExtensionPoint.plugins.length > 0 ? (\n <>\n <h5\n style={{\n margin: \"0 0 12px 0\",\n fontSize: \"14px\",\n fontWeight: 600,\n }}\n >\n Active Plugins ({selectedExtensionPoint.pluginCount})\n </h5>\n\n <PluginGrid>\n {selectedExtensionPoint.plugins.map((plugin) => (\n <PluginCard\n key={plugin.id}\n plugin={plugin}\n extensionPointId={selectedExtensionPoint.id}\n />\n ))}\n </PluginGrid>\n </>\n ) : (\n <EmptyState>\n <div style={{ fontSize: \"48px\", marginBottom: \"12px\" }}>\n 🔌\n </div>\n <div\n style={{\n fontSize: \"16px\",\n fontWeight: 500,\n marginBottom: \"8px\",\n }}\n >\n No plugins registered\n </div>\n <div style={{ fontSize: \"14px\" }}>\n This extension point is available but no plugins are\n currently contributing to it.\n </div>\n </EmptyState>\n )}\n\n {selectedExtensionPoint.metadata && (\n <MetadataSection>\n <MetadataTitle>Extension Point Details</MetadataTitle>\n <MetadataGrid>\n <MetadataLabel>ID:</MetadataLabel>\n <MetadataValue>{selectedExtensionPoint.id}</MetadataValue>\n\n <MetadataLabel>Source:</MetadataLabel>\n <MetadataValue>\n {selectedExtensionPoint.source}\n </MetadataValue>\n\n {selectedExtensionPoint.metadata.category && (\n <>\n <MetadataLabel>Category:</MetadataLabel>\n <MetadataValue>\n {selectedExtensionPoint.metadata.category}\n </MetadataValue>\n </>\n )}\n\n {selectedExtensionPoint.metadata.owner && (\n <>\n <MetadataLabel>Owner:</MetadataLabel>\n <MetadataValue>\n {selectedExtensionPoint.metadata.owner}\n </MetadataValue>\n </>\n )}\n\n {selectedExtensionPoint.metadata.since && (\n <>\n <MetadataLabel>Since:</MetadataLabel>\n <MetadataValue>\n {selectedExtensionPoint.metadata.since}\n </MetadataValue>\n </>\n )}\n\n {selectedExtensionPoint.metadata.tags &&\n selectedExtensionPoint.metadata.tags.length > 0 && (\n <>\n <MetadataLabel>Tags:</MetadataLabel>\n <MetadataValue>\n {selectedExtensionPoint.metadata.tags.join(\", \")}\n </MetadataValue>\n </>\n )}\n </MetadataGrid>\n </MetadataSection>\n )}\n </ContentBody>\n </>\n ) : (\n <EmptyState>\n <div style={{ fontSize: \"48px\", marginBottom: \"12px\" }}>🔍</div>\n <div\n style={{ fontSize: \"16px\", fontWeight: 500, marginBottom: \"8px\" }}\n >\n Select an extension point\n </div>\n <div style={{ fontSize: \"14px\" }}>\n Choose an extension point from the sidebar to view its plugins and\n details.\n </div>\n </EmptyState>\n )}\n </MainContent>\n </Container>\n );\n};\n","/**\n * Floating Plugin Explorer - Development Mode Overlay\n *\n * A floating panel that appears only in development mode for runtime plugin discovery.\n * Can be toggled via keyboard shortcut or button click.\n */\n\nimport styled from \"@emotion/styled\";\nimport React, { useEffect, useState } from \"react\";\nimport { PluginExplorer, type PluginExplorerProps } from \"./plugin-explorer\";\n\nexport interface FloatingPluginExplorerProps\n extends Omit<PluginExplorerProps, \"className\"> {\n /** Keyboard shortcut to toggle (default: \"ctrl+shift+p\") */\n keyboardShortcut?: string;\n /** Whether to show the toggle button (default: true) */\n showToggleButton?: boolean;\n /** Position of the toggle button (default: \"bottom-right\") */\n toggleButtonPosition?:\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n}\n\nconst FloatingOverlay = styled.div<{ visible: boolean }>`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 10000;\n display: ${(props) => (props.visible ? \"flex\" : \"none\")};\n align-items: center;\n justify-content: center;\n padding: 20px;\n box-sizing: border-box;\n`;\n\nconst FloatingPanel = styled.div`\n background: white;\n border-radius: 12px;\n box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);\n width: min(1200px, 90vw); /* Responsive with max limit */\n height: min(700px, 85vh); /* Responsive with max limit */\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n`;\n\nconst PanelHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid #e1e5e9;\n background: #f6f8fa;\n`;\n\nconst PanelTitle = styled.h3`\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #24292f;\n`;\n\nconst CloseButton = styled.button`\n background: none;\n border: none;\n font-size: 20px;\n cursor: pointer;\n padding: 4px;\n color: #656d76;\n border-radius: 4px;\n\n &:hover {\n background: #f0f0f0;\n color: #24292f;\n }\n`;\n\nconst ToggleButton = styled.button<{ position: string }>`\n position: fixed;\n ${(props) => {\n switch (props.position) {\n case \"top-left\":\n return \"top: 20px; left: 20px;\";\n case \"top-right\":\n return \"top: 20px; right: 20px;\";\n case \"bottom-left\":\n return \"bottom: 20px; left: 20px;\";\n case \"bottom-right\":\n default:\n return \"bottom: 20px; right: 20px;\";\n }\n }}\n\n background: #0969da;\n color: white;\n border: none;\n border-radius: 50%;\n width: 56px;\n height: 56px;\n font-size: 24px;\n cursor: pointer;\n z-index: 9999;\n box-shadow: 0 4px 12px rgba(9, 105, 218, 0.3);\n transition: all 0.2s ease;\n\n /* Center the SVG content */\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n background: #0860ca;\n transform: scale(1.05);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst KeyboardHint = styled.div`\n font-size: 12px;\n color: #656d76;\n margin-left: 8px;\n`;\n\nexport const FloatingPluginExplorer: React.FC<FloatingPluginExplorerProps> = ({\n keyboardShortcut = \"ctrl+shift+p\",\n showToggleButton = true,\n toggleButtonPosition = \"bottom-right\",\n ...pluginExplorerProps\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n\n // Keyboard shortcut handler\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const shortcut = keyboardShortcut.toLowerCase();\n const parts = shortcut.split(\"+\").map((part) => part.trim());\n\n let matches = true;\n\n if (parts.includes(\"ctrl\") && !event.ctrlKey) matches = false;\n if (parts.includes(\"shift\") && !event.shiftKey) matches = false;\n if (parts.includes(\"alt\") && !event.altKey) matches = false;\n if (parts.includes(\"meta\") && !event.metaKey) matches = false;\n\n const key = parts.find(\n (part) => ![\"ctrl\", \"shift\", \"alt\", \"meta\"].includes(part)\n );\n if (key && event.key.toLowerCase() !== key.toLowerCase()) matches = false;\n\n if (matches) {\n event.preventDefault();\n setIsVisible((prev) => !prev);\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [keyboardShortcut]);\n\n // Close on escape key\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && isVisible) {\n setIsVisible(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isVisible]);\n\n const toggleVisibility = () => {\n setIsVisible((prev) => !prev);\n };\n\n const handleOverlayClick = (event: React.MouseEvent) => {\n if (event.target === event.currentTarget) {\n setIsVisible(false);\n }\n };\n\n // Only render in development mode\n if (process.env.NODE_ENV !== \"development\") {\n return null;\n }\n\n return (\n <>\n {showToggleButton && (\n <ToggleButton\n position={toggleButtonPosition}\n onClick={toggleVisibility}\n title={`Plugin Explorer (${keyboardShortcut})`}\n >\n <svg\n fill=\"#ffffff\"\n width=\"28\"\n height=\"28\"\n version=\"1.1\"\n id=\"Artwork\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n style={{ display: \"block\" }}\n >\n <g>\n <path\n fill=\"#ffffff\"\n stroke=\"#FFFFFF\"\n d=\"M202.7,259.7l-31.5,31.5c-5.6,5.6-8.6,13-8.6,20.9c0,7.9,3.1,15.3,8.6,20.9l6.1,6.1l-3.7,3.7c-11.1,11.1-29.2,11.1-40.4,0\n\t\tl-31.4-31.4c-20.7-20.7-54.3-20.7-75,0c-20.7,20.7-20.7,54.3,0,75l31.4,31.5c5.4,5.4,8.4,12.6,8.4,20.2s-3,14.8-8.4,20.2\n\t\tc-4.8,4.8-4.8,12.5,0,17.3c2.4,2.4,5.5,3.6,8.7,3.6c3.1,0,6.3-1.2,8.7-3.6c10-10,15.5-23.3,15.5-37.5s-5.5-27.5-15.5-37.5\n\t\tl-31.4-31.5c-11.1-11.1-11.1-29.2,0-40.4s29.2-11.1,40.4,0L116,360c20.7,20.7,54.3,20.7,75,0l3.7-3.7l6.1,6.1\n\t\tc5.8,5.8,13.3,8.6,20.9,8.6c7.6,0,15.1-2.9,20.9-8.6l31.5-31.5c11.4,3.7,23.2,5.7,35,5.7c28.7,0,57.4-10.9,79.2-32.7l55.1-55.1\n\t\tl9.9,9.9c2.4,2.4,5.5,3.6,8.7,3.6s6.3-1.2,8.7-3.6c4.8-4.8,4.8-12.5,0-17.3l-40.5-40.5l67-67c4.8-4.8,4.8-12.5,0-17.3\n\t\tc-4.8-4.8-12.5-4.8-17.3,0l-67,67L350.2,121l67-67c4.8-4.8,4.8-12.5,0-17.3c-4.8-4.8-12.5-4.8-17.3,0l-67,67l-40.5-40.5\n\t\tc-4.8-4.8-12.5-4.8-17.3,0c-4.8,4.8-4.8,12.5,0,17.3l9.9,9.9l-55.1,55.1C199,176.4,190,220.8,202.7,259.7z M247.1,286.6\n\t\tc-34.1-34.1-34.1-89.6,0-123.7l55.1-55.1L426,231.4l-55.1,55.1C336.7,320.7,281.2,320.7,247.1,286.6z M213.7,283.4\n\t\tc4.5,7.3,9.8,14.2,16.1,20.5s13.2,11.6,20.5,16.1l-25.2,25.2c-1.9,2-5.1,2-7.1,0l-29.5-29.5c-1.3-1.3-1.5-2.8-1.5-3.5\n\t\tc0-0.8,0.2-2.3,1.5-3.5L213.7,283.4z\"\n />\n </g>\n </svg>\n </ToggleButton>\n )}\n\n <FloatingOverlay visible={isVisible} onClick={handleOverlayClick}>\n <FloatingPanel>\n <PanelHeader>\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <PanelTitle>KOS Plugin Explorer</PanelTitle>\n <KeyboardHint>{keyboardShortcut} to toggle</KeyboardHint>\n </div>\n <CloseButton onClick={() => setIsVisible(false)} aria-label=\"Close\">\n ×\n </CloseButton>\n </PanelHeader>\n <PluginExplorer {...pluginExplorerProps} />\n </FloatingPanel>\n </FloatingOverlay>\n </>\n );\n};\n","import React from \"react\";\nimport { DynamicComponent } from \"../components/dynamic-component/dynamic-component\";\nimport { getExtensionPointRegistry } from \"../utils/extension-points/define-extension-point\";\nimport type { ExtensionPointDefinition } from \"../utils/extension-points/extension-point-types\";\n\n/**\n * Props for extension components created by the hook\n */\nexport interface ExtensionComponentProps {\n module?: string;\n fallback?: React.ReactNode;\n /**\n * Whether to show fallback when specified module is disabled\n * Default: true\n */\n fallbackOnDisabled?: boolean;\n /**\n * Whether to automatically switch to next best when current becomes disabled\n * Only applies if fallbackOnDisabled is false\n * Default: false\n */\n autoSwitchOnDisabled?: boolean;\n}\n\n/**\n * Hook that creates a strongly typed React component for an extension point\n * This moves the React component creation to runtime, avoiding webpack config issues\n */\nexport function useExtensionComponent<\n TData = any,\n TProcessed = TData,\n TProps = any\n>(\n definition: ExtensionPointDefinition<TData, TProcessed, TProps>\n): React.ComponentType<ExtensionComponentProps & TProps> | null {\n return React.useMemo(() => {\n // Only create component for view-based extensions\n if (!definition.config.hasView) {\n return null;\n }\n\n const ExtensionComponent = (props: ExtensionComponentProps & TProps) => {\n const {\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n ...otherProps\n } = props;\n\n return React.createElement(DynamicComponent, {\n extension: definition.id,\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n props: otherProps,\n });\n };\n\n // Set display name for better debugging\n ExtensionComponent.displayName = `${\n definition.config.displayName || definition.id\n }.Component`;\n\n return ExtensionComponent;\n }, [definition]);\n}\n\n/**\n * Factory function that creates a component for an extension point\n * Alternative to the hook for non-hook contexts\n */\nexport function createExtensionComponent<\n TData = any,\n TProcessed = TData,\n TProps = any\n>(\n definition: ExtensionPointDefinition<TData, TProcessed, TProps>\n): React.ComponentType<ExtensionComponentProps & TProps> | null {\n // Only create component for view-based extensions\n if (!definition.config.hasView) {\n return null;\n }\n\n const ExtensionComponent = (props: ExtensionComponentProps & TProps) => {\n const {\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n ...otherProps\n } = props;\n\n return React.createElement(DynamicComponent, {\n extension: definition.id,\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n props: otherProps,\n });\n };\n\n // Set display name for better debugging\n ExtensionComponent.displayName = `${\n definition.config.displayName || definition.id\n }.Component`;\n\n return ExtensionComponent;\n}\n\n/**\n * Hook that creates a React component for an extension point by ID\n * Useful for JSON-defined extension points where you only have the string ID\n */\nexport function useExtensionComponentById<TProps = any>(\n extensionPointId: string\n): React.ComponentType<ExtensionComponentProps & TProps> | null {\n return React.useMemo(() => {\n const registry = getExtensionPointRegistry();\n const definition = registry.getExtensionPoint(extensionPointId);\n\n if (!definition) {\n console.warn(`Extension point not found: ${extensionPointId}`);\n return null;\n }\n\n // Only create component for view-based extensions\n if (!definition.config.hasView) {\n return null;\n }\n\n const ExtensionComponent = (props: ExtensionComponentProps & TProps) => {\n const {\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n ...otherProps\n } = props;\n\n return React.createElement(DynamicComponent, {\n extension: extensionPointId,\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n props: otherProps,\n });\n };\n\n // Set display name for better debugging\n ExtensionComponent.displayName = `${\n definition.config.displayName || extensionPointId\n }.Component`;\n\n return ExtensionComponent;\n }, [extensionPointId]);\n}\n","/**\n * Typed hooks for simplified extension points\n *\n * These hooks provide type-safe access to extension points defined with the\n * new defineExtensionPoint API, while maintaining backward compatibility\n * with existing extension points.\n */\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { BasePluginExtension, PluginExtension } from \"../../types/plugins\";\nimport { useKosPluginsContext } from \"../contexts\";\nimport type { ExtensionPointDefinition } from \"../utils\";\nimport { resolveBestExtension } from \"../utils\";\nimport { useReactiveExtensions } from \"./use-extension-point\";\n\n/**\n * Criteria for selecting the best extension from multiple candidates\n */\nexport interface BestExtensionCriteria {\n /** Preferred module/plugin ID */\n preferredModule?: string;\n /**\n * Generic property matching - filters extensions where all specified\n * properties match the values in extension.data\n * @example { environment: 'production', version: '2.0' }\n */\n propertyMatches?: Record<string, any>;\n /** Custom ranking function */\n customRanker?: (extensions: PluginExtension[]) => PluginExtension | null;\n}\n\n/**\n * Hook to get all extensions for a specific extension point with full type safety\n *\n * @example\n * ```tsx\n * // For simplified extension points (with type inference)\n * const nutritionalExtensions = useExtensions(CuiNutritionalData);\n * // Type: BasePluginExtension & { data: ProcessedNutritionalData }[]\n *\n * // For legacy extension points (generic)\n * const cuiExtensions = useExtensions(\"ddk.cui.settings.config\");\n * // Type: PluginExtension[]\n * ```\n */\nexport function useExtensions<TData = unknown, TProcessed = TData>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>\n): (BasePluginExtension<TProcessed> & { data: TProcessed })[];\n\nexport function useExtensions<TData = unknown>(\n extensionPointId: string\n): PluginExtension<TData>[];\n\nexport function useExtensions<TData = unknown, TProcessed = TData>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string\n):\n | (BasePluginExtension<TProcessed> & { data: TProcessed })[]\n | PluginExtension<TData>[] {\n // Get extension point ID\n const extensionPointId =\n typeof extensionPointOrId === \"object\"\n ? extensionPointOrId.id\n : extensionPointOrId;\n\n // Use the reactive extensions hook - this will automatically re-render when contributions change!\n const { extensions: reactiveExtensions } = useReactiveExtensions(\n extensionPointId,\n {\n includeDisabled: false, // Only get enabled contributions\n autoResolve: false,\n }\n );\n\n return useMemo(() => {\n // Handle simplified extension point objects\n if (typeof extensionPointOrId === \"object\" && extensionPointOrId.id) {\n const extensionPoint = extensionPointOrId as ExtensionPointDefinition<\n TData,\n TProcessed\n >;\n\n // Use the getExtensions helper from the extension point definition\n if (extensionPoint.getExtensions) {\n const extMap = extensionPoint.getExtensions({\n [extensionPoint.id]: reactiveExtensions,\n });\n return Object.values(extMap);\n }\n\n // Fallback to raw extension lookup\n return Object.values(\n reactiveExtensions\n ) as (BasePluginExtension<TProcessed> & {\n data: TProcessed;\n })[];\n }\n\n // Handle legacy extension point IDs (string)\n return Object.values(reactiveExtensions) as PluginExtension<TData>[];\n }, [extensionPointOrId, reactiveExtensions]);\n}\n\n/**\n * Hook to get the best extension for a specific extension point with type safety\n *\n * @example\n * ```tsx\n * // Get best extension with automatic selection\n * const bestNutrition = useBest(CuiNutritionalData);\n *\n * // Get best extension with property matching\n * const bestNutrition = useBest(CuiNutritionalData, {\n * propertyMatches: { environment: 'production', version: '2.0' }\n * });\n *\n * // Legacy extension point\n * const bestCui = useBest(\"ddk.cui.settings.config\", {\n * preferredModule: 'my-plugin-id'\n * });\n * ```\n */\nexport function useBest<TData = unknown, TProcessed = TData>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>,\n criteria?: BestExtensionCriteria\n): (BasePluginExtension<TProcessed> & { data: TProcessed }) | null;\n\nexport function useBest<TData = unknown>(\n extensionPointId: string,\n criteria?: BestExtensionCriteria\n): PluginExtension<TData> | null;\n\nexport function useBest<TData = unknown, TProcessed = TData>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string,\n criteria?: BestExtensionCriteria\n):\n | (BasePluginExtension<TProcessed> & { data: TProcessed })\n | PluginExtension<TData>\n | null {\n const { extensions } = useKosPluginsContext();\n const allExtensions = useExtensions(extensionPointOrId as any);\n\n return useMemo(() => {\n if (!allExtensions || allExtensions.length === 0) {\n return null;\n }\n\n // If custom ranker is provided, use it\n if (criteria?.customRanker) {\n return criteria.customRanker(allExtensions as PluginExtension[]);\n }\n\n // For simplified extension points, apply intelligent selection\n if (typeof extensionPointOrId === \"object\" && criteria) {\n const typedExtensions =\n allExtensions as (BasePluginExtension<TProcessed> & {\n data: TProcessed;\n })[];\n\n // Filter by criteria\n let candidates = typedExtensions;\n\n // Filter by generic property matches\n if (criteria.propertyMatches) {\n candidates = candidates.filter((ext) =>\n Object.entries(criteria.propertyMatches!).every(\n ([key, value]) => (ext.data as any)?.[key] === value\n )\n );\n }\n\n // Filter by preferred module if specified\n if (criteria.preferredModule) {\n const moduleMatch = candidates.find(\n (ext) => ext.sectionId === criteria.preferredModule\n );\n if (moduleMatch) {\n return moduleMatch;\n }\n }\n\n // Convert to record format for resolveBestExtension\n const candidatesRecord = candidates.reduce((acc, ext) => {\n acc[ext.id] = ext as any;\n return acc;\n }, {} as Record<string, any>);\n\n return resolveBestExtension(candidatesRecord);\n }\n\n // For legacy extension points or no criteria, use standard resolution\n const extensionPointId =\n typeof extensionPointOrId === \"string\"\n ? extensionPointOrId\n : extensionPointOrId.id;\n\n const extensionMap = extensions?.[extensionPointId] || {};\n\n return resolveBestExtension(extensionMap, criteria?.preferredModule);\n }, [extensionPointOrId, allExtensions, extensions, criteria]);\n}\n\n/**\n * Hook to check if any extensions are available for an extension point\n *\n * @example\n * ```tsx\n * const hasNutritionExtensions = useHasExtensions(CuiNutritionalData);\n * if (hasNutritionExtensions) {\n * return <DynamicComponent extension={CuiNutritionalData.id} />;\n * }\n * return <DefaultNutritionInfo />;\n * ```\n */\nexport function useHasExtensions<TData = any, TProcessed = TData>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>\n): boolean;\n\nexport function useHasExtensions(extensionPointId: string): boolean;\n\nexport function useHasExtensions<TData = any, TProcessed = TData>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string\n): boolean {\n const extensions = useExtensions(extensionPointOrId as any);\n return extensions.length > 0;\n}\n\n/**\n * Hook to get extension count for an extension point\n * Useful for displaying \"X plugins available\" messages\n */\nexport function useExtensionCount<TData = any, TProcessed = TData>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>\n): number;\n\nexport function useExtensionCount(extensionPointId: string): number;\n\nexport function useExtensionCount<TData = any, TProcessed = TData>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string\n): number {\n const extensions = useExtensions(extensionPointOrId as any);\n return extensions.length;\n}\n\n/**\n * Hook to get extensions filtered by specific criteria\n * More flexible than useBest when you need multiple filtered results\n *\n * @example\n * ```tsx\n * // Get all US-specific extensions\n * const usExtensions = useFilteredExtensions(CuiNutritionalData, {\n * filter: (ext) => ext.data.regionCode === 'US'\n * });\n * ```\n */\nexport function useFilteredExtensions<TData = unknown, TProcessed = TData>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>,\n options: {\n filter: (\n extension: BasePluginExtension<TProcessed> & { data: TProcessed }\n ) => boolean;\n sort?: (\n a: BasePluginExtension<TProcessed> & { data: TProcessed },\n b: BasePluginExtension<TProcessed> & { data: TProcessed }\n ) => number;\n }\n): (BasePluginExtension<TProcessed> & { data: TProcessed })[];\n\nexport function useFilteredExtensions<TData = unknown>(\n extensionPointId: string,\n options: {\n filter: (extension: PluginExtension<TData>) => boolean;\n sort?: (a: PluginExtension<TData>, b: PluginExtension<TData>) => number;\n }\n): PluginExtension<TData>[];\n\nexport function useFilteredExtensions<TData = unknown, TProcessed = TData>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string,\n options: {\n filter: (\n extension:\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed })\n ) => boolean;\n sort?: (\n a:\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed }),\n b:\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed })\n ) => number;\n }\n): (\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed })\n)[] {\n const allExtensions = useExtensions(extensionPointOrId as any);\n\n return useMemo(() => {\n let filtered = allExtensions.filter(options.filter as any);\n\n if (options.sort) {\n filtered = filtered.sort(options.sort as any);\n }\n\n return filtered as any;\n }, [allExtensions, options.filter, options.sort]);\n}\n\n/**\n * Hook to load raw modules (non-React components) from extensions\n * Useful for accessing utility functions, services, configurations, or other non-UI modules\n *\n * @example\n * ```tsx\n * // Load utility modules\n * const utilityModules = useModules(UtilityExtension);\n *\n * // Load configuration modules\n * const configModules = useModules(ConfigExtension, {\n * filter: (ext) => ext.data.environment === 'production'\n * });\n *\n * // Access loaded modules\n * utilityModules.forEach(({ module, extension }) => {\n * if (module?.validateData) {\n * const isValid = module.validateData(someData);\n * }\n * });\n * ```\n */\nexport function useModules<\n TData = unknown,\n TProcessed = TData,\n TModule = unknown\n>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>,\n options?: {\n filter?: (\n extension: BasePluginExtension<TProcessed> & { data: TProcessed }\n ) => boolean;\n moduleProperty?: string; // Default: 'module'\n }\n): Array<{\n extension: BasePluginExtension<TProcessed> & { data: TProcessed };\n module: TModule | null;\n loading: boolean;\n error: string | null;\n}>;\n\nexport function useModules<TData = unknown, TModule = unknown>(\n extensionPointId: string,\n options?: {\n filter?: (extension: PluginExtension<TData>) => boolean;\n moduleProperty?: string;\n }\n): Array<{\n extension: PluginExtension<TData>;\n module: TModule | null;\n loading: boolean;\n error: string | null;\n}>;\n\nexport function useModules<\n TData = unknown,\n TProcessed = TData,\n TModule = unknown\n>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string,\n options?: {\n filter?: (\n extension:\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed })\n ) => boolean;\n moduleProperty?: string;\n }\n): Array<{\n extension:\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed });\n module: TModule | null;\n loading: boolean;\n error: string | null;\n}> {\n const allExtensions = useExtensions(extensionPointOrId as any);\n const [moduleStates, setModuleStates] = useState<\n Map<\n string,\n {\n module: any | null;\n loading: boolean;\n error: string | null;\n }\n >\n >(new Map());\n\n const filteredExtensions = useMemo(\n () =>\n options?.filter\n ? allExtensions.filter(options.filter as any)\n : allExtensions,\n [allExtensions, options?.filter]\n );\n\n const moduleProperty = options?.moduleProperty || \"module\";\n\n useEffect(() => {\n const loadModules = async () => {\n for (const extension of filteredExtensions) {\n const extensionId = extension.id;\n\n // Skip if already loaded or loading\n if (moduleStates.has(extensionId)) {\n continue;\n }\n\n // Set loading state\n setModuleStates((prev) =>\n new Map(prev).set(extensionId, {\n module: null,\n loading: true,\n error: null,\n })\n );\n\n try {\n // Get module path from extension data or use moduleProperty\n const modulePath =\n (extension.data as any)?.[moduleProperty] ||\n extension[moduleProperty] ||\n `./${extension.id}`;\n\n const remote = extension.remote;\n\n if (!remote) {\n throw new Error(`No remote specified for extension ${extensionId}`);\n }\n\n // Load the module using Module Federation\n const { loadRemoteModule } = await import(\"@nx/react/mf\");\n const loadedModule = await loadRemoteModule(remote, modulePath);\n\n setModuleStates((prev) =>\n new Map(prev).set(extensionId, {\n module: loadedModule,\n loading: false,\n error: null,\n })\n );\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error\";\n\n setModuleStates((prev) =>\n new Map(prev).set(extensionId, {\n module: null,\n loading: false,\n error: errorMessage,\n })\n );\n }\n }\n };\n\n loadModules();\n }, [filteredExtensions, moduleProperty, moduleStates]);\n\n return useMemo(\n () =>\n filteredExtensions.map((extension) => {\n const state = moduleStates.get(extension.id) || {\n module: null,\n loading: true,\n error: null,\n };\n\n return {\n extension,\n module: state.module,\n loading: state.loading,\n error: state.error,\n };\n }) as any,\n [filteredExtensions, moduleStates]\n );\n}\n","import { useKosTranslation } from \"@kosdev-code/kos-ui-sdk\";\nimport { useMemo } from \"react\";\nimport type { PluginExtension } from \"../../types/plugins\";\nimport {\n useExtensionComponentById,\n type ExtensionComponentProps,\n} from \"./use-extension-component\";\nimport { useExtensions } from \"./use-typed-extensions\";\n\n/**\n * Base properties that all extension data includes\n */\nexport interface ExtensionBaseData {\n id: string;\n title: string;\n namespace: string;\n}\n\n/**\n * Result from useExtensionI18n hook\n */\nexport interface UseExtensionI18nResult<TData = unknown, TProps = unknown> {\n /** All extensions for this extension point - data includes base properties (id, title, namespace) plus custom TData */\n extensions: PluginExtension<ExtensionBaseData & TData>[];\n /** Translation function configured with all unique namespaces from extensions */\n t: ReturnType<typeof useKosTranslation>[\"t\"];\n /** i18n utilities (e.g., exists check) */\n i18n: ReturnType<typeof useKosTranslation>[\"i18n\"];\n /** Component that can render extensions of this type - requires module prop to specify which extension to render */\n Component: React.ComponentType<ExtensionComponentProps & TProps> | null;\n /** Unique namespaces extracted from extensions */\n namespaces: string[];\n}\n\n/**\n * Hook to simplify the common pattern of:\n * 1. Getting extensions for an extension point\n * 2. Extracting their namespaces\n * 3. Configuring i18n with those namespaces\n * 4. Getting the extension component\n *\n * **For type safety:** Define only the custom properties from your extension schema.\n * The hook automatically merges base properties (id, title, namespace) with your custom type.\n *\n * @example\n * ```tsx\n * // Step 1: Define only your custom extension properties\n * // src/types/nav-link-types.ts\n * export interface NavLinkData {\n * viewKey: string; // Only define your custom properties - base props are added automatically!\n * }\n *\n * // Step 2: Use the type with the hook\n * import { NavLinkData } from '../types/nav-link-types';\n *\n * const { extensions, t, Component } = useExtensionI18n<NavLinkData, NavLinkProps>(\n * EXTENSION_ID_NAV_LINK\n * );\n *\n * // extensions.data includes both base properties AND your custom properties\n * const navLinks = extensions.map(link => ({\n * title: t(`${link.data.namespace}:${link.data.title}`), // namespace and title from base\n * viewKey: link.data.viewKey, // viewKey from your custom NavLinkData\n * icon: <Component module={link.id} navKey={link.data.viewKey} />\n * }));\n * ```\n *\n * @param extensionPointId - The extension point identifier\n * @param options - Optional configuration\n * @returns Object containing extensions, translation function, component, and namespaces\n */\nexport function useExtensionI18n<TData = unknown, TProps = unknown>(\n extensionPointId: string,\n options?: {\n /** Property name in extension.data where namespace is stored (default: 'namespace') */\n namespaceProperty?: string;\n }\n): UseExtensionI18nResult<TData, TProps> {\n const extensions = useExtensions<ExtensionBaseData & TData>(extensionPointId);\n const Component = useExtensionComponentById<TProps>(extensionPointId);\n\n const namespaceProperty = options?.namespaceProperty || \"namespace\";\n\n const namespaces = useMemo(() => {\n const allNamespaces = extensions\n .map((ext) => (ext.data as Record<string, unknown>)?.[namespaceProperty])\n .filter(Boolean);\n\n // Return unique namespaces\n return Array.from(new Set(allNamespaces)) as string[];\n }, [extensions, namespaceProperty]);\n\n const { t, i18n } = useKosTranslation(namespaces);\n\n return {\n extensions,\n t,\n i18n,\n Component,\n namespaces,\n };\n}\n"],"names":["sheetForTag","tag","i","createStyleElement","options","StyleSheet","_this","before","_proto","nodes","rule","sheet","_tag$parentNode","MS","MOZ","WEBKIT","COMMENT","RULESET","DECLARATION","IMPORT","KEYFRAMES","LAYER","abs","from","assign","hash","value","length","charat","trim","match","pattern","replace","replacement","indexof","search","index","substr","begin","end","strlen","sizeof","append","array","combine","callback","line","column","position","character","characters","node","root","parent","type","props","children","copy","char","prev","next","peek","caret","slice","token","alloc","dealloc","delimit","delimiter","whitespace","escaping","count","commenter","identifier","compile","parse","rules","rulesets","pseudo","points","declarations","offset","atrule","property","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","size","j","k","x","y","z","serialize","output","stringify","element","middleware","collection","rulesheet","identifierWithPointTracking","toRules","parsed","getRules","fixedElements","compat","isImplicitRule","parentRules","removeLabel","prefix","prefixer","defaultStylisPlugins","createCache","key","ssrStyles","dataEmotionAttribute","stylisPlugins","inserted","container","nodesToHydrate","attrib","_insert","omnipresentPlugins","currentSheet","finalizingPlugins","serializer","stylis","styles","selector","serialized","shouldCache","cache","b","c","d","e","f","g","h","l","m","n","p","q","r","t","w","a","u","A","reactIs_production_min","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","isValidElementType","typeOf","object","$$typeof","$$typeofType","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","ForwardRef","Fragment","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","hasWarnedAboutDeprecatedIsAsyncMode","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","reactIs_development","reactIsModule","require$$0","require$$1","reactIs","FORWARD_REF_STATICS","MEMO_STATICS","TYPE_STATICS","isBrowser","getRegisteredStyles","registered","registeredStyles","classNames","rawClassName","className","registerStyles","isStringTag","insertStyles","current","murmur2","str","len","unitlessKeys","memoize","fn","arg","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","processStyleValue","p1","p2","cursor","unitless","handleInterpolation","mergedProps","interpolation","componentSelector","keyframes","serializedStyles","createStringFromObject","previousCursor","result","asString","obj","string","_i","interpolated","labelPattern","serializeStyles","args","stringMode","strings","asTemplateStringsArr","templateStringsArr","identifierName","name","hashString","syncFallback","create","useInsertionEffect","React","useInsertionEffectAlwaysWithSyncFallback","hasOwnProperty","EmotionCacheContext","withEmotionCache","func","forwardRef","ref","useContext","ThemeContext","getLastPart","functionName","parts","getFunctionNameFromStackTraceLine","internalReactFunctionNames","sanitizeIdentifier","getLabelFromStackTrace","stackTrace","lines","typePropName","labelPropName","createEmotionProps","newProps","label","Insertion","_ref","Emotion","cssProp","WrappedComponent","labelFromStack","Emotion$1","ReactJSXRuntime","jsx","jsxs","ReactiveExtensionRegistryContext","createContext","useReactiveExtensionRegistry","registry","useReactiveExtensions","extensionPoint","includeDisabled","autoResolve","extensions","setExtensions","useState","useEffect","best","useMemo","resolveBestExtension","isViewPlugin","module","_a","useDynamicComponent","extension","fallbackOnDisabled","autoSwitchOnDisabled","Component","setComponent","setExtensionPoint","targetModule","requestedModule","loadComponent","_module","remote","componentName","componentPath","Comp","loadRemoteModule","ErrorBoundaryWithFallback","error","errorInfo","NotFound","styled","Skeleton","DynamicComponent","fallback","shouldShowFallback","fb","Container","Header","Title","SearchInput","List","ListItem","ItemName","ItemMeta","Badge","EmptyState","ExtensionPointList","extensionPoints","selectedExtensionId","onExtensionSelect","searchTerm","onSearchChange","point","RemotesContext","MessageContainer","KosPluginProvider","remotesOverride","onBeforeInitialize","pluginConfig","contextValue","setContextValue","setError","reactiveRegistry","ReactiveExtensionRegistry","remotes","existingRemotes","initializeKosPlugins","_b","initPluginManager","err","useKosPluginsContext","context","usePluginDiscovery","PluginDiscoveryService","healthStats","useFilteredExtensionPoints","discovery","filteredExtensionPoints","useExtensionPoint","extensionPointId","Card","NameSection","HealthIndicator","PluginName","Details","DetailRow","NoComponentNotice","CapabilitiesList","CapabilityBadge","ValidationSection","ValidationMessage","ValidationIcon","ValidationText","getTypedPluginData","plugin","getExtensionPointRegistry","getSchemaFields","field","PluginCard","analysis","hasComponent","healthStatus","capabilities","allMessages","getValidationResults","pluginData","schemaFields","fieldName","displayName","capability","msg","StatsRow","Stat","ExportButton","PluginHealthDashboard","totalPlugins","extensionPointsWithPlugins","totalExtensionPoints","simplifiedExtensionPoints","legacyExtensionPoints","deprecatedExtensionPoints","handleExportDocumentation","documentation","DocumentationGenerator","blob","url","Sidebar","MainContent","ContentHeader","ContentTitle","ContentDescription","ContentBody","PluginGrid","MetadataSection","MetadataTitle","MetadataGrid","MetadataLabel","MetadataValue","PluginExplorer","showLegacyExtensions","extensionFilter","setSelectedExtensionId","setSearchTerm","isLoading","selectedExtensionPoint","handleExtensionSelect","extensionId","handleSearchChange","term","FloatingOverlay","FloatingPanel","PanelHeader","PanelTitle","CloseButton","ToggleButton","KeyboardHint","FloatingPluginExplorer","keyboardShortcut","showToggleButton","toggleButtonPosition","pluginExplorerProps","isVisible","setIsVisible","handleKeyDown","event","part","matches","handleEscape","toggleVisibility","handleOverlayClick","useExtensionComponent","definition","ExtensionComponent","otherProps","createExtensionComponent","useExtensionComponentById","useExtensions","extensionPointOrId","reactiveExtensions","extMap","useBest","criteria","allExtensions","candidates","ext","moduleMatch","candidatesRecord","acc","extensionMap","useHasExtensions","useExtensionCount","useFilteredExtensions","filtered","useModules","moduleStates","setModuleStates","filteredExtensions","moduleProperty","modulePath","loadedModule","errorMessage","state","useExtensionI18n","namespaceProperty","namespaces","allNamespaces","i18n","useKosTranslation"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}
1
+ {"version":3,"file":"index.js","sources":["../../../../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../../../../node_modules/stylis/src/Enum.js","../../../../node_modules/stylis/src/Utility.js","../../../../node_modules/stylis/src/Tokenizer.js","../../../../node_modules/stylis/src/Parser.js","../../../../node_modules/stylis/src/Serializer.js","../../../../node_modules/stylis/src/Middleware.js","../../../../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../../../../node_modules/react-is/cjs/react-is.production.min.js","../../../../node_modules/react-is/cjs/react-is.development.js","../../../../node_modules/react-is/index.js","../../../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../../../../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../../../../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../../../../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../../../../node_modules/@emotion/serialize/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../../../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../../../../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../../../../node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js","../../../../node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js","../../../../packages/sdk/kos-ui-plugin/src/lib/contexts/reactive-extension-registry-context.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-reactive-extension-registry.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-extension-point.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-dynamic-component.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/dynamic-component/error-boundary.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/dynamic-component/dynamic-component.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/plugin-explorer/extension-point-list.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/contexts/plugins-provider/plugins-provider.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-plugin-discovery.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/plugin-explorer/plugin-card.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/plugin-explorer/plugin-health-dashboard.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/plugin-explorer/plugin-explorer.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/components/plugin-explorer/floating-plugin-explorer.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-extension-component.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-typed-extensions.tsx","../../../../packages/sdk/kos-ui-plugin/src/lib/hooks/use-extension-i18n.tsx"],"sourcesContent":["var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n } // this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n this.tags.forEach(function (tag) {\n var _tag$parentNode;\n\n return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value;\n var parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else if (className) {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","import * as React from 'react';\n\nvar syncFallback = function syncFallback(create) {\n return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","import * as React from 'react';\nimport { useContext, forwardRef } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar isBrowser = \"object\" !== 'undefined';\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nif (!isBrowser) {\n withEmotionCache = function withEmotionCache(func) {\n return function (props) {\n var cache = useContext(EmotionCacheContext);\n\n if (cache === null) {\n // yes, we're potentially creating this on every render\n // it doesn't actually matter though since it's only on the server\n // so there will only every be a single render\n // that could change in the future because of suspense and etc. but for now,\n // this works and i don't want to optimise for a future thing that we aren't sure about\n cache = createCache({\n key: 'css'\n });\n return /*#__PURE__*/React.createElement(EmotionCacheContext.Provider, {\n value: cache\n }, func(props, cache));\n } else {\n return func(props, cache);\n }\n };\n };\n}\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = React.useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = React.useContext(ThemeContext);\n return /*#__PURE__*/React.createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/React.forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getLastPart = function getLastPart(functionName) {\n // The match may be something like 'Object.createEmotionProps' or\n // 'Loader.prototype.render'\n var parts = functionName.split('.');\n return parts[parts.length - 1];\n};\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n if (match) return getLastPart(match[1]); // Safari / Firefox\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return getLastPart(match[1]);\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nvar Emotion$1 = Emotion;\n\nexport { CacheProvider as C, Emotion$1 as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, isBrowser as i, useTheme as u, withEmotionCache as w };\n","import * as ReactJSXRuntime from 'react/jsx-runtime';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps } from '../../dist/emotion-element-c39617d8.browser.esm.js';\nimport 'react';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\nimport '@emotion/utils';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\n\nvar Fragment = ReactJSXRuntime.Fragment;\nfunction jsx(type, props, key) {\n if (!hasOwnProperty.call(props, 'css')) {\n return ReactJSXRuntime.jsx(type, props, key);\n }\n\n return ReactJSXRuntime.jsx(Emotion, createEmotionProps(type, props), key);\n}\nfunction jsxs(type, props, key) {\n if (!hasOwnProperty.call(props, 'css')) {\n return ReactJSXRuntime.jsxs(type, props, key);\n }\n\n return ReactJSXRuntime.jsxs(Emotion, createEmotionProps(type, props), key);\n}\n\nexport { Fragment, jsx, jsxs };\n","import { createContext } from \"react\";\nimport type { ReactiveExtensionRegistry } from \"../utils/reactive-extension-registry\";\n\n/**\n * Context for ReactiveExtensionRegistry\n *\n * Provides access to the reactive extension registry throughout the component tree.\n * The registry is created by the PluginsProvider and manages reactive extension state.\n */\nexport const ReactiveExtensionRegistryContext =\n createContext<ReactiveExtensionRegistry | null>(null);\n","import { useContext } from \"react\";\nimport { ReactiveExtensionRegistryContext } from \"../contexts/reactive-extension-registry-context\";\n\n/**\n * Custom hook for accessing the ReactiveExtensionRegistry\n *\n * Provides access to the reactive extension registry that filters contributions\n * by enabled state and emits change events.\n *\n * @throws Error if used outside of ReactiveExtensionRegistryProvider\n * @returns ReactiveExtensionRegistry instance\n *\n * @example\n * ```typescript\n * function MyComponent() {\n * const registry = useReactiveExtensionRegistry();\n * const extensions = registry.getExtensions('ddk.settings.view');\n * // ...\n * }\n * ```\n */\nexport const useReactiveExtensionRegistry = () => {\n const registry = useContext(ReactiveExtensionRegistryContext);\n if (!registry) {\n throw new Error(\n \"useReactiveExtensionRegistry must be used within a component that has access to ReactiveExtensionRegistryContext\"\n );\n }\n return registry;\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport type { PluginExtension } from \"../../types/plugins\";\nimport { resolveBestExtension } from \"../utils/plugin-system/resolve-best-extension\";\nimport { useReactiveExtensionRegistry } from \"./use-reactive-extension-registry\";\n\n/**\n * NOTE: This file exports `useReactiveExtensions` (not `useExtensionPoint`)\n * to avoid naming conflict with the existing `useExtensionPoint` hook in\n * use-plugin-discovery.tsx which returns discovery metadata (ExtensionPointInfo).\n *\n * This hook returns reactive plugin extensions with automatic re-rendering.\n */\n\n/**\n * Options for useExtensionPoint hook\n */\nexport interface UseExtensionPointOptions {\n /**\n * If true, include disabled contributions in results\n * Default: false\n */\n includeDisabled?: boolean;\n\n /**\n * If true, automatically resolve the best contribution\n * Default: false\n */\n autoResolve?: boolean;\n}\n\n/**\n * Return value from useExtensionPoint hook\n */\nexport interface UseExtensionPointResult {\n /**\n * Extensions for the extension point, filtered by enabled state\n */\n extensions: Record<string, PluginExtension>;\n\n /**\n * Best contribution (if autoResolve enabled)\n */\n best: PluginExtension | null;\n\n /**\n * Whether extensions are loading (always false for now)\n */\n isLoading: boolean;\n}\n\n/**\n * React hook to use reactive extensions for an extension point\n *\n * This hook provides reactive access to plugin extensions for a specific extension point.\n * It automatically subscribes to contribution state changes and triggers re-renders\n * when contributions are enabled/disabled or when the best contribution changes.\n *\n * Key features:\n * - Filters extensions by enabled state (by default)\n * - Subscribes to extension point changes\n * - Triggers re-render when contributions change\n * - Automatically resolves best contribution (optional)\n * - Cleans up subscriptions on unmount\n *\n * @param extensionPoint - Extension point identifier (e.g., 'ddk.settings.view')\n * @param options - Configuration options\n * @returns Object with extensions, best contribution, and loading state\n *\n * @example\n * ```typescript\n * // Get only enabled extensions\n * function SettingsPage() {\n * const { extensions } = useReactiveExtensions('ddk.settings.view');\n * // Component re-renders when contributions are enabled/disabled\n * return <div>{Object.keys(extensions).length} settings available</div>;\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Auto-resolve best contribution\n * function HomePage() {\n * const { best } = useReactiveExtensions('ddk.home.hero', {\n * autoResolve: true\n * });\n * // Component re-renders when best contribution changes\n * return <div>Best hero: {best?.id}</div>;\n * }\n * ```\n *\n * @example\n * ```typescript\n * // Include disabled contributions\n * function DebugPanel() {\n * const { extensions } = useReactiveExtensions('ddk.features', {\n * includeDisabled: true\n * });\n * // Shows all contributions regardless of enabled state\n * return <div>Total features: {Object.keys(extensions).length}</div>;\n * }\n * ```\n */\nexport function useReactiveExtensions(\n extensionPoint: string,\n options?: UseExtensionPointOptions\n): UseExtensionPointResult {\n const registry = useReactiveExtensionRegistry();\n const includeDisabled = options?.includeDisabled ?? false;\n const autoResolve = options?.autoResolve ?? false;\n\n // Initialize with current extensions\n const [extensions, setExtensions] = useState<Record<string, PluginExtension>>(\n () => registry.getExtensions(extensionPoint, includeDisabled)\n );\n\n // Subscribe to extension point changes\n useEffect(() => {\n // Update to current state first (in case it changed before subscription)\n setExtensions(registry.getExtensions(extensionPoint, includeDisabled));\n\n // Subscribe to future changes\n const unsubscribe = registry.subscribe(extensionPoint, () => {\n // Refresh extensions when state changes\n setExtensions(registry.getExtensions(extensionPoint, includeDisabled));\n });\n\n // Cleanup subscription on unmount\n return unsubscribe;\n }, [registry, extensionPoint, includeDisabled]);\n\n // Calculate best contribution (memoized to avoid recalculating on every render)\n const best = useMemo(() => {\n if (!autoResolve) {\n return null;\n }\n return resolveBestExtension(extensions);\n }, [extensions, autoResolve]);\n\n return {\n extensions,\n best,\n isLoading: false, // Not async, so never loading\n };\n}\n","import { loadRemoteModule } from \"@nx/react/mf\";\n\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport type {\n BasePluginExtension,\n BaseViewPluginExtension,\n} from \"../../types/plugins\";\nimport { resolveBestExtension } from \"../utils/plugin-system/resolve-best-extension\";\nimport { useReactiveExtensions } from \"./use-extension-point\";\n\ninterface Props {\n /**\n * The extension point ID to resolve plugin modules from.\n * Example: \"ddk.ncui.settings.tabView\"\n */\n extension: string;\n\n /**\n * Optional module ID to load a specific plugin.\n * If not provided, the plugin with the **lowest rank** for the extension point is used.\n */\n module?: string;\n\n /**\n * Whether to show fallback when specified module is disabled\n * Default: true\n */\n fallbackOnDisabled?: boolean;\n\n /**\n * Whether to automatically switch to next best when current becomes disabled\n * Only applies if fallbackOnDisabled is false\n * Default: false\n */\n autoSwitchOnDisabled?: boolean;\n}\n\ntype DynamicComponentResult = [\n React.FunctionComponent | null,\n BasePluginExtension | null,\n boolean // isLoading\n];\n\n/**\n * Determines whether a plugin extension follows the \"view\" structure.\n * This allows resolving the correct field (`view.component` vs `component`) when loading.\n */\nconst isViewPlugin = (module: any): module is BaseViewPluginExtension =>\n module?.view?.component !== undefined;\n\n/**\n * React hook to resolve and lazily load a plugin component for a given extension point.\n *\n * - If `module` is provided, it directly loads that plugin.\n * - If `module` is not provided, it uses the **lowest-ranked plugin** from the extension point.\n * - Supports both standard plugins (`component`) and view-style plugins (`view.component`)\n * - Uses React.lazy + Module Federation to dynamically import the remote component.\n *\n * @param props.extension The extension point to resolve plugins from\n * @param props.module (Optional) Specific module ID to use, otherwise the highest-priority plugin is loaded\n * @returns A tuple: `[Component, PluginExtension]`\n */\nexport const useDynamicComponent = ({\n extension,\n module,\n fallbackOnDisabled = true,\n autoSwitchOnDisabled = false,\n}: Props): DynamicComponentResult => {\n // Use the reactive useReactiveExtensions hook to get filtered extensions\n const { extensions } = useReactiveExtensions(extension, {\n includeDisabled: false, // Only get enabled contributions\n autoResolve: false, // We'll resolve manually based on module prop\n });\n\n const [Component, setComponent] = useState<React.FunctionComponent | null>(\n null\n );\n const [isLoading, setIsLoading] = useState(true);\n\n // Determine which module to use (memoized to avoid recalculation)\n const targetModule = useMemo(() => {\n // Case 1: Specific module requested\n if (module) {\n const requestedModule = extensions[module];\n\n // Check if requested module exists and is enabled\n if (requestedModule) {\n return requestedModule;\n }\n\n // Module not found or disabled\n if (autoSwitchOnDisabled && !fallbackOnDisabled) {\n // Switch to best alternative\n return resolveBestExtension(extensions);\n }\n\n // Show fallback (return null)\n return null;\n }\n\n // Case 2: No specific module - use best\n return resolveBestExtension(extensions);\n }, [extensions, module, fallbackOnDisabled, autoSwitchOnDisabled]);\n\n // Extension point is available synchronously from targetModule\n const extensionPoint = targetModule ?? null;\n\n useEffect(() => {\n async function loadComponent() {\n setIsLoading(true);\n\n // Use the target module from useMemo\n const _module = targetModule;\n\n const remote = _module?.remote || \"\";\n\n // Resolve the component path for the module\n const componentName = isViewPlugin(_module)\n ? _module.view.component\n : _module?.component;\n\n const componentPath = componentName ? `./${componentName}` : \"\";\n\n if (!remote) {\n // No remote means no enabled extensions - clear Component to trigger fallback rendering\n setComponent(null);\n setIsLoading(false);\n return;\n }\n\n // Load the component using Module Federation\n const Comp = React.lazy(() => loadRemoteModule(remote, componentPath));\n setComponent(Comp);\n setIsLoading(false);\n }\n\n loadComponent();\n }, [targetModule]);\n\n return [Component, extensionPoint, isLoading];\n};\n","import React from \"react\";\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n}\n\ninterface ErrorBoundaryProps {\n fallback: React.ReactNode;\n children: React.ReactNode;\n}\n\nexport class ErrorBoundaryWithFallback extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(): ErrorBoundaryState {\n return { hasError: true };\n }\n\n override componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error(\"ErrorBoundary caught an error:\", error, errorInfo);\n }\n\n override render() {\n if (this.state.hasError) {\n return this.props.fallback;\n }\n\n return this.props.children;\n }\n}\n","import styled from \"@emotion/styled\";\nimport React, { Suspense } from \"react\";\nimport { useDynamicComponent } from \"../../hooks/use-dynamic-component\";\nimport { ErrorBoundaryWithFallback } from \"./error-boundary\";\n\nconst NotFound = styled.div`\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: center;\n width: 100%;\n`;\n\n/**\n * Props for DynamicComponent\n */\ninterface Props {\n /**\n * Extension point identifier (e.g., 'ddk.settings.view')\n */\n extension: string;\n\n /**\n * Fallback component to show when no component available\n */\n fallback?: React.ReactNode;\n\n /**\n * Specific module ID to load\n * If not provided, loads best-ranked enabled contribution\n */\n module?: string;\n\n /**\n * Props to pass to the loaded component\n */\n props?: any;\n\n /**\n * Whether to show fallback when specified module is disabled\n * Default: true\n */\n fallbackOnDisabled?: boolean;\n\n /**\n * Whether to automatically switch to next best when current becomes disabled\n * Only applies if fallbackOnDisabled is false\n * Default: false\n */\n autoSwitchOnDisabled?: boolean;\n\n /**\n * Whether to wait for component to load before rendering anything\n * Useful for modals or containers that size based on content\n * When true, returns null during loading instead of skeleton\n * Default: false\n */\n waitForLoad?: boolean;\n\n /**\n * Callback when loading state changes\n * Useful for parent components that need to know when content is ready\n * Example: Modal that shouldn't show until content is loaded\n */\n onLoadingChange?: (isLoading: boolean) => void;\n}\n\ninterface SkeletonProps {\n hasExplicitSize?: boolean;\n}\n\nconst Skeleton = styled.div<SkeletonProps>`\n align-items: center;\n background-color: transparent;\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n /* Only apply flexible sizing when no explicit size is provided */\n flex: ${(props) => (props.hasExplicitSize ? \"0 0 auto\" : \"1\")};\n height: ${(props) => (props.hasExplicitSize ? \"auto\" : \"100%\")};\n width: ${(props) => (props.hasExplicitSize ? \"auto\" : \"100%\")};\n`;\n\n/**\n * DynamicComponent - Dynamically loads and renders plugin components\n *\n * This component provides reactive plugin loading with automatic re-rendering\n * when contribution states change. It supports:\n * - Automatic filtering of disabled contributions\n * - Fallback rendering when modules become disabled\n * - Auto-switching to best alternative when current module disabled\n * - Wait-for-load mode to prevent reflow in modals\n * - Backward compatibility with existing usage\n *\n * @example\n * ```typescript\n * // Basic usage - shows best enabled contribution\n * <DynamicComponent\n * extension=\"ddk.settings.view\"\n * fallback={<DefaultSettings />}\n * />\n * ```\n *\n * @example\n * ```typescript\n * // Specific module with fallback on disabled\n * <DynamicComponent\n * extension=\"ddk.features\"\n * module=\"premium-feature\"\n * fallback={<BasicFeature />}\n * fallbackOnDisabled={true}\n * />\n * ```\n *\n * @example\n * ```typescript\n * // Auto-switch to alternative when disabled\n * <DynamicComponent\n * extension=\"ddk.features\"\n * module=\"premium-feature\"\n * fallback={<BasicFeature />}\n * fallbackOnDisabled={false}\n * autoSwitchOnDisabled={true}\n * />\n * ```\n *\n * @example\n * ```typescript\n * // Wait for load - useful for modals to prevent reflow\n * <Modal open={isOpen}>\n * <DynamicComponent\n * extension=\"ddk.modal.content\"\n * waitForLoad={true}\n * />\n * </Modal>\n * ```\n */\nexport const DynamicComponent: React.FunctionComponent<Props> = ({\n extension,\n fallback,\n module,\n props,\n fallbackOnDisabled = true,\n autoSwitchOnDisabled = false,\n waitForLoad = false,\n onLoadingChange,\n}) => {\n // Get the reactive component, extension point, and loading state\n // This automatically re-renders when contribution states change\n const [Component, extensionPoint, isLoading] = useDynamicComponent({\n extension,\n module,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n });\n\n // Notify parent when loading state changes\n React.useEffect(() => {\n onLoadingChange?.(isLoading);\n }, [isLoading, onLoadingChange]);\n\n const fb = fallback || (\n <NotFound>{`Dynamic component, ${extension}, not found...`}</NotFound>\n );\n\n // Calculate skeleton sizing once - used for both loading and Suspense fallback\n // Use extension point size if available (check both top-level and data)\n // Size can be at extensionPoint.size OR extensionPoint.data.size\n const extensionData = extensionPoint?.data as\n | { size?: { width: string; height: string } }\n | undefined;\n const size = extensionPoint?.size || extensionData?.size;\n const skeletonStyle = size ? { width: size.width, height: size.height } : {};\n const hasExplicitSize = !!size;\n\n // Create skeleton with consistent sizing\n const skeletonElement = (\n <Skeleton hasExplicitSize={hasExplicitSize} style={skeletonStyle} />\n );\n\n // Show loading state - either null (for modals) or skeleton with size hint\n if (isLoading) {\n if (waitForLoad) return null;\n return skeletonElement;\n }\n\n // Determine if we should show the component or fallback\n // Note: useDynamicComponent already filters by enabled state,\n // so if Component is null, the module is either not found or disabled\n const shouldShowFallback = !Component;\n\n // Show fallback if no component available\n if (shouldShowFallback) {\n return <>{fb}</>;\n }\n\n // Render the component with Suspense fallback that uses same sizing\n return (\n <ErrorBoundaryWithFallback fallback={fb}>\n <Suspense fallback={skeletonElement}>\n <Component {...props} />\n </Suspense>\n </ErrorBoundaryWithFallback>\n );\n};\n","/**\n * Extension Point List Component\n *\n * Focused component for displaying a searchable list of extension points.\n * Single responsibility: List display and selection.\n */\n\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport type { ExtensionPointInfo } from \"../../utils\";\n\nexport interface ExtensionPointListProps {\n extensionPoints: ExtensionPointInfo[];\n selectedExtensionId: string | null;\n onExtensionSelect: (extensionId: string) => void;\n searchTerm: string;\n onSearchChange: (searchTerm: string) => void;\n className?: string;\n}\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0; /* Important for flexbox children to shrink */\n`;\n\nconst Header = styled.div`\n padding: 16px;\n border-bottom: 1px solid #e1e5e9;\n background: #f6f8fa;\n flex-shrink: 0; /* Prevent header from shrinking */\n`;\n\nconst Title = styled.h3`\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: #24292f;\n`;\n\nconst SearchInput = styled.input`\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #d0d7de;\n border-radius: 6px;\n font-size: 14px;\n box-sizing: border-box;\n\n &:focus {\n outline: none;\n border-color: #0969da;\n box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.1);\n }\n`;\n\nconst List = styled.div`\n flex: 1;\n overflow-y: auto;\n min-height: 0; /* Critical for making overflow work in flexbox */\n`;\n\nconst ListItem = styled.div<{ selected: boolean }>`\n padding: 12px 16px;\n border-bottom: 1px solid #f0f0f0;\n cursor: pointer;\n background: ${(props) => (props.selected ? \"#f6f8fa\" : \"white\")};\n border-left: 3px solid\n ${(props) => (props.selected ? \"#0969da\" : \"transparent\")};\n\n &:hover {\n background: #f6f8fa;\n }\n`;\n\nconst ItemName = styled.div`\n font-weight: 500;\n font-size: 14px;\n color: #24292f;\n margin-bottom: 4px;\n`;\n\nconst ItemMeta = styled.div`\n font-size: 12px;\n color: #656d76;\n display: flex;\n justify-content: space-between;\n`;\n\nconst Badge = styled.span<{ variant: \"simplified\" | \"legacy\" | \"deprecated\" }>`\n display: inline-block;\n padding: 2px 6px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n\n ${(props) => {\n switch (props.variant) {\n case \"simplified\":\n return \"background: #ddf4ff; color: #0969da;\";\n case \"legacy\":\n return \"background: #fff8dc; color: #9a6700;\";\n case \"deprecated\":\n return \"background: #ffebe9; color: #cf222e;\";\n default:\n return \"background: #f6f8fa; color: #656d76;\";\n }\n }}\n`;\n\nconst EmptyState = styled.div`\n padding: 40px 16px;\n text-align: center;\n color: #656d76;\n font-size: 14px;\n`;\n\nexport const ExtensionPointList: React.FC<ExtensionPointListProps> = ({\n extensionPoints,\n selectedExtensionId,\n onExtensionSelect,\n searchTerm,\n onSearchChange,\n className,\n}) => (\n <Container className={className}>\n <Header>\n <Title>Extension Points</Title>\n <SearchInput\n placeholder=\"Search extension points...\"\n value={searchTerm}\n onChange={(e) => onSearchChange(e.target.value)}\n />\n </Header>\n\n <List>\n {extensionPoints.length > 0 ? (\n extensionPoints.map((point) => (\n <ListItem\n key={point.id}\n selected={point.id === selectedExtensionId}\n onClick={() => onExtensionSelect(point.id)}\n >\n <ItemName>{point.displayName || point.id}</ItemName>\n <ItemMeta>\n <div>\n <Badge variant={point.source}>{point.source}</Badge>\n {point.metadata?.deprecated && (\n <Badge variant=\"deprecated\" style={{ marginLeft: 4 }}>\n deprecated\n </Badge>\n )}\n </div>\n <div>\n {point.pluginCount} plugin{point.pluginCount !== 1 ? \"s\" : \"\"}\n </div>\n </ItemMeta>\n </ListItem>\n ))\n ) : (\n <EmptyState>\n {searchTerm\n ? `No extension points match \"${searchTerm}\"`\n : \"No extension points available\"}\n </EmptyState>\n )}\n </List>\n </Container>\n);\n","/**\n *\n *\n * @module remotes-provider\n * @description Provides a context for managing dynamic remotes and extensions in a React application.\n */\n\nimport styled from \"@emotion/styled\";\nimport {\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport type { DynamicRemotes } from \"../../../types/global\";\nimport type { PluginExtension } from \"../../../types/plugins\";\nimport { initPluginManager } from \"../../utils/plugin-system/plugin-extension-manager\";\nimport { initializeKosPlugins } from \"../../utils/processors/initialize-plugins\";\nimport { ReactiveExtensionRegistry } from \"../../utils/reactive-extension-registry\";\nimport { ReactiveExtensionRegistryContext } from \"../reactive-extension-registry-context\";\n\ninterface PluginsType {\n remotes?: DynamicRemotes;\n extensions?: PluginExtensionsType;\n extensionPoints?: Record<string, PluginExtension[]>;\n getExtensions: (extensionPointId: string) => PluginExtension[];\n}\n\nexport interface PluginExtensionsType {\n [k: string]: {\n [k: string]: PluginExtension;\n };\n}\n\n/**\n * The context for managing dynamic remotes and extensions.\n */\nexport const RemotesContext = createContext<PluginsType | undefined>(undefined);\n\ninterface Props {\n remotesOverride?: DynamicRemotes;\n /**\n * Optional async function to execute before initializing plugins.\n * This can be used to wait for specific events or conditions before\n * fetching and loading plugins.\n */\n onBeforeInitialize?: () => Promise<void>;\n /**\n * Optional configuration for plugin initialization\n */\n pluginConfig?: {\n pluginBaseUrl?: string;\n pluginApiPath?: string;\n pluginContext?: {\n context?: string | string[];\n group?: string;\n };\n overrides?: Record<string, string>;\n };\n}\n\nconst MessageContainer = styled.div`\n padding-inline: 20px;\n width: 100%;\n height: 100vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: fixed;\n font-size: 14px;\n top: 0;\n left: 0;\n z-index: 10000;\n`;\n/**\n * The provider component for the RemotesContext.\n */\nexport const KosPluginProvider: React.FunctionComponent<\n PropsWithChildren<Props>\n> = ({ remotesOverride, onBeforeInitialize, pluginConfig, children }) => {\n const [contextValue, setContextValue] = useState<PluginsType | undefined>();\n const [error, setError] = useState<Error | null>(null);\n\n // Create ReactiveExtensionRegistry instance when extensions are available\n // This registry is memoized to ensure single instance per context\n const reactiveRegistry = useMemo(() => {\n if (!contextValue?.extensions) {\n return null;\n }\n return new ReactiveExtensionRegistry(contextValue.extensions);\n }, [contextValue?.extensions]);\n\n // Cleanup registry on unmount\n useEffect(\n () => () => {\n reactiveRegistry?.destroy();\n },\n [reactiveRegistry]\n );\n\n useEffect(() => {\n const initialize = async () => {\n try {\n // Wait for any pre-initialization conditions\n if (onBeforeInitialize) {\n console.log(\n \"KosPluginProvider: Waiting for pre-initialization conditions...\"\n );\n await onBeforeInitialize();\n console.log(\"KosPluginProvider: Pre-initialization complete\");\n }\n\n let remotes = remotesOverride;\n\n // Check if plugins are already initialized (backwards compatibility)\n const existingRemotes = window.KosPlugins?.__dynamicRemotes;\n\n if (!remotes) {\n if (existingRemotes && Object.keys(existingRemotes).length > 0) {\n console.log(\n \"KosPluginProvider: Using existing plugin initialization\"\n );\n remotes = existingRemotes;\n } else {\n console.log(\"KosPluginProvider: Initializing plugins...\");\n await initializeKosPlugins(pluginConfig);\n // initializeKosPlugins sets window.KosPlugins.__dynamicRemotes\n remotes = window.KosPlugins?.__dynamicRemotes;\n }\n }\n\n // Initialize the plugin manager with the remotes\n const value = await initPluginManager(remotes);\n setContextValue(value);\n } catch (err) {\n console.error(\"KosPluginProvider: Failed to initialize plugins\", err);\n setError(err as Error);\n }\n };\n\n initialize();\n }, [remotesOverride, onBeforeInitialize, pluginConfig]);\n\n if (error) {\n return (\n <MessageContainer>\n <div>Failed to load plugins</div>\n <div style={{ fontSize: \"12px\", marginTop: \"10px\", opacity: 0.8 }}>\n {error.message}\n </div>\n </MessageContainer>\n );\n }\n\n return (\n <RemotesContext.Provider value={contextValue}>\n <ReactiveExtensionRegistryContext.Provider value={reactiveRegistry}>\n {contextValue ? (\n children\n ) : (\n <MessageContainer>Loading remote plugins...</MessageContainer>\n )}\n </ReactiveExtensionRegistryContext.Provider>\n </RemotesContext.Provider>\n );\n};\n\n/**\n * Custom hook for accessing the RemotesContext.\n */\nexport const useKosPluginsContext = () => {\n const context = useContext(RemotesContext);\n if (!context) {\n throw new Error(\n \"useKosPluginsContext must be used within a KosPluginProvider\"\n );\n }\n return context;\n};\n","/**\n * React hooks for plugin discovery\n *\n * Provides React-specific data management for plugin discovery functionality.\n * Thin layer over the service that handles React concerns (memoization, context, etc.)\n */\n\nimport { useMemo } from \"react\";\nimport { useKosPluginsContext } from \"../contexts/plugins-provider/plugins-provider\";\nimport {\n PluginDiscoveryService,\n type ExtensionPointInfo,\n type PluginDiscoveryOptions,\n type PluginHealthStats,\n} from \"../utils\";\n\nexport interface UsePluginDiscoveryResult {\n extensionPoints: ExtensionPointInfo[];\n healthStats: PluginHealthStats;\n isLoading: boolean;\n error?: Error;\n}\n\n/**\n * Hook for discovering extension points and plugins\n */\nexport function usePluginDiscovery(\n options?: PluginDiscoveryOptions\n): UsePluginDiscoveryResult {\n const { extensions } = useKosPluginsContext();\n\n const result = useMemo(() => {\n try {\n const extensionPoints = PluginDiscoveryService.getExtensionPoints(\n extensions,\n options\n );\n const healthStats =\n PluginDiscoveryService.calculateHealthStats(extensionPoints);\n\n return {\n extensionPoints,\n healthStats,\n isLoading: false,\n error: undefined,\n };\n } catch (error) {\n return {\n extensionPoints: [],\n healthStats: {\n totalExtensionPoints: 0,\n extensionPointsWithPlugins: 0,\n totalPlugins: 0,\n simplifiedExtensionPoints: 0,\n legacyExtensionPoints: 0,\n deprecatedExtensionPoints: 0,\n },\n isLoading: false,\n error: error as Error,\n };\n }\n }, [extensions, options]);\n\n return result;\n}\n\n/**\n * Hook for filtered extension points with search\n */\nexport function useFilteredExtensionPoints(\n searchTerm: string,\n options?: PluginDiscoveryOptions\n): UsePluginDiscoveryResult & {\n filteredExtensionPoints: ExtensionPointInfo[];\n} {\n const discovery = usePluginDiscovery(options);\n\n const filteredExtensionPoints = useMemo(\n () =>\n PluginDiscoveryService.filterExtensionPoints(\n discovery.extensionPoints,\n searchTerm\n ),\n [discovery.extensionPoints, searchTerm]\n );\n\n return {\n ...discovery,\n filteredExtensionPoints,\n };\n}\n\n/**\n * Hook for a specific extension point\n */\nexport function useExtensionPoint(\n extensionPointId: string\n): ExtensionPointInfo | undefined {\n const { extensionPoints } = usePluginDiscovery();\n\n return useMemo(\n () =>\n PluginDiscoveryService.getExtensionPointById(\n extensionPoints,\n extensionPointId\n ),\n [extensionPoints, extensionPointId]\n );\n}\n","/**\n * Plugin Card Component\n *\n * Focused component for displaying a single plugin's information and controls.\n * Single responsibility: Show plugin details and manage plugin-specific actions.\n */\n\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport type { PluginExtension } from \"../../../types/plugins\";\n// import { useKosPluginsContext } from \"../../contexts/plugins-provider\"; // Currently unused\nimport { getExtensionPointRegistry } from \"../../utils\";\nimport { getValidationResults } from \"../../utils\";\nimport { PluginDiscoveryService } from \"../../utils\";\n\nexport interface PluginCardProps {\n plugin: PluginExtension;\n extensionPointId: string;\n className?: string;\n}\n\nconst Card = styled.div`\n border: 1px solid #e1e5e9;\n border-radius: 6px;\n padding: 12px;\n background: white;\n transition: all 0.2s ease;\n`;\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n`;\n\nconst NameSection = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst HealthIndicator = styled.div<{ status: \"healthy\" | \"warning\" | \"error\" }>`\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-right: 6px;\n\n ${(props) => {\n switch (props.status) {\n case \"healthy\":\n return \"background: #1a7f37;\";\n case \"warning\":\n return \"background: #bf8700;\";\n case \"error\":\n return \"background: #cf222e;\";\n default:\n return \"background: #656d76;\";\n }\n }}\n`;\n\nconst PluginName = styled.h5`\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #24292f;\n`;\n\nconst Details = styled.div`\n font-size: 12px;\n color: #656d76;\n line-height: 1.4;\n display: grid;\n gap: 2px;\n`;\n\nconst DetailRow = styled.div`\n display: grid;\n grid-template-columns: 80px 1fr; /* Fixed label width, flexible value */\n gap: 8px;\n overflow: hidden;\n\n strong {\n font-weight: 600;\n color: #24292f;\n }\n\n span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n`;\n\nconst NoComponentNotice = styled.div`\n color: #656d76;\n font-style: italic;\n margin-top: 4px;\n font-size: 12px;\n`;\n\nconst CapabilitiesList = styled.div`\n margin-top: 6px;\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n`;\n\nconst CapabilityBadge = styled.span`\n background: #f6f8fa;\n border: 1px solid #d0d7de;\n border-radius: 12px;\n padding: 2px 6px;\n font-size: 10px;\n color: #24292f;\n`;\n\nconst ValidationSection = styled.div`\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid #f0f0f0;\n`;\n\nconst ValidationMessage = styled.div<{ type: \"error\" | \"warning\" | \"info\" }>`\n display: flex;\n align-items: flex-start;\n gap: 6px;\n padding: 6px 8px;\n border-radius: 4px;\n font-size: 11px;\n line-height: 1.3;\n margin-bottom: 4px;\n\n ${(props) => {\n switch (props.type) {\n case \"error\":\n return \"background: #ffebe9; color: #cf222e; border-left: 3px solid #cf222e;\";\n case \"warning\":\n return \"background: #fff8dc; color: #9a6700; border-left: 3px solid #bf8700;\";\n case \"info\":\n return \"background: #ddf4ff; color: #0969da; border-left: 3px solid #0969da;\";\n default:\n return \"background: #f6f8fa; color: #656d76;\";\n }\n }}\n`;\n\nconst ValidationIcon = styled.span<{ type: \"error\" | \"warning\" | \"info\" }>`\n font-size: 12px;\n font-weight: bold;\n flex-shrink: 0;\n margin-top: 1px;\n\n &::before {\n content: \"${(props) => {\n switch (props.type) {\n case \"error\":\n return \"❌\";\n case \"warning\":\n return \"⚠️\";\n case \"info\":\n return \"ℹ️\";\n default:\n return \"•\";\n }\n }}\";\n }\n`;\n\nconst ValidationText = styled.div`\n flex: 1;\n`;\n\n/**\n * Safely extract typed data from plugin based on extension point definition\n */\nfunction getTypedPluginData(plugin: PluginExtension, extensionPointId: string) {\n const registry = getExtensionPointRegistry();\n const extensionPoint = registry.getExtensionPoint(extensionPointId);\n\n // If we have an extension point definition, we can trust the data structure\n if (extensionPoint && plugin.data) {\n return plugin.data;\n }\n\n // Fallback to undefined if no extension point or no data\n return undefined;\n}\n\n/**\n * Get schema-defined fields for a plugin based on its extension point\n */\nfunction getSchemaFields(extensionPointId: string): string[] {\n const registry = getExtensionPointRegistry();\n const extensionPoint = registry.getExtensionPoint(extensionPointId);\n\n // If extension point has schema field extraction, use it\n if (extensionPoint?.getSchemaFieldInfo) {\n // Extract just the field names from the field info\n return extensionPoint.getSchemaFieldInfo().map((field) => field.name);\n }\n\n // Fallback to empty array if no schema available\n return [];\n}\n\nexport const PluginCard: React.FC<PluginCardProps> = ({\n plugin,\n extensionPointId,\n className,\n}) => {\n // const { extensions } = useKosPluginsContext(); // Currently unused\n const analysis = PluginDiscoveryService.analyzePlugin(plugin);\n const { hasComponent, healthStatus, capabilities } = analysis;\n\n // Get cached validation results from startup processing\n const allMessages = getValidationResults(plugin.id);\n\n // Get typed plugin data safely\n const pluginData = getTypedPluginData(plugin, extensionPointId);\n\n // Get schema-defined fields that should be displayed\n const schemaFields = getSchemaFields(extensionPointId);\n\n return (\n <Card className={className}>\n <Header>\n <NameSection>\n <HealthIndicator status={healthStatus} />\n <PluginName>{plugin.id}</PluginName>\n </NameSection>\n </Header>\n\n <Details>\n <DetailRow>\n <strong>Source:</strong>\n <span>{plugin.remote ? `${plugin.remote} plugin` : \"Local\"}</span>\n </DetailRow>\n <DetailRow>\n <strong>Type:</strong>\n <span>{plugin.type}</span>\n </DetailRow>\n {typeof plugin.rank === \"number\" && (\n <DetailRow>\n <strong>Priority:</strong>\n <span>{plugin.rank} (higher = preferred)</span>\n </DetailRow>\n )}\n {plugin.component && (\n <DetailRow>\n <strong>Component:</strong>\n <span>{plugin.component}</span>\n </DetailRow>\n )}\n\n {/* Dynamically render schema-defined fields */}\n {pluginData &&\n schemaFields.map((fieldName) => {\n const value = pluginData[fieldName];\n if (value == null) return null;\n\n // Format field name for display (camelCase to Title Case)\n const displayName = fieldName\n .replace(/([A-Z])/g, \" $1\")\n .replace(/^./, (str) => str.toUpperCase())\n .trim();\n\n return (\n <DetailRow key={fieldName}>\n <strong>{displayName}:</strong>\n <span>{String(value)}</span>\n </DetailRow>\n );\n })}\n\n {!hasComponent && (\n <NoComponentNotice>\n No UI component (data/utility plugin)\n </NoComponentNotice>\n )}\n\n {capabilities.length > 0 && (\n <CapabilitiesList>\n {capabilities.map((capability) => (\n <CapabilityBadge key={capability}>{capability}</CapabilityBadge>\n ))}\n </CapabilitiesList>\n )}\n\n {allMessages.length > 0 && (\n <ValidationSection>\n {allMessages.map((msg, index) => (\n <ValidationMessage key={index} type={msg.type}>\n <ValidationIcon type={msg.type} />\n <ValidationText>{msg.message}</ValidationText>\n </ValidationMessage>\n ))}\n </ValidationSection>\n )}\n </Details>\n </Card>\n );\n};\n","/**\n * Plugin Health Dashboard Component\n *\n * Focused component for displaying plugin system health statistics.\n * Single responsibility: Show health metrics in a compact format.\n */\n\nimport styled from \"@emotion/styled\";\nimport React from \"react\";\nimport { useKosPluginsContext } from \"../../contexts/plugins-provider\";\nimport { DocumentationGenerator } from \"../../utils\";\nimport type { PluginHealthStats } from \"../../utils\";\n\nexport interface PluginHealthDashboardProps {\n healthStats: PluginHealthStats;\n className?: string;\n}\n\nconst Container = styled.div`\n padding: 12px 16px;\n border-bottom: 1px solid #e1e5e9;\n background: #f9f9f9;\n font-size: 12px;\n flex-shrink: 0; /* Prevent from shrinking */\n`;\n\nconst Title = styled.div`\n font-weight: 600;\n margin-bottom: 8px;\n color: #24292f;\n`;\n\nconst StatsRow = styled.div`\n display: flex;\n gap: 12px;\n align-items: center;\n\n &:not(:last-child) {\n margin-bottom: 4px;\n }\n`;\n\nconst Stat = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n`;\n\nconst HealthIndicator = styled.div<{ status: \"healthy\" | \"warning\" | \"error\" }>`\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-right: 6px;\n\n ${(props) => {\n switch (props.status) {\n case \"healthy\":\n return \"background: #1a7f37;\";\n case \"warning\":\n return \"background: #bf8700;\";\n case \"error\":\n return \"background: #cf222e;\";\n default:\n return \"background: #656d76;\";\n }\n }}\n`;\n\nconst Badge = styled.span<{ variant: \"simplified\" | \"legacy\" | \"deprecated\" }>`\n display: inline-block;\n padding: 2px 6px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n\n ${(props) => {\n switch (props.variant) {\n case \"simplified\":\n return \"background: #ddf4ff; color: #0969da;\";\n case \"legacy\":\n return \"background: #fff8dc; color: #9a6700;\";\n case \"deprecated\":\n return \"background: #ffebe9; color: #cf222e;\";\n default:\n return \"background: #f6f8fa; color: #656d76;\";\n }\n }}\n`;\n\nconst ExportButton = styled.button`\n background: #0969da;\n border: 1px solid #0969da;\n border-radius: 4px;\n color: white;\n cursor: pointer;\n font-size: 11px;\n padding: 4px 8px;\n margin-top: 8px;\n width: 100%;\n\n &:hover {\n background: #0860ca;\n border-color: #0860ca;\n }\n\n &:active {\n background: #0757ba;\n }\n`;\n\nexport const PluginHealthDashboard: React.FC<PluginHealthDashboardProps> = ({\n healthStats,\n className,\n}) => {\n const { extensions } = useKosPluginsContext();\n const {\n totalPlugins,\n extensionPointsWithPlugins,\n totalExtensionPoints,\n simplifiedExtensionPoints,\n legacyExtensionPoints,\n deprecatedExtensionPoints,\n } = healthStats;\n\n const handleExportDocumentation = () => {\n try {\n const documentation = DocumentationGenerator.generateFullDocumentation(\n extensions,\n {\n includeUsageExamples: true,\n includeTypeDefinitions: true,\n includeLegacyExtensions: true,\n includePluginHealth: true,\n }\n );\n\n // Create and download the file\n const blob = new Blob([documentation.content], { type: \"text/markdown\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `kos-extension-points-${\n new Date().toISOString().split(\"T\")[0]\n }.md`;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } catch (error) {\n console.error(\"Failed to generate documentation:\", error);\n }\n };\n\n return (\n <Container className={className}>\n <Title>System Health</Title>\n\n <StatsRow>\n <Stat>\n <HealthIndicator status=\"healthy\" />\n <span>{totalPlugins} plugins</span>\n </Stat>\n <Stat>\n <span>\n {extensionPointsWithPlugins}/{totalExtensionPoints} active\n </span>\n </Stat>\n </StatsRow>\n\n <StatsRow>\n <Stat>\n <Badge variant=\"simplified\">{simplifiedExtensionPoints}</Badge>\n <span>simplified</span>\n </Stat>\n <Stat>\n <Badge variant=\"legacy\">{legacyExtensionPoints}</Badge>\n <span>legacy</span>\n </Stat>\n {deprecatedExtensionPoints > 0 && (\n <Stat>\n <Badge variant=\"deprecated\">{deprecatedExtensionPoints}</Badge>\n <span>deprecated</span>\n </Stat>\n )}\n </StatsRow>\n\n <ExportButton onClick={handleExportDocumentation}>\n Export Documentation\n </ExportButton>\n </Container>\n );\n};\n","/**\n * Plugin Explorer - Runtime Plugin Discovery Tool\n *\n * Orchestrates focused components with clear separation of concerns.\n * This component only handles layout and state coordination.\n */\n\nimport styled from \"@emotion/styled\";\nimport React, { useState } from \"react\";\nimport { useFilteredExtensionPoints } from \"../../hooks/use-plugin-discovery\";\nimport { ExtensionPointList } from \"./extension-point-list\";\nimport { PluginCard } from \"./plugin-card\";\nimport { PluginHealthDashboard } from \"./plugin-health-dashboard\";\n\nexport interface PluginExplorerProps {\n /** Optional CSS class name */\n className?: string;\n /** Whether to show legacy extension points (non-simplified) */\n showLegacyExtensions?: boolean;\n /** Optional filter for extension point IDs */\n extensionFilter?: string;\n}\n\nconst Container = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n min-height: 400px; /* Minimum usable height */\n border: 1px solid #e1e5e9;\n border-radius: 8px;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui,\n sans-serif;\n background: white;\n container-type: inline-size; /* Enable container queries */\n`;\n\nconst Sidebar = styled.div`\n flex: 0 0 35%; /* Take 35% of container width */\n min-width: 280px; /* Minimum usable width */\n max-width: 400px; /* Maximum width to prevent too wide */\n border-right: 1px solid #e1e5e9;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n /* Hide on very small screens */\n @media (max-width: 768px) {\n flex: 0 0 100%;\n max-width: 100%;\n border-right: none;\n }\n`;\n\nconst MainContent = styled.div`\n flex: 1;\n min-width: 0; /* Allows flex child to shrink below content size */\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n /* Hide on mobile when sidebar is showing */\n @media (max-width: 768px) {\n display: none; /* We'll add mobile navigation later if needed */\n }\n`;\n\nconst ContentHeader = styled.div`\n padding: 16px;\n border-bottom: 1px solid #e1e5e9;\n background: #f6f8fa;\n`;\n\nconst ContentTitle = styled.h4`\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: #24292f;\n`;\n\nconst ContentDescription = styled.p`\n margin: 0;\n font-size: 14px;\n color: #656d76;\n`;\n\nconst ContentBody = styled.div`\n flex: 1;\n padding: 16px;\n overflow-y: auto;\n`;\n\nconst PluginGrid = styled.div`\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 24px;\n`;\n\nconst EmptyState = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #656d76;\n text-align: center;\n`;\n\nconst MetadataSection = styled.div`\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #e1e5e9;\n`;\n\nconst MetadataTitle = styled.h5`\n margin: 0 0 8px 0;\n font-size: 14px;\n font-weight: 600;\n color: #24292f;\n`;\n\nconst MetadataGrid = styled.div`\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 8px 16px;\n font-size: 12px;\n`;\n\nconst MetadataLabel = styled.div`\n color: #656d76;\n font-weight: 500;\n`;\n\nconst MetadataValue = styled.div`\n color: #24292f;\n`;\n\nexport const PluginExplorer: React.FC<PluginExplorerProps> = ({\n className,\n showLegacyExtensions = true,\n extensionFilter = \"\",\n}) => {\n // State management - only UI concerns\n const [selectedExtensionId, setSelectedExtensionId] = useState<string | null>(\n null\n );\n const [searchTerm, setSearchTerm] = useState(extensionFilter);\n\n // Data layer - via hooks that use service layer\n const { filteredExtensionPoints, healthStats, isLoading, error } =\n useFilteredExtensionPoints(searchTerm, {\n includeLegacyExtensions: showLegacyExtensions,\n });\n\n // Derived state\n const selectedExtensionPoint = filteredExtensionPoints.find(\n (point) => point.id === selectedExtensionId\n );\n\n // Event handlers - only coordinate between components\n const handleExtensionSelect = (extensionId: string) => {\n setSelectedExtensionId(extensionId);\n };\n\n const handleSearchChange = (term: string) => {\n setSearchTerm(term);\n };\n\n if (error) {\n return (\n <Container className={className}>\n <EmptyState>\n <div>Error loading plugins: {error.message}</div>\n </EmptyState>\n </Container>\n );\n }\n\n if (isLoading) {\n return (\n <Container className={className}>\n <EmptyState>\n <div>Loading plugins...</div>\n </EmptyState>\n </Container>\n );\n }\n\n return (\n <Container className={className}>\n <Sidebar>\n {/* Health dashboard - focused component */}\n <PluginHealthDashboard healthStats={healthStats} />\n\n {/* Extension point list - focused component */}\n <ExtensionPointList\n extensionPoints={filteredExtensionPoints}\n selectedExtensionId={selectedExtensionId}\n onExtensionSelect={handleExtensionSelect}\n searchTerm={searchTerm}\n onSearchChange={handleSearchChange}\n />\n </Sidebar>\n\n <MainContent>\n {selectedExtensionPoint ? (\n <>\n <ContentHeader>\n <ContentTitle>\n {selectedExtensionPoint.displayName ||\n selectedExtensionPoint.id}\n </ContentTitle>\n {selectedExtensionPoint.description && (\n <ContentDescription>\n {selectedExtensionPoint.description}\n </ContentDescription>\n )}\n </ContentHeader>\n\n <ContentBody>\n {selectedExtensionPoint.plugins.length > 0 ? (\n <>\n <h5\n style={{\n margin: \"0 0 12px 0\",\n fontSize: \"14px\",\n fontWeight: 600,\n }}\n >\n Active Plugins ({selectedExtensionPoint.pluginCount})\n </h5>\n\n <PluginGrid>\n {selectedExtensionPoint.plugins.map((plugin) => (\n <PluginCard\n key={plugin.id}\n plugin={plugin}\n extensionPointId={selectedExtensionPoint.id}\n />\n ))}\n </PluginGrid>\n </>\n ) : (\n <EmptyState>\n <div style={{ fontSize: \"48px\", marginBottom: \"12px\" }}>\n 🔌\n </div>\n <div\n style={{\n fontSize: \"16px\",\n fontWeight: 500,\n marginBottom: \"8px\",\n }}\n >\n No plugins registered\n </div>\n <div style={{ fontSize: \"14px\" }}>\n This extension point is available but no plugins are\n currently contributing to it.\n </div>\n </EmptyState>\n )}\n\n {selectedExtensionPoint.metadata && (\n <MetadataSection>\n <MetadataTitle>Extension Point Details</MetadataTitle>\n <MetadataGrid>\n <MetadataLabel>ID:</MetadataLabel>\n <MetadataValue>{selectedExtensionPoint.id}</MetadataValue>\n\n <MetadataLabel>Source:</MetadataLabel>\n <MetadataValue>\n {selectedExtensionPoint.source}\n </MetadataValue>\n\n {selectedExtensionPoint.metadata.category && (\n <>\n <MetadataLabel>Category:</MetadataLabel>\n <MetadataValue>\n {selectedExtensionPoint.metadata.category}\n </MetadataValue>\n </>\n )}\n\n {selectedExtensionPoint.metadata.owner && (\n <>\n <MetadataLabel>Owner:</MetadataLabel>\n <MetadataValue>\n {selectedExtensionPoint.metadata.owner}\n </MetadataValue>\n </>\n )}\n\n {selectedExtensionPoint.metadata.since && (\n <>\n <MetadataLabel>Since:</MetadataLabel>\n <MetadataValue>\n {selectedExtensionPoint.metadata.since}\n </MetadataValue>\n </>\n )}\n\n {selectedExtensionPoint.metadata.tags &&\n selectedExtensionPoint.metadata.tags.length > 0 && (\n <>\n <MetadataLabel>Tags:</MetadataLabel>\n <MetadataValue>\n {selectedExtensionPoint.metadata.tags.join(\", \")}\n </MetadataValue>\n </>\n )}\n </MetadataGrid>\n </MetadataSection>\n )}\n </ContentBody>\n </>\n ) : (\n <EmptyState>\n <div style={{ fontSize: \"48px\", marginBottom: \"12px\" }}>🔍</div>\n <div\n style={{ fontSize: \"16px\", fontWeight: 500, marginBottom: \"8px\" }}\n >\n Select an extension point\n </div>\n <div style={{ fontSize: \"14px\" }}>\n Choose an extension point from the sidebar to view its plugins and\n details.\n </div>\n </EmptyState>\n )}\n </MainContent>\n </Container>\n );\n};\n","/**\n * Floating Plugin Explorer - Development Mode Overlay\n *\n * A floating panel that appears only in development mode for runtime plugin discovery.\n * Can be toggled via keyboard shortcut or button click.\n */\n\nimport styled from \"@emotion/styled\";\nimport React, { useEffect, useState } from \"react\";\nimport { PluginExplorer, type PluginExplorerProps } from \"./plugin-explorer\";\n\nexport interface FloatingPluginExplorerProps\n extends Omit<PluginExplorerProps, \"className\"> {\n /** Keyboard shortcut to toggle (default: \"ctrl+shift+p\") */\n keyboardShortcut?: string;\n /** Whether to show the toggle button (default: true) */\n showToggleButton?: boolean;\n /** Position of the toggle button (default: \"bottom-right\") */\n toggleButtonPosition?:\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\";\n}\n\nconst FloatingOverlay = styled.div<{ visible: boolean }>`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 10000;\n display: ${(props) => (props.visible ? \"flex\" : \"none\")};\n align-items: center;\n justify-content: center;\n padding: 20px;\n box-sizing: border-box;\n`;\n\nconst FloatingPanel = styled.div`\n background: white;\n border-radius: 12px;\n box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);\n width: min(1200px, 90vw); /* Responsive with max limit */\n height: min(700px, 85vh); /* Responsive with max limit */\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n`;\n\nconst PanelHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid #e1e5e9;\n background: #f6f8fa;\n`;\n\nconst PanelTitle = styled.h3`\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #24292f;\n`;\n\nconst CloseButton = styled.button`\n background: none;\n border: none;\n font-size: 20px;\n cursor: pointer;\n padding: 4px;\n color: #656d76;\n border-radius: 4px;\n\n &:hover {\n background: #f0f0f0;\n color: #24292f;\n }\n`;\n\nconst ToggleButton = styled.button<{ position: string }>`\n position: fixed;\n ${(props) => {\n switch (props.position) {\n case \"top-left\":\n return \"top: 20px; left: 20px;\";\n case \"top-right\":\n return \"top: 20px; right: 20px;\";\n case \"bottom-left\":\n return \"bottom: 20px; left: 20px;\";\n case \"bottom-right\":\n default:\n return \"bottom: 20px; right: 20px;\";\n }\n }}\n\n background: #0969da;\n color: white;\n border: none;\n border-radius: 50%;\n width: 56px;\n height: 56px;\n font-size: 24px;\n cursor: pointer;\n z-index: 9999;\n box-shadow: 0 4px 12px rgba(9, 105, 218, 0.3);\n transition: all 0.2s ease;\n\n /* Center the SVG content */\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n background: #0860ca;\n transform: scale(1.05);\n }\n\n &:active {\n transform: scale(0.95);\n }\n`;\n\nconst KeyboardHint = styled.div`\n font-size: 12px;\n color: #656d76;\n margin-left: 8px;\n`;\n\nexport const FloatingPluginExplorer: React.FC<FloatingPluginExplorerProps> = ({\n keyboardShortcut = \"ctrl+shift+p\",\n showToggleButton = true,\n toggleButtonPosition = \"bottom-right\",\n ...pluginExplorerProps\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n\n // Keyboard shortcut handler\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const shortcut = keyboardShortcut.toLowerCase();\n const parts = shortcut.split(\"+\").map((part) => part.trim());\n\n let matches = true;\n\n if (parts.includes(\"ctrl\") && !event.ctrlKey) matches = false;\n if (parts.includes(\"shift\") && !event.shiftKey) matches = false;\n if (parts.includes(\"alt\") && !event.altKey) matches = false;\n if (parts.includes(\"meta\") && !event.metaKey) matches = false;\n\n const key = parts.find(\n (part) => ![\"ctrl\", \"shift\", \"alt\", \"meta\"].includes(part)\n );\n if (key && event.key.toLowerCase() !== key.toLowerCase()) matches = false;\n\n if (matches) {\n event.preventDefault();\n setIsVisible((prev) => !prev);\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [keyboardShortcut]);\n\n // Close on escape key\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && isVisible) {\n setIsVisible(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [isVisible]);\n\n const toggleVisibility = () => {\n setIsVisible((prev) => !prev);\n };\n\n const handleOverlayClick = (event: React.MouseEvent) => {\n if (event.target === event.currentTarget) {\n setIsVisible(false);\n }\n };\n\n // Only render in development mode\n if (process.env.NODE_ENV !== \"development\") {\n return null;\n }\n\n return (\n <>\n {showToggleButton && (\n <ToggleButton\n position={toggleButtonPosition}\n onClick={toggleVisibility}\n title={`Plugin Explorer (${keyboardShortcut})`}\n >\n <svg\n fill=\"#ffffff\"\n width=\"28\"\n height=\"28\"\n version=\"1.1\"\n id=\"Artwork\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n style={{ display: \"block\" }}\n >\n <g>\n <path\n fill=\"#ffffff\"\n stroke=\"#FFFFFF\"\n d=\"M202.7,259.7l-31.5,31.5c-5.6,5.6-8.6,13-8.6,20.9c0,7.9,3.1,15.3,8.6,20.9l6.1,6.1l-3.7,3.7c-11.1,11.1-29.2,11.1-40.4,0\n\t\tl-31.4-31.4c-20.7-20.7-54.3-20.7-75,0c-20.7,20.7-20.7,54.3,0,75l31.4,31.5c5.4,5.4,8.4,12.6,8.4,20.2s-3,14.8-8.4,20.2\n\t\tc-4.8,4.8-4.8,12.5,0,17.3c2.4,2.4,5.5,3.6,8.7,3.6c3.1,0,6.3-1.2,8.7-3.6c10-10,15.5-23.3,15.5-37.5s-5.5-27.5-15.5-37.5\n\t\tl-31.4-31.5c-11.1-11.1-11.1-29.2,0-40.4s29.2-11.1,40.4,0L116,360c20.7,20.7,54.3,20.7,75,0l3.7-3.7l6.1,6.1\n\t\tc5.8,5.8,13.3,8.6,20.9,8.6c7.6,0,15.1-2.9,20.9-8.6l31.5-31.5c11.4,3.7,23.2,5.7,35,5.7c28.7,0,57.4-10.9,79.2-32.7l55.1-55.1\n\t\tl9.9,9.9c2.4,2.4,5.5,3.6,8.7,3.6s6.3-1.2,8.7-3.6c4.8-4.8,4.8-12.5,0-17.3l-40.5-40.5l67-67c4.8-4.8,4.8-12.5,0-17.3\n\t\tc-4.8-4.8-12.5-4.8-17.3,0l-67,67L350.2,121l67-67c4.8-4.8,4.8-12.5,0-17.3c-4.8-4.8-12.5-4.8-17.3,0l-67,67l-40.5-40.5\n\t\tc-4.8-4.8-12.5-4.8-17.3,0c-4.8,4.8-4.8,12.5,0,17.3l9.9,9.9l-55.1,55.1C199,176.4,190,220.8,202.7,259.7z M247.1,286.6\n\t\tc-34.1-34.1-34.1-89.6,0-123.7l55.1-55.1L426,231.4l-55.1,55.1C336.7,320.7,281.2,320.7,247.1,286.6z M213.7,283.4\n\t\tc4.5,7.3,9.8,14.2,16.1,20.5s13.2,11.6,20.5,16.1l-25.2,25.2c-1.9,2-5.1,2-7.1,0l-29.5-29.5c-1.3-1.3-1.5-2.8-1.5-3.5\n\t\tc0-0.8,0.2-2.3,1.5-3.5L213.7,283.4z\"\n />\n </g>\n </svg>\n </ToggleButton>\n )}\n\n <FloatingOverlay visible={isVisible} onClick={handleOverlayClick}>\n <FloatingPanel>\n <PanelHeader>\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n <PanelTitle>KOS Plugin Explorer</PanelTitle>\n <KeyboardHint>{keyboardShortcut} to toggle</KeyboardHint>\n </div>\n <CloseButton onClick={() => setIsVisible(false)} aria-label=\"Close\">\n ×\n </CloseButton>\n </PanelHeader>\n <PluginExplorer {...pluginExplorerProps} />\n </FloatingPanel>\n </FloatingOverlay>\n </>\n );\n};\n","import React from \"react\";\nimport { DynamicComponent } from \"../components/dynamic-component/dynamic-component\";\nimport { getExtensionPointRegistry } from \"../utils/extension-points/define-extension-point\";\nimport type { ExtensionPointDefinition } from \"../utils/extension-points/extension-point-types\";\n\n/**\n * Props for extension components created by the hook\n */\nexport interface ExtensionComponentProps {\n module?: string;\n fallback?: React.ReactNode;\n /**\n * Whether to show fallback when specified module is disabled\n * Default: true\n */\n fallbackOnDisabled?: boolean;\n /**\n * Whether to automatically switch to next best when current becomes disabled\n * Only applies if fallbackOnDisabled is false\n * Default: false\n */\n autoSwitchOnDisabled?: boolean;\n /**\n * Whether to wait for component to load before rendering anything\n * Useful for modals or containers that size based on content\n * When true, returns null during loading instead of skeleton\n * Default: false\n */\n waitForLoad?: boolean;\n /**\n * Callback when loading state changes\n * Useful for parent components that need to know when content is ready\n */\n onLoadingChange?: (isLoading: boolean) => void;\n}\n\n/**\n * Hook that creates a strongly typed React component for an extension point\n * This moves the React component creation to runtime, avoiding webpack config issues\n */\nexport function useExtensionComponent<\n TData = any,\n TProcessed = TData,\n TProps = any\n>(\n definition: ExtensionPointDefinition<TData, TProcessed, TProps>\n): React.ComponentType<ExtensionComponentProps & TProps> | null {\n return React.useMemo(() => {\n // Only create component for view-based extensions\n if (!definition.config.hasView) {\n return null;\n }\n\n const ExtensionComponent = (props: ExtensionComponentProps & TProps) => {\n const {\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n waitForLoad,\n onLoadingChange,\n ...otherProps\n } = props;\n\n return React.createElement(DynamicComponent, {\n extension: definition.id,\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n waitForLoad,\n onLoadingChange,\n props: otherProps,\n });\n };\n\n // Set display name for better debugging\n ExtensionComponent.displayName = `${\n definition.config.displayName || definition.id\n }.Component`;\n\n return ExtensionComponent;\n }, [definition]);\n}\n\n/**\n * Factory function that creates a component for an extension point\n * Alternative to the hook for non-hook contexts\n */\nexport function createExtensionComponent<\n TData = any,\n TProcessed = TData,\n TProps = any\n>(\n definition: ExtensionPointDefinition<TData, TProcessed, TProps>\n): React.ComponentType<ExtensionComponentProps & TProps> | null {\n // Only create component for view-based extensions\n if (!definition.config.hasView) {\n return null;\n }\n\n const ExtensionComponent = (props: ExtensionComponentProps & TProps) => {\n const {\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n waitForLoad,\n onLoadingChange,\n ...otherProps\n } = props;\n\n return React.createElement(DynamicComponent, {\n extension: definition.id,\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n waitForLoad,\n onLoadingChange,\n props: otherProps,\n });\n };\n\n // Set display name for better debugging\n ExtensionComponent.displayName = `${\n definition.config.displayName || definition.id\n }.Component`;\n\n return ExtensionComponent;\n}\n\n/**\n * Hook that creates a React component for an extension point by ID\n * Useful for JSON-defined extension points where you only have the string ID\n */\nexport function useExtensionComponentById<TProps = any>(\n extensionPointId: string\n): React.ComponentType<ExtensionComponentProps & TProps> | null {\n return React.useMemo(() => {\n const registry = getExtensionPointRegistry();\n const definition = registry.getExtensionPoint(extensionPointId);\n\n if (!definition) {\n console.warn(`Extension point not found: ${extensionPointId}`);\n return null;\n }\n\n // Only create component for view-based extensions\n if (!definition.config.hasView) {\n return null;\n }\n\n const ExtensionComponent = (props: ExtensionComponentProps & TProps) => {\n const {\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n waitForLoad,\n onLoadingChange,\n ...otherProps\n } = props;\n\n return React.createElement(DynamicComponent, {\n extension: extensionPointId,\n module,\n fallback,\n fallbackOnDisabled,\n autoSwitchOnDisabled,\n waitForLoad,\n onLoadingChange,\n props: otherProps,\n });\n };\n\n // Set display name for better debugging\n ExtensionComponent.displayName = `${\n definition.config.displayName || extensionPointId\n }.Component`;\n\n return ExtensionComponent;\n }, [extensionPointId]);\n}\n","/**\n * Typed hooks for simplified extension points\n *\n * These hooks provide type-safe access to extension points defined with the\n * new defineExtensionPoint API, while maintaining backward compatibility\n * with existing extension points.\n */\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { BasePluginExtension, PluginExtension } from \"../../types/plugins\";\nimport { useKosPluginsContext } from \"../contexts\";\nimport type { ExtensionPointDefinition } from \"../utils\";\nimport { resolveBestExtension } from \"../utils\";\nimport { useReactiveExtensions } from \"./use-extension-point\";\n\n/**\n * Criteria for selecting the best extension from multiple candidates\n */\nexport interface BestExtensionCriteria {\n /** Preferred module/plugin ID */\n preferredModule?: string;\n /**\n * Generic property matching - filters extensions where all specified\n * properties match the values in extension.data\n * @example { environment: 'production', version: '2.0' }\n */\n propertyMatches?: Record<string, any>;\n /** Custom ranking function */\n customRanker?: (extensions: PluginExtension[]) => PluginExtension | null;\n}\n\n/**\n * Hook to get all extensions for a specific extension point with full type safety\n *\n * @example\n * ```tsx\n * // For simplified extension points (with type inference)\n * const nutritionalExtensions = useExtensions(CuiNutritionalData);\n * // Type: BasePluginExtension & { data: ProcessedNutritionalData }[]\n *\n * // For legacy extension points (generic)\n * const cuiExtensions = useExtensions(\"ddk.cui.settings.config\");\n * // Type: PluginExtension[]\n * ```\n */\nexport function useExtensions<TData = unknown, TProcessed = TData>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>\n): (BasePluginExtension<TProcessed> & { data: TProcessed })[];\n\nexport function useExtensions<TData = unknown>(\n extensionPointId: string\n): PluginExtension<TData>[];\n\nexport function useExtensions<TData = unknown, TProcessed = TData>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string\n):\n | (BasePluginExtension<TProcessed> & { data: TProcessed })[]\n | PluginExtension<TData>[] {\n // Get extension point ID\n const extensionPointId =\n typeof extensionPointOrId === \"object\"\n ? extensionPointOrId.id\n : extensionPointOrId;\n\n // Use the reactive extensions hook - this will automatically re-render when contributions change!\n const { extensions: reactiveExtensions } = useReactiveExtensions(\n extensionPointId,\n {\n includeDisabled: false, // Only get enabled contributions\n autoResolve: false,\n }\n );\n\n return useMemo(() => {\n // Handle simplified extension point objects\n if (typeof extensionPointOrId === \"object\" && extensionPointOrId.id) {\n const extensionPoint = extensionPointOrId as ExtensionPointDefinition<\n TData,\n TProcessed\n >;\n\n // Use the getExtensions helper from the extension point definition\n if (extensionPoint.getExtensions) {\n const extMap = extensionPoint.getExtensions({\n [extensionPoint.id]: reactiveExtensions,\n });\n return Object.values(extMap);\n }\n\n // Fallback to raw extension lookup\n return Object.values(\n reactiveExtensions\n ) as (BasePluginExtension<TProcessed> & {\n data: TProcessed;\n })[];\n }\n\n // Handle legacy extension point IDs (string)\n return Object.values(reactiveExtensions) as PluginExtension<TData>[];\n }, [extensionPointOrId, reactiveExtensions]);\n}\n\n/**\n * Hook to get the best extension for a specific extension point with type safety\n *\n * @example\n * ```tsx\n * // Get best extension with automatic selection\n * const bestNutrition = useBest(CuiNutritionalData);\n *\n * // Get best extension with property matching\n * const bestNutrition = useBest(CuiNutritionalData, {\n * propertyMatches: { environment: 'production', version: '2.0' }\n * });\n *\n * // Legacy extension point\n * const bestCui = useBest(\"ddk.cui.settings.config\", {\n * preferredModule: 'my-plugin-id'\n * });\n * ```\n */\nexport function useBest<TData = unknown, TProcessed = TData>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>,\n criteria?: BestExtensionCriteria\n): (BasePluginExtension<TProcessed> & { data: TProcessed }) | null;\n\nexport function useBest<TData = unknown>(\n extensionPointId: string,\n criteria?: BestExtensionCriteria\n): PluginExtension<TData> | null;\n\nexport function useBest<TData = unknown, TProcessed = TData>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string,\n criteria?: BestExtensionCriteria\n):\n | (BasePluginExtension<TProcessed> & { data: TProcessed })\n | PluginExtension<TData>\n | null {\n const { extensions } = useKosPluginsContext();\n const allExtensions = useExtensions(extensionPointOrId as any);\n\n return useMemo(() => {\n if (!allExtensions || allExtensions.length === 0) {\n return null;\n }\n\n // If custom ranker is provided, use it\n if (criteria?.customRanker) {\n return criteria.customRanker(allExtensions as PluginExtension[]);\n }\n\n // For simplified extension points, apply intelligent selection\n if (typeof extensionPointOrId === \"object\" && criteria) {\n const typedExtensions =\n allExtensions as (BasePluginExtension<TProcessed> & {\n data: TProcessed;\n })[];\n\n // Filter by criteria\n let candidates = typedExtensions;\n\n // Filter by generic property matches\n if (criteria.propertyMatches) {\n candidates = candidates.filter((ext) =>\n Object.entries(criteria.propertyMatches!).every(\n ([key, value]) => (ext.data as any)?.[key] === value\n )\n );\n }\n\n // Filter by preferred module if specified\n if (criteria.preferredModule) {\n const moduleMatch = candidates.find(\n (ext) => ext.sectionId === criteria.preferredModule\n );\n if (moduleMatch) {\n return moduleMatch;\n }\n }\n\n // Convert to record format for resolveBestExtension\n const candidatesRecord = candidates.reduce((acc, ext) => {\n acc[ext.id] = ext as any;\n return acc;\n }, {} as Record<string, any>);\n\n return resolveBestExtension(candidatesRecord);\n }\n\n // For legacy extension points or no criteria, use standard resolution\n const extensionPointId =\n typeof extensionPointOrId === \"string\"\n ? extensionPointOrId\n : extensionPointOrId.id;\n\n const extensionMap = extensions?.[extensionPointId] || {};\n\n return resolveBestExtension(extensionMap, criteria?.preferredModule);\n }, [extensionPointOrId, allExtensions, extensions, criteria]);\n}\n\n/**\n * Hook to check if any extensions are available for an extension point\n *\n * @example\n * ```tsx\n * const hasNutritionExtensions = useHasExtensions(CuiNutritionalData);\n * if (hasNutritionExtensions) {\n * return <DynamicComponent extension={CuiNutritionalData.id} />;\n * }\n * return <DefaultNutritionInfo />;\n * ```\n */\nexport function useHasExtensions<TData = any, TProcessed = TData>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>\n): boolean;\n\nexport function useHasExtensions(extensionPointId: string): boolean;\n\nexport function useHasExtensions<TData = any, TProcessed = TData>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string\n): boolean {\n const extensions = useExtensions(extensionPointOrId as any);\n return extensions.length > 0;\n}\n\n/**\n * Hook to get extension count for an extension point\n * Useful for displaying \"X plugins available\" messages\n */\nexport function useExtensionCount<TData = any, TProcessed = TData>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>\n): number;\n\nexport function useExtensionCount(extensionPointId: string): number;\n\nexport function useExtensionCount<TData = any, TProcessed = TData>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string\n): number {\n const extensions = useExtensions(extensionPointOrId as any);\n return extensions.length;\n}\n\n/**\n * Hook to get extensions filtered by specific criteria\n * More flexible than useBest when you need multiple filtered results\n *\n * @example\n * ```tsx\n * // Get all US-specific extensions\n * const usExtensions = useFilteredExtensions(CuiNutritionalData, {\n * filter: (ext) => ext.data.regionCode === 'US'\n * });\n * ```\n */\nexport function useFilteredExtensions<TData = unknown, TProcessed = TData>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>,\n options: {\n filter: (\n extension: BasePluginExtension<TProcessed> & { data: TProcessed }\n ) => boolean;\n sort?: (\n a: BasePluginExtension<TProcessed> & { data: TProcessed },\n b: BasePluginExtension<TProcessed> & { data: TProcessed }\n ) => number;\n }\n): (BasePluginExtension<TProcessed> & { data: TProcessed })[];\n\nexport function useFilteredExtensions<TData = unknown>(\n extensionPointId: string,\n options: {\n filter: (extension: PluginExtension<TData>) => boolean;\n sort?: (a: PluginExtension<TData>, b: PluginExtension<TData>) => number;\n }\n): PluginExtension<TData>[];\n\nexport function useFilteredExtensions<TData = unknown, TProcessed = TData>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string,\n options: {\n filter: (\n extension:\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed })\n ) => boolean;\n sort?: (\n a:\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed }),\n b:\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed })\n ) => number;\n }\n): (\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed })\n)[] {\n const allExtensions = useExtensions(extensionPointOrId as any);\n\n return useMemo(() => {\n let filtered = allExtensions.filter(options.filter as any);\n\n if (options.sort) {\n filtered = filtered.sort(options.sort as any);\n }\n\n return filtered as any;\n }, [allExtensions, options.filter, options.sort]);\n}\n\n/**\n * Hook to load raw modules (non-React components) from extensions\n * Useful for accessing utility functions, services, configurations, or other non-UI modules\n *\n * @example\n * ```tsx\n * // Load utility modules\n * const utilityModules = useModules(UtilityExtension);\n *\n * // Load configuration modules\n * const configModules = useModules(ConfigExtension, {\n * filter: (ext) => ext.data.environment === 'production'\n * });\n *\n * // Access loaded modules\n * utilityModules.forEach(({ module, extension }) => {\n * if (module?.validateData) {\n * const isValid = module.validateData(someData);\n * }\n * });\n * ```\n */\nexport function useModules<\n TData = unknown,\n TProcessed = TData,\n TModule = unknown\n>(\n extensionPoint: ExtensionPointDefinition<TData, TProcessed>,\n options?: {\n filter?: (\n extension: BasePluginExtension<TProcessed> & { data: TProcessed }\n ) => boolean;\n moduleProperty?: string; // Default: 'module'\n }\n): Array<{\n extension: BasePluginExtension<TProcessed> & { data: TProcessed };\n module: TModule | null;\n loading: boolean;\n error: string | null;\n}>;\n\nexport function useModules<TData = unknown, TModule = unknown>(\n extensionPointId: string,\n options?: {\n filter?: (extension: PluginExtension<TData>) => boolean;\n moduleProperty?: string;\n }\n): Array<{\n extension: PluginExtension<TData>;\n module: TModule | null;\n loading: boolean;\n error: string | null;\n}>;\n\nexport function useModules<\n TData = unknown,\n TProcessed = TData,\n TModule = unknown\n>(\n extensionPointOrId: ExtensionPointDefinition<TData, TProcessed> | string,\n options?: {\n filter?: (\n extension:\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed })\n ) => boolean;\n moduleProperty?: string;\n }\n): Array<{\n extension:\n | PluginExtension<TData>\n | (BasePluginExtension<TProcessed> & { data: TProcessed });\n module: TModule | null;\n loading: boolean;\n error: string | null;\n}> {\n const allExtensions = useExtensions(extensionPointOrId as any);\n const [moduleStates, setModuleStates] = useState<\n Map<\n string,\n {\n module: any | null;\n loading: boolean;\n error: string | null;\n }\n >\n >(new Map());\n\n const filteredExtensions = useMemo(\n () =>\n options?.filter\n ? allExtensions.filter(options.filter as any)\n : allExtensions,\n [allExtensions, options?.filter]\n );\n\n const moduleProperty = options?.moduleProperty || \"module\";\n\n useEffect(() => {\n const loadModules = async () => {\n for (const extension of filteredExtensions) {\n const extensionId = extension.id;\n\n // Skip if already loaded or loading\n if (moduleStates.has(extensionId)) {\n continue;\n }\n\n // Set loading state\n setModuleStates((prev) =>\n new Map(prev).set(extensionId, {\n module: null,\n loading: true,\n error: null,\n })\n );\n\n try {\n // Get module path from extension data or use moduleProperty\n const modulePath =\n (extension.data as any)?.[moduleProperty] ||\n extension[moduleProperty] ||\n `./${extension.id}`;\n\n const remote = extension.remote;\n\n if (!remote) {\n throw new Error(`No remote specified for extension ${extensionId}`);\n }\n\n // Load the module using Module Federation\n const { loadRemoteModule } = await import(\"@nx/react/mf\");\n const loadedModule = await loadRemoteModule(remote, modulePath);\n\n setModuleStates((prev) =>\n new Map(prev).set(extensionId, {\n module: loadedModule,\n loading: false,\n error: null,\n })\n );\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error\";\n\n setModuleStates((prev) =>\n new Map(prev).set(extensionId, {\n module: null,\n loading: false,\n error: errorMessage,\n })\n );\n }\n }\n };\n\n loadModules();\n }, [filteredExtensions, moduleProperty, moduleStates]);\n\n return useMemo(\n () =>\n filteredExtensions.map((extension) => {\n const state = moduleStates.get(extension.id) || {\n module: null,\n loading: true,\n error: null,\n };\n\n return {\n extension,\n module: state.module,\n loading: state.loading,\n error: state.error,\n };\n }) as any,\n [filteredExtensions, moduleStates]\n );\n}\n","import { useKosTranslation } from \"@kosdev-code/kos-ui-sdk\";\nimport { useMemo } from \"react\";\nimport type { PluginExtension } from \"../../types/plugins\";\nimport {\n useExtensionComponentById,\n type ExtensionComponentProps,\n} from \"./use-extension-component\";\nimport { useExtensions } from \"./use-typed-extensions\";\n\n/**\n * Base properties that all extension data includes\n */\nexport interface ExtensionBaseData {\n id: string;\n title: string;\n namespace: string;\n}\n\n/**\n * Result from useExtensionI18n hook\n */\nexport interface UseExtensionI18nResult<TData = unknown, TProps = unknown> {\n /** All extensions for this extension point - data includes base properties (id, title, namespace) plus custom TData */\n extensions: PluginExtension<ExtensionBaseData & TData>[];\n /** Translation function configured with all unique namespaces from extensions */\n t: ReturnType<typeof useKosTranslation>[\"t\"];\n /** i18n utilities (e.g., exists check) */\n i18n: ReturnType<typeof useKosTranslation>[\"i18n\"];\n /** Component that can render extensions of this type - requires module prop to specify which extension to render */\n Component: React.ComponentType<ExtensionComponentProps & TProps> | null;\n /** Unique namespaces extracted from extensions */\n namespaces: string[];\n}\n\n/**\n * Hook to simplify the common pattern of:\n * 1. Getting extensions for an extension point\n * 2. Extracting their namespaces\n * 3. Configuring i18n with those namespaces\n * 4. Getting the extension component\n *\n * **For type safety:** Define only the custom properties from your extension schema.\n * The hook automatically merges base properties (id, title, namespace) with your custom type.\n *\n * @example\n * ```tsx\n * // Step 1: Define only your custom extension properties\n * // src/types/nav-link-types.ts\n * export interface NavLinkData {\n * viewKey: string; // Only define your custom properties - base props are added automatically!\n * }\n *\n * // Step 2: Use the type with the hook\n * import { NavLinkData } from '../types/nav-link-types';\n *\n * const { extensions, t, Component } = useExtensionI18n<NavLinkData, NavLinkProps>(\n * EXTENSION_ID_NAV_LINK\n * );\n *\n * // extensions.data includes both base properties AND your custom properties\n * const navLinks = extensions.map(link => ({\n * title: t(`${link.data.namespace}:${link.data.title}`), // namespace and title from base\n * viewKey: link.data.viewKey, // viewKey from your custom NavLinkData\n * icon: <Component module={link.id} navKey={link.data.viewKey} />\n * }));\n * ```\n *\n * @param extensionPointId - The extension point identifier\n * @param options - Optional configuration\n * @returns Object containing extensions, translation function, component, and namespaces\n */\nexport function useExtensionI18n<TData = unknown, TProps = unknown>(\n extensionPointId: string,\n options?: {\n /** Property name in extension.data where namespace is stored (default: 'namespace') */\n namespaceProperty?: string;\n }\n): UseExtensionI18nResult<TData, TProps> {\n const extensions = useExtensions<ExtensionBaseData & TData>(extensionPointId);\n const Component = useExtensionComponentById<TProps>(extensionPointId);\n\n const namespaceProperty = options?.namespaceProperty || \"namespace\";\n\n const namespaces = useMemo(() => {\n const allNamespaces = extensions\n .map((ext) => (ext.data as Record<string, unknown>)?.[namespaceProperty])\n .filter(Boolean);\n\n // Return unique namespaces\n return Array.from(new Set(allNamespaces)) as string[];\n }, [extensions, namespaceProperty]);\n\n const { t, i18n } = useKosTranslation(namespaces);\n\n return {\n extensions,\n t,\n i18n,\n Component,\n namespaces,\n };\n}\n"],"names":["sheetForTag","tag","i","createStyleElement","options","StyleSheet","_this","before","_proto","nodes","rule","sheet","_tag$parentNode","MS","MOZ","WEBKIT","COMMENT","RULESET","DECLARATION","IMPORT","KEYFRAMES","LAYER","abs","from","assign","hash","value","length","charat","trim","match","pattern","replace","replacement","indexof","search","index","substr","begin","end","strlen","sizeof","append","array","combine","callback","line","column","position","character","characters","node","root","parent","type","props","children","copy","char","prev","next","peek","caret","slice","token","alloc","dealloc","delimit","delimiter","whitespace","escaping","count","commenter","identifier","compile","parse","rules","rulesets","pseudo","points","declarations","offset","atrule","property","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","size","j","k","x","y","z","serialize","output","stringify","element","middleware","collection","rulesheet","identifierWithPointTracking","toRules","parsed","getRules","fixedElements","compat","isImplicitRule","parentRules","removeLabel","prefix","prefixer","defaultStylisPlugins","createCache","key","ssrStyles","dataEmotionAttribute","stylisPlugins","inserted","container","nodesToHydrate","attrib","_insert","omnipresentPlugins","currentSheet","finalizingPlugins","serializer","stylis","styles","selector","serialized","shouldCache","cache","b","c","d","e","f","g","h","m","n","p","q","r","t","w","a","u","A","reactIs_production_min","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","isValidElementType","typeOf","object","$$typeof","$$typeofType","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","ForwardRef","Fragment","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","hasWarnedAboutDeprecatedIsAsyncMode","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","reactIs_development","reactIsModule","require$$0","require$$1","reactIs","FORWARD_REF_STATICS","MEMO_STATICS","TYPE_STATICS","isBrowser","getRegisteredStyles","registered","registeredStyles","classNames","rawClassName","className","registerStyles","isStringTag","insertStyles","current","murmur2","str","len","unitlessKeys","memoize","fn","arg","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","processStyleValue","p1","p2","cursor","unitless","handleInterpolation","mergedProps","interpolation","componentSelector","keyframes","serializedStyles","createStringFromObject","previousCursor","result","asString","obj","string","_i","interpolated","labelPattern","serializeStyles","args","stringMode","strings","asTemplateStringsArr","templateStringsArr","identifierName","name","hashString","syncFallback","create","useInsertionEffect","React","useInsertionEffectAlwaysWithSyncFallback","hasOwnProperty","EmotionCacheContext","withEmotionCache","func","forwardRef","ref","useContext","ThemeContext","getLastPart","functionName","parts","getFunctionNameFromStackTraceLine","internalReactFunctionNames","sanitizeIdentifier","getLabelFromStackTrace","stackTrace","lines","typePropName","labelPropName","createEmotionProps","newProps","label","Insertion","_ref","Emotion","cssProp","WrappedComponent","labelFromStack","Emotion$1","ReactJSXRuntime","jsx","jsxs","ReactiveExtensionRegistryContext","createContext","useReactiveExtensionRegistry","registry","useReactiveExtensions","extensionPoint","includeDisabled","autoResolve","extensions","setExtensions","useState","useEffect","best","useMemo","resolveBestExtension","isViewPlugin","module","_a","useDynamicComponent","extension","fallbackOnDisabled","autoSwitchOnDisabled","Component","setComponent","isLoading","setIsLoading","targetModule","requestedModule","loadComponent","_module","remote","componentName","componentPath","Comp","loadRemoteModule","ErrorBoundaryWithFallback","error","errorInfo","NotFound","styled","Skeleton","DynamicComponent","fallback","waitForLoad","onLoadingChange","fb","extensionData","skeletonStyle","skeletonElement","Container","Header","Title","SearchInput","List","ListItem","ItemName","ItemMeta","Badge","EmptyState","ExtensionPointList","extensionPoints","selectedExtensionId","onExtensionSelect","searchTerm","onSearchChange","point","RemotesContext","MessageContainer","KosPluginProvider","remotesOverride","onBeforeInitialize","pluginConfig","contextValue","setContextValue","setError","reactiveRegistry","ReactiveExtensionRegistry","remotes","existingRemotes","initializeKosPlugins","_b","initPluginManager","err","useKosPluginsContext","context","usePluginDiscovery","PluginDiscoveryService","healthStats","useFilteredExtensionPoints","discovery","filteredExtensionPoints","useExtensionPoint","extensionPointId","Card","NameSection","HealthIndicator","PluginName","Details","DetailRow","NoComponentNotice","CapabilitiesList","CapabilityBadge","ValidationSection","ValidationMessage","ValidationIcon","ValidationText","getTypedPluginData","plugin","getExtensionPointRegistry","getSchemaFields","field","PluginCard","analysis","hasComponent","healthStatus","capabilities","allMessages","getValidationResults","pluginData","schemaFields","fieldName","displayName","capability","msg","StatsRow","Stat","ExportButton","PluginHealthDashboard","totalPlugins","extensionPointsWithPlugins","totalExtensionPoints","simplifiedExtensionPoints","legacyExtensionPoints","deprecatedExtensionPoints","handleExportDocumentation","documentation","DocumentationGenerator","blob","url","Sidebar","MainContent","ContentHeader","ContentTitle","ContentDescription","ContentBody","PluginGrid","MetadataSection","MetadataTitle","MetadataGrid","MetadataLabel","MetadataValue","PluginExplorer","showLegacyExtensions","extensionFilter","setSelectedExtensionId","setSearchTerm","selectedExtensionPoint","handleExtensionSelect","extensionId","handleSearchChange","term","FloatingOverlay","FloatingPanel","PanelHeader","PanelTitle","CloseButton","ToggleButton","KeyboardHint","FloatingPluginExplorer","keyboardShortcut","showToggleButton","toggleButtonPosition","pluginExplorerProps","isVisible","setIsVisible","handleKeyDown","event","part","matches","handleEscape","toggleVisibility","handleOverlayClick","useExtensionComponent","definition","ExtensionComponent","otherProps","createExtensionComponent","useExtensionComponentById","useExtensions","extensionPointOrId","reactiveExtensions","extMap","useBest","criteria","allExtensions","candidates","ext","moduleMatch","candidatesRecord","acc","extensionMap","useHasExtensions","useExtensionCount","useFilteredExtensions","filtered","useModules","moduleStates","setModuleStates","filteredExtensions","moduleProperty","modulePath","loadedModule","errorMessage","state","useExtensionI18n","namespaceProperty","namespaces","allNamespaces","i18n","useKosTranslation"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}