@bazza-ui/react 0.1.0-canary.16 → 0.1.0-canary.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/combobox/index.cjs +1 -1
  2. package/dist/combobox/index.cjs.map +1 -1
  3. package/dist/combobox/index.d.ts +842 -834
  4. package/dist/combobox/index.js +1 -1
  5. package/dist/combobox/index.js.map +1 -1
  6. package/dist/command-menu/index.cjs +1 -1
  7. package/dist/command-menu/index.cjs.map +1 -1
  8. package/dist/command-menu/index.d.ts +123 -96
  9. package/dist/command-menu/index.js +1 -1
  10. package/dist/command-menu/index.js.map +1 -1
  11. package/dist/context-menu/index.cjs +1 -1
  12. package/dist/context-menu/index.cjs.map +1 -1
  13. package/dist/context-menu/index.d.ts +701 -658
  14. package/dist/context-menu/index.js +1 -1
  15. package/dist/context-menu/index.js.map +1 -1
  16. package/dist/dropdown-menu/index.cjs +1 -1
  17. package/dist/dropdown-menu/index.cjs.map +1 -1
  18. package/dist/dropdown-menu/index.d.ts +723 -680
  19. package/dist/dropdown-menu/index.js +1 -1
  20. package/dist/dropdown-menu/index.js.map +1 -1
  21. package/dist/events-DDOsDu4X.d.ts +2091 -0
  22. package/dist/index-Cabqj7qI.d.ts +2003 -0
  23. package/dist/index-D8OrKThQ.d.ts +977 -0
  24. package/dist/internal/listbox/index.cjs +1 -2
  25. package/dist/internal/listbox/index.d.ts +2 -272
  26. package/dist/internal/listbox/index.js +1 -2
  27. package/dist/internal/popup-menu/index.cjs +1 -2
  28. package/dist/internal/popup-menu/index.d.ts +4 -238
  29. package/dist/internal/popup-menu/index.js +1 -2
  30. package/dist/items-CD2hw6-3.js +2 -0
  31. package/dist/items-CD2hw6-3.js.map +1 -0
  32. package/dist/items-DYDljwnt.cjs +2 -0
  33. package/dist/items-DYDljwnt.cjs.map +1 -0
  34. package/dist/{items-B6HeFO_8.d.cts → items-ceX--VIv.d.ts} +21 -19
  35. package/dist/kbd/index.cjs +1 -1
  36. package/dist/kbd/index.cjs.map +1 -1
  37. package/dist/kbd/index.d.ts +35 -35
  38. package/dist/kbd/index.js +1 -1
  39. package/dist/kbd/index.js.map +1 -1
  40. package/dist/listbox-CnwUlLZA.js +2 -0
  41. package/dist/listbox-CnwUlLZA.js.map +1 -0
  42. package/dist/listbox-DYvJTiF6.cjs +2 -0
  43. package/dist/listbox-DYvJTiF6.cjs.map +1 -0
  44. package/dist/loaders/index.cjs +1 -1
  45. package/dist/loaders/index.cjs.map +1 -1
  46. package/dist/loaders/index.d.ts +218 -188
  47. package/dist/loaders/index.js +1 -1
  48. package/dist/loaders/index.js.map +1 -1
  49. package/dist/merge-element-props-0mpNO7ZH.cjs +2 -0
  50. package/dist/merge-element-props-0mpNO7ZH.cjs.map +1 -0
  51. package/dist/merge-element-props-PxUvRHax.js +2 -0
  52. package/dist/merge-element-props-PxUvRHax.js.map +1 -0
  53. package/dist/platform-C-sxBTRa.cjs +2 -0
  54. package/dist/platform-C-sxBTRa.cjs.map +1 -0
  55. package/dist/platform-C4_cGUkS.js +2 -0
  56. package/dist/platform-C4_cGUkS.js.map +1 -0
  57. package/dist/popup-menu-BBAzAXIe.cjs +2 -0
  58. package/dist/popup-menu-BBAzAXIe.cjs.map +1 -0
  59. package/dist/popup-menu-HmBMJEZc.js +2 -0
  60. package/dist/popup-menu-HmBMJEZc.js.map +1 -0
  61. package/dist/resolve-state-props-C-zbhdXd.cjs +2 -0
  62. package/dist/resolve-state-props-C-zbhdXd.cjs.map +1 -0
  63. package/dist/resolve-state-props-D31kizRZ.js +2 -0
  64. package/dist/resolve-state-props-D31kizRZ.js.map +1 -0
  65. package/dist/rolldown-runtime-5lHFv1cW.cjs +1 -0
  66. package/dist/rolldown-runtime-DK3Fl9T5.js +1 -0
  67. package/dist/select/index.cjs +1 -1
  68. package/dist/select/index.cjs.map +1 -1
  69. package/dist/select/index.d.ts +835 -828
  70. package/dist/select/index.js +1 -1
  71. package/dist/select/index.js.map +1 -1
  72. package/dist/suggestion-menu/index.cjs +4 -0
  73. package/dist/suggestion-menu/index.cjs.map +1 -0
  74. package/dist/suggestion-menu/index.d.ts +359 -0
  75. package/dist/suggestion-menu/index.js +4 -0
  76. package/dist/suggestion-menu/index.js.map +1 -0
  77. package/dist/types-BbN28E3_.d.ts +50 -0
  78. package/dist/video-player/index.cjs +2 -2
  79. package/dist/video-player/index.cjs.map +1 -1
  80. package/dist/video-player/index.d.ts +964 -1000
  81. package/dist/video-player/index.js +2 -2
  82. package/dist/video-player/index.js.map +1 -1
  83. package/package.json +14 -5
  84. package/dist/ListboxStore-B8oTpM57.d.cts +0 -453
  85. package/dist/ListboxStore-CV5vPUUc.d.ts +0 -453
  86. package/dist/chunk-3HMQLMSF.js +0 -2
  87. package/dist/chunk-3HMQLMSF.js.map +0 -1
  88. package/dist/chunk-4C666HHU.js +0 -2
  89. package/dist/chunk-4C666HHU.js.map +0 -1
  90. package/dist/chunk-5T5B5SPR.cjs +0 -2
  91. package/dist/chunk-5T5B5SPR.cjs.map +0 -1
  92. package/dist/chunk-A4Z5BY7H.js +0 -2
  93. package/dist/chunk-A4Z5BY7H.js.map +0 -1
  94. package/dist/chunk-IT372NHF.js +0 -2
  95. package/dist/chunk-IT372NHF.js.map +0 -1
  96. package/dist/chunk-JFEVUUPC.cjs +0 -2
  97. package/dist/chunk-JFEVUUPC.cjs.map +0 -1
  98. package/dist/chunk-KO3DXT3Y.js +0 -2
  99. package/dist/chunk-KO3DXT3Y.js.map +0 -1
  100. package/dist/chunk-LXXK4S4Q.js +0 -2
  101. package/dist/chunk-LXXK4S4Q.js.map +0 -1
  102. package/dist/chunk-M4G6J7DP.cjs +0 -2
  103. package/dist/chunk-M4G6J7DP.cjs.map +0 -1
  104. package/dist/chunk-MPPIEWSL.js +0 -2
  105. package/dist/chunk-MPPIEWSL.js.map +0 -1
  106. package/dist/chunk-PCNHYMD6.cjs +0 -2
  107. package/dist/chunk-PCNHYMD6.cjs.map +0 -1
  108. package/dist/chunk-RTG6U56O.cjs +0 -2
  109. package/dist/chunk-RTG6U56O.cjs.map +0 -1
  110. package/dist/chunk-SCDHQZFI.cjs +0 -2
  111. package/dist/chunk-SCDHQZFI.cjs.map +0 -1
  112. package/dist/chunk-XMZZ62VJ.cjs +0 -2
  113. package/dist/chunk-XMZZ62VJ.cjs.map +0 -1
  114. package/dist/combobox/index.d.cts +0 -1066
  115. package/dist/command-menu/index.d.cts +0 -154
  116. package/dist/command-score-CTJ9NV6n.d.cts +0 -23
  117. package/dist/command-score-CTJ9NV6n.d.ts +0 -23
  118. package/dist/context-menu/index.d.cts +0 -696
  119. package/dist/dropdown-menu/index.d.cts +0 -723
  120. package/dist/events-BTHQ2OoH.d.ts +0 -1860
  121. package/dist/events-DVcrtGe3.d.cts +0 -1860
  122. package/dist/input-C95v6jB0.d.cts +0 -46
  123. package/dist/input-CYweYB_i.d.ts +0 -46
  124. package/dist/internal/listbox/index.cjs.map +0 -1
  125. package/dist/internal/listbox/index.d.cts +0 -272
  126. package/dist/internal/listbox/index.js.map +0 -1
  127. package/dist/internal/popup-menu/index.cjs.map +0 -1
  128. package/dist/internal/popup-menu/index.d.cts +0 -238
  129. package/dist/internal/popup-menu/index.js.map +0 -1
  130. package/dist/items-B6HeFO_8.d.ts +0 -37
  131. package/dist/kbd/index.d.cts +0 -61
  132. package/dist/loaders/index.d.cts +0 -363
  133. package/dist/loading-C6WZGUc3.d.cts +0 -29
  134. package/dist/loading-CC4n55sR.d.ts +0 -29
  135. package/dist/resolve-B-j0eW24.d.cts +0 -406
  136. package/dist/resolve-B1F-a3P1.d.ts +0 -406
  137. package/dist/scroll-arrow-BBoKckL_.d.cts +0 -544
  138. package/dist/scroll-arrow-fl3B5sVO.d.ts +0 -544
  139. package/dist/select/index.d.cts +0 -1005
  140. package/dist/separator-Dn15rte3.d.ts +0 -275
  141. package/dist/separator-NjsBVzek.d.cts +0 -275
  142. package/dist/surface-context-CGLDpMej.d.ts +0 -14
  143. package/dist/surface-context-CN4Lb_6F.d.cts +0 -14
  144. package/dist/type-guards-BHHzjRvZ.d.cts +0 -351
  145. package/dist/type-guards-C0e_GpeY.d.ts +0 -351
  146. package/dist/types-DT4FOOa2.d.cts +0 -51
  147. package/dist/types-DT4FOOa2.d.ts +0 -51
  148. package/dist/use-listbox-item-NzZuY34-.d.cts +0 -212
  149. package/dist/use-listbox-item-NzZuY34-.d.ts +0 -212
  150. package/dist/video-player/index.d.cts +0 -1391
@@ -0,0 +1 @@
1
+ {"version":3,"file":"items-CD2hw6-3.js","names":["defaultItemEquality","item","value","compareItemEquality","comparer","itemIncludes","collection","removeItem","entryKey","resolveItemFromItems","items","entry","i","valueKey","label","resolveLabelFromItems","mergeKeywords","additions","extra","k","keywords","merged","keyword"],"sources":["../src/utils/item-equality.ts","../src/utils/items.ts"],"sourcesContent":["/**\n * Type for custom item equality comparison functions.\n * Used to compare object values in Select and Combobox components.\n */\nexport type ItemEqualityComparer<Value = unknown> = (\n itemValue: Value,\n value: Value,\n) => boolean\n\n/**\n * Default equality comparer using Object.is.\n * Handles primitives and object reference equality.\n */\nexport const defaultItemEquality: ItemEqualityComparer = (item, value) =>\n Object.is(item, value)\n\n/**\n * Compare two items for equality using a custom comparer.\n * Handles null/undefined values separately using Object.is.\n */\nexport function compareItemEquality<Value>(\n item: Value | null | undefined,\n value: Value | null | undefined,\n comparer: ItemEqualityComparer<Value>,\n): boolean {\n // Handle null/undefined with Object.is for consistent behavior\n if (item == null || value == null) {\n return Object.is(item, value)\n }\n return comparer(item, value)\n}\n\n/**\n * Check if a collection includes a specific value using custom equality.\n */\nexport function itemIncludes<Value>(\n collection: readonly Value[] | undefined | null,\n value: Value | null | undefined,\n comparer: ItemEqualityComparer<Value>,\n): boolean {\n if (!collection || collection.length === 0) {\n return false\n }\n return collection.some((item) => {\n if (item === undefined) {\n return false\n }\n return compareItemEquality(item, value, comparer)\n })\n}\n\n/**\n * Remove a value from a collection using custom equality.\n * Returns a new array without the matching item.\n */\nexport function removeItem<Value>(\n collection: readonly Value[],\n value: Value,\n comparer: ItemEqualityComparer<Value>,\n): Value[] {\n return collection.filter(\n (item) => !compareItemEquality(item, value, comparer),\n )\n}\n","import type * as React from 'react'\n\n/**\n * A single entry in the array form of the `items` prop passed to\n * `Select.Root` / `Combobox.Root`.\n */\nexport interface ItemsEntry {\n /**\n * The item's value.\n *\n * Use `null` to describe a clearable/placeholder item (its label is used as\n * the trigger placeholder and selecting it clears the value).\n */\n value: string | null\n /** The label to display for this item. */\n label: React.ReactNode\n /**\n * Additional keywords to match against when filtering, on top of the label.\n * Useful for aliases or synonyms.\n */\n keywords?: string[]\n}\n\n/**\n * Data structure describing the items rendered in a Select/Combobox popup.\n *\n * Either a record mapping a value to its label, or an array of entries. Only\n * the array form can express `keywords` or a `null` (clearable) value.\n */\nexport type Items = Record<string, React.ReactNode> | Array<ItemsEntry>\n\n/**\n * The resolved metadata for a single item looked up from the `items` prop.\n */\nexport interface ResolvedItem {\n label: React.ReactNode\n keywords?: string[]\n}\n\n/** Serialize an entry value to the string key used for registry lookups. */\nfunction entryKey(value: string | null): string {\n return value == null ? '' : value\n}\n\n/**\n * Resolve the full entry (label + keywords) from the `items` prop for a given\n * serialized value key. Returns `undefined` when there is no match.\n */\nexport function resolveItemFromItems(\n items: Items | undefined,\n valueKey: string,\n): ResolvedItem | undefined {\n if (!items) return undefined\n\n if (Array.isArray(items)) {\n const entry = items.find((i) => entryKey(i.value) === valueKey)\n if (!entry) return undefined\n return { label: entry.label, keywords: entry.keywords }\n }\n\n const label = items[valueKey]\n if (label === undefined) return undefined\n return { label }\n}\n\n/**\n * Resolve just the label from the `items` prop for a given serialized value\n * key. Returns `undefined` when there is no match.\n */\nexport function resolveLabelFromItems(\n items: Items | undefined,\n valueKey: string,\n): React.ReactNode | undefined {\n return resolveItemFromItems(items, valueKey)?.label\n}\n\n/**\n * Merge a set of extra keyword strings into an existing keywords array,\n * preserving order and removing duplicates. Returns the original `keywords`\n * reference untouched when there is nothing to add.\n */\nexport function mergeKeywords(\n keywords: string[] | undefined,\n extra: Array<string | undefined>,\n): string[] | undefined {\n const additions = extra.filter((k): k is string => Boolean(k))\n if (additions.length === 0) return keywords\n\n const merged = keywords ? [...keywords] : []\n for (const keyword of additions) {\n if (!merged.includes(keyword)) merged.push(keyword)\n }\n return merged\n}\n"],"mappings":"AAaA,MAAaA,GAA6C,EAAM,IAC9D,OAAO,GAAGC,EAAMC,CAAK,EAMvB,SAAgBC,EACd,EACA,EACA,EACS,CAKT,OAHIF,GAAQ,MAAQC,GAAS,KACpB,OAAO,GAAGD,EAAMC,CAAK,EAEvBE,EAASH,EAAMC,CAAK,CAC7B,CAKA,SAAgBG,EACd,EACA,EACA,EACS,CAIT,MAHI,CAACC,GAAcA,EAAW,SAAW,EAChC,GAEFA,EAAW,KAAM,GAClBL,IAAS,IAAA,IAGNE,EAAoBF,EAAMC,EAAOE,CAAQ,CACjD,CACH,CAMA,SAAgBG,EACd,EACA,EACA,EACS,CACT,OAAOD,EAAW,OACf,GAAS,CAACH,EAAoBF,EAAMC,EAAOE,CAAQ,CACtD,CACF,CCvBA,SAASI,EAAS,EAA8B,CAC9C,OAAON,GAAgB,EACzB,CAMA,SAAgBO,EACd,EACA,EAC0B,CAC1B,GAAI,CAACC,EAAO,OAEZ,GAAI,MAAM,QAAQA,CAAK,EAAG,CACxB,IAAMC,EAAQD,EAAM,KAAM,GAAMF,EAASI,EAAE,KAAK,IAAMC,CAAQ,EAE9D,OADKF,EACE,CAAE,MAAOA,EAAM,MAAO,SAAUA,EAAM,QAAS,EAD1C,MAEd,CAEA,IAAMG,EAAQJ,EAAMG,GACpB,GAAIC,IAAU,IAAA,GACd,MAAO,CAAE,OAAM,CACjB,CAMA,SAAgBC,EACd,EACA,EAC6B,CAC7B,OAAON,EAAqBC,EAAOG,CAAQ,CAAC,EAAE,KAChD,CAOA,SAAgBG,EACd,EACA,EACsB,CACtB,IAAMC,EAAYC,EAAM,OAAQ,GAAmB,EAAQC,CAAE,EAC7D,GAAIF,EAAU,SAAW,EAAG,OAAOG,EAEnC,IAAMC,EAASD,EAAW,CAAC,GAAGA,CAAQ,EAAI,CAAC,EAC3C,IAAK,IAAME,KAAWL,EACfI,EAAO,SAASC,CAAO,GAAGD,EAAO,KAAKC,CAAO,EAEpD,OAAOD,CACT"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=(e,t)=>Object.is(e,t);function t(e,t,n){return e==null||t==null?Object.is(e,t):n(e,t)}function n(e,n,r){return!e||e.length===0?!1:e.some(e=>e!==void 0&&t(e,n,r))}function r(e,n,r){return e.filter(e=>!t(e,n,r))}function i(e){return e??``}function a(e,t){if(!e)return;if(Array.isArray(e)){let n=e.find(e=>i(e.value)===t);return n?{label:n.label,keywords:n.keywords}:void 0}let n=e[t];if(n!==void 0)return{label:n}}function o(e,t){return a(e,t)?.label}function s(e,t){let n=t.filter(e=>!!e);if(n.length===0)return e;let r=e?[...e]:[];for(let e of n)r.includes(e)||r.push(e);return r}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
2
+ //# sourceMappingURL=items-DYDljwnt.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"items-DYDljwnt.cjs","names":["defaultItemEquality","item","value","compareItemEquality","comparer","itemIncludes","collection","removeItem","entryKey","resolveItemFromItems","items","entry","i","valueKey","label","resolveLabelFromItems","mergeKeywords","additions","extra","k","keywords","merged","keyword"],"sources":["../src/utils/item-equality.ts","../src/utils/items.ts"],"sourcesContent":["/**\n * Type for custom item equality comparison functions.\n * Used to compare object values in Select and Combobox components.\n */\nexport type ItemEqualityComparer<Value = unknown> = (\n itemValue: Value,\n value: Value,\n) => boolean\n\n/**\n * Default equality comparer using Object.is.\n * Handles primitives and object reference equality.\n */\nexport const defaultItemEquality: ItemEqualityComparer = (item, value) =>\n Object.is(item, value)\n\n/**\n * Compare two items for equality using a custom comparer.\n * Handles null/undefined values separately using Object.is.\n */\nexport function compareItemEquality<Value>(\n item: Value | null | undefined,\n value: Value | null | undefined,\n comparer: ItemEqualityComparer<Value>,\n): boolean {\n // Handle null/undefined with Object.is for consistent behavior\n if (item == null || value == null) {\n return Object.is(item, value)\n }\n return comparer(item, value)\n}\n\n/**\n * Check if a collection includes a specific value using custom equality.\n */\nexport function itemIncludes<Value>(\n collection: readonly Value[] | undefined | null,\n value: Value | null | undefined,\n comparer: ItemEqualityComparer<Value>,\n): boolean {\n if (!collection || collection.length === 0) {\n return false\n }\n return collection.some((item) => {\n if (item === undefined) {\n return false\n }\n return compareItemEquality(item, value, comparer)\n })\n}\n\n/**\n * Remove a value from a collection using custom equality.\n * Returns a new array without the matching item.\n */\nexport function removeItem<Value>(\n collection: readonly Value[],\n value: Value,\n comparer: ItemEqualityComparer<Value>,\n): Value[] {\n return collection.filter(\n (item) => !compareItemEquality(item, value, comparer),\n )\n}\n","import type * as React from 'react'\n\n/**\n * A single entry in the array form of the `items` prop passed to\n * `Select.Root` / `Combobox.Root`.\n */\nexport interface ItemsEntry {\n /**\n * The item's value.\n *\n * Use `null` to describe a clearable/placeholder item (its label is used as\n * the trigger placeholder and selecting it clears the value).\n */\n value: string | null\n /** The label to display for this item. */\n label: React.ReactNode\n /**\n * Additional keywords to match against when filtering, on top of the label.\n * Useful for aliases or synonyms.\n */\n keywords?: string[]\n}\n\n/**\n * Data structure describing the items rendered in a Select/Combobox popup.\n *\n * Either a record mapping a value to its label, or an array of entries. Only\n * the array form can express `keywords` or a `null` (clearable) value.\n */\nexport type Items = Record<string, React.ReactNode> | Array<ItemsEntry>\n\n/**\n * The resolved metadata for a single item looked up from the `items` prop.\n */\nexport interface ResolvedItem {\n label: React.ReactNode\n keywords?: string[]\n}\n\n/** Serialize an entry value to the string key used for registry lookups. */\nfunction entryKey(value: string | null): string {\n return value == null ? '' : value\n}\n\n/**\n * Resolve the full entry (label + keywords) from the `items` prop for a given\n * serialized value key. Returns `undefined` when there is no match.\n */\nexport function resolveItemFromItems(\n items: Items | undefined,\n valueKey: string,\n): ResolvedItem | undefined {\n if (!items) return undefined\n\n if (Array.isArray(items)) {\n const entry = items.find((i) => entryKey(i.value) === valueKey)\n if (!entry) return undefined\n return { label: entry.label, keywords: entry.keywords }\n }\n\n const label = items[valueKey]\n if (label === undefined) return undefined\n return { label }\n}\n\n/**\n * Resolve just the label from the `items` prop for a given serialized value\n * key. Returns `undefined` when there is no match.\n */\nexport function resolveLabelFromItems(\n items: Items | undefined,\n valueKey: string,\n): React.ReactNode | undefined {\n return resolveItemFromItems(items, valueKey)?.label\n}\n\n/**\n * Merge a set of extra keyword strings into an existing keywords array,\n * preserving order and removing duplicates. Returns the original `keywords`\n * reference untouched when there is nothing to add.\n */\nexport function mergeKeywords(\n keywords: string[] | undefined,\n extra: Array<string | undefined>,\n): string[] | undefined {\n const additions = extra.filter((k): k is string => Boolean(k))\n if (additions.length === 0) return keywords\n\n const merged = keywords ? [...keywords] : []\n for (const keyword of additions) {\n if (!merged.includes(keyword)) merged.push(keyword)\n }\n return merged\n}\n"],"mappings":"aAaA,MAAaA,GAA6C,EAAM,IAC9D,OAAO,GAAGC,EAAMC,CAAK,EAMvB,SAAgBC,EACd,EACA,EACA,EACS,CAKT,OAHIF,GAAQ,MAAQC,GAAS,KACpB,OAAO,GAAGD,EAAMC,CAAK,EAEvBE,EAASH,EAAMC,CAAK,CAC7B,CAKA,SAAgBG,EACd,EACA,EACA,EACS,CAIT,MAHI,CAACC,GAAcA,EAAW,SAAW,EAChC,GAEFA,EAAW,KAAM,GAClBL,IAAS,IAAA,IAGNE,EAAoBF,EAAMC,EAAOE,CAAQ,CACjD,CACH,CAMA,SAAgBG,EACd,EACA,EACA,EACS,CACT,OAAOD,EAAW,OACf,GAAS,CAACH,EAAoBF,EAAMC,EAAOE,CAAQ,CACtD,CACF,CCvBA,SAASI,EAAS,EAA8B,CAC9C,OAAON,GAAgB,EACzB,CAMA,SAAgBO,EACd,EACA,EAC0B,CAC1B,GAAI,CAACC,EAAO,OAEZ,GAAI,MAAM,QAAQA,CAAK,EAAG,CACxB,IAAMC,EAAQD,EAAM,KAAM,GAAMF,EAASI,EAAE,KAAK,IAAMC,CAAQ,EAE9D,OADKF,EACE,CAAE,MAAOA,EAAM,MAAO,SAAUA,EAAM,QAAS,EAD1C,MAEd,CAEA,IAAMG,EAAQJ,EAAMG,GACpB,GAAIC,IAAU,IAAA,GACd,MAAO,CAAE,OAAM,CACjB,CAMA,SAAgBC,EACd,EACA,EAC6B,CAC7B,OAAON,EAAqBC,EAAOG,CAAQ,CAAC,EAAE,KAChD,CAOA,SAAgBG,EACd,EACA,EACsB,CACtB,IAAMC,EAAYC,EAAM,OAAQ,GAAmB,EAAQC,CAAE,EAC7D,GAAIF,EAAU,SAAW,EAAG,OAAOG,EAEnC,IAAMC,EAASD,EAAW,CAAC,GAAGA,CAAQ,EAAI,CAAC,EAC3C,IAAK,IAAME,KAAWL,EACfI,EAAO,SAASC,CAAO,GAAGD,EAAO,KAAKC,CAAO,EAEpD,OAAOD,CACT"}
@@ -1,30 +1,31 @@
1
- import * as React from 'react';
2
-
1
+ import * as React from "react";
2
+ //#region src/utils/item-equality.d.ts
3
3
  /**
4
4
  * Type for custom item equality comparison functions.
5
5
  * Used to compare object values in Select and Combobox components.
6
6
  */
7
7
  type ItemEqualityComparer<Value = unknown> = (itemValue: Value, value: Value) => boolean;
8
-
8
+ //#endregion
9
+ //#region src/utils/items.d.ts
9
10
  /**
10
11
  * A single entry in the array form of the `items` prop passed to
11
12
  * `Select.Root` / `Combobox.Root`.
12
13
  */
13
14
  interface ItemsEntry {
14
- /**
15
- * The item's value.
16
- *
17
- * Use `null` to describe a clearable/placeholder item (its label is used as
18
- * the trigger placeholder and selecting it clears the value).
19
- */
20
- value: string | null;
21
- /** The label to display for this item. */
22
- label: React.ReactNode;
23
- /**
24
- * Additional keywords to match against when filtering, on top of the label.
25
- * Useful for aliases or synonyms.
26
- */
27
- keywords?: string[];
15
+ /**
16
+ * The item's value.
17
+ *
18
+ * Use `null` to describe a clearable/placeholder item (its label is used as
19
+ * the trigger placeholder and selecting it clears the value).
20
+ */
21
+ value: string | null;
22
+ /** The label to display for this item. */
23
+ label: React.ReactNode;
24
+ /**
25
+ * Additional keywords to match against when filtering, on top of the label.
26
+ * Useful for aliases or synonyms.
27
+ */
28
+ keywords?: string[];
28
29
  }
29
30
  /**
30
31
  * Data structure describing the items rendered in a Select/Combobox popup.
@@ -33,5 +34,6 @@ interface ItemsEntry {
33
34
  * the array form can express `keywords` or a `null` (clearable) value.
34
35
  */
35
36
  type Items = Record<string, React.ReactNode> | Array<ItemsEntry>;
36
-
37
- export type { ItemEqualityComparer as I, Items as a };
37
+ //#endregion
38
+ export { ItemEqualityComparer as n, Items as t };
39
+ //# sourceMappingURL=items-ceX--VIv.d.ts.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _chunkJFEVUUPCcjs = require('../chunk-JFEVUUPC.cjs');var _chunkPCNHYMD6cjs = require('../chunk-PCNHYMD6.cjs');var _chunkM4G6J7DPcjs = require('../chunk-M4G6J7DP.cjs');var $={};_chunkM4G6J7DPcjs.a.call(void 0, $,{Key:()=>m,Root:()=>L});var _userender = require('@base-ui/react/use-render');var _react = require('react'); var d = _interopRequireWildcard(_react); var t = _interopRequireWildcard(_react);var m=d.forwardRef(function(c,f){let{label:r,children:i,render:s,className:K,style:b,...y}=c,o=d.useMemo(()=>({}),[]),e=_nullishCoalesce(i, () => (r));return _userender.useRender.call(void 0, {render:s,ref:f,state:o,props:{...y,"data-kbd-key":"",className:_chunkPCNHYMD6cjs.a.call(void 0, K,o),style:_chunkPCNHYMD6cjs.b.call(void 0, b,o),children:e},defaultTagName:"kbd"})});var _jsxruntime = require('react/jsx-runtime');var O={platform:l=>({"data-platform":String(l)})},L=t.forwardRef(function(c,f){let{keys:r,platform:i,separator:s="then",render:K,className:b,style:y,...o}=c,e=_chunkJFEVUUPCcjs.e.call(void 0, i),h=t.useMemo(()=>_chunkJFEVUUPCcjs.a.call(void 0, r),[r]),R=t.useMemo(()=>({platform:e}),[e]),v=t.useMemo(()=>{let n=[],k=new Map;for(let T of h.chords){let S=_chunkJFEVUUPCcjs.c.call(void 0, T,e),u=S.join("+"),C=(_nullishCoalesce(k.get(u), () => (0)))+1;k.set(u,C);let N=`${u}#${C}`;n.length>0&&n.push(_jsxruntime.jsx.call(void 0, "span",{"data-kbd-separator":"",children:s},`${N}-separator`));for(let M of S)n.push(_jsxruntime.jsx.call(void 0, m,{children:M},`${N}-${M}`))}return n},[h,e,s]);return _userender.useRender.call(void 0, {render:K,ref:f,state:R,stateAttributesMapping:O,props:{...o,"data-kbd-root":"",className:_chunkPCNHYMD6cjs.a.call(void 0, b,R),style:_chunkPCNHYMD6cjs.b.call(void 0, y,R),children:v},defaultTagName:"span"})});exports.Kbd = $; exports.getChordLabels = _chunkJFEVUUPCcjs.c; exports.getKeyLabel = _chunkJFEVUUPCcjs.b; exports.isApplePlatform = _chunkJFEVUUPCcjs.d; exports.parseKeybinding = _chunkJFEVUUPCcjs.a; exports.usePlatform = _chunkJFEVUUPCcjs.e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../rolldown-runtime-5lHFv1cW.cjs"),t=require("../resolve-state-props-C-zbhdXd.cjs"),n=require("../platform-C-sxBTRa.cjs");let r=require("react");r=e.n(r,1);let i=require("react/jsx-runtime"),a=require("@base-ui/react/use-render");const o=r.forwardRef(function(e,n){let{label:i,children:o,render:s,className:c,style:l,...u}=e,d=r.useMemo(()=>({}),[]),f=o??i;return(0,a.useRender)({render:s,ref:n,state:d,props:{...u,"data-kbd-key":``,className:t.n(c,d),style:t.r(l,d),children:f},defaultTagName:`kbd`})}),s={platform:e=>({"data-platform":String(e)})},c=r.forwardRef(function(e,c){let{keys:l,platform:u,separator:d=`then`,render:f,className:p,style:m,...h}=e,g=n.n(u),_=r.useMemo(()=>n.a(l),[l]),v=r.useMemo(()=>({platform:g}),[g]),y=r.useMemo(()=>{let e=[],t=/* @__PURE__ */ new Map;for(let r of _.chords){let a=n.r(r,g),s=a.join(`+`),c=(t.get(s)??0)+1;t.set(s,c);let l=`${s}#${c}`;e.length>0&&e.push(/* @__PURE__ */ (0,i.jsx)(`span`,{"data-kbd-separator":``,children:d},`${l}-separator`));for(let t of a)e.push(/* @__PURE__ */ (0,i.jsx)(o,{children:t},`${l}-${t}`))}return e},[_,g,d]);return(0,a.useRender)({render:f,ref:c,state:v,stateAttributesMapping:s,props:{...h,"data-kbd-root":``,className:t.n(p,v),style:t.r(m,v),children:y},defaultTagName:`span`})});var l=/* @__PURE__ */ e.t({Key:()=>o,Root:()=>c});Object.defineProperty(exports,"Kbd",{enumerable:!0,get:function(){return l}}),exports.getChordLabels=n.r,exports.getKeyLabel=n.i,exports.isApplePlatform=n.t,exports.parseKeybinding=n.a,exports.usePlatform=n.n;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/ui/ui/packages/react/dist/kbd/index.cjs","../../src/kbd/index.parts.ts","../../src/kbd/key/key.tsx","../../src/kbd/root/root.tsx"],"names":["index_parts_exports","__export","KbdKey","KbdRoot","props","forwardedRef","label","children","render","className","style","rest","state","renderedChildren","useRender","resolveClassName","resolveStyle","stateAttributesMapping","value","keys","platformProp","separator","platform","usePlatform","keybinding","parseKeybinding","entries","seen","chord","labels","getChordLabels","chordId","occurrence","prefix"],"mappings":"AAAA,wfAAqE,yDAA4C,yDAA0C,ICA3JA,CAAAA,CAAA,CAAA,CAAA,CAAAC,iCAAAA,CAAAD,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAAE,CAAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAAC,CAAAA,CAAAA,CAAAA,CCEA,sDAA0B,gHACH,IAcVD,CAAAA,CAAe,CAAA,CAAA,UAAA,CAC1B,QAAA,CAAgBE,CAAAA,CAAOC,CAAAA,CAAc,CACnC,GAAM,CAAE,KAAA,CAAAC,CAAAA,CAAO,QAAA,CAAAC,CAAAA,CAAU,MAAA,CAAAC,CAAAA,CAAQ,SAAA,CAAAC,CAAAA,CAAW,KAAA,CAAAC,CAAAA,CAAO,GAAGC,CAAK,CAAA,CAAIP,CAAAA,CAEzDQ,CAAAA,CAA4B,CAAA,CAAA,OAAA,CAAQ,CAAA,CAAA,EAAA,CAAO,CAAC,CAAA,CAAA,CAAI,CAAC,CAAC,CAAA,CAClDC,CAAAA,kBAAmBN,CAAAA,SAAYD,GAAAA,CAErC,OAAOQ,kCAAAA,CACL,MAAA,CAAAN,CAAAA,CACA,GAAA,CAAKH,CAAAA,CACL,KAAA,CAAAO,CAAAA,CACA,KAAA,CAAO,CACL,GAAGD,CAAAA,CACF,cAAA,CAA2B,EAAA,CAC5B,SAAA,CAAWI,iCAAAA,CAAiBN,CAAWG,CAAK,CAAA,CAC5C,KAAA,CAAOI,iCAAAA,CAAaN,CAAOE,CAAK,CAAA,CAChC,QAAA,CAAUC,CACZ,CAAA,CACA,cAAA,CAAgB,KAClB,CAAC,CACH,CACF,CAAA,CCpCA,+CAgEY,IAvCNI,CAAAA,CAAyB,CAC7B,QAAA,CAAWC,CAAAA,EAAAA,CAAmD,CAC3D,eAAA,CAAiC,MAAA,CAAOA,CAAK,CAChD,CAAA,CACF,CAAA,CAEaf,CAAAA,CAAgB,CAAA,CAAA,UAAA,CAC3B,QAAA,CAAiBC,CAAAA,CAAOC,CAAAA,CAAc,CACpC,GAAM,CACJ,IAAA,CAAAc,CAAAA,CACA,QAAA,CAAUC,CAAAA,CACV,SAAA,CAAAC,CAAAA,CAAY,MAAA,CACZ,MAAA,CAAAb,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CAAIP,CAAAA,CAEEkB,CAAAA,CAAWC,iCAAAA,CAAwB,CAAA,CACnCC,CAAAA,CAAmB,CAAA,CAAA,OAAA,CAAQ,CAAA,CAAA,EAAMC,iCAAAA,CAAoB,CAAA,CAAG,CAACN,CAAI,CAAC,CAAA,CAE9DP,CAAAA,CAA6B,CAAA,CAAA,OAAA,CAAQ,CAAA,CAAA,EAAA,CAAO,CAAE,QAAA,CAAAU,CAAS,CAAA,CAAA,CAAI,CAACA,CAAQ,CAAC,CAAA,CAErET,CAAAA,CAAyB,CAAA,CAAA,OAAA,CAAQ,CAAA,CAAA,EAAM,CAC3C,IAAMa,CAAAA,CAA6B,CAAC,CAAA,CAI9BC,CAAAA,CAAO,IAAI,GAAA,CAEjB,GAAA,CAAA,IAAWC,EAAAA,GAASJ,CAAAA,CAAW,MAAA,CAAQ,CACrC,IAAMK,CAAAA,CAASC,iCAAAA,CAAeF,CAAON,CAAQ,CAAA,CACvCS,CAAAA,CAAUF,CAAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CACzBG,CAAAA,CAAAA,kBAAcL,CAAAA,CAAK,GAAA,CAAII,CAAO,CAAA,SAAK,GAAA,CAAA,CAAK,CAAA,CAC9CJ,CAAAA,CAAK,GAAA,CAAII,CAAAA,CAASC,CAAU,CAAA,CAC5B,IAAMC,CAAAA,CAAS,CAAA,EAAA","file":"/home/runner/work/ui/ui/packages/react/dist/kbd/index.cjs","sourcesContent":[null,"export { KbdKey as Key } from './key/key.js'\nexport { KbdRoot as Root } from './root/root.js'\n","'use client'\n\nimport { useRender } from '@base-ui/react/use-render'\nimport * as React from 'react'\nimport {\n resolveClassName,\n resolveStyle,\n} from '../../utils/resolve-state-props.js'\nimport type { ComponentProps } from '../../utils/types.js'\nimport { KbdKeyDataAttributes } from './key.data-attrs.js'\n\nexport interface KbdKeyState extends Record<string, unknown> {}\n\nexport interface KbdKeyProps extends ComponentProps<'kbd', KbdKey.State> {\n label?: string\n}\n\nexport const KbdKey = React.forwardRef<HTMLElement, KbdKey.Props>(\n function KbdKey(props, forwardedRef) {\n const { label, children, render, className, style, ...rest } = props\n\n const state: KbdKey.State = React.useMemo(() => ({}), [])\n const renderedChildren = children ?? label\n\n return useRender({\n render,\n ref: forwardedRef,\n state,\n props: {\n ...rest,\n [KbdKeyDataAttributes.key]: '',\n className: resolveClassName(className, state),\n style: resolveStyle(style, state),\n children: renderedChildren,\n },\n defaultTagName: 'kbd',\n })\n },\n)\n\nexport namespace KbdKey {\n export type State = KbdKeyState\n export interface Props extends KbdKeyProps {}\n}\n","'use client'\n\nimport { useRender } from '@base-ui/react/use-render'\nimport * as React from 'react'\nimport {\n resolveClassName,\n resolveStyle,\n} from '../../utils/resolve-state-props.js'\nimport type { ComponentProps } from '../../utils/types.js'\nimport { KbdKey } from '../key/key.js'\nimport { getChordLabels, parseKeybinding } from '../utils/parse-keybinding.js'\nimport { usePlatform } from '../utils/platform.js'\nimport { KbdRootDataAttributes } from './root.data-attrs.js'\n\ntype Platform = 'apple' | 'other'\n\nexport interface KbdRootState extends Record<string, unknown> {\n platform: Platform\n}\n\nexport interface KbdRootProps\n extends Omit<ComponentProps<'span', KbdRoot.State>, 'children'> {\n keys: string\n platform?: Platform\n separator?: React.ReactNode\n}\n\nconst stateAttributesMapping = {\n platform: (value: unknown): Record<string, string> | null => ({\n [KbdRootDataAttributes.platform]: String(value),\n }),\n}\n\nexport const KbdRoot = React.forwardRef<HTMLSpanElement, KbdRoot.Props>(\n function KbdRoot(props, forwardedRef) {\n const {\n keys,\n platform: platformProp,\n separator = 'then',\n render,\n className,\n style,\n ...rest\n } = props\n\n const platform = usePlatform(platformProp)\n const keybinding = React.useMemo(() => parseKeybinding(keys), [keys])\n\n const state: KbdRoot.State = React.useMemo(() => ({ platform }), [platform])\n\n const renderedChildren = React.useMemo(() => {\n const entries: React.ReactNode[] = []\n // Content-derived keys: chords are fully derived from the `keys` string,\n // so a chord's joined labels (disambiguated by occurrence count for\n // repeated chords like \"g g\") form a stable identity.\n const seen = new Map<string, number>()\n\n for (const chord of keybinding.chords) {\n const labels = getChordLabels(chord, platform)\n const chordId = labels.join('+')\n const occurrence = (seen.get(chordId) ?? 0) + 1\n seen.set(chordId, occurrence)\n const prefix = `${chordId}#${occurrence}`\n\n if (entries.length > 0) {\n entries.push(\n <span key={`${prefix}-separator`} data-kbd-separator=\"\">\n {separator}\n </span>,\n )\n }\n for (const label of labels) {\n entries.push(<KbdKey key={`${prefix}-${label}`}>{label}</KbdKey>)\n }\n }\n\n return entries\n }, [keybinding, platform, separator])\n\n return useRender({\n render,\n ref: forwardedRef,\n state,\n stateAttributesMapping,\n props: {\n ...rest,\n [KbdRootDataAttributes.root]: '',\n className: resolveClassName(className, state),\n style: resolveStyle(style, state),\n children: renderedChildren,\n },\n defaultTagName: 'span',\n })\n },\n)\n\nexport namespace KbdRoot {\n export type State = KbdRootState\n export interface Props extends KbdRootProps {}\n}\n"]}
1
+ {"version":3,"file":"index.cjs","names":["React","useRender","resolveClassName","resolveStyle","React","usePlatform","parseKeybinding","getChordLabels","useRender","resolveClassName","resolveStyle","require_rolldown_runtime","require_resolve_state_props","require_platform","react","react_jsx_runtime","_base_ui_react_use_render","KbdKey","rest","props","state","renderedChildren","children","label","forwardedRef","className","style","stateAttributesMapping","value","KbdRoot","platformProp","platform","keybinding","keys","entries","seen","chord","labels","chordId","occurrence","prefix","separator","index_parts_exports"],"sources":["../../src/kbd/key/key.tsx","../../src/kbd/root/root.tsx","../../src/kbd/index.parts.ts"],"sourcesContent":["'use client'\n\nimport { useRender } from '@base-ui/react/use-render'\nimport * as React from 'react'\nimport {\n resolveClassName,\n resolveStyle,\n} from '../../utils/resolve-state-props.js'\nimport type { ComponentProps } from '../../utils/types.js'\nimport { KbdKeyDataAttributes } from './key.data-attrs.js'\n\nexport interface KbdKeyState extends Record<string, unknown> {}\n\nexport interface KbdKeyProps extends ComponentProps<'kbd', KbdKey.State> {\n label?: string\n}\n\nexport const KbdKey = React.forwardRef<HTMLElement, KbdKey.Props>(\n function KbdKey(props, forwardedRef) {\n const { label, children, render, className, style, ...rest } = props\n\n const state: KbdKey.State = React.useMemo(() => ({}), [])\n const renderedChildren = children ?? label\n\n return useRender({\n render,\n ref: forwardedRef,\n state,\n props: {\n ...rest,\n [KbdKeyDataAttributes.key]: '',\n className: resolveClassName(className, state),\n style: resolveStyle(style, state),\n children: renderedChildren,\n },\n defaultTagName: 'kbd',\n })\n },\n)\n\nexport namespace KbdKey {\n export type State = KbdKeyState\n export interface Props extends KbdKeyProps {}\n}\n","'use client'\n\nimport { useRender } from '@base-ui/react/use-render'\nimport * as React from 'react'\nimport {\n resolveClassName,\n resolveStyle,\n} from '../../utils/resolve-state-props.js'\nimport type { ComponentProps } from '../../utils/types.js'\nimport { KbdKey } from '../key/key.js'\nimport { getChordLabels, parseKeybinding } from '../utils/parse-keybinding.js'\nimport { usePlatform } from '../utils/platform.js'\nimport { KbdRootDataAttributes } from './root.data-attrs.js'\n\ntype Platform = 'apple' | 'other'\n\nexport interface KbdRootState extends Record<string, unknown> {\n platform: Platform\n}\n\nexport interface KbdRootProps\n extends Omit<ComponentProps<'span', KbdRoot.State>, 'children'> {\n keys: string\n platform?: Platform\n separator?: React.ReactNode\n}\n\nconst stateAttributesMapping = {\n platform: (value: unknown): Record<string, string> | null => ({\n [KbdRootDataAttributes.platform]: String(value),\n }),\n}\n\nexport const KbdRoot = React.forwardRef<HTMLSpanElement, KbdRoot.Props>(\n function KbdRoot(props, forwardedRef) {\n const {\n keys,\n platform: platformProp,\n separator = 'then',\n render,\n className,\n style,\n ...rest\n } = props\n\n const platform = usePlatform(platformProp)\n const keybinding = React.useMemo(() => parseKeybinding(keys), [keys])\n\n const state: KbdRoot.State = React.useMemo(() => ({ platform }), [platform])\n\n const renderedChildren = React.useMemo(() => {\n const entries: React.ReactNode[] = []\n // Content-derived keys: chords are fully derived from the `keys` string,\n // so a chord's joined labels (disambiguated by occurrence count for\n // repeated chords like \"g g\") form a stable identity.\n const seen = new Map<string, number>()\n\n for (const chord of keybinding.chords) {\n const labels = getChordLabels(chord, platform)\n const chordId = labels.join('+')\n const occurrence = (seen.get(chordId) ?? 0) + 1\n seen.set(chordId, occurrence)\n const prefix = `${chordId}#${occurrence}`\n\n if (entries.length > 0) {\n entries.push(\n <span key={`${prefix}-separator`} data-kbd-separator=\"\">\n {separator}\n </span>,\n )\n }\n for (const label of labels) {\n entries.push(<KbdKey key={`${prefix}-${label}`}>{label}</KbdKey>)\n }\n }\n\n return entries\n }, [keybinding, platform, separator])\n\n return useRender({\n render,\n ref: forwardedRef,\n state,\n stateAttributesMapping,\n props: {\n ...rest,\n [KbdRootDataAttributes.root]: '',\n className: resolveClassName(className, state),\n style: resolveStyle(style, state),\n children: renderedChildren,\n },\n defaultTagName: 'span',\n })\n },\n)\n\nexport namespace KbdRoot {\n export type State = KbdRootState\n export interface Props extends KbdRootProps {}\n}\n","export { KbdKey as Key } from './key/key.js'\nexport { KbdRoot as Root } from './root/root.js'\n"],"mappings":"mWAiBA,MAAaiB,EAASjB,EAAM,WAC1B,SAAgB,EAAO,EAAc,CACnC,GAAM,CAAE,QAAO,WAAU,SAAQ,YAAW,QAAO,GAAGkB,GAASC,EAEzDC,EAAsBpB,EAAM,aAAe,CAAC,GAAI,CAAC,CAAC,EAClDqB,EAAmBC,GAAYC,EAErC,OAAA,EAAOtB,EAAAA,UAAAA,CAAU,CACf,SACA,IAAKuB,EACL,QACA,MAAO,CACL,GAAGN,EACyB,eAAA,GAC5B,UAAWhB,EAAAA,EAAiBuB,EAAWL,CAAK,EAC5C,MAAOjB,EAAAA,EAAauB,EAAON,CAAK,EAChC,SAAUC,CACZ,EACA,eAAgB,KAClB,CAAC,CACH,CACF,ECXMM,EAAyB,CAC7B,SAAW,IAAmD,CAAA,gBAC1B,OAAOC,CAAK,CAChD,EACF,EAEaC,EAAUzB,EAAM,WAC3B,SAAiB,EAAO,EAAc,CACpC,GAAM,CACJ,OACA,SAAU0B,EACV,YAAY,OACZ,SACA,YACA,QACA,GAAGZ,GACDC,EAEEY,EAAW1B,EAAAA,EAAYyB,CAAY,EACnCE,EAAa5B,EAAM,YAAcE,EAAAA,EAAgB2B,CAAI,EAAG,CAACA,CAAI,CAAC,EAE9Db,EAAuBhB,EAAM,aAAe,CAAE,UAAS,GAAI,CAAC2B,CAAQ,CAAC,EAErEV,EAAmBjB,EAAM,YAAc,CAC3C,IAAM8B,EAA6B,CAAC,EAI9BC,kBAAO,IAAI,IAEjB,IAAK,IAAMC,KAASJ,EAAW,OAAQ,CACrC,IAAMK,EAAS9B,EAAAA,EAAe6B,EAAOL,CAAQ,EACvCO,EAAUD,EAAO,KAAK,GAAG,EACzBE,GAAcJ,EAAK,IAAIG,CAAO,GAAK,GAAK,EAC9CH,EAAK,IAAIG,EAASC,CAAU,EAC5B,IAAMC,EAAS,GAAGF,EAAQ,GAAGC,IAEzBL,EAAQ,OAAS,GACnBA,EAAQ,KACN,iBAAA,EAAAnB,EAAA,IAAA,CAAC,OAAD,CAAkC,qBAAmB,GAClD,SAAA0B,CACG,EAFK,GAAGD,EAAO,WAEf,CACR,EAEF,IAAK,IAAMjB,KAASc,EAClBH,EAAQ,KAAK,iBAAA,EAAAnB,EAAA,IAAA,CAACE,EAAD,CAAA,SAAoCM,CAAc,EAArC,GAAGiB,EAAO,GAAGjB,GAAwB,CAAC,CAEpE,CAEA,OAAOW,CACT,EAAG,CAACF,EAAYD,EAAUU,CAAS,CAAC,EAEpC,OAAA,EAAOjC,EAAAA,UAAAA,CAAU,CACf,SACA,IAAKgB,EACL,QACA,yBACA,MAAO,CACL,GAAGN,EAC2B,gBAAA,GAC9B,UAAWT,EAAAA,EAAiBgB,EAAWL,CAAK,EAC5C,MAAOV,EAAAA,EAAagB,EAAON,CAAK,EAChC,SAAUC,CACZ,EACA,eAAgB,MAClB,CAAC,CACH,CACF"}
@@ -1,61 +1,61 @@
1
- import * as React from 'react';
2
- import { C as ComponentProps } from '../types-DT4FOOa2.js';
3
-
4
- interface KbdKeyState extends Record<string, unknown> {
5
- }
1
+ import { t as ComponentProps } from "../types-BbN28E3_.js";
2
+ import * as React from "react";
3
+ //#region src/kbd/key/key.d.ts
4
+ interface KbdKeyState extends Record<string, unknown> {}
6
5
  interface KbdKeyProps extends ComponentProps<'kbd', KbdKey.State> {
7
- label?: string;
6
+ label?: string;
8
7
  }
9
8
  declare const KbdKey: React.ForwardRefExoticComponent<Omit<KbdKey.Props, "ref"> & React.RefAttributes<HTMLElement>>;
10
9
  declare namespace KbdKey {
11
- type State = KbdKeyState;
12
- interface Props extends KbdKeyProps {
13
- }
10
+ type State = KbdKeyState;
11
+ interface Props extends KbdKeyProps {}
14
12
  }
15
-
13
+ //#endregion
14
+ //#region src/kbd/root/root.d.ts
16
15
  type Platform$2 = 'apple' | 'other';
17
16
  interface KbdRootState extends Record<string, unknown> {
18
- platform: Platform$2;
17
+ platform: Platform$2;
19
18
  }
20
19
  interface KbdRootProps extends Omit<ComponentProps<'span', KbdRoot.State>, 'children'> {
21
- keys: string;
22
- platform?: Platform$2;
23
- separator?: React.ReactNode;
20
+ keys: string;
21
+ platform?: Platform$2;
22
+ separator?: React.ReactNode;
24
23
  }
25
24
  declare const KbdRoot: React.ForwardRefExoticComponent<Omit<KbdRoot.Props, "ref"> & React.RefAttributes<HTMLSpanElement>>;
26
25
  declare namespace KbdRoot {
27
- type State = KbdRootState;
28
- interface Props extends KbdRootProps {
29
- }
26
+ type State = KbdRootState;
27
+ interface Props extends KbdRootProps {}
30
28
  }
31
-
32
- declare namespace index_parts {
29
+ declare namespace index_parts_d_exports {
33
30
  export { KbdKey as Key, KbdRoot as Root };
34
31
  }
35
-
32
+ //#endregion
33
+ //#region src/kbd/utils/parse-keybinding.d.ts
36
34
  interface KeyChord {
37
- meta: boolean;
38
- ctrl: boolean;
39
- alt: boolean;
40
- shift: boolean;
41
- mod: boolean;
42
- key: string | null;
35
+ meta: boolean;
36
+ ctrl: boolean;
37
+ alt: boolean;
38
+ shift: boolean;
39
+ mod: boolean;
40
+ key: string | null;
43
41
  }
44
42
  interface Keybinding {
45
- chords: KeyChord[];
43
+ chords: KeyChord[];
46
44
  }
47
45
  type Platform$1 = 'apple' | 'other';
48
- declare function parseKeybinding(keys: string): Keybinding;
49
- declare function getKeyLabel(key: string, platform: Platform$1): string;
50
- declare function getChordLabels(chord: KeyChord, platform: Platform$1): string[];
51
-
46
+ export declare function parseKeybinding(keys: string): Keybinding;
47
+ export declare function getKeyLabel(key: string, platform: Platform$1): string;
48
+ export declare function getChordLabels(chord: KeyChord, platform: Platform$1): string[];
49
+ //#endregion
50
+ //#region src/kbd/utils/platform.d.ts
52
51
  type Platform = 'apple' | 'other';
53
- declare function isApplePlatform(): boolean;
52
+ export declare function isApplePlatform(): boolean;
54
53
  /**
55
54
  * Returns the current platform while keeping the first client render aligned with
56
55
  * SSR. Without an override, this starts as "other" and corrects to "apple" after
57
56
  * mount when appropriate, avoiding hydration mismatches.
58
57
  */
59
- declare function usePlatform(override?: Platform): Platform;
60
-
61
- export { index_parts as Kbd, type KeyChord, type Keybinding, getChordLabels, getKeyLabel, isApplePlatform, parseKeybinding, usePlatform };
58
+ export declare function usePlatform(override?: Platform): Platform;
59
+ //#endregion
60
+ export { index_parts_d_exports as Kbd, type KeyChord, type Keybinding };
61
+ //# sourceMappingURL=index.d.ts.map
package/dist/kbd/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as x,b as E,c as g,d as H,e as P}from"../chunk-LXXK4S4Q.js";import{a,b as p}from"../chunk-MPPIEWSL.js";import{a as j}from"../chunk-4C666HHU.js";var $={};j($,{Key:()=>m,Root:()=>L});import{useRender as A}from"@base-ui/react/use-render";import*as d from"react";var m=d.forwardRef(function(c,f){let{label:r,children:i,render:s,className:K,style:b,...y}=c,o=d.useMemo(()=>({}),[]),e=i??r;return A({render:s,ref:f,state:o,props:{...y,"data-kbd-key":"",className:a(K,o),style:p(b,o),children:e},defaultTagName:"kbd"})});import{useRender as I}from"@base-ui/react/use-render";import*as t from"react";import{jsx as w}from"react/jsx-runtime";var O={platform:l=>({"data-platform":String(l)})},L=t.forwardRef(function(c,f){let{keys:r,platform:i,separator:s="then",render:K,className:b,style:y,...o}=c,e=P(i),h=t.useMemo(()=>x(r),[r]),R=t.useMemo(()=>({platform:e}),[e]),v=t.useMemo(()=>{let n=[],k=new Map;for(let T of h.chords){let S=g(T,e),u=S.join("+"),C=(k.get(u)??0)+1;k.set(u,C);let N=`${u}#${C}`;n.length>0&&n.push(w("span",{"data-kbd-separator":"",children:s},`${N}-separator`));for(let M of S)n.push(w(m,{children:M},`${N}-${M}`))}return n},[h,e,s]);return I({render:K,ref:f,state:R,stateAttributesMapping:O,props:{...o,"data-kbd-root":"",className:a(b,R),style:p(y,R),children:v},defaultTagName:"span"})});export{$ as Kbd,g as getChordLabels,E as getKeyLabel,H as isApplePlatform,x as parseKeybinding,P as usePlatform};
1
+ import{t as e}from"../rolldown-runtime-DK3Fl9T5.js";import{n as t,r as n}from"../resolve-state-props-D31kizRZ.js";import{a as r,i,n as a,r as o,t as s}from"../platform-C4_cGUkS.js";import*as c from"react";import{jsx as l}from"react/jsx-runtime";import{useRender as u}from"@base-ui/react/use-render";const d=c.forwardRef(function(e,r){let{label:i,children:a,render:o,className:s,style:l,...d}=e,f=c.useMemo(()=>({}),[]),p=a??i;return u({render:o,ref:r,state:f,props:{...d,"data-kbd-key":``,className:t(s,f),style:n(l,f),children:p},defaultTagName:`kbd`})}),f={platform:e=>({"data-platform":String(e)})},p=c.forwardRef(function(e,i){let{keys:s,platform:p,separator:m=`then`,render:h,className:g,style:_,...v}=e,y=a(p),b=c.useMemo(()=>r(s),[s]),x=c.useMemo(()=>({platform:y}),[y]),S=c.useMemo(()=>{let e=[],t=/* @__PURE__ */ new Map;for(let n of b.chords){let r=o(n,y),i=r.join(`+`),a=(t.get(i)??0)+1;t.set(i,a);let s=`${i}#${a}`;e.length>0&&e.push(/* @__PURE__ */ l(`span`,{"data-kbd-separator":``,children:m},`${s}-separator`));for(let t of r)e.push(/* @__PURE__ */ l(d,{children:t},`${s}-${t}`))}return e},[b,y,m]);return u({render:h,ref:i,state:x,stateAttributesMapping:f,props:{...v,"data-kbd-root":``,className:t(g,x),style:n(_,x),children:S},defaultTagName:`span`})});var m=/* @__PURE__ */ e({Key:()=>d,Root:()=>p});export{m as Kbd,o as getChordLabels,i as getKeyLabel,s as isApplePlatform,r as parseKeybinding,a as usePlatform};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/kbd/index.parts.ts","../../src/kbd/key/key.tsx","../../src/kbd/root/root.tsx"],"sourcesContent":["export { KbdKey as Key } from './key/key.js'\nexport { KbdRoot as Root } from './root/root.js'\n","'use client'\n\nimport { useRender } from '@base-ui/react/use-render'\nimport * as React from 'react'\nimport {\n resolveClassName,\n resolveStyle,\n} from '../../utils/resolve-state-props.js'\nimport type { ComponentProps } from '../../utils/types.js'\nimport { KbdKeyDataAttributes } from './key.data-attrs.js'\n\nexport interface KbdKeyState extends Record<string, unknown> {}\n\nexport interface KbdKeyProps extends ComponentProps<'kbd', KbdKey.State> {\n label?: string\n}\n\nexport const KbdKey = React.forwardRef<HTMLElement, KbdKey.Props>(\n function KbdKey(props, forwardedRef) {\n const { label, children, render, className, style, ...rest } = props\n\n const state: KbdKey.State = React.useMemo(() => ({}), [])\n const renderedChildren = children ?? label\n\n return useRender({\n render,\n ref: forwardedRef,\n state,\n props: {\n ...rest,\n [KbdKeyDataAttributes.key]: '',\n className: resolveClassName(className, state),\n style: resolveStyle(style, state),\n children: renderedChildren,\n },\n defaultTagName: 'kbd',\n })\n },\n)\n\nexport namespace KbdKey {\n export type State = KbdKeyState\n export interface Props extends KbdKeyProps {}\n}\n","'use client'\n\nimport { useRender } from '@base-ui/react/use-render'\nimport * as React from 'react'\nimport {\n resolveClassName,\n resolveStyle,\n} from '../../utils/resolve-state-props.js'\nimport type { ComponentProps } from '../../utils/types.js'\nimport { KbdKey } from '../key/key.js'\nimport { getChordLabels, parseKeybinding } from '../utils/parse-keybinding.js'\nimport { usePlatform } from '../utils/platform.js'\nimport { KbdRootDataAttributes } from './root.data-attrs.js'\n\ntype Platform = 'apple' | 'other'\n\nexport interface KbdRootState extends Record<string, unknown> {\n platform: Platform\n}\n\nexport interface KbdRootProps\n extends Omit<ComponentProps<'span', KbdRoot.State>, 'children'> {\n keys: string\n platform?: Platform\n separator?: React.ReactNode\n}\n\nconst stateAttributesMapping = {\n platform: (value: unknown): Record<string, string> | null => ({\n [KbdRootDataAttributes.platform]: String(value),\n }),\n}\n\nexport const KbdRoot = React.forwardRef<HTMLSpanElement, KbdRoot.Props>(\n function KbdRoot(props, forwardedRef) {\n const {\n keys,\n platform: platformProp,\n separator = 'then',\n render,\n className,\n style,\n ...rest\n } = props\n\n const platform = usePlatform(platformProp)\n const keybinding = React.useMemo(() => parseKeybinding(keys), [keys])\n\n const state: KbdRoot.State = React.useMemo(() => ({ platform }), [platform])\n\n const renderedChildren = React.useMemo(() => {\n const entries: React.ReactNode[] = []\n // Content-derived keys: chords are fully derived from the `keys` string,\n // so a chord's joined labels (disambiguated by occurrence count for\n // repeated chords like \"g g\") form a stable identity.\n const seen = new Map<string, number>()\n\n for (const chord of keybinding.chords) {\n const labels = getChordLabels(chord, platform)\n const chordId = labels.join('+')\n const occurrence = (seen.get(chordId) ?? 0) + 1\n seen.set(chordId, occurrence)\n const prefix = `${chordId}#${occurrence}`\n\n if (entries.length > 0) {\n entries.push(\n <span key={`${prefix}-separator`} data-kbd-separator=\"\">\n {separator}\n </span>,\n )\n }\n for (const label of labels) {\n entries.push(<KbdKey key={`${prefix}-${label}`}>{label}</KbdKey>)\n }\n }\n\n return entries\n }, [keybinding, platform, separator])\n\n return useRender({\n render,\n ref: forwardedRef,\n state,\n stateAttributesMapping,\n props: {\n ...rest,\n [KbdRootDataAttributes.root]: '',\n className: resolveClassName(className, state),\n style: resolveStyle(style, state),\n children: renderedChildren,\n },\n defaultTagName: 'span',\n })\n },\n)\n\nexport namespace KbdRoot {\n export type State = KbdRootState\n export interface Props extends KbdRootProps {}\n}\n"],"mappings":"yJAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,SAAAE,EAAA,SAAAC,ICEA,OAAS,aAAAC,MAAiB,4BAC1B,UAAYC,MAAW,QAchB,IAAMC,EAAe,aAC1B,SAAgBC,EAAOC,EAAc,CACnC,GAAM,CAAE,MAAAC,EAAO,SAAAC,EAAU,OAAAC,EAAQ,UAAAC,EAAW,MAAAC,EAAO,GAAGC,CAAK,EAAIP,EAEzDQ,EAA4B,UAAQ,KAAO,CAAC,GAAI,CAAC,CAAC,EAClDC,EAAmBN,GAAYD,EAErC,OAAOQ,EAAU,CACf,OAAAN,EACA,IAAKH,EACL,MAAAO,EACA,MAAO,CACL,GAAGD,EACF,eAA2B,GAC5B,UAAWI,EAAiBN,EAAWG,CAAK,EAC5C,MAAOI,EAAaN,EAAOE,CAAK,EAChC,SAAUC,CACZ,EACA,eAAgB,KAClB,CAAC,CACH,CACF,ECpCA,OAAS,aAAAI,MAAiB,4BAC1B,UAAYC,MAAW,QA+DX,cAAAC,MAAA,oBAvCZ,IAAMC,EAAyB,CAC7B,SAAWC,IAAmD,CAC3D,gBAAiC,OAAOA,CAAK,CAChD,EACF,EAEaC,EAAgB,aAC3B,SAAiBC,EAAOC,EAAc,CACpC,GAAM,CACJ,KAAAC,EACA,SAAUC,EACV,UAAAC,EAAY,OACZ,OAAAC,EACA,UAAAC,EACA,MAAAC,EACA,GAAGC,CACL,EAAIR,EAEES,EAAWC,EAAYP,CAAY,EACnCQ,EAAmB,UAAQ,IAAMC,EAAgBV,CAAI,EAAG,CAACA,CAAI,CAAC,EAE9DW,EAA6B,UAAQ,KAAO,CAAE,SAAAJ,CAAS,GAAI,CAACA,CAAQ,CAAC,EAErEK,EAAyB,UAAQ,IAAM,CAC3C,IAAMC,EAA6B,CAAC,EAI9BC,EAAO,IAAI,IAEjB,QAAWC,KAASN,EAAW,OAAQ,CACrC,IAAMO,EAASC,EAAeF,EAAOR,CAAQ,EACvCW,EAAUF,EAAO,KAAK,GAAG,EACzBG,GAAcL,EAAK,IAAII,CAAO,GAAK,GAAK,EAC9CJ,EAAK,IAAII,EAASC,CAAU,EAC5B,IAAMC,EAAS,GAAGF,CAAO,IAAIC,CAAU,GAEnCN,EAAQ,OAAS,GACnBA,EAAQ,KACNnB,EAAC,QAAiC,qBAAmB,GAClD,SAAAQ,GADQ,GAAGkB,CAAM,YAEpB,CACF,EAEF,QAAWC,KAASL,EAClBH,EAAQ,KAAKnB,EAAC4B,EAAA,CAAmC,SAAAD,GAAvB,GAAGD,CAAM,IAAIC,CAAK,EAAW,CAAS,CAEpE,CAEA,OAAOR,CACT,EAAG,CAACJ,EAAYF,EAAUL,CAAS,CAAC,EAEpC,OAAOqB,EAAU,CACf,OAAApB,EACA,IAAKJ,EACL,MAAAY,EACA,uBAAAhB,EACA,MAAO,CACL,GAAGW,EACF,gBAA6B,GAC9B,UAAWkB,EAAiBpB,EAAWO,CAAK,EAC5C,MAAOc,EAAapB,EAAOM,CAAK,EAChC,SAAUC,CACZ,EACA,eAAgB,MAClB,CAAC,CACH,CACF","names":["index_parts_exports","__export","KbdKey","KbdRoot","useRender","React","KbdKey","props","forwardedRef","label","children","render","className","style","rest","state","renderedChildren","useRender","resolveClassName","resolveStyle","useRender","React","jsx","stateAttributesMapping","value","KbdRoot","props","forwardedRef","keys","platformProp","separator","render","className","style","rest","platform","usePlatform","keybinding","parseKeybinding","state","renderedChildren","entries","seen","chord","labels","getChordLabels","chordId","occurrence","prefix","label","KbdKey","useRender","resolveClassName","resolveStyle"]}
1
+ {"version":3,"file":"index.js","names":["__exportAll","resolveClassName","resolveStyle","parseKeybinding","usePlatform","getChordLabels","isApplePlatform","React","KbdKey","rest","props","state","renderedChildren","children","label","useRender","forwardedRef","className","style","stateAttributesMapping","value","KbdRoot","platformProp","platform","keybinding","keys","entries","seen","chord","labels","chordId","occurrence","prefix","separator","index_parts_exports","getKeyLabel"],"sources":["../../src/kbd/key/key.tsx","../../src/kbd/root/root.tsx","../../src/kbd/index.parts.ts"],"sourcesContent":["'use client'\n\nimport { useRender } from '@base-ui/react/use-render'\nimport * as React from 'react'\nimport {\n resolveClassName,\n resolveStyle,\n} from '../../utils/resolve-state-props.js'\nimport type { ComponentProps } from '../../utils/types.js'\nimport { KbdKeyDataAttributes } from './key.data-attrs.js'\n\nexport interface KbdKeyState extends Record<string, unknown> {}\n\nexport interface KbdKeyProps extends ComponentProps<'kbd', KbdKey.State> {\n label?: string\n}\n\nexport const KbdKey = React.forwardRef<HTMLElement, KbdKey.Props>(\n function KbdKey(props, forwardedRef) {\n const { label, children, render, className, style, ...rest } = props\n\n const state: KbdKey.State = React.useMemo(() => ({}), [])\n const renderedChildren = children ?? label\n\n return useRender({\n render,\n ref: forwardedRef,\n state,\n props: {\n ...rest,\n [KbdKeyDataAttributes.key]: '',\n className: resolveClassName(className, state),\n style: resolveStyle(style, state),\n children: renderedChildren,\n },\n defaultTagName: 'kbd',\n })\n },\n)\n\nexport namespace KbdKey {\n export type State = KbdKeyState\n export interface Props extends KbdKeyProps {}\n}\n","'use client'\n\nimport { useRender } from '@base-ui/react/use-render'\nimport * as React from 'react'\nimport {\n resolveClassName,\n resolveStyle,\n} from '../../utils/resolve-state-props.js'\nimport type { ComponentProps } from '../../utils/types.js'\nimport { KbdKey } from '../key/key.js'\nimport { getChordLabels, parseKeybinding } from '../utils/parse-keybinding.js'\nimport { usePlatform } from '../utils/platform.js'\nimport { KbdRootDataAttributes } from './root.data-attrs.js'\n\ntype Platform = 'apple' | 'other'\n\nexport interface KbdRootState extends Record<string, unknown> {\n platform: Platform\n}\n\nexport interface KbdRootProps\n extends Omit<ComponentProps<'span', KbdRoot.State>, 'children'> {\n keys: string\n platform?: Platform\n separator?: React.ReactNode\n}\n\nconst stateAttributesMapping = {\n platform: (value: unknown): Record<string, string> | null => ({\n [KbdRootDataAttributes.platform]: String(value),\n }),\n}\n\nexport const KbdRoot = React.forwardRef<HTMLSpanElement, KbdRoot.Props>(\n function KbdRoot(props, forwardedRef) {\n const {\n keys,\n platform: platformProp,\n separator = 'then',\n render,\n className,\n style,\n ...rest\n } = props\n\n const platform = usePlatform(platformProp)\n const keybinding = React.useMemo(() => parseKeybinding(keys), [keys])\n\n const state: KbdRoot.State = React.useMemo(() => ({ platform }), [platform])\n\n const renderedChildren = React.useMemo(() => {\n const entries: React.ReactNode[] = []\n // Content-derived keys: chords are fully derived from the `keys` string,\n // so a chord's joined labels (disambiguated by occurrence count for\n // repeated chords like \"g g\") form a stable identity.\n const seen = new Map<string, number>()\n\n for (const chord of keybinding.chords) {\n const labels = getChordLabels(chord, platform)\n const chordId = labels.join('+')\n const occurrence = (seen.get(chordId) ?? 0) + 1\n seen.set(chordId, occurrence)\n const prefix = `${chordId}#${occurrence}`\n\n if (entries.length > 0) {\n entries.push(\n <span key={`${prefix}-separator`} data-kbd-separator=\"\">\n {separator}\n </span>,\n )\n }\n for (const label of labels) {\n entries.push(<KbdKey key={`${prefix}-${label}`}>{label}</KbdKey>)\n }\n }\n\n return entries\n }, [keybinding, platform, separator])\n\n return useRender({\n render,\n ref: forwardedRef,\n state,\n stateAttributesMapping,\n props: {\n ...rest,\n [KbdRootDataAttributes.root]: '',\n className: resolveClassName(className, state),\n style: resolveStyle(style, state),\n children: renderedChildren,\n },\n defaultTagName: 'span',\n })\n },\n)\n\nexport namespace KbdRoot {\n export type State = KbdRootState\n export interface Props extends KbdRootProps {}\n}\n","export { KbdKey as Key } from './key/key.js'\nexport { KbdRoot as Root } from './root/root.js'\n"],"mappings":"2SAiBA,MAAaQ,EAASD,EAAM,WAC1B,SAAgB,EAAO,EAAc,CACnC,GAAM,CAAE,QAAO,WAAU,SAAQ,YAAW,QAAO,GAAGE,GAASC,EAEzDC,EAAsBJ,EAAM,aAAe,CAAC,GAAI,CAAC,CAAC,EAClDK,EAAmBC,GAAYC,EAErC,OAAOC,EAAU,CACf,SACA,IAAKC,EACL,QACA,MAAO,CACL,GAAGP,EACyB,eAAA,GAC5B,UAAWR,EAAiBgB,EAAWN,CAAK,EAC5C,MAAOT,EAAagB,EAAOP,CAAK,EAChC,SAAUC,CACZ,EACA,eAAgB,KAClB,CAAC,CACH,CACF,ECXMO,EAAyB,CAC7B,SAAW,IAAmD,CAAA,gBAC1B,OAAOC,CAAK,CAChD,EACF,EAEaC,EAAUd,EAAM,WAC3B,SAAiB,EAAO,EAAc,CACpC,GAAM,CACJ,OACA,SAAUe,EACV,YAAY,OACZ,SACA,YACA,QACA,GAAGb,GACDC,EAEEa,EAAWnB,EAAYkB,CAAY,EACnCE,EAAajB,EAAM,YAAcJ,EAAgBsB,CAAI,EAAG,CAACA,CAAI,CAAC,EAE9Dd,EAAuBJ,EAAM,aAAe,CAAE,UAAS,GAAI,CAACgB,CAAQ,CAAC,EAErEX,EAAmBL,EAAM,YAAc,CAC3C,IAAMmB,EAA6B,CAAC,EAI9BC,kBAAO,IAAI,IAEjB,IAAK,IAAMC,KAASJ,EAAW,OAAQ,CACrC,IAAMK,EAASxB,EAAeuB,EAAOL,CAAQ,EACvCO,EAAUD,EAAO,KAAK,GAAG,EACzBE,GAAcJ,EAAK,IAAIG,CAAO,GAAK,GAAK,EAC9CH,EAAK,IAAIG,EAASC,CAAU,EAC5B,IAAMC,EAAS,GAAGF,EAAQ,GAAGC,IAEzBL,EAAQ,OAAS,GACnBA,EAAQ,KACN,kBAAC,OAAD,CAAkC,qBAAmB,GAClD,SAAAO,CACG,EAFK,GAAGD,EAAO,WAEf,CACR,EAEF,IAAK,IAAMlB,KAASe,EAClBH,EAAQ,KAAK,kBAAClB,EAAD,CAAA,SAAoCM,CAAc,EAArC,GAAGkB,EAAO,GAAGlB,GAAwB,CAAC,CAEpE,CAEA,OAAOY,CACT,EAAG,CAACF,EAAYD,EAAUU,CAAS,CAAC,EAEpC,OAAOlB,EAAU,CACf,SACA,IAAKC,EACL,QACA,yBACA,MAAO,CACL,GAAGP,EAC2B,gBAAA,GAC9B,UAAWR,EAAiBgB,EAAWN,CAAK,EAC5C,MAAOT,EAAagB,EAAOP,CAAK,EAChC,SAAUC,CACZ,EACA,eAAgB,MAClB,CAAC,CACH,CACF"}
@@ -0,0 +1,2 @@
1
+ import*as e from"react";import{ReactStore as t,createSelector as n}from"@base-ui/utils/store";import{useRefWithInit as r}from"@base-ui/utils/useRefWithInit";const i=`trigger-press`,a=`trigger-context-menu`,o=`escape-key`,s=`outside-press`,c=`focus-out`,l=`item-press`,u=`range-selection`,d=`drag-selection`,f=`imperative-action`,p=`no-results`,m=`none`;function h(e,t,n,r){let i=!1,a=!1;return{reason:e,event:t??new Event(`ui-event`),cancel(){i=!0},allowPropagation(){a=!0},get isCanceled(){return i},get isPropagationAllowed(){return a},trigger:n,...r}}function g(e,t,n){return{reason:e,event:t??new Event(`ui-event`),...n}}let _=null,v=!1;function y(e){_=e.pointerType||`mouse`}function b(){_=null}function x(){v||typeof document>`u`||(v=!0,document.addEventListener(`pointerdown`,y,{capture:!0,passive:!0}),document.addEventListener(`keydown`,b,{capture:!0,passive:!0}))}function S(e){switch(e){case`touch`:return`touch`;case`pen`:return`pen`;case`mouse`:return`mouse`;default:return null}}function C(e){return S(e?.pointerType)||(e&&typeof KeyboardEvent<`u`&&e instanceof KeyboardEvent?`keyboard`:S(_)??`keyboard`)}const w=e.createContext(null);function T(){return e.useContext(w)}const E=e.createContext(null);function D(){let t=e.useContext(E);if(!t)throw Error(`Item child components must be used within an Item`);return t}function O(){return e.useContext(E)}const k=e.createContext(null);function A(){let t=e.useContext(k);if(!t)throw Error(`Listbox components must be used within a Listbox provider`);return t}function j(){return e.useContext(k)}const M=e.createContext(null);process.env.NODE_ENV!==`production`&&(M.displayName=`RowWidthContext`);function N(){let t=e.useContext(M);if(!t)throw Error(`useRowWidthContext must be used within a List with measureRowWidth enabled`);return t}function P(){return e.useContext(M)}const F=e.createContext(null);function ee(){let t=e.useContext(F);if(!t)throw Error(`Listbox components must be used within a Surface provider`);return t}function I(){return e.useContext(F)}function L(e){return e?.trim()??``}function R(e){return e.normalize(`NFD`).replace(/(?![ -~])\p{Diacritic}/gu,``)}function z(e){return e?e.trim().toLowerCase().replace(/\s+/g,`-`).replace(/[^a-z0-9-]/g,``).replace(/-+/g,`-`).replace(/^-|-$/g,``):``}function B(t){let{id:n,value:r,keywords:i,disabled:a=!1,activatable:o=!0,forceMount:s=!1,shortcut:c,forceOrder:l,forceScore:u,isSubmenuTrigger:d=!1,onSelect:f,closeOnClick:p=!0,onAfterSelect:m,children:h,aimGuard:g}=t,{store:_}=ee(),v=T(),{depth:y}=A(),b=e.useRef(null),x=e.useId(),[S,C]=e.useState(null);e.useLayoutEffect(()=>{if(S)return _.registerRow(x,S,{kind:`item`,groupId:v?.groupId})},[S,x,v?.groupId,_]);let[w,E]=e.useState(``);e.useLayoutEffect(()=>{if(n===void 0&&r===void 0&&b.current){let e=b.current.textContent?.trim()??``;E(e)}},[n,r,h]);let D=n??(L(r)||w),O=e.useId(),k=n??`item-${O}`,j=i?.map(e=>L(e)).filter(Boolean),M=j?JSON.stringify(j):void 0;e.useEffect(()=>{if(D||s)return _.registerItem(D,{value:D,keywords:j,groupId:v?.groupId,disabled:a,activatable:o,isSubmenuTrigger:d,shortcut:c,forceOrder:l,forceScore:u,closeOnClick:p})},[D,M,v?.groupId,a,o,d,c,l,u,p,_,s]),e.useEffect(()=>{if(D)return _.registerItemRef(D,b)},[D,_]);let N=P();e.useLayoutEffect(()=>{N&&b.current&&D&&N.queueMeasurement(b.current,D)},[N,D]),e.useEffect(()=>{if(f&&D)return _.registerItemSelect(D,f)},[D,f,_]);let F=_.useState(`normalizedSearch`),I=_.useState(`isHighlighted`,D),R=_.useState(`isFirstRow`,x),z=_.useState(`isLastRow`,x),B=_.useState(`isFirstInGroup`,x),V=_.useState(`isLastInGroup`,x),H=_.useState(`getItemScore`,D),U=_.isFilterDisabled(),W=F.length>0,G=s||U||!W||H>0,K=e.useCallback(e=>{e.defaultPrevented||a||o!==!1&&D&&(e.preventDefault(),_.context.itemSelects.get(D)?.(),m?.(D))},[a,o,_,D,m]),q=e.useCallback(e=>{e.preventDefault()},[]),J=e.useCallback(e=>{if(!e.defaultPrevented&&!a&&D){if(g){let{aimGuardActiveRef:e,guardedDepthRef:t}=g;if(e.current&&t.current===y)return}_.shouldAllowPointerHighlight(e.clientX,e.clientY)&&_.setHighlightedId(D)}},[a,g,y,_,D]),Y=e.useMemo(()=>({id:k,highlighted:I,disabled:a,shortcut:c}),[k,I,a,c]),X=e.useCallback(e=>D?_.registerItemSelect(D,e):()=>{},[_,D]),Z=e.useMemo(()=>({onClick:K,onPointerMove:J,onPointerDown:q}),[K,J,q]),Q=v?.positional;return{id:k,storeId:D,ref:b,rowRef:C,positional:e.useMemo(()=>({first:Q?.first??R,last:Q?.last??z,firstInGroup:Q?.firstInGroup??B,lastInGroup:Q?.lastInGroup??V}),[Q,R,z,B,V]),isHighlighted:I,isVisible:G,contextValue:Y,handlers:Z,registerSelect:X}}function V(t){let{store:n,surfaceId:r,enabled:i,onKeyDown:a,onSelect:o,closeAll:s,focusOwner:c,depth:l=0,submenuContext:u,subpageContext:d,enableTypeToSearch:f=!1,skipFocusOwnerCheck:p=!1}=t,m=c?.useState(`isOwner`,r)??!0,h=p?!0:m;return{handleKeyDown:e.useCallback(e=>{if(a?.(e),!e.defaultPrevented&&i&&h&&!(e.nativeEvent.isComposing||e.keyCode===229)){if(f){let t=n.context.hideUntilActive,r=n.state.inputActive;if(t&&!r&&e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let t=n.context.shortcuts.get(e.key.toLowerCase());if(t&&n.selectByShortcut(e.key)){e.preventDefault();let r=n.context.items.get(t);o?.({itemId:t,closeOnClick:r?.closeOnClick??!0});return}e.preventDefault(),n.setPendingSearch(e.key),n.setInputActive(!0);return}}switch(e.key){case`ArrowDown`:e.preventDefault(),n.highlightNext();break;case`ArrowUp`:e.preventDefault(),n.highlightPrev();break;case`n`:e.ctrlKey&&(e.preventDefault(),n.highlightNext());break;case`p`:e.ctrlKey&&(e.preventDefault(),n.highlightPrev());break;case`ArrowRight`:n.isHighlightedSubmenuTrigger()&&(e.preventDefault(),n.openSubmenuForHighlighted());break;case`l`:e.ctrlKey&&n.isHighlightedSubmenuTrigger()&&(e.preventDefault(),n.openSubmenuForHighlighted());break;case`ArrowLeft`:if(d?.goBack()){e.preventDefault(),c&&d.parentSurfaceId&&c.setOwnerId(d.parentSurfaceId);break}l>0&&u&&c&&(e.preventDefault(),u.setOpen(!1),c.setOwnerId(u.parentSurfaceId));break;case`h`:if(e.ctrlKey&&d?.goBack()){e.preventDefault(),c&&d.parentSurfaceId&&c.setOwnerId(d.parentSurfaceId);break}e.ctrlKey&&l>0&&u&&c&&(e.preventDefault(),u.setOpen(!1),c.setOwnerId(u.parentSurfaceId));break;case`Enter`:{e.preventDefault();let t=n.state.highlightedId,r=n.getHighlightedItem();if(r?.activatable===!1)break;n.selectHighlighted(),o?.({itemId:t,closeOnClick:r?.closeOnClick??!0});break}case`Home`:e.preventDefault(),n.setHighlightedId(null),n.highlightNext();break;case`End`:e.preventDefault(),n.setHighlightedId(null),n.highlightPrev();break;case`Escape`:if(d){e.preventDefault(),e.stopPropagation(),d.closeRootOnEsc?s():d.goBack()&&c&&d.parentSurfaceId?c.setOwnerId(d.parentSurfaceId):l>0&&u&&(u.setOpen(!1),c&&c.setOwnerId(u.parentSurfaceId));break}if(l===0)break;e.preventDefault(),e.stopPropagation(),u?.closeRootOnEsc===!1?(u.setOpen(!1),c&&c.setOwnerId(u.parentSurfaceId)):s();break;default:{let t=n.state.normalizedSearch.length>0;if(e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!t){let t=n.context.shortcuts.get(e.key.toLowerCase());if(t&&n.selectByShortcut(e.key)){e.preventDefault();let r=n.context.items.get(t);o?.({itemId:t,closeOnClick:r?.closeOnClick??!0})}}break}}}},[a,i,h,f,n,l,u,d,c,o,s])}}function H(e){return`${Math.ceil(e)}px`}function U(e){let t=Number.parseFloat(e);return Number.isFinite(t)?t:null}function W(t){let{listRef:n,targetRef:r,maxWidth:i,enabled:a=!0}=t,o=e.useCallback(()=>r?.current??n.current,[r,n]),s=e.useRef(0);e.useLayoutEffect(()=>{if(!a)return;let e=o();if(!e)return;let t=U(e.style.getPropertyValue(`--row-width`).trim());!t||t<=s.current||(s.current=t)},[a,o]);let c=e.useRef([]),l=e.useRef([]),u=e.useRef(!1),d=e.useRef(/* @__PURE__ */ new Set),f=e.useCallback(e=>{let t=o();if(!t)return;let n=i===void 0?e:Math.min(e,i);H(n),t.tagName+(t.className?`.${t.className.split(` `).join(`.`)}`:``),t.style.setProperty(`--row-width`,H(n))},[o,i]),p=e.useCallback(()=>{u.current||(u.current=!0,requestAnimationFrame(()=>{let e=c.current,t=s.current,n=!1;if(e.length>0){e.length;for(let{element:r,id:i}of e){if(d.current.has(i)||!r.isConnected)continue;let e=r.style.width,a=r.style.maxWidth;r.setAttribute(`data-measuring`,``),r.style.maxWidth=`none`,r.style.width=`max-content`;let o=Math.max(r.scrollWidth,r.offsetWidth)+1,s=getComputedStyle(r);if(r.scrollWidth,r.offsetWidth,s.width,s.maxWidth,r.textContent?.slice(0,50),r.style.width=e,r.style.maxWidth=a,r.removeAttribute(`data-measuring`),o<=1){let e=r.getBoundingClientRect(),t=getComputedStyle(r);r.scrollWidth,r.offsetWidth,e.width,e.height,t.display,t.visibility,r.innerHTML.slice(0,100),r.isConnected,r.parentElement?.tagName;continue}o>t&&(t=o,n=!0),d.current.add(i)}c.current=[]}n&&(s.current,d.current.size,s.current=t,l.current.push(()=>f(t)));for(let e of l.current)e();l.current=[],u.current=!1}))},[f]),m=e.useCallback((e,t)=>{a&&(d.current.has(t)||(c.current.length+1,e.tagName,c.current.push({element:e,id:t}),p()))},[a,p]),h=e.useCallback(()=>{s.current,d.current.size,d.current.clear(),s.current=0;let e=o();e&&e.style.removeProperty(`--row-width`),e?.tagName},[o]),g=e.useCallback(()=>{d.current.size,d.current.clear(),s.current},[]);return e.useEffect(()=>{if(!a)return;let e=o();if(!e||typeof ResizeObserver>`u`)return;let t=null,n=new ResizeObserver(e=>{t!==null&&cancelAnimationFrame(t),t=requestAnimationFrame(()=>{t=null,s.current>0&&(s.current,e[0]?.contentRect,f(s.current))})});return n.observe(e),()=>{t!==null&&cancelAnimationFrame(t),n.disconnect()}},[o,a,f]),{queueMeasurement:m,resetMeasurements:h,clearMeasuredIds:g}}const G=.1,K=.999,q=/[\\/_+.#"@[({&]/,J=/[\\/_+.#"@[({&]/g,Y=/[\s-]/,X=/[\s-]/g;function Z(e,t,n,r,i,a,o){if(a===r.length)return i===n.length?1:.99;let s=`${i},${a}`;if(o[s]!==void 0)return o[s];let c=r.charAt(a),l=n.indexOf(c,i),u=0,d,f,p,m;for(;l>=0;)d=Z(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=1:q.test(e.charAt(l-1))?(d*=.8,p=e.slice(i,l-1).match(J),p&&i>0&&(d*=K**p.length)):Y.test(e.charAt(l-1))?(d*=.9,m=e.slice(i,l-1).match(X),m&&i>0&&(d*=K**m.length)):(d*=.17,i>0&&(d*=K**(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=.9999)),(d<G&&n.charAt(l-1)===r.charAt(a+1)||r.charAt(a+1)===r.charAt(a)&&n.charAt(l-1)!==r.charAt(a))&&(f=Z(e,t,n,r,l+1,a+2,o),f*G>d&&(d=f*G)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function Q(e){return R(e.toLowerCase()).replace(X,` `)}function $(e,t,n){if(!t)return 1;if(!e)return 0;let r=n&&n.length>0?`${e} ${n.join(` `)}`:e;return Z(r,t,Q(r),Q(t),0,0,{})}const te=$,ne={open:n(e=>e.openProp??e.open),openMethod:n(e=>e.openMethod),search:n(e=>e.searchProp??e.search),normalizedSearch:n(e=>e.normalizedSearch),highlightedId:n(e=>e.highlightedId),highlightSource:n(e=>e.highlightSource),hasInput:n(e=>e.hasInput),inputActive:n(e=>e.inputActive),pendingSearch:n(e=>e.pendingSearch),filteredCount:n(e=>e.filteredCount),filteredItems:n(e=>e.filteredItems),visibleGroups:n(e=>e.visibleGroups),virtualized:n(e=>e.virtualized),isHighlighted:n((e,t)=>e.highlightedId===t),isGroupVisible:n((e,t)=>e.normalizedSearch.length===0||e.visibleGroups.has(t)),isFirstRow:n((e,t)=>!e.virtualized&&e.orderedRows.filter(e=>e.groupId===void 0)[0]?.id===t),isLastRow:n((e,t)=>!e.virtualized&&e.orderedRows.filter(e=>e.groupId===void 0).at(-1)?.id===t),isFirstGroup:n((e,t)=>!e.virtualized&&e.orderedRows.filter(e=>e.kind===`group`)[0]?.id===t),isLastGroup:n((e,t)=>!e.virtualized&&e.orderedRows.filter(e=>e.kind===`group`).at(-1)?.id===t),isFirstInGroup:n((e,t)=>{if(e.virtualized)return!1;let n=e.orderedRows.find(e=>e.id===t);return n?.groupId?e.orderedRows.filter(e=>e.groupId===n.groupId)[0]?.id===t:!1}),isLastInGroup:n((e,t)=>{if(e.virtualized)return!1;let n=e.orderedRows.find(e=>e.id===t);return n?.groupId?e.orderedRows.filter(e=>e.groupId===n.groupId).at(-1)?.id===t:!1}),getItemScore:n((e,t)=>e.normalizedSearch.length===0?1:e.filteredItems.get(t)??0),hasSearchWithNoResults:n(e=>e.normalizedSearch.length===0?!1:e.virtualized&&e.virtualItemsCount>=0?e.virtualItemsCount===0:e.filteredCount===0)};function re(e,t){return e.element===null||t.element===null||!e.element.isConnected||!t.element.isConnected?e.index-t.index:e.element.compareDocumentPosition(t.element)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1}const ie=e=>L(e);var ae=class e extends t{constructor(e,t){let n={filter:$,normalizeSearch:ie,loop:!0,autoHighlightFirst:!0,clearSearchOnClose:!0,resetScrollOnSearch:!0,hideUntilActive:!1,listId:``,inputId:``,items:/* @__PURE__ */ new Map,groups:/* @__PURE__ */ new Map,itemSelects:/* @__PURE__ */ new Map,submenuOpens:/* @__PURE__ */ new Map,submenuCloses:/* @__PURE__ */ new Map,shortcuts:/* @__PURE__ */ new Map,rowElements:/* @__PURE__ */ new Map,onOpenChange:()=>{},onSearchChange:void 0,virtualItems:[],orderedItems:[],onHighlightChange:void 0,refs:{listRef:{current:null},listScrollContainerRef:{current:null},popupRef:{current:null},itemRefs:/* @__PURE__ */ new Map,groupRefs:/* @__PURE__ */ new Map},onCloseComplete:void 0,onPopupCloseComplete:void 0,lastPointerPosition:null,...t},r={...oe(),...e};r.normalizedSearch=n.normalizeSearch(r.search),super(r,n,ne),this.observe(`open`,(e,t)=>{if(e!==t){if(e)this.resetPointerPosition(),this.context.autoHighlightFirst===!0&&this.highlightFirstItem();else{this.context.clearSearchOnClose===!0&&this.setSearch(``);let e=this.context.clearSearchOnClose===`after-exit`;this.update({inputActive:e?this.state.inputActive:!1,pendingSearch:``})}}}),this.observe(`search`,(e,t)=>{e!==t&&this.syncNormalizedSearch()}),this.observe(e=>e.searchProp,(e,t)=>{e!==t&&this.syncNormalizedSearch()}),this.observe(`normalizedSearch`,(e,t)=>{e!==t&&(this.resetPointerPosition(),this.recomputeFilteredItems(t),this.context.resetScrollOnSearch&&!this.state.virtualized&&this.scrollListToTop())})}setOpen(e,t=m,n){let r=h(t,n);this.context.onOpenChange(e,r),!r.isCanceled&&(e&&this.set(`openMethod`,C(n)),this.set(`open`,e))}setSearch(e){let t=this.state.searchProp??e;this.update({search:e,normalizedSearch:this.context.normalizeSearch(t)}),this.context.onSearchChange?.(e)}setSearchNormalizer(e){this.context.normalizeSearch=e;let t=e(this.state.searchProp??this.state.search);t!==this.state.normalizedSearch&&this.set(`normalizedSearch`,t)}syncNormalizedSearch(){let e=this.state.searchProp??this.state.search,t=this.context.normalizeSearch(e);t!==this.state.normalizedSearch&&this.set(`normalizedSearch`,t)}defaultSearchInitialized=!1;initializeDefaultSearch(e){this.defaultSearchInitialized||(this.defaultSearchInitialized=!0,this.state.searchProp===void 0&&e!==this.state.search&&this.setSearch(e))}setHighlightedId(e,t=`pointer`){this.state.highlightedId!==e&&(this.closeSiblingSubmenus(e),this.update({highlightedId:e,highlightSource:t}),this.notifyHighlightChange(e,t),t===`keyboard`&&e!==null&&this.scrollItemIntoView(e))}notifyHighlightChange(e,t){let{onHighlightChange:n}=this.context;if(!n)return;let r=t===`keyboard`?`keyboard`:t===`pointer`?`pointer`:`auto`,i=e===null?-1:this.state.virtualized?this.getVirtualItemIndex(e):this.getVisibleItemIndex(e);n(e,i,g(r,void 0,{index:i}))}scrollItemIntoView(e){let{refs:t}=this.context,n=t.listRef.current,r=t.itemRefs.get(e)?.current;if(r&&n)try{n.contains(r)&&(r.scrollIntoView({block:`nearest`}),this.maybeRevealGroupTop(e,n))}catch{}}maybeRevealGroupTop(e,t){let n=this.context.items.get(e)?.groupId;if(!n||this.getVisibleItemIds().find(e=>this.context.items.get(e)?.groupId===n)!==e)return;let r=this.context.refs.groupRefs.get(n)?.current;if(!r||!t.contains(r))return;let i=this.context.refs.listScrollContainerRef.current??this.getScrollResetElement(t),a=i.getBoundingClientRect().top-r.getBoundingClientRect().top;a>0&&(i.scrollTop-=a)}scrollListToTop(){let e=this.context.refs.listRef.current,t=this.context.refs.listScrollContainerRef.current??(e?this.getScrollResetElement(e):null);if(t){if(typeof t.scrollTo==`function`){t.scrollTo({top:0});return}t.scrollTop=0}}getScrollResetElement(e){let t=e;for(;t;){if(this.isScrollableElement(t))return t;t=t.parentElement}return e}isScrollableElement(e){let t=(e.ownerDocument?.defaultView)?.getComputedStyle(e).overflowY,n=t===`auto`||t===`scroll`||t===`overlay`;return e.scrollTop>0||n&&e.scrollHeight>e.clientHeight}setHasInput(e){this.set(`hasInput`,e)}setInputActive(e){this.set(`inputActive`,e)}setPendingSearch(e){this.set(`pendingSearch`,e)}setHideUntilActive(e){this.context.hideUntilActive=e,e&&this.state.normalizedSearch.length>0&&this.setInputActive(!0)}setVirtualized(e){this.set(`virtualized`,e)}setVirtualItems(e){let t=this.context.virtualItems;if(this.context.virtualItems=e,this.set(`virtualItemsCount`,e.length),this.preRegisterVirtualItems(),e===t)return;if(t.length===e.length){let n=!0;for(let r=0;r<t.length;r++){let i=t[r],a=e[r];if(!i||!a||i.value!==a.value||i.disabled!==a.disabled){n=!1;break}}if(n)return}if(!this.state.virtualized||!this.select(`open`)||e.length===0)return;let n=t.find(e=>!e.disabled),r=e.find(e=>!e.disabled),i=n!==void 0&&r?.value!==n.value;this.validateHighlight({forceFirst:i})}setOrderedItems(e,t){let n=t?.reason??`replace`,r=this.context.orderedItems;if(this.context.orderedItems=e,e!==r&&this.select(`open`)){if((n===`append`||n===`refresh`)&&this.state.highlightedId!==null){let t=this.state.highlightedId,n=this.context.items.get(t);if(e.includes(t)&&n!==void 0&&!n.disabled)return}this.highlightFirstOrderedItem()}}highlightFirstOrderedItem(){if(!this.select(`open`))return;let e=this.context.orderedItems.find(e=>this.context.items.has(e));this.setHighlightedId(e??null,`auto`)}maybeAutoHighlightOnRegister(e){if(this.context.filter!==!1||!this.select(`open`)||this.state.highlightedId!==null||!this.context.autoHighlightFirst)return;let t=this.context.orderedItems;t.length!==0&&t.find(e=>this.context.items.has(e))===e&&this.setHighlightedId(e,`auto`)}setOnHighlightChange(e){this.context.onHighlightChange=e}setListRef(e){this.context.refs.listRef=e}setListScrollContainerRef(e){this.context.refs.listScrollContainerRef=e}setPopupRef(e){this.context.refs.popupRef=e}registerItemRef(e,t){return this.context.refs.itemRefs.set(e,t),()=>{this.context.refs.itemRefs.delete(e)}}shouldAllowPointerHighlight(e,t){let n=this.context.lastPointerPosition;if(n===null)return this.context.lastPointerPosition={x:e,y:t},!0;let r=Math.abs(e-n.x),i=Math.abs(t-n.y);return r>1||i>1?(this.context.lastPointerPosition={x:e,y:t},!0):!1}resetPointerPosition(){this.context.lastPointerPosition=null}preRegisterVirtualItems(){let e=this.context.virtualItems;if(e.length!==0){for(let t of e)this.context.items.has(t.value)||this.context.items.set(t.value,{value:t.value,keywords:t.keywords,disabled:t.disabled});this.recomputeFilteredItems()}}registerItem(e,t){let n=this.context.items.get(e);if(n&&n.value===t.value&&n.disabled===t.disabled&&n.forceOrder===t.forceOrder&&n.forceScore===t.forceScore&&n.groupId===t.groupId&&n.shortcut===t.shortcut&&n.activatable===t.activatable)return()=>{this.context.items.get(e)===n&&(this.context.items.delete(e),this.context.itemSelects.delete(e),t.groupId&&this.context.groups.get(t.groupId)?.delete(e),t.shortcut&&this.context.shortcuts.delete(t.shortcut.toLowerCase()),this.recomputeFilteredItems())};if(this.context.items.set(e,t),t.groupId){let n=this.context.groups.get(t.groupId);n&&n.add(e)}if(t.shortcut){let n=t.shortcut.toLowerCase();this.context.shortcuts.set(n,e)}return this.recomputeFilteredItems(),this.maybeAutoHighlightOnRegister(e),()=>{if(this.context.items.delete(e),this.context.itemSelects.delete(e),t.groupId){let n=this.context.groups.get(t.groupId);n&&n.delete(e)}if(t.shortcut){let e=t.shortcut.toLowerCase();this.context.shortcuts.delete(e)}this.recomputeFilteredItems()}}registerGroup(e,t){return this.context.groups.set(e,/* @__PURE__ */ new Set),t&&this.context.refs.groupRefs.set(e,t),()=>{this.context.groups.delete(e),this.context.refs.groupRefs.delete(e)}}registerRow(e,t,n){this.context.rowElements.set(e,t);let r=[...this.state.orderedRows.filter(t=>t.id!==e),{id:e,kind:n.kind,groupId:n.groupId}];return r.sort((e,t)=>this.compareRowOrder(e,t)),this.set(`orderedRows`,r),()=>{this.context.rowElements.get(e)===t&&(this.context.rowElements.delete(e),this.set(`orderedRows`,this.state.orderedRows.filter(t=>t.id!==e)))}}compareRowOrder(e,t){let n=this.context.rowElements.get(e.id),r=this.context.rowElements.get(t.id);if(!n||!r||!n.isConnected||!r.isConnected)return 0;let i=n.compareDocumentPosition(r);return i&Node.DOCUMENT_POSITION_FOLLOWING?-1:i&Node.DOCUMENT_POSITION_PRECEDING?1:0}registerItemSelect(e,t){return t&&this.context.itemSelects.set(e,t),()=>{this.context.itemSelects.delete(e)}}registerSubmenuOpen(e,t){return t&&this.context.submenuOpens.set(e,t),()=>{this.context.submenuOpens.delete(e)}}registerSubmenuClose(e,t){return t&&this.context.submenuCloses.set(e,t),()=>{this.context.submenuCloses.delete(e)}}closeSiblingSubmenus(e){for(let[t,n]of this.context.submenuCloses)if(t!==e)try{n()}catch{}}highlightNext(){let e=this.getVisibleItemIds();if(e.length===0)return;let t=(this.state.highlightedId?e.indexOf(this.state.highlightedId):-1)+1;t>=e.length&&(t=this.context.loop?0:e.length-1);let n=e[t];n&&this.setHighlightedId(n,`keyboard`)}highlightPrev(){let e=this.getVisibleItemIds();if(e.length===0)return;let t=(this.state.highlightedId?e.indexOf(this.state.highlightedId):e.length)-1;t<0&&(t=this.context.loop?e.length-1:0);let n=e[t];n&&this.setHighlightedId(n,`keyboard`)}selectHighlighted(){if(this.state.highlightedId){if(this.context.items.get(this.state.highlightedId)?.activatable===!1)return;this.context.itemSelects.get(this.state.highlightedId)?.()}}selectByShortcut(e){let t=this.context.shortcuts.get(e.toLowerCase());if(!t)return!1;let n=this.context.items.get(t);if(!n||n.disabled)return!1;let r=this.state.filteredItems.get(t)??0;return this.state.normalizedSearch.length===0||r>0?(this.context.itemSelects.get(t)?.(),!0):!1}openSubmenuForHighlighted(){this.state.highlightedId&&this.context.submenuOpens.get(this.state.highlightedId)?.()}isHighlightedSubmenuTrigger(){return this.state.highlightedId?this.context.items.get(this.state.highlightedId)?.isSubmenuTrigger??!1:!1}getHighlightedItem(){if(this.state.highlightedId)return this.context.items.get(this.state.highlightedId)}clearSearch(){this.setSearch(``)}clearHighlight(){this.update({highlightedId:null,highlightSource:null})}highlightFirstItem(){let e=this.getVisibleItemIds();e.length>0&&e[0]?this.update({highlightedId:e[0],highlightSource:null}):this.update({highlightedId:null,highlightSource:null})}applyAutoHighlight(){if(!this.select(`open`))return;let e=this.context.autoHighlightFirst;e===!0?this.highlightFirstItem():typeof e==`string`&&this.highlightItemByValue(e)}highlightItemByValue(e){let t=this.getVisibleItemIds(),n=null;t.includes(e)?n=e:t.length>0&&t[0]&&(n=t[0]),this.update({highlightedId:n,highlightSource:null}),n&&requestAnimationFrame(()=>{this.scrollItemIntoView(n)})}isFilterDisabled(){return this.context.filter===!1}getVisibleItemIds(){let e=[],t=this.state.normalizedSearch,n=this.state.filteredItems,r=this.context.virtualItems,i=this.context.orderedItems;if(this.state.virtualized&&r.length>0){for(let i of r){let r=n.get(i.value)??0;(t.length===0||r>0)&&!i.disabled&&e.push(i.value)}return e}if(this.context.filter===!1&&i.length>0){let t=[];for(let n of i){let r=this.context.items.get(n);r&&!r.disabled?e.push(n):r||t.push(n)}if(process.env.NODE_ENV!==`production`&&t.length>0&&e.length>0)for(let e of t)console.warn(`[ListboxStore] Item "${e}" is in orderedItems but not registered. This may cause keyboard navigation to skip this item. Make sure the render function passes the \`id\` prop: <Item {...props}>...</Item>`);return e}let a=[],o=0;this.context.items.forEach((e,r)=>{let i=o++,s=n.get(r)??0;(t.length===0||s>0)&&!e.disabled&&a.push({id:r,element:this.context.refs.itemRefs.get(r)?.current??null,index:i})}),a.sort(re);for(let{id:t}of a)e.push(t);return e}getVisibleItemIndex(e){return this.getVisibleItemIds().indexOf(e)}getVirtualItemIndex(e){return this.state.virtualized?this.context.virtualItems.findIndex(t=>t.value===e):-1}validateHighlight(e={}){let{forceFirst:t=!1,filteredItems:n=this.state.filteredItems,newSearch:r,prevSearch:i}=e,a=i===void 0?this.state.normalizedSearch:i,o=r===void 0?a:r,s=r!==void 0&&r!==a;if(!this.select(`open`)||!this.context.autoHighlightFirst)return this.state.highlightedId;let c=this.state.highlightedId,{filter:l}=this.context,u=t||s,d=!1;if(c&&!u){let e=n.get(c)??0,t=o.length===0||l===!1||e>0,r=this.context.items.get(c),i=this.context.virtualItems.find(e=>e.value===c),a=r?.disabled??i?.disabled??!1,s=this.state.virtualized||r!==void 0,u=!this.state.virtualized||this.context.virtualItems.length===0||i!==void 0;d=t&&!a&&s&&u}if(d)return c;let f=null;if(this.state.virtualized&&this.context.virtualItems.length>0)for(let e of this.context.virtualItems){let t=n.get(e.value)??0;if((o.length===0||l===!1||t>0)&&!e.disabled){f=e.value;break}}else if(l===!1&&this.context.orderedItems.length>0)for(let e of this.context.orderedItems){let t=this.context.items.get(e);if(t&&!t.disabled){f=e;break}}else{let e=null,t=0;for(let[r,i]of this.context.items){let a=t++,s=n.get(r)??0;if((o.length===0||s>0)&&!i.disabled){let t={id:r,element:this.context.refs.itemRefs.get(r)?.current??null,index:a};(e===null||re(t,e)<0)&&(e=t)}}f=e?.id??null}return f!==c&&this.update({highlightedId:f,highlightSource:null}),f}recomputeFilteredItems(e){let{filter:t}=this.context,n=this.state.normalizedSearch,r=this.context.items,i=this.context.groups,a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Set,s=0;if(!n||t===!1){if(this.state.virtualized&&this.context.virtualItems.length>0)for(let e of this.context.virtualItems)a.set(e.value,1),s++;else r.forEach((e,t)=>{a.set(t,1),s++});i.forEach((e,t)=>{o.add(t)})}else{let e=t||$;r.forEach((t,r)=>{let i=e(t.value,n,t.keywords),c=t.forceScore??i;a.set(r,c),c>0&&(s++,t.groupId&&o.add(t.groupId))})}if(t===!1){this.update({filteredItems:a,visibleGroups:o,filteredCount:s,filterTrigger:this.state.filterTrigger+1});return}let c=this.validateHighlight({filteredItems:a,newSearch:n,prevSearch:e});this.update({filteredItems:a,visibleGroups:o,filteredCount:s,filterTrigger:this.state.filterTrigger+1,highlightedId:c,highlightSource:null})}static useStore(t,n,i){return r(()=>t??new e(n,i)).current}};function oe(){return{open:!1,openProp:void 0,openMethod:null,search:``,searchProp:void 0,normalizedSearch:``,highlightedId:null,highlightSource:null,hasInput:!1,inputActive:!1,pendingSearch:``,filteredItems:/* @__PURE__ */ new Map,visibleGroups:/* @__PURE__ */ new Set,filteredCount:0,filterTrigger:0,virtualized:!1,virtualItemsCount:0,orderedRows:[]}}export{p as A,x as C,c as D,o as E,i as F,s as M,u as N,f as O,a as P,T as S,d as T,j as _,V as a,O as b,z as c,ee as d,M as f,A as g,k as h,W as i,m as j,l as k,F as l,N as m,$ as n,B as o,P as p,te as r,L as s,ae as t,I as u,E as v,h as w,w as x,D as y};
2
+ //# sourceMappingURL=listbox-CnwUlLZA.js.map