@yamada-ui/react 2.2.1-dev-20260428094054 → 2.2.1-dev-20260428101442

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 (204) hide show
  1. package/dist/cjs/components/pin-input/use-pin-input.cjs +3 -5
  2. package/dist/cjs/components/pin-input/use-pin-input.cjs.map +1 -1
  3. package/dist/cjs/components/qr-code/use-qr-code.cjs +3 -4
  4. package/dist/cjs/components/qr-code/use-qr-code.cjs.map +1 -1
  5. package/dist/esm/components/pin-input/use-pin-input.js +3 -5
  6. package/dist/esm/components/pin-input/use-pin-input.js.map +1 -1
  7. package/dist/esm/components/qr-code/use-qr-code.js +3 -4
  8. package/dist/esm/components/qr-code/use-qr-code.js.map +1 -1
  9. package/dist/types/components/accordion/accordion.d.ts +2 -2
  10. package/dist/types/components/accordion/use-accordion.d.ts +11 -11
  11. package/dist/types/components/action-bar/action-bar.d.ts +2 -2
  12. package/dist/types/components/airy/airy.d.ts +2 -2
  13. package/dist/types/components/alert/alert.d.ts +2 -2
  14. package/dist/types/components/alert/alert.style.d.ts +1 -1
  15. package/dist/types/components/alpha-slider/alpha-slider.d.ts +2 -2
  16. package/dist/types/components/aspect-ratio/aspect-ratio.d.ts +2 -2
  17. package/dist/types/components/autocomplete/autocomplete.d.ts +2 -2
  18. package/dist/types/components/autocomplete/autocomplete.style.d.ts +1 -1
  19. package/dist/types/components/autocomplete/use-autocomplete.d.ts +5 -5
  20. package/dist/types/components/avatar/avatar.d.ts +5 -5
  21. package/dist/types/components/avatar/use-avatar-group.d.ts +2 -2
  22. package/dist/types/components/badge/badge.d.ts +2 -2
  23. package/dist/types/components/bleed/bleed.d.ts +2 -2
  24. package/dist/types/components/blockquote/blockquote.d.ts +2 -2
  25. package/dist/types/components/breadcrumb/breadcrumb.d.ts +2 -2
  26. package/dist/types/components/breadcrumb/use-breadcrumb.d.ts +2 -2
  27. package/dist/types/components/button/button.d.ts +2 -2
  28. package/dist/types/components/button/icon-button.d.ts +2 -2
  29. package/dist/types/components/calendar/calendar.d.ts +2 -2
  30. package/dist/types/components/calendar/calendar.style.d.ts +2 -2
  31. package/dist/types/components/calendar/use-calendar.d.ts +8 -8
  32. package/dist/types/components/card/card.d.ts +2 -2
  33. package/dist/types/components/carousel/carousel.d.ts +2 -2
  34. package/dist/types/components/carousel/carousel.style.d.ts +2 -2
  35. package/dist/types/components/carousel/use-carousel.d.ts +3 -3
  36. package/dist/types/components/center/center.d.ts +2 -2
  37. package/dist/types/components/chart/cartesian-chart.style.d.ts +1 -1
  38. package/dist/types/components/chart/chart.d.ts +5 -5
  39. package/dist/types/components/chart/chart.style.d.ts +2 -2
  40. package/dist/types/components/chart/composed-chart.d.ts +2 -2
  41. package/dist/types/components/chart/donut-chart.d.ts +2 -2
  42. package/dist/types/components/chart/polar-chart.style.d.ts +1 -1
  43. package/dist/types/components/chart/use-chart.d.ts +2 -2
  44. package/dist/types/components/checkbox/checkbox.d.ts +4 -4
  45. package/dist/types/components/checkbox/use-checkbox-group.d.ts +2 -2
  46. package/dist/types/components/checkbox-card/checkbox-card.d.ts +5 -5
  47. package/dist/types/components/checkbox-card/checkbox-card.style.d.ts +1 -1
  48. package/dist/types/components/circle-progress/circle-progress.d.ts +2 -2
  49. package/dist/types/components/close-button/close-button.d.ts +2 -2
  50. package/dist/types/components/code/code.d.ts +2 -2
  51. package/dist/types/components/collapse/collapse.d.ts +2 -2
  52. package/dist/types/components/color-picker/color-picker.d.ts +2 -2
  53. package/dist/types/components/color-picker/use-color-picker.d.ts +2 -2
  54. package/dist/types/components/color-selector/color-selector.d.ts +2 -2
  55. package/dist/types/components/color-selector/color-selector.style.d.ts +2 -2
  56. package/dist/types/components/color-selector/use-color-selector.d.ts +3 -3
  57. package/dist/types/components/color-swatch/color-swatch.d.ts +2 -2
  58. package/dist/types/components/container/container.d.ts +2 -2
  59. package/dist/types/components/data-list/data-list.d.ts +2 -2
  60. package/dist/types/components/date-picker/date-picker.d.ts +2 -2
  61. package/dist/types/components/date-picker/use-date-picker.d.ts +4 -4
  62. package/dist/types/components/drawer/drawer.d.ts +2 -2
  63. package/dist/types/components/dropzone/dropzone.d.ts +3 -3
  64. package/dist/types/components/dropzone/dropzone.style.d.ts +1 -1
  65. package/dist/types/components/editable/editable.d.ts +3 -3
  66. package/dist/types/components/editable/editable.style.d.ts +1 -1
  67. package/dist/types/components/editable/use-editable.d.ts +2 -2
  68. package/dist/types/components/em/em.d.ts +2 -2
  69. package/dist/types/components/empty-state/empty-state.d.ts +2 -2
  70. package/dist/types/components/empty-state/empty-state.style.d.ts +2 -2
  71. package/dist/types/components/fade/fade.d.ts +2 -2
  72. package/dist/types/components/field/field.d.ts +3 -3
  73. package/dist/types/components/field/use-field-props.d.ts +4 -4
  74. package/dist/types/components/fieldset/fieldset.d.ts +3 -3
  75. package/dist/types/components/file-button/file-button.d.ts +2 -2
  76. package/dist/types/components/file-button/use-file-button.d.ts +18 -18
  77. package/dist/types/components/file-input/file-input.d.ts +2 -2
  78. package/dist/types/components/file-input/use-file-input.d.ts +17 -17
  79. package/dist/types/components/flex/flex.d.ts +2 -2
  80. package/dist/types/components/flip/flip.d.ts +2 -2
  81. package/dist/types/components/float/float.d.ts +2 -2
  82. package/dist/types/components/form/form.d.ts +3 -3
  83. package/dist/types/components/format/format-byte.d.ts +2 -2
  84. package/dist/types/components/format/format-date-time.d.ts +2 -2
  85. package/dist/types/components/format/format-number.d.ts +2 -2
  86. package/dist/types/components/grid/grid-item.d.ts +2 -2
  87. package/dist/types/components/grid/grid.d.ts +2 -2
  88. package/dist/types/components/group/group.d.ts +2 -2
  89. package/dist/types/components/group/use-group.d.ts +2 -2
  90. package/dist/types/components/heading/heading.d.ts +2 -2
  91. package/dist/types/components/hue-slider/hue-slider.d.ts +3 -3
  92. package/dist/types/components/icon/icon.d.ts +5 -5
  93. package/dist/types/components/image/image.d.ts +2 -2
  94. package/dist/types/components/indicator/indicator.d.ts +4 -4
  95. package/dist/types/components/infinite-scroll-area/infinite-scroll-area.d.ts +2 -2
  96. package/dist/types/components/input/input-addon.d.ts +2 -2
  97. package/dist/types/components/input/input-element.d.ts +2 -2
  98. package/dist/types/components/input/input.d.ts +2 -2
  99. package/dist/types/components/kbd/kbd.d.ts +2 -2
  100. package/dist/types/components/link/link.d.ts +2 -2
  101. package/dist/types/components/link-box/link-box.d.ts +2 -2
  102. package/dist/types/components/list/list.d.ts +2 -2
  103. package/dist/types/components/loading/loading-provider.d.ts +2 -2
  104. package/dist/types/components/loading/loading.d.ts +3 -3
  105. package/dist/types/components/mark/mark.d.ts +2 -2
  106. package/dist/types/components/menu/menu.d.ts +2 -2
  107. package/dist/types/components/menu/menu.style.d.ts +2 -2
  108. package/dist/types/components/menu/use-menu.d.ts +11 -11
  109. package/dist/types/components/modal/modal.d.ts +2 -2
  110. package/dist/types/components/native-accordion/native-accordion.d.ts +2 -2
  111. package/dist/types/components/native-accordion/use-native-accordion.d.ts +2 -2
  112. package/dist/types/components/native-popover/native-popover.d.ts +2 -2
  113. package/dist/types/components/native-select/native-select.d.ts +2 -2
  114. package/dist/types/components/native-table/native-table.d.ts +2 -2
  115. package/dist/types/components/notice/notice.style.d.ts +1 -1
  116. package/dist/types/components/number-input/number-input.d.ts +2 -2
  117. package/dist/types/components/number-input/number-input.style.d.ts +1 -1
  118. package/dist/types/components/pagination/pagination.d.ts +2 -2
  119. package/dist/types/components/pagination/use-pagination.d.ts +2 -2
  120. package/dist/types/components/password-input/password-input.d.ts +2 -2
  121. package/dist/types/components/password-input/strength-meter.d.ts +2 -2
  122. package/dist/types/components/password-input/use-password-input.d.ts +2 -2
  123. package/dist/types/components/pin-input/pin-input.d.ts +2 -2
  124. package/dist/types/components/pin-input/use-pin-input.d.ts +7 -7
  125. package/dist/types/components/popover/popover.d.ts +2 -2
  126. package/dist/types/components/progress/progress.d.ts +4 -4
  127. package/dist/types/components/progress/use-progress.d.ts +706 -706
  128. package/dist/types/components/qr-code/qr-code.d.ts +2 -2
  129. package/dist/types/components/radio/radio.d.ts +4 -4
  130. package/dist/types/components/radio/use-radio-group.d.ts +2 -2
  131. package/dist/types/components/radio-card/radio-card.d.ts +5 -5
  132. package/dist/types/components/radio-card/radio-card.style.d.ts +1 -1
  133. package/dist/types/components/rating/use-rating.d.ts +7 -7
  134. package/dist/types/components/reorder/reorder.d.ts +2 -2
  135. package/dist/types/components/reorder/reorder.style.d.ts +1 -1
  136. package/dist/types/components/reorder/use-reorder.d.ts +3 -3
  137. package/dist/types/components/resizable/resizable.d.ts +2 -2
  138. package/dist/types/components/resizable/resizable.style.d.ts +2 -2
  139. package/dist/types/components/resizable/use-resizable.d.ts +2 -2
  140. package/dist/types/components/ripple/ripple.d.ts +2 -2
  141. package/dist/types/components/ripple/use-ripple.d.ts +2 -2
  142. package/dist/types/components/rotate/rotate.d.ts +2 -2
  143. package/dist/types/components/saturation-slider/saturation-slider.d.ts +2 -2
  144. package/dist/types/components/saturation-slider/use-saturation-slider.d.ts +2 -2
  145. package/dist/types/components/scroll-area/scroll-area.d.ts +2 -2
  146. package/dist/types/components/segmented-control/segmented-control.d.ts +2 -2
  147. package/dist/types/components/segmented-control/segmented-control.style.d.ts +2 -2
  148. package/dist/types/components/segmented-control/use-segmented-control.d.ts +9 -9
  149. package/dist/types/components/select/select.d.ts +2 -2
  150. package/dist/types/components/select/use-select.d.ts +4 -4
  151. package/dist/types/components/separator/separator.d.ts +2 -2
  152. package/dist/types/components/sidebar/sidebar.d.ts +2 -2
  153. package/dist/types/components/sidebar/use-sidebar.d.ts +9 -9
  154. package/dist/types/components/simple-grid/simple-grid.d.ts +2 -2
  155. package/dist/types/components/skeleton/skeleton.d.ts +2 -2
  156. package/dist/types/components/slide/slide.d.ts +2 -2
  157. package/dist/types/components/slide-fade/slide-fade.d.ts +2 -2
  158. package/dist/types/components/slider/slider.d.ts +2 -2
  159. package/dist/types/components/slider/use-slider.d.ts +2 -2
  160. package/dist/types/components/stack/h-stack.d.ts +2 -2
  161. package/dist/types/components/stack/stack.d.ts +2 -2
  162. package/dist/types/components/stack/v-stack.d.ts +2 -2
  163. package/dist/types/components/stack/z-stack.d.ts +2 -2
  164. package/dist/types/components/stat/stat.d.ts +2 -2
  165. package/dist/types/components/stat/stat.style.d.ts +2 -2
  166. package/dist/types/components/status/status.d.ts +2 -2
  167. package/dist/types/components/steps/steps.d.ts +2 -2
  168. package/dist/types/components/steps/steps.style.d.ts +1 -1
  169. package/dist/types/components/steps/use-steps.d.ts +10 -10
  170. package/dist/types/components/switch/switch.d.ts +2 -2
  171. package/dist/types/components/table/table.d.ts +2 -2
  172. package/dist/types/components/tabs/tabs.d.ts +2 -2
  173. package/dist/types/components/tabs/tabs.style.d.ts +1 -1
  174. package/dist/types/components/tabs/use-tabs.d.ts +16 -16
  175. package/dist/types/components/tag/tag.d.ts +2 -2
  176. package/dist/types/components/text/text.d.ts +2 -2
  177. package/dist/types/components/textarea/textarea.d.ts +2 -2
  178. package/dist/types/components/textarea/use-autosize.d.ts +2 -2
  179. package/dist/types/components/timeline/timeline.d.ts +5 -5
  180. package/dist/types/components/timeline/timeline.style.d.ts +1 -1
  181. package/dist/types/components/toggle/toggle.d.ts +5 -5
  182. package/dist/types/components/toggle/use-toggle-group.d.ts +2 -2
  183. package/dist/types/components/toggle/use-toggle.d.ts +2 -2
  184. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  185. package/dist/types/components/tree/tree.d.ts +2 -2
  186. package/dist/types/components/tree/tree.style.d.ts +1 -1
  187. package/dist/types/components/tree/use-tree.d.ts +184 -184
  188. package/dist/types/components/visually-hidden/visually-hidden.d.ts +2 -2
  189. package/dist/types/components/wrap/wrap.d.ts +2 -2
  190. package/dist/types/core/components/create-component.d.ts +7 -7
  191. package/dist/types/core/system/color-mode-provider.d.ts +2 -2
  192. package/dist/types/core/system/storage-script.d.ts +3 -3
  193. package/dist/types/core/system/styled.d.ts +2 -2
  194. package/dist/types/core/system/system-provider.d.ts +2 -2
  195. package/dist/types/hooks/use-breakpoint/use-breakpoint-state.d.ts +2 -2
  196. package/dist/types/hooks/use-clickable/index.d.ts +2 -2
  197. package/dist/types/hooks/use-clipboard/index.d.ts +2 -2
  198. package/dist/types/hooks/use-combobox/index.d.ts +12 -12
  199. package/dist/types/hooks/use-counter/index.d.ts +2 -2
  200. package/dist/types/hooks/use-descendants/index.d.ts +2 -2
  201. package/dist/types/providers/i18n-provider/i18n-provider.d.ts +3 -3
  202. package/dist/types/providers/ui-provider/ui-provider.d.ts +2 -2
  203. package/dist/types/utils/children.d.ts +2 -2
  204. package/package.json +2 -2
@@ -3,6 +3,8 @@
3
3
  const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
4
4
  const require_dom = require('../../utils/dom.cjs');
5
5
  const require_utils_index = require('../../utils/index.cjs');
6
+ const require_props = require('../../core/components/props.cjs');
7
+ require('../../core/index.cjs');
6
8
  const require_hooks_use_controllable_state_index = require('../../hooks/use-controllable-state/index.cjs');
7
9
  const require_hooks_use_descendants_index = require('../../hooks/use-descendants/index.cjs');
8
10
  const require_use_field_props = require('../field/use-field-props.cjs');
@@ -132,11 +134,7 @@ const usePinInput = (props = {}) => {
132
134
  if (!firstValue) return;
133
135
  requestAnimationFrame(() => firstValue.node.focus());
134
136
  }, [autoFocus, descendants]);
135
- const getRootProps = (0, react.useCallback)((props$1) => ({
136
- role: "group",
137
- ...rest,
138
- ...props$1
139
- }), [rest]);
137
+ const getRootProps = (0, react.useCallback)((props$1) => require_props.mergeProps({ role: "group" }, rest, props$1)(), [rest]);
140
138
  return {
141
139
  descendants,
142
140
  items,
@@ -1 +1 @@
1
- {"version":3,"file":"use-pin-input.cjs","names":["createDescendants","useFieldProps","useControllableState","values","value","nextValue","index","ev","getRootProps: PropGetter","props"],"sources":["../../../../src/components/pin-input/use-pin-input.ts"],"sourcesContent":["\"use client\"\n\nimport type { ChangeEvent, KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter, RequiredPropGetter } from \"../../core\"\nimport type { FieldProps } from \"../field\"\nimport { useCallback, useEffect, useId, useState } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { cx, filterUndefined, handlerAll, runKeyAction } from \"../../utils\"\nimport { useFieldProps } from \"../field\"\n\nconst {\n DescendantsContext: PinInputDescendantsContext,\n useDescendant: usePinInputDescendant,\n useDescendants: usePinInputDescendants,\n} = createDescendants<HTMLInputElement>()\n\nexport {\n PinInputDescendantsContext,\n usePinInputDescendant,\n usePinInputDescendants,\n}\n\nconst toArray = (value?: string) => value?.split(\"\")\n\nconst validate = (value: string, type: UsePinInputProps[\"type\"]) => {\n const NUMERIC_REGEX = /^[0-9]+$/\n const ALPHA_NUMERIC_REGEX = /^[a-zA-Z0-9]+$/i\n\n const regex = type === \"alphanumeric\" ? ALPHA_NUMERIC_REGEX : NUMERIC_REGEX\n\n return regex.test(value)\n}\n\nexport interface UsePinInputProps\n extends\n Omit<HTMLProps, \"defaultValue\" | \"mask\" | \"onChange\" | \"value\">,\n FieldProps {\n /**\n * If `true`, the pin input receives focus on mount.\n *\n * @default false\n */\n autoFocus?: boolean\n /**\n * The initial value of the pin input.\n */\n defaultValue?: string\n /**\n * The top-level id string that will be applied to the input fields.\n * The index of the input will be appended to this top-level id.\n */\n id?: string\n /**\n * The number of inputs to display.\n *\n * @default 4\n */\n items?: number\n /**\n * If `true`, focus will move automatically to the next input once filled.\n *\n * @default true\n */\n manageFocus?: boolean\n /**\n * If `true`, the input's value will be masked just like `type=password`.\n */\n mask?: boolean\n /**\n * If `true`, the pin input component signals to its fields that they should.\n */\n otp?: boolean\n /**\n * The placeholder for the pin input.\n *\n * @default '◯'\n */\n placeholder?: string\n /**\n * The type of values the pin-input should allow.\n *\n * @default 'number'\n */\n type?: \"alphanumeric\" | \"number\"\n /**\n * The value of the pin input.\n */\n value?: string\n /**\n * Function called on input change.\n */\n onChange?: (value: string) => void\n /**\n * Function called when all inputs have valid values.\n */\n onComplete?: (value: string) => void\n}\n\nexport const usePinInput = (props: UsePinInputProps = {}) => {\n const uuid = useId()\n const {\n context: { labelId } = {},\n props: {\n id = uuid,\n type = \"number\",\n autoFocus,\n defaultValue,\n disabled,\n items = 4,\n manageFocus = true,\n mask,\n otp = false,\n placeholder = \"◯\",\n readOnly,\n value,\n onChange: onChangeProp,\n onComplete,\n ...rest\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const descendants = usePinInputDescendants()\n const [moveFocus, setMoveFocus] = useState<boolean>(true)\n const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n const [values, setValues] = useControllableState<string[]>({\n defaultValue: toArray(defaultValue) || [],\n value: toArray(value),\n onChange: (values) => onChangeProp?.(values.join(\"\")),\n })\n\n const focusNext = useCallback(\n (index: number) => {\n if (!moveFocus || !manageFocus) return\n\n const next = descendants.nextValue(index, false)\n\n if (!next) return\n\n requestAnimationFrame(() => next.node.focus())\n },\n [descendants, moveFocus, manageFocus],\n )\n\n const focusInputField = useCallback(\n (direction: \"next\" | \"prev\", index: number) => {\n const input =\n direction === \"next\"\n ? descendants.nextValue(index, false)\n : descendants.prevValue(index, false)\n\n if (!input) return\n\n const valueLength = input.node.value.length\n\n requestAnimationFrame(() => {\n input.node.focus()\n input.node.setSelectionRange(0, valueLength)\n })\n },\n [descendants],\n )\n\n const setValue = useCallback(\n (value: string, index: number, focus = true) => {\n let nextValues = [...values]\n\n nextValues[index] = value\n\n setValues(nextValues)\n\n nextValues = nextValues.filter(Boolean)\n\n const complete = value !== \"\" && nextValues.length === descendants.count()\n\n if (complete) {\n onComplete?.(nextValues.join(\"\"))\n descendants.value(index)?.node.blur()\n } else if (focus) {\n focusNext(index)\n }\n },\n [values, setValues, descendants, onComplete, focusNext],\n )\n\n const getNextValue = useCallback(\n (value: string | undefined, eventValue: string) => {\n let nextValue = eventValue\n\n if (!value?.length) return nextValue\n\n if (value.startsWith(eventValue.charAt(0))) {\n nextValue = eventValue.charAt(1)\n } else if (value.startsWith(eventValue.charAt(1))) {\n nextValue = eventValue.charAt(0)\n }\n\n return nextValue\n },\n [],\n )\n\n const onChange = useCallback(\n (index: number) =>\n ({ target }: ChangeEvent<HTMLInputElement>) => {\n const eventValue = target.value\n const currentValue = values[index]\n const nextValue = getNextValue(currentValue, eventValue)\n\n if (nextValue === \"\") {\n setValue(\"\", index)\n\n return\n }\n\n if (eventValue.length > 2) {\n if (!validate(eventValue, type)) return\n\n const nextValue = eventValue\n .split(\"\")\n .filter((_, index) => index < descendants.count())\n\n setValues(nextValue)\n\n if (nextValue.length === descendants.count()) {\n onComplete?.(nextValue.join(\"\"))\n descendants.value(index)?.node.blur()\n }\n } else {\n if (validate(nextValue, type)) setValue(nextValue, index)\n\n setMoveFocus(true)\n }\n },\n [descendants, getNextValue, onComplete, setValue, setValues, type, values],\n )\n\n const onKeyDown = useCallback(\n (index: number) => (ev: KeyboardEvent<HTMLInputElement>) => {\n if (!manageFocus) return\n\n runKeyAction(\n ev,\n {\n ArrowLeft: (ev) => {\n ev.preventDefault()\n focusInputField(\"prev\", index)\n },\n ArrowRight: (ev) => {\n ev.preventDefault()\n focusInputField(\"next\", index)\n },\n Backspace: (ev) => {\n if ((ev.target as HTMLInputElement).value === \"\") {\n const prevInput = descendants.prevValue(index, false)\n\n if (!prevInput) return\n\n setValue(\"\", index - 1, false)\n prevInput.node.focus()\n setMoveFocus(true)\n } else {\n setMoveFocus(false)\n }\n },\n },\n { preventDefault: false },\n )\n },\n [descendants, focusInputField, manageFocus, setValue],\n )\n\n const onFocus = useCallback(\n (index: number) => () => setFocusedIndex(index),\n [],\n )\n\n const onBlur = useCallback(() => setFocusedIndex(-1), [])\n\n useEffect(() => {\n if (!autoFocus) return\n\n const firstValue = descendants.firstValue()\n\n if (!firstValue) return\n\n requestAnimationFrame(() => firstValue.node.focus())\n }, [autoFocus, descendants])\n\n const getRootProps: PropGetter = useCallback(\n (props) => ({\n role: \"group\",\n ...rest,\n ...props,\n }),\n [rest],\n )\n\n const getInputProps: RequiredPropGetter<\"input\", { index: number }> =\n useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, index, ...props }) => ({\n ...ariaProps,\n ...dataProps,\n type: mask ? \"password\" : type === \"number\" ? \"tel\" : \"text\",\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n autoComplete: otp ? \"one-time-code\" : \"off\",\n disabled,\n inputMode: type === \"number\" ? \"numeric\" : \"text\",\n placeholder:\n focusedIndex === index && !readOnly && !props.readOnly\n ? \"\"\n : placeholder,\n readOnly,\n value: values[index] || \"\",\n ...filterUndefined(props),\n id: `${id}${index ? `-${index}` : \"\"}`,\n onBlur: handlerAll(eventProps.onBlur, props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onChange(index)),\n onFocus: handlerAll(eventProps.onFocus, props.onFocus, onFocus(index)),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown(index)),\n }),\n [\n ariaProps,\n dataProps,\n eventProps,\n mask,\n type,\n labelId,\n otp,\n disabled,\n focusedIndex,\n readOnly,\n placeholder,\n values,\n id,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n ],\n )\n\n return {\n descendants,\n items,\n getInputProps,\n getRootProps,\n }\n}\n\nexport type UsePinInputReturn = ReturnType<typeof usePinInput>\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,EACJ,oBAAoB,4BACpB,eAAe,uBACf,gBAAgB,2BACdA,uDAAqC;AAQzC,MAAM,WAAW,UAAmB,OAAO,MAAM,GAAG;AAEpD,MAAM,YAAY,OAAe,SAAmC;AAMlE,SAFc,SAAS,iBAFK,oBADN,YAKT,KAAK,MAAM;;AAoE1B,MAAa,eAAe,QAA0B,EAAE,KAAK;CAC3D,MAAM,yBAAc;CACpB,MAAM,EACJ,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,EACL,KAAK,MACL,OAAO,UACP,WACA,cACA,UACA,QAAQ,GACR,cAAc,MACd,MACA,MAAM,OACN,cAAc,KACd,UACA,OACA,UAAU,cACV,YACA,GAAG,QAEL,WACA,WACA,eACEC,sCAAc,MAAM;CACxB,MAAM,cAAc,wBAAwB;CAC5C,MAAM,CAAC,WAAW,oCAAkC,KAAK;CACzD,MAAM,CAAC,cAAc,uCAAoC,GAAG;CAC5D,MAAM,CAAC,QAAQ,aAAaC,gEAA+B;EACzD,cAAc,QAAQ,aAAa,IAAI,EAAE;EACzC,OAAO,QAAQ,MAAM;EACrB,WAAW,aAAW,eAAeC,SAAO,KAAK,GAAG,CAAC;EACtD,CAAC;CAEF,MAAM,oCACH,UAAkB;AACjB,MAAI,CAAC,aAAa,CAAC,YAAa;EAEhC,MAAM,OAAO,YAAY,UAAU,OAAO,MAAM;AAEhD,MAAI,CAAC,KAAM;AAEX,8BAA4B,KAAK,KAAK,OAAO,CAAC;IAEhD;EAAC;EAAa;EAAW;EAAY,CACtC;CAED,MAAM,0CACH,WAA4B,UAAkB;EAC7C,MAAM,QACJ,cAAc,SACV,YAAY,UAAU,OAAO,MAAM,GACnC,YAAY,UAAU,OAAO,MAAM;AAEzC,MAAI,CAAC,MAAO;EAEZ,MAAM,cAAc,MAAM,KAAK,MAAM;AAErC,8BAA4B;AAC1B,SAAM,KAAK,OAAO;AAClB,SAAM,KAAK,kBAAkB,GAAG,YAAY;IAC5C;IAEJ,CAAC,YAAY,CACd;CAED,MAAM,mCACH,SAAe,OAAe,QAAQ,SAAS;EAC9C,IAAI,aAAa,CAAC,GAAG,OAAO;AAE5B,aAAW,SAASC;AAEpB,YAAU,WAAW;AAErB,eAAa,WAAW,OAAO,QAAQ;AAIvC,MAFiBA,YAAU,MAAM,WAAW,WAAW,YAAY,OAAO,EAE5D;AACZ,gBAAa,WAAW,KAAK,GAAG,CAAC;AACjC,eAAY,MAAM,MAAM,EAAE,KAAK,MAAM;aAC5B,MACT,WAAU,MAAM;IAGpB;EAAC;EAAQ;EAAW;EAAa;EAAY;EAAU,CACxD;CAED,MAAM,uCACH,SAA2B,eAAuB;EACjD,IAAI,YAAY;AAEhB,MAAI,CAACA,SAAO,OAAQ,QAAO;AAE3B,MAAIA,QAAM,WAAW,WAAW,OAAO,EAAE,CAAC,CACxC,aAAY,WAAW,OAAO,EAAE;WACvBA,QAAM,WAAW,WAAW,OAAO,EAAE,CAAC,CAC/C,aAAY,WAAW,OAAO,EAAE;AAGlC,SAAO;IAET,EAAE,CACH;CAED,MAAM,mCACH,WACE,EAAE,aAA4C;EAC7C,MAAM,aAAa,OAAO;EAC1B,MAAM,eAAe,OAAO;EAC5B,MAAM,YAAY,aAAa,cAAc,WAAW;AAExD,MAAI,cAAc,IAAI;AACpB,YAAS,IAAI,MAAM;AAEnB;;AAGF,MAAI,WAAW,SAAS,GAAG;AACzB,OAAI,CAAC,SAAS,YAAY,KAAK,CAAE;GAEjC,MAAMC,cAAY,WACf,MAAM,GAAG,CACT,QAAQ,GAAG,YAAUC,UAAQ,YAAY,OAAO,CAAC;AAEpD,aAAUD,YAAU;AAEpB,OAAIA,YAAU,WAAW,YAAY,OAAO,EAAE;AAC5C,iBAAaA,YAAU,KAAK,GAAG,CAAC;AAChC,gBAAY,MAAM,MAAM,EAAE,KAAK,MAAM;;SAElC;AACL,OAAI,SAAS,WAAW,KAAK,CAAE,UAAS,WAAW,MAAM;AAEzD,gBAAa,KAAK;;IAGxB;EAAC;EAAa;EAAc;EAAY;EAAU;EAAW;EAAM;EAAO,CAC3E;CAED,MAAM,oCACH,WAAmB,OAAwC;AAC1D,MAAI,CAAC,YAAa;AAElB,2BACE,IACA;GACE,YAAY,SAAO;AACjB,SAAG,gBAAgB;AACnB,oBAAgB,QAAQ,MAAM;;GAEhC,aAAa,SAAO;AAClB,SAAG,gBAAgB;AACnB,oBAAgB,QAAQ,MAAM;;GAEhC,YAAY,SAAO;AACjB,QAAKE,KAAG,OAA4B,UAAU,IAAI;KAChD,MAAM,YAAY,YAAY,UAAU,OAAO,MAAM;AAErD,SAAI,CAAC,UAAW;AAEhB,cAAS,IAAI,QAAQ,GAAG,MAAM;AAC9B,eAAU,KAAK,OAAO;AACtB,kBAAa,KAAK;UAElB,cAAa,MAAM;;GAGxB,EACD,EAAE,gBAAgB,OAAO,CAC1B;IAEH;EAAC;EAAa;EAAiB;EAAa;EAAS,CACtD;CAED,MAAM,kCACH,gBAAwB,gBAAgB,MAAM,EAC/C,EAAE,CACH;CAED,MAAM,sCAA2B,gBAAgB,GAAG,EAAE,EAAE,CAAC;AAEzD,4BAAgB;AACd,MAAI,CAAC,UAAW;EAEhB,MAAM,aAAa,YAAY,YAAY;AAE3C,MAAI,CAAC,WAAY;AAEjB,8BAA4B,WAAW,KAAK,OAAO,CAAC;IACnD,CAAC,WAAW,YAAY,CAAC;CAE5B,MAAMC,uCACH,aAAW;EACV,MAAM;EACN,GAAG;EACH,GAAGC;EACJ,GACD,CAAC,KAAK,CACP;AA8CD,QAAO;EACL;EACA;EACA,uCA7CG,EAAE,mBAAmB,gBAAgB,OAAO,GAAGA,eAAa;GAC3D,GAAG;GACH,GAAG;GACH,MAAM,OAAO,aAAa,SAAS,WAAW,QAAQ;GACtD,6DAAsB,gBAAgB,QAAQ;GAC9C,cAAc,MAAM,kBAAkB;GACtC;GACA,WAAW,SAAS,WAAW,YAAY;GAC3C,aACE,iBAAiB,SAAS,CAAC,YAAY,CAACA,QAAM,WAC1C,KACA;GACN;GACA,OAAO,OAAO,UAAU;GACxB,0DAAmBA,QAAM;GACzB,IAAI,GAAG,KAAK,QAAQ,IAAI,UAAU;GAClC,0DAAmB,WAAW,QAAQA,QAAM,QAAQ,OAAO;GAC3D,4DAAqBA,QAAM,UAAU,SAAS,MAAM,CAAC;GACrD,2DAAoB,WAAW,SAASA,QAAM,SAAS,QAAQ,MAAM,CAAC;GACtE,6DAAsBA,QAAM,WAAW,UAAU,MAAM,CAAC;GACzD,GACD;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CACF;EAMD;EACD"}
1
+ {"version":3,"file":"use-pin-input.cjs","names":["createDescendants","useFieldProps","useControllableState","values","value","nextValue","index","ev","getRootProps: PropGetter","mergeProps","props"],"sources":["../../../../src/components/pin-input/use-pin-input.ts"],"sourcesContent":["\"use client\"\n\nimport type { ChangeEvent, KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter, RequiredPropGetter } from \"../../core\"\nimport type { FieldProps } from \"../field\"\nimport { useCallback, useEffect, useId, useState } from \"react\"\nimport { mergeProps } from \"../../core\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { cx, filterUndefined, handlerAll, runKeyAction } from \"../../utils\"\nimport { useFieldProps } from \"../field\"\n\nconst {\n DescendantsContext: PinInputDescendantsContext,\n useDescendant: usePinInputDescendant,\n useDescendants: usePinInputDescendants,\n} = createDescendants<HTMLInputElement>()\n\nexport {\n PinInputDescendantsContext,\n usePinInputDescendant,\n usePinInputDescendants,\n}\n\nconst toArray = (value?: string) => value?.split(\"\")\n\nconst validate = (value: string, type: UsePinInputProps[\"type\"]) => {\n const NUMERIC_REGEX = /^[0-9]+$/\n const ALPHA_NUMERIC_REGEX = /^[a-zA-Z0-9]+$/i\n\n const regex = type === \"alphanumeric\" ? ALPHA_NUMERIC_REGEX : NUMERIC_REGEX\n\n return regex.test(value)\n}\n\nexport interface UsePinInputProps\n extends\n Omit<HTMLProps, \"defaultValue\" | \"mask\" | \"onChange\" | \"value\">,\n FieldProps {\n /**\n * If `true`, the pin input receives focus on mount.\n *\n * @default false\n */\n autoFocus?: boolean\n /**\n * The initial value of the pin input.\n */\n defaultValue?: string\n /**\n * The top-level id string that will be applied to the input fields.\n * The index of the input will be appended to this top-level id.\n */\n id?: string\n /**\n * The number of inputs to display.\n *\n * @default 4\n */\n items?: number\n /**\n * If `true`, focus will move automatically to the next input once filled.\n *\n * @default true\n */\n manageFocus?: boolean\n /**\n * If `true`, the input's value will be masked just like `type=password`.\n */\n mask?: boolean\n /**\n * If `true`, the pin input component signals to its fields that they should.\n */\n otp?: boolean\n /**\n * The placeholder for the pin input.\n *\n * @default '◯'\n */\n placeholder?: string\n /**\n * The type of values the pin-input should allow.\n *\n * @default 'number'\n */\n type?: \"alphanumeric\" | \"number\"\n /**\n * The value of the pin input.\n */\n value?: string\n /**\n * Function called on input change.\n */\n onChange?: (value: string) => void\n /**\n * Function called when all inputs have valid values.\n */\n onComplete?: (value: string) => void\n}\n\nexport const usePinInput = (props: UsePinInputProps = {}) => {\n const uuid = useId()\n const {\n context: { labelId } = {},\n props: {\n id = uuid,\n type = \"number\",\n autoFocus,\n defaultValue,\n disabled,\n items = 4,\n manageFocus = true,\n mask,\n otp = false,\n placeholder = \"◯\",\n readOnly,\n value,\n onChange: onChangeProp,\n onComplete,\n ...rest\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const descendants = usePinInputDescendants()\n const [moveFocus, setMoveFocus] = useState<boolean>(true)\n const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n const [values, setValues] = useControllableState<string[]>({\n defaultValue: toArray(defaultValue) || [],\n value: toArray(value),\n onChange: (values) => onChangeProp?.(values.join(\"\")),\n })\n\n const focusNext = useCallback(\n (index: number) => {\n if (!moveFocus || !manageFocus) return\n\n const next = descendants.nextValue(index, false)\n\n if (!next) return\n\n requestAnimationFrame(() => next.node.focus())\n },\n [descendants, moveFocus, manageFocus],\n )\n\n const focusInputField = useCallback(\n (direction: \"next\" | \"prev\", index: number) => {\n const input =\n direction === \"next\"\n ? descendants.nextValue(index, false)\n : descendants.prevValue(index, false)\n\n if (!input) return\n\n const valueLength = input.node.value.length\n\n requestAnimationFrame(() => {\n input.node.focus()\n input.node.setSelectionRange(0, valueLength)\n })\n },\n [descendants],\n )\n\n const setValue = useCallback(\n (value: string, index: number, focus = true) => {\n let nextValues = [...values]\n\n nextValues[index] = value\n\n setValues(nextValues)\n\n nextValues = nextValues.filter(Boolean)\n\n const complete = value !== \"\" && nextValues.length === descendants.count()\n\n if (complete) {\n onComplete?.(nextValues.join(\"\"))\n descendants.value(index)?.node.blur()\n } else if (focus) {\n focusNext(index)\n }\n },\n [values, setValues, descendants, onComplete, focusNext],\n )\n\n const getNextValue = useCallback(\n (value: string | undefined, eventValue: string) => {\n let nextValue = eventValue\n\n if (!value?.length) return nextValue\n\n if (value.startsWith(eventValue.charAt(0))) {\n nextValue = eventValue.charAt(1)\n } else if (value.startsWith(eventValue.charAt(1))) {\n nextValue = eventValue.charAt(0)\n }\n\n return nextValue\n },\n [],\n )\n\n const onChange = useCallback(\n (index: number) =>\n ({ target }: ChangeEvent<HTMLInputElement>) => {\n const eventValue = target.value\n const currentValue = values[index]\n const nextValue = getNextValue(currentValue, eventValue)\n\n if (nextValue === \"\") {\n setValue(\"\", index)\n\n return\n }\n\n if (eventValue.length > 2) {\n if (!validate(eventValue, type)) return\n\n const nextValue = eventValue\n .split(\"\")\n .filter((_, index) => index < descendants.count())\n\n setValues(nextValue)\n\n if (nextValue.length === descendants.count()) {\n onComplete?.(nextValue.join(\"\"))\n descendants.value(index)?.node.blur()\n }\n } else {\n if (validate(nextValue, type)) setValue(nextValue, index)\n\n setMoveFocus(true)\n }\n },\n [descendants, getNextValue, onComplete, setValue, setValues, type, values],\n )\n\n const onKeyDown = useCallback(\n (index: number) => (ev: KeyboardEvent<HTMLInputElement>) => {\n if (!manageFocus) return\n\n runKeyAction(\n ev,\n {\n ArrowLeft: (ev) => {\n ev.preventDefault()\n focusInputField(\"prev\", index)\n },\n ArrowRight: (ev) => {\n ev.preventDefault()\n focusInputField(\"next\", index)\n },\n Backspace: (ev) => {\n if ((ev.target as HTMLInputElement).value === \"\") {\n const prevInput = descendants.prevValue(index, false)\n\n if (!prevInput) return\n\n setValue(\"\", index - 1, false)\n prevInput.node.focus()\n setMoveFocus(true)\n } else {\n setMoveFocus(false)\n }\n },\n },\n { preventDefault: false },\n )\n },\n [descendants, focusInputField, manageFocus, setValue],\n )\n\n const onFocus = useCallback(\n (index: number) => () => setFocusedIndex(index),\n [],\n )\n\n const onBlur = useCallback(() => setFocusedIndex(-1), [])\n\n useEffect(() => {\n if (!autoFocus) return\n\n const firstValue = descendants.firstValue()\n\n if (!firstValue) return\n\n requestAnimationFrame(() => firstValue.node.focus())\n }, [autoFocus, descendants])\n\n const getRootProps: PropGetter = useCallback(\n (props) => mergeProps({ role: \"group\" }, rest, props)(),\n [rest],\n )\n\n const getInputProps: RequiredPropGetter<\"input\", { index: number }> =\n useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, index, ...props }) => ({\n ...ariaProps,\n ...dataProps,\n type: mask ? \"password\" : type === \"number\" ? \"tel\" : \"text\",\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n autoComplete: otp ? \"one-time-code\" : \"off\",\n disabled,\n inputMode: type === \"number\" ? \"numeric\" : \"text\",\n placeholder:\n focusedIndex === index && !readOnly && !props.readOnly\n ? \"\"\n : placeholder,\n readOnly,\n value: values[index] || \"\",\n ...filterUndefined(props),\n id: `${id}${index ? `-${index}` : \"\"}`,\n onBlur: handlerAll(eventProps.onBlur, props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onChange(index)),\n onFocus: handlerAll(eventProps.onFocus, props.onFocus, onFocus(index)),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown(index)),\n }),\n [\n ariaProps,\n dataProps,\n eventProps,\n mask,\n type,\n labelId,\n otp,\n disabled,\n focusedIndex,\n readOnly,\n placeholder,\n values,\n id,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n ],\n )\n\n return {\n descendants,\n items,\n getInputProps,\n getRootProps,\n }\n}\n\nexport type UsePinInputReturn = ReturnType<typeof usePinInput>\n"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_props = require('../../core/components/props.cjs');
3
+ require('../../core/index.cjs');
2
4
  let react = require("react");
3
5
  let uqr = require("uqr");
4
6
 
@@ -40,10 +42,7 @@ const useQrCode = ({ boostEcc, border, ecc, invert, maskPattern, maxVersion, min
40
42
  encoded.size,
41
43
  pixelSize
42
44
  ]);
43
- const getRootProps = (0, react.useCallback)((props = {}) => ({
44
- ...rest,
45
- ...props
46
- }), [rest]);
45
+ const getRootProps = (0, react.useCallback)((props) => require_props.mergeProps(rest, props)(), [rest]);
47
46
  return {
48
47
  height,
49
48
  paths,
@@ -1 +1 @@
1
- {"version":3,"file":"use-qr-code.cjs","names":["paths: string[]","result: string[]","getRootProps: PropGetter"],"sources":["../../../../src/components/qr-code/use-qr-code.tsx"],"sourcesContent":["import type { QrCodeGenerateResult } from \"uqr\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useMemo } from \"react\"\nimport { encode } from \"uqr\"\n\nexport interface UseQrCodeProps extends HTMLProps {\n /**\n * The value to encode as a QR code.\n */\n value: string\n /**\n * The error correction level to boost the error correction level to the maximum allowed by the version and size.\n *\n * @default false\n */\n boostEcc?: boolean\n /**\n * The border width around the QR code.\n *\n * @default 1\n */\n border?: number\n /**\n * The error correction level.\n *\n * - `L` allows for up to 7% error correction,\n * - `M` allows for up to 15% error correction,\n * - `Q` allows for up to 25% error correction,\n * - `H` allows for up to 30% error correction.\n *\n * @default 'L'\n */\n ecc?: \"H\" | \"L\" | \"M\" | \"Q\"\n /**\n * Inverts the black and white of the QR code.\n *\n * @default false\n */\n invert?: boolean\n /**\n * The mask pattern to use.\n *\n * @default -1\n */\n maskPattern?: number\n /**\n * The maximum version of the QR code (1-40).\n *\n * @default 40\n */\n maxVersion?: number\n /**\n * The minimum version of the QR code (1-40).\n *\n * @default 1\n */\n minVersion?: number\n /**\n * The pixel size of the QR code.\n *\n * @default 10\n */\n pixelSize?: number\n /**\n * Callback function to receive the generated QR Code.\n */\n onEncoded?: (qr: QrCodeGenerateResult) => void\n}\n\nexport const useQrCode = ({\n boostEcc,\n border,\n ecc,\n invert,\n maskPattern,\n maxVersion,\n minVersion,\n pixelSize = 10,\n value,\n onEncoded,\n ...rest\n}: UseQrCodeProps) => {\n const encoded = useMemo(\n () =>\n encode(value, {\n boostEcc,\n border,\n ecc,\n invert,\n maskPattern,\n maxVersion,\n minVersion,\n onEncoded,\n }),\n [\n value,\n border,\n ecc,\n boostEcc,\n maskPattern,\n maxVersion,\n minVersion,\n invert,\n onEncoded,\n ],\n )\n const height = encoded.size * pixelSize\n const width = encoded.size * pixelSize\n const viewBox = `0 0 ${width} ${height}`\n const paths: string[] = useMemo(() => {\n const result: string[] = []\n\n for (let row = 0; row < encoded.size; row++) {\n for (let col = 0; col < encoded.size; col++) {\n const x = col * pixelSize\n const y = row * pixelSize\n if (encoded.data[row]?.[col]) {\n result.push(`M${x},${y}h${pixelSize}v${pixelSize}h-${pixelSize}z`)\n }\n }\n }\n return result\n }, [encoded.data, encoded.size, pixelSize])\n\n const getRootProps: PropGetter = useCallback(\n (props = {}) => ({ ...rest, ...props }),\n [rest],\n )\n\n const getFrameProps: PropGetter<\"svg\"> = useCallback(\n (props = {}) => ({ viewBox: `0 0 ${width} ${height}`, ...props }),\n [height, width],\n )\n\n const getOverlayProps: PropGetter = useCallback(\n (props = {}) => ({ ...props }),\n [],\n )\n\n const getPatternProps: PropGetter<\"path\"> = useCallback(\n (props) => ({ ...props, d: paths.join(\" \") }),\n [paths],\n )\n\n return {\n height,\n paths,\n viewBox,\n width,\n getFrameProps,\n getOverlayProps,\n getPatternProps,\n getRootProps,\n }\n}\n\nexport type UseQrCodeReturn = ReturnType<typeof useQrCode>\n"],"mappings":";;;;;AAqEA,MAAa,aAAa,EACxB,UACA,QACA,KACA,QACA,aACA,YACA,YACA,YAAY,IACZ,OACA,WACA,GAAG,WACiB;CACpB,MAAM,mDAEK,OAAO;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,EACJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CACD,MAAM,SAAS,QAAQ,OAAO;CAC9B,MAAM,QAAQ,QAAQ,OAAO;CAC7B,MAAM,UAAU,OAAO,MAAM,GAAG;CAChC,MAAMA,iCAAgC;EACpC,MAAMC,SAAmB,EAAE;AAE3B,OAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,MAAM,MACpC,MAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,MAAM,OAAO;GAC3C,MAAM,IAAI,MAAM;GAChB,MAAM,IAAI,MAAM;AAChB,OAAI,QAAQ,KAAK,OAAO,KACtB,QAAO,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,UAAU,GAAG,UAAU,IAAI,UAAU,GAAG;;AAIxE,SAAO;IACN;EAAC,QAAQ;EAAM,QAAQ;EAAM;EAAU,CAAC;CAE3C,MAAMC,uCACH,QAAQ,EAAE,MAAM;EAAE,GAAG;EAAM,GAAG;EAAO,GACtC,CAAC,KAAK,CACP;AAiBD,QAAO;EACL;EACA;EACA;EACA;EACA,uCAnBC,QAAQ,EAAE,MAAM;GAAE,SAAS,OAAO,MAAM,GAAG;GAAU,GAAG;GAAO,GAChE,CAAC,QAAQ,MAAM,CAChB;EAkBC,yCAfC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,GAC7B,EAAE,CACH;EAcC,yCAXC,WAAW;GAAE,GAAG;GAAO,GAAG,MAAM,KAAK,IAAI;GAAE,GAC5C,CAAC,MAAM,CACR;EAUC;EACD"}
1
+ {"version":3,"file":"use-qr-code.cjs","names":["paths: string[]","result: string[]","getRootProps: PropGetter","mergeProps"],"sources":["../../../../src/components/qr-code/use-qr-code.tsx"],"sourcesContent":["import type { QrCodeGenerateResult } from \"uqr\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useMemo } from \"react\"\nimport { encode } from \"uqr\"\nimport { mergeProps } from \"../../core\"\n\nexport interface UseQrCodeProps extends HTMLProps {\n /**\n * The value to encode as a QR code.\n */\n value: string\n /**\n * The error correction level to boost the error correction level to the maximum allowed by the version and size.\n *\n * @default false\n */\n boostEcc?: boolean\n /**\n * The border width around the QR code.\n *\n * @default 1\n */\n border?: number\n /**\n * The error correction level.\n *\n * - `L` allows for up to 7% error correction,\n * - `M` allows for up to 15% error correction,\n * - `Q` allows for up to 25% error correction,\n * - `H` allows for up to 30% error correction.\n *\n * @default 'L'\n */\n ecc?: \"H\" | \"L\" | \"M\" | \"Q\"\n /**\n * Inverts the black and white of the QR code.\n *\n * @default false\n */\n invert?: boolean\n /**\n * The mask pattern to use.\n *\n * @default -1\n */\n maskPattern?: number\n /**\n * The maximum version of the QR code (1-40).\n *\n * @default 40\n */\n maxVersion?: number\n /**\n * The minimum version of the QR code (1-40).\n *\n * @default 1\n */\n minVersion?: number\n /**\n * The pixel size of the QR code.\n *\n * @default 10\n */\n pixelSize?: number\n /**\n * Callback function to receive the generated QR Code.\n */\n onEncoded?: (qr: QrCodeGenerateResult) => void\n}\n\nexport const useQrCode = ({\n boostEcc,\n border,\n ecc,\n invert,\n maskPattern,\n maxVersion,\n minVersion,\n pixelSize = 10,\n value,\n onEncoded,\n ...rest\n}: UseQrCodeProps) => {\n const encoded = useMemo(\n () =>\n encode(value, {\n boostEcc,\n border,\n ecc,\n invert,\n maskPattern,\n maxVersion,\n minVersion,\n onEncoded,\n }),\n [\n value,\n border,\n ecc,\n boostEcc,\n maskPattern,\n maxVersion,\n minVersion,\n invert,\n onEncoded,\n ],\n )\n const height = encoded.size * pixelSize\n const width = encoded.size * pixelSize\n const viewBox = `0 0 ${width} ${height}`\n const paths: string[] = useMemo(() => {\n const result: string[] = []\n\n for (let row = 0; row < encoded.size; row++) {\n for (let col = 0; col < encoded.size; col++) {\n const x = col * pixelSize\n const y = row * pixelSize\n if (encoded.data[row]?.[col]) {\n result.push(`M${x},${y}h${pixelSize}v${pixelSize}h-${pixelSize}z`)\n }\n }\n }\n return result\n }, [encoded.data, encoded.size, pixelSize])\n\n const getRootProps: PropGetter = useCallback(\n (props) => mergeProps(rest, props)(),\n [rest],\n )\n\n const getFrameProps: PropGetter<\"svg\"> = useCallback(\n (props = {}) => ({ viewBox: `0 0 ${width} ${height}`, ...props }),\n [height, width],\n )\n\n const getOverlayProps: PropGetter = useCallback(\n (props = {}) => ({ ...props }),\n [],\n )\n\n const getPatternProps: PropGetter<\"path\"> = useCallback(\n (props) => ({ ...props, d: paths.join(\" \") }),\n [paths],\n )\n\n return {\n height,\n paths,\n viewBox,\n width,\n getFrameProps,\n getOverlayProps,\n getPatternProps,\n getRootProps,\n }\n}\n\nexport type UseQrCodeReturn = ReturnType<typeof useQrCode>\n"],"mappings":";;;;;;;AAsEA,MAAa,aAAa,EACxB,UACA,QACA,KACA,QACA,aACA,YACA,YACA,YAAY,IACZ,OACA,WACA,GAAG,WACiB;CACpB,MAAM,mDAEK,OAAO;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,EACJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CACD,MAAM,SAAS,QAAQ,OAAO;CAC9B,MAAM,QAAQ,QAAQ,OAAO;CAC7B,MAAM,UAAU,OAAO,MAAM,GAAG;CAChC,MAAMA,iCAAgC;EACpC,MAAMC,SAAmB,EAAE;AAE3B,OAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,MAAM,MACpC,MAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,MAAM,OAAO;GAC3C,MAAM,IAAI,MAAM;GAChB,MAAM,IAAI,MAAM;AAChB,OAAI,QAAQ,KAAK,OAAO,KACtB,QAAO,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,UAAU,GAAG,UAAU,IAAI,UAAU,GAAG;;AAIxE,SAAO;IACN;EAAC,QAAQ;EAAM,QAAQ;EAAM;EAAU,CAAC;CAE3C,MAAMC,uCACH,UAAUC,yBAAW,MAAM,MAAM,EAAE,EACpC,CAAC,KAAK,CACP;AAiBD,QAAO;EACL;EACA;EACA;EACA;EACA,uCAnBC,QAAQ,EAAE,MAAM;GAAE,SAAS,OAAO,MAAM,GAAG;GAAU,GAAG;GAAO,GAChE,CAAC,QAAQ,MAAM,CAChB;EAkBC,yCAfC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,GAC7B,EAAE,CACH;EAcC,yCAXC,WAAW;GAAE,GAAG;GAAO,GAAG,MAAM,KAAK,IAAI;GAAE,GAC5C,CAAC,MAAM,CACR;EAUC;EACD"}
@@ -2,6 +2,8 @@
2
2
 
3
3
  import { runKeyAction } from "../../utils/dom.js";
4
4
  import { utils_exports } from "../../utils/index.js";
5
+ import { mergeProps } from "../../core/components/props.js";
6
+ import "../../core/index.js";
5
7
  import { useControllableState } from "../../hooks/use-controllable-state/index.js";
6
8
  import { createDescendants } from "../../hooks/use-descendants/index.js";
7
9
  import { useFieldProps } from "../field/use-field-props.js";
@@ -131,11 +133,7 @@ const usePinInput = (props = {}) => {
131
133
  if (!firstValue) return;
132
134
  requestAnimationFrame(() => firstValue.node.focus());
133
135
  }, [autoFocus, descendants]);
134
- const getRootProps = useCallback((props$1) => ({
135
- role: "group",
136
- ...rest,
137
- ...props$1
138
- }), [rest]);
136
+ const getRootProps = useCallback((props$1) => mergeProps({ role: "group" }, rest, props$1)(), [rest]);
139
137
  return {
140
138
  descendants,
141
139
  items,
@@ -1 +1 @@
1
- {"version":3,"file":"use-pin-input.js","names":["values","value","nextValue","index","ev","getRootProps: PropGetter","props"],"sources":["../../../../src/components/pin-input/use-pin-input.ts"],"sourcesContent":["\"use client\"\n\nimport type { ChangeEvent, KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter, RequiredPropGetter } from \"../../core\"\nimport type { FieldProps } from \"../field\"\nimport { useCallback, useEffect, useId, useState } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { cx, filterUndefined, handlerAll, runKeyAction } from \"../../utils\"\nimport { useFieldProps } from \"../field\"\n\nconst {\n DescendantsContext: PinInputDescendantsContext,\n useDescendant: usePinInputDescendant,\n useDescendants: usePinInputDescendants,\n} = createDescendants<HTMLInputElement>()\n\nexport {\n PinInputDescendantsContext,\n usePinInputDescendant,\n usePinInputDescendants,\n}\n\nconst toArray = (value?: string) => value?.split(\"\")\n\nconst validate = (value: string, type: UsePinInputProps[\"type\"]) => {\n const NUMERIC_REGEX = /^[0-9]+$/\n const ALPHA_NUMERIC_REGEX = /^[a-zA-Z0-9]+$/i\n\n const regex = type === \"alphanumeric\" ? ALPHA_NUMERIC_REGEX : NUMERIC_REGEX\n\n return regex.test(value)\n}\n\nexport interface UsePinInputProps\n extends\n Omit<HTMLProps, \"defaultValue\" | \"mask\" | \"onChange\" | \"value\">,\n FieldProps {\n /**\n * If `true`, the pin input receives focus on mount.\n *\n * @default false\n */\n autoFocus?: boolean\n /**\n * The initial value of the pin input.\n */\n defaultValue?: string\n /**\n * The top-level id string that will be applied to the input fields.\n * The index of the input will be appended to this top-level id.\n */\n id?: string\n /**\n * The number of inputs to display.\n *\n * @default 4\n */\n items?: number\n /**\n * If `true`, focus will move automatically to the next input once filled.\n *\n * @default true\n */\n manageFocus?: boolean\n /**\n * If `true`, the input's value will be masked just like `type=password`.\n */\n mask?: boolean\n /**\n * If `true`, the pin input component signals to its fields that they should.\n */\n otp?: boolean\n /**\n * The placeholder for the pin input.\n *\n * @default '◯'\n */\n placeholder?: string\n /**\n * The type of values the pin-input should allow.\n *\n * @default 'number'\n */\n type?: \"alphanumeric\" | \"number\"\n /**\n * The value of the pin input.\n */\n value?: string\n /**\n * Function called on input change.\n */\n onChange?: (value: string) => void\n /**\n * Function called when all inputs have valid values.\n */\n onComplete?: (value: string) => void\n}\n\nexport const usePinInput = (props: UsePinInputProps = {}) => {\n const uuid = useId()\n const {\n context: { labelId } = {},\n props: {\n id = uuid,\n type = \"number\",\n autoFocus,\n defaultValue,\n disabled,\n items = 4,\n manageFocus = true,\n mask,\n otp = false,\n placeholder = \"◯\",\n readOnly,\n value,\n onChange: onChangeProp,\n onComplete,\n ...rest\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const descendants = usePinInputDescendants()\n const [moveFocus, setMoveFocus] = useState<boolean>(true)\n const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n const [values, setValues] = useControllableState<string[]>({\n defaultValue: toArray(defaultValue) || [],\n value: toArray(value),\n onChange: (values) => onChangeProp?.(values.join(\"\")),\n })\n\n const focusNext = useCallback(\n (index: number) => {\n if (!moveFocus || !manageFocus) return\n\n const next = descendants.nextValue(index, false)\n\n if (!next) return\n\n requestAnimationFrame(() => next.node.focus())\n },\n [descendants, moveFocus, manageFocus],\n )\n\n const focusInputField = useCallback(\n (direction: \"next\" | \"prev\", index: number) => {\n const input =\n direction === \"next\"\n ? descendants.nextValue(index, false)\n : descendants.prevValue(index, false)\n\n if (!input) return\n\n const valueLength = input.node.value.length\n\n requestAnimationFrame(() => {\n input.node.focus()\n input.node.setSelectionRange(0, valueLength)\n })\n },\n [descendants],\n )\n\n const setValue = useCallback(\n (value: string, index: number, focus = true) => {\n let nextValues = [...values]\n\n nextValues[index] = value\n\n setValues(nextValues)\n\n nextValues = nextValues.filter(Boolean)\n\n const complete = value !== \"\" && nextValues.length === descendants.count()\n\n if (complete) {\n onComplete?.(nextValues.join(\"\"))\n descendants.value(index)?.node.blur()\n } else if (focus) {\n focusNext(index)\n }\n },\n [values, setValues, descendants, onComplete, focusNext],\n )\n\n const getNextValue = useCallback(\n (value: string | undefined, eventValue: string) => {\n let nextValue = eventValue\n\n if (!value?.length) return nextValue\n\n if (value.startsWith(eventValue.charAt(0))) {\n nextValue = eventValue.charAt(1)\n } else if (value.startsWith(eventValue.charAt(1))) {\n nextValue = eventValue.charAt(0)\n }\n\n return nextValue\n },\n [],\n )\n\n const onChange = useCallback(\n (index: number) =>\n ({ target }: ChangeEvent<HTMLInputElement>) => {\n const eventValue = target.value\n const currentValue = values[index]\n const nextValue = getNextValue(currentValue, eventValue)\n\n if (nextValue === \"\") {\n setValue(\"\", index)\n\n return\n }\n\n if (eventValue.length > 2) {\n if (!validate(eventValue, type)) return\n\n const nextValue = eventValue\n .split(\"\")\n .filter((_, index) => index < descendants.count())\n\n setValues(nextValue)\n\n if (nextValue.length === descendants.count()) {\n onComplete?.(nextValue.join(\"\"))\n descendants.value(index)?.node.blur()\n }\n } else {\n if (validate(nextValue, type)) setValue(nextValue, index)\n\n setMoveFocus(true)\n }\n },\n [descendants, getNextValue, onComplete, setValue, setValues, type, values],\n )\n\n const onKeyDown = useCallback(\n (index: number) => (ev: KeyboardEvent<HTMLInputElement>) => {\n if (!manageFocus) return\n\n runKeyAction(\n ev,\n {\n ArrowLeft: (ev) => {\n ev.preventDefault()\n focusInputField(\"prev\", index)\n },\n ArrowRight: (ev) => {\n ev.preventDefault()\n focusInputField(\"next\", index)\n },\n Backspace: (ev) => {\n if ((ev.target as HTMLInputElement).value === \"\") {\n const prevInput = descendants.prevValue(index, false)\n\n if (!prevInput) return\n\n setValue(\"\", index - 1, false)\n prevInput.node.focus()\n setMoveFocus(true)\n } else {\n setMoveFocus(false)\n }\n },\n },\n { preventDefault: false },\n )\n },\n [descendants, focusInputField, manageFocus, setValue],\n )\n\n const onFocus = useCallback(\n (index: number) => () => setFocusedIndex(index),\n [],\n )\n\n const onBlur = useCallback(() => setFocusedIndex(-1), [])\n\n useEffect(() => {\n if (!autoFocus) return\n\n const firstValue = descendants.firstValue()\n\n if (!firstValue) return\n\n requestAnimationFrame(() => firstValue.node.focus())\n }, [autoFocus, descendants])\n\n const getRootProps: PropGetter = useCallback(\n (props) => ({\n role: \"group\",\n ...rest,\n ...props,\n }),\n [rest],\n )\n\n const getInputProps: RequiredPropGetter<\"input\", { index: number }> =\n useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, index, ...props }) => ({\n ...ariaProps,\n ...dataProps,\n type: mask ? \"password\" : type === \"number\" ? \"tel\" : \"text\",\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n autoComplete: otp ? \"one-time-code\" : \"off\",\n disabled,\n inputMode: type === \"number\" ? \"numeric\" : \"text\",\n placeholder:\n focusedIndex === index && !readOnly && !props.readOnly\n ? \"\"\n : placeholder,\n readOnly,\n value: values[index] || \"\",\n ...filterUndefined(props),\n id: `${id}${index ? `-${index}` : \"\"}`,\n onBlur: handlerAll(eventProps.onBlur, props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onChange(index)),\n onFocus: handlerAll(eventProps.onFocus, props.onFocus, onFocus(index)),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown(index)),\n }),\n [\n ariaProps,\n dataProps,\n eventProps,\n mask,\n type,\n labelId,\n otp,\n disabled,\n focusedIndex,\n readOnly,\n placeholder,\n values,\n id,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n ],\n )\n\n return {\n descendants,\n items,\n getInputProps,\n getRootProps,\n }\n}\n\nexport type UsePinInputReturn = ReturnType<typeof usePinInput>\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-pin-input.js","names":["values","value","nextValue","index","ev","getRootProps: PropGetter","props"],"sources":["../../../../src/components/pin-input/use-pin-input.ts"],"sourcesContent":["\"use client\"\n\nimport type { ChangeEvent, KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter, RequiredPropGetter } from \"../../core\"\nimport type { FieldProps } from \"../field\"\nimport { useCallback, useEffect, useId, useState } from \"react\"\nimport { mergeProps } from \"../../core\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { createDescendants } from \"../../hooks/use-descendants\"\nimport { cx, filterUndefined, handlerAll, runKeyAction } from \"../../utils\"\nimport { useFieldProps } from \"../field\"\n\nconst {\n DescendantsContext: PinInputDescendantsContext,\n useDescendant: usePinInputDescendant,\n useDescendants: usePinInputDescendants,\n} = createDescendants<HTMLInputElement>()\n\nexport {\n PinInputDescendantsContext,\n usePinInputDescendant,\n usePinInputDescendants,\n}\n\nconst toArray = (value?: string) => value?.split(\"\")\n\nconst validate = (value: string, type: UsePinInputProps[\"type\"]) => {\n const NUMERIC_REGEX = /^[0-9]+$/\n const ALPHA_NUMERIC_REGEX = /^[a-zA-Z0-9]+$/i\n\n const regex = type === \"alphanumeric\" ? ALPHA_NUMERIC_REGEX : NUMERIC_REGEX\n\n return regex.test(value)\n}\n\nexport interface UsePinInputProps\n extends\n Omit<HTMLProps, \"defaultValue\" | \"mask\" | \"onChange\" | \"value\">,\n FieldProps {\n /**\n * If `true`, the pin input receives focus on mount.\n *\n * @default false\n */\n autoFocus?: boolean\n /**\n * The initial value of the pin input.\n */\n defaultValue?: string\n /**\n * The top-level id string that will be applied to the input fields.\n * The index of the input will be appended to this top-level id.\n */\n id?: string\n /**\n * The number of inputs to display.\n *\n * @default 4\n */\n items?: number\n /**\n * If `true`, focus will move automatically to the next input once filled.\n *\n * @default true\n */\n manageFocus?: boolean\n /**\n * If `true`, the input's value will be masked just like `type=password`.\n */\n mask?: boolean\n /**\n * If `true`, the pin input component signals to its fields that they should.\n */\n otp?: boolean\n /**\n * The placeholder for the pin input.\n *\n * @default '◯'\n */\n placeholder?: string\n /**\n * The type of values the pin-input should allow.\n *\n * @default 'number'\n */\n type?: \"alphanumeric\" | \"number\"\n /**\n * The value of the pin input.\n */\n value?: string\n /**\n * Function called on input change.\n */\n onChange?: (value: string) => void\n /**\n * Function called when all inputs have valid values.\n */\n onComplete?: (value: string) => void\n}\n\nexport const usePinInput = (props: UsePinInputProps = {}) => {\n const uuid = useId()\n const {\n context: { labelId } = {},\n props: {\n id = uuid,\n type = \"number\",\n autoFocus,\n defaultValue,\n disabled,\n items = 4,\n manageFocus = true,\n mask,\n otp = false,\n placeholder = \"◯\",\n readOnly,\n value,\n onChange: onChangeProp,\n onComplete,\n ...rest\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const descendants = usePinInputDescendants()\n const [moveFocus, setMoveFocus] = useState<boolean>(true)\n const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n const [values, setValues] = useControllableState<string[]>({\n defaultValue: toArray(defaultValue) || [],\n value: toArray(value),\n onChange: (values) => onChangeProp?.(values.join(\"\")),\n })\n\n const focusNext = useCallback(\n (index: number) => {\n if (!moveFocus || !manageFocus) return\n\n const next = descendants.nextValue(index, false)\n\n if (!next) return\n\n requestAnimationFrame(() => next.node.focus())\n },\n [descendants, moveFocus, manageFocus],\n )\n\n const focusInputField = useCallback(\n (direction: \"next\" | \"prev\", index: number) => {\n const input =\n direction === \"next\"\n ? descendants.nextValue(index, false)\n : descendants.prevValue(index, false)\n\n if (!input) return\n\n const valueLength = input.node.value.length\n\n requestAnimationFrame(() => {\n input.node.focus()\n input.node.setSelectionRange(0, valueLength)\n })\n },\n [descendants],\n )\n\n const setValue = useCallback(\n (value: string, index: number, focus = true) => {\n let nextValues = [...values]\n\n nextValues[index] = value\n\n setValues(nextValues)\n\n nextValues = nextValues.filter(Boolean)\n\n const complete = value !== \"\" && nextValues.length === descendants.count()\n\n if (complete) {\n onComplete?.(nextValues.join(\"\"))\n descendants.value(index)?.node.blur()\n } else if (focus) {\n focusNext(index)\n }\n },\n [values, setValues, descendants, onComplete, focusNext],\n )\n\n const getNextValue = useCallback(\n (value: string | undefined, eventValue: string) => {\n let nextValue = eventValue\n\n if (!value?.length) return nextValue\n\n if (value.startsWith(eventValue.charAt(0))) {\n nextValue = eventValue.charAt(1)\n } else if (value.startsWith(eventValue.charAt(1))) {\n nextValue = eventValue.charAt(0)\n }\n\n return nextValue\n },\n [],\n )\n\n const onChange = useCallback(\n (index: number) =>\n ({ target }: ChangeEvent<HTMLInputElement>) => {\n const eventValue = target.value\n const currentValue = values[index]\n const nextValue = getNextValue(currentValue, eventValue)\n\n if (nextValue === \"\") {\n setValue(\"\", index)\n\n return\n }\n\n if (eventValue.length > 2) {\n if (!validate(eventValue, type)) return\n\n const nextValue = eventValue\n .split(\"\")\n .filter((_, index) => index < descendants.count())\n\n setValues(nextValue)\n\n if (nextValue.length === descendants.count()) {\n onComplete?.(nextValue.join(\"\"))\n descendants.value(index)?.node.blur()\n }\n } else {\n if (validate(nextValue, type)) setValue(nextValue, index)\n\n setMoveFocus(true)\n }\n },\n [descendants, getNextValue, onComplete, setValue, setValues, type, values],\n )\n\n const onKeyDown = useCallback(\n (index: number) => (ev: KeyboardEvent<HTMLInputElement>) => {\n if (!manageFocus) return\n\n runKeyAction(\n ev,\n {\n ArrowLeft: (ev) => {\n ev.preventDefault()\n focusInputField(\"prev\", index)\n },\n ArrowRight: (ev) => {\n ev.preventDefault()\n focusInputField(\"next\", index)\n },\n Backspace: (ev) => {\n if ((ev.target as HTMLInputElement).value === \"\") {\n const prevInput = descendants.prevValue(index, false)\n\n if (!prevInput) return\n\n setValue(\"\", index - 1, false)\n prevInput.node.focus()\n setMoveFocus(true)\n } else {\n setMoveFocus(false)\n }\n },\n },\n { preventDefault: false },\n )\n },\n [descendants, focusInputField, manageFocus, setValue],\n )\n\n const onFocus = useCallback(\n (index: number) => () => setFocusedIndex(index),\n [],\n )\n\n const onBlur = useCallback(() => setFocusedIndex(-1), [])\n\n useEffect(() => {\n if (!autoFocus) return\n\n const firstValue = descendants.firstValue()\n\n if (!firstValue) return\n\n requestAnimationFrame(() => firstValue.node.focus())\n }, [autoFocus, descendants])\n\n const getRootProps: PropGetter = useCallback(\n (props) => mergeProps({ role: \"group\" }, rest, props)(),\n [rest],\n )\n\n const getInputProps: RequiredPropGetter<\"input\", { index: number }> =\n useCallback(\n ({ \"aria-labelledby\": ariaLabelledby, index, ...props }) => ({\n ...ariaProps,\n ...dataProps,\n type: mask ? \"password\" : type === \"number\" ? \"tel\" : \"text\",\n \"aria-labelledby\": cx(ariaLabelledby, labelId),\n autoComplete: otp ? \"one-time-code\" : \"off\",\n disabled,\n inputMode: type === \"number\" ? \"numeric\" : \"text\",\n placeholder:\n focusedIndex === index && !readOnly && !props.readOnly\n ? \"\"\n : placeholder,\n readOnly,\n value: values[index] || \"\",\n ...filterUndefined(props),\n id: `${id}${index ? `-${index}` : \"\"}`,\n onBlur: handlerAll(eventProps.onBlur, props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onChange(index)),\n onFocus: handlerAll(eventProps.onFocus, props.onFocus, onFocus(index)),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown(index)),\n }),\n [\n ariaProps,\n dataProps,\n eventProps,\n mask,\n type,\n labelId,\n otp,\n disabled,\n focusedIndex,\n readOnly,\n placeholder,\n values,\n id,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n ],\n )\n\n return {\n descendants,\n items,\n getInputProps,\n getRootProps,\n }\n}\n\nexport type UsePinInputReturn = ReturnType<typeof usePinInput>\n"],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { mergeProps } from "../../core/components/props.js";
2
+ import "../../core/index.js";
1
3
  import { useCallback, useMemo } from "react";
2
4
  import { encode } from "uqr";
3
5
 
@@ -39,10 +41,7 @@ const useQrCode = ({ boostEcc, border, ecc, invert, maskPattern, maxVersion, min
39
41
  encoded.size,
40
42
  pixelSize
41
43
  ]);
42
- const getRootProps = useCallback((props = {}) => ({
43
- ...rest,
44
- ...props
45
- }), [rest]);
44
+ const getRootProps = useCallback((props) => mergeProps(rest, props)(), [rest]);
46
45
  return {
47
46
  height,
48
47
  paths,
@@ -1 +1 @@
1
- {"version":3,"file":"use-qr-code.js","names":["paths: string[]","result: string[]","getRootProps: PropGetter"],"sources":["../../../../src/components/qr-code/use-qr-code.tsx"],"sourcesContent":["import type { QrCodeGenerateResult } from \"uqr\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useMemo } from \"react\"\nimport { encode } from \"uqr\"\n\nexport interface UseQrCodeProps extends HTMLProps {\n /**\n * The value to encode as a QR code.\n */\n value: string\n /**\n * The error correction level to boost the error correction level to the maximum allowed by the version and size.\n *\n * @default false\n */\n boostEcc?: boolean\n /**\n * The border width around the QR code.\n *\n * @default 1\n */\n border?: number\n /**\n * The error correction level.\n *\n * - `L` allows for up to 7% error correction,\n * - `M` allows for up to 15% error correction,\n * - `Q` allows for up to 25% error correction,\n * - `H` allows for up to 30% error correction.\n *\n * @default 'L'\n */\n ecc?: \"H\" | \"L\" | \"M\" | \"Q\"\n /**\n * Inverts the black and white of the QR code.\n *\n * @default false\n */\n invert?: boolean\n /**\n * The mask pattern to use.\n *\n * @default -1\n */\n maskPattern?: number\n /**\n * The maximum version of the QR code (1-40).\n *\n * @default 40\n */\n maxVersion?: number\n /**\n * The minimum version of the QR code (1-40).\n *\n * @default 1\n */\n minVersion?: number\n /**\n * The pixel size of the QR code.\n *\n * @default 10\n */\n pixelSize?: number\n /**\n * Callback function to receive the generated QR Code.\n */\n onEncoded?: (qr: QrCodeGenerateResult) => void\n}\n\nexport const useQrCode = ({\n boostEcc,\n border,\n ecc,\n invert,\n maskPattern,\n maxVersion,\n minVersion,\n pixelSize = 10,\n value,\n onEncoded,\n ...rest\n}: UseQrCodeProps) => {\n const encoded = useMemo(\n () =>\n encode(value, {\n boostEcc,\n border,\n ecc,\n invert,\n maskPattern,\n maxVersion,\n minVersion,\n onEncoded,\n }),\n [\n value,\n border,\n ecc,\n boostEcc,\n maskPattern,\n maxVersion,\n minVersion,\n invert,\n onEncoded,\n ],\n )\n const height = encoded.size * pixelSize\n const width = encoded.size * pixelSize\n const viewBox = `0 0 ${width} ${height}`\n const paths: string[] = useMemo(() => {\n const result: string[] = []\n\n for (let row = 0; row < encoded.size; row++) {\n for (let col = 0; col < encoded.size; col++) {\n const x = col * pixelSize\n const y = row * pixelSize\n if (encoded.data[row]?.[col]) {\n result.push(`M${x},${y}h${pixelSize}v${pixelSize}h-${pixelSize}z`)\n }\n }\n }\n return result\n }, [encoded.data, encoded.size, pixelSize])\n\n const getRootProps: PropGetter = useCallback(\n (props = {}) => ({ ...rest, ...props }),\n [rest],\n )\n\n const getFrameProps: PropGetter<\"svg\"> = useCallback(\n (props = {}) => ({ viewBox: `0 0 ${width} ${height}`, ...props }),\n [height, width],\n )\n\n const getOverlayProps: PropGetter = useCallback(\n (props = {}) => ({ ...props }),\n [],\n )\n\n const getPatternProps: PropGetter<\"path\"> = useCallback(\n (props) => ({ ...props, d: paths.join(\" \") }),\n [paths],\n )\n\n return {\n height,\n paths,\n viewBox,\n width,\n getFrameProps,\n getOverlayProps,\n getPatternProps,\n getRootProps,\n }\n}\n\nexport type UseQrCodeReturn = ReturnType<typeof useQrCode>\n"],"mappings":";;;;AAqEA,MAAa,aAAa,EACxB,UACA,QACA,KACA,QACA,aACA,YACA,YACA,YAAY,IACZ,OACA,WACA,GAAG,WACiB;CACpB,MAAM,UAAU,cAEZ,OAAO,OAAO;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,EACJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CACD,MAAM,SAAS,QAAQ,OAAO;CAC9B,MAAM,QAAQ,QAAQ,OAAO;CAC7B,MAAM,UAAU,OAAO,MAAM,GAAG;CAChC,MAAMA,QAAkB,cAAc;EACpC,MAAMC,SAAmB,EAAE;AAE3B,OAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,MAAM,MACpC,MAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,MAAM,OAAO;GAC3C,MAAM,IAAI,MAAM;GAChB,MAAM,IAAI,MAAM;AAChB,OAAI,QAAQ,KAAK,OAAO,KACtB,QAAO,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,UAAU,GAAG,UAAU,IAAI,UAAU,GAAG;;AAIxE,SAAO;IACN;EAAC,QAAQ;EAAM,QAAQ;EAAM;EAAU,CAAC;CAE3C,MAAMC,eAA2B,aAC9B,QAAQ,EAAE,MAAM;EAAE,GAAG;EAAM,GAAG;EAAO,GACtC,CAAC,KAAK,CACP;AAiBD,QAAO;EACL;EACA;EACA;EACA;EACA,eApBuC,aACtC,QAAQ,EAAE,MAAM;GAAE,SAAS,OAAO,MAAM,GAAG;GAAU,GAAG;GAAO,GAChE,CAAC,QAAQ,MAAM,CAChB;EAkBC,iBAhBkC,aACjC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,GAC7B,EAAE,CACH;EAcC,iBAZ0C,aACzC,WAAW;GAAE,GAAG;GAAO,GAAG,MAAM,KAAK,IAAI;GAAE,GAC5C,CAAC,MAAM,CACR;EAUC;EACD"}
1
+ {"version":3,"file":"use-qr-code.js","names":["paths: string[]","result: string[]","getRootProps: PropGetter"],"sources":["../../../../src/components/qr-code/use-qr-code.tsx"],"sourcesContent":["import type { QrCodeGenerateResult } from \"uqr\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useMemo } from \"react\"\nimport { encode } from \"uqr\"\nimport { mergeProps } from \"../../core\"\n\nexport interface UseQrCodeProps extends HTMLProps {\n /**\n * The value to encode as a QR code.\n */\n value: string\n /**\n * The error correction level to boost the error correction level to the maximum allowed by the version and size.\n *\n * @default false\n */\n boostEcc?: boolean\n /**\n * The border width around the QR code.\n *\n * @default 1\n */\n border?: number\n /**\n * The error correction level.\n *\n * - `L` allows for up to 7% error correction,\n * - `M` allows for up to 15% error correction,\n * - `Q` allows for up to 25% error correction,\n * - `H` allows for up to 30% error correction.\n *\n * @default 'L'\n */\n ecc?: \"H\" | \"L\" | \"M\" | \"Q\"\n /**\n * Inverts the black and white of the QR code.\n *\n * @default false\n */\n invert?: boolean\n /**\n * The mask pattern to use.\n *\n * @default -1\n */\n maskPattern?: number\n /**\n * The maximum version of the QR code (1-40).\n *\n * @default 40\n */\n maxVersion?: number\n /**\n * The minimum version of the QR code (1-40).\n *\n * @default 1\n */\n minVersion?: number\n /**\n * The pixel size of the QR code.\n *\n * @default 10\n */\n pixelSize?: number\n /**\n * Callback function to receive the generated QR Code.\n */\n onEncoded?: (qr: QrCodeGenerateResult) => void\n}\n\nexport const useQrCode = ({\n boostEcc,\n border,\n ecc,\n invert,\n maskPattern,\n maxVersion,\n minVersion,\n pixelSize = 10,\n value,\n onEncoded,\n ...rest\n}: UseQrCodeProps) => {\n const encoded = useMemo(\n () =>\n encode(value, {\n boostEcc,\n border,\n ecc,\n invert,\n maskPattern,\n maxVersion,\n minVersion,\n onEncoded,\n }),\n [\n value,\n border,\n ecc,\n boostEcc,\n maskPattern,\n maxVersion,\n minVersion,\n invert,\n onEncoded,\n ],\n )\n const height = encoded.size * pixelSize\n const width = encoded.size * pixelSize\n const viewBox = `0 0 ${width} ${height}`\n const paths: string[] = useMemo(() => {\n const result: string[] = []\n\n for (let row = 0; row < encoded.size; row++) {\n for (let col = 0; col < encoded.size; col++) {\n const x = col * pixelSize\n const y = row * pixelSize\n if (encoded.data[row]?.[col]) {\n result.push(`M${x},${y}h${pixelSize}v${pixelSize}h-${pixelSize}z`)\n }\n }\n }\n return result\n }, [encoded.data, encoded.size, pixelSize])\n\n const getRootProps: PropGetter = useCallback(\n (props) => mergeProps(rest, props)(),\n [rest],\n )\n\n const getFrameProps: PropGetter<\"svg\"> = useCallback(\n (props = {}) => ({ viewBox: `0 0 ${width} ${height}`, ...props }),\n [height, width],\n )\n\n const getOverlayProps: PropGetter = useCallback(\n (props = {}) => ({ ...props }),\n [],\n )\n\n const getPatternProps: PropGetter<\"path\"> = useCallback(\n (props) => ({ ...props, d: paths.join(\" \") }),\n [paths],\n )\n\n return {\n height,\n paths,\n viewBox,\n width,\n getFrameProps,\n getOverlayProps,\n getPatternProps,\n getRootProps,\n }\n}\n\nexport type UseQrCodeReturn = ReturnType<typeof useQrCode>\n"],"mappings":";;;;;;AAsEA,MAAa,aAAa,EACxB,UACA,QACA,KACA,QACA,aACA,YACA,YACA,YAAY,IACZ,OACA,WACA,GAAG,WACiB;CACpB,MAAM,UAAU,cAEZ,OAAO,OAAO;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,EACJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CACD,MAAM,SAAS,QAAQ,OAAO;CAC9B,MAAM,QAAQ,QAAQ,OAAO;CAC7B,MAAM,UAAU,OAAO,MAAM,GAAG;CAChC,MAAMA,QAAkB,cAAc;EACpC,MAAMC,SAAmB,EAAE;AAE3B,OAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,MAAM,MACpC,MAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,MAAM,OAAO;GAC3C,MAAM,IAAI,MAAM;GAChB,MAAM,IAAI,MAAM;AAChB,OAAI,QAAQ,KAAK,OAAO,KACtB,QAAO,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,UAAU,GAAG,UAAU,IAAI,UAAU,GAAG;;AAIxE,SAAO;IACN;EAAC,QAAQ;EAAM,QAAQ;EAAM;EAAU,CAAC;CAE3C,MAAMC,eAA2B,aAC9B,UAAU,WAAW,MAAM,MAAM,EAAE,EACpC,CAAC,KAAK,CACP;AAiBD,QAAO;EACL;EACA;EACA;EACA;EACA,eApBuC,aACtC,QAAQ,EAAE,MAAM;GAAE,SAAS,OAAO,MAAM,GAAG;GAAU,GAAG;GAAO,GAChE,CAAC,QAAQ,MAAM,CAChB;EAkBC,iBAhBkC,aACjC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,GAC7B,EAAE,CACH;EAcC,iBAZ0C,aACzC,WAAW;GAAE,GAAG;GAAO,GAAG,MAAM,KAAK,IAAI;GAAE,GAC5C,CAAC,MAAM,CACR;EAUC;EACD"}
@@ -7,7 +7,7 @@ import { CollapseProps } from "../collapse/collapse.js";
7
7
  import "../../index.js";
8
8
  import { AccordionStyle } from "./accordion.style.js";
9
9
  import { UseAccordionItemProps, UseAccordionProps } from "./use-accordion.js";
10
- import * as react1239 from "react";
10
+ import * as react41 from "react";
11
11
 
12
12
  //#region src/components/accordion/accordion.d.ts
13
13
  interface AccordionCallBackProps {
@@ -31,7 +31,7 @@ interface AccordionRootProps extends Omit<HTMLStyledProps, "onChange">, ThemePro
31
31
  */
32
32
  items?: AccordionItem[];
33
33
  }
34
- declare const AccordionPropsContext: react1239.Context<Partial<AccordionRootProps> | undefined>, useAccordionPropsContext: () => Partial<AccordionRootProps> | undefined;
34
+ declare const AccordionPropsContext: react41.Context<Partial<AccordionRootProps> | undefined>, useAccordionPropsContext: () => Partial<AccordionRootProps> | undefined;
35
35
  /**
36
36
  * `Accordion` is a component for a list that displays information in an expandable or collapsible manner.
37
37
  *
@@ -2,10 +2,10 @@ import { HTMLProps, PropGetter } from "../../core/components/index.types.js";
2
2
  import "../../core/index.js";
3
3
  import { Descendant } from "../../hooks/use-descendants/index.js";
4
4
  import "../../index.js";
5
- import * as react1227 from "react";
5
+ import * as react42 from "react";
6
6
 
7
7
  //#region src/components/accordion/use-accordion.d.ts
8
- declare const AccordionDescendantsContext: react1227.Context<{
8
+ declare const AccordionDescendantsContext: react42.Context<{
9
9
  active: (target?: HTMLButtonElement | Descendant<HTMLButtonElement, {}> | null | undefined, options?: FocusOptions) => void;
10
10
  count: (props?: Partial<{}> | undefined) => number;
11
11
  destroy: () => void;
@@ -24,7 +24,7 @@ declare const AccordionDescendantsContext: react1227.Context<{
24
24
  prevValue: (indexOrNode: number | HTMLButtonElement | Descendant<HTMLButtonElement, {}> | null, loop?: boolean, props?: Partial<{}> | undefined) => Descendant<HTMLButtonElement, {}> | undefined;
25
25
  register: (props?: {
26
26
  disabled?: boolean | ((node: HTMLButtonElement) => boolean) | undefined;
27
- } | undefined) => react1227.RefCallback<HTMLButtonElement>;
27
+ } | undefined) => react42.RefCallback<HTMLButtonElement>;
28
28
  unregister: (node?: HTMLButtonElement | null | undefined) => void;
29
29
  value: (indexOrNode: number | HTMLButtonElement | null) => Descendant<HTMLButtonElement, {}> | undefined;
30
30
  values: (props?: Partial<{}> | undefined) => Descendant<HTMLButtonElement, {}>[];
@@ -50,12 +50,12 @@ declare const AccordionDescendantsContext: react1227.Context<{
50
50
  prevValue: (indexOrNode: number | HTMLButtonElement | Descendant<HTMLButtonElement, {}> | null, loop?: boolean, props?: Partial<{}> | undefined) => Descendant<HTMLButtonElement, {}> | undefined;
51
51
  register: (props?: {
52
52
  disabled?: boolean | ((node: HTMLButtonElement) => boolean) | undefined;
53
- } | undefined) => react1227.RefCallback<HTMLButtonElement>;
53
+ } | undefined) => react42.RefCallback<HTMLButtonElement>;
54
54
  unregister: (node?: HTMLButtonElement | null | undefined) => void;
55
55
  value: (indexOrNode: number | HTMLButtonElement | null) => Descendant<HTMLButtonElement, {}> | undefined;
56
56
  values: (props?: Partial<{}> | undefined) => Descendant<HTMLButtonElement, {}>[];
57
57
  };
58
- register: react1227.RefCallback<HTMLButtonElement>;
58
+ register: react42.RefCallback<HTMLButtonElement>;
59
59
  }, useAccordionDescendants: () => {
60
60
  active: (target?: HTMLButtonElement | Descendant<HTMLButtonElement, {}> | null | undefined, options?: FocusOptions) => void;
61
61
  count: (props?: Partial<{}> | undefined) => number;
@@ -75,15 +75,15 @@ declare const AccordionDescendantsContext: react1227.Context<{
75
75
  prevValue: (indexOrNode: number | HTMLButtonElement | Descendant<HTMLButtonElement, {}> | null, loop?: boolean, props?: Partial<{}> | undefined) => Descendant<HTMLButtonElement, {}> | undefined;
76
76
  register: (props?: {
77
77
  disabled?: boolean | ((node: HTMLButtonElement) => boolean) | undefined;
78
- } | undefined) => react1227.RefCallback<HTMLButtonElement>;
78
+ } | undefined) => react42.RefCallback<HTMLButtonElement>;
79
79
  unregister: (node?: HTMLButtonElement | null | undefined) => void;
80
80
  value: (indexOrNode: number | HTMLButtonElement | null) => Descendant<HTMLButtonElement, {}> | undefined;
81
81
  values: (props?: Partial<{}> | undefined) => Descendant<HTMLButtonElement, {}>[];
82
82
  };
83
83
  interface AccordionContext extends Omit<UseAccordionReturn, "descendants" | "getRootProps"> {}
84
- declare const AccordionContext: react1227.Context<AccordionContext>, useAccordionContext: () => AccordionContext;
84
+ declare const AccordionContext: react42.Context<AccordionContext>, useAccordionContext: () => AccordionContext;
85
85
  interface AccordionItemContext extends Omit<UseAccordionItemReturn, "getItemProps"> {}
86
- declare const AccordionItemContext: react1227.Context<AccordionItemContext>, useAccordionItemContext: () => AccordionItemContext;
86
+ declare const AccordionItemContext: react42.Context<AccordionItemContext>, useAccordionItemContext: () => AccordionItemContext;
87
87
  interface UseAccordionProps extends Omit<HTMLProps, "onChange"> {
88
88
  /**
89
89
  * The initial index(es) of the accordion item to expand.
@@ -137,7 +137,7 @@ declare const useAccordion: ({
137
137
  prevValue: (indexOrNode: number | HTMLButtonElement | Descendant<HTMLButtonElement, {}> | null, loop?: boolean, props?: Partial<{}> | undefined) => Descendant<HTMLButtonElement, {}> | undefined;
138
138
  register: (props?: {
139
139
  disabled?: boolean | ((node: HTMLButtonElement) => boolean) | undefined;
140
- } | undefined) => react1227.RefCallback<HTMLButtonElement>;
140
+ } | undefined) => react42.RefCallback<HTMLButtonElement>;
141
141
  unregister: (node?: HTMLButtonElement | null | undefined) => void;
142
142
  value: (indexOrNode: number | HTMLButtonElement | null) => Descendant<HTMLButtonElement, {}> | undefined;
143
143
  values: (props?: Partial<{}> | undefined) => Descendant<HTMLButtonElement, {}>[];
@@ -145,8 +145,8 @@ declare const useAccordion: ({
145
145
  focusedIndex: number;
146
146
  index: number | number[];
147
147
  multiple: boolean | undefined;
148
- setFocusedIndex: react1227.Dispatch<react1227.SetStateAction<number>>;
149
- setIndex: react1227.Dispatch<react1227.SetStateAction<number | number[]>>;
148
+ setFocusedIndex: react42.Dispatch<react42.SetStateAction<number>>;
149
+ setIndex: react42.Dispatch<react42.SetStateAction<number | number[]>>;
150
150
  toggle: boolean | undefined;
151
151
  getRootProps: PropGetter<"div", undefined, undefined>;
152
152
  };
@@ -6,7 +6,7 @@ import { PortalProps } from "../portal/portal.js";
6
6
  import { UsePopupAnimationProps } from "../popover/popover.js";
7
7
  import { UseActionBarProps } from "./use-action-bar.js";
8
8
  import "../../index.js";
9
- import * as react1172 from "react";
9
+ import * as react39 from "react";
10
10
  import { PropsWithChildren, ReactNode } from "react";
11
11
 
12
12
  //#region src/components/action-bar/action-bar.d.ts
@@ -28,7 +28,7 @@ interface ActionBarRootProps extends Omit<HTMLStyledProps, "content">, ThemeProp
28
28
  */
29
29
  onCloseComplete?: () => void;
30
30
  }
31
- declare const ActionBarPropsContext: react1172.Context<Partial<ActionBarRootProps> | undefined>, useActionBarPropsContext: () => Partial<ActionBarRootProps> | undefined;
31
+ declare const ActionBarPropsContext: react39.Context<Partial<ActionBarRootProps> | undefined>, useActionBarPropsContext: () => Partial<ActionBarRootProps> | undefined;
32
32
  /**
33
33
  * `ActionBar` is a component that is used to display a bottom action bar with a set of actions.
34
34
  *
@@ -4,7 +4,7 @@ import "../../core/index.js";
4
4
  import { HTMLMotionProps } from "../motion/index.types.js";
5
5
  import { AiryStyle } from "./airy.style.js";
6
6
  import "../../index.js";
7
- import * as react1159 from "react";
7
+ import * as react40 from "react";
8
8
  import { ReactNode } from "react";
9
9
 
10
10
  //#region src/components/airy/airy.d.ts
@@ -56,7 +56,7 @@ interface AiryProps extends Omit<HTMLMotionProps<"button">, "onChange">, ThemePr
56
56
  */
57
57
  onChange?: (value: KeyframeIdent) => void;
58
58
  }
59
- declare const AiryPropsContext: react1159.Context<Partial<AiryProps> | undefined>, useAiryPropsContext: () => Partial<AiryProps> | undefined;
59
+ declare const AiryPropsContext: react40.Context<Partial<AiryProps> | undefined>, useAiryPropsContext: () => Partial<AiryProps> | undefined;
60
60
  /**
61
61
  * `Airy` is a component that creates an airy animation, switching between two elements when one is clicked.
62
62
  *
@@ -6,7 +6,7 @@ import { IconProps } from "../icon/icon.js";
6
6
  import { LoadingProps } from "../loading/loading.js";
7
7
  import { StatusScheme } from "../status/status.js";
8
8
  import "../../index.js";
9
- import * as react1160 from "react";
9
+ import * as react37 from "react";
10
10
 
11
11
  //#region src/components/alert/alert.d.ts
12
12
  interface AlertRootProps extends HTMLStyledProps, ThemeProps<AlertStyle> {
@@ -17,7 +17,7 @@ interface AlertRootProps extends HTMLStyledProps, ThemeProps<AlertStyle> {
17
17
  */
18
18
  status?: StatusScheme;
19
19
  }
20
- declare const AlertPropsContext: react1160.Context<Partial<AlertRootProps> | undefined>, useAlertPropsContext: () => Partial<AlertRootProps> | undefined;
20
+ declare const AlertPropsContext: react37.Context<Partial<AlertRootProps> | undefined>, useAlertPropsContext: () => Partial<AlertRootProps> | undefined;
21
21
  /**
22
22
  * `Alert` is a component that conveys information to the user.
23
23
  *
@@ -3,7 +3,7 @@ import { CSSModifierObject, CSSPropObject, CSSSlotObject } from "../../core/css/
3
3
  import "../../index.js";
4
4
 
5
5
  //#region src/components/alert/alert.style.d.ts
6
- declare const alertStyle: ComponentSlotStyle<"loading" | "title" | "icon" | "root" | "description", CSSPropObject<CSSSlotObject<"loading" | "title" | "icon" | "root" | "description">>, CSSModifierObject<CSSSlotObject<"loading" | "title" | "icon" | "root" | "description">>, {
6
+ declare const alertStyle: ComponentSlotStyle<"title" | "loading" | "icon" | "root" | "description", CSSPropObject<CSSSlotObject<"title" | "loading" | "icon" | "root" | "description">>, CSSModifierObject<CSSSlotObject<"title" | "loading" | "icon" | "root" | "description">>, {
7
7
  island: {
8
8
  description: {
9
9
  color: "fg.muted";
@@ -4,7 +4,7 @@ import "../../core/index.js";
4
4
  import { AlphaSliderStyle } from "./alpha-slider.style.js";
5
5
  import { HueSliderOverlayProps, HueSliderRootProps, HueSliderThumbProps, HueSliderTrackProps } from "../hue-slider/hue-slider.js";
6
6
  import "../../index.js";
7
- import * as react268 from "react";
7
+ import * as react104 from "react";
8
8
 
9
9
  //#region src/components/alpha-slider/alpha-slider.d.ts
10
10
  interface AlphaSliderRootProps extends WithoutThemeProps<Omit<HueSliderRootProps, "color" | "max" | "step" | "thumbProps" | "trackProps">, AlphaSliderStyle> {
@@ -37,7 +37,7 @@ interface AlphaSliderRootProps extends WithoutThemeProps<Omit<HueSliderRootProps
37
37
  */
38
38
  trackProps?: AlphaSliderTrackProps;
39
39
  }
40
- declare const AlphaSliderPropsContext: react268.Context<Partial<AlphaSliderRootProps> | undefined>, useAlphaSliderPropsContext: () => Partial<AlphaSliderRootProps> | undefined;
40
+ declare const AlphaSliderPropsContext: react104.Context<Partial<AlphaSliderRootProps> | undefined>, useAlphaSliderPropsContext: () => Partial<AlphaSliderRootProps> | undefined;
41
41
  /**
42
42
  * `AlphaSlider` is a component used to allow the user to select color transparency.
43
43
  *
@@ -2,7 +2,7 @@ import { StyleValue } from "../../core/css/index.types.js";
2
2
  import { Component, HTMLStyledProps } from "../../core/components/index.types.js";
3
3
  import "../../core/index.js";
4
4
  import "../../index.js";
5
- import * as react267 from "react";
5
+ import * as react105 from "react";
6
6
 
7
7
  //#region src/components/aspect-ratio/aspect-ratio.d.ts
8
8
  interface AspectRatioProps extends HTMLStyledProps {
@@ -13,7 +13,7 @@ interface AspectRatioProps extends HTMLStyledProps {
13
13
  */
14
14
  ratio?: StyleValue<number>;
15
15
  }
16
- declare const AspectRatioPropsContext: react267.Context<Partial<AspectRatioProps> | undefined>, useAspectRatioPropsContext: () => Partial<AspectRatioProps> | undefined;
16
+ declare const AspectRatioPropsContext: react105.Context<Partial<AspectRatioProps> | undefined>, useAspectRatioPropsContext: () => Partial<AspectRatioProps> | undefined;
17
17
  /**
18
18
  * `AspectRatio` is a component for embedding things like videos and maps while maintaining the aspect ratio.
19
19
  *
@@ -10,7 +10,7 @@ import { InputElementProps } from "../input/input-element.js";
10
10
  import { InputGroupRootProps } from "../input/input-group.js";
11
11
  import { UseAutocompleteOptionProps, UseAutocompleteProps } from "./use-autocomplete.js";
12
12
  import "../../index.js";
13
- import * as react246 from "react";
13
+ import * as react73 from "react";
14
14
  import { ReactElement, ReactNode } from "react";
15
15
 
16
16
  //#region src/components/autocomplete/autocomplete.d.ts
@@ -66,7 +66,7 @@ interface AutocompleteRootProps<Multiple extends boolean = false> extends Omit<H
66
66
  */
67
67
  rootProps?: InputGroupRootProps;
68
68
  }
69
- declare const AutocompletePropsContext: react246.Context<Partial<AutocompleteRootProps<false>> | undefined>, useAutocompletePropsContext: () => Partial<AutocompleteRootProps<false>> | undefined;
69
+ declare const AutocompletePropsContext: react73.Context<Partial<AutocompleteRootProps<false>> | undefined>, useAutocompletePropsContext: () => Partial<AutocompleteRootProps<false>> | undefined;
70
70
  /**
71
71
  * `Autocomplete` is a component used to display suggestions in response to user text input.
72
72
  *
@@ -3,7 +3,7 @@ import { CSSPropObject, CSSSlotObject } from "../../core/css/index.types.js";
3
3
  import "../../index.js";
4
4
 
5
5
  //#region src/components/autocomplete/autocomplete.style.d.ts
6
- declare const autocompleteStyle: ComponentSlotStyle<"input" | "label" | "option" | "content" | "group" | "separator" | "icon" | "root" | "indicator" | "field" | "valueText" | "empty", CSSPropObject<CSSSlotObject<"input" | "label" | "option" | "content" | "group" | "separator" | "icon" | "root" | "indicator" | "field" | "valueText" | "empty">>, {
6
+ declare const autocompleteStyle: ComponentSlotStyle<"input" | "label" | "option" | "content" | "group" | "separator" | "icon" | "root" | "indicator" | "empty" | "field" | "valueText", CSSPropObject<CSSSlotObject<"input" | "label" | "option" | "content" | "group" | "separator" | "icon" | "root" | "indicator" | "empty" | "field" | "valueText">>, {
7
7
  xs: {
8
8
  empty: {
9
9
  gap: "1.5";
@@ -6,7 +6,7 @@ import { FieldProps } from "../field/field.js";
6
6
  import { Descendant, DescendantProps } from "../../hooks/use-descendants/index.js";
7
7
  import { ComboboxDescendant, ComboboxDescendantProps, ComboboxItem, ComboboxItemWithValue, UseComboboxItemProps, UseComboboxProps } from "../../hooks/use-combobox/index.js";
8
8
  import "../../index.js";
9
- import * as react256 from "react";
9
+ import * as react74 from "react";
10
10
  import { ChangeEvent, ReactNode } from "react";
11
11
 
12
12
  //#region src/components/autocomplete/use-autocomplete.d.ts
@@ -26,7 +26,7 @@ interface AutocompleteFilter {
26
26
  }
27
27
  type AutocompleteMatcher = typeof index_d_exports.match;
28
28
  interface AutocompleteContext extends Pick<UseAutocompleteReturn, "max" | "value"> {}
29
- declare const AutocompleteContext: react256.Context<AutocompleteContext>, useAutocompleteContext: () => AutocompleteContext;
29
+ declare const AutocompleteContext: react74.Context<AutocompleteContext>, useAutocompleteContext: () => AutocompleteContext;
30
30
  interface UseAutocompleteProps<Multiple extends boolean = false> extends Omit<HTMLProps, "defaultValue" | "onChange" | "ref" | "value">, Omit<UseComboboxProps, "defaultValue" | "initialFocusValue" | "onChange" | "ref" | "value">, HTMLRefAttributes<"input">, FieldProps {
31
31
  /**
32
32
  * If `true`, the autocomplete will allow custom value.
@@ -154,7 +154,7 @@ declare const useAutocomplete: <Multiple extends boolean = false>(props?: UseAut
154
154
  lastValue: (props?: Partial<ComboboxDescendantProps> | undefined) => Descendant<HTMLDivElement, ComboboxDescendantProps> | undefined;
155
155
  nextValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, ComboboxDescendantProps> | null, loop?: boolean, props?: Partial<ComboboxDescendantProps> | undefined) => Descendant<HTMLDivElement, ComboboxDescendantProps> | undefined;
156
156
  prevValue: (indexOrNode: number | HTMLDivElement | Descendant<HTMLDivElement, ComboboxDescendantProps> | null, loop?: boolean, props?: Partial<ComboboxDescendantProps> | undefined) => Descendant<HTMLDivElement, ComboboxDescendantProps> | undefined;
157
- register: (props?: DescendantProps<HTMLDivElement, ComboboxDescendantProps> | undefined) => react256.RefCallback<HTMLDivElement>;
157
+ register: (props?: DescendantProps<HTMLDivElement, ComboboxDescendantProps> | undefined) => react74.RefCallback<HTMLDivElement>;
158
158
  unregister: (node?: HTMLDivElement | null | undefined) => void;
159
159
  value: (indexOrNode: number | HTMLDivElement | null) => Descendant<HTMLDivElement, ComboboxDescendantProps> | undefined;
160
160
  values: (props?: Partial<ComboboxDescendantProps> | undefined) => Descendant<HTMLDivElement, ComboboxDescendantProps>[];
@@ -164,8 +164,8 @@ declare const useAutocomplete: <Multiple extends boolean = false>(props?: UseAut
164
164
  items: ComboboxItem[];
165
165
  max: number | undefined;
166
166
  open: boolean;
167
- setInputValue: react256.Dispatch<react256.SetStateAction<string>>;
168
- setValue: react256.Dispatch<react256.SetStateAction<Multiple extends true ? string[] : string>>;
167
+ setInputValue: react74.Dispatch<react74.SetStateAction<string>>;
168
+ setValue: react74.Dispatch<react74.SetStateAction<Multiple extends true ? string[] : string>>;
169
169
  value: Multiple extends true ? string[] : string;
170
170
  valueMap: {
171
171
  [key: string]: ComboboxItemWithValue;
@@ -6,9 +6,9 @@ import "../../core/index.js";
6
6
  import { AvatarStyle } from "./avatar.style.js";
7
7
  import { UseAvatarProps } from "./use-avatar.js";
8
8
  import "../../index.js";
9
- import * as react262 from "react";
9
+ import * as react31 from "react";
10
10
  import { ReactElement } from "react";
11
- import * as _yamada_ui_utils3 from "@yamada-ui/utils";
11
+ import * as _yamada_ui_utils0 from "@yamada-ui/utils";
12
12
 
13
13
  //#region src/components/avatar/avatar.d.ts
14
14
  interface AvatarProps extends HTMLStyledProps, ThemeProps<AvatarStyle>, UseAvatarProps {
@@ -25,7 +25,7 @@ interface AvatarProps extends HTMLStyledProps, ThemeProps<AvatarStyle>, UseAvata
25
25
  */
26
26
  imageProps?: AvatarImageProps;
27
27
  }
28
- declare const component: <H extends "fragment" | As = "div", R extends _yamada_ui_utils3.Dict = _yamada_ui_utils3.Dict<any>>(el: H | react262.FC<R>, slot?: ComponentSlot<ComponentSlotName<ComponentSlotStyle<"image" | "group" | "root" | "fallback", {
28
+ declare const component: <H extends "fragment" | As = "div", R extends _yamada_ui_utils0.Dict = _yamada_ui_utils0.Dict<any>>(el: H | react31.FC<R>, slot?: ComponentSlot<ComponentSlotName<ComponentSlotStyle<"image" | "group" | "root" | "fallback", {
29
29
  shape: {
30
30
  circle: {
31
31
  root: {
@@ -148,7 +148,7 @@ declare const component: <H extends "fragment" | As = "div", R extends _yamada_u
148
148
  name,
149
149
  className,
150
150
  ...options
151
- }?: ComponentOptions) => (initialProps?: InitialProps<R>, ...superProps: SuperProps<R>[]) => H extends "fragment" ? react262.FunctionComponent<R> : Component<Exclude<H, "fragment">, R>, AvatarPropsContext: react262.Context<Partial<AvatarProps> | undefined>, useAvatarPropsContext: () => Partial<AvatarProps> | undefined, useRootComponentProps: <Y extends _yamada_ui_utils3.Dict = {}, R extends keyof Y = keyof Y>(props: Y, slot?: ComponentSlot<ComponentSlotName<ComponentSlotStyle<"image" | "group" | "root" | "fallback", {
151
+ }?: ComponentOptions) => (initialProps?: InitialProps<R>, ...superProps: SuperProps<R>[]) => H extends "fragment" ? react31.FunctionComponent<R> : Component<Exclude<H, "fragment">, R>, AvatarPropsContext: react31.Context<Partial<AvatarProps> | undefined>, useAvatarPropsContext: () => Partial<AvatarProps> | undefined, useRootComponentProps: <Y extends _yamada_ui_utils0.Dict = {}, R extends keyof Y = keyof Y>(props: Y, slot?: ComponentSlot<ComponentSlotName<ComponentSlotStyle<"image" | "group" | "root" | "fallback", {
152
152
  shape: {
153
153
  circle: {
154
154
  root: {
@@ -271,7 +271,7 @@ declare const component: <H extends "fragment" | As = "div", R extends _yamada_u
271
271
  className,
272
272
  withContext,
273
273
  transferProps
274
- }?: UseComponentPropsOptions<R>) => [CSSSlotObject, _yamada_ui_utils3.Merge<WithoutThemeProps<Y, ComponentSlotStyle<"image" | "group" | "root" | "fallback", {
274
+ }?: UseComponentPropsOptions<R>) => [CSSSlotObject, _yamada_ui_utils0.Merge<WithoutThemeProps<Y, ComponentSlotStyle<"image" | "group" | "root" | "fallback", {
275
275
  shape: {
276
276
  circle: {
277
277
  root: {
@@ -1,6 +1,6 @@
1
1
  import { HTMLProps, PropGetter } from "../../core/components/index.types.js";
2
2
  import "../../core/index.js";
3
- import * as react265 from "react";
3
+ import * as react34 from "react";
4
4
 
5
5
  //#region src/components/avatar/use-avatar-group.d.ts
6
6
  interface UseAvatarGroupProps extends HTMLProps {
@@ -19,7 +19,7 @@ declare const useAvatarGroup: ({
19
19
  reverse,
20
20
  ...rest
21
21
  }?: UseAvatarGroupProps) => {
22
- children: react265.ReactElement<any, string | react265.JSXElementConstructor<any>>[];
22
+ children: react34.ReactElement<any, string | react34.JSXElementConstructor<any>>[];
23
23
  excess: number;
24
24
  getRootProps: PropGetter<"div", undefined, undefined>;
25
25
  };