@particle-academy/react-fancy 5.61.0 → 5.62.0

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 (156) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/dist/autocomplete.cjs +3 -3
  3. package/dist/autocomplete.js +2 -2
  4. package/dist/breadcrumbs.cjs +3 -3
  5. package/dist/breadcrumbs.js +2 -2
  6. package/dist/{chunk-KNKOSMOQ.cjs → chunk-35S5BTZH.cjs} +4 -4
  7. package/dist/{chunk-KNKOSMOQ.cjs.map → chunk-35S5BTZH.cjs.map} +1 -1
  8. package/dist/{chunk-O4HZVZMY.cjs → chunk-4GOOSZEK.cjs} +86 -24
  9. package/dist/chunk-4GOOSZEK.cjs.map +1 -0
  10. package/dist/{chunk-3I6PE2US.cjs → chunk-4XHG6Q42.cjs} +11 -11
  11. package/dist/{chunk-3I6PE2US.cjs.map → chunk-4XHG6Q42.cjs.map} +1 -1
  12. package/dist/{chunk-3AYRLFNO.js → chunk-A67EDGC7.js} +3 -3
  13. package/dist/{chunk-3AYRLFNO.js.map → chunk-A67EDGC7.js.map} +1 -1
  14. package/dist/{chunk-4HUD33OP.cjs → chunk-A6HWKQ4D.cjs} +4 -4
  15. package/dist/{chunk-4HUD33OP.cjs.map → chunk-A6HWKQ4D.cjs.map} +1 -1
  16. package/dist/{chunk-P6V4QWJK.cjs → chunk-AJPYGRLA.cjs} +4 -4
  17. package/dist/{chunk-P6V4QWJK.cjs.map → chunk-AJPYGRLA.cjs.map} +1 -1
  18. package/dist/{chunk-LMOPAY7Q.js → chunk-ARO2DNGS.js} +3 -3
  19. package/dist/{chunk-LMOPAY7Q.js.map → chunk-ARO2DNGS.js.map} +1 -1
  20. package/dist/{chunk-N7KUGFRG.js → chunk-BTNF3QBR.js} +4 -4
  21. package/dist/{chunk-N7KUGFRG.js.map → chunk-BTNF3QBR.js.map} +1 -1
  22. package/dist/{chunk-K6NADZ7O.cjs → chunk-CMC2TOEQ.cjs} +6 -6
  23. package/dist/{chunk-K6NADZ7O.cjs.map → chunk-CMC2TOEQ.cjs.map} +1 -1
  24. package/dist/{chunk-NDLESFUH.js → chunk-ELFTEJBT.js} +3 -3
  25. package/dist/{chunk-NDLESFUH.js.map → chunk-ELFTEJBT.js.map} +1 -1
  26. package/dist/{chunk-PKFEJWVI.js → chunk-EUVWYDFN.js} +3 -3
  27. package/dist/{chunk-PKFEJWVI.js.map → chunk-EUVWYDFN.js.map} +1 -1
  28. package/dist/{chunk-CEZVKKYW.js → chunk-EVIHLWPG.js} +4 -4
  29. package/dist/{chunk-CEZVKKYW.js.map → chunk-EVIHLWPG.js.map} +1 -1
  30. package/dist/{chunk-ULG4OA2T.js → chunk-FVI4JDLA.js} +3 -3
  31. package/dist/{chunk-ULG4OA2T.js.map → chunk-FVI4JDLA.js.map} +1 -1
  32. package/dist/{chunk-IY6LVALS.js → chunk-GEQKNV7E.js} +3 -3
  33. package/dist/{chunk-IY6LVALS.js.map → chunk-GEQKNV7E.js.map} +1 -1
  34. package/dist/{chunk-4FJWHVC7.js → chunk-GR2WKBER.js} +4 -2
  35. package/dist/chunk-GR2WKBER.js.map +1 -0
  36. package/dist/{chunk-UGXBTIV5.js → chunk-GZ5Z56QK.js} +4 -4
  37. package/dist/{chunk-UGXBTIV5.js.map → chunk-GZ5Z56QK.js.map} +1 -1
  38. package/dist/{chunk-Z5OTOYWI.cjs → chunk-HANQYZW2.cjs} +4 -4
  39. package/dist/{chunk-Z5OTOYWI.cjs.map → chunk-HANQYZW2.cjs.map} +1 -1
  40. package/dist/{chunk-UBEOB55O.js → chunk-JG2DJK5A.js} +3 -3
  41. package/dist/{chunk-UBEOB55O.js.map → chunk-JG2DJK5A.js.map} +1 -1
  42. package/dist/{chunk-J4FKJ4IR.cjs → chunk-LFC2DL6H.cjs} +4 -4
  43. package/dist/{chunk-J4FKJ4IR.cjs.map → chunk-LFC2DL6H.cjs.map} +1 -1
  44. package/dist/{chunk-FU6K7XXZ.cjs → chunk-MKGWHSNV.cjs} +4 -4
  45. package/dist/{chunk-FU6K7XXZ.cjs.map → chunk-MKGWHSNV.cjs.map} +1 -1
  46. package/dist/{chunk-BHUSI56C.js → chunk-MVVHUTXA.js} +3 -3
  47. package/dist/{chunk-BHUSI56C.js.map → chunk-MVVHUTXA.js.map} +1 -1
  48. package/dist/{chunk-UJZJBHMH.js → chunk-NILA2LZY.js} +3 -3
  49. package/dist/{chunk-UJZJBHMH.js.map → chunk-NILA2LZY.js.map} +1 -1
  50. package/dist/{chunk-SHF44YGG.js → chunk-NSJBVV7R.js} +3 -3
  51. package/dist/{chunk-SHF44YGG.js.map → chunk-NSJBVV7R.js.map} +1 -1
  52. package/dist/{chunk-QXMQVLRQ.cjs → chunk-OASSZI6M.cjs} +4 -2
  53. package/dist/chunk-OASSZI6M.cjs.map +1 -0
  54. package/dist/chunk-OUYC6EIL.cjs +66 -0
  55. package/dist/chunk-OUYC6EIL.cjs.map +1 -0
  56. package/dist/{chunk-5JFA7NYE.js → chunk-PXZRYL5I.js} +3 -3
  57. package/dist/{chunk-5JFA7NYE.js.map → chunk-PXZRYL5I.js.map} +1 -1
  58. package/dist/{chunk-TYTENEJQ.cjs → chunk-QNQNGARW.cjs} +6 -6
  59. package/dist/{chunk-TYTENEJQ.cjs.map → chunk-QNQNGARW.cjs.map} +1 -1
  60. package/dist/{chunk-74MEJWMH.js → chunk-QP35Z2WB.js} +3 -3
  61. package/dist/{chunk-74MEJWMH.js.map → chunk-QP35Z2WB.js.map} +1 -1
  62. package/dist/{chunk-NORVXHRU.js → chunk-QTS4Q2NK.js} +3 -3
  63. package/dist/{chunk-NORVXHRU.js.map → chunk-QTS4Q2NK.js.map} +1 -1
  64. package/dist/{chunk-4TTBPEQX.cjs → chunk-QWNZZPFL.cjs} +8 -8
  65. package/dist/{chunk-4TTBPEQX.cjs.map → chunk-QWNZZPFL.cjs.map} +1 -1
  66. package/dist/{chunk-7KTBVKNO.cjs → chunk-R6URPHEP.cjs} +4 -4
  67. package/dist/{chunk-7KTBVKNO.cjs.map → chunk-R6URPHEP.cjs.map} +1 -1
  68. package/dist/{chunk-4JLFIPHZ.js → chunk-RP43ZFZP.js} +8 -3
  69. package/dist/chunk-RP43ZFZP.js.map +1 -0
  70. package/dist/{chunk-RRMQGTVB.cjs → chunk-SYEHWUM5.cjs} +6 -6
  71. package/dist/{chunk-RRMQGTVB.cjs.map → chunk-SYEHWUM5.cjs.map} +1 -1
  72. package/dist/{chunk-IHQHTJNN.js → chunk-SZH7TFME.js} +4 -4
  73. package/dist/{chunk-IHQHTJNN.js.map → chunk-SZH7TFME.js.map} +1 -1
  74. package/dist/{chunk-JOWAS5A5.cjs → chunk-TQGRXJ74.cjs} +9 -9
  75. package/dist/{chunk-JOWAS5A5.cjs.map → chunk-TQGRXJ74.cjs.map} +1 -1
  76. package/dist/{chunk-6GBO7R25.cjs → chunk-UJRMY54A.cjs} +4 -4
  77. package/dist/{chunk-6GBO7R25.cjs.map → chunk-UJRMY54A.cjs.map} +1 -1
  78. package/dist/{chunk-ZPBCZPMD.cjs → chunk-VQJ5LJJH.cjs} +8 -3
  79. package/dist/chunk-VQJ5LJJH.cjs.map +1 -0
  80. package/dist/{chunk-MSGKIWYX.js → chunk-VZNBTCGA.js} +3 -3
  81. package/dist/{chunk-MSGKIWYX.js.map → chunk-VZNBTCGA.js.map} +1 -1
  82. package/dist/{chunk-M6MGQI6G.cjs → chunk-WKPBCB67.cjs} +4 -4
  83. package/dist/{chunk-M6MGQI6G.cjs.map → chunk-WKPBCB67.cjs.map} +1 -1
  84. package/dist/{chunk-QMCMRQ2G.cjs → chunk-WVSHAJKI.cjs} +7 -7
  85. package/dist/{chunk-QMCMRQ2G.cjs.map → chunk-WVSHAJKI.cjs.map} +1 -1
  86. package/dist/chunk-YX6FTJ6N.js +62 -0
  87. package/dist/chunk-YX6FTJ6N.js.map +1 -0
  88. package/dist/{chunk-HRYM76ZE.cjs → chunk-Z6LYBL5L.cjs} +9 -9
  89. package/dist/{chunk-HRYM76ZE.cjs.map → chunk-Z6LYBL5L.cjs.map} +1 -1
  90. package/dist/{chunk-3DMVK74Q.cjs → chunk-Z7SQMQTF.cjs} +4 -4
  91. package/dist/{chunk-3DMVK74Q.cjs.map → chunk-Z7SQMQTF.cjs.map} +1 -1
  92. package/dist/{chunk-NE3BZV3F.js → chunk-ZQ3VXRUY.js} +86 -24
  93. package/dist/chunk-ZQ3VXRUY.js.map +1 -0
  94. package/dist/command.cjs +4 -4
  95. package/dist/command.js +2 -2
  96. package/dist/composer.cjs +6 -6
  97. package/dist/composer.js +4 -4
  98. package/dist/context-menu.cjs +4 -4
  99. package/dist/context-menu.js +2 -2
  100. package/dist/drawer.cjs +4 -4
  101. package/dist/drawer.js +2 -2
  102. package/dist/dropdown.cjs +4 -4
  103. package/dist/dropdown.js +2 -2
  104. package/dist/editor.cjs +6 -6
  105. package/dist/editor.d.cts +1 -1
  106. package/dist/editor.d.ts +1 -1
  107. package/dist/editor.js +4 -4
  108. package/dist/full-screen.cjs +10 -9
  109. package/dist/full-screen.d.cts +5 -2
  110. package/dist/full-screen.d.ts +5 -2
  111. package/dist/full-screen.js +4 -3
  112. package/dist/index.cjs +81 -73
  113. package/dist/index.d.cts +2 -4
  114. package/dist/index.d.ts +2 -4
  115. package/dist/index.js +22 -22
  116. package/dist/input.cjs +5 -5
  117. package/dist/input.js +4 -4
  118. package/dist/inputs.cjs +7 -7
  119. package/dist/inputs.js +5 -5
  120. package/dist/json-editor.cjs +17 -17
  121. package/dist/json-editor.js +6 -6
  122. package/dist/mobile-menu.cjs +5 -5
  123. package/dist/mobile-menu.js +3 -3
  124. package/dist/modal.cjs +4 -4
  125. package/dist/modal.js +2 -2
  126. package/dist/paste-pills.cjs +16 -16
  127. package/dist/paste-pills.js +3 -3
  128. package/dist/popover.cjs +4 -4
  129. package/dist/popover.js +2 -2
  130. package/dist/prompt-input.cjs +6 -6
  131. package/dist/prompt-input.js +5 -5
  132. package/dist/reason-tag.cjs +4 -4
  133. package/dist/reason-tag.js +3 -3
  134. package/dist/select.cjs +3 -3
  135. package/dist/select.js +2 -2
  136. package/dist/sidebar.cjs +2 -2
  137. package/dist/sidebar.js +2 -2
  138. package/dist/styles.css +9 -0
  139. package/dist/styles.css.map +1 -1
  140. package/dist/tooltip.cjs +3 -2
  141. package/dist/tooltip.js +2 -1
  142. package/dist/{use-full-screen-H2j6qXDB.d.ts → use-full-screen-BUke36LI.d.cts} +36 -1
  143. package/dist/{use-full-screen-H2j6qXDB.d.cts → use-full-screen-BUke36LI.d.ts} +36 -1
  144. package/docs/FullScreen.md +15 -4
  145. package/docs/hooks.md +9 -3
  146. package/package.json +1 -1
  147. package/dist/chunk-4FJWHVC7.js.map +0 -1
  148. package/dist/chunk-4JLFIPHZ.js.map +0 -1
  149. package/dist/chunk-JXE5XID6.js +0 -19
  150. package/dist/chunk-JXE5XID6.js.map +0 -1
  151. package/dist/chunk-NE3BZV3F.js.map +0 -1
  152. package/dist/chunk-O4HZVZMY.cjs.map +0 -1
  153. package/dist/chunk-QXMQVLRQ.cjs.map +0 -1
  154. package/dist/chunk-RXDRYWVD.cjs +0 -21
  155. package/dist/chunk-RXDRYWVD.cjs.map +0 -1
  156. package/dist/chunk-ZPBCZPMD.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/inputs/Select/Select.tsx"],"names":["resolveOption","jsx","forwardRef","useId","useFieldMode","useInlineEdit","DisplayValue","Field","InputWrapper","jsxs","cn","inputBaseClasses","inputSizeClasses","dirtyClasses","errorClasses","useState","useEffect","useRef","useFloatingPosition","useCallback","useOutsideClick","useEscapeKey","useMemo","label","opt","Portal"],"mappings":"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","file":"chunk-M6MGQI6G.cjs","sourcesContent":["import { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Field } from \"../Field\";\nimport { InputWrapper } from \"../InputWrapper\";\nimport { Portal } from \"../../Portal\";\nimport { useFloatingPosition } from \"../../../hooks/use-floating-position\";\nimport { useOutsideClick } from \"../../../hooks/use-outside-click\";\nimport { useEscapeKey } from \"../../../hooks/use-escape-key\";\nimport {\n dirtyClasses,\n errorClasses,\n inputBaseClasses,\n inputSizeClasses,\n resolveOption,\n} from \"../inputs.utils\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport type { InputOption, InputOptionGroup } from \"../inputs.types\";\nimport type { SelectProps } from \"./Select.types\";\n\nfunction isOptionGroup(\n item: InputOption | InputOptionGroup,\n): item is InputOptionGroup {\n return typeof item === \"object\" && \"options\" in item;\n}\n\nfunction flattenOptions(list: (InputOption | InputOptionGroup)[]): InputOption[] {\n const flat: InputOption[] = [];\n for (const item of list) {\n if (isOptionGroup(item)) {\n flat.push(...item.options);\n } else {\n flat.push(item);\n }\n }\n return flat;\n}\n\nfunction renderNativeOption(option: InputOption, index: number) {\n const resolved = resolveOption(option);\n return (\n <option\n key={`${resolved.value}-${index}`}\n value={resolved.value as string}\n disabled={resolved.disabled}\n >\n {resolved.label}\n </option>\n );\n}\n\n// ── Native variant ──────────────────────────────────────────────────────\n\nconst NativeSelect = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n list,\n placeholder,\n prefix,\n suffix,\n prefixPosition,\n suffixPosition,\n mode,\n onValueChange,\n onChange,\n value,\n defaultValue,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const selectId = id ?? autoId;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n\n if (!showControl) {\n const current = (value ?? defaultValue) as string | undefined;\n const opt = flattenOptions(list)\n .map((o) => resolveOption(o))\n .find((o) => o.value === current);\n const display = (\n <DisplayValue\n size={size}\n leading={prefix}\n trailing={suffix}\n interactive={interactive}\n onActivate={enterEdit}\n >\n {opt?.label ?? current}\n </DisplayValue>\n );\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {display}\n </Field>\n );\n }\n return display;\n }\n\n // When a placeholder is provided but no value/defaultValue, default to \"\"\n // so the disabled placeholder <option> is the initial selection instead of\n // the browser auto-picking the first real option.\n const isControlled = value !== undefined;\n const resolvedDefault =\n !isControlled && defaultValue === undefined && placeholder ? \"\" : defaultValue;\n\n const select = (\n <InputWrapper\n prefix={prefix}\n suffix={suffix}\n prefixPosition={prefixPosition}\n suffixPosition={suffixPosition}\n size={size}\n >\n <select\n data-react-fancy-select=\"\"\n ref={ref}\n id={selectId}\n disabled={disabled}\n required={required}\n className={cn(\n inputBaseClasses,\n inputSizeClasses[size],\n dirtyClasses(dirty),\n errorClasses(error),\n \"w-full appearance-none bg-no-repeat bg-[length:16px] bg-[right_8px_center]\",\n \"bg-[url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2020%2020%22%20fill%3D%22%236b7280%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20d%3D%22M5.23%207.21a.75.75%200%20011.06.02L10%2011.168l3.71-3.938a.75.75%200%20111.08%201.04l-4.25%204.5a.75.75%200%2001-1.08%200l-4.25-4.5a.75.75%200%2001.02-1.06z%22%20clip-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E')]\",\n \"pr-8\",\n className,\n )}\n onChange={(e) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n }}\n {...props}\n {...(isControlled ? { value } : { defaultValue: resolvedDefault })}\n autoFocus={interactive || props.autoFocus}\n onBlur={(e) => {\n props.onBlur?.(e);\n if (interactive) exitEdit();\n }}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {list.map((item, index) =>\n isOptionGroup(item) ? (\n <optgroup key={`group-${index}`} label={item.label}>\n {item.options.map((opt, optIndex) =>\n renderNativeOption(opt, optIndex),\n )}\n </optgroup>\n ) : (\n renderNativeOption(item, index)\n ),\n )}\n </select>\n </InputWrapper>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {select}\n </Field>\n );\n }\n\n return select;\n },\n);\n\nNativeSelect.displayName = \"NativeSelect\";\n\n// ── Listbox variant ─────────────────────────────────────────────────────\n\nconst ListboxSelect = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n list,\n placeholder = \"Select...\",\n multiple = false,\n values: controlledValues,\n defaultValues,\n onValueChange,\n onValuesChange,\n searchable = false,\n creatable = false,\n onCreate,\n createLabel = \"Create\",\n selectedSuffix = \"selected\",\n indicator = \"check\",\n mode,\n value: controlledSingleValue,\n defaultValue: defaultSingleValue,\n },\n _ref,\n ) => {\n const autoId = useId();\n const selectId = id ?? autoId;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n\n // Creatable implies a text input, which is also the search input.\n const textInputEnabled = searchable || creatable;\n\n // ── State ──────────────────────────────────────────────\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(-1);\n const [createdOptions, setCreatedOptions] = useState<InputOption[]>([]);\n\n // Single-select state\n const [singleValue, setSingleValue] = useState<string>(\n (controlledSingleValue as string) ?? (defaultSingleValue as string) ?? \"\",\n );\n const currentSingle = (controlledSingleValue as string) ?? singleValue;\n\n // Multi-select state\n const [multiValues, setMultiValues] = useState<string[]>(\n controlledValues ?? defaultValues ?? [],\n );\n const currentMulti = controlledValues ?? multiValues;\n\n // Sync controlled values\n useEffect(() => {\n if (controlledValues) setMultiValues(controlledValues);\n }, [controlledValues]);\n useEffect(() => {\n if (controlledSingleValue !== undefined) setSingleValue(controlledSingleValue as string);\n }, [controlledSingleValue]);\n\n // ── Refs ───────────────────────────────────────────────\n const anchorRef = useRef<HTMLButtonElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const position = useFloatingPosition(anchorRef, listRef, {\n placement: \"bottom-start\",\n offset: 4,\n enabled: open,\n });\n\n const close = useCallback(() => {\n setOpen(false);\n setSearch(\"\");\n setActiveIndex(-1);\n }, []);\n\n // Outside-click guards the dropdown (in a Portal) against its own clicks,\n // with the trigger button ignored since it toggles open/closed itself.\n useOutsideClick(listRef, close, open, anchorRef);\n useEscapeKey(close, open);\n\n // Focus text input on open\n useEffect(() => {\n if (open && textInputEnabled) {\n requestAnimationFrame(() => searchRef.current?.focus());\n }\n }, [open, textInputEnabled]);\n\n // ── Options ────────────────────────────────────────────\n const resolvedOptions = useMemo(() => {\n const base = flattenOptions(list).map(resolveOption);\n const created = createdOptions.map(resolveOption);\n return [...base, ...created];\n }, [list, createdOptions]);\n\n const filtered = search\n ? resolvedOptions.filter((o) =>\n o.label.toLowerCase().includes(search.toLowerCase()),\n )\n : resolvedOptions;\n\n // Exact-match check to decide whether to show the \"Create X\" row\n const canCreate =\n creatable &&\n search.trim().length > 0 &&\n !resolvedOptions.some(\n (o) =>\n o.label.toLowerCase() === search.trim().toLowerCase() ||\n o.value === search.trim(),\n );\n\n // ── Selection ──────────────────────────────────────────\n const isSelected = (value: string): boolean => {\n if (multiple) return currentMulti.includes(value);\n return currentSingle === value;\n };\n\n const toggleOption = useCallback(\n (value: string) => {\n if (multiple) {\n const next = currentMulti.includes(value)\n ? currentMulti.filter((v) => v !== value)\n : [...currentMulti, value];\n setMultiValues(next);\n onValuesChange?.(next);\n } else {\n setSingleValue(value);\n onValueChange?.(value);\n close();\n }\n },\n [multiple, currentMulti, onValuesChange, onValueChange, close],\n );\n\n const handleCreate = useCallback(() => {\n const label = search.trim();\n if (!label) return;\n const value = label;\n const newOption: InputOption = { value, label };\n setCreatedOptions((prev) => [...prev, newOption]);\n onCreate?.(label);\n setSearch(\"\");\n if (multiple) {\n const next = [...currentMulti, value];\n setMultiValues(next);\n onValuesChange?.(next);\n // Keep dropdown open for multi-select; refocus input\n requestAnimationFrame(() => searchRef.current?.focus());\n } else {\n setSingleValue(value);\n onValueChange?.(value);\n close();\n }\n }, [search, multiple, currentMulti, onCreate, onValuesChange, onValueChange, close]);\n\n // ── Display text ───────────────────────────────────────\n const getDisplayText = (): string => {\n if (multiple) {\n if (currentMulti.length === 0) return placeholder;\n if (currentMulti.length === 1) {\n const opt = resolvedOptions.find((o) => o.value === currentMulti[0]);\n return opt?.label ?? currentMulti[0];\n }\n return `${currentMulti.length} ${selectedSuffix}`;\n }\n if (!currentSingle) return placeholder;\n const opt = resolvedOptions.find((o) => o.value === currentSingle);\n return opt?.label ?? currentSingle;\n };\n\n const hasValue = multiple ? currentMulti.length > 0 : !!currentSingle;\n\n // ── Keyboard ───────────────────────────────────────────\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!open) {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setOpen(true);\n }\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === \"Enter\") {\n if (activeIndex >= 0) {\n e.preventDefault();\n const item = filtered[activeIndex];\n if (item && !item.disabled) toggleOption(item.value as string);\n } else if (canCreate) {\n e.preventDefault();\n handleCreate();\n }\n }\n };\n\n // ── View mode ──────────────────────────────────────────\n if (!showControl) {\n const labels = multiple\n ? currentMulti.map(\n (v) => resolvedOptions.find((o) => o.value === v)?.label ?? v,\n )\n : currentSingle\n ? [resolvedOptions.find((o) => o.value === currentSingle)?.label ?? currentSingle]\n : [];\n const display = (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {labels.join(\", \")}\n </DisplayValue>\n );\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {display}\n </Field>\n );\n }\n return display;\n }\n\n // ── Render ─────────────────────────────────────────────\n const trigger = (\n <button\n ref={anchorRef}\n type=\"button\"\n id={selectId}\n disabled={disabled}\n autoFocus={interactive}\n onClick={() => setOpen((o) => !o)}\n onKeyDown={handleKeyDown}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n data-react-fancy-select=\"\"\n data-variant=\"listbox\"\n className={cn(\n inputBaseClasses,\n inputSizeClasses[size],\n dirtyClasses(dirty),\n errorClasses(error),\n \"flex w-full cursor-pointer items-center justify-between gap-2 text-left\",\n !hasValue && \"text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\",\n className,\n )}\n >\n <span className=\"truncate\">{getDisplayText()}</span>\n <svg\n className={cn(\"h-4 w-4 shrink-0 text-zinc-400 transition-transform\", open && \"rotate-180\")}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n );\n\n const dropdown = open && (\n <Portal>\n <div\n ref={listRef}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n className=\"fixed z-50 max-h-60 min-w-[8rem] overflow-y-auto rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:shadow-zinc-950/50 fancy-scale-in\"\n style={{\n left: position.x,\n top: position.y,\n width: anchorRef.current?.offsetWidth,\n }}\n >\n {textInputEnabled && (\n <div className=\"px-2 pb-1 pt-1\">\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setActiveIndex(-1);\n }}\n onKeyDown={handleKeyDown}\n placeholder={creatable && !searchable ? \"Type to add…\" : \"Search…\"}\n className=\"w-full rounded-md border-0 bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] px-2.5 py-1.5 text-sm text-[color:var(--fancy-text,var(--color-zinc-900))] placeholder:text-[color:var(--fancy-text-faint,var(--color-zinc-400))] outline-none dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))] dark:placeholder:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\"\n />\n </div>\n )}\n\n {canCreate && (\n <button\n type=\"button\"\n onClick={handleCreate}\n className=\"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-sm text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-500/10\"\n >\n <svg className=\"h-4 w-4 shrink-0\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 3a.75.75 0 01.75.75v5.5h5.5a.75.75 0 010 1.5h-5.5v5.5a.75.75 0 01-1.5 0v-5.5h-5.5a.75.75 0 010-1.5h5.5v-5.5A.75.75 0 0110 3z\" clipRule=\"evenodd\" />\n </svg>\n <span className=\"truncate\">{createLabel} &quot;{search.trim()}&quot;</span>\n </button>\n )}\n\n {filtered.length === 0 && !canCreate ? (\n <div className=\"px-3 py-2 text-sm text-zinc-400\">No results found</div>\n ) : filtered.length === 0 ? null : (\n filtered.map((option, i) => {\n const selected = isSelected(option.value as string);\n return (\n <button\n key={option.value as string}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n disabled={option.disabled}\n onClick={() => toggleOption(option.value as string)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n i === activeIndex\n ? \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n : \"hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))]\",\n selected\n ? \"text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\"\n : \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {/* Indicator */}\n {indicator === \"checkbox\" ? (\n <span\n className={cn(\n \"flex h-4 w-4 shrink-0 items-center justify-center rounded border transition-colors\",\n selected\n ? \"border-blue-500 bg-blue-500 text-white dark:border-blue-400 dark:bg-blue-400\"\n : \"border-zinc-300 dark:border-zinc-600\",\n )}\n >\n {selected && (\n <svg className=\"h-3 w-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"2.5 6 5 8.5 9.5 3.5\" />\n </svg>\n )}\n </span>\n ) : (\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">\n {selected && (\n <svg className=\"h-4 w-4 text-blue-500 dark:text-blue-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clipRule=\"evenodd\" />\n </svg>\n )}\n </span>\n )}\n\n {/* Label + description */}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{option.label}</span>\n {option.description && (\n <span className=\"block truncate text-xs text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\">{option.description}</span>\n )}\n </span>\n </button>\n );\n })\n )}\n </div>\n </Portal>\n );\n\n const content = (\n <div\n className=\"relative\"\n onBlur={(e) => {\n // The popover is portaled (focus moves out of this wrapper), so only\n // exit edit when the dropdown is closed and focus has truly left.\n if (interactive && !open && !e.currentTarget.contains(e.relatedTarget as Node)) {\n exitEdit();\n }\n }}\n >\n {trigger}\n {dropdown}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {content}\n </Field>\n );\n }\n\n return content;\n },\n);\n\nListboxSelect.displayName = \"ListboxSelect\";\n\n// ── Public component ────────────────────────────────────────────────────\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (props, ref) => {\n const variant = props.variant ?? (props.multiple ? \"listbox\" : \"native\");\n\n if (variant === \"listbox\") {\n return <ListboxSelect {...props} ref={ref} />;\n }\n return <NativeSelect {...props} ref={ref} />;\n },\n);\n\nSelect.displayName = \"Select\";\n"]}
1
+ {"version":3,"sources":["../src/components/inputs/Select/Select.tsx"],"names":["resolveOption","jsx","forwardRef","useId","useFieldMode","useInlineEdit","DisplayValue","Field","InputWrapper","jsxs","cn","inputBaseClasses","inputSizeClasses","dirtyClasses","errorClasses","useState","useEffect","useRef","useFloatingPosition","useCallback","useOutsideClick","useEscapeKey","useMemo","label","opt","Portal"],"mappings":"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","file":"chunk-WKPBCB67.cjs","sourcesContent":["import { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Field } from \"../Field\";\nimport { InputWrapper } from \"../InputWrapper\";\nimport { Portal } from \"../../Portal\";\nimport { useFloatingPosition } from \"../../../hooks/use-floating-position\";\nimport { useOutsideClick } from \"../../../hooks/use-outside-click\";\nimport { useEscapeKey } from \"../../../hooks/use-escape-key\";\nimport {\n dirtyClasses,\n errorClasses,\n inputBaseClasses,\n inputSizeClasses,\n resolveOption,\n} from \"../inputs.utils\";\nimport { useFieldMode } from \"../mode/FieldMode.context\";\nimport { DisplayValue } from \"../mode/DisplayValue\";\nimport { useInlineEdit } from \"../mode/useInlineEdit\";\nimport type { InputOption, InputOptionGroup } from \"../inputs.types\";\nimport type { SelectProps } from \"./Select.types\";\n\nfunction isOptionGroup(\n item: InputOption | InputOptionGroup,\n): item is InputOptionGroup {\n return typeof item === \"object\" && \"options\" in item;\n}\n\nfunction flattenOptions(list: (InputOption | InputOptionGroup)[]): InputOption[] {\n const flat: InputOption[] = [];\n for (const item of list) {\n if (isOptionGroup(item)) {\n flat.push(...item.options);\n } else {\n flat.push(item);\n }\n }\n return flat;\n}\n\nfunction renderNativeOption(option: InputOption, index: number) {\n const resolved = resolveOption(option);\n return (\n <option\n key={`${resolved.value}-${index}`}\n value={resolved.value as string}\n disabled={resolved.disabled}\n >\n {resolved.label}\n </option>\n );\n}\n\n// ── Native variant ──────────────────────────────────────────────────────\n\nconst NativeSelect = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n list,\n placeholder,\n prefix,\n suffix,\n prefixPosition,\n suffixPosition,\n mode,\n onValueChange,\n onChange,\n value,\n defaultValue,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const selectId = id ?? autoId;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n\n if (!showControl) {\n const current = (value ?? defaultValue) as string | undefined;\n const opt = flattenOptions(list)\n .map((o) => resolveOption(o))\n .find((o) => o.value === current);\n const display = (\n <DisplayValue\n size={size}\n leading={prefix}\n trailing={suffix}\n interactive={interactive}\n onActivate={enterEdit}\n >\n {opt?.label ?? current}\n </DisplayValue>\n );\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {display}\n </Field>\n );\n }\n return display;\n }\n\n // When a placeholder is provided but no value/defaultValue, default to \"\"\n // so the disabled placeholder <option> is the initial selection instead of\n // the browser auto-picking the first real option.\n const isControlled = value !== undefined;\n const resolvedDefault =\n !isControlled && defaultValue === undefined && placeholder ? \"\" : defaultValue;\n\n const select = (\n <InputWrapper\n prefix={prefix}\n suffix={suffix}\n prefixPosition={prefixPosition}\n suffixPosition={suffixPosition}\n size={size}\n >\n <select\n data-react-fancy-select=\"\"\n ref={ref}\n id={selectId}\n disabled={disabled}\n required={required}\n className={cn(\n inputBaseClasses,\n inputSizeClasses[size],\n dirtyClasses(dirty),\n errorClasses(error),\n \"w-full appearance-none bg-no-repeat bg-[length:16px] bg-[right_8px_center]\",\n \"bg-[url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2020%2020%22%20fill%3D%22%236b7280%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20d%3D%22M5.23%207.21a.75.75%200%20011.06.02L10%2011.168l3.71-3.938a.75.75%200%20111.08%201.04l-4.25%204.5a.75.75%200%2001-1.08%200l-4.25-4.5a.75.75%200%2001.02-1.06z%22%20clip-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E')]\",\n \"pr-8\",\n className,\n )}\n onChange={(e) => {\n onChange?.(e);\n onValueChange?.(e.target.value);\n }}\n {...props}\n {...(isControlled ? { value } : { defaultValue: resolvedDefault })}\n autoFocus={interactive || props.autoFocus}\n onBlur={(e) => {\n props.onBlur?.(e);\n if (interactive) exitEdit();\n }}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {list.map((item, index) =>\n isOptionGroup(item) ? (\n <optgroup key={`group-${index}`} label={item.label}>\n {item.options.map((opt, optIndex) =>\n renderNativeOption(opt, optIndex),\n )}\n </optgroup>\n ) : (\n renderNativeOption(item, index)\n ),\n )}\n </select>\n </InputWrapper>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {select}\n </Field>\n );\n }\n\n return select;\n },\n);\n\nNativeSelect.displayName = \"NativeSelect\";\n\n// ── Listbox variant ─────────────────────────────────────────────────────\n\nconst ListboxSelect = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n size = \"md\",\n dirty,\n error,\n label,\n labelHidden,\n description,\n required,\n disabled,\n className,\n id,\n list,\n placeholder = \"Select...\",\n multiple = false,\n values: controlledValues,\n defaultValues,\n onValueChange,\n onValuesChange,\n searchable = false,\n creatable = false,\n onCreate,\n createLabel = \"Create\",\n selectedSuffix = \"selected\",\n indicator = \"check\",\n mode,\n value: controlledSingleValue,\n defaultValue: defaultSingleValue,\n },\n _ref,\n ) => {\n const autoId = useId();\n const selectId = id ?? autoId;\n const resolvedMode = useFieldMode(mode);\n const { showControl, interactive, enterEdit, exitEdit } = useInlineEdit(resolvedMode, disabled);\n\n // Creatable implies a text input, which is also the search input.\n const textInputEnabled = searchable || creatable;\n\n // ── State ──────────────────────────────────────────────\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(-1);\n const [createdOptions, setCreatedOptions] = useState<InputOption[]>([]);\n\n // Single-select state\n const [singleValue, setSingleValue] = useState<string>(\n (controlledSingleValue as string) ?? (defaultSingleValue as string) ?? \"\",\n );\n const currentSingle = (controlledSingleValue as string) ?? singleValue;\n\n // Multi-select state\n const [multiValues, setMultiValues] = useState<string[]>(\n controlledValues ?? defaultValues ?? [],\n );\n const currentMulti = controlledValues ?? multiValues;\n\n // Sync controlled values\n useEffect(() => {\n if (controlledValues) setMultiValues(controlledValues);\n }, [controlledValues]);\n useEffect(() => {\n if (controlledSingleValue !== undefined) setSingleValue(controlledSingleValue as string);\n }, [controlledSingleValue]);\n\n // ── Refs ───────────────────────────────────────────────\n const anchorRef = useRef<HTMLButtonElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const position = useFloatingPosition(anchorRef, listRef, {\n placement: \"bottom-start\",\n offset: 4,\n enabled: open,\n });\n\n const close = useCallback(() => {\n setOpen(false);\n setSearch(\"\");\n setActiveIndex(-1);\n }, []);\n\n // Outside-click guards the dropdown (in a Portal) against its own clicks,\n // with the trigger button ignored since it toggles open/closed itself.\n useOutsideClick(listRef, close, open, anchorRef);\n useEscapeKey(close, open);\n\n // Focus text input on open\n useEffect(() => {\n if (open && textInputEnabled) {\n requestAnimationFrame(() => searchRef.current?.focus());\n }\n }, [open, textInputEnabled]);\n\n // ── Options ────────────────────────────────────────────\n const resolvedOptions = useMemo(() => {\n const base = flattenOptions(list).map(resolveOption);\n const created = createdOptions.map(resolveOption);\n return [...base, ...created];\n }, [list, createdOptions]);\n\n const filtered = search\n ? resolvedOptions.filter((o) =>\n o.label.toLowerCase().includes(search.toLowerCase()),\n )\n : resolvedOptions;\n\n // Exact-match check to decide whether to show the \"Create X\" row\n const canCreate =\n creatable &&\n search.trim().length > 0 &&\n !resolvedOptions.some(\n (o) =>\n o.label.toLowerCase() === search.trim().toLowerCase() ||\n o.value === search.trim(),\n );\n\n // ── Selection ──────────────────────────────────────────\n const isSelected = (value: string): boolean => {\n if (multiple) return currentMulti.includes(value);\n return currentSingle === value;\n };\n\n const toggleOption = useCallback(\n (value: string) => {\n if (multiple) {\n const next = currentMulti.includes(value)\n ? currentMulti.filter((v) => v !== value)\n : [...currentMulti, value];\n setMultiValues(next);\n onValuesChange?.(next);\n } else {\n setSingleValue(value);\n onValueChange?.(value);\n close();\n }\n },\n [multiple, currentMulti, onValuesChange, onValueChange, close],\n );\n\n const handleCreate = useCallback(() => {\n const label = search.trim();\n if (!label) return;\n const value = label;\n const newOption: InputOption = { value, label };\n setCreatedOptions((prev) => [...prev, newOption]);\n onCreate?.(label);\n setSearch(\"\");\n if (multiple) {\n const next = [...currentMulti, value];\n setMultiValues(next);\n onValuesChange?.(next);\n // Keep dropdown open for multi-select; refocus input\n requestAnimationFrame(() => searchRef.current?.focus());\n } else {\n setSingleValue(value);\n onValueChange?.(value);\n close();\n }\n }, [search, multiple, currentMulti, onCreate, onValuesChange, onValueChange, close]);\n\n // ── Display text ───────────────────────────────────────\n const getDisplayText = (): string => {\n if (multiple) {\n if (currentMulti.length === 0) return placeholder;\n if (currentMulti.length === 1) {\n const opt = resolvedOptions.find((o) => o.value === currentMulti[0]);\n return opt?.label ?? currentMulti[0];\n }\n return `${currentMulti.length} ${selectedSuffix}`;\n }\n if (!currentSingle) return placeholder;\n const opt = resolvedOptions.find((o) => o.value === currentSingle);\n return opt?.label ?? currentSingle;\n };\n\n const hasValue = multiple ? currentMulti.length > 0 : !!currentSingle;\n\n // ── Keyboard ───────────────────────────────────────────\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!open) {\n if (e.key === \"ArrowDown\" || e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n setOpen(true);\n }\n return;\n }\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIndex((i) => Math.min(i + 1, filtered.length - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === \"Enter\") {\n if (activeIndex >= 0) {\n e.preventDefault();\n const item = filtered[activeIndex];\n if (item && !item.disabled) toggleOption(item.value as string);\n } else if (canCreate) {\n e.preventDefault();\n handleCreate();\n }\n }\n };\n\n // ── View mode ──────────────────────────────────────────\n if (!showControl) {\n const labels = multiple\n ? currentMulti.map(\n (v) => resolvedOptions.find((o) => o.value === v)?.label ?? v,\n )\n : currentSingle\n ? [resolvedOptions.find((o) => o.value === currentSingle)?.label ?? currentSingle]\n : [];\n const display = (\n <DisplayValue size={size} interactive={interactive} onActivate={enterEdit}>\n {labels.join(\", \")}\n </DisplayValue>\n );\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {display}\n </Field>\n );\n }\n return display;\n }\n\n // ── Render ─────────────────────────────────────────────\n const trigger = (\n <button\n ref={anchorRef}\n type=\"button\"\n id={selectId}\n disabled={disabled}\n autoFocus={interactive}\n onClick={() => setOpen((o) => !o)}\n onKeyDown={handleKeyDown}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n data-react-fancy-select=\"\"\n data-variant=\"listbox\"\n className={cn(\n inputBaseClasses,\n inputSizeClasses[size],\n dirtyClasses(dirty),\n errorClasses(error),\n \"flex w-full cursor-pointer items-center justify-between gap-2 text-left\",\n !hasValue && \"text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\",\n className,\n )}\n >\n <span className=\"truncate\">{getDisplayText()}</span>\n <svg\n className={cn(\"h-4 w-4 shrink-0 text-zinc-400 transition-transform\", open && \"rotate-180\")}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n );\n\n const dropdown = open && (\n <Portal>\n <div\n ref={listRef}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n className=\"fixed z-50 max-h-60 min-w-[8rem] overflow-y-auto rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-1 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))] dark:shadow-zinc-950/50 fancy-scale-in\"\n style={{\n left: position.x,\n top: position.y,\n width: anchorRef.current?.offsetWidth,\n }}\n >\n {textInputEnabled && (\n <div className=\"px-2 pb-1 pt-1\">\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setActiveIndex(-1);\n }}\n onKeyDown={handleKeyDown}\n placeholder={creatable && !searchable ? \"Type to add…\" : \"Search…\"}\n className=\"w-full rounded-md border-0 bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] px-2.5 py-1.5 text-sm text-[color:var(--fancy-text,var(--color-zinc-900))] placeholder:text-[color:var(--fancy-text-faint,var(--color-zinc-400))] outline-none dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))] dark:placeholder:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\"\n />\n </div>\n )}\n\n {canCreate && (\n <button\n type=\"button\"\n onClick={handleCreate}\n className=\"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-sm text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-500/10\"\n >\n <svg className=\"h-4 w-4 shrink-0\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 3a.75.75 0 01.75.75v5.5h5.5a.75.75 0 010 1.5h-5.5v5.5a.75.75 0 01-1.5 0v-5.5h-5.5a.75.75 0 010-1.5h5.5v-5.5A.75.75 0 0110 3z\" clipRule=\"evenodd\" />\n </svg>\n <span className=\"truncate\">{createLabel} &quot;{search.trim()}&quot;</span>\n </button>\n )}\n\n {filtered.length === 0 && !canCreate ? (\n <div className=\"px-3 py-2 text-sm text-zinc-400\">No results found</div>\n ) : filtered.length === 0 ? null : (\n filtered.map((option, i) => {\n const selected = isSelected(option.value as string);\n return (\n <button\n key={option.value as string}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n disabled={option.disabled}\n onClick={() => toggleOption(option.value as string)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n i === activeIndex\n ? \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n : \"hover:bg-[color:var(--fancy-surface-hover,var(--color-zinc-50))] dark:hover:bg-[color:var(--fancy-surface-hover-dark,color-mix(in_oklab,var(--color-zinc-800)_50%,transparent))]\",\n selected\n ? \"text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\"\n : \"text-[color:var(--fancy-text-soft,var(--color-zinc-700))] dark:text-[color:var(--fancy-text-soft-dark,var(--color-zinc-300))]\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n {/* Indicator */}\n {indicator === \"checkbox\" ? (\n <span\n className={cn(\n \"flex h-4 w-4 shrink-0 items-center justify-center rounded border transition-colors\",\n selected\n ? \"border-blue-500 bg-blue-500 text-white dark:border-blue-400 dark:bg-blue-400\"\n : \"border-zinc-300 dark:border-zinc-600\",\n )}\n >\n {selected && (\n <svg className=\"h-3 w-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"2.5 6 5 8.5 9.5 3.5\" />\n </svg>\n )}\n </span>\n ) : (\n <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">\n {selected && (\n <svg className=\"h-4 w-4 text-blue-500 dark:text-blue-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z\" clipRule=\"evenodd\" />\n </svg>\n )}\n </span>\n )}\n\n {/* Label + description */}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{option.label}</span>\n {option.description && (\n <span className=\"block truncate text-xs text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\">{option.description}</span>\n )}\n </span>\n </button>\n );\n })\n )}\n </div>\n </Portal>\n );\n\n const content = (\n <div\n className=\"relative\"\n onBlur={(e) => {\n // The popover is portaled (focus moves out of this wrapper), so only\n // exit edit when the dropdown is closed and focus has truly left.\n if (interactive && !open && !e.currentTarget.contains(e.relatedTarget as Node)) {\n exitEdit();\n }\n }}\n >\n {trigger}\n {dropdown}\n </div>\n );\n\n if (label || error || description) {\n return (\n <Field\n label={label}\n labelHidden={labelHidden}\n description={description}\n error={error}\n required={required}\n htmlFor={selectId}\n size={size}\n >\n {content}\n </Field>\n );\n }\n\n return content;\n },\n);\n\nListboxSelect.displayName = \"ListboxSelect\";\n\n// ── Public component ────────────────────────────────────────────────────\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (props, ref) => {\n const variant = props.variant ?? (props.multiple ? \"listbox\" : \"native\");\n\n if (variant === \"listbox\") {\n return <ListboxSelect {...props} ref={ref} />;\n }\n return <NativeSelect {...props} ref={ref} />;\n },\n);\n\nSelect.displayName = \"Select\";\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkZPBCZPMD_cjs = require('./chunk-ZPBCZPMD.cjs');
4
- var chunkO4HZVZMY_cjs = require('./chunk-O4HZVZMY.cjs');
3
+ var chunkVQJ5LJJH_cjs = require('./chunk-VQJ5LJJH.cjs');
4
+ var chunk4GOOSZEK_cjs = require('./chunk-4GOOSZEK.cjs');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
 
7
7
  function FullScreenRoot({
@@ -18,7 +18,7 @@ function FullScreenRoot({
18
18
  onKeyDown,
19
19
  ...rest
20
20
  }) {
21
- const fs = chunkO4HZVZMY_cjs.useFullScreen({
21
+ const fs = chunk4GOOSZEK_cjs.useFullScreen({
22
22
  fullScreen,
23
23
  defaultFullScreen,
24
24
  onFullScreenChange,
@@ -29,7 +29,7 @@ function FullScreenRoot({
29
29
  labels
30
30
  });
31
31
  const { style: overlayStyle, onKeyDown: fsKeyDown, ...target } = fs.targetProps;
32
- return /* @__PURE__ */ jsxRuntime.jsx(chunkZPBCZPMD_cjs.FullScreenProvider, { value: fs, children: /* @__PURE__ */ jsxRuntime.jsx(
32
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkVQJ5LJJH_cjs.FullScreenProvider, { value: fs, children: /* @__PURE__ */ jsxRuntime.jsx(
33
33
  "div",
34
34
  {
35
35
  "data-react-fancy-fullscreen": "",
@@ -45,9 +45,9 @@ function FullScreenRoot({
45
45
  ) });
46
46
  }
47
47
  var FullScreen = Object.assign(FullScreenRoot, {
48
- Toggle: chunkZPBCZPMD_cjs.FullScreenToggle
48
+ Toggle: chunkVQJ5LJJH_cjs.FullScreenToggle
49
49
  });
50
50
 
51
51
  exports.FullScreen = FullScreen;
52
- //# sourceMappingURL=chunk-QMCMRQ2G.cjs.map
53
- //# sourceMappingURL=chunk-QMCMRQ2G.cjs.map
52
+ //# sourceMappingURL=chunk-WVSHAJKI.cjs.map
53
+ //# sourceMappingURL=chunk-WVSHAJKI.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/FullScreen/FullScreen.tsx"],"names":["useFullScreen","jsx","FullScreenProvider","FullScreenToggle"],"mappings":";;;;;;AAmBA,SAAS,cAAA,CAAe;AAAA,EACtB,QAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,IAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoB;AAClB,EAAA,MAAM,KAAKA,+BAAA,CAA8B;AAAA,IACvC,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,IAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAM,EAAE,OAAO,YAAA,EAAc,SAAA,EAAW,WAAW,GAAG,MAAA,KAAW,EAAA,CAAG,WAAA;AAEpE,EAAA,uBACEC,cAAA,CAACC,oCAAA,EAAA,EAAmB,KAAA,EAAO,EAAA,EACzB,QAAA,kBAAAD,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,6BAAA,EAA4B,EAAA;AAAA,MAC3B,GAAG,IAAA;AAAA,MACH,GAAG,MAAA;AAAA,MACJ,OAAO,YAAA,GAAe,EAAE,GAAG,KAAA,EAAO,GAAG,cAAa,GAAI,KAAA;AAAA,MACtD,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,SAAA,GAAY,CAAC,CAAA;AACb,QAAA,SAAA,CAAU,CAAC,CAAA;AAAA,MACb,CAAA;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAEO,IAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,cAAA,EAAgB;AAAA,EACtD,MAAA,EAAQE;AACV,CAAC","file":"chunk-QMCMRQ2G.cjs","sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { useFullScreen, type UseFullScreenOptions } from \"../../hooks/use-full-screen\";\nimport { FullScreenProvider } from \"./FullScreen.context\";\nimport { FullScreenToggle } from \"./FullScreenToggle\";\n\nexport interface FullScreenProps\n extends UseFullScreenOptions,\n Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n children?: ReactNode;\n}\n\n/**\n * A box that can take over the viewport. Controlled with `fullScreen` +\n * `onFullScreenChange`, or uncontrolled with `defaultFullScreen`; put a\n * `<FullScreen.Toggle />` anywhere inside.\n *\n * Give it a background: while active it covers the page, and in `native` mode\n * the browser paints black behind anything transparent.\n */\nfunction FullScreenRoot({\n children,\n fullScreen,\n defaultFullScreen,\n onFullScreenChange,\n mode,\n closeOnEscape,\n lockScroll,\n zIndex,\n labels,\n style,\n onKeyDown,\n ...rest\n}: FullScreenProps) {\n const fs = useFullScreen<HTMLDivElement>({\n fullScreen,\n defaultFullScreen,\n onFullScreenChange,\n mode,\n closeOnEscape,\n lockScroll,\n zIndex,\n labels,\n });\n const { style: overlayStyle, onKeyDown: fsKeyDown, ...target } = fs.targetProps;\n\n return (\n <FullScreenProvider value={fs}>\n <div\n data-react-fancy-fullscreen=\"\"\n {...rest}\n {...target}\n style={overlayStyle ? { ...style, ...overlayStyle } : style}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n fsKeyDown(e);\n }}\n >\n {children}\n </div>\n </FullScreenProvider>\n );\n}\n\nexport const FullScreen = Object.assign(FullScreenRoot, {\n Toggle: FullScreenToggle,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/FullScreen/FullScreen.tsx"],"names":["useFullScreen","jsx","FullScreenProvider","FullScreenToggle"],"mappings":";;;;;;AAmBA,SAAS,cAAA,CAAe;AAAA,EACtB,QAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,IAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoB;AAClB,EAAA,MAAM,KAAKA,+BAAA,CAA8B;AAAA,IACvC,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,IAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAM,EAAE,OAAO,YAAA,EAAc,SAAA,EAAW,WAAW,GAAG,MAAA,KAAW,EAAA,CAAG,WAAA;AAEpE,EAAA,uBACEC,cAAA,CAACC,oCAAA,EAAA,EAAmB,KAAA,EAAO,EAAA,EACzB,QAAA,kBAAAD,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,6BAAA,EAA4B,EAAA;AAAA,MAC3B,GAAG,IAAA;AAAA,MACH,GAAG,MAAA;AAAA,MACJ,OAAO,YAAA,GAAe,EAAE,GAAG,KAAA,EAAO,GAAG,cAAa,GAAI,KAAA;AAAA,MACtD,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,SAAA,GAAY,CAAC,CAAA;AACb,QAAA,SAAA,CAAU,CAAC,CAAA;AAAA,MACb,CAAA;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAEO,IAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,cAAA,EAAgB;AAAA,EACtD,MAAA,EAAQE;AACV,CAAC","file":"chunk-WVSHAJKI.cjs","sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport { useFullScreen, type UseFullScreenOptions } from \"../../hooks/use-full-screen\";\nimport { FullScreenProvider } from \"./FullScreen.context\";\nimport { FullScreenToggle } from \"./FullScreenToggle\";\n\nexport interface FullScreenProps\n extends UseFullScreenOptions,\n Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n children?: ReactNode;\n}\n\n/**\n * A box that can take over the viewport. Controlled with `fullScreen` +\n * `onFullScreenChange`, or uncontrolled with `defaultFullScreen`; put a\n * `<FullScreen.Toggle />` anywhere inside.\n *\n * Give it a background: while active it covers the page, and in `native` mode\n * the browser paints black behind anything transparent.\n */\nfunction FullScreenRoot({\n children,\n fullScreen,\n defaultFullScreen,\n onFullScreenChange,\n mode,\n closeOnEscape,\n lockScroll,\n zIndex,\n labels,\n style,\n onKeyDown,\n ...rest\n}: FullScreenProps) {\n const fs = useFullScreen<HTMLDivElement>({\n fullScreen,\n defaultFullScreen,\n onFullScreenChange,\n mode,\n closeOnEscape,\n lockScroll,\n zIndex,\n labels,\n });\n const { style: overlayStyle, onKeyDown: fsKeyDown, ...target } = fs.targetProps;\n\n return (\n <FullScreenProvider value={fs}>\n <div\n data-react-fancy-fullscreen=\"\"\n {...rest}\n {...target}\n style={overlayStyle ? { ...style, ...overlayStyle } : style}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n fsKeyDown(e);\n }}\n >\n {children}\n </div>\n </FullScreenProvider>\n );\n}\n\nexport const FullScreen = Object.assign(FullScreenRoot, {\n Toggle: FullScreenToggle,\n});\n"]}
@@ -0,0 +1,62 @@
1
+ import { createContext, useContext, useRef, useEffect } from 'react';
2
+
3
+ // src/hooks/use-escape-key.ts
4
+ var stack = [];
5
+ var EscapeLayerContext = createContext(null);
6
+ function innermost() {
7
+ let candidate = stack[stack.length - 1];
8
+ while (candidate?.scope) {
9
+ const scope = candidate.scope;
10
+ let inner;
11
+ for (let i = stack.length - 1; i >= 0; i--) {
12
+ if (stack[i].parent === scope) {
13
+ inner = stack[i];
14
+ break;
15
+ }
16
+ }
17
+ if (!inner) break;
18
+ candidate = inner;
19
+ }
20
+ return candidate;
21
+ }
22
+ function onDocumentKeyDown(event) {
23
+ if (event.key !== "Escape" || event.defaultPrevented) return;
24
+ const target = innermost();
25
+ if (!target) return;
26
+ event.preventDefault();
27
+ target.handler.current();
28
+ }
29
+ function push(entry) {
30
+ if (stack.length === 0) document.addEventListener("keydown", onDocumentKeyDown);
31
+ stack.push(entry);
32
+ return () => {
33
+ const i = stack.indexOf(entry);
34
+ if (i >= 0) stack.splice(i, 1);
35
+ if (stack.length === 0) document.removeEventListener("keydown", onDocumentKeyDown);
36
+ };
37
+ }
38
+ function useEscapeLayer(handler, enabled, scope = null) {
39
+ const parent = useContext(EscapeLayerContext);
40
+ const handlerRef = useRef(handler);
41
+ handlerRef.current = handler;
42
+ const entryRef = useRef(null);
43
+ useEffect(() => {
44
+ if (!enabled) return;
45
+ const entry = { handler: handlerRef, parent, scope };
46
+ entryRef.current = entry;
47
+ const pop = push(entry);
48
+ return () => {
49
+ pop();
50
+ if (entryRef.current === entry) entryRef.current = null;
51
+ };
52
+ }, [enabled, parent, scope]);
53
+ const isInnermostRef = useRef(() => entryRef.current !== null && innermost() === entryRef.current);
54
+ return { isInnermost: isInnermostRef.current };
55
+ }
56
+ function useEscapeKey(handler, enabled = true) {
57
+ useEscapeLayer(handler, enabled);
58
+ }
59
+
60
+ export { EscapeLayerContext, useEscapeKey, useEscapeLayer };
61
+ //# sourceMappingURL=chunk-YX6FTJ6N.js.map
62
+ //# sourceMappingURL=chunk-YX6FTJ6N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-escape-key.ts"],"names":[],"mappings":";;;AA6CA,IAAM,QAAsB,EAAC;AAGtB,IAAM,kBAAA,GAAqB,cAAkC,IAAI;AAExE,SAAS,SAAA,GAAoC;AAC3C,EAAA,IAAI,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACtC,EAAA,OAAO,WAAW,KAAA,EAAO;AACvB,IAAA,MAAM,QAAQ,SAAA,CAAU,KAAA;AACxB,IAAA,IAAI,KAAA;AACJ,IAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC1C,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,KAAW,KAAA,EAAO;AAC7B,QAAA,KAAA,GAAQ,MAAM,CAAC,CAAA;AACf,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,SAAA,GAAY,KAAA;AAAA,EACd;AACA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,kBAAkB,KAAA,EAAsB;AAC/C,EAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,KAAA,CAAM,gBAAA,EAAkB;AACtD,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACb,EAAA,KAAA,CAAM,cAAA,EAAe;AACrB,EAAA,MAAA,CAAO,QAAQ,OAAA,EAAQ;AACzB;AAEA,SAAS,KAAK,KAAA,EAA+B;AAC3C,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,QAAA,CAAS,gBAAA,CAAiB,WAAW,iBAAiB,CAAA;AAC9E,EAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,EAAA,OAAO,MAAM;AACX,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAC7B,IAAA,IAAI,CAAA,IAAK,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC7B,IAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,QAAA,CAAS,mBAAA,CAAoB,WAAW,iBAAiB,CAAA;AAAA,EACnF,CAAA;AACF;AAYO,SAAS,cAAA,CACd,OAAA,EACA,OAAA,EACA,KAAA,GAA4B,IAAA,EACI;AAChC,EAAA,MAAM,MAAA,GAAS,WAAW,kBAAkB,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,EAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AACrB,EAAA,MAAM,QAAA,GAAW,OAA0B,IAAI,CAAA;AAK/C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,KAAA,GAAoB,EAAE,OAAA,EAAS,UAAA,EAAY,QAAQ,KAAA,EAAM;AAC/D,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,IAAA,MAAM,GAAA,GAAM,KAAK,KAAK,CAAA;AACtB,IAAA,OAAO,MAAM;AACX,MAAA,GAAA,EAAI;AACJ,MAAA,IAAI,QAAA,CAAS,OAAA,KAAY,KAAA,EAAO,QAAA,CAAS,OAAA,GAAU,IAAA;AAAA,IACrD,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,MAAA,EAAQ,KAAK,CAAC,CAAA;AAE3B,EAAA,MAAM,cAAA,GAAiB,OAAO,MAAM,QAAA,CAAS,YAAY,IAAA,IAAQ,SAAA,EAAU,KAAM,QAAA,CAAS,OAAO,CAAA;AACjG,EAAA,OAAO,EAAE,WAAA,EAAa,cAAA,CAAe,OAAA,EAAQ;AAC/C;AAEO,SAAS,YAAA,CAAa,OAAA,EAAqB,OAAA,GAAmB,IAAA,EAAY;AAC/E,EAAA,cAAA,CAAe,SAAS,OAAO,CAAA;AACjC","file":"chunk-YX6FTJ6N.js","sourcesContent":["import { createContext, useContext, useEffect, useRef } from \"react\";\n\n/**\n * Escape belongs to the innermost open layer.\n *\n * Every `useEscapeKey(handler, enabled)` call is a LAYER while `enabled`: a\n * Dropdown's menu, a Select's listbox, a Popover, a Modal, a Drawer, a Tooltip,\n * a full-screen surface. They all join one stack, one document listener reads\n * each Escape, and only one layer gets it.\n *\n * Why not one document listener per layer, as this hook used to do: every\n * open layer then received the same Escape. A Dropdown inside a Modal closed\n * the menu AND the dialog. Inside a full-screen surface it was worse: the\n * surface's own key handler runs during the event's trip through the surface,\n * before any document listener, so it could not tell that a menu wanted the\n * key. DeckEditor exited full screen with its Shape menu still open. Fixing\n * that by ordering listeners would only last until someone registers one in a\n * different place. So the decision is made from the stack instead.\n *\n * \"Innermost\" is decided in two steps:\n *\n * 1. The most recently opened layer is the candidate. Opening a menu from a\n * dialog is the normal order of things.\n * 2. A full-screen surface knows its own descendants: layers rendered inside\n * it register under it through `EscapeLayerContext`, and that context flows\n * through portals. If the candidate is a surface with open layers inside,\n * the most recent of those wins instead. Without this step, a menu opened\n * BEFORE an agent put its surface full screen would lose the Escape to the\n * surface.\n *\n * An Escape that something already handled (`event.defaultPrevented`, for\n * example a text field clearing itself) is left alone.\n */\n\ninterface LayerEntry {\n handler: { current: () => void };\n /** The surface this layer was rendered inside, if any. */\n parent: EscapeScope | null;\n /** Set when the layer IS a surface: layers inside it point here. */\n scope: EscapeScope | null;\n}\n\n/** Identity of a full-screen surface for the layers rendered inside it. */\nexport type EscapeScope = object;\n\nconst stack: LayerEntry[] = [];\n\n/** The surface (if any) that layers rendered here belong to. */\nexport const EscapeLayerContext = createContext<EscapeScope | null>(null);\n\nfunction innermost(): LayerEntry | undefined {\n let candidate = stack[stack.length - 1];\n while (candidate?.scope) {\n const scope = candidate.scope;\n let inner: LayerEntry | undefined;\n for (let i = stack.length - 1; i >= 0; i--) {\n if (stack[i].parent === scope) {\n inner = stack[i];\n break;\n }\n }\n if (!inner) break;\n candidate = inner;\n }\n return candidate;\n}\n\nfunction onDocumentKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Escape\" || event.defaultPrevented) return;\n const target = innermost();\n if (!target) return;\n event.preventDefault();\n target.handler.current();\n}\n\nfunction push(entry: LayerEntry): () => void {\n if (stack.length === 0) document.addEventListener(\"keydown\", onDocumentKeyDown);\n stack.push(entry);\n return () => {\n const i = stack.indexOf(entry);\n if (i >= 0) stack.splice(i, 1);\n if (stack.length === 0) document.removeEventListener(\"keydown\", onDocumentKeyDown);\n };\n}\n\n/**\n * Register a layer that closes on Escape while `enabled`. Pass `scope` only for\n * a surface that other layers can open inside (a full-screen surface).\n *\n * Returns `isInnermost()`, for a layer that also handles Escape in its own key\n * handler and must not act when a layer above it owns the key.\n *\n * @internal Exported for full-screen surfaces in sibling packages; ordinary\n * layers call `useEscapeKey`.\n */\nexport function useEscapeLayer(\n handler: () => void,\n enabled: boolean,\n scope: EscapeScope | null = null,\n): { isInnermost: () => boolean } {\n const parent = useContext(EscapeLayerContext);\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n const entryRef = useRef<LayerEntry | null>(null);\n\n // Depends on `enabled` (and identity), NOT on `handler`: callers pass inline\n // callbacks, and re-registering on every render would move a dialog above\n // the menu it had just opened.\n useEffect(() => {\n if (!enabled) return;\n const entry: LayerEntry = { handler: handlerRef, parent, scope };\n entryRef.current = entry;\n const pop = push(entry);\n return () => {\n pop();\n if (entryRef.current === entry) entryRef.current = null;\n };\n }, [enabled, parent, scope]);\n\n const isInnermostRef = useRef(() => entryRef.current !== null && innermost() === entryRef.current);\n return { isInnermost: isInnermostRef.current };\n}\n\nexport function useEscapeKey(handler: () => void, enabled: boolean = true): void {\n useEscapeLayer(handler, enabled);\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkQXMQVLRQ_cjs = require('./chunk-QXMQVLRQ.cjs');
4
- var chunkTYTENEJQ_cjs = require('./chunk-TYTENEJQ.cjs');
3
+ var chunkOASSZI6M_cjs = require('./chunk-OASSZI6M.cjs');
4
+ var chunkQNQNGARW_cjs = require('./chunk-QNQNGARW.cjs');
5
5
  var chunkC5YX5XVL_cjs = require('./chunk-C5YX5XVL.cjs');
6
6
  var chunkMXWR3T3N_cjs = require('./chunk-MXWR3T3N.cjs');
7
7
  var chunkZU5Q77OT_cjs = require('./chunk-ZU5Q77OT.cjs');
@@ -64,7 +64,7 @@ function PromptInput({
64
64
  const [text, setText] = react.useState("");
65
65
  const inline = pasteThreshold !== void 0 || pasteImages;
66
66
  const editorRef = react.useRef(null);
67
- const paste = chunkTYTENEJQ_cjs.useInlinePaste({
67
+ const paste = chunkQNQNGARW_cjs.useInlinePaste({
68
68
  pasteThreshold,
69
69
  pasteImages,
70
70
  previewChars,
@@ -277,7 +277,7 @@ function PromptInput({
277
277
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
278
278
  inline ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
279
279
  /* @__PURE__ */ jsxRuntime.jsx(
280
- chunkTYTENEJQ_cjs.InlinePasteEditor,
280
+ chunkQNQNGARW_cjs.InlinePasteEditor,
281
281
  {
282
282
  ref: editorRef,
283
283
  value: text,
@@ -303,7 +303,7 @@ function PromptInput({
303
303
  ),
304
304
  paste.portals,
305
305
  pasteImages && pasteFilesName && /* @__PURE__ */ jsxRuntime.jsx(
306
- chunkTYTENEJQ_cjs.PastedFilesInput,
306
+ chunkQNQNGARW_cjs.PastedFilesInput,
307
307
  {
308
308
  name: pasteFilesName,
309
309
  files: paste.imagesIn(text).map((i) => i.file)
@@ -378,7 +378,7 @@ function PromptInput({
378
378
  ] })
379
379
  ] }),
380
380
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 border-t border-zinc-200 bg-zinc-50/60 px-3 py-2 dark:border-zinc-800 dark:bg-zinc-900/40", children: [
381
- /* @__PURE__ */ jsxRuntime.jsx(chunkQXMQVLRQ_cjs.Tooltip, { content: attachButton === "icon" ? "Attach files \u2014 or drop them here" : "Drop files here, or click", children: /* @__PURE__ */ jsxRuntime.jsx(
381
+ /* @__PURE__ */ jsxRuntime.jsx(chunkOASSZI6M_cjs.Tooltip, { content: attachButton === "icon" ? "Attach files \u2014 or drop them here" : "Drop files here, or click", children: /* @__PURE__ */ jsxRuntime.jsx(
382
382
  chunkC5YX5XVL_cjs.Button,
383
383
  {
384
384
  variant: "ghost",
@@ -443,7 +443,7 @@ function PromptInput({
443
443
  ]
444
444
  }
445
445
  ),
446
- sendButton === "icon" ? /* @__PURE__ */ jsxRuntime.jsx(chunkQXMQVLRQ_cjs.Tooltip, { content: `Send \xB7 ${modKey}+Enter`, children: /* @__PURE__ */ jsxRuntime.jsx(
446
+ sendButton === "icon" ? /* @__PURE__ */ jsxRuntime.jsx(chunkOASSZI6M_cjs.Tooltip, { content: `Send \xB7 ${modKey}+Enter`, children: /* @__PURE__ */ jsxRuntime.jsx(
447
447
  chunkC5YX5XVL_cjs.Button,
448
448
  {
449
449
  color: "violet",
@@ -486,5 +486,5 @@ exports.PromptInput = PromptInput;
486
486
  exports.browserPlatformHints = browserPlatformHints;
487
487
  exports.detectPlatform = detectPlatform;
488
488
  exports.modifierKeyLabel = modifierKeyLabel;
489
- //# sourceMappingURL=chunk-HRYM76ZE.cjs.map
490
- //# sourceMappingURL=chunk-HRYM76ZE.cjs.map
489
+ //# sourceMappingURL=chunk-Z6LYBL5L.cjs.map
490
+ //# sourceMappingURL=chunk-Z6LYBL5L.cjs.map