@xopcai/xopc 0.0.77 → 0.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agents-DN3vr8pb.js → agents-Bh_9-1KB.js} +2 -2
- package/dist/gateway/static/root/assets/{agents-DN3vr8pb.js.map → agents-Bh_9-1KB.js.map} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BUn41aPi.js → apps-page-CB5anZpc.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-BUn41aPi.js.map → apps-page-CB5anZpc.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-CYMmWDtP.js → channels-settings-Bt1sprhC.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-settings-CYMmWDtP.js.map → channels-settings-Bt1sprhC.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-status-swr-sJj4ueTp.js → channels-status-swr-Crgak3fg.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-status-swr-sJj4ueTp.js.map → channels-status-swr-Crgak3fg.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-api-CLxnaHdq.js → cron-api-CzJGvQQ7.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-api-CLxnaHdq.js.map → cron-api-CzJGvQQ7.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js → cron-page-BoNRJNVV.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js.map → cron-page-BoNRJNVV.js.map} +1 -1
- package/dist/gateway/static/root/assets/{dist-BfJYxiK5.js → dist-a-eaOUvs.js} +2 -2
- package/dist/gateway/static/root/assets/{dist-BfJYxiK5.js.map → dist-a-eaOUvs.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-bgvVs-Sy.js → extension-debug-page-D-O1XjAa.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-bgvVs-Sy.js.map → extension-debug-page-D-O1XjAa.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-SG4TVv-u.js → extension-page-B2VpqBTH.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-SG4TVv-u.js.map → extension-page-B2VpqBTH.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CJZRTsjF.js → extension-settings-page-CmBcQfeO.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-CJZRTsjF.js.map → extension-settings-page-CmBcQfeO.js.map} +1 -1
- package/dist/gateway/static/root/assets/{fetch-K_0JRCXU.js → fetch-EGO9T3MN.js} +3 -3
- package/dist/gateway/static/root/assets/{fetch-K_0JRCXU.js.map → fetch-EGO9T3MN.js.map} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-Z76hyBYS.js → field-primitives-Bh7G1y4D.js} +2 -2
- package/dist/gateway/static/root/assets/{field-primitives-Z76hyBYS.js.map → field-primitives-Bh7G1y4D.js.map} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BqfDabSI.js → heartbeat-config-api-DxpIEZNs.js} +2 -2
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BqfDabSI.js.map → heartbeat-config-api-DxpIEZNs.js.map} +1 -1
- package/dist/gateway/static/root/assets/{index-ChiUhJAs.js → index-Dxy9ZCtC.js} +5 -5
- package/dist/gateway/static/root/assets/{index-ChiUhJAs.js.map → index-Dxy9ZCtC.js.map} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js → logs-page-Dw58E2GE.js} +2 -2
- package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js.map → logs-page-Dw58E2GE.js.map} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-B-RGO3N0.js → sessions-page-CPkhCy57.js} +2 -2
- package/dist/gateway/static/root/assets/{sessions-page-B-RGO3N0.js.map → sessions-page-CPkhCy57.js.map} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-Csvl1iL6.js → settings-form-section-DLZDVMEf.js} +2 -2
- package/dist/gateway/static/root/assets/{settings-form-section-Csvl1iL6.js.map → settings-form-section-DLZDVMEf.js.map} +1 -1
- package/dist/gateway/static/root/assets/settings-page-CVPCa0PE.js +4 -0
- package/dist/gateway/static/root/assets/settings-page-CVPCa0PE.js.map +1 -0
- package/dist/gateway/static/root/assets/{skills-page-dHwx2vh0.js → skills-page-DueZ9Qfg.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-dHwx2vh0.js.map → skills-page-DueZ9Qfg.js.map} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js → theme-store-CWPq9gW1.js} +2 -2
- package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js.map → theme-store-CWPq9gW1.js.map} +1 -1
- package/dist/gateway/static/root/assets/{utils-COYrNFF7.js → utils-Cnix55r9.js} +2 -2
- package/dist/gateway/static/root/assets/{utils-COYrNFF7.js.map → utils-Cnix55r9.js.map} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-5WZZaxH3.js → voice-api-key-field-BR3Ut06g.js} +2 -2
- package/dist/gateway/static/root/assets/{voice-api-key-field-5WZZaxH3.js.map → voice-api-key-field-BR3Ut06g.js.map} +1 -1
- package/dist/gateway/static/root/index.html +3 -3
- package/dist/package.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +23 -4
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/cli/commands/tunnel.js +4 -5
- package/dist/src/cli/commands/tunnel.js.map +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/rules.js +0 -5
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +0 -27
- package/dist/src/config/schema.js +4 -18
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/gateway/auth-rate-limit.d.ts +2 -0
- package/dist/src/gateway/auth-rate-limit.js +9 -3
- package/dist/src/gateway/auth-rate-limit.js.map +1 -1
- package/dist/src/gateway/hono/app.js +19 -13
- package/dist/src/gateway/hono/app.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -2
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +32 -30
- package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
- package/dist/src/gateway/host.d.ts +24 -0
- package/dist/src/gateway/host.js +33 -1
- package/dist/src/gateway/host.js.map +1 -1
- package/dist/src/gateway/index.d.ts +1 -1
- package/dist/src/gateway/index.js +2 -2
- package/dist/src/gateway/runtime-config.js +1 -8
- package/dist/src/gateway/runtime-config.js.map +1 -1
- package/dist/src/gateway/security/audit.js +4 -4
- package/dist/src/gateway/security/audit.js.map +1 -1
- package/dist/src/gateway/server.js +2 -3
- package/dist/src/gateway/server.js.map +1 -1
- package/dist/src/gateway/service/types.d.ts +2 -0
- package/dist/src/gateway/service.d.ts +2 -0
- package/dist/src/gateway/service.js +7 -2
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/tunnel/frp-subdomain-host.d.ts +2 -0
- package/dist/src/tunnel/frp-subdomain-host.js +15 -0
- package/dist/src/tunnel/frp-subdomain-host.js.map +1 -0
- package/dist/src/tunnel/gateway-lifecycle.d.ts +0 -4
- package/dist/src/tunnel/gateway-lifecycle.js +9 -11
- package/dist/src/tunnel/gateway-lifecycle.js.map +1 -1
- package/dist/src/tunnel/index.d.ts +2 -4
- package/dist/src/tunnel/index.js +2 -4
- package/dist/src/tunnel/pair-url.js +7 -1
- package/dist/src/tunnel/pair-url.js.map +1 -1
- package/dist/src/tunnel/pairing.d.ts +13 -0
- package/dist/src/tunnel/pairing.js +48 -1
- package/dist/src/tunnel/pairing.js.map +1 -1
- package/dist/src/tunnel/tunnel-config.js +2 -16
- package/dist/src/tunnel/tunnel-config.js.map +1 -1
- package/dist/src/tunnel/tunnel-service.d.ts +1 -10
- package/dist/src/tunnel/tunnel-service.js +7 -60
- package/dist/src/tunnel/tunnel-service.js.map +1 -1
- package/dist/src/tunnel/tunnel-types.d.ts +3 -18
- package/dist/src/tunnel/well-known.d.ts +5 -0
- package/dist/src/tunnel/well-known.js +2 -1
- package/dist/src/tunnel/well-known.js.map +1 -1
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/settings-page-nxAc0ta1.js +0 -4
- package/dist/gateway/static/root/assets/settings-page-nxAc0ta1.js.map +0 -1
- package/dist/src/tunnel/acme-cert-store.d.ts +0 -34
- package/dist/src/tunnel/acme-cert-store.js +0 -184
- package/dist/src/tunnel/acme-cert-store.js.map +0 -1
- package/dist/src/tunnel/acme-client.d.ts +0 -50
- package/dist/src/tunnel/acme-client.js +0 -473
- package/dist/src/tunnel/acme-client.js.map +0 -1
- package/dist/src/tunnel/acme-crypto.d.ts +0 -25
- package/dist/src/tunnel/acme-crypto.js +0 -58
- package/dist/src/tunnel/acme-crypto.js.map +0 -1
- package/dist/src/tunnel/acme-csr.d.ts +0 -5
- package/dist/src/tunnel/acme-csr.js +0 -48
- package/dist/src/tunnel/acme-csr.js.map +0 -1
- package/dist/src/tunnel/tls-server.d.ts +0 -14
- package/dist/src/tunnel/tls-server.js +0 -126
- package/dist/src/tunnel/tls-server.js.map +0 -1
- package/dist/src/tunnel/tunnel-e2e-config.d.ts +0 -11
- package/dist/src/tunnel/tunnel-e2e-config.js +0 -29
- package/dist/src/tunnel/tunnel-e2e-config.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dist-BfJYxiK5.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.15__@types+r_f60ec5f07742f43c671f805acca04ca7/node_modules/@radix-ui/react-collection/dist/index.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-direction@1.1.1_@types+react@19.2.15_react@19.2.6/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.15__@type_7a338852d44d706e56763c557083d8d1/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.15__@types+react@_a9b732c970cbdd7cc0d81494ceae7fbb/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.15__@typ_69bd6271c71f5d86eafb6c8c4c2d8bcd/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-a-eaOUvs.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.15__@types+r_f60ec5f07742f43c671f805acca04ca7/node_modules/@radix-ui/react-collection/dist/index.mjs","../../../../../node_modules/.pnpm/@radix-ui+react-direction@1.1.1_@types+react@19.2.15_react@19.2.6/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.15__@type_7a338852d44d706e56763c557083d8d1/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.15__@types+react@_a9b732c970cbdd7cc0d81494ceae7fbb/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.15__@typ_69bd6271c71f5d86eafb6c8c4c2d8bcd/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-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{_n as i,qi as a}from"./index-
|
|
2
|
-
//# sourceMappingURL=extension-debug-page-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{_n as i,qi as a}from"./index-Dxy9ZCtC.js";var o=n(),s=e(t(),1),c=r(),l=`xopc.extensionUiGrants.v1`;function u(){let e=(0,o.c)(79),{t}=a(),n=i(),[r,l]=(0,s.useState)(p),u;e[0]===n?u=e[1]:(u=n.toSorted(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-D-O1XjAa.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension-debug-page-bgvVs-Sy.js","names":["useMemo","useState","useTranslation","useExtensions","GRANTS_STORAGE_KEY","ExtensionDebugPage","$","_c","t","extensions","grantsRaw","setGrantsRaw","_temp","t0","toSorted","_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.toSorted((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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"}
|
|
1
|
+
{"version":3,"file":"extension-debug-page-D-O1XjAa.js","names":["useMemo","useState","useTranslation","useExtensions","GRANTS_STORAGE_KEY","ExtensionDebugPage","$","_c","t","extensions","grantsRaw","setGrantsRaw","_temp","t0","toSorted","_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.toSorted((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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"}
|