@g4rcez/components 3.0.2 → 4.0.1

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 (151) hide show
  1. package/dist/CaretDown.es-Cj7klWI3.js +33 -0
  2. package/dist/CaretDown.es-Cj7klWI3.js.map +1 -0
  3. package/dist/CaretRight.es-0-M8D9y8.js +33 -0
  4. package/dist/CaretRight.es-0-M8D9y8.js.map +1 -0
  5. package/dist/CheckCircle.es-C6QWLfk_.js +33 -0
  6. package/dist/CheckCircle.es-C6QWLfk_.js.map +1 -0
  7. package/dist/File.es-CA-vuPED.js +33 -0
  8. package/dist/File.es-CA-vuPED.js.map +1 -0
  9. package/dist/IconBase.es-DJ1oCtpo.js +50 -0
  10. package/dist/IconBase.es-DJ1oCtpo.js.map +1 -0
  11. package/dist/Info.es-CrZKs4q4.js +33 -0
  12. package/dist/Info.es-CrZKs4q4.js.map +1 -0
  13. package/dist/MotionConfigContext-C7MqlSdv.js.map +1 -1
  14. package/dist/Warning.es-D_eI6tLe.js +39 -0
  15. package/dist/Warning.es-D_eI6tLe.js.map +1 -0
  16. package/dist/X.es-BJ1O93El.js +39 -0
  17. package/dist/X.es-BJ1O93El.js.map +1 -0
  18. package/dist/ai/docs/Alert.md +1 -1
  19. package/dist/ai/docs/AnimatedList.md +3 -3
  20. package/dist/ai/docs/Button.md +1 -1
  21. package/dist/ai/docs/CommandPalette.md +7 -7
  22. package/dist/ai/docs/Dropdown.md +4 -4
  23. package/dist/ai/docs/Empty.md +9 -9
  24. package/dist/ai/docs/Expand.md +1 -1
  25. package/dist/ai/docs/FileUpload.md +2 -2
  26. package/dist/ai/docs/Input.md +2 -2
  27. package/dist/ai/docs/InputField.md +2 -2
  28. package/dist/ai/docs/List.md +3 -3
  29. package/dist/ai/docs/Menu.md +3 -3
  30. package/dist/ai/docs/MultiSelect.md +1 -1
  31. package/dist/ai/docs/PageCalendar.md +1 -1
  32. package/dist/ai/docs/Select.md +1 -1
  33. package/dist/ai/docs/Slot.md +1 -1
  34. package/dist/ai/docs/Stats.md +11 -11
  35. package/dist/ai/docs/Table.md +1 -1
  36. package/dist/ai/docs/Tag.md +2 -2
  37. package/dist/ai/docs/Timeline.md +5 -5
  38. package/dist/ai/docs/Toolbar.md +2 -2
  39. package/dist/ai/docs/Tooltip.md +3 -3
  40. package/dist/ai/docs/TransferList.md +2 -2
  41. package/dist/{autocomplete-Boida9R7.js → autocomplete-Cn9Z2hLq.js} +48 -48
  42. package/dist/autocomplete-Cn9Z2hLq.js.map +1 -0
  43. package/dist/{calendar-BswV66Nx.js → calendar-B5lSd0ID.js} +599 -571
  44. package/dist/calendar-B5lSd0ID.js.map +1 -0
  45. package/dist/components/display/alert.js +18 -18
  46. package/dist/components/display/alert.js.map +1 -1
  47. package/dist/components/display/calendar.js +4 -4
  48. package/dist/components/display/card.d.ts +2 -2
  49. package/dist/components/display/card.d.ts.map +1 -1
  50. package/dist/components/display/card.js +6 -6
  51. package/dist/components/display/card.js.map +1 -1
  52. package/dist/components/display/empty.d.ts +2 -2
  53. package/dist/components/display/empty.d.ts.map +1 -1
  54. package/dist/components/display/list.js +15 -15
  55. package/dist/components/display/list.js.map +1 -1
  56. package/dist/components/display/notifications.js +5 -5
  57. package/dist/components/display/tabs.js +1 -1
  58. package/dist/components/floating/command-palette.d.ts +3 -3
  59. package/dist/components/floating/command-palette.d.ts.map +1 -1
  60. package/dist/components/floating/dropdown.js +1 -1
  61. package/dist/components/floating/expand.js +1 -1
  62. package/dist/components/floating/menu.d.ts +2 -2
  63. package/dist/components/floating/menu.d.ts.map +1 -1
  64. package/dist/components/floating/menu.js +31 -31
  65. package/dist/components/floating/menu.js.map +1 -1
  66. package/dist/components/floating/modal.js +35 -35
  67. package/dist/components/floating/modal.js.map +1 -1
  68. package/dist/components/floating/tooltip.js +1 -1
  69. package/dist/components/form/autocomplete.js +5 -5
  70. package/dist/components/form/date-picker.js +3 -3
  71. package/dist/components/form/file-upload.d.ts.map +1 -1
  72. package/dist/components/form/file-upload.js +3 -3
  73. package/dist/components/form/input-field.d.ts.map +1 -1
  74. package/dist/components/form/input.js +1 -1
  75. package/dist/components/form/select.js +29 -29
  76. package/dist/components/form/select.js.map +1 -1
  77. package/dist/components/form/task-list.js.map +1 -1
  78. package/dist/components/form/transfer-list.js +15 -15
  79. package/dist/components/form/transfer-list.js.map +1 -1
  80. package/dist/components/page-calendar/calendar-header.d.ts.map +1 -1
  81. package/dist/components/page-calendar/day-view.d.ts.map +1 -1
  82. package/dist/components/page-calendar/month-view.d.ts.map +1 -1
  83. package/dist/components/page-calendar/page-calendar.utils.d.ts +6 -0
  84. package/dist/components/page-calendar/page-calendar.utils.d.ts.map +1 -1
  85. package/dist/components/page-calendar/week-view.d.ts.map +1 -1
  86. package/dist/components/table/table.js +3 -3
  87. package/dist/config/context.d.ts +2 -0
  88. package/dist/config/context.d.ts.map +1 -1
  89. package/dist/context-BFXNJVn2.js.map +1 -1
  90. package/dist/{date-picker-BxPTdZPy.js → date-picker-DwNo22lx.js} +316 -288
  91. package/dist/date-picker-DwNo22lx.js.map +1 -0
  92. package/dist/{file-upload-BB6BdGcE.js → file-upload-Brf2NkLr.js} +1103 -976
  93. package/dist/file-upload-Brf2NkLr.js.map +1 -0
  94. package/dist/{floating-ui.react-DycKASR0.js → floating-ui.react-QNHG9W4N.js} +205 -205
  95. package/dist/{floating-ui.react-DycKASR0.js.map → floating-ui.react-QNHG9W4N.js.map} +1 -1
  96. package/dist/hooks/use-components-provider.d.ts.map +1 -1
  97. package/dist/index-0YMC-_Lt.js.map +1 -1
  98. package/dist/index-BelDtX5M.js +1821 -0
  99. package/dist/index-BelDtX5M.js.map +1 -0
  100. package/dist/{index-BtlhELJ3.js → index-C-PuFUZi.js} +136 -136
  101. package/dist/index-C-PuFUZi.js.map +1 -0
  102. package/dist/index-Z-fZHxfJ.js +335 -0
  103. package/dist/index-Z-fZHxfJ.js.map +1 -0
  104. package/dist/index-t1qLJTt5.js.map +1 -1
  105. package/dist/index.css +1 -1
  106. package/dist/index.js +2583 -2463
  107. package/dist/index.js.map +1 -1
  108. package/dist/{input-CoJoHIhd.js → input-CrGrSnUt.js} +2 -2
  109. package/dist/{input-CoJoHIhd.js.map → input-CrGrSnUt.js.map} +1 -1
  110. package/dist/input-field-5vYcz5tT.js +166 -0
  111. package/dist/input-field-5vYcz5tT.js.map +1 -0
  112. package/dist/notifications-cUdVPs-B.js +2786 -0
  113. package/dist/notifications-cUdVPs-B.js.map +1 -0
  114. package/dist/proxy-BZcQiBrp.js.map +1 -1
  115. package/dist/{slot-CQW8ZzBb.js → slot-CRyweuj0.js} +5 -5
  116. package/dist/{slot-CQW8ZzBb.js.map → slot-CRyweuj0.js.map} +1 -1
  117. package/dist/{tabs-ccIA7vMo.js → tabs-S00a8qq8.js} +5 -5
  118. package/dist/{tabs-ccIA7vMo.js.map → tabs-S00a8qq8.js.map} +1 -1
  119. package/dist/use-motion-value-eGwNuWuw.js.map +1 -1
  120. package/package.json +2 -2
  121. package/dist/autocomplete-Boida9R7.js.map +0 -1
  122. package/dist/calendar-BswV66Nx.js.map +0 -1
  123. package/dist/chevron-down-BBFYYzZq.js +0 -6
  124. package/dist/chevron-down-BBFYYzZq.js.map +0 -1
  125. package/dist/chevron-right-DvXGOiS_.js +0 -6
  126. package/dist/chevron-right-DvXGOiS_.js.map +0 -1
  127. package/dist/circle-check-big-3M5lhTxx.js +0 -9
  128. package/dist/circle-check-big-3M5lhTxx.js.map +0 -1
  129. package/dist/createLucideIcon-CP-mMPfa.js +0 -76
  130. package/dist/createLucideIcon-CP-mMPfa.js.map +0 -1
  131. package/dist/date-picker-BxPTdZPy.js.map +0 -1
  132. package/dist/file-CBCP85VI.js +0 -15
  133. package/dist/file-CBCP85VI.js.map +0 -1
  134. package/dist/file-upload-BB6BdGcE.js.map +0 -1
  135. package/dist/index-BJ1ayTam.js +0 -126
  136. package/dist/index-BJ1ayTam.js.map +0 -1
  137. package/dist/index-BtlhELJ3.js.map +0 -1
  138. package/dist/index-ChfR6F8d.js +0 -1590
  139. package/dist/index-ChfR6F8d.js.map +0 -1
  140. package/dist/index-DE4shK8D.js +0 -215
  141. package/dist/index-DE4shK8D.js.map +0 -1
  142. package/dist/info-N5jWZg2A.js +0 -10
  143. package/dist/info-N5jWZg2A.js.map +0 -1
  144. package/dist/input-field-DTeIrwpK.js +0 -146
  145. package/dist/input-field-DTeIrwpK.js.map +0 -1
  146. package/dist/notifications-NPuFDsBp.js +0 -2550
  147. package/dist/notifications-NPuFDsBp.js.map +0 -1
  148. package/dist/triangle-alert-CHMhQ6yd.js +0 -16
  149. package/dist/triangle-alert-CHMhQ6yd.js.map +0 -1
  150. package/dist/x-B9bYxG31.js +0 -9
  151. package/dist/x-B9bYxG31.js.map +0 -1
@@ -30,7 +30,7 @@ function m(n) {
30
30
  return n != null && typeof n == "object" && "$$typeof" in n && n.$$typeof === g && "_payload" in n && E(n._payload);
31
31
  }
32
32
  function h(n) {
33
- const e = R(n), o = l.forwardRef((i, t) => {
33
+ const e = _(n), o = l.forwardRef((i, t) => {
34
34
  let { children: r, ...c } = i;
35
35
  m(r) && typeof a == "function" && (r = a(r._payload));
36
36
  const s = l.Children.toArray(r), f = s.find(b);
@@ -43,7 +43,7 @@ function h(n) {
43
43
  return o.displayName = `${n}.Slot`, o;
44
44
  }
45
45
  const V = h("Slot");
46
- function R(n) {
46
+ function _(n) {
47
47
  const e = l.forwardRef((o, i) => {
48
48
  let { children: t, ...r } = o;
49
49
  if (m(t) && typeof a == "function" && (t = a(t._payload)), l.isValidElement(t)) {
@@ -54,9 +54,9 @@ function R(n) {
54
54
  });
55
55
  return e.displayName = `${n}.SlotClone`, e;
56
56
  }
57
- const _ = /* @__PURE__ */ Symbol("radix.slottable");
57
+ const R = /* @__PURE__ */ Symbol("radix.slottable");
58
58
  function b(n) {
59
- return l.isValidElement(n) && typeof n.type == "function" && "__radixId" in n.type && n.type.__radixId === _;
59
+ return l.isValidElement(n) && typeof n.type == "function" && "__radixId" in n.type && n.type.__radixId === R;
60
60
  }
61
61
  function P(n, e) {
62
62
  const o = { ...e };
@@ -76,4 +76,4 @@ function j(n) {
76
76
  export {
77
77
  V as S
78
78
  };
79
- //# sourceMappingURL=slot-CQW8ZzBb.js.map
79
+ //# sourceMappingURL=slot-CRyweuj0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slot-CQW8ZzBb.js","sources":["../src/components/core/slot.tsx"],"sourcesContent":["import * as React from \"react\";\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\nconst REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\n\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\ninterface LazyReactElement extends React.ReactElement {\n $$typeof: typeof REACT_LAZY_TYPE;\n _payload: PromiseLike<Exclude<React.ReactNode, PromiseLike<any>>>;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\nexport type Usable<T> = PromiseLike<T> | React.Context<T>;\n\nconst use: typeof React.use | undefined = (React as any)[\" use \".trim().toString()];\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\n\nfunction isLazyComponent(element: React.ReactNode): element is LazyReactElement {\n return (\n element != null &&\n typeof element === \"object\" &&\n \"$$typeof\" in element &&\n element.$$typeof === REACT_LAZY_TYPE &&\n \"_payload\" in element &&\n isPromiseLike(element._payload)\n );\n}\n\nexport function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? (newElement.props as { children: React.ReactNode }).children : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement) ? React.cloneElement(newElement, undefined, newChildren) : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nexport const Slot = createSlot(\"Slot\");\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\nfunction createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\nconst SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\nexport function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable(\"Slottable\");\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(child: React.ReactNode): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\nfunction getElementRef(element: React.ReactElement) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n"],"names":["REACT_LAZY_TYPE","setRef","ref","value","composeRefs","refs","node","hasCleanup","cleanups","cleanup","i","use","React","isPromiseLike","isLazyComponent","element","createSlot","ownerName","SlotClone","createSlotClone","Slot","props","forwardedRef","children","slotProps","childrenArray","slottable","isSlottable","newElement","newChildren","child","childrenRef","getElementRef","mergeProps","SLOTTABLE_IDENTIFIER","childProps","overrideProps","propName","slotPropValue","childPropValue","args","result","getter","mayWarn"],"mappings":"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"}
1
+ {"version":3,"file":"slot-CRyweuj0.js","sources":["../src/components/core/slot.tsx"],"sourcesContent":["import * as React from \"react\";\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\nconst REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\n\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\ninterface LazyReactElement extends React.ReactElement {\n $$typeof: typeof REACT_LAZY_TYPE;\n _payload: PromiseLike<Exclude<React.ReactNode, PromiseLike<any>>>;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\nexport type Usable<T> = PromiseLike<T> | React.Context<T>;\n\nconst use: typeof React.use | undefined = (React as any)[\" use \".trim().toString()];\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\n\nfunction isLazyComponent(element: React.ReactNode): element is LazyReactElement {\n return (\n element != null &&\n typeof element === \"object\" &&\n \"$$typeof\" in element &&\n element.$$typeof === REACT_LAZY_TYPE &&\n \"_payload\" in element &&\n isPromiseLike(element._payload)\n );\n}\n\nexport function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? (newElement.props as { children: React.ReactNode }).children : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement) ? React.cloneElement(newElement, undefined, newChildren) : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nexport const Slot = createSlot(\"Slot\");\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\nfunction createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\nconst SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\nexport function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable(\"Slottable\");\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(child: React.ReactNode): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\nfunction getElementRef(element: React.ReactElement) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n"],"names":["REACT_LAZY_TYPE","setRef","ref","value","composeRefs","refs","node","hasCleanup","cleanups","cleanup","i","use","React","isPromiseLike","isLazyComponent","element","createSlot","ownerName","SlotClone","createSlotClone","Slot","props","forwardedRef","children","slotProps","childrenArray","slottable","isSlottable","newElement","newChildren","child","childrenRef","getElementRef","mergeProps","SLOTTABLE_IDENTIFIER","childProps","overrideProps","propName","slotPropValue","childPropValue","args","result","getter","mayWarn"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as l, jsxs as g } from "react/jsx-runtime";
2
- import A, { useState as k, useEffect as u, createContext as p, useRef as C, useContext as N, Fragment as R } from "react";
3
- import { c as m, I as S } from "./dom-Dl8XH0CK.js";
2
+ import A, { useState as k, useEffect as u, createContext as p, useRef as C, useContext as N, Fragment as S } from "react";
3
+ import { c as m, I as R } from "./dom-Dl8XH0CK.js";
4
4
  import { u as T } from "./use-stable-ref-CYh-YkID.js";
5
5
  import { P as q } from "./polymorph-B5n9fs_K.js";
6
6
  import { Card as I } from "./components/display/card.js";
@@ -47,7 +47,7 @@ const _ = (t, r) => {
47
47
  }, x = (i) => {
48
48
  if (a.current === null) return;
49
49
  const e = i.key;
50
- if (S.keyof(v, e)) {
50
+ if (R.keyof(v, e)) {
51
51
  const c = v[e], b = c(i, a.current);
52
52
  if (b === null) return;
53
53
  n(b);
@@ -96,11 +96,11 @@ const _ = (t, r) => {
96
96
  ) });
97
97
  }, E = () => N(y), z = (t) => {
98
98
  const r = E();
99
- return /* @__PURE__ */ l(R, { children: t.id === r ? t.children : null });
99
+ return /* @__PURE__ */ l(S, { children: t.id === r ? t.children : null });
100
100
  };
101
101
  export {
102
102
  $ as T,
103
103
  z as a,
104
104
  _ as u
105
105
  };
106
- //# sourceMappingURL=tabs-ccIA7vMo.js.map
106
+ //# sourceMappingURL=tabs-S00a8qq8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs-ccIA7vMo.js","sources":["../src/hooks/use-reactive.ts","../src/lib/keyboard-area.ts","../src/components/display/tabs.tsx"],"sourcesContent":["\"use client\";\nimport { useEffect, useState } from \"react\";\n\nexport const useReactive = <T>(t: T, initial?: T) => {\n const [state, setState] = useState(() => (initial ? initial : t));\n useEffect(() => {\n setState(t);\n }, [t]);\n return [state, setState] as const;\n};\n","import React from \"react\";\n\ntype EventKey =\n | \"Backspace\"\n | \"Tab\"\n | \"Enter\"\n | \"Shift\"\n | \"Control\"\n | \"Alt\"\n | \"Pause\"\n | \"CapsLock\"\n | \"Escape\"\n | \"Space\"\n | \"PageUp\"\n | \"PageDown\"\n | \"End\"\n | \"Home\"\n | \"ArrowLeft\"\n | \"ArrowUp\"\n | \"ArrowRight\"\n | \"ArrowDown\"\n | \"PrintScreen\"\n | \"Insert\"\n | \"Delete\"\n | \"0\"\n | \"1\"\n | \"2\"\n | \"3\"\n | \"4\"\n | \"5\"\n | \"6\"\n | \"7\"\n | \"8\"\n | \"9\"\n | \"a\"\n | \"b\"\n | \"c\"\n | \"d\"\n | \"e\"\n | \"f\"\n | \"g\"\n | \"h\"\n | \"i\"\n | \"j\"\n | \"k\"\n | \"l\"\n | \"m\"\n | \"n\"\n | \"o\"\n | \"p\"\n | \"q\"\n | \"r\"\n | \"s\"\n | \"t\"\n | \"u\"\n | \"v\"\n | \"w\"\n | \"x\"\n | \"y\"\n | \"z\"\n | \"Meta\"\n | \"ContextMenu\"\n | \"F1\"\n | \"F2\"\n | \"F3\"\n | \"F4\"\n | \"F5\"\n | \"F6\"\n | \"F7\"\n | \"F8\"\n | \"F9\"\n | \"F10\"\n | \"F11\"\n | \"F12\"\n | \"NumLock\"\n | \"ScrollLock\"\n | \"AudioVolumeMute\"\n | \"AudioVolumeUp\"\n | \"AudioVolumeDown\"\n | \"MediaTrackNext\"\n | \"MediaTrackPrevious\"\n | \"MediaStop\"\n | \"MediaPlayPause\"\n | \"LaunchMail\"\n | \"LaunchMediaPlayer\"\n | \"LaunchApplication1\"\n | \"LaunchApplication2\"\n | \"Semicolon\"\n | \"Equal\"\n | \"Comma\"\n | \"Minus\"\n | \"Period\"\n | \"Slash\"\n | \"Backquote\"\n | \"BracketLeft\"\n | \"Backslash\"\n | \"BracketRight\"\n | \"Quote\";\n\nexport const keyboardKeys = {\n ArrowUp: \"ArrowUp\",\n ArrowDown: \"ArrowDown\",\n ArrowLeft: \"ArrowLeft\",\n ArrowRight: \"ArrowRight\",\n} as const;\n\ntype Callback<T extends HTMLElement = HTMLElement> = (e: KeyboardEvent | React.KeyboardEvent<T>) => void;\n\nexport class KeyboardArea<T extends HTMLElement> {\n private set = new Set();\n\n public key(key: EventKey, callback: Callback<T>) {\n const fn: Callback<T> = (e) => (e.key === key ? callback(e) : undefined);\n return () => this.set.delete(fn);\n }\n\n public onKeyDown(_: Callback<T>) {}\n}\n","\"use client\";\nimport React, { createContext, Fragment, PropsWithChildren, useContext, useEffect, useRef } from \"react\";\nimport { Is, Nullable } from \"sidekicker\";\nimport { useReactive } from \"../../hooks/use-reactive\";\nimport { useStableRef } from \"../../hooks/use-stable-ref\";\nimport { css } from \"../../lib/dom\";\nimport { keyboardKeys } from \"../../lib/keyboard-area\";\nimport { Label } from \"../../types\";\nimport { Polymorph } from \"../core/polymorph\";\nimport { Card, CardProps } from \"./card\";\n\nexport type TabsProps = Omit<CardProps<\"div\">, \"onChange\"> & {\n active: string;\n container?: string;\n className?: string;\n onChange?: (id: string) => void;\n};\n\nconst Context = createContext<string>(\"\");\n\nconst isElementDisabled = (element: HTMLElement): boolean => element.hasAttribute(\"disabled\") || element.getAttribute(\"aria-disabled\") === \"true\";\n\nconst getNElement = (elements: HTMLElement[], currentIndex: number, direction: \"backward\" | \"forward\"): HTMLElement | null => {\n const step = direction === \"forward\" ? 1 : -1;\n const startIndex = currentIndex + step;\n for (let i = startIndex; i >= 0 && i < elements.length; i += step) {\n const element = elements[i];\n if (!isElementDisabled(element)) return element;\n }\n return direction === \"backward\" ? getNElement(elements, elements.length - 1, \"backward\") : getNElement(elements, -1, \"forward\");\n};\n\nconst moveOn = (ul: HTMLUListElement, direction: \"backward\" | \"forward\") => {\n const items = Array.from(ul.querySelectorAll(\"li\"));\n const find = items.findIndex((x) => x.dataset.active === \"true\");\n if (find === -1) return null;\n const item = getNElement(items, find, direction);\n if (item === null) return null;\n item.querySelector(\"button\")?.focus({ preventScroll: false });\n return item.getAttribute(\"data-id\") || \"\";\n};\n\nconst actionKeys = {\n [keyboardKeys.ArrowLeft]: (_: unknown, ul: HTMLUListElement): Nullable<string> => moveOn(ul, \"backward\"),\n [keyboardKeys.ArrowRight]: (_: unknown, ul: HTMLUListElement): Nullable<string> => moveOn(ul, \"forward\"),\n};\n\nexport const Tabs = (props: PropsWithChildren<TabsProps>) => {\n const [active, setActive] = useReactive(props.active);\n const ref = useRef<HTMLUListElement | null>(null);\n const onChangeRef = useStableRef(props.onChange);\n\n useEffect(() => {\n const header = ref.current;\n if (header === null) return;\n let first = header.querySelector<HTMLElement>(`li[data-active=true]`);\n if (first === null) {\n first = header.querySelector<HTMLElement>(`li[data-id]`)!;\n const id = first.getAttribute(\"data-id\") || \"\";\n setActive(id);\n }\n }, [props.active, setActive]);\n\n useEffect(() => {\n if (onChangeRef.current) onChangeRef.current(active);\n }, [onChangeRef, active]);\n\n const items = React.Children.toArray(props.children as React.ReactElement<TabProps>);\n\n const onClick = (e: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => {\n const anchor = e.currentTarget;\n setActive(anchor.dataset.id || \"\");\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLUListElement>) => {\n if (ref.current === null) return;\n const k = e.key;\n if (Is.keyof(actionKeys, k)) {\n const fn = actionKeys[k];\n const result = fn(e, ref.current);\n if (result === null) return;\n setActive(result);\n }\n };\n\n return (\n <Context.Provider value={active}>\n <Card\n className={props.className}\n container={css(\"pt-0 max-w-full w-full min-w-0\", props.container)}\n header={\n <header className=\"relative mb-2 overflow-x-auto\">\n <div className=\"absolute bottom-0 h-[1px] w-full bg-card-border\" />\n <nav className=\"min-w-0\">\n <ul onKeyDown={onKeyDown} ref={ref} className=\"flex w-0 min-w-full flex-1 justify-start overflow-x-auto\">\n {items.map((x: any) => {\n const inner = x.props as TabProps;\n const current = active === inner.id;\n return (\n <li\n data-id={inner.id}\n data-active={current}\n key={`tab-header-${inner.id}`}\n aria-disabled={inner.disabled}\n className={css(\n \"relative w-fit border-b border-transparent transition-all\",\n current ? \"border-primary font-medium text-primary\" : \"\",\n inner.disabled ? \"aria-disabled:text-disabled\" : \"\"\n )}\n >\n <Polymorph\n as=\"button\"\n type=\"button\"\n data-id={inner.id}\n aria-current=\"page\"\n disabled={inner.disabled}\n onClick={inner.disabled ? undefined : onClick}\n className=\"block w-full whitespace-nowrap px-10 py-4 disabled:cursor-not-allowed\"\n >\n {inner.title as any}\n </Polymorph>\n </li>\n );\n })}\n </ul>\n </nav>\n </header>\n }\n >\n {props.children}\n </Card>\n </Context.Provider>\n );\n};\n\nconst useTabs = () => useContext(Context);\n\ntype CommonTabProps = { id: string; disabled?: boolean };\n\nexport type TabProps = CommonTabProps &\n (\n | { title: string; label?: undefined }\n | {\n label: string;\n title: Omit<Label, string>;\n }\n );\n\nexport const Tab = (props: PropsWithChildren<TabProps>) => {\n const active = useTabs();\n return <Fragment>{props.id === active ? props.children : null}</Fragment>;\n};\n"],"names":["useReactive","initial","state","setState","useState","useEffect","keyboardKeys","Context","createContext","isElementDisabled","element","getNElement","elements","currentIndex","direction","step","startIndex","i","moveOn","ul","items","find","x","item","actionKeys","_","Tabs","props","active","setActive","ref","useRef","onChangeRef","useStableRef","header","first","id","React","onClick","e","anchor","onKeyDown","k","Is","fn","result","jsx","Card","css","jsxs","inner","current","Polymorph","useTabs","useContext","Tab","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"tabs-S00a8qq8.js","sources":["../src/hooks/use-reactive.ts","../src/lib/keyboard-area.ts","../src/components/display/tabs.tsx"],"sourcesContent":["\"use client\";\nimport { useEffect, useState } from \"react\";\n\nexport const useReactive = <T>(t: T, initial?: T) => {\n const [state, setState] = useState(() => (initial ? initial : t));\n useEffect(() => {\n setState(t);\n }, [t]);\n return [state, setState] as const;\n};\n","import React from \"react\";\n\ntype EventKey =\n | \"Backspace\"\n | \"Tab\"\n | \"Enter\"\n | \"Shift\"\n | \"Control\"\n | \"Alt\"\n | \"Pause\"\n | \"CapsLock\"\n | \"Escape\"\n | \"Space\"\n | \"PageUp\"\n | \"PageDown\"\n | \"End\"\n | \"Home\"\n | \"ArrowLeft\"\n | \"ArrowUp\"\n | \"ArrowRight\"\n | \"ArrowDown\"\n | \"PrintScreen\"\n | \"Insert\"\n | \"Delete\"\n | \"0\"\n | \"1\"\n | \"2\"\n | \"3\"\n | \"4\"\n | \"5\"\n | \"6\"\n | \"7\"\n | \"8\"\n | \"9\"\n | \"a\"\n | \"b\"\n | \"c\"\n | \"d\"\n | \"e\"\n | \"f\"\n | \"g\"\n | \"h\"\n | \"i\"\n | \"j\"\n | \"k\"\n | \"l\"\n | \"m\"\n | \"n\"\n | \"o\"\n | \"p\"\n | \"q\"\n | \"r\"\n | \"s\"\n | \"t\"\n | \"u\"\n | \"v\"\n | \"w\"\n | \"x\"\n | \"y\"\n | \"z\"\n | \"Meta\"\n | \"ContextMenu\"\n | \"F1\"\n | \"F2\"\n | \"F3\"\n | \"F4\"\n | \"F5\"\n | \"F6\"\n | \"F7\"\n | \"F8\"\n | \"F9\"\n | \"F10\"\n | \"F11\"\n | \"F12\"\n | \"NumLock\"\n | \"ScrollLock\"\n | \"AudioVolumeMute\"\n | \"AudioVolumeUp\"\n | \"AudioVolumeDown\"\n | \"MediaTrackNext\"\n | \"MediaTrackPrevious\"\n | \"MediaStop\"\n | \"MediaPlayPause\"\n | \"LaunchMail\"\n | \"LaunchMediaPlayer\"\n | \"LaunchApplication1\"\n | \"LaunchApplication2\"\n | \"Semicolon\"\n | \"Equal\"\n | \"Comma\"\n | \"Minus\"\n | \"Period\"\n | \"Slash\"\n | \"Backquote\"\n | \"BracketLeft\"\n | \"Backslash\"\n | \"BracketRight\"\n | \"Quote\";\n\nexport const keyboardKeys = {\n ArrowUp: \"ArrowUp\",\n ArrowDown: \"ArrowDown\",\n ArrowLeft: \"ArrowLeft\",\n ArrowRight: \"ArrowRight\",\n} as const;\n\ntype Callback<T extends HTMLElement = HTMLElement> = (e: KeyboardEvent | React.KeyboardEvent<T>) => void;\n\nexport class KeyboardArea<T extends HTMLElement> {\n private set = new Set();\n\n public key(key: EventKey, callback: Callback<T>) {\n const fn: Callback<T> = (e) => (e.key === key ? callback(e) : undefined);\n return () => this.set.delete(fn);\n }\n\n public onKeyDown(_: Callback<T>) {}\n}\n","\"use client\";\nimport React, { createContext, Fragment, PropsWithChildren, useContext, useEffect, useRef } from \"react\";\nimport { Is, Nullable } from \"sidekicker\";\nimport { useReactive } from \"../../hooks/use-reactive\";\nimport { useStableRef } from \"../../hooks/use-stable-ref\";\nimport { css } from \"../../lib/dom\";\nimport { keyboardKeys } from \"../../lib/keyboard-area\";\nimport { Label } from \"../../types\";\nimport { Polymorph } from \"../core/polymorph\";\nimport { Card, CardProps } from \"./card\";\n\nexport type TabsProps = Omit<CardProps<\"div\">, \"onChange\"> & {\n active: string;\n container?: string;\n className?: string;\n onChange?: (id: string) => void;\n};\n\nconst Context = createContext<string>(\"\");\n\nconst isElementDisabled = (element: HTMLElement): boolean => element.hasAttribute(\"disabled\") || element.getAttribute(\"aria-disabled\") === \"true\";\n\nconst getNElement = (elements: HTMLElement[], currentIndex: number, direction: \"backward\" | \"forward\"): HTMLElement | null => {\n const step = direction === \"forward\" ? 1 : -1;\n const startIndex = currentIndex + step;\n for (let i = startIndex; i >= 0 && i < elements.length; i += step) {\n const element = elements[i];\n if (!isElementDisabled(element)) return element;\n }\n return direction === \"backward\" ? getNElement(elements, elements.length - 1, \"backward\") : getNElement(elements, -1, \"forward\");\n};\n\nconst moveOn = (ul: HTMLUListElement, direction: \"backward\" | \"forward\") => {\n const items = Array.from(ul.querySelectorAll(\"li\"));\n const find = items.findIndex((x) => x.dataset.active === \"true\");\n if (find === -1) return null;\n const item = getNElement(items, find, direction);\n if (item === null) return null;\n item.querySelector(\"button\")?.focus({ preventScroll: false });\n return item.getAttribute(\"data-id\") || \"\";\n};\n\nconst actionKeys = {\n [keyboardKeys.ArrowLeft]: (_: unknown, ul: HTMLUListElement): Nullable<string> => moveOn(ul, \"backward\"),\n [keyboardKeys.ArrowRight]: (_: unknown, ul: HTMLUListElement): Nullable<string> => moveOn(ul, \"forward\"),\n};\n\nexport const Tabs = (props: PropsWithChildren<TabsProps>) => {\n const [active, setActive] = useReactive(props.active);\n const ref = useRef<HTMLUListElement | null>(null);\n const onChangeRef = useStableRef(props.onChange);\n\n useEffect(() => {\n const header = ref.current;\n if (header === null) return;\n let first = header.querySelector<HTMLElement>(`li[data-active=true]`);\n if (first === null) {\n first = header.querySelector<HTMLElement>(`li[data-id]`)!;\n const id = first.getAttribute(\"data-id\") || \"\";\n setActive(id);\n }\n }, [props.active, setActive]);\n\n useEffect(() => {\n if (onChangeRef.current) onChangeRef.current(active);\n }, [onChangeRef, active]);\n\n const items = React.Children.toArray(props.children as React.ReactElement<TabProps>);\n\n const onClick = (e: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => {\n const anchor = e.currentTarget;\n setActive(anchor.dataset.id || \"\");\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLUListElement>) => {\n if (ref.current === null) return;\n const k = e.key;\n if (Is.keyof(actionKeys, k)) {\n const fn = actionKeys[k];\n const result = fn(e, ref.current);\n if (result === null) return;\n setActive(result);\n }\n };\n\n return (\n <Context.Provider value={active}>\n <Card\n className={props.className}\n container={css(\"pt-0 max-w-full w-full min-w-0\", props.container)}\n header={\n <header className=\"relative mb-2 overflow-x-auto\">\n <div className=\"absolute bottom-0 h-[1px] w-full bg-card-border\" />\n <nav className=\"min-w-0\">\n <ul onKeyDown={onKeyDown} ref={ref} className=\"flex w-0 min-w-full flex-1 justify-start overflow-x-auto\">\n {items.map((x: any) => {\n const inner = x.props as TabProps;\n const current = active === inner.id;\n return (\n <li\n data-id={inner.id}\n data-active={current}\n key={`tab-header-${inner.id}`}\n aria-disabled={inner.disabled}\n className={css(\n \"relative w-fit border-b border-transparent transition-all\",\n current ? \"border-primary font-medium text-primary\" : \"\",\n inner.disabled ? \"aria-disabled:text-disabled\" : \"\"\n )}\n >\n <Polymorph\n as=\"button\"\n type=\"button\"\n data-id={inner.id}\n aria-current=\"page\"\n disabled={inner.disabled}\n onClick={inner.disabled ? undefined : onClick}\n className=\"block w-full whitespace-nowrap px-10 py-4 disabled:cursor-not-allowed\"\n >\n {inner.title as any}\n </Polymorph>\n </li>\n );\n })}\n </ul>\n </nav>\n </header>\n }\n >\n {props.children}\n </Card>\n </Context.Provider>\n );\n};\n\nconst useTabs = () => useContext(Context);\n\ntype CommonTabProps = { id: string; disabled?: boolean };\n\nexport type TabProps = CommonTabProps &\n (\n | { title: string; label?: undefined }\n | {\n label: string;\n title: Omit<Label, string>;\n }\n );\n\nexport const Tab = (props: PropsWithChildren<TabProps>) => {\n const active = useTabs();\n return <Fragment>{props.id === active ? props.children : null}</Fragment>;\n};\n"],"names":["useReactive","initial","state","setState","useState","useEffect","keyboardKeys","Context","createContext","isElementDisabled","element","getNElement","elements","currentIndex","direction","step","startIndex","i","moveOn","ul","items","find","x","item","actionKeys","_","Tabs","props","active","setActive","ref","useRef","onChangeRef","useStableRef","header","first","id","React","onClick","e","anchor","onKeyDown","k","Is","fn","result","jsx","Card","css","jsxs","inner","current","Polymorph","useTabs","useContext","Tab","Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-motion-value-eGwNuWuw.js","sources":["../../../node_modules/.pnpm/framer-motion@12.34.3_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/framer-motion/dist/es/value/use-motion-value.mjs"],"sourcesContent":["\"use client\";\nimport { motionValue } from 'motion-dom';\nimport { useContext, useState, useEffect } from 'react';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { useConstant } from '../utils/use-constant.mjs';\n\n/**\n * Creates a `MotionValue` to track the state and velocity of a value.\n *\n * Usually, these are created automatically. For advanced use-cases, like use with `useTransform`, you can create `MotionValue`s externally and pass them into the animated component via the `style` prop.\n *\n * ```jsx\n * export const MyComponent = () => {\n * const scale = useMotionValue(1)\n *\n * return <motion.div style={{ scale }} />\n * }\n * ```\n *\n * @param initial - The initial state.\n *\n * @public\n */\nfunction useMotionValue(initial) {\n const value = useConstant(() => motionValue(initial));\n /**\n * If this motion value is being used in static mode, like on\n * the Framer canvas, force components to rerender when the motion\n * value is updated.\n */\n const { isStatic } = useContext(MotionConfigContext);\n if (isStatic) {\n const [, setLatest] = useState(initial);\n useEffect(() => value.on(\"change\", setLatest), []);\n }\n return value;\n}\n\nexport { useMotionValue };\n//# sourceMappingURL=use-motion-value.mjs.map\n"],"names":["useMotionValue","initial","value","useConstant","motionValue","isStatic","useContext","MotionConfigContext","setLatest","useState","useEffect"],"mappings":";;AAuBA,SAASA,EAAeC,GAAS;AAC7B,QAAMC,IAAQC,EAAY,MAAMC,EAAYH,CAAO,CAAC,GAM9C,EAAE,UAAAI,EAAQ,IAAKC,EAAWC,CAAmB;AACnD,MAAIF,GAAU;AACV,UAAM,GAAGG,CAAS,IAAIC,EAASR,CAAO;AACtC,IAAAS,EAAU,MAAMR,EAAM,GAAG,UAAUM,CAAS,GAAG,EAAE;AAAA,EACzD;AACI,SAAON;AACX;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"use-motion-value-eGwNuWuw.js","sources":["../node_modules/framer-motion/dist/es/value/use-motion-value.mjs"],"sourcesContent":["\"use client\";\nimport { motionValue } from 'motion-dom';\nimport { useContext, useState, useEffect } from 'react';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { useConstant } from '../utils/use-constant.mjs';\n\n/**\n * Creates a `MotionValue` to track the state and velocity of a value.\n *\n * Usually, these are created automatically. For advanced use-cases, like use with `useTransform`, you can create `MotionValue`s externally and pass them into the animated component via the `style` prop.\n *\n * ```jsx\n * export const MyComponent = () => {\n * const scale = useMotionValue(1)\n *\n * return <motion.div style={{ scale }} />\n * }\n * ```\n *\n * @param initial - The initial state.\n *\n * @public\n */\nfunction useMotionValue(initial) {\n const value = useConstant(() => motionValue(initial));\n /**\n * If this motion value is being used in static mode, like on\n * the Framer canvas, force components to rerender when the motion\n * value is updated.\n */\n const { isStatic } = useContext(MotionConfigContext);\n if (isStatic) {\n const [, setLatest] = useState(initial);\n useEffect(() => value.on(\"change\", setLatest), []);\n }\n return value;\n}\n\nexport { useMotionValue };\n//# sourceMappingURL=use-motion-value.mjs.map\n"],"names":["useMotionValue","initial","value","useConstant","motionValue","isStatic","useContext","MotionConfigContext","setLatest","useState","useEffect"],"mappings":";;AAuBA,SAASA,EAAeC,GAAS;AAC7B,QAAMC,IAAQC,EAAY,MAAMC,EAAYH,CAAO,CAAC,GAM9C,EAAE,UAAAI,EAAQ,IAAKC,EAAWC,CAAmB;AACnD,MAAIF,GAAU;AACV,UAAM,GAAGG,CAAS,IAAIC,EAASR,CAAO;AACtC,IAAAS,EAAU,MAAMR,EAAM,GAAG,UAAUM,CAAS,GAAG,EAAE;AAAA,EACzD;AACI,SAAON;AACX;","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@g4rcez/components",
3
3
  "description": "Customizable react components.",
4
- "version": "3.0.2",
4
+ "version": "4.0.1",
5
5
  "sideEffects": false,
6
6
  "private": false,
7
7
  "packageManager": "pnpm@10.12.3",
@@ -40,11 +40,11 @@
40
40
  "dependencies": {
41
41
  "@base-ui/react": "1.2.0",
42
42
  "@floating-ui/react": "0.27.18",
43
+ "@phosphor-icons/react": "2.1.10",
43
44
  "class-variance-authority": "0.7.1",
44
45
  "clsx": "2.1.1",
45
46
  "date-fns": "4.1.0",
46
47
  "linq-arrays": "3.2.5",
47
- "lucide-react": "0.575.0",
48
48
  "motion": "12.34.3",
49
49
  "pretty-bytes": "7.1.0",
50
50
  "qs": "6.15.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"autocomplete-Boida9R7.js","sources":["../src/hooks/use-is-coarse-device.ts","../src/hooks/use-remove-scroll.ts","../src/lib/fzf.ts","../src/components/form/autocomplete.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { isSsr } from \"../lib/fns\";\n\nconst getCoarse = () => window.matchMedia(\"@media (pointer: coarse)\");\n\nexport const useIsCoarseDevice = (): boolean => {\n const ref = useRef(isSsr() ? null : getCoarse());\n const [isCoarse, setIsCoarse] = useState<boolean>(isSsr() ? false : (ref.current?.matches ?? false));\n useEffect(() => {\n const coerse = ref.current === null ? getCoarse() : ref.current;\n coerse.addEventListener(\"change\", (e) => setIsCoarse(e.matches));\n }, []);\n\n return isCoarse;\n};\n","import { useEffect, useRef } from \"react\";\nimport { Is, onlyNumbers } from \"sidekicker\";\nimport { hasVerticalScroll } from \"../lib/dom\";\nimport { isMobile, isSsr } from \"../lib/fns\";\nimport { useIsCoarseDevice } from \"./use-is-coarse-device\";\n\ntype ScrollRemoveStyle = \"overflow-hidden\" | \"block-only\";\n\nexport const useRemoveScroll = <T extends HTMLElement>(remove: boolean, removeStyle: ScrollRemoveStyle = \"overflow-hidden\") => {\n const ref = useRef<T | null>(null);\n const isCoarseDevice = useIsCoarseDevice();\n const prev = useRef(isSsr() ? \"\" : document.documentElement.style.overflowY);\n\n useEffect(() => {\n if (ref.current === null && !remove) return;\n if (removeStyle === \"block-only\") return;\n if (removeStyle === \"overflow-hidden\") {\n if (remove) {\n prev.current = document.documentElement.style.overflowY;\n document.documentElement.style.overflowY = \"hidden\";\n if (isCoarseDevice || isMobile()) return;\n document.documentElement.style.padding = hasVerticalScroll(document.documentElement) ? \"0 15px 0 0\" : \"\";\n } else {\n document.documentElement.style.padding = \"\";\n document.documentElement.style.overflowY = prev.current;\n }\n }\n }, [remove, isCoarseDevice, removeStyle]);\n\n useEffect(() => {\n if (!remove) return;\n const controller = new AbortController();\n const html = document.documentElement;\n const removeScroll = (e: Event) => {\n const el = ref.current;\n if (el) {\n if (el.contains(e.target as HTMLElement)) {\n const rect = el.getBoundingClientRect();\n const realHeight = el.style.height ? Number(onlyNumbers(el.style.height)) : null;\n const scrollable = Is.number(realHeight) ? realHeight : rect.height;\n const hasScroll = el.scrollHeight <= scrollable;\n if (scrollable === el.scrollHeight) return remove ? e.preventDefault() : undefined;\n if (hasScroll) return;\n return remove ? e.preventDefault() : undefined;\n }\n }\n if (e.currentTarget === document.documentElement) {\n return remove ? e.preventDefault() : undefined;\n }\n return remove ? e.preventDefault() : undefined;\n };\n html.addEventListener(\"wheel\", removeScroll, { signal: controller.signal, passive: false });\n html.addEventListener(\"scroll\", removeScroll, { signal: controller.signal, passive: false });\n return () => {\n controller.abort();\n };\n }, [remove]);\n\n return ref;\n};\n","import { Is } from \"sidekicker\";\nimport { Any, Walk } from \"../types\";\n\nexport const fuzzyMatch = (text: string, search: string): number | null => {\n text = String(text).toLocaleLowerCase();\n search = String(search).toLocaleLowerCase();\n const firstChar = search[0];\n const firstCharIndexes = text\n .split(\"\")\n .map((char, index) => (char === firstChar ? index : false))\n .filter((index): index is number => index !== false);\n\n if (firstCharIndexes.length === 0) {\n return null;\n }\n const matchedIndexes: number[][] = [];\n firstCharIndexes.forEach((startingIndex) => {\n let index = startingIndex + 1;\n const indexes = [startingIndex];\n for (let i = 1; i < search.length; i++) {\n const letter = search[i]!;\n index = text.indexOf(letter, index);\n\n if (index === -1) {\n return;\n }\n indexes.push(index);\n index++;\n }\n matchedIndexes.push(indexes);\n });\n\n if (matchedIndexes.length === 0) {\n return null;\n }\n const bestMatch = matchedIndexes.sort((a, b) => {\n if (a.length === 1) {\n return a[0]! - b[0]!;\n }\n const aSpread = a[a.length - 1]! - a[0]!;\n const bSpread = b[b.length - 1]! - b[0]!;\n\n return aSpread - bSpread;\n })[0]!;\n if (text === search) {\n return 1;\n } else if (bestMatch.length > 1) {\n return 2 + (bestMatch[bestMatch.length - 1]! - bestMatch[0]!);\n }\n return 2 + bestMatch[0]!;\n};\n\nexport type Match = \"EQUAL\" | \"CONTAINS\" | \"CONTAINS_NUMBERS\" | \"STARTS_WITH\" | \"ENDS_WITH\" | \"FUZZY\";\n\nexport type MatchValue<T> = {\n match?: Match;\n score?: number;\n key: Walk<T>;\n value: string | string[];\n ifNotMatch?: (value: string, source: string) => boolean;\n};\n\nexport type Matcher<T> = { match?: Match; key: Walk<T> };\n\nconst travel = (path: string, regexp: RegExp, obj: any): any => {\n const keys = path.split(regexp).filter(Boolean);\n let res = obj;\n for (const key of keys) {\n if (res === null || res === undefined) {\n return res;\n }\n res = res[key];\n }\n return res;\n};\n\nconst regexPaths = { basic: /[,[\\]]+?/, extend: /[,[\\].]+?/ };\n\nconst path = <T extends Any, V>(obj: T, path: Walk<T>): V => {\n const result = travel(path as string, regexPaths.basic, obj);\n if (result !== undefined && result !== obj) return result;\n return travel(path as string, regexPaths.extend, obj);\n};\n\nconst onlyNumbers = (str: string) => str.replace(/[^0-9]/g, \"\");\n\nconst diacritics = (input: string): string => input.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n\nconst strCompare = (text: string, value: string, _?: number, match: Match = \"FUZZY\"): boolean => {\n if (match === \"CONTAINS\") {\n return text.includes(value);\n }\n if (match === \"EQUAL\") {\n return text === value;\n }\n if (match === \"CONTAINS_NUMBERS\") {\n return onlyNumbers(text).includes(onlyNumbers(value));\n }\n if (match === \"STARTS_WITH\") {\n return text.startsWith(value);\n }\n if (match === \"ENDS_WITH\") {\n return text.endsWith(value);\n }\n if (match === \"FUZZY\") {\n const r = fuzzyMatch(text, value);\n return r !== null;\n }\n return false;\n};\n\nconst compare = (search: string, value: string | string[], defaultScore?: number, match: Match = \"FUZZY\"): boolean =>\n Array.isArray(value) ? value.some((x) => strCompare(search, x, defaultScore, match)) : strCompare(search, value, defaultScore, match);\n\nexport const fzf = <T extends Any, ID extends Walk<T>>(items: T[], id: ID, keys: MatchValue<T>[]) => {\n if (keys.length === 0) {\n return items;\n }\n const map = new Map<ID, T>();\n const remap = keys.map((x) => {\n return { ...x, value: Is.array(x.value) ? x.value.map(diacritics) : diacritics(`${x.value}`) };\n });\n items.forEach((item) => {\n const idVal = path<T, ID>(item, id);\n remap.forEach((filter) => {\n const searchValue = path(item, filter.key);\n if (!searchValue) return;\n const target = diacritics(`${filter.value}`.toLocaleLowerCase()).trim();\n const search = diacritics(`${searchValue}`.toLocaleLowerCase()).trim();\n if (compare(search, target, filter.score, filter.match)) {\n return void map.set(idVal, item);\n }\n if (Is.function(filter.ifNotMatch)) {\n const result = filter.ifNotMatch(target, search);\n if (result) map.set(idVal, item);\n }\n });\n });\n return Array.from(map.values());\n};\n","\"use client\";\nimport {\n autoPlacement,\n autoUpdate,\n FloatingFocusManager,\n FloatingPortal,\n offset,\n size,\n useDismiss,\n useFloating,\n useInteractions,\n useListNavigation,\n useRole,\n useTransitionStyles,\n} from \"@floating-ui/react\";\nimport { ChevronDown } from \"lucide-react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport React, { forwardRef, Fragment, type PropsWithChildren, useEffect, useRef, useState } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { Virtuoso, type VirtuosoHandle } from \"react-virtuoso\";\nimport { Is } from \"sidekicker\";\nimport { useRemoveScroll } from \"../../hooks/use-remove-scroll\";\nimport { useTranslations } from \"../../hooks/use-translations\";\nimport { css, dispatchInput, getRemainingSize, initializeInputDataset, mergeRefs } from \"../../lib/dom\";\nimport { safeRegex } from \"../../lib/fns\";\nimport { fzf } from \"../../lib/fzf\";\nimport { Label } from \"../../types\";\nimport { InputField, InputFieldProps } from \"./input-field\";\nimport { type OptionProps } from \"./select\";\n\nexport type AutocompleteItemProps = OptionProps & { Render?: React.FC<OptionProps> };\n\nexport type AutocompleteProps = Omit<InputFieldProps<\"input\">, \"value\"> & {\n title?: string;\n value?: string;\n emptyMessage?: Label;\n dynamicOption?: boolean;\n options: AutocompleteItemProps[];\n};\n\nconst Frag = (props: PropsWithChildren) => <Fragment>{props.children}</Fragment>;\n\nconst transitionStyles = {\n duration: 200,\n open: { transform: \"scaleY(1)\", opacity: 1 },\n close: { transform: \"scaleY(0)\", opacity: 0 },\n initial: { transform: \"scaleY(0)\", opacity: 0.2 },\n} as const;\n\nconst emptyRef: any[] = [];\n\nconst List = forwardRef(function VirtualList(props: any, ref: any) {\n return (\n <motion.ul {...props} ref={ref as any} className=\"max-h-96 w-full overscroll-contain rounded-lg\">\n <AnimatePresence>{props.children}</AnimatePresence>\n </motion.ul>\n );\n});\n\nconst Item = forwardRef(function VirtualItem({ item, context, ...props }: any, ref: any) {\n return <motion.li {...props} ref={ref as any} className=\"first:rounded-t-lg last:rounded-t-lg\" />;\n});\n\nconst components = { List, Item };\n\nconst MIN_SIZE = 40;\n\nexport const Autocomplete = forwardRef<HTMLInputElement, AutocompleteProps>(\n (\n {\n left,\n error,\n right,\n loading,\n options,\n container,\n rightLabel,\n interactive,\n emptyMessage,\n optionalText,\n labelClassName,\n feedback = null,\n hideLeft = false,\n required = false,\n dynamicOption = false,\n ...props\n }: AutocompleteProps,\n externalRef\n ) => {\n const scroller = useRef<HTMLElement | null>(null);\n const fieldset = useRef<HTMLFieldSetElement>(null);\n const virtuoso = useRef<VirtuosoHandle | null>(null);\n const defaults = props.value ?? props.defaultValue ?? \"\";\n const translation = useTranslations();\n const [h, setH] = useState(() => Math.min(320, MIN_SIZE * options.length));\n const [open, setOpen] = useState(false);\n const [shadow, setShadow] = useState(\"\");\n const [value, setValue] = useState(defaults);\n const [label, setLabel] = useState(() => options.find((x) => x.value === defaults)?.label ?? defaults);\n const [index, setIndex] = useState<number | null>(null);\n const listRef = useRef<Array<HTMLElement | null>>(emptyRef);\n const removeScrollRef = useRemoveScroll(open, \"block-only\");\n const innerOptions: AutocompleteItemProps[] =\n dynamicOption && shadow !== \"\"\n ? [\n {\n value: shadow,\n label: shadow,\n \"data-dynamic\": \"true\",\n },\n ...options,\n ]\n : options;\n\n const openDropdown = () => flushSync(() => setOpen(true));\n\n const list = shadow\n ? fzf(innerOptions, \"value\", [\n { key: \"value\", value: shadow },\n { key: \"label\", value: shadow },\n ])\n : innerOptions;\n\n const setClosed = () => {\n setOpen(false);\n setH(0);\n };\n\n const displayList = list.filter((x) => x.hidden !== true);\n\n const pattern = dynamicOption\n ? undefined\n : `^(${options.map((x) => `${safeRegex(x.value)}${x.label ? \"|\" + safeRegex(x.label) : \"\"}`).join(\"|\")})$`;\n\n const { x, y, strategy, refs, context, placement } = useFloating<HTMLInputElement>({\n open,\n transform: true,\n onOpenChange: setOpen,\n placement: \"bottom-start\",\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(4),\n autoPlacement({ allowedPlacements: [\"top-start\", \"bottom-start\"], alignment: \"start\" }),\n size({\n padding: 10,\n elementContext: \"reference\",\n apply(args) {\n const ul = args.elements.floating.querySelector(\"ul\");\n const fullSize = ul?.getBoundingClientRect().height || 0;\n const DEFAULT_SIZE = getRemainingSize(refs.reference!.current as HTMLElement, window.innerHeight);\n const maxH = Math.min(fullSize < MIN_SIZE ? DEFAULT_SIZE : fullSize, DEFAULT_SIZE, args.availableHeight);\n const size = displayList.length === 0 ? MIN_SIZE : Math.min(maxH, DEFAULT_SIZE, fullSize);\n const mw = `${fieldset.current?.getBoundingClientRect().width || DEFAULT_SIZE}px`;\n Object.assign(args.elements.floating.style, { width: mw, maxWidth: mw, height: size });\n },\n }),\n ],\n });\n const transitions = useTransitionStyles(context, transitionStyles);\n const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([\n useRole(context, { role: \"listbox\" }),\n useDismiss(context),\n useListNavigation(context, {\n cols: 0,\n listRef,\n loop: true,\n virtual: true,\n allowEscape: true,\n activeIndex: index,\n selectedIndex: index,\n focusItemOnOpen: \"auto\",\n openOnArrowKeyDown: true,\n scrollItemIntoView: true,\n }),\n ]);\n\n useEffect(() => {\n if (props.value) {\n const item = options.find((x) => x.value === props.value);\n if (item) {\n setLabel(item.label ?? item.value);\n setValue(props.value);\n }\n }\n }, [props.value, options.length]);\n\n useEffect(() => {\n if (!open) return setH(0);\n const inputRef = refs.reference;\n if (inputRef.current === null) return;\n const s = getRemainingSize(inputRef.current as HTMLElement, window.innerHeight);\n setTimeout(() => setH(Math.min(s, displayList.length * MIN_SIZE)), 100);\n }, [shadow, open, refs.reference, displayList.length]);\n\n useEffect(() => {\n const input = refs.reference.current as HTMLInputElement;\n if (!input) return;\n return initializeInputDataset(input);\n }, []);\n\n const onSelect = (opt: AutocompleteItemProps, i: number) => {\n setValue(opt.value);\n const input = refs.reference.current as HTMLInputElement;\n if (!input) return;\n input?.setAttribute(\"data-value\", opt.value);\n input.value = opt.value;\n const event = new Event(\"change\", { bubbles: false, cancelable: true });\n input.dispatchEvent(event);\n if (props.onChange) props.onChange(event as any);\n setLabel(opt.label ?? \"\");\n setClosed();\n setShadow(\"\");\n setIndex(i);\n };\n\n const onChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value;\n setShadow(value);\n if (!open && value === \"\") return setOpen(true);\n event.target.name = props.name || \"\";\n return value ? setOpen(true) : props.onChange?.(event);\n };\n\n const onCaretDownClick = () => {\n openDropdown();\n setShadow(\"\");\n (refs.reference.current as HTMLInputElement)?.focus();\n };\n\n const onFocus = () => {\n setIndex((prev) => (prev === null ? 0 : prev));\n openDropdown();\n setShadow(\"\");\n };\n\n const onClose = () => {\n (refs.reference.current as HTMLInputElement)?.setAttribute(\"data-value\", \"\");\n setShadow(\"\");\n setValue(\"\");\n setLabel(\"\");\n dispatchInput(refs.reference.current as HTMLInputElement);\n setClosed();\n };\n\n const id = props.id || props.name;\n\n const shadowId = `${id}-shadow`;\n\n const isEmpty = displayList.length === 0;\n\n const isTopPlacement = placement === \"top\" || placement === \"top-start\";\n\n return (\n <InputField\n {...(props as any)}\n left={left}\n error={error}\n ref={fieldset}\n form={props.form}\n loading={loading}\n name={props.name}\n feedback={open && isTopPlacement ? props.title : feedback}\n hideLeft={hideLeft}\n required={required}\n title={props.title}\n container={container}\n rightLabel={rightLabel}\n interactive={interactive}\n id={shadowId}\n optionalText={optionalText}\n componentName=\"autocomplete\"\n labelClassName={labelClassName}\n placeholder={props.placeholder}\n right={\n <span className=\"flex items-center gap-0.5\">\n {right}\n <button type=\"button\" className=\"p-2 transition-colors link:text-primary md:p-1\" onClick={onCaretDownClick}>\n <ChevronDown size={20} />\n <span className=\"sr-only\">{translation.inputCaretDown}</span>\n </button>\n {value ? (\n <button type=\"button\" onClick={onClose} className=\"p-2 transition-colors link:text-danger md:p-1\">\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n ) : null}\n </span>\n }\n >\n <input\n data-shadow=\"true\"\n {...(getReferenceProps({\n ...props,\n onFocus,\n pattern,\n onChange,\n id: shadowId,\n name: shadowId,\n ref: refs.setReference,\n onClick: (e: React.MouseEvent<HTMLInputElement>) => e.currentTarget.focus(),\n onKeyDown(event: React.KeyboardEvent<HTMLInputElement>) {\n if (event.key === \"Escape\") {\n event.currentTarget.blur();\n return setClosed();\n }\n if (!open) return;\n if (event.key === \"ArrowDown\") {\n let next = Is.number(index) ? index + 1 : 0;\n if (next > displayList.length - 1) next = 0;\n virtuoso.current?.scrollIntoView({ index: next });\n return setIndex(next);\n }\n if (event.key === \"ArrowUp\") {\n let next = Is.number(index) ? index! - 1 : displayList.length - 1;\n if (next < 0) next = displayList.length - 1;\n virtuoso.current?.scrollIntoView({ index: next });\n return setIndex(next);\n }\n if (event.key === \"Enter\") {\n if (index !== null && displayList[index]) {\n event.preventDefault();\n return onSelect(displayList[index], index);\n }\n if (displayList.length === 1) {\n event.preventDefault();\n return onSelect(displayList[0], 0);\n }\n }\n },\n } as any) as any)}\n data-value={value}\n data-error={!!error}\n data-name={id}\n data-target={id}\n required={required}\n value={open ? shadow : options.length === 0 ? \"\" : label || value}\n aria-autocomplete=\"list\"\n autoComplete=\"off\"\n className={css(\n \"input placeholder-input-mask group h-input-height w-full flex-1\",\n \"rounded-md bg-transparent px-input-x py-input-y text-foreground\",\n \"outline-none transition-colors focus:ring-2 focus:ring-inset focus:ring-primary\",\n \"group-error:text-danger group-error:placeholder-input-mask-error\",\n \"text-base group-focus-within:border-primary group-hover:border-primary\",\n props.className\n )}\n />\n <input\n id={id}\n name={id}\n type=\"hidden\"\n data-origin={id}\n ref={externalRef}\n required={required}\n defaultValue={props.value || value || undefined}\n />\n <FloatingPortal preserveTabOrder>\n {open ? (\n <FloatingFocusManager modal guards returnFocus={false} context={context} initialFocus={-1} visuallyHiddenDismiss>\n <motion.div\n {...getFloatingProps({\n ref: mergeRefs(removeScrollRef as any, refs.setFloating as any) as any,\n style: { ...transitions.styles, left: x, top: y ?? 0, position: strategy, height: \"auto\" },\n })}\n initial={false}\n data-floating=\"true\"\n animate={{ height: isEmpty ? \"auto\" : h }}\n className={css(\n \"shadow-floating isolate z-floating m-0 max-h-80 origin-[top_center] list-none overscroll-contain rounded-b-lg rounded-t-lg border border-floating-border bg-floating-background p-0 text-foreground ease-in-out\",\n isTopPlacement ? \"origin-[bottom_center]\" : \"origin-[top_center]\"\n )}\n onAnimationComplete={() => {\n if (!open) return setH(0);\n const ul = refs.floating.current as HTMLElement;\n const li = ul.querySelectorAll(\"li\").item(0);\n const sum = (li ? li.getBoundingClientRect().height : MIN_SIZE) * displayList.length;\n return flushSync(() => setH(sum + 2));\n }}\n >\n {isEmpty ? (\n <div role=\"option\" className=\"w-full border-b border-tooltip-border\">\n <span className=\"flex w-full justify-between p-2 text-left text-disabled\">\n {emptyMessage || translation.autocompleteEmpty}\n </span>\n </div>\n ) : null}\n <Virtuoso\n overscan={40}\n ref={virtuoso}\n hidden={isEmpty}\n data={displayList}\n style={{ height: h }}\n defaultItemHeight={MIN_SIZE}\n components={components as any}\n scrollerRef={(e) => void (scroller.current = e as HTMLElement)}\n className=\"border-floating max-h-full overscroll-contain rounded-lg bg-floating-background p-0 text-foreground\"\n itemContent={(i, option) => {\n const Label = (option.Render as React.FC<any>) ?? Frag;\n const active = value === option.value || value === option.label;\n const selected = index === i;\n const children = option.label ?? option.value;\n return (\n <button\n data-value={option.value}\n {...getItemProps({\n ref: (node) => void (listRef.current[i] = node) as any,\n role: \"option\",\n type: \"button\",\n \"aria-checked\": active,\n \"aria-current\": active,\n \"aria-selected\": active,\n \"aria-busy\": option.disabled,\n onClick: () => onSelect(option, i),\n className: `cursor-pointer min-h-10 hover:bg-floating-hover w-full p-2 text-left ${active ? \"bg-primary-hover text-primary-foreground\" : \"\"} ${selected ? \"bg-floating-hover text-floating-foreground\" : \"\"}`,\n })}\n >\n <Label {...props} label={option.label} value={option.value} children={children} />\n </button>\n );\n }}\n />\n </motion.div>\n </FloatingFocusManager>\n ) : null}\n </FloatingPortal>\n </InputField>\n );\n }\n);\n"],"names":["getCoarse","useIsCoarseDevice","ref","useRef","isSsr","isCoarse","setIsCoarse","useState","useEffect","e","useRemoveScroll","remove","removeStyle","isCoarseDevice","prev","isMobile","hasVerticalScroll","controller","html","removeScroll","el","rect","realHeight","onlyNumbers","scrollable","Is","hasScroll","fuzzyMatch","text","search","firstChar","firstCharIndexes","char","index","matchedIndexes","startingIndex","indexes","i","letter","bestMatch","a","b","aSpread","bSpread","travel","path","regexp","obj","keys","res","key","regexPaths","result","str","diacritics","input","strCompare","value","_","match","compare","defaultScore","x","fzf","items","id","map","remap","item","idVal","filter","searchValue","target","Frag","props","jsx","Fragment","transitionStyles","emptyRef","List","forwardRef","motion","AnimatePresence","Item","context","components","MIN_SIZE","Autocomplete","left","error","right","loading","options","container","rightLabel","interactive","emptyMessage","optionalText","labelClassName","feedback","hideLeft","required","dynamicOption","externalRef","scroller","fieldset","virtuoso","defaults","translation","useTranslations","h","setH","open","setOpen","shadow","setShadow","setValue","label","setLabel","setIndex","listRef","removeScrollRef","innerOptions","openDropdown","flushSync","list","setClosed","displayList","pattern","safeRegex","y","strategy","refs","placement","useFloating","autoUpdate","offset","autoPlacement","size","args","fullSize","DEFAULT_SIZE","getRemainingSize","maxH","mw","transitions","useTransitionStyles","getReferenceProps","getFloatingProps","getItemProps","useInteractions","useRole","useDismiss","useListNavigation","inputRef","s","initializeInputDataset","onSelect","opt","event","onChange","onCaretDownClick","onFocus","onClose","dispatchInput","shadowId","isEmpty","isTopPlacement","jsxs","InputField","ChevronDown","next","css","FloatingPortal","FloatingFocusManager","mergeRefs","li","sum","Virtuoso","option","Label","active","selected","children","node"],"mappings":"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"}