@xopcai/xopc 0.0.66 → 0.0.67

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.
Files changed (78) hide show
  1. package/dist/extensions/telegram/xopc.extension.json +1 -1
  2. package/dist/gateway/static/root/assets/{agents-JiJR38n1.js → agents-CmhOU0fB.js} +2 -2
  3. package/dist/gateway/static/root/assets/{agents-JiJR38n1.js.map → agents-CmhOU0fB.js.map} +1 -1
  4. package/dist/gateway/static/root/assets/{apps-page-aBDyr7Im.js → apps-page-CzS9A_6L.js} +2 -2
  5. package/dist/gateway/static/root/assets/{apps-page-aBDyr7Im.js.map → apps-page-CzS9A_6L.js.map} +1 -1
  6. package/dist/gateway/static/root/assets/{channels-settings-DXxfgG4N.js → channels-settings-Bn0YSztA.js} +2 -2
  7. package/dist/gateway/static/root/assets/{channels-settings-DXxfgG4N.js.map → channels-settings-Bn0YSztA.js.map} +1 -1
  8. package/dist/gateway/static/root/assets/{cron-dreaming-jobs-3--QJSP5.js → cron-dreaming-jobs-bAYsiHdF.js} +2 -2
  9. package/dist/gateway/static/root/assets/{cron-dreaming-jobs-3--QJSP5.js.map → cron-dreaming-jobs-bAYsiHdF.js.map} +1 -1
  10. package/dist/gateway/static/root/assets/{cron-page-CCn-JwBy.js → cron-page-CKqDtScu.js} +2 -2
  11. package/dist/gateway/static/root/assets/{cron-page-CCn-JwBy.js.map → cron-page-CKqDtScu.js.map} +1 -1
  12. package/dist/gateway/static/root/assets/{dist-BS-cwfHQ.js → dist-CUMhnSuX.js} +2 -2
  13. package/dist/gateway/static/root/assets/{dist-BS-cwfHQ.js.map → dist-CUMhnSuX.js.map} +1 -1
  14. package/dist/gateway/static/root/assets/{extension-debug-page-M8JS4Jid.js → extension-debug-page-BDls5xp3.js} +2 -2
  15. package/dist/gateway/static/root/assets/{extension-debug-page-M8JS4Jid.js.map → extension-debug-page-BDls5xp3.js.map} +1 -1
  16. package/dist/gateway/static/root/assets/{extension-page-C8gjVE_t.js → extension-page-BSfv53OO.js} +2 -2
  17. package/dist/gateway/static/root/assets/{extension-page-C8gjVE_t.js.map → extension-page-BSfv53OO.js.map} +1 -1
  18. package/dist/gateway/static/root/assets/{extension-settings-page-DeY2M2di.js → extension-settings-page-B0nkVsLi.js} +2 -2
  19. package/dist/gateway/static/root/assets/{extension-settings-page-DeY2M2di.js.map → extension-settings-page-B0nkVsLi.js.map} +1 -1
  20. package/dist/gateway/static/root/assets/{heartbeat-config-api-DWmeyjyR.js → heartbeat-config-api-P5zdbIBw.js} +2 -2
  21. package/dist/gateway/static/root/assets/{heartbeat-config-api-DWmeyjyR.js.map → heartbeat-config-api-P5zdbIBw.js.map} +1 -1
  22. package/dist/gateway/static/root/assets/{index-Cc57jhuG.js → index-DAglRwh4.js} +5 -5
  23. package/dist/gateway/static/root/assets/{index-Cc57jhuG.js.map → index-DAglRwh4.js.map} +1 -1
  24. package/dist/gateway/static/root/assets/index-DHj3Cf9B.css +1 -0
  25. package/dist/gateway/static/root/assets/{logs-page-kIsSDMqb.js → logs-page-CfGDv4k7.js} +2 -2
  26. package/dist/gateway/static/root/assets/{logs-page-kIsSDMqb.js.map → logs-page-CfGDv4k7.js.map} +1 -1
  27. package/dist/gateway/static/root/assets/{sessions-page-Da9gjMh7.js → sessions-page-DoGE8N-O.js} +2 -2
  28. package/dist/gateway/static/root/assets/{sessions-page-Da9gjMh7.js.map → sessions-page-DoGE8N-O.js.map} +1 -1
  29. package/dist/gateway/static/root/assets/settings-page-C5VrwDoO.js +3 -0
  30. package/dist/gateway/static/root/assets/settings-page-C5VrwDoO.js.map +1 -0
  31. package/dist/gateway/static/root/assets/{skills-page-B_msZcLx.js → skills-page-ADUi69Fa.js} +2 -2
  32. package/dist/gateway/static/root/assets/{skills-page-B_msZcLx.js.map → skills-page-ADUi69Fa.js.map} +1 -1
  33. package/dist/gateway/static/root/assets/{use-image-provider-credentials-Bs8xl2E3.js → use-image-provider-credentials-C4x4dNv2.js} +2 -2
  34. package/dist/gateway/static/root/assets/{use-image-provider-credentials-Bs8xl2E3.js.map → use-image-provider-credentials-C4x4dNv2.js.map} +1 -1
  35. package/dist/gateway/static/root/index.html +2 -2
  36. package/dist/package.js +1 -1
  37. package/dist/src/cli/commands/tunnel.js +69 -8
  38. package/dist/src/cli/commands/tunnel.js.map +1 -1
  39. package/dist/src/config/schema.d.ts +2 -0
  40. package/dist/src/config/schema.js +2 -0
  41. package/dist/src/config/schema.js.map +1 -1
  42. package/dist/src/gateway/hono/lib/config-payload.d.ts +2 -5
  43. package/dist/src/gateway/hono/lib/config-payload.js +3 -5
  44. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  45. package/dist/src/gateway/hono/routes/tunnel.js +12 -10
  46. package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
  47. package/dist/src/tunnel/acme-client.d.ts +11 -0
  48. package/dist/src/tunnel/acme-client.js +54 -10
  49. package/dist/src/tunnel/acme-client.js.map +1 -1
  50. package/dist/src/tunnel/env.d.ts +14 -3
  51. package/dist/src/tunnel/env.js +34 -5
  52. package/dist/src/tunnel/env.js.map +1 -1
  53. package/dist/src/tunnel/frpc-binary.d.ts +6 -1
  54. package/dist/src/tunnel/frpc-binary.js +66 -40
  55. package/dist/src/tunnel/frpc-binary.js.map +1 -1
  56. package/dist/src/tunnel/frpc-extract.d.ts +10 -0
  57. package/dist/src/tunnel/frpc-extract.js +129 -0
  58. package/dist/src/tunnel/frpc-extract.js.map +1 -0
  59. package/dist/src/tunnel/gateway-lifecycle.d.ts +3 -1
  60. package/dist/src/tunnel/gateway-lifecycle.js +6 -4
  61. package/dist/src/tunnel/gateway-lifecycle.js.map +1 -1
  62. package/dist/src/tunnel/index.d.ts +3 -1
  63. package/dist/src/tunnel/index.js +2 -2
  64. package/dist/src/tunnel/tls-server.js +5 -0
  65. package/dist/src/tunnel/tls-server.js.map +1 -1
  66. package/dist/src/tunnel/tunnel-config.js +11 -1
  67. package/dist/src/tunnel/tunnel-config.js.map +1 -1
  68. package/dist/src/tunnel/tunnel-e2e-config.d.ts +4 -1
  69. package/dist/src/tunnel/tunnel-e2e-config.js +10 -3
  70. package/dist/src/tunnel/tunnel-e2e-config.js.map +1 -1
  71. package/dist/src/tunnel/tunnel-service.d.ts +4 -0
  72. package/dist/src/tunnel/tunnel-service.js +66 -5
  73. package/dist/src/tunnel/tunnel-service.js.map +1 -1
  74. package/dist/src/tunnel/tunnel-types.d.ts +16 -0
  75. package/package.json +3 -3
  76. package/dist/gateway/static/root/assets/index-B5gp15_q.css +0 -1
  77. package/dist/gateway/static/root/assets/settings-page-B0spIRVS.js +0 -3
  78. package/dist/gateway/static/root/assets/settings-page-B0spIRVS.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dist-BS-cwfHQ.js","names":["GROUP_NAME","Collection","useCollection","createCollectionScope","ITEM_NAME","wrapArray","focusFirst","PopperPrimitive.Root","PopperPrimitive.Anchor","PORTAL_NAME","PortalPrimitive","CONTENT_NAME","RemoveScroll","RovingFocusGroup.Root","PopperPrimitive.Content","GROUP_NAME","LABEL_NAME","ITEM_NAME","RovingFocusGroup.Item","CHECKBOX_ITEM_NAME","RADIO_GROUP_NAME","RADIO_ITEM_NAME","SEPARATOR_NAME","ARROW_NAME","PopperPrimitive.Arrow","SUB_TRIGGER_NAME","SUB_CONTENT_NAME","Content2","Item2","MenuPrimitive.Root","MenuPrimitive.Anchor","MenuPrimitive.Portal","MenuPrimitive.Content","MenuPrimitive.Group","MenuPrimitive.Label","MenuPrimitive.Item","MenuPrimitive.CheckboxItem","MenuPrimitive.RadioGroup","MenuPrimitive.RadioItem","MenuPrimitive.ItemIndicator","MenuPrimitive.Separator","MenuPrimitive.Arrow","MenuPrimitive.SubTrigger","MenuPrimitive.SubContent"],"sources":["../../../../../node_modules/.pnpm/@radix-ui+react-collection@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@1_micm2esneyyh3yjc3ayjqjqwv4/node_modules/@radix-ui/react-collection/dist/index.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-direction@1.1.1_@types+react@19.2.14_react@19.2.5/node_modules/@radix-ui/react-direction/dist/index.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_jcdraojoe67ybfkumq6rzl6zte/node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-menu@2.1.16_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@19.2.1_dw5mxobijw53ag5ezvbajuf4iy/node_modules/@radix-ui/react-menu/dist/index.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-dropdown-menu@2.1.16_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_4n3xrcv7vmuo6uzg4ly3mf6m7e/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs"],"sourcesContent":["\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs, composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SELECTION_KEYS = [\"Enter\", \" \"];\nvar FIRST_KEYS = [\"ArrowDown\", \"PageUp\", \"Home\"];\nvar LAST_KEYS = [\"ArrowUp\", \"PageDown\", \"End\"];\nvar FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nvar SUB_OPEN_KEYS = {\n ltr: [...SELECTION_KEYS, \"ArrowRight\"],\n rtl: [...SELECTION_KEYS, \"ArrowLeft\"]\n};\nvar SUB_CLOSE_KEYS = {\n ltr: [\"ArrowLeft\"],\n rtl: [\"ArrowRight\"]\n};\nvar MENU_NAME = \"Menu\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(MENU_NAME);\nvar [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope\n]);\nvar usePopperScope = createPopperScope();\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\nvar [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\nvar Menu = (props) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n React.useEffect(() => {\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener(\"pointerdown\", handlePointer, { capture: true, once: true });\n document.addEventListener(\"pointermove\", handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => isUsingKeyboardRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n document.removeEventListener(\"pointerdown\", handlePointer, { capture: true });\n document.removeEventListener(\"pointermove\", handlePointer, { capture: true });\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuRootProvider,\n {\n scope: __scopeMenu,\n onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]),\n isUsingKeyboardRef,\n dir: direction,\n modal,\n children\n }\n )\n }\n ) });\n};\nMenu.displayName = MENU_NAME;\nvar ANCHOR_NAME = \"MenuAnchor\";\nvar MenuAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nMenuAnchor.displayName = ANCHOR_NAME;\nvar PORTAL_NAME = \"MenuPortal\";\nvar [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar MenuPortal = (props) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"MenuContent\";\nvar [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);\nvar MenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ jsx(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });\n }\n);\nvar MenuRootContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n disableOutsideScroll: true,\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n ),\n onDismiss: () => context.onOpenChange(false)\n }\n );\n }\n);\nvar MenuRootContentNonModal = React.forwardRef((props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n onDismiss: () => context.onOpenChange(false)\n }\n );\n});\nvar Slot = createSlot(\"MenuContent.ScrollLock\");\nvar MenuContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef(\"\");\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef(\"right\");\n const lastPointerXRef = React.useRef(0);\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0;\n const handleTypeaheadSearch = (key) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n if (newItem) {\n setTimeout(() => newItem.focus());\n }\n };\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n useFocusGuards();\n const isPointerMovingToSubmenu = React.useCallback((event) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentProvider,\n {\n scope: __scopeMenu,\n searchRef,\n onItemEnter: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n onItemLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n ),\n onTriggerLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n pointerGraceTimerRef,\n onPointerGraceIntentChange: React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, []),\n children: /* @__PURE__ */ jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: trapFocus,\n onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n }),\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n children: /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n dir: rootContext.dir,\n orientation: \"vertical\",\n loop,\n currentTabStopId: currentItemId,\n onCurrentTabStopIdChange: setCurrentItemId,\n onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n }),\n preventScrollOnEntryFocus: true,\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n role: \"menu\",\n \"aria-orientation\": \"vertical\",\n \"data-state\": getOpenState(context.open),\n \"data-radix-menu-content\": \"\",\n dir: rootContext.dir,\n ...popperScope,\n ...contentProps,\n ref: composedRefs,\n style: { outline: \"none\", ...contentProps.style },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const target = event.target;\n const isKeyDownInside = target.closest(\"[data-radix-menu-content]\") === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n }),\n onBlur: composeEventHandlers(props.onBlur, (event) => {\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = \"\";\n }\n }),\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? \"right\" : \"left\";\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )\n }\n )\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"MenuGroup\";\nvar MenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", ...groupProps, ref: forwardedRef });\n }\n);\nMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"MenuLabel\";\nvar MenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...labelProps, ref: forwardedRef });\n }\n);\nMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"MenuItem\";\nvar ITEM_SELECT = \"menu.itemSelect\";\nvar MenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n return /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n ...itemProps,\n ref: composedRefs,\n disabled,\n onClick: composeEventHandlers(props.onClick, handleSelect),\n onPointerDown: (event) => {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n },\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n if (!isPointerDownRef.current) event.currentTarget?.click();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (disabled || isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n event.preventDefault();\n }\n })\n }\n );\n }\n);\nMenuItem.displayName = ITEM_NAME;\nvar MenuItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n const [textContent, setTextContent] = React.useState(\"\");\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? \"\").trim());\n }\n }, [itemProps.children]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeMenu,\n disabled,\n textValue: textValue ?? textContent,\n children: /* @__PURE__ */ jsx(RovingFocusGroup.Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"menuitem\",\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...itemProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n ),\n onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))\n }\n ) })\n }\n );\n }\n);\nvar CHECKBOX_ITEM_NAME = \"MenuCheckboxItem\";\nvar MenuCheckboxItem = React.forwardRef(\n (props, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemcheckbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n ...checkboxItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n checkboxItemProps.onSelect,\n () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"MenuRadioGroup\";\nvar [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: void 0, onValueChange: () => {\n } }\n);\nvar MenuRadioGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return /* @__PURE__ */ jsx(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ jsx(MenuGroup, { ...groupProps, ref: forwardedRef }) });\n }\n);\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"MenuRadioItem\";\nvar MenuRadioItem = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemradio\",\n \"aria-checked\": checked,\n ...radioItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n radioItemProps.onSelect,\n () => context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar ITEM_INDICATOR_NAME = \"MenuItemIndicator\";\nvar [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\nvar MenuItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...itemIndicatorProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(indicatorContext.checked)\n }\n )\n }\n );\n }\n);\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SEPARATOR_NAME = \"MenuSeparator\";\nvar MenuSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"separator\",\n \"aria-orientation\": \"horizontal\",\n ...separatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"MenuArrow\";\nvar MenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"MenuSub\";\nvar [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\nvar MenuSub = (props) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuSubProvider,\n {\n scope: __scopeMenu,\n contentId: useId(),\n triggerId: useId(),\n trigger,\n onTriggerChange: setTrigger,\n children\n }\n )\n }\n ) });\n};\nMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"MenuSubTrigger\";\nvar MenuSubTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n return /* @__PURE__ */ jsx(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n id: subContext.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": subContext.contentId,\n \"data-state\": getOpenState(context.open),\n ...props,\n ref: composeRefs(forwardedRef, subContext.onTriggerChange),\n onClick: (event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n },\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n const side = context.content?.dataset.side;\n const rightSide = side === \"right\";\n const bleed = rightSide ? -5 : 5;\n const contentNearEdge = contentRect[rightSide ? \"left\" : \"right\"];\n const contentFarEdge = contentRect[rightSide ? \"right\" : \"left\"];\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom }\n ],\n side\n });\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n ),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (props.disabled || isTypingAhead && event.key === \" \") return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n context.content?.focus();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"MenuSubContent\";\nvar MenuSubContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n id: subContext.contentId,\n \"aria-labelledby\": subContext.triggerId,\n ...subContentProps,\n ref: composedRefs,\n align: \"start\",\n side: rootContext.dir === \"rtl\" ? \"left\" : \"right\",\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n trapFocus: false,\n onOpenAutoFocus: (event) => {\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n },\n onCloseAutoFocus: (event) => event.preventDefault(),\n onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n }),\n onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n event.preventDefault();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isKeyDownInside = event.currentTarget.contains(event.target);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n subContext.trigger?.focus();\n event.preventDefault();\n }\n })\n }\n ) }) }) });\n }\n);\nMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction getOpenState(open) {\n return open ? \"open\" : \"closed\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nfunction focusFirst(candidates) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nfunction getNextMatch(values, search, currentMatch) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find(\n (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : void 0;\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction isPointerInGraceArea(event, area) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\nfunction whenMouse(handler) {\n return (event) => event.pointerType === \"mouse\" ? handler(event) : void 0;\n}\nvar Root3 = Menu;\nvar Anchor2 = MenuAnchor;\nvar Portal = MenuPortal;\nvar Content2 = MenuContent;\nvar Group = MenuGroup;\nvar Label = MenuLabel;\nvar Item2 = MenuItem;\nvar CheckboxItem = MenuCheckboxItem;\nvar RadioGroup = MenuRadioGroup;\nvar RadioItem = MenuRadioItem;\nvar ItemIndicator = MenuItemIndicator;\nvar Separator = MenuSeparator;\nvar Arrow2 = MenuArrow;\nvar Sub = MenuSub;\nvar SubTrigger = MenuSubTrigger;\nvar SubContent = MenuSubContent;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n CheckboxItem,\n Content2 as Content,\n Group,\n Item2 as Item,\n ItemIndicator,\n Label,\n Menu,\n MenuAnchor,\n MenuArrow,\n MenuCheckboxItem,\n MenuContent,\n MenuGroup,\n MenuItem,\n MenuItemIndicator,\n MenuLabel,\n MenuPortal,\n MenuRadioGroup,\n MenuRadioItem,\n MenuSeparator,\n MenuSub,\n MenuSubContent,\n MenuSubTrigger,\n Portal,\n RadioGroup,\n RadioItem,\n Root3 as Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n createMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dropdown-menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DROPDOWN_MENU_NAME = \"DropdownMenu\";\nvar [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nvar useMenuScope = createMenuScope();\nvar [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);\nvar DropdownMenu = (props) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DROPDOWN_MENU_NAME\n });\n return /* @__PURE__ */ jsx(\n DropdownMenuProvider,\n {\n scope: __scopeDropdownMenu,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children: /* @__PURE__ */ jsx(MenuPrimitive.Root, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })\n }\n );\n};\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\nvar TRIGGER_NAME = \"DropdownMenuTrigger\";\nvar DropdownMenuTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n ...triggerProps,\n ref: composeRefs(forwardedRef, context.triggerRef),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n if (!context.open) event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if ([\"Enter\", \" \"].includes(event.key)) context.onOpenToggle();\n if (event.key === \"ArrowDown\") context.onOpenChange(true);\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key)) event.preventDefault();\n })\n }\n ) });\n }\n);\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DropdownMenuPortal\";\nvar DropdownMenuPortal = (props) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n};\nDropdownMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"DropdownMenuContent\";\nvar DropdownMenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n event.preventDefault();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }\n);\nDropdownMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"DropdownMenuGroup\";\nvar DropdownMenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }\n);\nDropdownMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"DropdownMenuLabel\";\nvar DropdownMenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }\n);\nDropdownMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"DropdownMenuItem\";\nvar DropdownMenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }\n);\nDropdownMenuItem.displayName = ITEM_NAME;\nvar CHECKBOX_ITEM_NAME = \"DropdownMenuCheckboxItem\";\nvar DropdownMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n});\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"DropdownMenuRadioGroup\";\nvar DropdownMenuRadioGroup = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n});\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"DropdownMenuRadioItem\";\nvar DropdownMenuRadioItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n});\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar INDICATOR_NAME = \"DropdownMenuItemIndicator\";\nvar DropdownMenuItemIndicator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n});\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\nvar SEPARATOR_NAME = \"DropdownMenuSeparator\";\nvar DropdownMenuSeparator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n});\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"DropdownMenuArrow\";\nvar DropdownMenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }\n);\nDropdownMenuArrow.displayName = ARROW_NAME;\nvar DropdownMenuSub = (props) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: \"DropdownMenuSub\"\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n};\nvar SUB_TRIGGER_NAME = \"DropdownMenuSubTrigger\";\nvar DropdownMenuSubTrigger = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });\n});\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"DropdownMenuSubContent\";\nvar DropdownMenuSubContent = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.SubContent,\n {\n ...menuScope,\n ...subContentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\nvar Root2 = DropdownMenu;\nvar Trigger = DropdownMenuTrigger;\nvar Portal2 = DropdownMenuPortal;\nvar Content2 = DropdownMenuContent;\nvar Group2 = DropdownMenuGroup;\nvar Label2 = DropdownMenuLabel;\nvar Item2 = DropdownMenuItem;\nvar CheckboxItem2 = DropdownMenuCheckboxItem;\nvar RadioGroup2 = DropdownMenuRadioGroup;\nvar RadioItem2 = DropdownMenuRadioItem;\nvar ItemIndicator2 = DropdownMenuItemIndicator;\nvar Separator2 = DropdownMenuSeparator;\nvar Arrow2 = DropdownMenuArrow;\nvar Sub2 = DropdownMenuSub;\nvar SubTrigger2 = DropdownMenuSubTrigger;\nvar SubContent2 = DropdownMenuSubContent;\nexport {\n Arrow2 as Arrow,\n CheckboxItem2 as CheckboxItem,\n Content2 as Content,\n DropdownMenu,\n DropdownMenuArrow,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuItemIndicator,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Group2 as Group,\n Item2 as Item,\n ItemIndicator2 as ItemIndicator,\n Label2 as Label,\n Portal2 as Portal,\n RadioGroup2 as RadioGroup,\n RadioItem2 as RadioItem,\n Root2 as Root,\n Separator2 as Separator,\n Sub2 as Sub,\n SubContent2 as SubContent,\n SubTrigger2 as SubTrigger,\n Trigger,\n createDropdownMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n"],"x_google_ignoreList":[0,1,2,3,4],"mappings":"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"}
1
+ {"version":3,"file":"dist-CUMhnSuX.js","names":["GROUP_NAME","Collection","useCollection","createCollectionScope","ITEM_NAME","wrapArray","focusFirst","PopperPrimitive.Root","PopperPrimitive.Anchor","PORTAL_NAME","PortalPrimitive","CONTENT_NAME","RemoveScroll","RovingFocusGroup.Root","PopperPrimitive.Content","GROUP_NAME","LABEL_NAME","ITEM_NAME","RovingFocusGroup.Item","CHECKBOX_ITEM_NAME","RADIO_GROUP_NAME","RADIO_ITEM_NAME","SEPARATOR_NAME","ARROW_NAME","PopperPrimitive.Arrow","SUB_TRIGGER_NAME","SUB_CONTENT_NAME","Content2","Item2","MenuPrimitive.Root","MenuPrimitive.Anchor","MenuPrimitive.Portal","MenuPrimitive.Content","MenuPrimitive.Group","MenuPrimitive.Label","MenuPrimitive.Item","MenuPrimitive.CheckboxItem","MenuPrimitive.RadioGroup","MenuPrimitive.RadioItem","MenuPrimitive.ItemIndicator","MenuPrimitive.Separator","MenuPrimitive.Arrow","MenuPrimitive.SubTrigger","MenuPrimitive.SubContent"],"sources":["../../../../../node_modules/.pnpm/@radix-ui+react-collection@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@1_micm2esneyyh3yjc3ayjqjqwv4/node_modules/@radix-ui/react-collection/dist/index.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-direction@1.1.1_@types+react@19.2.14_react@19.2.5/node_modules/@radix-ui/react-direction/dist/index.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_jcdraojoe67ybfkumq6rzl6zte/node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-menu@2.1.16_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@19.2.1_dw5mxobijw53ag5ezvbajuf4iy/node_modules/@radix-ui/react-menu/dist/index.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-dropdown-menu@2.1.16_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_4n3xrcv7vmuo6uzg4ly3mf6m7e/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs"],"sourcesContent":["\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs, composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SELECTION_KEYS = [\"Enter\", \" \"];\nvar FIRST_KEYS = [\"ArrowDown\", \"PageUp\", \"Home\"];\nvar LAST_KEYS = [\"ArrowUp\", \"PageDown\", \"End\"];\nvar FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];\nvar SUB_OPEN_KEYS = {\n ltr: [...SELECTION_KEYS, \"ArrowRight\"],\n rtl: [...SELECTION_KEYS, \"ArrowLeft\"]\n};\nvar SUB_CLOSE_KEYS = {\n ltr: [\"ArrowLeft\"],\n rtl: [\"ArrowRight\"]\n};\nvar MENU_NAME = \"Menu\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(MENU_NAME);\nvar [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [\n createCollectionScope,\n createPopperScope,\n createRovingFocusGroupScope\n]);\nvar usePopperScope = createPopperScope();\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);\nvar [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);\nvar Menu = (props) => {\n const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;\n const popperScope = usePopperScope(__scopeMenu);\n const [content, setContent] = React.useState(null);\n const isUsingKeyboardRef = React.useRef(false);\n const handleOpenChange = useCallbackRef(onOpenChange);\n const direction = useDirection(dir);\n React.useEffect(() => {\n const handleKeyDown = () => {\n isUsingKeyboardRef.current = true;\n document.addEventListener(\"pointerdown\", handlePointer, { capture: true, once: true });\n document.addEventListener(\"pointermove\", handlePointer, { capture: true, once: true });\n };\n const handlePointer = () => isUsingKeyboardRef.current = false;\n document.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n document.removeEventListener(\"pointerdown\", handlePointer, { capture: true });\n document.removeEventListener(\"pointermove\", handlePointer, { capture: true });\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuRootProvider,\n {\n scope: __scopeMenu,\n onClose: React.useCallback(() => handleOpenChange(false), [handleOpenChange]),\n isUsingKeyboardRef,\n dir: direction,\n modal,\n children\n }\n )\n }\n ) });\n};\nMenu.displayName = MENU_NAME;\nvar ANCHOR_NAME = \"MenuAnchor\";\nvar MenuAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...anchorProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nMenuAnchor.displayName = ANCHOR_NAME;\nvar PORTAL_NAME = \"MenuPortal\";\nvar [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar MenuPortal = (props) => {\n const { __scopeMenu, forceMount, children, container } = props;\n const context = useMenuContext(PORTAL_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"MenuContent\";\nvar [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);\nvar MenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ jsx(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });\n }\n);\nvar MenuRootContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const content = ref.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n disableOutsideScroll: true,\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n ),\n onDismiss: () => context.onOpenChange(false)\n }\n );\n }\n);\nvar MenuRootContentNonModal = React.forwardRef((props, forwardedRef) => {\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n return /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n onDismiss: () => context.onOpenChange(false)\n }\n );\n});\nvar Slot = createSlot(\"MenuContent.ScrollLock\");\nvar MenuContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeMenu,\n loop = false,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEntryFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n disableOutsideScroll,\n ...contentProps\n } = props;\n const context = useMenuContext(CONTENT_NAME, __scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const getItems = useCollection(__scopeMenu);\n const [currentItemId, setCurrentItemId] = React.useState(null);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);\n const timerRef = React.useRef(0);\n const searchRef = React.useRef(\"\");\n const pointerGraceTimerRef = React.useRef(0);\n const pointerGraceIntentRef = React.useRef(null);\n const pointerDirRef = React.useRef(\"right\");\n const lastPointerXRef = React.useRef(0);\n const ScrollLockWrapper = disableOutsideScroll ? RemoveScroll : React.Fragment;\n const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0;\n const handleTypeaheadSearch = (key) => {\n const search = searchRef.current + key;\n const items = getItems().filter((item) => !item.disabled);\n const currentItem = document.activeElement;\n const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;\n const values = items.map((item) => item.textValue);\n const nextMatch = getNextMatch(values, search, currentMatch);\n const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n if (newItem) {\n setTimeout(() => newItem.focus());\n }\n };\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n useFocusGuards();\n const isPointerMovingToSubmenu = React.useCallback((event) => {\n const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;\n return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);\n }, []);\n return /* @__PURE__ */ jsx(\n MenuContentProvider,\n {\n scope: __scopeMenu,\n searchRef,\n onItemEnter: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n onItemLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) return;\n contentRef.current?.focus();\n setCurrentItemId(null);\n },\n [isPointerMovingToSubmenu]\n ),\n onTriggerLeave: React.useCallback(\n (event) => {\n if (isPointerMovingToSubmenu(event)) event.preventDefault();\n },\n [isPointerMovingToSubmenu]\n ),\n pointerGraceTimerRef,\n onPointerGraceIntentChange: React.useCallback((intent) => {\n pointerGraceIntentRef.current = intent;\n }, []),\n children: /* @__PURE__ */ jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: trapFocus,\n onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {\n event.preventDefault();\n contentRef.current?.focus({ preventScroll: true });\n }),\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n children: /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n dir: rootContext.dir,\n orientation: \"vertical\",\n loop,\n currentTabStopId: currentItemId,\n onCurrentTabStopIdChange: setCurrentItemId,\n onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {\n if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();\n }),\n preventScrollOnEntryFocus: true,\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n role: \"menu\",\n \"aria-orientation\": \"vertical\",\n \"data-state\": getOpenState(context.open),\n \"data-radix-menu-content\": \"\",\n dir: rootContext.dir,\n ...popperScope,\n ...contentProps,\n ref: composedRefs,\n style: { outline: \"none\", ...contentProps.style },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const target = event.target;\n const isKeyDownInside = target.closest(\"[data-radix-menu-content]\") === event.currentTarget;\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n const isCharacterKey = event.key.length === 1;\n if (isKeyDownInside) {\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);\n }\n const content = contentRef.current;\n if (event.target !== content) return;\n if (!FIRST_LAST_KEYS.includes(event.key)) return;\n event.preventDefault();\n const items = getItems().filter((item) => !item.disabled);\n const candidateNodes = items.map((item) => item.ref.current);\n if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();\n focusFirst(candidateNodes);\n }),\n onBlur: composeEventHandlers(props.onBlur, (event) => {\n if (!event.currentTarget.contains(event.target)) {\n window.clearTimeout(timerRef.current);\n searchRef.current = \"\";\n }\n }),\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n const target = event.target;\n const pointerXHasChanged = lastPointerXRef.current !== event.clientX;\n if (event.currentTarget.contains(target) && pointerXHasChanged) {\n const newDir = event.clientX > lastPointerXRef.current ? \"right\" : \"left\";\n pointerDirRef.current = newDir;\n lastPointerXRef.current = event.clientX;\n }\n })\n )\n }\n )\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"MenuGroup\";\nvar MenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...groupProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", ...groupProps, ref: forwardedRef });\n }\n);\nMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"MenuLabel\";\nvar MenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...labelProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { ...labelProps, ref: forwardedRef });\n }\n);\nMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"MenuItem\";\nvar ITEM_SELECT = \"menu.itemSelect\";\nvar MenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { disabled = false, onSelect, ...itemProps } = props;\n const ref = React.useRef(null);\n const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const isPointerDownRef = React.useRef(false);\n const handleSelect = () => {\n const menuItem = ref.current;\n if (!disabled && menuItem) {\n const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });\n menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });\n dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);\n if (itemSelectEvent.defaultPrevented) {\n isPointerDownRef.current = false;\n } else {\n rootContext.onClose();\n }\n }\n };\n return /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n ...itemProps,\n ref: composedRefs,\n disabled,\n onClick: composeEventHandlers(props.onClick, handleSelect),\n onPointerDown: (event) => {\n props.onPointerDown?.(event);\n isPointerDownRef.current = true;\n },\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n if (!isPointerDownRef.current) event.currentTarget?.click();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (disabled || isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) {\n event.currentTarget.click();\n event.preventDefault();\n }\n })\n }\n );\n }\n);\nMenuItem.displayName = ITEM_NAME;\nvar MenuItemImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;\n const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [isFocused, setIsFocused] = React.useState(false);\n const [textContent, setTextContent] = React.useState(\"\");\n React.useEffect(() => {\n const menuItem = ref.current;\n if (menuItem) {\n setTextContent((menuItem.textContent ?? \"\").trim());\n }\n }, [itemProps.children]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeMenu,\n disabled,\n textValue: textValue ?? textContent,\n children: /* @__PURE__ */ jsx(RovingFocusGroup.Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"menuitem\",\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...itemProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n if (disabled) {\n contentContext.onItemLeave(event);\n } else {\n contentContext.onItemEnter(event);\n if (!event.defaultPrevented) {\n const item = event.currentTarget;\n item.focus({ preventScroll: true });\n }\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => contentContext.onItemLeave(event))\n ),\n onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))\n }\n ) })\n }\n );\n }\n);\nvar CHECKBOX_ITEM_NAME = \"MenuCheckboxItem\";\nvar MenuCheckboxItem = React.forwardRef(\n (props, forwardedRef) => {\n const { checked = false, onCheckedChange, ...checkboxItemProps } = props;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemcheckbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n ...checkboxItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n checkboxItemProps.onSelect,\n () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"MenuRadioGroup\";\nvar [RadioGroupProvider, useRadioGroupContext] = createMenuContext(\n RADIO_GROUP_NAME,\n { value: void 0, onValueChange: () => {\n } }\n);\nvar MenuRadioGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { value, onValueChange, ...groupProps } = props;\n const handleValueChange = useCallbackRef(onValueChange);\n return /* @__PURE__ */ jsx(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ jsx(MenuGroup, { ...groupProps, ref: forwardedRef }) });\n }\n);\nMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"MenuRadioItem\";\nvar MenuRadioItem = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...radioItemProps } = props;\n const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);\n const checked = value === context.value;\n return /* @__PURE__ */ jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsx(\n MenuItem,\n {\n role: \"menuitemradio\",\n \"aria-checked\": checked,\n ...radioItemProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(checked),\n onSelect: composeEventHandlers(\n radioItemProps.onSelect,\n () => context.onValueChange?.(value),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar ITEM_INDICATOR_NAME = \"MenuItemIndicator\";\nvar [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(\n ITEM_INDICATOR_NAME,\n { checked: false }\n);\nvar MenuItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;\n const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...itemIndicatorProps,\n ref: forwardedRef,\n \"data-state\": getCheckedState(indicatorContext.checked)\n }\n )\n }\n );\n }\n);\nMenuItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SEPARATOR_NAME = \"MenuSeparator\";\nvar MenuSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"separator\",\n \"aria-orientation\": \"horizontal\",\n ...separatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"MenuArrow\";\nvar MenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeMenu, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeMenu);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nMenuArrow.displayName = ARROW_NAME;\nvar SUB_NAME = \"MenuSub\";\nvar [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);\nvar MenuSub = (props) => {\n const { __scopeMenu, children, open = false, onOpenChange } = props;\n const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);\n const popperScope = usePopperScope(__scopeMenu);\n const [trigger, setTrigger] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const handleOpenChange = useCallbackRef(onOpenChange);\n React.useEffect(() => {\n if (parentMenuContext.open === false) handleOpenChange(false);\n return () => handleOpenChange(false);\n }, [parentMenuContext.open, handleOpenChange]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n MenuProvider,\n {\n scope: __scopeMenu,\n open,\n onOpenChange: handleOpenChange,\n content,\n onContentChange: setContent,\n children: /* @__PURE__ */ jsx(\n MenuSubProvider,\n {\n scope: __scopeMenu,\n contentId: useId(),\n triggerId: useId(),\n trigger,\n onTriggerChange: setTrigger,\n children\n }\n )\n }\n ) });\n};\nMenuSub.displayName = SUB_NAME;\nvar SUB_TRIGGER_NAME = \"MenuSubTrigger\";\nvar MenuSubTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);\n const openTimerRef = React.useRef(null);\n const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;\n const scope = { __scopeMenu: props.__scopeMenu };\n const clearOpenTimer = React.useCallback(() => {\n if (openTimerRef.current) window.clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }, []);\n React.useEffect(() => clearOpenTimer, [clearOpenTimer]);\n React.useEffect(() => {\n const pointerGraceTimer = pointerGraceTimerRef.current;\n return () => {\n window.clearTimeout(pointerGraceTimer);\n onPointerGraceIntentChange(null);\n };\n }, [pointerGraceTimerRef, onPointerGraceIntentChange]);\n return /* @__PURE__ */ jsx(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ jsx(\n MenuItemImpl,\n {\n id: subContext.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": subContext.contentId,\n \"data-state\": getOpenState(context.open),\n ...props,\n ref: composeRefs(forwardedRef, subContext.onTriggerChange),\n onClick: (event) => {\n props.onClick?.(event);\n if (props.disabled || event.defaultPrevented) return;\n event.currentTarget.focus();\n if (!context.open) context.onOpenChange(true);\n },\n onPointerMove: composeEventHandlers(\n props.onPointerMove,\n whenMouse((event) => {\n contentContext.onItemEnter(event);\n if (event.defaultPrevented) return;\n if (!props.disabled && !context.open && !openTimerRef.current) {\n contentContext.onPointerGraceIntentChange(null);\n openTimerRef.current = window.setTimeout(() => {\n context.onOpenChange(true);\n clearOpenTimer();\n }, 100);\n }\n })\n ),\n onPointerLeave: composeEventHandlers(\n props.onPointerLeave,\n whenMouse((event) => {\n clearOpenTimer();\n const contentRect = context.content?.getBoundingClientRect();\n if (contentRect) {\n const side = context.content?.dataset.side;\n const rightSide = side === \"right\";\n const bleed = rightSide ? -5 : 5;\n const contentNearEdge = contentRect[rightSide ? \"left\" : \"right\"];\n const contentFarEdge = contentRect[rightSide ? \"right\" : \"left\"];\n contentContext.onPointerGraceIntentChange({\n area: [\n // Apply a bleed on clientX to ensure that our exit point is\n // consistently within polygon bounds\n { x: event.clientX + bleed, y: event.clientY },\n { x: contentNearEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.top },\n { x: contentFarEdge, y: contentRect.bottom },\n { x: contentNearEdge, y: contentRect.bottom }\n ],\n side\n });\n window.clearTimeout(pointerGraceTimerRef.current);\n pointerGraceTimerRef.current = window.setTimeout(\n () => contentContext.onPointerGraceIntentChange(null),\n 300\n );\n } else {\n contentContext.onTriggerLeave(event);\n if (event.defaultPrevented) return;\n contentContext.onPointerGraceIntentChange(null);\n }\n })\n ),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef.current !== \"\";\n if (props.disabled || isTypingAhead && event.key === \" \") return;\n if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {\n context.onOpenChange(true);\n context.content?.focus();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"MenuSubContent\";\nvar MenuSubContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);\n const { forceMount = portalContext.forceMount, ...subContentProps } = props;\n const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);\n const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);\n const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsx(\n MenuContentImpl,\n {\n id: subContext.contentId,\n \"aria-labelledby\": subContext.triggerId,\n ...subContentProps,\n ref: composedRefs,\n align: \"start\",\n side: rootContext.dir === \"rtl\" ? \"left\" : \"right\",\n disableOutsidePointerEvents: false,\n disableOutsideScroll: false,\n trapFocus: false,\n onOpenAutoFocus: (event) => {\n if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();\n event.preventDefault();\n },\n onCloseAutoFocus: (event) => event.preventDefault(),\n onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {\n if (event.target !== subContext.trigger) context.onOpenChange(false);\n }),\n onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {\n rootContext.onClose();\n event.preventDefault();\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n const isKeyDownInside = event.currentTarget.contains(event.target);\n const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);\n if (isKeyDownInside && isCloseKey) {\n context.onOpenChange(false);\n subContext.trigger?.focus();\n event.preventDefault();\n }\n })\n }\n ) }) }) });\n }\n);\nMenuSubContent.displayName = SUB_CONTENT_NAME;\nfunction getOpenState(open) {\n return open ? \"open\" : \"closed\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getCheckedState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nfunction focusFirst(candidates) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nfunction getNextMatch(values, search, currentMatch) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;\n let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));\n const excludeCurrentMatch = normalizedSearch.length === 1;\n if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);\n const nextMatch = wrappedValues.find(\n (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextMatch !== currentMatch ? nextMatch : void 0;\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction isPointerInGraceArea(event, area) {\n if (!area) return false;\n const cursorPos = { x: event.clientX, y: event.clientY };\n return isPointInPolygon(cursorPos, area);\n}\nfunction whenMouse(handler) {\n return (event) => event.pointerType === \"mouse\" ? handler(event) : void 0;\n}\nvar Root3 = Menu;\nvar Anchor2 = MenuAnchor;\nvar Portal = MenuPortal;\nvar Content2 = MenuContent;\nvar Group = MenuGroup;\nvar Label = MenuLabel;\nvar Item2 = MenuItem;\nvar CheckboxItem = MenuCheckboxItem;\nvar RadioGroup = MenuRadioGroup;\nvar RadioItem = MenuRadioItem;\nvar ItemIndicator = MenuItemIndicator;\nvar Separator = MenuSeparator;\nvar Arrow2 = MenuArrow;\nvar Sub = MenuSub;\nvar SubTrigger = MenuSubTrigger;\nvar SubContent = MenuSubContent;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n CheckboxItem,\n Content2 as Content,\n Group,\n Item2 as Item,\n ItemIndicator,\n Label,\n Menu,\n MenuAnchor,\n MenuArrow,\n MenuCheckboxItem,\n MenuContent,\n MenuGroup,\n MenuItem,\n MenuItemIndicator,\n MenuLabel,\n MenuPortal,\n MenuRadioGroup,\n MenuRadioItem,\n MenuSeparator,\n MenuSub,\n MenuSubContent,\n MenuSubTrigger,\n Portal,\n RadioGroup,\n RadioItem,\n Root3 as Root,\n Separator,\n Sub,\n SubContent,\n SubTrigger,\n createMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dropdown-menu.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as MenuPrimitive from \"@radix-ui/react-menu\";\nimport { createMenuScope } from \"@radix-ui/react-menu\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DROPDOWN_MENU_NAME = \"DropdownMenu\";\nvar [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(\n DROPDOWN_MENU_NAME,\n [createMenuScope]\n);\nvar useMenuScope = createMenuScope();\nvar [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);\nvar DropdownMenu = (props) => {\n const {\n __scopeDropdownMenu,\n children,\n dir,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const triggerRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DROPDOWN_MENU_NAME\n });\n return /* @__PURE__ */ jsx(\n DropdownMenuProvider,\n {\n scope: __scopeDropdownMenu,\n triggerId: useId(),\n triggerRef,\n contentId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children: /* @__PURE__ */ jsx(MenuPrimitive.Root, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })\n }\n );\n};\nDropdownMenu.displayName = DROPDOWN_MENU_NAME;\nvar TRIGGER_NAME = \"DropdownMenuTrigger\";\nvar DropdownMenuTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;\n const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n id: context.triggerId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": context.open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n ...triggerProps,\n ref: composeRefs(forwardedRef, context.triggerRef),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onOpenToggle();\n if (!context.open) event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (disabled) return;\n if ([\"Enter\", \" \"].includes(event.key)) context.onOpenToggle();\n if (event.key === \"ArrowDown\") context.onOpenChange(true);\n if ([\"Enter\", \" \", \"ArrowDown\"].includes(event.key)) event.preventDefault();\n })\n }\n ) });\n }\n);\nDropdownMenuTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DropdownMenuPortal\";\nvar DropdownMenuPortal = (props) => {\n const { __scopeDropdownMenu, ...portalProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { ...menuScope, ...portalProps });\n};\nDropdownMenuPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"DropdownMenuContent\";\nvar DropdownMenuContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...contentProps } = props;\n const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const hasInteractedOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.Content,\n {\n id: context.contentId,\n \"aria-labelledby\": context.triggerId,\n ...menuScope,\n ...contentProps,\n ref: forwardedRef,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n hasInteractedOutsideRef.current = false;\n event.preventDefault();\n }),\n onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;\n }),\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n }\n);\nDropdownMenuContent.displayName = CONTENT_NAME;\nvar GROUP_NAME = \"DropdownMenuGroup\";\nvar DropdownMenuGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...groupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef });\n }\n);\nDropdownMenuGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"DropdownMenuLabel\";\nvar DropdownMenuLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...labelProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef });\n }\n);\nDropdownMenuLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"DropdownMenuItem\";\nvar DropdownMenuItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef });\n }\n);\nDropdownMenuItem.displayName = ITEM_NAME;\nvar CHECKBOX_ITEM_NAME = \"DropdownMenuCheckboxItem\";\nvar DropdownMenuCheckboxItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...checkboxItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });\n});\nDropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;\nvar RADIO_GROUP_NAME = \"DropdownMenuRadioGroup\";\nvar DropdownMenuRadioGroup = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioGroupProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });\n});\nDropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;\nvar RADIO_ITEM_NAME = \"DropdownMenuRadioItem\";\nvar DropdownMenuRadioItem = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...radioItemProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });\n});\nDropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;\nvar INDICATOR_NAME = \"DropdownMenuItemIndicator\";\nvar DropdownMenuItemIndicator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...itemIndicatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });\n});\nDropdownMenuItemIndicator.displayName = INDICATOR_NAME;\nvar SEPARATOR_NAME = \"DropdownMenuSeparator\";\nvar DropdownMenuSeparator = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...separatorProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });\n});\nDropdownMenuSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"DropdownMenuArrow\";\nvar DropdownMenuArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDropdownMenu, ...arrowProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef });\n }\n);\nDropdownMenuArrow.displayName = ARROW_NAME;\nvar DropdownMenuSub = (props) => {\n const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: \"DropdownMenuSub\"\n });\n return /* @__PURE__ */ jsx(MenuPrimitive.Sub, { ...menuScope, open, onOpenChange: setOpen, children });\n};\nvar SUB_TRIGGER_NAME = \"DropdownMenuSubTrigger\";\nvar DropdownMenuSubTrigger = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subTriggerProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(MenuPrimitive.SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });\n});\nDropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;\nvar SUB_CONTENT_NAME = \"DropdownMenuSubContent\";\nvar DropdownMenuSubContent = React.forwardRef((props, forwardedRef) => {\n const { __scopeDropdownMenu, ...subContentProps } = props;\n const menuScope = useMenuScope(__scopeDropdownMenu);\n return /* @__PURE__ */ jsx(\n MenuPrimitive.SubContent,\n {\n ...menuScope,\n ...subContentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-dropdown-menu-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-dropdown-menu-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-dropdown-menu-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-dropdown-menu-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-dropdown-menu-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nDropdownMenuSubContent.displayName = SUB_CONTENT_NAME;\nvar Root2 = DropdownMenu;\nvar Trigger = DropdownMenuTrigger;\nvar Portal2 = DropdownMenuPortal;\nvar Content2 = DropdownMenuContent;\nvar Group2 = DropdownMenuGroup;\nvar Label2 = DropdownMenuLabel;\nvar Item2 = DropdownMenuItem;\nvar CheckboxItem2 = DropdownMenuCheckboxItem;\nvar RadioGroup2 = DropdownMenuRadioGroup;\nvar RadioItem2 = DropdownMenuRadioItem;\nvar ItemIndicator2 = DropdownMenuItemIndicator;\nvar Separator2 = DropdownMenuSeparator;\nvar Arrow2 = DropdownMenuArrow;\nvar Sub2 = DropdownMenuSub;\nvar SubTrigger2 = DropdownMenuSubTrigger;\nvar SubContent2 = DropdownMenuSubContent;\nexport {\n Arrow2 as Arrow,\n CheckboxItem2 as CheckboxItem,\n Content2 as Content,\n DropdownMenu,\n DropdownMenuArrow,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuItemIndicator,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n Group2 as Group,\n Item2 as Item,\n ItemIndicator2 as ItemIndicator,\n Label2 as Label,\n Portal2 as Portal,\n RadioGroup2 as RadioGroup,\n RadioItem2 as RadioItem,\n Root2 as Root,\n Separator2 as Separator,\n Sub2 as Sub,\n SubContent2 as SubContent,\n SubTrigger2 as SubTrigger,\n Trigger,\n createDropdownMenuScope\n};\n//# sourceMappingURL=index.mjs.map\n"],"x_google_ignoreList":[0,1,2,3,4],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{a as t,n,t as r}from"./vendor-react-vzx_MT5D.js";import{Gi as i,yn as a}from"./index-Cc57jhuG.js";var o=n(),s=e(t(),1),c=r(),l=`xopc.extensionUiGrants.v1`;function u(){let e=(0,o.c)(79),{t}=i(),n=a(),[r,l]=(0,s.useState)(p),u;e[0]===n?u=e[1]:(u=[...n].sort(f),e[0]=n,e[1]=u);let h=u,g;e[2]===t?g=e[3]:(g=t(`extensionDebug.title`),e[2]=t,e[3]=g);let _;e[4]===g?_=e[5]:(_=(0,c.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:g}),e[4]=g,e[5]=_);let v;e[6]===t?v=e[7]:(v=t(`extensionDebug.subtitle`),e[6]=t,e[7]=v);let y;e[8]===v?y=e[9]:(y=(0,c.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:v}),e[8]=v,e[9]=y);let b;e[10]!==_||e[11]!==y?(b=(0,c.jsxs)(`div`,{children:[_,y]}),e[10]=_,e[11]=y,e[12]=b):b=e[12];let x;e[13]===t?x=e[14]:(x=t(`extensionDebug.grantsHeading`),e[13]=t,e[14]=x);let S;e[15]===x?S=e[16]:(S=(0,c.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:x}),e[15]=x,e[16]=S);let C;e[17]===t?C=e[18]:(C=t(`extensionDebug.grantsHint`),e[17]=t,e[18]=C);let w;e[19]===C?w=e[20]:(w=(0,c.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:C}),e[19]=C,e[20]=w);let T;e[21]===r?T=e[22]:(T=(0,c.jsx)(`pre`,{className:`mt-3 max-h-48 overflow-auto rounded-lg border border-edge-subtle bg-surface-muted p-3 font-mono text-xs text-fg`,children:r}),e[21]=r,e[22]=T);let E;e[23]===Symbol.for(`react.memo_cache_sentinel`)?(E=()=>l(m()),e[23]=E):E=e[23];let D;e[24]===t?D=e[25]:(D=t(`extensionDebug.refresh`),e[24]=t,e[25]=D);let O;e[26]===D?O=e[27]:(O=(0,c.jsx)(`button`,{type:`button`,className:`mt-3 rounded-lg border border-edge px-3 py-1.5 text-xs font-medium text-fg hover:bg-surface-hover`,onClick:E,children:D}),e[26]=D,e[27]=O);let k;e[28]!==T||e[29]!==O||e[30]!==S||e[31]!==w?(k=(0,c.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-base p-4`,children:[S,w,T,O]}),e[28]=T,e[29]=O,e[30]=S,e[31]=w,e[32]=k):k=e[32];let A;e[33]===t?A=e[34]:(A=t(`extensionDebug.listHeading`),e[33]=t,e[34]=A);let j;e[35]===A?j=e[36]:(j=(0,c.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:A}),e[35]=A,e[36]=j);let M;e[37]===t?M=e[38]:(M=t(`extensionDebug.colId`),e[37]=t,e[38]=M);let N;e[39]===M?N=e[40]:(N=(0,c.jsx)(`th`,{className:`py-2 pr-2`,children:M}),e[39]=M,e[40]=N);let P;e[41]===t?P=e[42]:(P=t(`extensionDebug.colName`),e[41]=t,e[42]=P);let F;e[43]===P?F=e[44]:(F=(0,c.jsx)(`th`,{className:`py-2 pr-2`,children:P}),e[43]=P,e[44]=F);let I;e[45]===t?I=e[46]:(I=t(`extensionDebug.colPermissions`),e[45]=t,e[46]=I);let L;e[47]===I?L=e[48]:(L=(0,c.jsx)(`th`,{className:`py-2`,children:I}),e[47]=I,e[48]=L);let R;e[49]!==N||e[50]!==F||e[51]!==L?(R=(0,c.jsx)(`thead`,{children:(0,c.jsxs)(`tr`,{className:`border-b border-edge text-xs uppercase text-fg-muted`,children:[N,F,L]})}),e[49]=N,e[50]=F,e[51]=L,e[52]=R):R=e[52];let z;e[53]===h?z=e[54]:(z=h.map(d),e[53]=h,e[54]=z);let B;e[55]===z?B=e[56]:(B=(0,c.jsx)(`tbody`,{children:z}),e[55]=z,e[56]=B);let V;e[57]!==R||e[58]!==B?(V=(0,c.jsx)(`div`,{className:`mt-3 overflow-x-auto`,children:(0,c.jsxs)(`table`,{className:`w-full min-w-[32rem] border-collapse text-left text-sm`,children:[R,B]})}),e[57]=R,e[58]=B,e[59]=V):V=e[59];let H;e[60]!==j||e[61]!==V?(H=(0,c.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-base p-4`,children:[j,V]}),e[60]=j,e[61]=V,e[62]=H):H=e[62];let U;e[63]===t?U=e[64]:(U=t(`extensionDebug.futureHeading`),e[63]=t,e[64]=U);let W;e[65]===U?W=e[66]:(W=(0,c.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:U}),e[65]=U,e[66]=W);let G;e[67]===t?G=e[68]:(G=t(`extensionDebug.futureBody`),e[67]=t,e[68]=G);let K;e[69]===G?K=e[70]:(K=(0,c.jsx)(`p`,{className:`mt-2`,children:G}),e[69]=G,e[70]=K);let q;e[71]!==W||e[72]!==K?(q=(0,c.jsxs)(`section`,{className:`rounded-xl border border-dashed border-edge-subtle bg-surface-muted/50 p-4 text-sm text-fg-muted`,children:[W,K]}),e[71]=W,e[72]=K,e[73]=q):q=e[73];let J;return e[74]!==k||e[75]!==H||e[76]!==q||e[77]!==b?(J=(0,c.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[b,k,H,q]}),e[74]=k,e[75]=H,e[76]=q,e[77]=b,e[78]=J):J=e[78],J}function d(e){return(0,c.jsxs)(`tr`,{className:`border-b border-edge-subtle`,children:[(0,c.jsx)(`td`,{className:`py-2 pr-2 font-mono text-xs text-fg`,children:e.id}),(0,c.jsx)(`td`,{className:`py-2 pr-2 text-fg`,children:e.name}),(0,c.jsx)(`td`,{className:`py-2 font-mono text-xs text-fg-muted`,children:(e.ui?.permissions??[]).join(`, `)||`—`})]},e.id)}function f(e,t){return e.id.localeCompare(t.id)}function p(){return m()}function m(){try{let e=localStorage.getItem(l);if(!e)return`{}`;let t=JSON.parse(e);return JSON.stringify(t,null,2)}catch(e){return e instanceof Error?e.message:String(e)}}export{u as ExtensionDebugPage};
2
- //# sourceMappingURL=extension-debug-page-M8JS4Jid.js.map
1
+ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{a as t,n,t as r}from"./vendor-react-vzx_MT5D.js";import{Gi as i,yn as a}from"./index-DAglRwh4.js";var o=n(),s=e(t(),1),c=r(),l=`xopc.extensionUiGrants.v1`;function u(){let e=(0,o.c)(79),{t}=i(),n=a(),[r,l]=(0,s.useState)(p),u;e[0]===n?u=e[1]:(u=[...n].sort(f),e[0]=n,e[1]=u);let h=u,g;e[2]===t?g=e[3]:(g=t(`extensionDebug.title`),e[2]=t,e[3]=g);let _;e[4]===g?_=e[5]:(_=(0,c.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:g}),e[4]=g,e[5]=_);let v;e[6]===t?v=e[7]:(v=t(`extensionDebug.subtitle`),e[6]=t,e[7]=v);let y;e[8]===v?y=e[9]:(y=(0,c.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:v}),e[8]=v,e[9]=y);let b;e[10]!==_||e[11]!==y?(b=(0,c.jsxs)(`div`,{children:[_,y]}),e[10]=_,e[11]=y,e[12]=b):b=e[12];let x;e[13]===t?x=e[14]:(x=t(`extensionDebug.grantsHeading`),e[13]=t,e[14]=x);let S;e[15]===x?S=e[16]:(S=(0,c.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:x}),e[15]=x,e[16]=S);let C;e[17]===t?C=e[18]:(C=t(`extensionDebug.grantsHint`),e[17]=t,e[18]=C);let w;e[19]===C?w=e[20]:(w=(0,c.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:C}),e[19]=C,e[20]=w);let T;e[21]===r?T=e[22]:(T=(0,c.jsx)(`pre`,{className:`mt-3 max-h-48 overflow-auto rounded-lg border border-edge-subtle bg-surface-muted p-3 font-mono text-xs text-fg`,children:r}),e[21]=r,e[22]=T);let E;e[23]===Symbol.for(`react.memo_cache_sentinel`)?(E=()=>l(m()),e[23]=E):E=e[23];let D;e[24]===t?D=e[25]:(D=t(`extensionDebug.refresh`),e[24]=t,e[25]=D);let O;e[26]===D?O=e[27]:(O=(0,c.jsx)(`button`,{type:`button`,className:`mt-3 rounded-lg border border-edge px-3 py-1.5 text-xs font-medium text-fg hover:bg-surface-hover`,onClick:E,children:D}),e[26]=D,e[27]=O);let k;e[28]!==T||e[29]!==O||e[30]!==S||e[31]!==w?(k=(0,c.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-base p-4`,children:[S,w,T,O]}),e[28]=T,e[29]=O,e[30]=S,e[31]=w,e[32]=k):k=e[32];let A;e[33]===t?A=e[34]:(A=t(`extensionDebug.listHeading`),e[33]=t,e[34]=A);let j;e[35]===A?j=e[36]:(j=(0,c.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:A}),e[35]=A,e[36]=j);let M;e[37]===t?M=e[38]:(M=t(`extensionDebug.colId`),e[37]=t,e[38]=M);let N;e[39]===M?N=e[40]:(N=(0,c.jsx)(`th`,{className:`py-2 pr-2`,children:M}),e[39]=M,e[40]=N);let P;e[41]===t?P=e[42]:(P=t(`extensionDebug.colName`),e[41]=t,e[42]=P);let F;e[43]===P?F=e[44]:(F=(0,c.jsx)(`th`,{className:`py-2 pr-2`,children:P}),e[43]=P,e[44]=F);let I;e[45]===t?I=e[46]:(I=t(`extensionDebug.colPermissions`),e[45]=t,e[46]=I);let L;e[47]===I?L=e[48]:(L=(0,c.jsx)(`th`,{className:`py-2`,children:I}),e[47]=I,e[48]=L);let R;e[49]!==N||e[50]!==F||e[51]!==L?(R=(0,c.jsx)(`thead`,{children:(0,c.jsxs)(`tr`,{className:`border-b border-edge text-xs uppercase text-fg-muted`,children:[N,F,L]})}),e[49]=N,e[50]=F,e[51]=L,e[52]=R):R=e[52];let z;e[53]===h?z=e[54]:(z=h.map(d),e[53]=h,e[54]=z);let B;e[55]===z?B=e[56]:(B=(0,c.jsx)(`tbody`,{children:z}),e[55]=z,e[56]=B);let V;e[57]!==R||e[58]!==B?(V=(0,c.jsx)(`div`,{className:`mt-3 overflow-x-auto`,children:(0,c.jsxs)(`table`,{className:`w-full min-w-[32rem] border-collapse text-left text-sm`,children:[R,B]})}),e[57]=R,e[58]=B,e[59]=V):V=e[59];let H;e[60]!==j||e[61]!==V?(H=(0,c.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-base p-4`,children:[j,V]}),e[60]=j,e[61]=V,e[62]=H):H=e[62];let U;e[63]===t?U=e[64]:(U=t(`extensionDebug.futureHeading`),e[63]=t,e[64]=U);let W;e[65]===U?W=e[66]:(W=(0,c.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:U}),e[65]=U,e[66]=W);let G;e[67]===t?G=e[68]:(G=t(`extensionDebug.futureBody`),e[67]=t,e[68]=G);let K;e[69]===G?K=e[70]:(K=(0,c.jsx)(`p`,{className:`mt-2`,children:G}),e[69]=G,e[70]=K);let q;e[71]!==W||e[72]!==K?(q=(0,c.jsxs)(`section`,{className:`rounded-xl border border-dashed border-edge-subtle bg-surface-muted/50 p-4 text-sm text-fg-muted`,children:[W,K]}),e[71]=W,e[72]=K,e[73]=q):q=e[73];let J;return e[74]!==k||e[75]!==H||e[76]!==q||e[77]!==b?(J=(0,c.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[b,k,H,q]}),e[74]=k,e[75]=H,e[76]=q,e[77]=b,e[78]=J):J=e[78],J}function d(e){return(0,c.jsxs)(`tr`,{className:`border-b border-edge-subtle`,children:[(0,c.jsx)(`td`,{className:`py-2 pr-2 font-mono text-xs text-fg`,children:e.id}),(0,c.jsx)(`td`,{className:`py-2 pr-2 text-fg`,children:e.name}),(0,c.jsx)(`td`,{className:`py-2 font-mono text-xs text-fg-muted`,children:(e.ui?.permissions??[]).join(`, `)||`—`})]},e.id)}function f(e,t){return e.id.localeCompare(t.id)}function p(){return m()}function m(){try{let e=localStorage.getItem(l);if(!e)return`{}`;let t=JSON.parse(e);return JSON.stringify(t,null,2)}catch(e){return e instanceof Error?e.message:String(e)}}export{u as ExtensionDebugPage};
2
+ //# sourceMappingURL=extension-debug-page-BDls5xp3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension-debug-page-M8JS4Jid.js","names":["useMemo","useState","useTranslation","useExtensions","GRANTS_STORAGE_KEY","ExtensionDebugPage","$","_c","t","extensions","grantsRaw","setGrantsRaw","_temp","t0","sort","_temp2","sorted","t1","t2","t3","t4","t5","t6","t7","t8","t9","t10","t11","Symbol","for","readGrantsSafe","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","map","_temp3","t25","t26","t27","t28","t29","t30","t31","t32","t33","e","id","name","ui","permissions","join","a","b","localeCompare","raw","localStorage","getItem","parsed","JSON","parse","stringify","Error","message","String"],"sources":["../../../../../web/src/features/extensions/extension-debug-page.tsx"],"sourcesContent":["/**\n * Extension debug — Settings panel: extension list, declared permissions, UI grant fingerprints.\n */\n\nimport { useMemo, useState } from 'react';\n\nimport { useTranslation } from 'react-i18next';\n\nimport { useExtensions } from '@/features/extensions/extension-provider';\n\nconst GRANTS_STORAGE_KEY = 'xopc.extensionUiGrants.v1';\n\nexport function ExtensionDebugPage() {\n const { t } = useTranslation();\n const extensions = useExtensions();\n const [grantsRaw, setGrantsRaw] = useState(() => readGrantsSafe());\n\n const sorted = useMemo(\n () => [...extensions].sort((a, b) => a.id.localeCompare(b.id)),\n [extensions],\n );\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8\">\n <div>\n <h1 className=\"text-lg font-semibold text-fg\">{t('extensionDebug.title')}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{t('extensionDebug.subtitle')}</p>\n </div>\n\n <section className=\"rounded-xl border border-edge bg-surface-base p-4\">\n <h2 className=\"text-sm font-semibold text-fg\">{t('extensionDebug.grantsHeading')}</h2>\n <p className=\"mt-1 text-xs text-fg-muted\">{t('extensionDebug.grantsHint')}</p>\n <pre className=\"mt-3 max-h-48 overflow-auto rounded-lg border border-edge-subtle bg-surface-muted p-3 font-mono text-xs text-fg\">\n {grantsRaw}\n </pre>\n <button\n type=\"button\"\n className=\"mt-3 rounded-lg border border-edge px-3 py-1.5 text-xs font-medium text-fg hover:bg-surface-hover\"\n onClick={() => setGrantsRaw(readGrantsSafe())}\n >\n {t('extensionDebug.refresh')}\n </button>\n </section>\n\n <section className=\"rounded-xl border border-edge bg-surface-base p-4\">\n <h2 className=\"text-sm font-semibold text-fg\">{t('extensionDebug.listHeading')}</h2>\n <div className=\"mt-3 overflow-x-auto\">\n <table className=\"w-full min-w-[32rem] border-collapse text-left text-sm\">\n <thead>\n <tr className=\"border-b border-edge text-xs uppercase text-fg-muted\">\n <th className=\"py-2 pr-2\">{t('extensionDebug.colId')}</th>\n <th className=\"py-2 pr-2\">{t('extensionDebug.colName')}</th>\n <th className=\"py-2\">{t('extensionDebug.colPermissions')}</th>\n </tr>\n </thead>\n <tbody>\n {sorted.map((e) => (\n <tr key={e.id} className=\"border-b border-edge-subtle\">\n <td className=\"py-2 pr-2 font-mono text-xs text-fg\">{e.id}</td>\n <td className=\"py-2 pr-2 text-fg\">{e.name}</td>\n <td className=\"py-2 font-mono text-xs text-fg-muted\">\n {(e.ui?.permissions ?? []).join(', ') || '—'}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </section>\n\n <section className=\"rounded-xl border border-dashed border-edge-subtle bg-surface-muted/50 p-4 text-sm text-fg-muted\">\n <h2 className=\"text-sm font-semibold text-fg\">{t('extensionDebug.futureHeading')}</h2>\n <p className=\"mt-2\">{t('extensionDebug.futureBody')}</p>\n </section>\n </div>\n );\n}\n\nfunction readGrantsSafe(): string {\n try {\n const raw = localStorage.getItem(GRANTS_STORAGE_KEY);\n if (!raw) return '{}';\n const parsed = JSON.parse(raw) as unknown;\n return JSON.stringify(parsed, null, 2);\n } catch (e) {\n return e instanceof Error ? e.message : String(e);\n }\n}\n"],"mappings":"uLAUMI,EAAqB,4BAE3B,SAAOC,GAAA,CAAA,IAAAC,GAAAA,EAAAA,EAAAA,GAAA,GAAA,CACL,CAAAE,GAAcN,GAAgB,CAC9BO,EAAmBN,GAAe,CAClC,CAAAO,EAAAC,IAAAA,EAAAA,EAAAA,UAA2CC,EAAuB,CAACC,EAAAP,EAAA,KAAAG,EAGHI,EAAAP,EAAA,IAAxDO,EAAA,CAAA,GAAIJ,EAAW,CAAAK,KAAMC,EAAmC,CAAAT,EAAA,GAAAG,EAAAH,EAAA,GAAAO,GADhE,IAAAG,EACQH,EAENI,EAAAX,EAAA,KAAAE,EAK4ES,EAAAX,EAAA,IAAzBW,EAAAT,EAAE,uBAAuB,CAAAF,EAAA,GAAAE,EAAAF,EAAA,GAAAW,GAAA,IAAAC,EAAAZ,EAAA,KAAAW,EAAMC,EAAAZ,EAAA,IAA9EY,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,yCAAiCD,EAA+B,CAAA,CAAAX,EAAA,GAAAW,EAAAX,EAAA,GAAAY,GAAA,IAAAC,EAAAb,EAAA,KAAAE,EACPW,EAAAb,EAAA,IAA5Ba,EAAAX,EAAE,0BAA0B,CAAAF,EAAA,GAAAE,EAAAF,EAAA,GAAAa,GAAA,IAAAC,EAAAd,EAAA,KAAAa,EAAKC,EAAAd,EAAA,IAA5Ec,GAAA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,sCAA8BD,EAAiC,CAAA,CAAAb,EAAA,GAAAa,EAAAb,EAAA,GAAAc,GAAA,IAAAC,EAAAf,EAAA,MAAAY,GAAAZ,EAAA,MAAAc,GAF9EC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAA,SAAA,CACEH,EACAE,EACI,CAAA,CAAA,CAAAd,EAAA,IAAAY,EAAAZ,EAAA,IAAAc,EAAAd,EAAA,IAAAe,GAAAA,EAAAf,EAAA,IAAA,IAAAgB,EAAAhB,EAAA,MAAAE,EAG4Ec,EAAAhB,EAAA,KAAjCgB,EAAAd,EAAE,+BAA+B,CAAAF,EAAA,IAAAE,EAAAF,EAAA,IAAAgB,GAAA,IAAAC,EAAAjB,EAAA,MAAAgB,EAAMC,EAAAjB,EAAA,KAAtFiB,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,yCAAiCD,EAAuC,CAAA,CAAAhB,EAAA,IAAAgB,EAAAhB,EAAA,IAAAiB,GAAA,IAAAC,EAAAlB,EAAA,MAAAE,EACbgB,EAAAlB,EAAA,KAA9BkB,EAAAhB,EAAE,4BAA4B,CAAAF,EAAA,IAAAE,EAAAF,EAAA,IAAAkB,GAAA,IAAAC,EAAAnB,EAAA,MAAAkB,EAAKC,EAAAnB,EAAA,KAA9EmB,GAAA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,sCAA8BD,EAAmC,CAAA,CAAAlB,EAAA,IAAAkB,EAAAlB,EAAA,IAAAmB,GAAA,IAAAC,EAAApB,EAAA,MAAAI,EAGxEgB,EAAApB,EAAA,KAFNoB,GAAA,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,2HACZhB,EACG,CAAA,CAAAJ,EAAA,IAAAI,EAAAJ,EAAA,IAAAoB,GAAA,IAAAC,EAAArB,EAAA,MAAAsB,OAAAC,IAAA,4BAAA,EAIKF,MAAMhB,EAAamB,GAAgB,CAAC,CAAAxB,EAAA,IAAAqB,GAAAA,EAAArB,EAAA,IAAA,IAAAyB,EAAAzB,EAAA,MAAAE,EAEjBuB,EAAAzB,EAAA,KAA3ByB,EAAAvB,EAAE,yBAAyB,CAAAF,EAAA,IAAAE,EAAAF,EAAA,IAAAyB,GAAA,IAAAC,EAAA1B,EAAA,MAAAyB,EACrBC,EAAA1B,EAAA,KANT0B,GAAA,EAAA,EAAA,KAAA,SAAA,CACO,KAAA,SACK,UAAA,oGACD,QAAAL,WAERI,EACM,CAAA,CAAAzB,EAAA,IAAAyB,EAAAzB,EAAA,IAAA0B,GAAA,IAAAC,EAAA3B,EAAA,MAAAoB,GAAApB,EAAA,MAAA0B,GAAA1B,EAAA,MAAAiB,GAAAjB,EAAA,MAAAmB,GAZXQ,GAAA,EAAA,EAAA,MAAA,UAAA,CAAmB,UAAA,6DAAnB,CACEV,EACAE,EACAC,EAGAM,EAOQ,GAAA1B,EAAA,IAAAoB,EAAApB,EAAA,IAAA0B,EAAA1B,EAAA,IAAAiB,EAAAjB,EAAA,IAAAmB,EAAAnB,EAAA,IAAA2B,GAAAA,EAAA3B,EAAA,IAAA,IAAA4B,EAAA5B,EAAA,MAAAE,EAGsE0B,EAAA5B,EAAA,KAA/B4B,EAAA1B,EAAE,6BAA6B,CAAAF,EAAA,IAAAE,EAAAF,EAAA,IAAA4B,GAAA,IAAAC,EAAA7B,EAAA,MAAA4B,EAAMC,EAAA7B,EAAA,KAApF6B,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,yCAAiCD,EAAqC,CAAA,CAAA5B,EAAA,IAAA4B,EAAA5B,EAAA,IAAA6B,GAAA,IAAAC,EAAA9B,EAAA,MAAAE,EAKxB4B,EAAA9B,EAAA,KAAzB8B,EAAA5B,EAAE,uBAAuB,CAAAF,EAAA,IAAAE,EAAAF,EAAA,IAAA8B,GAAA,IAAAC,EAAA/B,EAAA,MAAA8B,EAAMC,EAAA/B,EAAA,KAA1D+B,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,qBAAaD,EAA+B,CAAA,CAAA9B,EAAA,IAAA8B,EAAA9B,EAAA,IAAA+B,GAAA,IAAAC,EAAAhC,EAAA,MAAAE,EACJ8B,EAAAhC,EAAA,KAA3BgC,EAAA9B,EAAE,yBAAyB,CAAAF,EAAA,IAAAE,EAAAF,EAAA,IAAAgC,GAAA,IAAAC,EAAAjC,EAAA,MAAAgC,EAAMC,EAAAjC,EAAA,KAA5DiC,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,qBAAaD,EAAiC,CAAA,CAAAhC,EAAA,IAAAgC,EAAAhC,EAAA,IAAAiC,GAAA,IAAAC,EAAAlC,EAAA,MAAAE,EACJgC,EAAAlC,EAAA,KAAlCkC,EAAAhC,EAAE,gCAAgC,CAAAF,EAAA,IAAAE,EAAAF,EAAA,IAAAkC,GAAA,IAAAC,EAAAnC,EAAA,MAAAkC,EAAMC,EAAAnC,EAAA,KAA9DmC,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,gBAAQD,EAAwC,CAAA,CAAAlC,EAAA,IAAAkC,EAAAlC,EAAA,IAAAmC,GAAA,IAAAC,EAAApC,EAAA,MAAA+B,GAAA/B,EAAA,MAAAiC,GAAAjC,EAAA,MAAAmC,GAJlEC,GAAA,EAAA,EAAA,KAAA,QAAA,CAAA,UACE,EAAA,EAAA,MAAA,KAAA,CAAc,UAAA,gEAAd,CACEL,EACAE,EACAE,EAEJ,GAAQ,CAAA,CAAAnC,EAAA,IAAA+B,EAAA/B,EAAA,IAAAiC,EAAAjC,EAAA,IAAAmC,EAAAnC,EAAA,IAAAoC,GAAAA,EAAApC,EAAA,IAAA,IAAAqC,EAAArC,EAAA,MAAAU,EAUJ2B,EAAArC,EAAA,KARDqC,EAAA3B,EAAM4B,IAAKC,EAQV,CAAAvC,EAAA,IAAAU,EAAAV,EAAA,IAAAqC,GAAA,IAAAG,EAAAxC,EAAA,MAAAqC,EACIG,EAAAxC,EAAA,KAVRwC,GAAA,EAAA,EAAA,KAAA,QAAA,CAAA,SACGH,EASK,CAAA,CAAArC,EAAA,IAAAqC,EAAArC,EAAA,IAAAwC,GAAA,IAAAC,EAAAzC,EAAA,MAAAoC,GAAApC,EAAA,MAAAwC,GAnBZC,GAAA,EAAA,EAAA,KAAA,MAAA,CAAe,UAAA,iCACb,EAAA,EAAA,MAAA,QAAA,CAAiB,UAAA,kEAAjB,CACEL,EAOAI,EAYJ,GAAM,CAAA,CAAAxC,EAAA,IAAAoC,EAAApC,EAAA,IAAAwC,EAAAxC,EAAA,IAAAyC,GAAAA,EAAAzC,EAAA,IAAA,IAAA0C,EAAA1C,EAAA,MAAA6B,GAAA7B,EAAA,MAAAyC,GAvBRC,GAAA,EAAA,EAAA,MAAA,UAAA,CAAmB,UAAA,6DAAnB,CACEb,EACAY,EAsBQ,GAAAzC,EAAA,IAAA6B,EAAA7B,EAAA,IAAAyC,EAAAzC,EAAA,IAAA0C,GAAAA,EAAA1C,EAAA,IAAA,IAAA2C,EAAA3C,EAAA,MAAAE,EAGwEyC,EAAA3C,EAAA,KAAjC2C,EAAAzC,EAAE,+BAA+B,CAAAF,EAAA,IAAAE,EAAAF,EAAA,IAAA2C,GAAA,IAAAC,EAAA5C,EAAA,MAAA2C,EAAMC,EAAA5C,EAAA,KAAtF4C,GAAA,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,yCAAiCD,EAAuC,CAAA,CAAA3C,EAAA,IAAA2C,EAAA3C,EAAA,IAAA4C,GAAA,IAAAC,EAAA7C,EAAA,MAAAE,EACnC2C,EAAA7C,EAAA,KAA9B6C,EAAA3C,EAAE,4BAA4B,CAAAF,EAAA,IAAAE,EAAAF,EAAA,IAAA6C,GAAA,IAAAC,EAAA9C,EAAA,MAAA6C,EAAKC,EAAA9C,EAAA,KAAxD8C,GAAA,EAAA,EAAA,KAAA,IAAA,CAAa,UAAA,gBAAQD,EAAmC,CAAA,CAAA7C,EAAA,IAAA6C,EAAA7C,EAAA,IAAA8C,GAAA,IAAAC,EAAA/C,EAAA,MAAA4C,GAAA5C,EAAA,MAAA8C,GAF1DC,GAAA,EAAA,EAAA,MAAA,UAAA,CAAmB,UAAA,4GAAnB,CACEH,EACAE,EACQ,GAAA9C,EAAA,IAAA4C,EAAA5C,EAAA,IAAA8C,EAAA9C,EAAA,IAAA+C,GAAAA,EAAA/C,EAAA,IAAA,IAAAgD,EACN,OADMhD,EAAA,MAAA2B,GAAA3B,EAAA,MAAA0C,GAAA1C,EAAA,MAAA+C,GAAA/C,EAAA,MAAAe,GAlDZiC,GAAA,EAAA,EAAA,MAAA,MAAA,CAAe,UAAA,uEAAf,CACEjC,EAKAY,EAeAe,EA0BAK,EAII,GAAA/C,EAAA,IAAA2B,EAAA3B,EAAA,IAAA0C,EAAA1C,EAAA,IAAA+C,EAAA/C,EAAA,IAAAe,EAAAf,EAAA,IAAAgD,GAAAA,EAAAhD,EAAA,IAnDNgD,EAXG,SAAAT,EAAAU,EAAA,CAAA,OA6CS,EAAA,EAAA,MAAA,KAAA,CAAyB,UAAA,uCAAzB,EACE,EAAA,EAAA,KAAA,KAAA,CAAc,UAAA,+CAAuCA,EAACC,GACtD,CAAA,WAAA,KAAA,CAAc,UAAA,6BAAqBD,EAACE,KACpC,CAAA,WAAA,KAAA,CAAc,UAAA,iDACVF,EAACG,IAAgBC,aAAjB,EAAuB,EAAAC,KAAO,KAAY,EAA3C,IAEL,CAAA,CAAK,EANIL,EAACC,GAML,CAnDd,SAAAzC,EAAA8C,EAAAC,EAAA,CAAA,OAMkCD,EAACL,GAAGO,cAAeD,EAACN,GAAI,CAN1D,SAAA5C,GAAA,CAAA,OAG4CkB,GAAgB,CA+DnE,SAASA,GAAyB,CAChC,GAAI,CACF,IAAMkC,EAAMC,aAAaC,QAAQ9D,EAAmB,CACpD,GAAI,CAAC4D,EAAK,MAAO,KACjB,IAAMG,EAASC,KAAKC,MAAML,EAAI,CAC9B,OAAOI,KAAKE,UAAUH,EAAQ,KAAM,EAAE,OAC/BZ,EAAG,CACV,OAAOA,aAAagB,MAAQhB,EAAEiB,QAAUC,OAAOlB,EAAE"}
1
+ {"version":3,"file":"extension-debug-page-BDls5xp3.js","names":["useMemo","useState","useTranslation","useExtensions","GRANTS_STORAGE_KEY","ExtensionDebugPage","$","_c","t","extensions","grantsRaw","setGrantsRaw","_temp","t0","sort","_temp2","sorted","t1","t2","t3","t4","t5","t6","t7","t8","t9","t10","t11","Symbol","for","readGrantsSafe","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","map","_temp3","t25","t26","t27","t28","t29","t30","t31","t32","t33","e","id","name","ui","permissions","join","a","b","localeCompare","raw","localStorage","getItem","parsed","JSON","parse","stringify","Error","message","String"],"sources":["../../../../../web/src/features/extensions/extension-debug-page.tsx"],"sourcesContent":["/**\n * Extension debug — Settings panel: extension list, declared permissions, UI grant fingerprints.\n */\n\nimport { useMemo, useState } from 'react';\n\nimport { useTranslation } from 'react-i18next';\n\nimport { useExtensions } from '@/features/extensions/extension-provider';\n\nconst GRANTS_STORAGE_KEY = 'xopc.extensionUiGrants.v1';\n\nexport function ExtensionDebugPage() {\n const { t } = useTranslation();\n const extensions = useExtensions();\n const [grantsRaw, setGrantsRaw] = useState(() => readGrantsSafe());\n\n const sorted = useMemo(\n () => [...extensions].sort((a, b) => a.id.localeCompare(b.id)),\n [extensions],\n );\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8\">\n <div>\n <h1 className=\"text-lg font-semibold text-fg\">{t('extensionDebug.title')}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{t('extensionDebug.subtitle')}</p>\n </div>\n\n <section className=\"rounded-xl border border-edge bg-surface-base p-4\">\n <h2 className=\"text-sm font-semibold text-fg\">{t('extensionDebug.grantsHeading')}</h2>\n <p className=\"mt-1 text-xs text-fg-muted\">{t('extensionDebug.grantsHint')}</p>\n <pre className=\"mt-3 max-h-48 overflow-auto rounded-lg border border-edge-subtle bg-surface-muted p-3 font-mono text-xs text-fg\">\n {grantsRaw}\n </pre>\n <button\n type=\"button\"\n className=\"mt-3 rounded-lg border border-edge px-3 py-1.5 text-xs font-medium text-fg hover:bg-surface-hover\"\n onClick={() => setGrantsRaw(readGrantsSafe())}\n >\n {t('extensionDebug.refresh')}\n </button>\n </section>\n\n <section className=\"rounded-xl border border-edge bg-surface-base p-4\">\n <h2 className=\"text-sm font-semibold text-fg\">{t('extensionDebug.listHeading')}</h2>\n <div className=\"mt-3 overflow-x-auto\">\n <table className=\"w-full min-w-[32rem] border-collapse text-left text-sm\">\n <thead>\n <tr className=\"border-b border-edge text-xs uppercase text-fg-muted\">\n <th className=\"py-2 pr-2\">{t('extensionDebug.colId')}</th>\n <th className=\"py-2 pr-2\">{t('extensionDebug.colName')}</th>\n <th className=\"py-2\">{t('extensionDebug.colPermissions')}</th>\n </tr>\n </thead>\n <tbody>\n {sorted.map((e) => (\n <tr key={e.id} className=\"border-b border-edge-subtle\">\n <td className=\"py-2 pr-2 font-mono text-xs text-fg\">{e.id}</td>\n <td className=\"py-2 pr-2 text-fg\">{e.name}</td>\n <td className=\"py-2 font-mono text-xs text-fg-muted\">\n {(e.ui?.permissions ?? []).join(', ') || '—'}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </section>\n\n <section className=\"rounded-xl border border-dashed border-edge-subtle bg-surface-muted/50 p-4 text-sm text-fg-muted\">\n <h2 className=\"text-sm font-semibold text-fg\">{t('extensionDebug.futureHeading')}</h2>\n <p className=\"mt-2\">{t('extensionDebug.futureBody')}</p>\n </section>\n </div>\n );\n}\n\nfunction readGrantsSafe(): string {\n try {\n const raw = localStorage.getItem(GRANTS_STORAGE_KEY);\n if (!raw) return '{}';\n const parsed = JSON.parse(raw) as unknown;\n return JSON.stringify(parsed, null, 2);\n } catch (e) {\n return e instanceof Error ? e.message : String(e);\n }\n}\n"],"mappings":"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"}