@yamada-ui/react 2.1.6 → 2.1.7-dev-20260404062241

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 (241) hide show
  1. package/dist/cjs/components/autocomplete/use-autocomplete.cjs +3 -6
  2. package/dist/cjs/components/autocomplete/use-autocomplete.cjs.map +1 -1
  3. package/dist/cjs/components/calendar/use-calendar.cjs.map +1 -1
  4. package/dist/cjs/components/date-picker/use-date-picker.cjs +2 -8
  5. package/dist/cjs/components/date-picker/use-date-picker.cjs.map +1 -1
  6. package/dist/cjs/components/indicator/indicator.cjs.map +1 -1
  7. package/dist/cjs/components/number-input/use-number-input.cjs.map +1 -1
  8. package/dist/cjs/components/slider/use-slider.cjs.map +1 -1
  9. package/dist/cjs/components/textarea/use-autosize.cjs.map +1 -1
  10. package/dist/cjs/components/toggle/use-toggle-group.cjs +1 -1
  11. package/dist/cjs/components/toggle/use-toggle-group.cjs.map +1 -1
  12. package/dist/cjs/core/css/calc.cjs.map +1 -1
  13. package/dist/cjs/core/css/css.cjs.map +1 -1
  14. package/dist/cjs/core/css/gradient.cjs.map +1 -1
  15. package/dist/cjs/core/css/grid.cjs.map +1 -1
  16. package/dist/cjs/hooks/use-counter/index.cjs.map +1 -1
  17. package/dist/cjs/utils/store.cjs.map +1 -1
  18. package/dist/esm/components/autocomplete/use-autocomplete.js +3 -6
  19. package/dist/esm/components/autocomplete/use-autocomplete.js.map +1 -1
  20. package/dist/esm/components/calendar/use-calendar.js.map +1 -1
  21. package/dist/esm/components/date-picker/use-date-picker.js +2 -8
  22. package/dist/esm/components/date-picker/use-date-picker.js.map +1 -1
  23. package/dist/esm/components/indicator/indicator.js.map +1 -1
  24. package/dist/esm/components/number-input/use-number-input.js.map +1 -1
  25. package/dist/esm/components/slider/use-slider.js.map +1 -1
  26. package/dist/esm/components/textarea/use-autosize.js.map +1 -1
  27. package/dist/esm/components/toggle/use-toggle-group.js +1 -1
  28. package/dist/esm/components/toggle/use-toggle-group.js.map +1 -1
  29. package/dist/esm/core/css/calc.js.map +1 -1
  30. package/dist/esm/core/css/css.js.map +1 -1
  31. package/dist/esm/core/css/gradient.js.map +1 -1
  32. package/dist/esm/core/css/grid.js.map +1 -1
  33. package/dist/esm/hooks/use-counter/index.js.map +1 -1
  34. package/dist/esm/utils/store.js.map +1 -1
  35. package/dist/types/components/accordion/accordion.d.ts +2 -2
  36. package/dist/types/components/accordion/use-accordion.d.ts +11 -11
  37. package/dist/types/components/airy/airy.d.ts +2 -2
  38. package/dist/types/components/alert/alert.d.ts +2 -2
  39. package/dist/types/components/alert/alert.style.d.ts +1 -1
  40. package/dist/types/components/alpha-slider/alpha-slider.d.ts +2 -2
  41. package/dist/types/components/aspect-ratio/aspect-ratio.d.ts +2 -2
  42. package/dist/types/components/autocomplete/autocomplete.d.ts +2 -2
  43. package/dist/types/components/autocomplete/autocomplete.style.d.ts +1 -1
  44. package/dist/types/components/autocomplete/use-autocomplete.d.ts +5 -5
  45. package/dist/types/components/avatar/avatar.d.ts +5 -5
  46. package/dist/types/components/avatar/avatar.style.d.ts +1 -1
  47. package/dist/types/components/avatar/use-avatar-group.d.ts +2 -2
  48. package/dist/types/components/badge/badge.d.ts +2 -2
  49. package/dist/types/components/bleed/bleed.d.ts +2 -2
  50. package/dist/types/components/blockquote/blockquote.d.ts +2 -2
  51. package/dist/types/components/breadcrumb/breadcrumb.d.ts +2 -2
  52. package/dist/types/components/breadcrumb/use-breadcrumb.d.ts +2 -2
  53. package/dist/types/components/button/button.d.ts +2 -2
  54. package/dist/types/components/button/icon-button.d.ts +2 -2
  55. package/dist/types/components/calendar/calendar.d.ts +2 -2
  56. package/dist/types/components/calendar/calendar.style.d.ts +2 -2
  57. package/dist/types/components/calendar/use-calendar.d.ts +8 -8
  58. package/dist/types/components/card/card.d.ts +2 -2
  59. package/dist/types/components/carousel/carousel.d.ts +2 -2
  60. package/dist/types/components/carousel/carousel.style.d.ts +2 -2
  61. package/dist/types/components/carousel/use-carousel.d.ts +3 -3
  62. package/dist/types/components/center/center.d.ts +2 -2
  63. package/dist/types/components/chart/chart.d.ts +5 -5
  64. package/dist/types/components/chart/radar-chart.d.ts +2 -2
  65. package/dist/types/components/chart/radial-chart.d.ts +2 -2
  66. package/dist/types/components/chart/use-chart.d.ts +2 -2
  67. package/dist/types/components/checkbox/checkbox.d.ts +4 -4
  68. package/dist/types/components/checkbox/use-checkbox-group.d.ts +2 -2
  69. package/dist/types/components/checkbox-card/checkbox-card.d.ts +5 -5
  70. package/dist/types/components/checkbox-card/checkbox-card.style.d.ts +1 -1
  71. package/dist/types/components/circle-progress/circle-progress.d.ts +2 -2
  72. package/dist/types/components/close-button/close-button.d.ts +2 -2
  73. package/dist/types/components/code/code.d.ts +2 -2
  74. package/dist/types/components/collapse/collapse.d.ts +2 -2
  75. package/dist/types/components/color-picker/color-picker.d.ts +2 -2
  76. package/dist/types/components/color-picker/color-picker.style.d.ts +1 -1
  77. package/dist/types/components/color-picker/use-color-picker.d.ts +2 -2
  78. package/dist/types/components/color-selector/color-selector.d.ts +2 -2
  79. package/dist/types/components/color-selector/color-selector.style.d.ts +2 -2
  80. package/dist/types/components/color-selector/use-color-selector.d.ts +3 -3
  81. package/dist/types/components/color-swatch/color-swatch.d.ts +2 -2
  82. package/dist/types/components/container/container.d.ts +2 -2
  83. package/dist/types/components/data-list/data-list.d.ts +2 -2
  84. package/dist/types/components/data-list/data-list.style.d.ts +1 -1
  85. package/dist/types/components/date-picker/date-picker.d.ts +2 -2
  86. package/dist/types/components/date-picker/use-date-picker.d.ts +4 -4
  87. package/dist/types/components/drawer/drawer.d.ts +2 -2
  88. package/dist/types/components/drawer/drawer.style.d.ts +2 -2
  89. package/dist/types/components/dropzone/dropzone.d.ts +5 -5
  90. package/dist/types/components/dropzone/dropzone.style.d.ts +1 -1
  91. package/dist/types/components/editable/editable.d.ts +4 -4
  92. package/dist/types/components/editable/use-editable.d.ts +2 -2
  93. package/dist/types/components/em/em.d.ts +2 -2
  94. package/dist/types/components/empty-state/empty-state.d.ts +2 -2
  95. package/dist/types/components/empty-state/empty-state.style.d.ts +2 -2
  96. package/dist/types/components/fade/fade.d.ts +2 -2
  97. package/dist/types/components/field/field.d.ts +3 -3
  98. package/dist/types/components/field/use-field-props.d.ts +4 -4
  99. package/dist/types/components/fieldset/fieldset.d.ts +3 -3
  100. package/dist/types/components/file-button/file-button.d.ts +2 -2
  101. package/dist/types/components/file-button/use-file-button.d.ts +18 -18
  102. package/dist/types/components/file-input/file-input.d.ts +2 -2
  103. package/dist/types/components/file-input/file-input.style.d.ts +1 -1
  104. package/dist/types/components/file-input/use-file-input.d.ts +15 -15
  105. package/dist/types/components/flex/flex.d.ts +2 -2
  106. package/dist/types/components/flip/flip.d.ts +4 -4
  107. package/dist/types/components/float/float.d.ts +2 -2
  108. package/dist/types/components/form/form.d.ts +3 -3
  109. package/dist/types/components/form/form.style.d.ts +1 -1
  110. package/dist/types/components/format/format-byte.d.ts +4 -4
  111. package/dist/types/components/format/format-date-time.d.ts +4 -4
  112. package/dist/types/components/format/format-number.d.ts +2 -2
  113. package/dist/types/components/grid/grid-item.d.ts +2 -2
  114. package/dist/types/components/grid/grid.d.ts +2 -2
  115. package/dist/types/components/group/group.d.ts +2 -2
  116. package/dist/types/components/group/use-group.d.ts +2 -2
  117. package/dist/types/components/heading/heading.d.ts +2 -2
  118. package/dist/types/components/hue-slider/hue-slider.d.ts +3 -3
  119. package/dist/types/components/icon/icon.d.ts +5 -5
  120. package/dist/types/components/image/image.d.ts +2 -2
  121. package/dist/types/components/indicator/indicator.d.ts +4 -4
  122. package/dist/types/components/infinite-scroll-area/infinite-scroll-area.d.ts +2 -2
  123. package/dist/types/components/input/input-addon.d.ts +2 -2
  124. package/dist/types/components/input/input-element.d.ts +2 -2
  125. package/dist/types/components/input/input.d.ts +2 -2
  126. package/dist/types/components/kbd/kbd.d.ts +2 -2
  127. package/dist/types/components/link/link.d.ts +2 -2
  128. package/dist/types/components/link-box/link-box.d.ts +2 -2
  129. package/dist/types/components/list/list.d.ts +2 -2
  130. package/dist/types/components/loading/loading-provider.d.ts +2 -2
  131. package/dist/types/components/loading/loading.d.ts +3 -3
  132. package/dist/types/components/mark/mark.d.ts +2 -2
  133. package/dist/types/components/menu/menu.d.ts +2 -2
  134. package/dist/types/components/menu/menu.style.d.ts +2 -2
  135. package/dist/types/components/menu/use-menu.d.ts +11 -11
  136. package/dist/types/components/modal/modal.d.ts +2 -2
  137. package/dist/types/components/modal/modal.style.d.ts +2 -2
  138. package/dist/types/components/native-accordion/native-accordion.d.ts +2 -2
  139. package/dist/types/components/native-accordion/use-native-accordion.d.ts +2 -2
  140. package/dist/types/components/native-popover/native-popover.d.ts +2 -2
  141. package/dist/types/components/native-select/native-select.d.ts +2 -2
  142. package/dist/types/components/native-table/native-table.d.ts +4 -4
  143. package/dist/types/components/notice/notice.style.d.ts +1 -1
  144. package/dist/types/components/number-input/number-input.d.ts +2 -2
  145. package/dist/types/components/pagination/pagination.d.ts +2 -2
  146. package/dist/types/components/pagination/use-pagination.d.ts +2 -2
  147. package/dist/types/components/password-input/password-input.d.ts +2 -2
  148. package/dist/types/components/password-input/strength-meter.d.ts +2 -2
  149. package/dist/types/components/password-input/use-password-input.d.ts +2 -2
  150. package/dist/types/components/pin-input/pin-input.d.ts +2 -2
  151. package/dist/types/components/pin-input/use-pin-input.d.ts +7 -7
  152. package/dist/types/components/popover/popover.d.ts +2 -2
  153. package/dist/types/components/progress/progress.d.ts +2 -2
  154. package/dist/types/components/progress/use-progress.d.ts +706 -706
  155. package/dist/types/components/qr-code/qr-code.d.ts +2 -2
  156. package/dist/types/components/radio/radio.d.ts +4 -4
  157. package/dist/types/components/radio/use-radio-group.d.ts +2 -2
  158. package/dist/types/components/radio-card/radio-card.d.ts +5 -5
  159. package/dist/types/components/radio-card/radio-card.style.d.ts +1 -1
  160. package/dist/types/components/rating/use-rating.d.ts +7 -7
  161. package/dist/types/components/reorder/reorder.d.ts +2 -2
  162. package/dist/types/components/reorder/use-reorder.d.ts +3 -3
  163. package/dist/types/components/resizable/resizable.d.ts +2 -2
  164. package/dist/types/components/resizable/use-resizable.d.ts +2 -2
  165. package/dist/types/components/ripple/ripple.d.ts +2 -2
  166. package/dist/types/components/ripple/use-ripple.d.ts +2 -2
  167. package/dist/types/components/rotate/rotate.d.ts +2 -2
  168. package/dist/types/components/saturation-slider/saturation-slider.d.ts +2 -2
  169. package/dist/types/components/saturation-slider/use-saturation-slider.d.ts +2 -2
  170. package/dist/types/components/scroll-area/scroll-area.d.ts +2 -2
  171. package/dist/types/components/segmented-control/segmented-control.d.ts +2 -2
  172. package/dist/types/components/segmented-control/segmented-control.style.d.ts +2 -2
  173. package/dist/types/components/segmented-control/use-segmented-control.d.ts +9 -9
  174. package/dist/types/components/select/select.d.ts +2 -2
  175. package/dist/types/components/select/select.style.d.ts +1 -1
  176. package/dist/types/components/select/use-select.d.ts +4 -4
  177. package/dist/types/components/separator/separator.d.ts +2 -2
  178. package/dist/types/components/simple-grid/simple-grid.d.ts +2 -2
  179. package/dist/types/components/skeleton/skeleton.d.ts +2 -2
  180. package/dist/types/components/slide/slide.d.ts +2 -2
  181. package/dist/types/components/slide-fade/slide-fade.d.ts +2 -2
  182. package/dist/types/components/slider/slider.d.ts +2 -2
  183. package/dist/types/components/slider/use-slider.d.ts +2 -2
  184. package/dist/types/components/stack/h-stack.d.ts +2 -2
  185. package/dist/types/components/stack/stack.d.ts +2 -2
  186. package/dist/types/components/stack/v-stack.d.ts +2 -2
  187. package/dist/types/components/stack/z-stack.d.ts +2 -2
  188. package/dist/types/components/stat/stat.d.ts +2 -2
  189. package/dist/types/components/status/status.d.ts +2 -2
  190. package/dist/types/components/steps/steps.d.ts +2 -2
  191. package/dist/types/components/steps/steps.style.d.ts +1 -1
  192. package/dist/types/components/steps/use-steps.d.ts +10 -10
  193. package/dist/types/components/switch/switch.d.ts +2 -2
  194. package/dist/types/components/table/table.d.ts +2 -2
  195. package/dist/types/components/tabs/tabs.d.ts +2 -2
  196. package/dist/types/components/tabs/use-tabs.d.ts +16 -16
  197. package/dist/types/components/tag/tag.d.ts +2 -2
  198. package/dist/types/components/tag/tag.style.d.ts +1 -1
  199. package/dist/types/components/text/text.d.ts +2 -2
  200. package/dist/types/components/textarea/textarea.d.ts +2 -2
  201. package/dist/types/components/textarea/use-autosize.d.ts +2 -2
  202. package/dist/types/components/timeline/timeline.d.ts +4 -4
  203. package/dist/types/components/timeline/timeline.style.d.ts +2 -2
  204. package/dist/types/components/toggle/toggle.d.ts +5 -5
  205. package/dist/types/components/toggle/use-toggle-group.d.ts +2 -2
  206. package/dist/types/components/toggle/use-toggle.d.ts +2 -2
  207. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  208. package/dist/types/components/visually-hidden/visually-hidden.d.ts +2 -2
  209. package/dist/types/components/wrap/wrap.d.ts +2 -2
  210. package/dist/types/core/components/create-component.d.ts +7 -8
  211. package/dist/types/core/components/use-component-style.d.ts +0 -1
  212. package/dist/types/core/components/utils.d.ts +0 -1
  213. package/dist/types/core/constant.d.ts +0 -1
  214. package/dist/types/core/css/calc.d.ts +0 -1
  215. package/dist/types/core/css/config.d.ts +0 -1
  216. package/dist/types/core/css/css.d.ts +0 -1
  217. package/dist/types/core/css/index.types.d.ts +0 -1
  218. package/dist/types/core/css/styles.d.ts +0 -1
  219. package/dist/types/core/css/token.d.ts +0 -1
  220. package/dist/types/core/css/use-css.d.ts +0 -1
  221. package/dist/types/core/css/utils.d.ts +0 -1
  222. package/dist/types/core/generated-theme-tokens.types.d.ts +0 -1
  223. package/dist/types/core/index.d.ts +0 -1
  224. package/dist/types/core/system/color-mode-provider.d.ts +2 -2
  225. package/dist/types/core/system/storage-script.d.ts +3 -3
  226. package/dist/types/core/system/styled.d.ts +2 -2
  227. package/dist/types/core/system/system-provider.d.ts +2 -2
  228. package/dist/types/core/system/var.d.ts +0 -1
  229. package/dist/types/hooks/use-clickable/index.d.ts +7 -7
  230. package/dist/types/hooks/use-clipboard/index.d.ts +2 -2
  231. package/dist/types/hooks/use-combobox/index.d.ts +12 -12
  232. package/dist/types/hooks/use-counter/index.d.ts +2 -2
  233. package/dist/types/hooks/use-descendants/index.d.ts +2 -2
  234. package/dist/types/hooks/use-field-sizing/index.d.ts +2 -2
  235. package/dist/types/hooks/use-hover/index.d.ts +2 -2
  236. package/dist/types/hooks/use-popper/index.d.ts +2 -2
  237. package/dist/types/hooks/use-resize-observer/index.d.ts +3 -3
  238. package/dist/types/providers/i18n-provider/i18n-provider.d.ts +3 -3
  239. package/dist/types/providers/ui-provider/ui-provider.d.ts +2 -2
  240. package/dist/types/utils/children.d.ts +2 -2
  241. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"use-date-picker.cjs","names":["defaultRender: DatePickerRender","DEFAULT_MAX_DATE","DEFAULT_MIN_DATE","useI18n","useFieldProps","useDateTimeFormat","inputFormat","calendarFormat","useCalendarProps","useControllableState","value","getAdjustedMonth","isBeforeDate","isAfterDate","useCombobox","onClear","updateMaybeDateValue","startPlaceholder","inputValue","minDate","maxDate","isComposing","ev","getRootProps: PropGetter","props","getFieldProps: PropGetter","mergeRefs","ref","getInputProps: PropGetter<\"input\", { align?: InputAlign }>","inputProps: HTMLProps<\"input\">","visuallyHiddenAttributes","getContentProps: PropGetter","getCalendarProps: PropGetter<UseCalendarProps<Multiple, Range>>","getIconProps: PropGetter","runKeyAction"],"sources":["../../../../src/components/date-picker/use-date-picker.tsx"],"sourcesContent":["\"use client\"\n\nimport type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from \"react\"\nimport type { HTMLProps, HTMLRefAttributes, PropGetter } from \"../../core\"\nimport type { UseComboboxProps } from \"../../hooks/use-combobox\"\nimport type { Dict } from \"../../utils\"\nimport type {\n CalendarFormat,\n MaybeDateValue,\n UseCalendarProps,\n} from \"../calendar\"\nimport type { FieldProps } from \"../field\"\nimport dayjs from \"dayjs\"\nimport {\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport { useCombobox } from \"../../hooks/use-combobox\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n ariaAttr,\n cast,\n contains,\n dataAttr,\n focusTransfer,\n handlerAll,\n isArray,\n isComposing,\n isDate,\n isNumber,\n isObject,\n mergeRefs,\n runIfFn,\n runKeyAction,\n useUpdateEffect,\n visuallyHiddenAttributes,\n} from \"../../utils\"\nimport {\n DEFAULT_MAX_DATE,\n DEFAULT_MIN_DATE,\n getAdjustedMonth,\n isAfterDate,\n isBeforeDate,\n updateMaybeDateValue,\n useCalendarProps,\n} from \"../calendar\"\nimport { useFieldProps } from \"../field\"\nimport { useDateTimeFormat } from \"../format\"\n\nexport interface DatePickerFormat extends CalendarFormat {\n input?: Intl.DateTimeFormatOptions | null\n}\n\ntype InputAlign = \"end\" | \"start\"\ntype MaybeInputValue<Range extends boolean = false> = Range extends true\n ? { end?: string; start?: string }\n : string | undefined\n\ninterface DatePickerRenderProps {\n count: number\n date: Date\n focused: boolean\n index: number\n separator: string\n value: string\n onClear: () => void\n max?: number\n}\n\nexport interface DatePickerRender {\n (props: DatePickerRenderProps): ReactNode\n}\n\nconst defaultRender: DatePickerRender = ({\n count,\n focused,\n index,\n max,\n separator,\n value,\n}) => {\n const last = count - 1 === index\n\n return (\n <span style={{ marginInlineEnd: \"var(--gap)\" }}>\n {value}\n {((!isNumber(max) || count < max) && focused) || !last ? separator : null}\n </span>\n )\n}\n\nexport interface UseDatePickerProps<\n Multiple extends boolean = false,\n Range extends boolean = false,\n>\n extends\n Omit<UseCalendarProps<Multiple, Range>, \"format\" | \"ref\">,\n Omit<\n UseComboboxProps,\n \"defaultValue\" | \"initialFocusValue\" | \"onChange\" | \"ref\" | \"value\"\n >,\n HTMLRefAttributes<\"input\">,\n FieldProps {\n /**\n * If `true`, allows input.\n *\n * @default true\n */\n allowInput?: boolean\n /**\n * If `true`, allows input of dates beyond the `minDate` and `maxDate` restrictions.\n *\n * @default true\n */\n allowInputBeyond?: boolean\n /**\n * If `true`, the date picker will be closed when the input value changes.\n *\n * @default false\n */\n closeOnChange?: ((ev: ChangeEvent<HTMLInputElement>) => boolean) | boolean\n /**\n * The initial value of the input.\n */\n defaultInputValue?: MaybeInputValue<Range>\n /**\n * If `true`, the input will be focused when the clear icon is clicked.\n *\n * @default true\n */\n focusOnClear?: boolean\n /**\n * The format used for conversion.\n * Check the docs to see the format of possible modifiers you can pass.\n *\n * @see https://day.js.org/docs/en/display/format#list-of-localized-formats\n */\n format?: DatePickerFormat\n /**\n * The `id` attribute of the input element.\n */\n id?: string\n /**\n * The value of the input.\n */\n inputValue?: MaybeInputValue<Range>\n /**\n * The `name` attribute of the input element.\n */\n name?: string\n /**\n * If `true`, the date picker will be opened when the input value changes.\n *\n * @default true\n */\n openOnChange?: ((ev: ChangeEvent<HTMLInputElement>) => boolean) | boolean\n /**\n * If `true`, the date picker will be opened when the input is focused.\n *\n * @default true\n */\n openOnFocus?: boolean\n /**\n * The pattern used to check the input element.\n */\n pattern?: RegExp\n /**\n * The placeholder for date picker.\n */\n placeholder?: string\n /**\n * The visual separator between each value.\n *\n * @default ','\n */\n separator?: string\n /**\n * The callback invoked when input value state changes.\n */\n onInputChange?: (value: MaybeInputValue<Range>) => void\n /**\n * Function that converts the input value to Date type.\n */\n parseDate?: (value: string) => Date | undefined\n /**\n * The function to render the selected date.\n */\n render?: (props: DatePickerRenderProps) => ReactNode\n}\n\nexport const useDatePicker = <\n Multiple extends boolean = false,\n Range extends boolean = false,\n>({\n maxDate = DEFAULT_MAX_DATE,\n minDate = DEFAULT_MIN_DATE,\n ...props\n}: UseDatePickerProps<Multiple, Range> = {}) => {\n if (dayjs(minDate).isAfter(dayjs(maxDate))) maxDate = minDate\n\n const { locale: defaultLocale, t } = useI18n(\"datePicker\")\n const {\n props: {\n id,\n ref,\n name,\n allowInput = true,\n allowInputBeyond = false,\n closeOnChange = false,\n multiple = false,\n closeOnSelect = !multiple,\n defaultInputValue,\n defaultMonth = new Date(),\n range = false,\n defaultValue = (range\n ? { end: undefined, start: undefined }\n : multiple\n ? []\n : undefined) as MaybeDateValue<Multiple, Range>,\n disabled,\n focusOnClear = true,\n format,\n inputValue: inputValueProp,\n locale = defaultLocale,\n max,\n month: monthProp,\n openOnChange = true,\n openOnClick = true,\n openOnFocus = true,\n parseDate,\n pattern,\n placeholder: placeholderProp,\n readOnly,\n render = defaultRender,\n required,\n separator = range ? \"-\" : \",\",\n value: valueProp,\n onChange: onChangeProp,\n onChangeMonth: onChangeMonthProp,\n onInputChange: onInputChangeProp,\n ...computedProps\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const dateTimeFormat = useDateTimeFormat({ locale })\n const { calendarFormat, inputFormat } = useMemo(() => {\n const { input: inputFormat, ...calendarFormat } = format ?? {}\n const defaultInputFormat: Intl.DateTimeFormatOptions = {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n }\n\n return {\n calendarFormat,\n inputFormat:\n inputFormat !== null ? (inputFormat ?? defaultInputFormat) : undefined,\n }\n }, [format])\n const [calendarProps, rest] = useCalendarProps<Multiple, Range>(computedProps)\n const { excludeDate } = calendarProps\n const fieldRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const startInputRef = useRef<HTMLInputElement>(null)\n const endInputRef = useRef<HTMLInputElement>(null)\n const focusByClickRef = useRef<boolean>(false)\n const [focused, setFocused] = useState(false)\n const [value, setValue] = useControllableState({\n defaultValue: defaultValue as MaybeDateValue<Multiple, Range>,\n value: valueProp,\n onChange: onChangeProp,\n })\n const [month, setMonth] = useControllableState({\n defaultValue: () => {\n let value = defaultMonth\n\n if (dayjs(minDate).isAfter(dayjs(defaultMonth)))\n value = dayjs(minDate).set(\"date\", 1).toDate()\n\n if (valueProp) {\n value = getAdjustedMonth(valueProp, value)\n } else if (defaultValue) {\n value = getAdjustedMonth(defaultValue, value)\n }\n\n return value\n },\n value: monthProp,\n onChange: onChangeMonthProp,\n })\n const stringToDate = useCallback(\n (value: string, start: Date = minDate, end: Date = maxDate) => {\n let date = parseDate?.(value)\n\n if (!date && dayjs(value).isValid()) date = dayjs(value, locale).toDate()\n\n if (date == null) return undefined\n if (excludeDate?.(date)) return undefined\n\n if (!allowInputBeyond) {\n if (isBeforeDate(date, start)) date = start\n if (isAfterDate(date, end)) date = end\n }\n\n return date\n },\n [allowInputBeyond, excludeDate, locale, maxDate, minDate, parseDate],\n )\n const dateToString = useCallback(\n (date?: Date) => {\n if (date == null) return \"\"\n\n return dateTimeFormat(date, inputFormat)\n },\n [dateTimeFormat, inputFormat],\n )\n const [inputValue, setInputValue] = useControllableState({\n defaultValue: () => {\n if (defaultInputValue) {\n if (isObject(defaultInputValue)) {\n if (dayjs(defaultInputValue.start).isValid())\n defaultInputValue.start = dateTimeFormat(\n dayjs(defaultInputValue.start).toDate(),\n inputFormat,\n )\n\n if (dayjs(defaultInputValue.end).isValid())\n defaultInputValue.end = dateTimeFormat(\n dayjs(defaultInputValue.end).toDate(),\n inputFormat,\n )\n\n return defaultInputValue\n } else {\n if (dayjs(defaultInputValue).isValid()) {\n return dateTimeFormat(\n dayjs(defaultInputValue).toDate(),\n inputFormat,\n ) as MaybeInputValue<Range>\n } else {\n return defaultInputValue as MaybeInputValue<Range>\n }\n }\n } else if (isDate(value)) {\n return dateToString(value) as MaybeInputValue<Range>\n } else if (isObject(value) && !isArray(value)) {\n return {\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>\n } else {\n return \"\" as MaybeInputValue<Range>\n }\n },\n value: inputValueProp,\n onChange: onInputChangeProp,\n })\n const {\n interactive,\n open,\n getContentProps: getComboboxContentProps,\n getTriggerProps,\n popoverProps,\n onClose,\n onOpen,\n } = useCombobox({\n disabled,\n matchWidth: false,\n openOnClick: false,\n openOnEnter: !allowInput,\n openOnSpace: !allowInput,\n placement: \"end-start\",\n readOnly,\n transferFocus: false,\n ...ariaProps,\n ...dataProps,\n ...eventProps,\n ...rest,\n })\n const children = useMemo<ReactNode>(() => {\n if (!isArray(value)) return null\n\n const count = value.length\n\n return value.map((date, index) => {\n const value = dateToString(date)\n\n const onClear = (ev?: MouseEvent<HTMLElement>) => {\n ev?.preventDefault()\n ev?.stopPropagation()\n\n setValue(\n (prev) =>\n updateMaybeDateValue(date, max)(prev) as MaybeDateValue<\n Multiple,\n Range\n >,\n )\n }\n\n const component = render({\n count,\n date,\n focused,\n index,\n max,\n separator,\n value,\n onClear,\n })\n\n if (isValidElement<Dict>(component)) {\n return cloneElement(component, { ...component.props, key: index })\n } else {\n return component\n }\n })\n }, [dateToString, focused, max, render, separator, setValue, value])\n const { endPlaceholder, startPlaceholder } = useMemo(() => {\n if (range) {\n const startPlaceholder =\n placeholderProp ?? dateTimeFormat(new Date(), inputFormat)\n const endPlaceholder =\n placeholderProp ??\n dateTimeFormat(dayjs().add(1, \"day\").toDate(), inputFormat)\n\n return { endPlaceholder, startPlaceholder }\n } else {\n const placeholder =\n placeholderProp ?? dateTimeFormat(new Date(), inputFormat)\n\n return { endPlaceholder: placeholder, startPlaceholder: placeholder }\n }\n }, [dateTimeFormat, inputFormat, placeholderProp, range])\n\n const onChange = useCallback(\n (value: MaybeDateValue<Multiple, Range>) => {\n setValue(value)\n\n if (isArray(value)) {\n setInputValue(\"\" as MaybeInputValue<Range>)\n } else if (isObject(value) && !isDate(value)) {\n setInputValue({\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>)\n } else {\n setInputValue(dateToString(value) as MaybeInputValue<Range>)\n }\n\n if (!closeOnSelect) return\n\n if (isObject(value) && !isArray(value) && !isDate(value)) {\n if (value.end && value.start) onClose()\n } else {\n onClose()\n }\n },\n [setValue, closeOnSelect, setInputValue, dateToString, onClose],\n )\n\n const onInputChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (!allowInput) return\n if (isArray(value) && value.length === max) return\n\n if (runIfFn(closeOnChange, ev)) {\n onClose()\n } else if (runIfFn(openOnChange, ev)) {\n onOpen()\n }\n\n let inputValue = ev.target.value\n\n if (pattern) inputValue = inputValue.replace(pattern, \"\")\n\n if (isArray(value)) {\n const date = stringToDate(inputValue)\n\n setInputValue(inputValue as MaybeInputValue<Range>)\n\n if (date) setMonth(dayjs(date).set(\"date\", 1).toDate())\n } else if (isObject(value) && !isDate(value)) {\n const align = contains(endInputRef.current, ev.target) ? \"end\" : \"start\"\n const minDate =\n value.start && align === \"end\"\n ? dayjs(value.start).add(1, \"day\").toDate()\n : undefined\n const maxDate =\n value.end && align === \"start\"\n ? dayjs(value.end).subtract(1, \"day\").toDate()\n : undefined\n const date = stringToDate(inputValue, minDate, maxDate)\n\n setInputValue((prev) =>\n isObject(prev)\n ? ({\n ...(prev as MaybeInputValue<true>),\n [align]: inputValue,\n } as MaybeInputValue<Range>)\n : prev,\n )\n setValue((prev) =>\n isObject(prev) && !isDate(prev)\n ? ({ ...prev, [align]: date } as MaybeDateValue<Multiple, Range>)\n : prev,\n )\n } else {\n const date = stringToDate(inputValue)\n\n setInputValue(inputValue as MaybeInputValue<Range>)\n setValue(date as MaybeDateValue<Multiple, Range>)\n }\n },\n [\n allowInput,\n closeOnChange,\n max,\n onClose,\n onOpen,\n openOnChange,\n pattern,\n setInputValue,\n setMonth,\n setValue,\n stringToDate,\n value,\n ],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLInputElement>) => {\n if (disabled || isComposing(ev)) return\n\n const inputValue = cast<HTMLInputElement>(ev.target).value\n\n runKeyAction(\n ev,\n {\n Backspace: (ev) => {\n if (!value || isDate(value)) return\n if (inputValue.length) return\n\n if (isArray(value)) {\n ev.preventDefault()\n\n setValue((prev) =>\n isArray(prev)\n ? (prev.slice(0, -1) as MaybeDateValue<Multiple, Range>)\n : prev,\n )\n } else if (contains(endInputRef.current, ev.target)) {\n ev.preventDefault()\n\n setInputValue({ end: \"\", start: \"\" } as MaybeInputValue<Range>)\n setValue({ end: undefined, start: undefined } as MaybeDateValue<\n Multiple,\n Range\n >)\n\n startInputRef.current?.focus()\n }\n },\n Enter: (ev) => {\n if (!open || !inputValue.length) return\n\n if (isDate(value) || isArray(value)) {\n const date = stringToDate(inputValue)\n\n if (!date) return\n\n ev.preventDefault()\n\n if (isArray(value)) {\n setInputValue(\"\" as MaybeInputValue<Range>)\n } else {\n setInputValue(dateToString(date) as MaybeInputValue<Range>)\n }\n\n setValue(\n (prev) =>\n updateMaybeDateValue(date, max)(prev) as MaybeDateValue<\n Multiple,\n Range\n >,\n )\n } else if (isObject(value)) {\n const align = contains(endInputRef.current, ev.target)\n ? \"end\"\n : \"start\"\n const minDate =\n value.start && align === \"end\"\n ? dayjs(value.start).add(1, \"day\").toDate()\n : undefined\n const maxDate =\n value.end && align === \"start\"\n ? dayjs(value.end).subtract(1, \"day\").toDate()\n : undefined\n const date = stringToDate(inputValue, minDate, maxDate)\n\n if (!date) return\n\n ev.preventDefault()\n\n setInputValue((prev) =>\n isObject(prev)\n ? ({\n ...(prev as MaybeInputValue<true>),\n [align]: dateToString(date),\n } as MaybeInputValue<Range>)\n : prev,\n )\n setValue((prev) =>\n isObject(prev) && !isDate(prev)\n ? ({ ...prev, [align]: date } as MaybeDateValue<\n Multiple,\n Range\n >)\n : prev,\n )\n\n if (align === \"start\") endInputRef.current?.focus()\n }\n },\n },\n { preventDefault: false },\n )\n },\n [\n dateToString,\n disabled,\n max,\n open,\n setInputValue,\n setValue,\n stringToDate,\n value,\n ],\n )\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!interactive) return\n\n focusByClickRef.current = true\n\n if (allowInput) {\n if (isObject(value) && !isArray(value) && !isDate(value)) {\n if (contains(startInputRef.current, ev.target)) return\n if (contains(endInputRef.current, ev.target)) return\n\n const { end, start } = value\n\n if ((!start && !end) || !!end) {\n startInputRef.current?.focus()\n } else {\n endInputRef.current?.focus()\n }\n } else {\n startInputRef.current?.focus()\n }\n }\n\n if (openOnClick) onOpen()\n },\n [allowInput, interactive, onOpen, openOnClick, value],\n )\n\n const onMouseDown = useCallback(\n (ev: MouseEvent<HTMLDivElement | HTMLInputElement>) => {\n if (!openOnFocus) return\n\n ev.preventDefault()\n ev.stopPropagation()\n },\n [openOnFocus],\n )\n\n const onFieldFocus = useCallback(() => {\n if (allowInput) return\n\n if (openOnFocus) onOpen()\n\n focusByClickRef.current = false\n }, [allowInput, onOpen, openOnFocus])\n\n const onInputFocus = useCallback(\n (ev: FocusEvent<HTMLInputElement>) => {\n ev.preventDefault()\n ev.stopPropagation()\n\n setFocused(true)\n\n if (openOnFocus && !focusByClickRef.current) onOpen()\n\n focusByClickRef.current = false\n },\n [onOpen, openOnFocus],\n )\n\n const onBlur = useCallback(\n (ev: FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n\n if (\n contains(fieldRef.current, ev.relatedTarget) ||\n contains(contentRef.current, ev.relatedTarget)\n ) {\n ev.preventDefault()\n } else {\n if (isArray(value)) {\n setInputValue(\"\" as MaybeInputValue<Range>)\n } else if (isObject(value) && !isDate(value)) {\n setInputValue((prev) =>\n isObject(prev)\n ? ({\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>)\n : prev,\n )\n } else {\n setInputValue(dateToString(value) as MaybeInputValue<Range>)\n }\n }\n },\n [dateToString, setInputValue, value],\n )\n\n const onClear = useCallback(() => {\n if (!interactive) return\n\n setValue((prev) => {\n if (isDate(prev)) {\n return undefined as MaybeDateValue<Multiple, Range>\n } else if (isArray(prev)) {\n return [] as unknown as MaybeDateValue<Multiple, Range>\n } else if (isObject(prev)) {\n return { end: undefined, start: undefined } as MaybeDateValue<\n Multiple,\n Range\n >\n } else {\n return prev\n }\n })\n\n setInputValue(\n (range ? { end: \"\", start: \"\" } : \"\") as MaybeInputValue<Range>,\n )\n\n if (focusOnClear) {\n if (allowInput) {\n startInputRef.current?.focus()\n } else {\n fieldRef.current?.focus()\n }\n }\n }, [allowInput, focusOnClear, interactive, range, setInputValue, setValue])\n\n useEffect(() => {\n if (!open) return\n\n return focusTransfer(\n contentRef.current,\n allowInput ? startInputRef.current : fieldRef.current,\n )\n }, [allowInput, open])\n\n useUpdateEffect(() => {\n setMonth((prev) => getAdjustedMonth(value, prev))\n }, [value, range])\n\n useUpdateEffect(() => {\n if (isArray(valueProp)) return\n\n if (isObject(valueProp) && !isDate(valueProp)) {\n setInputValue({\n end: dateToString(valueProp.end),\n start: dateToString(valueProp.start),\n } as MaybeInputValue<Range>)\n } else {\n setInputValue(dateToString(valueProp) as MaybeInputValue<Range>)\n }\n }, [valueProp])\n\n const getRootProps: PropGetter = useCallback(\n (props) => ({\n \"data-range\": dataAttr(range),\n ...dataProps,\n ...props,\n }),\n [dataProps, range],\n )\n\n const getFieldProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) =>\n getTriggerProps({\n ref: mergeRefs(ref, fieldRef),\n \"aria-haspopup\": \"dialog\",\n tabIndex: !allowInput ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, onClick),\n onFocus: handlerAll(props.onFocus, onFieldFocus),\n onMouseDown: handlerAll(props.onMouseDown, onMouseDown),\n }),\n\n [allowInput, getTriggerProps, onClick, onFieldFocus, onMouseDown],\n )\n\n const getInputProps: PropGetter<\"input\", { align?: InputAlign }> =\n useCallback(\n ({ align = \"start\", ...props } = {}) => {\n const inputProps: HTMLProps<\"input\"> = {\n style: {\n ...(!allowInput ? { pointerEvents: \"none\" } : {}),\n ...props.style,\n },\n autoComplete: \"off\",\n disabled,\n readOnly,\n required,\n tabIndex: allowInput ? 0 : -1,\n ...dataProps,\n ...props,\n onBlur: handlerAll(props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onInputChange),\n onFocus: handlerAll(props.onFocus, onInputFocus),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n onMouseDown: handlerAll(props.onMouseDown, onMouseDown),\n }\n\n if (isObject(inputValue)) {\n if (align === \"start\") {\n inputProps.ref = mergeRefs(props.ref, ref, startInputRef)\n inputProps.value = inputValue.start\n inputProps.placeholder = startPlaceholder\n } else {\n inputProps.ref = mergeRefs(props.ref, ref, endInputRef)\n inputProps.value = inputValue.end\n inputProps.placeholder = endPlaceholder\n }\n\n if (!inputValue.start && align === \"start\") {\n inputProps.id = id\n inputProps.name = name\n }\n\n if (!!inputValue.start && align === \"end\") {\n inputProps.id = id\n inputProps.name = name\n }\n } else {\n inputProps.ref = mergeRefs(props.ref, ref, startInputRef)\n inputProps.value = inputValue\n inputProps.id = id\n inputProps.name = name\n\n if (isArray(value)) {\n inputProps.style = {\n ...(!focused && !!value.length\n ? visuallyHiddenAttributes.style\n : {}),\n ...inputProps.style,\n }\n inputProps.placeholder = !value.length\n ? startPlaceholder\n : undefined\n inputProps[\"data-max\"] = dataAttr(\n isNumber(max) && value.length >= max,\n )\n } else {\n inputProps.placeholder = startPlaceholder\n }\n }\n\n return inputProps\n },\n [\n allowInput,\n dataProps,\n disabled,\n endPlaceholder,\n focused,\n id,\n inputValue,\n max,\n name,\n onBlur,\n onInputFocus,\n onInputChange,\n onKeyDown,\n onMouseDown,\n readOnly,\n ref,\n required,\n startPlaceholder,\n value,\n ],\n )\n\n const getContentProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) =>\n getComboboxContentProps({\n ref: mergeRefs(ref, contentRef),\n role: \"dialog\",\n ...props,\n }),\n [getComboboxContentProps],\n )\n\n const getCalendarProps: PropGetter<UseCalendarProps<Multiple, Range>> =\n useCallback(\n (props) =>\n ({\n disabled: !interactive,\n format: calendarFormat,\n locale,\n max,\n maxDate,\n minDate,\n month,\n multiple,\n range,\n value,\n onChange,\n onChangeMonth: setMonth,\n ...calendarProps,\n ...props,\n }) as UseCalendarProps<Multiple, Range>,\n [\n interactive,\n calendarFormat,\n locale,\n max,\n maxDate,\n minDate,\n month,\n multiple,\n range,\n value,\n onChange,\n setMonth,\n calendarProps,\n ],\n )\n\n const getIconProps: PropGetter = useCallback(\n (props) => ({ ...dataProps, ...props }),\n [dataProps],\n )\n\n const getClearIconProps: PropGetter = useCallback(\n (props = {}) =>\n getIconProps({\n \"aria-disabled\": ariaAttr(!interactive),\n \"aria-label\": t(\"Clear value\"),\n role: \"button\",\n tabIndex: interactive ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, onClear),\n onKeyDown: handlerAll(props.onKeyDown, (ev) =>\n runKeyAction(ev, { Enter: onClear, Space: onClear }),\n ),\n }),\n [getIconProps, interactive, onClear, t],\n )\n\n return {\n children,\n dateToString,\n inputValue,\n interactive,\n month,\n open,\n range,\n separator,\n setInputValue,\n setMonth,\n setValue,\n stringToDate,\n value,\n getCalendarProps,\n getClearIconProps,\n getContentProps,\n getFieldProps,\n getIconProps,\n getInputProps,\n getRootProps,\n popoverProps,\n onChange,\n onClose,\n onInputChange,\n onOpen,\n }\n}\n\nexport type UseDatePickerReturn = ReturnType<typeof useDatePicker>\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-date-picker.cjs","names":["defaultRender: DatePickerRender","DEFAULT_MAX_DATE","DEFAULT_MIN_DATE","useI18n","useFieldProps","useDateTimeFormat","inputFormat","calendarFormat","useCalendarProps","useControllableState","value","getAdjustedMonth","isBeforeDate","isAfterDate","useCombobox","onClear","updateMaybeDateValue","startPlaceholder","inputValue","minDate","maxDate","isComposing","ev","getRootProps: PropGetter","props","getFieldProps: PropGetter","mergeRefs","ref","getInputProps: PropGetter<\"input\", { align?: InputAlign }>","inputProps: HTMLProps<\"input\">","visuallyHiddenAttributes","getContentProps: PropGetter","getCalendarProps: PropGetter<UseCalendarProps<Multiple, Range>>","getIconProps: PropGetter","runKeyAction"],"sources":["../../../../src/components/date-picker/use-date-picker.tsx"],"sourcesContent":["\"use client\"\n\nimport type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from \"react\"\nimport type { HTMLProps, HTMLRefAttributes, PropGetter } from \"../../core\"\nimport type { UseComboboxProps } from \"../../hooks/use-combobox\"\nimport type { Dict } from \"../../utils\"\nimport type {\n CalendarFormat,\n MaybeDateValue,\n UseCalendarProps,\n} from \"../calendar\"\nimport type { FieldProps } from \"../field\"\nimport dayjs from \"dayjs\"\nimport {\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport { useCombobox } from \"../../hooks/use-combobox\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n ariaAttr,\n cast,\n contains,\n dataAttr,\n focusTransfer,\n handlerAll,\n isArray,\n isComposing,\n isDate,\n isNumber,\n isObject,\n mergeRefs,\n runIfFn,\n runKeyAction,\n useUpdateEffect,\n visuallyHiddenAttributes,\n} from \"../../utils\"\nimport {\n DEFAULT_MAX_DATE,\n DEFAULT_MIN_DATE,\n getAdjustedMonth,\n isAfterDate,\n isBeforeDate,\n updateMaybeDateValue,\n useCalendarProps,\n} from \"../calendar\"\nimport { useFieldProps } from \"../field\"\nimport { useDateTimeFormat } from \"../format\"\n\nexport interface DatePickerFormat extends CalendarFormat {\n input?: Intl.DateTimeFormatOptions | null\n}\n\ntype InputAlign = \"end\" | \"start\"\ntype MaybeInputValue<Range extends boolean = false> = Range extends true\n ? { end?: string; start?: string }\n : string | undefined\n\ninterface DatePickerRenderProps {\n count: number\n date: Date\n focused: boolean\n index: number\n separator: string\n value: string\n onClear: () => void\n max?: number\n}\n\nexport interface DatePickerRender {\n (props: DatePickerRenderProps): ReactNode\n}\n\nconst defaultRender: DatePickerRender = ({\n count,\n focused,\n index,\n max,\n separator,\n value,\n}) => {\n const last = count - 1 === index\n\n return (\n <span style={{ marginInlineEnd: \"var(--gap)\" }}>\n {value}\n {((!isNumber(max) || count < max) && focused) || !last ? separator : null}\n </span>\n )\n}\n\nexport interface UseDatePickerProps<\n Multiple extends boolean = false,\n Range extends boolean = false,\n>\n extends\n Omit<UseCalendarProps<Multiple, Range>, \"format\" | \"ref\">,\n Omit<\n UseComboboxProps,\n \"defaultValue\" | \"initialFocusValue\" | \"onChange\" | \"ref\" | \"value\"\n >,\n HTMLRefAttributes<\"input\">,\n FieldProps {\n /**\n * If `true`, allows input.\n *\n * @default true\n */\n allowInput?: boolean\n /**\n * If `true`, allows input of dates beyond the `minDate` and `maxDate` restrictions.\n *\n * @default true\n */\n allowInputBeyond?: boolean\n /**\n * If `true`, the date picker will be closed when the input value changes.\n *\n * @default false\n */\n closeOnChange?: ((ev: ChangeEvent<HTMLInputElement>) => boolean) | boolean\n /**\n * The initial value of the input.\n */\n defaultInputValue?: MaybeInputValue<Range>\n /**\n * If `true`, the input will be focused when the clear icon is clicked.\n *\n * @default true\n */\n focusOnClear?: boolean\n /**\n * The format used for conversion.\n * Check the docs to see the format of possible modifiers you can pass.\n *\n * @see https://day.js.org/docs/en/display/format#list-of-localized-formats\n */\n format?: DatePickerFormat\n /**\n * The `id` attribute of the input element.\n */\n id?: string\n /**\n * The value of the input.\n */\n inputValue?: MaybeInputValue<Range>\n /**\n * The `name` attribute of the input element.\n */\n name?: string\n /**\n * If `true`, the date picker will be opened when the input value changes.\n *\n * @default true\n */\n openOnChange?: ((ev: ChangeEvent<HTMLInputElement>) => boolean) | boolean\n /**\n * If `true`, the date picker will be opened when the input is focused.\n *\n * @default true\n */\n openOnFocus?: boolean\n /**\n * The pattern used to check the input element.\n */\n pattern?: RegExp\n /**\n * The placeholder for date picker.\n */\n placeholder?: string\n /**\n * The visual separator between each value.\n *\n * @default ','\n */\n separator?: string\n /**\n * The callback invoked when input value state changes.\n */\n onInputChange?: (value: MaybeInputValue<Range>) => void\n /**\n * Function that converts the input value to Date type.\n */\n parseDate?: (value: string) => Date | undefined\n /**\n * The function to render the selected date.\n */\n render?: (props: DatePickerRenderProps) => ReactNode\n}\n\nexport const useDatePicker = <\n Multiple extends boolean = false,\n Range extends boolean = false,\n>({\n maxDate = DEFAULT_MAX_DATE,\n minDate = DEFAULT_MIN_DATE,\n ...props\n}: UseDatePickerProps<Multiple, Range> = {}) => {\n if (dayjs(minDate).isAfter(dayjs(maxDate))) maxDate = minDate\n\n const { locale: defaultLocale, t } = useI18n(\"datePicker\")\n const {\n props: {\n id,\n ref,\n name,\n allowInput = true,\n allowInputBeyond = false,\n closeOnChange = false,\n multiple = false,\n closeOnSelect = !multiple,\n defaultInputValue,\n defaultMonth = new Date(),\n range = false,\n defaultValue = (range\n ? { end: undefined, start: undefined }\n : multiple\n ? []\n : undefined) as MaybeDateValue<Multiple, Range>,\n disabled,\n focusOnClear = true,\n format,\n inputValue: inputValueProp,\n locale = defaultLocale,\n max,\n month: monthProp,\n openOnChange = true,\n openOnClick = true,\n openOnFocus = true,\n parseDate,\n pattern,\n placeholder: placeholderProp,\n readOnly,\n render = defaultRender,\n required,\n separator = range ? \"-\" : \",\",\n value: valueProp,\n onChange: onChangeProp,\n onChangeMonth: onChangeMonthProp,\n onInputChange: onInputChangeProp,\n ...computedProps\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const dateTimeFormat = useDateTimeFormat({ locale })\n const { calendarFormat, inputFormat } = useMemo(() => {\n const { input: inputFormat, ...calendarFormat } = format ?? {}\n const defaultInputFormat: Intl.DateTimeFormatOptions = {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n }\n\n return {\n calendarFormat,\n inputFormat:\n inputFormat !== null ? (inputFormat ?? defaultInputFormat) : undefined,\n }\n }, [format])\n const [calendarProps, rest] = useCalendarProps<Multiple, Range>(computedProps)\n const { excludeDate } = calendarProps\n const fieldRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const startInputRef = useRef<HTMLInputElement>(null)\n const endInputRef = useRef<HTMLInputElement>(null)\n const focusByClickRef = useRef<boolean>(false)\n const [focused, setFocused] = useState(false)\n const [value, setValue] = useControllableState({\n defaultValue: defaultValue as MaybeDateValue<Multiple, Range>,\n value: valueProp,\n onChange: onChangeProp,\n })\n const [month, setMonth] = useControllableState({\n defaultValue: () => {\n let value = defaultMonth\n\n if (dayjs(minDate).isAfter(dayjs(defaultMonth)))\n value = dayjs(minDate).set(\"date\", 1).toDate()\n\n if (valueProp) {\n value = getAdjustedMonth(valueProp, value)\n } else if (defaultValue) {\n value = getAdjustedMonth(defaultValue, value)\n }\n\n return value\n },\n value: monthProp,\n onChange: onChangeMonthProp,\n })\n const stringToDate = useCallback(\n (value: string, start: Date = minDate, end: Date = maxDate) => {\n let date = parseDate?.(value)\n\n if (!date && dayjs(value).isValid()) date = dayjs(value, locale).toDate()\n\n if (date == null) return undefined\n if (excludeDate?.(date)) return undefined\n\n if (!allowInputBeyond) {\n if (isBeforeDate(date, start)) date = start\n if (isAfterDate(date, end)) date = end\n }\n\n return date\n },\n [allowInputBeyond, excludeDate, locale, maxDate, minDate, parseDate],\n )\n const dateToString = useCallback(\n (date?: Date) => {\n if (date == null) return \"\"\n\n return dateTimeFormat(date, inputFormat)\n },\n [dateTimeFormat, inputFormat],\n )\n const [inputValue, setInputValue] = useControllableState({\n defaultValue: () => {\n if (defaultInputValue) {\n if (isObject(defaultInputValue)) {\n if (dayjs(defaultInputValue.start).isValid())\n defaultInputValue.start = dateTimeFormat(\n dayjs(defaultInputValue.start).toDate(),\n inputFormat,\n )\n\n if (dayjs(defaultInputValue.end).isValid())\n defaultInputValue.end = dateTimeFormat(\n dayjs(defaultInputValue.end).toDate(),\n inputFormat,\n )\n\n return defaultInputValue\n } else {\n if (dayjs(defaultInputValue).isValid()) {\n return dateTimeFormat(\n dayjs(defaultInputValue).toDate(),\n inputFormat,\n ) as MaybeInputValue<Range>\n } else {\n return defaultInputValue as MaybeInputValue<Range>\n }\n }\n } else if (isDate(value)) {\n return dateToString(value) as MaybeInputValue<Range>\n } else if (isObject(value) && !isArray(value)) {\n return {\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>\n } else {\n return \"\" as MaybeInputValue<Range>\n }\n },\n value: inputValueProp,\n onChange: onInputChangeProp,\n })\n const {\n interactive,\n open,\n getContentProps: getComboboxContentProps,\n getTriggerProps,\n popoverProps,\n onClose,\n onOpen,\n } = useCombobox({\n disabled,\n matchWidth: false,\n openOnClick: false,\n openOnEnter: !allowInput,\n openOnSpace: !allowInput,\n placement: \"end-start\",\n readOnly,\n transferFocus: false,\n ...ariaProps,\n ...dataProps,\n ...eventProps,\n ...rest,\n })\n const children = useMemo<ReactNode>(() => {\n if (!isArray(value)) return null\n\n const count = value.length\n\n return value.map((date, index) => {\n const value = dateToString(date)\n\n const onClear = (ev?: MouseEvent<HTMLElement>) => {\n ev?.preventDefault()\n ev?.stopPropagation()\n\n setValue(\n (prev) =>\n updateMaybeDateValue(date, max)(prev) as MaybeDateValue<\n Multiple,\n Range\n >,\n )\n }\n\n const component = render({\n count,\n date,\n focused,\n index,\n max,\n separator,\n value,\n onClear,\n })\n\n if (isValidElement<Dict>(component)) {\n return cloneElement(component, { ...component.props, key: index })\n } else {\n return component\n }\n })\n }, [dateToString, focused, max, render, separator, setValue, value])\n const { endPlaceholder, startPlaceholder } = useMemo(() => {\n if (range) {\n const startPlaceholder =\n placeholderProp ?? dateTimeFormat(new Date(), inputFormat)\n const endPlaceholder =\n placeholderProp ??\n dateTimeFormat(dayjs().add(1, \"day\").toDate(), inputFormat)\n\n return { endPlaceholder, startPlaceholder }\n } else {\n const placeholder =\n placeholderProp ?? dateTimeFormat(new Date(), inputFormat)\n\n return { endPlaceholder: placeholder, startPlaceholder: placeholder }\n }\n }, [dateTimeFormat, inputFormat, placeholderProp, range])\n\n const onChange = useCallback(\n (value: MaybeDateValue<Multiple, Range>) => {\n setValue(value)\n\n if (isArray(value)) {\n setInputValue(\"\" as MaybeInputValue<Range>)\n } else if (isObject(value) && !isDate(value)) {\n setInputValue({\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>)\n } else {\n setInputValue(dateToString(value) as MaybeInputValue<Range>)\n }\n\n if (!closeOnSelect) return\n\n if (isObject(value) && !isArray(value) && !isDate(value)) {\n if (value.end && value.start) onClose()\n } else {\n onClose()\n }\n },\n [setValue, closeOnSelect, setInputValue, dateToString, onClose],\n )\n\n const onInputChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (!allowInput) return\n if (isArray(value) && value.length === max) return\n\n if (runIfFn(closeOnChange, ev)) {\n onClose()\n } else if (runIfFn(openOnChange, ev)) {\n onOpen()\n }\n\n let inputValue = ev.target.value\n\n if (pattern) inputValue = inputValue.replace(pattern, \"\")\n\n if (isArray(value)) {\n const date = stringToDate(inputValue)\n\n setInputValue(inputValue as MaybeInputValue<Range>)\n\n if (date) setMonth(dayjs(date).set(\"date\", 1).toDate())\n } else if (isObject(value) && !isDate(value)) {\n const align = contains(endInputRef.current, ev.target) ? \"end\" : \"start\"\n const minDate =\n value.start && align === \"end\"\n ? dayjs(value.start).add(1, \"day\").toDate()\n : undefined\n const maxDate =\n value.end && align === \"start\"\n ? dayjs(value.end).subtract(1, \"day\").toDate()\n : undefined\n const date = stringToDate(inputValue, minDate, maxDate)\n\n setInputValue((prev) =>\n isObject(prev)\n ? Object.assign({}, prev, { [align]: inputValue })\n : prev,\n )\n setValue((prev) =>\n isObject(prev) && !isDate(prev) ? { ...prev, [align]: date } : prev,\n )\n } else {\n const date = stringToDate(inputValue)\n\n setInputValue(inputValue as MaybeInputValue<Range>)\n setValue(date as MaybeDateValue<Multiple, Range>)\n }\n },\n [\n allowInput,\n closeOnChange,\n max,\n onClose,\n onOpen,\n openOnChange,\n pattern,\n setInputValue,\n setMonth,\n setValue,\n stringToDate,\n value,\n ],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLInputElement>) => {\n if (disabled || isComposing(ev)) return\n\n const inputValue = cast<HTMLInputElement>(ev.target).value\n\n runKeyAction(\n ev,\n {\n Backspace: (ev) => {\n if (!value || isDate(value)) return\n if (inputValue.length) return\n\n if (isArray(value)) {\n ev.preventDefault()\n\n setValue((prev) =>\n isArray(prev)\n ? (prev.slice(0, -1) as MaybeDateValue<Multiple, Range>)\n : prev,\n )\n } else if (contains(endInputRef.current, ev.target)) {\n ev.preventDefault()\n\n setInputValue({ end: \"\", start: \"\" } as MaybeInputValue<Range>)\n setValue({ end: undefined, start: undefined } as MaybeDateValue<\n Multiple,\n Range\n >)\n\n startInputRef.current?.focus()\n }\n },\n Enter: (ev) => {\n if (!open || !inputValue.length) return\n\n if (isDate(value) || isArray(value)) {\n const date = stringToDate(inputValue)\n\n if (!date) return\n\n ev.preventDefault()\n\n if (isArray(value)) {\n setInputValue(\"\" as MaybeInputValue<Range>)\n } else {\n setInputValue(dateToString(date) as MaybeInputValue<Range>)\n }\n\n setValue(\n (prev) =>\n updateMaybeDateValue(date, max)(prev) as MaybeDateValue<\n Multiple,\n Range\n >,\n )\n } else if (isObject(value)) {\n const align = contains(endInputRef.current, ev.target)\n ? \"end\"\n : \"start\"\n const minDate =\n value.start && align === \"end\"\n ? dayjs(value.start).add(1, \"day\").toDate()\n : undefined\n const maxDate =\n value.end && align === \"start\"\n ? dayjs(value.end).subtract(1, \"day\").toDate()\n : undefined\n const date = stringToDate(inputValue, minDate, maxDate)\n\n if (!date) return\n\n ev.preventDefault()\n\n setInputValue((prev) =>\n isObject(prev)\n ? Object.assign({}, prev, { [align]: dateToString(date) })\n : prev,\n )\n setValue((prev) =>\n isObject(prev) && !isDate(prev)\n ? { ...prev, [align]: date }\n : prev,\n )\n\n if (align === \"start\") endInputRef.current?.focus()\n }\n },\n },\n { preventDefault: false },\n )\n },\n [\n dateToString,\n disabled,\n max,\n open,\n setInputValue,\n setValue,\n stringToDate,\n value,\n ],\n )\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!interactive) return\n\n focusByClickRef.current = true\n\n if (allowInput) {\n if (isObject(value) && !isArray(value) && !isDate(value)) {\n if (contains(startInputRef.current, ev.target)) return\n if (contains(endInputRef.current, ev.target)) return\n\n const { end, start } = value\n\n if ((!start && !end) || !!end) {\n startInputRef.current?.focus()\n } else {\n endInputRef.current?.focus()\n }\n } else {\n startInputRef.current?.focus()\n }\n }\n\n if (openOnClick) onOpen()\n },\n [allowInput, interactive, onOpen, openOnClick, value],\n )\n\n const onMouseDown = useCallback(\n (ev: MouseEvent<HTMLDivElement | HTMLInputElement>) => {\n if (!openOnFocus) return\n\n ev.preventDefault()\n ev.stopPropagation()\n },\n [openOnFocus],\n )\n\n const onFieldFocus = useCallback(() => {\n if (allowInput) return\n\n if (openOnFocus) onOpen()\n\n focusByClickRef.current = false\n }, [allowInput, onOpen, openOnFocus])\n\n const onInputFocus = useCallback(\n (ev: FocusEvent<HTMLInputElement>) => {\n ev.preventDefault()\n ev.stopPropagation()\n\n setFocused(true)\n\n if (openOnFocus && !focusByClickRef.current) onOpen()\n\n focusByClickRef.current = false\n },\n [onOpen, openOnFocus],\n )\n\n const onBlur = useCallback(\n (ev: FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n\n if (\n contains(fieldRef.current, ev.relatedTarget) ||\n contains(contentRef.current, ev.relatedTarget)\n ) {\n ev.preventDefault()\n } else {\n if (isArray(value)) {\n setInputValue(\"\" as MaybeInputValue<Range>)\n } else if (isObject(value) && !isDate(value)) {\n setInputValue((prev) =>\n isObject(prev)\n ? ({\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>)\n : prev,\n )\n } else {\n setInputValue(dateToString(value) as MaybeInputValue<Range>)\n }\n }\n },\n [dateToString, setInputValue, value],\n )\n\n const onClear = useCallback(() => {\n if (!interactive) return\n\n setValue((prev) => {\n if (isDate(prev)) {\n return undefined as MaybeDateValue<Multiple, Range>\n } else if (isArray(prev)) {\n return [] as unknown as MaybeDateValue<Multiple, Range>\n } else if (isObject(prev)) {\n return { end: undefined, start: undefined } as MaybeDateValue<\n Multiple,\n Range\n >\n } else {\n return prev\n }\n })\n\n setInputValue(\n (range ? { end: \"\", start: \"\" } : \"\") as MaybeInputValue<Range>,\n )\n\n if (focusOnClear) {\n if (allowInput) {\n startInputRef.current?.focus()\n } else {\n fieldRef.current?.focus()\n }\n }\n }, [allowInput, focusOnClear, interactive, range, setInputValue, setValue])\n\n useEffect(() => {\n if (!open) return\n\n return focusTransfer(\n contentRef.current,\n allowInput ? startInputRef.current : fieldRef.current,\n )\n }, [allowInput, open])\n\n useUpdateEffect(() => {\n setMonth((prev) => getAdjustedMonth(value, prev))\n }, [value, range])\n\n useUpdateEffect(() => {\n if (isArray(valueProp)) return\n\n if (isObject(valueProp) && !isDate(valueProp)) {\n setInputValue({\n end: dateToString(valueProp.end),\n start: dateToString(valueProp.start),\n } as MaybeInputValue<Range>)\n } else {\n setInputValue(dateToString(valueProp) as MaybeInputValue<Range>)\n }\n }, [valueProp])\n\n const getRootProps: PropGetter = useCallback(\n (props) => ({\n \"data-range\": dataAttr(range),\n ...dataProps,\n ...props,\n }),\n [dataProps, range],\n )\n\n const getFieldProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) =>\n getTriggerProps({\n ref: mergeRefs(ref, fieldRef),\n \"aria-haspopup\": \"dialog\",\n tabIndex: !allowInput ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, onClick),\n onFocus: handlerAll(props.onFocus, onFieldFocus),\n onMouseDown: handlerAll(props.onMouseDown, onMouseDown),\n }),\n\n [allowInput, getTriggerProps, onClick, onFieldFocus, onMouseDown],\n )\n\n const getInputProps: PropGetter<\"input\", { align?: InputAlign }> =\n useCallback(\n ({ align = \"start\", ...props } = {}) => {\n const inputProps: HTMLProps<\"input\"> = {\n style: {\n ...(!allowInput ? { pointerEvents: \"none\" } : {}),\n ...props.style,\n },\n autoComplete: \"off\",\n disabled,\n readOnly,\n required,\n tabIndex: allowInput ? 0 : -1,\n ...dataProps,\n ...props,\n onBlur: handlerAll(props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onInputChange),\n onFocus: handlerAll(props.onFocus, onInputFocus),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n onMouseDown: handlerAll(props.onMouseDown, onMouseDown),\n }\n\n if (isObject(inputValue)) {\n if (align === \"start\") {\n inputProps.ref = mergeRefs(props.ref, ref, startInputRef)\n inputProps.value = inputValue.start\n inputProps.placeholder = startPlaceholder\n } else {\n inputProps.ref = mergeRefs(props.ref, ref, endInputRef)\n inputProps.value = inputValue.end\n inputProps.placeholder = endPlaceholder\n }\n\n if (!inputValue.start && align === \"start\") {\n inputProps.id = id\n inputProps.name = name\n }\n\n if (!!inputValue.start && align === \"end\") {\n inputProps.id = id\n inputProps.name = name\n }\n } else {\n inputProps.ref = mergeRefs(props.ref, ref, startInputRef)\n inputProps.value = inputValue\n inputProps.id = id\n inputProps.name = name\n\n if (isArray(value)) {\n inputProps.style = {\n ...(!focused && !!value.length\n ? visuallyHiddenAttributes.style\n : {}),\n ...inputProps.style,\n }\n inputProps.placeholder = !value.length\n ? startPlaceholder\n : undefined\n inputProps[\"data-max\"] = dataAttr(\n isNumber(max) && value.length >= max,\n )\n } else {\n inputProps.placeholder = startPlaceholder\n }\n }\n\n return inputProps\n },\n [\n allowInput,\n dataProps,\n disabled,\n endPlaceholder,\n focused,\n id,\n inputValue,\n max,\n name,\n onBlur,\n onInputFocus,\n onInputChange,\n onKeyDown,\n onMouseDown,\n readOnly,\n ref,\n required,\n startPlaceholder,\n value,\n ],\n )\n\n const getContentProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) =>\n getComboboxContentProps({\n ref: mergeRefs(ref, contentRef),\n role: \"dialog\",\n ...props,\n }),\n [getComboboxContentProps],\n )\n\n const getCalendarProps: PropGetter<UseCalendarProps<Multiple, Range>> =\n useCallback(\n (props) =>\n ({\n disabled: !interactive,\n format: calendarFormat,\n locale,\n max,\n maxDate,\n minDate,\n month,\n multiple,\n range,\n value,\n onChange,\n onChangeMonth: setMonth,\n ...calendarProps,\n ...props,\n }) as UseCalendarProps<Multiple, Range>,\n [\n interactive,\n calendarFormat,\n locale,\n max,\n maxDate,\n minDate,\n month,\n multiple,\n range,\n value,\n onChange,\n setMonth,\n calendarProps,\n ],\n )\n\n const getIconProps: PropGetter = useCallback(\n (props) => ({ ...dataProps, ...props }),\n [dataProps],\n )\n\n const getClearIconProps: PropGetter = useCallback(\n (props = {}) =>\n getIconProps({\n \"aria-disabled\": ariaAttr(!interactive),\n \"aria-label\": t(\"Clear value\"),\n role: \"button\",\n tabIndex: interactive ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, onClear),\n onKeyDown: handlerAll(props.onKeyDown, (ev) =>\n runKeyAction(ev, { Enter: onClear, Space: onClear }),\n ),\n }),\n [getIconProps, interactive, onClear, t],\n )\n\n return {\n children,\n dateToString,\n inputValue,\n interactive,\n month,\n open,\n range,\n separator,\n setInputValue,\n setMonth,\n setValue,\n stringToDate,\n value,\n getCalendarProps,\n getClearIconProps,\n getContentProps,\n getFieldProps,\n getIconProps,\n getInputProps,\n getRootProps,\n popoverProps,\n onChange,\n onClose,\n onInputChange,\n onOpen,\n }\n}\n\nexport type UseDatePickerReturn = ReturnType<typeof useDatePicker>\n"],"mappings":"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ACA;EACA;EACA;EACA,eAAe;EACf,GAAG;EACH,GAAGR;EACJ,GACH;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAEH,MAAMS,uCACH,aAAW;EAAE,GAAG;EAAW,GAAGT;EAAO,GACtC,CAAC,UAAU,CACZ;AAkBD,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,2CA9BC,UAAQ,EAAE,KACT,aAAa;GACX,iEAA0B,CAAC,YAAY;GACvC,cAAc,EAAE,cAAc;GAC9B,MAAM;GACN,UAAU,cAAc,IAAI;GAC5B,GAAGA;GACH,2DAAoBA,QAAM,SAAS,QAAQ;GAC3C,6DAAsBA,QAAM,YAAY,OACtCU,yBAAa,IAAI;IAAE,OAAO;IAAS,OAAO;IAAS,CAAC,CACrD;GACF,CAAC,EACJ;GAAC;GAAc;GAAa;GAAS;GAAE,CACxC;EAkBC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"indicator.cjs","names":["createSlotComponent","indicatorStyle","styled","Float"],"sources":["../../../../src/components/indicator/indicator.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ReactNode } from \"react\"\nimport type { CSSProps, HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { FloatProps } from \"../float\"\nimport type { IndicatorStyle } from \"./indicator.style\"\nimport { useMemo } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { dataAttr, isNumber, isObject } from \"../../utils\"\nimport { Float } from \"../float\"\nimport { indicatorStyle } from \"./indicator.style\"\n\ninterface PingOptions {\n /**\n * It is used for the color of the ping animation.\n */\n color?: CSSProps[\"backgroundColor\"]\n /**\n * It is used for the duration of the ping animation.\n */\n duration?: CSSProps[\"animationDuration\"]\n /**\n * It is used for the count of the ping animation.\n */\n iterationCount?: CSSProps[\"animationIterationCount\"]\n /**\n * It is used for the scale of the ping animation.\n */\n scale?: CSSProps[\"scale\"]\n /**\n * It is used for the timing function of the ping animation.\n */\n timingFunction?: CSSProps[\"animationTimingFunction\"]\n}\n\nexport interface IndicatorProps\n extends\n Omit<HTMLStyledProps, \"offset\">,\n Omit<ThemeProps<IndicatorStyle>, \"ping\">,\n Pick<FloatProps, \"offset\" | \"placement\"> {\n /**\n * If `true`, the indicator will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The indicator label to use.\n */\n label?: ReactNode\n /**\n * If `label` is of type number, the maximum number displayed.\n *\n * @default 99\n */\n overflowCount?: number\n /**\n * If `true`, make an element scale and fade like a radar ping or ripple of water.\n *\n * @default false\n */\n ping?: boolean | PingOptions\n /**\n * If `true`, display 0.\n *\n * @default true\n */\n showZero?: boolean\n /**\n * Props for the float element.\n */\n floatProps?: IndicatorFloatProps\n /**\n * Props for the label element.\n */\n labelProps?: IndicatorLabelProps\n}\n\nconst {\n PropsContext: IndicatorPropsContext,\n usePropsContext: useIndicatorPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<IndicatorProps, IndicatorStyle>(\n \"indicator\",\n indicatorStyle,\n)\n\nexport { IndicatorPropsContext, useIndicatorPropsContext }\n\n/**\n * `Indicator` is a component that displays at the corner of elements such as avatars.\n *\n * @see https://yamada-ui.com/docs/components/indicator\n */\nexport const Indicator = withProvider(\n ({\n children,\n disabled,\n label,\n offset,\n overflowCount = 99,\n placement,\n showZero = true,\n floatProps,\n labelProps,\n ...rest\n }) => {\n const numeric = isNumber(label)\n\n disabled ??= numeric && !showZero && (label as number) <= 0\n\n const computedLabel = useMemo(() => {\n if (numeric && label > overflowCount) {\n return (\n <>\n {overflowCount}\n <styled.span>+</styled.span>\n </>\n )\n } else {\n return label\n }\n }, [numeric, label, overflowCount])\n\n return (\n <styled.div {...rest}>\n {children}\n\n {!disabled ? (\n <IndicatorFloat offset={offset} placement={placement} {...floatProps}>\n <IndicatorLabel data-numeric={dataAttr(numeric)} {...labelProps}>\n {computedLabel}\n </IndicatorLabel>\n </IndicatorFloat>\n ) : null}\n </styled.div>\n )\n },\n \"root\",\n)(({ ping, ...rest }) => {\n if (isObject(ping)) {\n const { color, duration, iterationCount, scale, timingFunction } = ping\n\n return {\n ...rest,\n \"--animation-scale\": scale,\n \"--duration\": duration ? `durations.${duration}` : undefined,\n \"--iteration-count\": iterationCount,\n \"--ping-color\": color ? `colors.${color}` : undefined,\n \"--timing-function\": timingFunction\n ? `easings.${timingFunction}`\n : undefined,\n ping: true,\n }\n } else {\n return { ...rest, ping }\n }\n})\n\ninterface IndicatorFloatProps extends FloatProps {}\n\nconst IndicatorFloat = withContext<\"div\", IndicatorFloatProps>(Float, \"float\")()\n\ninterface IndicatorLabelProps extends HTMLStyledProps<\"span\"> {}\n\nconst IndicatorLabel = withContext<\"span\", IndicatorLabelProps>(\n \"span\",\n \"label\",\n)()\n"],"mappings":";;;;;;;;;;;;;;AA8EA,MAAM,EACJ,cAAc,uBACd,iBAAiB,0BACjB,aACA,iBACEA,6CACF,aACAC,uCACD;;;;;;AASD,MAAa,YAAY,cACtB,EACC,UACA,UACA,OACA,QACA,gBAAgB,IAChB,WACA,WAAW,MACX,YACA,YACA,GAAG,WACC;CACJ,MAAM,0DAAmB,MAAM;AAE/B,cAAa,WAAW,CAAC,YAAa,SAAoB;CAE1D,MAAM,yCAA8B;AAClC,MAAI,WAAW,QAAQ,cACrB,QACE,qFACG,eACD,2CAACC,uBAAO,kBAAK,MAAe,IAC3B;MAGL,QAAO;IAER;EAAC;EAAS;EAAO;EAAc,CAAC;AAEnC,QACE,4CAACA,uBAAO;EAAI,GAAI;aACb,UAEA,CAAC,WACA,2CAAC;GAAuB;GAAmB;GAAW,GAAI;aACxD,2CAAC;IAAe,gEAAuB,QAAQ;IAAE,GAAI;cAClD;KACc;IACF,GACf;GACO;GAGjB,OACD,EAAE,EAAE,MAAM,GAAG,WAAW;AACvB,qDAAa,KAAK,EAAE;EAClB,MAAM,EAAE,OAAO,UAAU,gBAAgB,OAAO,mBAAmB;AAEnE,SAAO;GACL,GAAG;GACH,qBAAqB;GACrB,cAAc,WAAW,aAAa,aAAa;GACnD,qBAAqB;GACrB,gBAAgB,QAAQ,UAAU,UAAU;GAC5C,qBAAqB,iBACjB,WAAW,mBACX;GACJ,MAAM;GACP;OAED,QAAO;EAAE,GAAG;EAAM;EAAM;EAE1B;AAIF,MAAM,iBAAiB,YAAwCC,qBAAO,QAAQ,EAAE;AAIhF,MAAM,iBAAiB,YACrB,QACA,QACD,EAAE"}
1
+ {"version":3,"file":"indicator.cjs","names":["createSlotComponent","indicatorStyle","styled","Float"],"sources":["../../../../src/components/indicator/indicator.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ReactNode } from \"react\"\nimport type { CSSProps, HTMLStyledProps, ThemeProps } from \"../../core\"\nimport type { FloatProps } from \"../float\"\nimport type { IndicatorStyle } from \"./indicator.style\"\nimport { useMemo } from \"react\"\nimport { createSlotComponent, styled } from \"../../core\"\nimport { dataAttr, isNumber, isObject } from \"../../utils\"\nimport { Float } from \"../float\"\nimport { indicatorStyle } from \"./indicator.style\"\n\ninterface PingOptions {\n /**\n * It is used for the color of the ping animation.\n */\n color?: CSSProps[\"backgroundColor\"]\n /**\n * It is used for the duration of the ping animation.\n */\n duration?: CSSProps[\"animationDuration\"]\n /**\n * It is used for the count of the ping animation.\n */\n iterationCount?: CSSProps[\"animationIterationCount\"]\n /**\n * It is used for the scale of the ping animation.\n */\n scale?: CSSProps[\"scale\"]\n /**\n * It is used for the timing function of the ping animation.\n */\n timingFunction?: CSSProps[\"animationTimingFunction\"]\n}\n\nexport interface IndicatorProps\n extends\n Omit<HTMLStyledProps, \"offset\">,\n Omit<ThemeProps<IndicatorStyle>, \"ping\">,\n Pick<FloatProps, \"offset\" | \"placement\"> {\n /**\n * If `true`, the indicator will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * The indicator label to use.\n */\n label?: ReactNode\n /**\n * If `label` is of type number, the maximum number displayed.\n *\n * @default 99\n */\n overflowCount?: number\n /**\n * If `true`, make an element scale and fade like a radar ping or ripple of water.\n *\n * @default false\n */\n ping?: boolean | PingOptions\n /**\n * If `true`, display 0.\n *\n * @default true\n */\n showZero?: boolean\n /**\n * Props for the float element.\n */\n floatProps?: IndicatorFloatProps\n /**\n * Props for the label element.\n */\n labelProps?: IndicatorLabelProps\n}\n\nconst {\n PropsContext: IndicatorPropsContext,\n usePropsContext: useIndicatorPropsContext,\n withContext,\n withProvider,\n} = createSlotComponent<IndicatorProps, IndicatorStyle>(\n \"indicator\",\n indicatorStyle,\n)\n\nexport { IndicatorPropsContext, useIndicatorPropsContext }\n\n/**\n * `Indicator` is a component that displays at the corner of elements such as avatars.\n *\n * @see https://yamada-ui.com/docs/components/indicator\n */\nexport const Indicator = withProvider(\n ({\n children,\n disabled,\n label,\n offset,\n overflowCount = 99,\n placement,\n showZero = true,\n floatProps,\n labelProps,\n ...rest\n }) => {\n const numeric = isNumber(label)\n\n disabled ??= numeric && !showZero && label <= 0\n\n const computedLabel = useMemo(() => {\n if (numeric && label > overflowCount) {\n return (\n <>\n {overflowCount}\n <styled.span>+</styled.span>\n </>\n )\n } else {\n return label\n }\n }, [numeric, label, overflowCount])\n\n return (\n <styled.div {...rest}>\n {children}\n\n {!disabled ? (\n <IndicatorFloat offset={offset} placement={placement} {...floatProps}>\n <IndicatorLabel data-numeric={dataAttr(numeric)} {...labelProps}>\n {computedLabel}\n </IndicatorLabel>\n </IndicatorFloat>\n ) : null}\n </styled.div>\n )\n },\n \"root\",\n)(({ ping, ...rest }) => {\n if (isObject(ping)) {\n const { color, duration, iterationCount, scale, timingFunction } = ping\n\n return {\n ...rest,\n \"--animation-scale\": scale,\n \"--duration\": duration ? `durations.${duration}` : undefined,\n \"--iteration-count\": iterationCount,\n \"--ping-color\": color ? `colors.${color}` : undefined,\n \"--timing-function\": timingFunction\n ? `easings.${timingFunction}`\n : undefined,\n ping: true,\n }\n } else {\n return { ...rest, ping }\n }\n})\n\ninterface IndicatorFloatProps extends FloatProps {}\n\nconst IndicatorFloat = withContext<\"div\", IndicatorFloatProps>(Float, \"float\")()\n\ninterface IndicatorLabelProps extends HTMLStyledProps<\"span\"> {}\n\nconst IndicatorLabel = withContext<\"span\", IndicatorLabelProps>(\n \"span\",\n \"label\",\n)()\n"],"mappings":";;;;;;;;;;;;;;AA8EA,MAAM,EACJ,cAAc,uBACd,iBAAiB,0BACjB,aACA,iBACEA,6CACF,aACAC,uCACD;;;;;;AASD,MAAa,YAAY,cACtB,EACC,UACA,UACA,OACA,QACA,gBAAgB,IAChB,WACA,WAAW,MACX,YACA,YACA,GAAG,WACC;CACJ,MAAM,0DAAmB,MAAM;AAE/B,cAAa,WAAW,CAAC,YAAY,SAAS;CAE9C,MAAM,yCAA8B;AAClC,MAAI,WAAW,QAAQ,cACrB,QACE,qFACG,eACD,2CAACC,uBAAO,kBAAK,MAAe,IAC3B;MAGL,QAAO;IAER;EAAC;EAAS;EAAO;EAAc,CAAC;AAEnC,QACE,4CAACA,uBAAO;EAAI,GAAI;aACb,UAEA,CAAC,WACA,2CAAC;GAAuB;GAAmB;GAAW,GAAI;aACxD,2CAAC;IAAe,gEAAuB,QAAQ;IAAE,GAAI;cAClD;KACc;IACF,GACf;GACO;GAGjB,OACD,EAAE,EAAE,MAAM,GAAG,WAAW;AACvB,qDAAa,KAAK,EAAE;EAClB,MAAM,EAAE,OAAO,UAAU,gBAAgB,OAAO,mBAAmB;AAEnE,SAAO;GACL,GAAG;GACH,qBAAqB;GACrB,cAAc,WAAW,aAAa,aAAa;GACnD,qBAAqB;GACrB,gBAAgB,QAAQ,UAAU,UAAU;GAC5C,qBAAqB,iBACjB,WAAW,mBACX;GACJ,MAAM;GACP;OAED,QAAO;EAAE,GAAG;EAAM;EAAM;EAE1B;AAIF,MAAM,iBAAiB,YAAwCC,qBAAO,QAAQ,EAAE;AAIhF,MAAM,iBAAiB,YACrB,QACA,QACD,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-number-input.cjs","names":["useFieldProps","useCounter","value","isComposing","useNumberCounter","props","mergeRefs"],"sources":["../../../../src/components/number-input/use-number-input.ts"],"sourcesContent":["\"use client\"\n\nimport type { ChangeEvent, FocusEvent, KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport type { UseCounterProps } from \"../../hooks/use-counter\"\nimport type { FieldProps } from \"../field\"\nimport { useCallback, useMemo, useRef } from \"react\"\nimport { useCounter } from \"../../hooks/use-counter\"\nimport { useEventListener } from \"../../hooks/use-event-listener\"\nimport {\n ariaAttr,\n handlerAll,\n isComposing,\n mergeRefs,\n runKeyAction,\n useSafeLayoutEffect,\n} from \"../../utils\"\nimport { useFieldProps } from \"../field\"\nimport { useNumberCounter } from \"./use-number-counter\"\n\nconst defaultFormat = (value: number | string) => value.toString()\n\nconst defaultParse = (value: string) => value\n\nconst isDefaultValidCharacter = (char: string) => /^[Ee0-9+\\-.]$/.test(char)\n\nconst isValidNumericKeyboardEvent = (\n { key, altKey, ctrlKey, metaKey }: KeyboardEvent,\n isValid: (key: string) => boolean,\n) => {\n const modifierKey = ctrlKey || altKey || metaKey\n const singleCharacterKey = key.length === 1\n\n if (!singleCharacterKey || modifierKey) return true\n\n return isValid(key)\n}\n\nconst getStepRatio = <Y extends KeyboardEvent | WheelEvent>({\n ctrlKey,\n metaKey,\n shiftKey,\n}: Y) => {\n let ratio = 1\n\n if (metaKey || ctrlKey) ratio = 0.1\n\n if (shiftKey) ratio = 10\n\n return ratio\n}\n\nexport interface UseNumberInputProps\n extends\n Omit<HTMLProps<\"input\">, keyof UseCounterProps>,\n UseCounterProps,\n FieldProps {\n /**\n * If `true`, the input's value will change based on mouse wheel.\n *\n * @default false\n */\n allowMouseWheel?: boolean\n /**\n * This controls the value update when you blur out of the input.\n * - If `true` and the value is greater than `max`, the value will be reset to `max`.\n * - Else, the value remains the same.\n *\n * @default true\n */\n clampValueOnBlur?: boolean\n /**\n * If `true`, the input will be focused as you increment or decrement the value with the button.\n *\n * @default true\n */\n focusInputOnChange?: boolean\n /**\n * If using a custom display format, this converts the default format to the custom format.\n */\n format?: (value: number | string) => string\n /**\n * This is used to format the value so that screen readers\n * can speak out a more human-friendly value.\n *\n * It is used to set the `aria-valuetext` property of the input.\n */\n getAriaValueText?: (value: number | string) => string | undefined\n /**\n * Whether the pressed key should be allowed in the input.\n * The default behavior is to allow DOM floating point characters defined by /^[Ee0-9+\\-.]$/.\n */\n isValidCharacter?: (value: string) => boolean\n /**\n * If using a custom display format, this converts the custom format to a format `parseFloat` understands.\n */\n parse?: (value: string) => string\n}\n\nexport const useNumberInput = (props: UseNumberInputProps = {}) => {\n const {\n props: {\n allowMouseWheel,\n clampValueOnBlur = true,\n defaultValue,\n disabled,\n focusInputOnChange = true,\n format = defaultFormat,\n getAriaValueText,\n isValidCharacter = isDefaultValidCharacter,\n keepWithinRange = true,\n max: maxValue = Number.MAX_SAFE_INTEGER,\n min: minValue = Number.MIN_SAFE_INTEGER,\n parse = defaultParse,\n precision,\n readOnly,\n step = 1,\n value: valueProp,\n onChange: onChangeProp,\n ...rest\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const interactive = !(readOnly || disabled)\n const inputRef = useRef<HTMLInputElement>(null)\n const {\n cast,\n max,\n min,\n out,\n setValue,\n update,\n value,\n valueAsNumber,\n ...counter\n } = useCounter({\n defaultValue,\n keepWithinRange,\n max: maxValue,\n min: minValue,\n precision,\n step,\n value: valueProp,\n onChange: onChangeProp,\n })\n const selectionRef = useRef<null | {\n end: null | number\n start: null | number\n }>(null)\n const valueText = useMemo(() => {\n let text = getAriaValueText?.(value)\n\n if (text != null) return text\n\n text = value.toString()\n\n return !text ? undefined : text\n }, [value, getAriaValueText])\n\n const sanitize = useCallback(\n (value: string) => value.split(\"\").filter(isValidCharacter).join(\"\"),\n [isValidCharacter],\n )\n\n const increment = useCallback(\n (value: number = step) => {\n if (!interactive) return\n\n counter.increment(value)\n\n if (!focusInputOnChange) return\n\n requestAnimationFrame(() => {\n inputRef.current?.focus()\n })\n },\n [interactive, counter, step, focusInputOnChange],\n )\n\n const decrement = useCallback(\n (value: number = step) => {\n if (!interactive) return\n\n counter.decrement(value)\n\n if (!focusInputOnChange) return\n\n requestAnimationFrame(() => {\n inputRef.current?.focus()\n })\n },\n [interactive, counter, step, focusInputOnChange],\n )\n\n const onChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (isComposing(ev)) return\n\n const { selectionEnd, selectionStart, value } = ev.currentTarget\n\n update(sanitize(parse(value)))\n\n selectionRef.current = { end: selectionEnd, start: selectionStart }\n },\n [parse, sanitize, update],\n )\n\n const onFocus = useCallback((ev: FocusEvent<HTMLInputElement>) => {\n if (!selectionRef.current) return\n\n const { end, start } = selectionRef.current\n const { selectionStart, value } = ev.currentTarget\n\n ev.currentTarget.selectionStart = start ?? value.length\n ev.currentTarget.selectionEnd = end ?? selectionStart\n }, [])\n\n const onBlur = useCallback(() => {\n if (!clampValueOnBlur) return\n\n let nextValue = value as number | string\n\n if (value === \"\") return\n\n const valueStartsWithE = /^[eE]/.test(value.toString())\n\n if (valueStartsWithE) {\n setValue(\"\")\n } else {\n if (valueAsNumber < minValue) nextValue = minValue\n\n if (valueAsNumber > maxValue) nextValue = maxValue\n\n cast(nextValue)\n }\n }, [\n cast,\n clampValueOnBlur,\n maxValue,\n minValue,\n setValue,\n value,\n valueAsNumber,\n ])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLInputElement>) => {\n if (isComposing(ev)) return\n\n if (!isValidNumericKeyboardEvent(ev, isValidCharacter))\n ev.preventDefault()\n\n const stepValue = getStepRatio(ev) * step\n\n runKeyAction(ev, {\n ArrowDown: () => decrement(stepValue),\n ArrowUp: () => increment(stepValue),\n End: () => update(maxValue),\n Home: () => update(minValue),\n })\n },\n [decrement, increment, isValidCharacter, maxValue, minValue, step, update],\n )\n\n const { getDecrementProps, getIncrementProps } = useNumberCounter({\n \"aria-disabled\": ariaAttr(!interactive),\n decrement,\n disabled,\n increment,\n keepWithinRange,\n max,\n min,\n ...dataProps,\n })\n\n useSafeLayoutEffect(() => {\n if (!inputRef.current) return\n\n const notInSync = inputRef.current.value != value\n\n if (!notInSync) return\n\n setValue(sanitize(parse(inputRef.current.value)))\n }, [parse, sanitize])\n\n useEventListener(\n inputRef.current,\n \"wheel\",\n (ev) => {\n const ownerDocument = inputRef.current?.ownerDocument ?? document\n const focused = ownerDocument.activeElement === inputRef.current\n\n if (!allowMouseWheel || !focused) return\n\n ev.preventDefault()\n\n const stepValue = getStepRatio(ev) * step\n const direction = Math.sign(ev.deltaY)\n\n if (direction === -1) {\n increment(stepValue)\n } else if (direction === 1) {\n decrement(stepValue)\n }\n },\n { passive: false },\n )\n\n const getInputProps: PropGetter<\"input\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n ...ariaProps,\n ...dataProps,\n type: \"text\",\n \"aria-invalid\": ariaAttr(ariaProps[\"aria-invalid\"] ?? out),\n \"aria-valuemax\": maxValue,\n \"aria-valuemin\": minValue,\n \"aria-valuenow\": Number.isNaN(valueAsNumber) ? undefined : valueAsNumber,\n \"aria-valuetext\": valueText,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n disabled,\n inputMode: \"decimal\",\n max: maxValue,\n min: minValue,\n pattern: \"[0-9]*(.[0-9]+)?\",\n readOnly,\n role: \"spinbutton\",\n step,\n value: format(value),\n ...rest,\n ...props,\n ref: mergeRefs(ref, rest.ref, inputRef),\n onBlur: handlerAll(eventProps.onBlur, props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onChange),\n onFocus: handlerAll(eventProps.onFocus, props.onFocus, onFocus),\n onKeyDown: handlerAll(rest.onKeyDown, props.onKeyDown, onKeyDown),\n }),\n [\n format,\n out,\n value,\n valueText,\n ariaProps,\n dataProps,\n eventProps,\n maxValue,\n minValue,\n valueAsNumber,\n disabled,\n readOnly,\n step,\n rest,\n onKeyDown,\n onBlur,\n onFocus,\n onChange,\n ],\n )\n\n return { getDecrementProps, getIncrementProps, getInputProps }\n}\n\nexport type UseNumberInputReturn = ReturnType<typeof useNumberInput>\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-number-input.cjs","names":["useFieldProps","useCounter","value","isComposing","useNumberCounter","props","mergeRefs"],"sources":["../../../../src/components/number-input/use-number-input.ts"],"sourcesContent":["\"use client\"\n\nimport type { ChangeEvent, FocusEvent, KeyboardEvent } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport type { UseCounterProps } from \"../../hooks/use-counter\"\nimport type { FieldProps } from \"../field\"\nimport { useCallback, useMemo, useRef } from \"react\"\nimport { useCounter } from \"../../hooks/use-counter\"\nimport { useEventListener } from \"../../hooks/use-event-listener\"\nimport {\n ariaAttr,\n handlerAll,\n isComposing,\n mergeRefs,\n runKeyAction,\n useSafeLayoutEffect,\n} from \"../../utils\"\nimport { useFieldProps } from \"../field\"\nimport { useNumberCounter } from \"./use-number-counter\"\n\nconst defaultFormat = (value: number | string) => value.toString()\n\nconst defaultParse = (value: string) => value\n\nconst isDefaultValidCharacter = (char: string) => /^[Ee0-9+\\-.]$/.test(char)\n\nconst isValidNumericKeyboardEvent = (\n { key, altKey, ctrlKey, metaKey }: KeyboardEvent,\n isValid: (key: string) => boolean,\n) => {\n const modifierKey = ctrlKey || altKey || metaKey\n const singleCharacterKey = key.length === 1\n\n if (!singleCharacterKey || modifierKey) return true\n\n return isValid(key)\n}\n\nconst getStepRatio = <Y extends KeyboardEvent | WheelEvent>({\n ctrlKey,\n metaKey,\n shiftKey,\n}: Y) => {\n let ratio = 1\n\n if (metaKey || ctrlKey) ratio = 0.1\n\n if (shiftKey) ratio = 10\n\n return ratio\n}\n\nexport interface UseNumberInputProps\n extends\n Omit<HTMLProps<\"input\">, keyof UseCounterProps>,\n UseCounterProps,\n FieldProps {\n /**\n * If `true`, the input's value will change based on mouse wheel.\n *\n * @default false\n */\n allowMouseWheel?: boolean\n /**\n * This controls the value update when you blur out of the input.\n * - If `true` and the value is greater than `max`, the value will be reset to `max`.\n * - Else, the value remains the same.\n *\n * @default true\n */\n clampValueOnBlur?: boolean\n /**\n * If `true`, the input will be focused as you increment or decrement the value with the button.\n *\n * @default true\n */\n focusInputOnChange?: boolean\n /**\n * If using a custom display format, this converts the default format to the custom format.\n */\n format?: (value: number | string) => string\n /**\n * This is used to format the value so that screen readers\n * can speak out a more human-friendly value.\n *\n * It is used to set the `aria-valuetext` property of the input.\n */\n getAriaValueText?: (value: number | string) => string | undefined\n /**\n * Whether the pressed key should be allowed in the input.\n * The default behavior is to allow DOM floating point characters defined by /^[Ee0-9+\\-.]$/.\n */\n isValidCharacter?: (value: string) => boolean\n /**\n * If using a custom display format, this converts the custom format to a format `parseFloat` understands.\n */\n parse?: (value: string) => string\n}\n\nexport const useNumberInput = (props: UseNumberInputProps = {}) => {\n const {\n props: {\n allowMouseWheel,\n clampValueOnBlur = true,\n defaultValue,\n disabled,\n focusInputOnChange = true,\n format = defaultFormat,\n getAriaValueText,\n isValidCharacter = isDefaultValidCharacter,\n keepWithinRange = true,\n max: maxValue = Number.MAX_SAFE_INTEGER,\n min: minValue = Number.MIN_SAFE_INTEGER,\n parse = defaultParse,\n precision,\n readOnly,\n step = 1,\n value: valueProp,\n onChange: onChangeProp,\n ...rest\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const interactive = !(readOnly || disabled)\n const inputRef = useRef<HTMLInputElement>(null)\n const {\n cast,\n max,\n min,\n out,\n setValue,\n update,\n value,\n valueAsNumber,\n ...counter\n } = useCounter({\n defaultValue,\n keepWithinRange,\n max: maxValue,\n min: minValue,\n precision,\n step,\n value: valueProp,\n onChange: onChangeProp,\n })\n const selectionRef = useRef<null | {\n end: null | number\n start: null | number\n }>(null)\n const valueText = useMemo(() => {\n let text = getAriaValueText?.(value)\n\n if (text != null) return text\n\n text = value.toString()\n\n return !text ? undefined : text\n }, [value, getAriaValueText])\n\n const sanitize = useCallback(\n (value: string) => value.split(\"\").filter(isValidCharacter).join(\"\"),\n [isValidCharacter],\n )\n\n const increment = useCallback(\n (value: number = step) => {\n if (!interactive) return\n\n counter.increment(value)\n\n if (!focusInputOnChange) return\n\n requestAnimationFrame(() => {\n inputRef.current?.focus()\n })\n },\n [interactive, counter, step, focusInputOnChange],\n )\n\n const decrement = useCallback(\n (value: number = step) => {\n if (!interactive) return\n\n counter.decrement(value)\n\n if (!focusInputOnChange) return\n\n requestAnimationFrame(() => {\n inputRef.current?.focus()\n })\n },\n [interactive, counter, step, focusInputOnChange],\n )\n\n const onChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (isComposing(ev)) return\n\n const { selectionEnd, selectionStart, value } = ev.currentTarget\n\n update(sanitize(parse(value)))\n\n selectionRef.current = { end: selectionEnd, start: selectionStart }\n },\n [parse, sanitize, update],\n )\n\n const onFocus = useCallback((ev: FocusEvent<HTMLInputElement>) => {\n if (!selectionRef.current) return\n\n const { end, start } = selectionRef.current\n const { selectionStart, value } = ev.currentTarget\n\n ev.currentTarget.selectionStart = start ?? value.length\n ev.currentTarget.selectionEnd = end ?? selectionStart\n }, [])\n\n const onBlur = useCallback(() => {\n if (!clampValueOnBlur) return\n\n let nextValue = value\n\n if (value === \"\") return\n\n const valueStartsWithE = /^[eE]/.test(value.toString())\n\n if (valueStartsWithE) {\n setValue(\"\")\n } else {\n if (valueAsNumber < minValue) nextValue = minValue\n\n if (valueAsNumber > maxValue) nextValue = maxValue\n\n cast(nextValue)\n }\n }, [\n cast,\n clampValueOnBlur,\n maxValue,\n minValue,\n setValue,\n value,\n valueAsNumber,\n ])\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLInputElement>) => {\n if (isComposing(ev)) return\n\n if (!isValidNumericKeyboardEvent(ev, isValidCharacter))\n ev.preventDefault()\n\n const stepValue = getStepRatio(ev) * step\n\n runKeyAction(ev, {\n ArrowDown: () => decrement(stepValue),\n ArrowUp: () => increment(stepValue),\n End: () => update(maxValue),\n Home: () => update(minValue),\n })\n },\n [decrement, increment, isValidCharacter, maxValue, minValue, step, update],\n )\n\n const { getDecrementProps, getIncrementProps } = useNumberCounter({\n \"aria-disabled\": ariaAttr(!interactive),\n decrement,\n disabled,\n increment,\n keepWithinRange,\n max,\n min,\n ...dataProps,\n })\n\n useSafeLayoutEffect(() => {\n if (!inputRef.current) return\n\n const notInSync = inputRef.current.value != value\n\n if (!notInSync) return\n\n setValue(sanitize(parse(inputRef.current.value)))\n }, [parse, sanitize])\n\n useEventListener(\n inputRef.current,\n \"wheel\",\n (ev) => {\n const ownerDocument = inputRef.current?.ownerDocument ?? document\n const focused = ownerDocument.activeElement === inputRef.current\n\n if (!allowMouseWheel || !focused) return\n\n ev.preventDefault()\n\n const stepValue = getStepRatio(ev) * step\n const direction = Math.sign(ev.deltaY)\n\n if (direction === -1) {\n increment(stepValue)\n } else if (direction === 1) {\n decrement(stepValue)\n }\n },\n { passive: false },\n )\n\n const getInputProps: PropGetter<\"input\"> = useCallback(\n ({ ref, ...props } = {}) => ({\n ...ariaProps,\n ...dataProps,\n type: \"text\",\n \"aria-invalid\": ariaAttr(ariaProps[\"aria-invalid\"] ?? out),\n \"aria-valuemax\": maxValue,\n \"aria-valuemin\": minValue,\n \"aria-valuenow\": Number.isNaN(valueAsNumber) ? undefined : valueAsNumber,\n \"aria-valuetext\": valueText,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n disabled,\n inputMode: \"decimal\",\n max: maxValue,\n min: minValue,\n pattern: \"[0-9]*(.[0-9]+)?\",\n readOnly,\n role: \"spinbutton\",\n step,\n value: format(value),\n ...rest,\n ...props,\n ref: mergeRefs(ref, rest.ref, inputRef),\n onBlur: handlerAll(eventProps.onBlur, props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onChange),\n onFocus: handlerAll(eventProps.onFocus, props.onFocus, onFocus),\n onKeyDown: handlerAll(rest.onKeyDown, props.onKeyDown, onKeyDown),\n }),\n [\n format,\n out,\n value,\n valueText,\n ariaProps,\n dataProps,\n eventProps,\n maxValue,\n minValue,\n valueAsNumber,\n disabled,\n readOnly,\n step,\n rest,\n onKeyDown,\n onBlur,\n onFocus,\n onChange,\n ],\n )\n\n return { getDecrementProps, getIncrementProps, getInputProps }\n}\n\nexport type UseNumberInputReturn = ReturnType<typeof useNumberInput>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-slider.cjs","names":["useFieldProps","useControllableState","useI18n","usePanEvent","value","min","max","step","getRootProps: PropGetter","computedProps: HTMLProps","props","getInputProps: PropGetter<\"input\", { index?: number }>","visuallyHiddenAttributes","mergeRefs","getTrackProps: PropGetter","getRangeProps: PropGetter","valueProp","percent","rest","props: HTMLProps"],"sources":["../../../../src/components/slider/use-slider.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent } from \"react\"\nimport type {\n HTMLProps,\n HTMLRefAttributes,\n Orientation,\n PropGetter,\n RequiredPropGetter,\n} from \"../../core\"\nimport type { Point } from \"../../utils\"\nimport type { FieldProps } from \"../field\"\nimport { useCallback, useRef } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { usePanEvent } from \"../../hooks/use-pan-event\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n clampNumber,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n isNumber,\n mergeRefs,\n percentToValue,\n roundNumberToStep,\n runKeyAction,\n valueToPercent,\n visuallyHiddenAttributes,\n} from \"../../utils\"\nimport { useFieldProps } from \"../field\"\n\nexport interface UseSliderProps<Y extends [number, number] | number = number>\n extends\n Omit<HTMLProps, \"defaultValue\" | \"onChange\" | \"ref\">,\n HTMLRefAttributes<\"input\">,\n FieldProps {\n /**\n * The minimum distance between slider thumbs.\n * Useful for preventing the thumbs from being too close together.\n *\n * @default 0\n */\n betweenThumbs?: number\n /**\n * The initial value of the slider.\n */\n defaultValue?: Y\n /**\n * The base `id` to use for the slider.\n */\n id?: string\n /**\n * The maximum allowed value of the slider. Cannot be less than min.\n *\n * @default 100\n */\n max?: number\n /**\n * The minimum allowed value of the slider. Cannot be greater than max.\n *\n * @default 0\n */\n min?: number\n /**\n * The name attribute of the hidden `input` field.\n * This is particularly useful in forms.\n */\n name?: string\n /**\n * The orientation of the slider.\n *\n * @default 'horizontal'\n */\n orientation?: Orientation\n /**\n * The step in which increments or decrements have to be made.\n *\n * @default 1\n */\n step?: number\n /**\n * The value of the slider.\n */\n value?: Y\n /**\n * This is used to format the value so that screen readers\n * can speak out a more human-friendly value.\n *\n * It is used to set the `aria-valuetext` property of the input.\n */\n getAriaValueText?: (value: number, index: number) => string | undefined\n /**\n * Function called whenever the slider value changes.\n */\n onChange?: (value: Y) => void\n /**\n * Function called when the user is done selecting a new value.\n */\n onChangeEnd?: (value: Y) => void\n /**\n * Function called when the user starts selecting a new value.\n */\n onChangeStart?: (value: Y) => void\n}\n\nexport const useSlider = <Y extends [number, number] | number = number>(\n props: UseSliderProps<Y> = {},\n) => {\n const {\n props: {\n id,\n ref,\n name,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-valuetext\": ariaValueText,\n betweenThumbs = 0,\n defaultValue = 0 as Y,\n disabled,\n getAriaValueText,\n max = 100,\n min = 0,\n orientation = \"horizontal\",\n readOnly,\n required,\n step = 1,\n value: valueProp,\n onChange: onChangeProp,\n onChangeEnd,\n onChangeStart,\n ...rest\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const [value, setValue] = useControllableState({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n const { t } = useI18n(\"slider\")\n const currentIndex = useRef(0)\n const interactive = !(disabled || readOnly)\n const [_, getPanEventProps] = usePanEvent<HTMLDivElement>({\n onEnd: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n if (range) {\n const start = currentIndex.current === 0\n const oppositeIndex = currentIndex.current === 0 ? 1 : 0\n const oppositeValue = value[oppositeIndex]!\n\n onChangeEnd?.(\n (start ? [panValue, oppositeValue] : [oppositeValue, panValue]) as Y,\n )\n } else {\n onChangeEnd?.(panValue as Y)\n }\n },\n onMove: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n onChange(currentIndex.current, panValue)\n },\n onStart: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n if (range) {\n const distances = value.map((value) => Math.abs(value - panValue))\n const closest = Math.min(...distances)\n const index = distances.indexOf(closest)\n\n currentIndex.current = index\n\n const start = index === 0\n const oppositeIndex = index === 0 ? 1 : 0\n const oppositeValue = value[oppositeIndex]!\n\n onChangeStart?.(\n (start ? [panValue, oppositeValue] : [oppositeValue, panValue]) as Y,\n )\n } else {\n currentIndex.current = 0\n\n onChangeStart?.(value as Y)\n }\n\n onChange(currentIndex.current, panValue)\n },\n })\n const range = !isNumber(value)\n const percent = (\n range\n ? value.map((value) => valueToPercent(value, min, max))\n : valueToPercent(value, min, max)\n ) as Y extends number ? number : number[]\n const tenStep = (max - min) / 10\n const oneStep = step || (max - min) / 100\n\n if (max < min) console.warn(\"Do not assign a number less than 'min' to 'max'\")\n\n const getMinMax = useCallback(\n (index: number) => {\n const start = index === 0\n const oppositeIndex = index === 0 ? 1 : 0\n const oppositeValue = range ? value[oppositeIndex]! : value\n\n return {\n max: range ? (start ? oppositeValue - betweenThumbs : max) : max,\n min: range ? (start ? min : oppositeValue + betweenThumbs) : min,\n }\n },\n [betweenThumbs, max, min, range, value],\n )\n\n const getPanValue = useCallback(\n ({ x, y }: Point, { bottom, height, left, width }: DOMRect) => {\n const diff = orientation === \"horizontal\" ? x - left : bottom - y\n const length = orientation === \"horizontal\" ? width : height\n const percent = diff / length\n\n let nextValue = percentToValue(percent, min, max)\n\n nextValue = parseFloat(roundNumberToStep(nextValue, min, step))\n nextValue = clampNumber(nextValue, min, max)\n\n return nextValue\n },\n [orientation, min, max, step],\n )\n\n const onChange = useCallback(\n (index: number, value: number) => {\n if (!interactive) return\n\n const { max, min } = getMinMax(index)\n\n value = parseFloat(roundNumberToStep(value, min, oneStep))\n value = clampNumber(value, min, max)\n\n setValue((prev) => {\n if (isArray(prev)) {\n const next = [...prev]\n\n next[index] = value\n\n return next as Y\n } else {\n return value as Y\n }\n })\n },\n [getMinMax, interactive, oneStep, setValue],\n )\n\n const stepUp = useCallback(\n (index: number, step = oneStep) =>\n range\n ? onChange(index, value[index]! + step)\n : onChange(index, value + step),\n [oneStep, range, onChange, value],\n )\n\n const stepDown = useCallback(\n (index: number, step = oneStep) =>\n range\n ? onChange(index, value[index]! - step)\n : onChange(index, value - step),\n [oneStep, range, onChange, value],\n )\n\n const onKeyDown = useCallback(\n (index: number) => (ev: KeyboardEvent<HTMLDivElement>) => {\n const { max, min } = getMinMax(index)\n\n runKeyAction(ev, {\n ArrowDown: () => stepDown(index),\n ArrowLeft: () => stepDown(index),\n ArrowRight: () => stepUp(index),\n ArrowUp: () => stepUp(index),\n End: () => onChange(index, max),\n Home: () => onChange(index, min),\n PageDown: () => stepDown(index, tenStep),\n PageUp: () => stepUp(index, tenStep),\n })\n },\n [getMinMax, onChange, stepDown, stepUp, tenStep],\n )\n\n const getRootProps: PropGetter = useCallback(\n (props = {}) => {\n const computedProps: HTMLProps = {\n ...dataProps,\n \"data-orientation\": orientation,\n ...rest,\n ...props,\n onBlur: handlerAll(props.onBlur, eventProps.onBlur),\n onFocus: handlerAll(props.onFocus, eventProps.onFocus),\n }\n\n computedProps.style ??= {}\n\n if (isArray(percent)) {\n computedProps.style[\"--range-start\"] = `${Math.abs(percent[0]!)}%`\n computedProps.style[\"--range-end\"] = `${Math.abs(percent[1]!)}%`\n } else {\n computedProps.style[\"--range-start\"] = \"0%\"\n computedProps.style[\"--range-end\"] = `${Math.abs(percent)}%`\n }\n\n return computedProps\n },\n [dataProps, eventProps, orientation, percent, rest],\n )\n\n const getInputProps: PropGetter<\"input\", { index?: number }> = useCallback(\n ({ index = 0, ...props } = {}) => ({\n ...visuallyHiddenAttributes,\n ...dataProps,\n ...ariaProps,\n id,\n type: \"hidden\",\n name,\n disabled,\n readOnly,\n required,\n value: range ? value[index]! : value,\n ...props,\n ref: index === 0 ? mergeRefs(props.ref, ref) : props.ref,\n }),\n [\n dataProps,\n ariaProps,\n id,\n name,\n disabled,\n readOnly,\n required,\n range,\n value,\n ref,\n ],\n )\n\n const getTrackProps: PropGetter = useCallback(\n (props) =>\n getPanEventProps({\n ...dataProps,\n \"data-orientation\": orientation,\n ...props,\n }),\n [dataProps, getPanEventProps, orientation],\n )\n\n const getRangeProps: PropGetter = useCallback(\n (props) => ({\n ...dataProps,\n \"data-orientation\": orientation,\n \"data-range\": dataAttr(range),\n ...props,\n }),\n [dataProps, orientation, range],\n )\n\n const getMarkProps: RequiredPropGetter<\"div\", { value: number }> =\n useCallback(\n ({ style, value: valueProp, ...props }) => {\n const between = range\n ? value[0]! < valueProp && valueProp < value[1]!\n : valueProp < value\n const percent = valueToPercent(valueProp, min, max)\n\n return {\n ...dataProps,\n \"aria-hidden\": true,\n \"data-between\": dataAttr(between),\n \"data-orientation\": orientation,\n role: \"presentation\",\n ...props,\n style: { ...style, \"--mark-position\": `${percent}%` },\n }\n },\n [dataProps, max, min, orientation, range, value],\n )\n\n const getThumbProps: PropGetter<\"div\", { index?: number }> = useCallback(\n ({ index = 0, ...rest } = {}) => {\n const { max, min } = getMinMax(index)\n\n const props: HTMLProps = {\n ...dataProps,\n ...ariaProps,\n \"aria-label\": t(\"Slider thumb\"),\n \"aria-orientation\": orientation,\n \"aria-valuemax\": max,\n \"aria-valuemin\": min,\n role: \"slider\",\n tabIndex: interactive ? 0 : -1,\n ...rest,\n \"aria-labelledby\": cx(rest[\"aria-labelledby\"], ariaLabelledBy),\n onKeyDown: handlerAll(rest.onKeyDown, onKeyDown(index)),\n }\n\n if (range) {\n const currentValue = value[index]!\n\n props[\"data-start\"] = dataAttr(index === 0)\n props[\"data-end\"] = dataAttr(index === 1)\n props[\"aria-valuenow\"] = currentValue\n props[\"aria-valuetext\"] =\n ariaValueText ??\n getAriaValueText?.(currentValue, index) ??\n currentValue.toString()\n } else {\n props[\"data-end\"] = dataAttr(index === 0)\n props[\"aria-valuenow\"] = value\n props[\"aria-valuetext\"] =\n ariaValueText ?? getAriaValueText?.(value, index) ?? value.toString()\n }\n\n return props\n },\n [\n t,\n ariaLabelledBy,\n ariaProps,\n ariaValueText,\n dataProps,\n getAriaValueText,\n getMinMax,\n interactive,\n onKeyDown,\n orientation,\n range,\n value,\n ],\n )\n\n return {\n percent,\n range,\n setValue,\n stepDown,\n stepUp,\n value,\n getInputProps,\n getMarkProps,\n getRangeProps,\n getRootProps,\n getThumbProps,\n getTrackProps,\n onChange,\n }\n}\n\nexport type UseSliderReturn = ReturnType<typeof useSlider>\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-slider.cjs","names":["useFieldProps","useControllableState","useI18n","usePanEvent","value","min","max","step","getRootProps: PropGetter","computedProps: HTMLProps","props","getInputProps: PropGetter<\"input\", { index?: number }>","visuallyHiddenAttributes","mergeRefs","getTrackProps: PropGetter","getRangeProps: PropGetter","valueProp","percent","rest","props: HTMLProps"],"sources":["../../../../src/components/slider/use-slider.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent } from \"react\"\nimport type {\n HTMLProps,\n HTMLRefAttributes,\n Orientation,\n PropGetter,\n RequiredPropGetter,\n} from \"../../core\"\nimport type { Point } from \"../../utils\"\nimport type { FieldProps } from \"../field\"\nimport { useCallback, useRef } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { usePanEvent } from \"../../hooks/use-pan-event\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n clampNumber,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n isNumber,\n mergeRefs,\n percentToValue,\n roundNumberToStep,\n runKeyAction,\n valueToPercent,\n visuallyHiddenAttributes,\n} from \"../../utils\"\nimport { useFieldProps } from \"../field\"\n\nexport interface UseSliderProps<Y extends [number, number] | number = number>\n extends\n Omit<HTMLProps, \"defaultValue\" | \"onChange\" | \"ref\">,\n HTMLRefAttributes<\"input\">,\n FieldProps {\n /**\n * The minimum distance between slider thumbs.\n * Useful for preventing the thumbs from being too close together.\n *\n * @default 0\n */\n betweenThumbs?: number\n /**\n * The initial value of the slider.\n */\n defaultValue?: Y\n /**\n * The base `id` to use for the slider.\n */\n id?: string\n /**\n * The maximum allowed value of the slider. Cannot be less than min.\n *\n * @default 100\n */\n max?: number\n /**\n * The minimum allowed value of the slider. Cannot be greater than max.\n *\n * @default 0\n */\n min?: number\n /**\n * The name attribute of the hidden `input` field.\n * This is particularly useful in forms.\n */\n name?: string\n /**\n * The orientation of the slider.\n *\n * @default 'horizontal'\n */\n orientation?: Orientation\n /**\n * The step in which increments or decrements have to be made.\n *\n * @default 1\n */\n step?: number\n /**\n * The value of the slider.\n */\n value?: Y\n /**\n * This is used to format the value so that screen readers\n * can speak out a more human-friendly value.\n *\n * It is used to set the `aria-valuetext` property of the input.\n */\n getAriaValueText?: (value: number, index: number) => string | undefined\n /**\n * Function called whenever the slider value changes.\n */\n onChange?: (value: Y) => void\n /**\n * Function called when the user is done selecting a new value.\n */\n onChangeEnd?: (value: Y) => void\n /**\n * Function called when the user starts selecting a new value.\n */\n onChangeStart?: (value: Y) => void\n}\n\nexport const useSlider = <Y extends [number, number] | number = number>(\n props: UseSliderProps<Y> = {},\n) => {\n const {\n props: {\n id,\n ref,\n name,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-valuetext\": ariaValueText,\n betweenThumbs = 0,\n defaultValue = 0 as Y,\n disabled,\n getAriaValueText,\n max = 100,\n min = 0,\n orientation = \"horizontal\",\n readOnly,\n required,\n step = 1,\n value: valueProp,\n onChange: onChangeProp,\n onChangeEnd,\n onChangeStart,\n ...rest\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const [value, setValue] = useControllableState({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n const { t } = useI18n(\"slider\")\n const currentIndex = useRef(0)\n const interactive = !(disabled || readOnly)\n const [_, getPanEventProps] = usePanEvent<HTMLDivElement>({\n onEnd: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n if (range) {\n const start = currentIndex.current === 0\n const oppositeIndex = currentIndex.current === 0 ? 1 : 0\n const oppositeValue = value[oppositeIndex]\n\n onChangeEnd?.(\n (start ? [panValue, oppositeValue] : [oppositeValue, panValue]) as Y,\n )\n } else {\n onChangeEnd?.(panValue as Y)\n }\n },\n onMove: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n onChange(currentIndex.current, panValue)\n },\n onStart: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n if (range) {\n const distances = value.map((value) => Math.abs(value - panValue))\n const closest = Math.min(...distances)\n const index = distances.indexOf(closest)\n\n currentIndex.current = index\n\n const start = index === 0\n const oppositeIndex = index === 0 ? 1 : 0\n const oppositeValue = value[oppositeIndex]\n\n onChangeStart?.(\n (start ? [panValue, oppositeValue] : [oppositeValue, panValue]) as Y,\n )\n } else {\n currentIndex.current = 0\n\n onChangeStart?.(value as Y)\n }\n\n onChange(currentIndex.current, panValue)\n },\n })\n const range = !isNumber(value)\n const percent = (\n range\n ? value.map((value) => valueToPercent(value, min, max))\n : valueToPercent(value, min, max)\n ) as Y extends number ? number : number[]\n const tenStep = (max - min) / 10\n const oneStep = step || (max - min) / 100\n\n if (max < min) console.warn(\"Do not assign a number less than 'min' to 'max'\")\n\n const getMinMax = useCallback(\n (index: number) => {\n const start = index === 0\n const oppositeIndex = index === 0 ? 1 : 0\n const oppositeValue = range ? value[oppositeIndex] : value\n\n return {\n max: range ? (start ? oppositeValue - betweenThumbs : max) : max,\n min: range ? (start ? min : oppositeValue + betweenThumbs) : min,\n }\n },\n [betweenThumbs, max, min, range, value],\n )\n\n const getPanValue = useCallback(\n ({ x, y }: Point, { bottom, height, left, width }: DOMRect) => {\n const diff = orientation === \"horizontal\" ? x - left : bottom - y\n const length = orientation === \"horizontal\" ? width : height\n const percent = diff / length\n\n let nextValue = percentToValue(percent, min, max)\n\n nextValue = parseFloat(roundNumberToStep(nextValue, min, step))\n nextValue = clampNumber(nextValue, min, max)\n\n return nextValue\n },\n [orientation, min, max, step],\n )\n\n const onChange = useCallback(\n (index: number, value: number) => {\n if (!interactive) return\n\n const { max, min } = getMinMax(index)\n\n value = parseFloat(roundNumberToStep(value, min, oneStep))\n value = clampNumber(value, min, max)\n\n setValue((prev) => {\n if (isArray(prev)) {\n const next = [...prev]\n\n next[index] = value\n\n return next as Y\n } else {\n return value as Y\n }\n })\n },\n [getMinMax, interactive, oneStep, setValue],\n )\n\n const stepUp = useCallback(\n (index: number, step = oneStep) =>\n range\n ? onChange(index, value[index]! + step)\n : onChange(index, value + step),\n [oneStep, range, onChange, value],\n )\n\n const stepDown = useCallback(\n (index: number, step = oneStep) =>\n range\n ? onChange(index, value[index]! - step)\n : onChange(index, value - step),\n [oneStep, range, onChange, value],\n )\n\n const onKeyDown = useCallback(\n (index: number) => (ev: KeyboardEvent<HTMLDivElement>) => {\n const { max, min } = getMinMax(index)\n\n runKeyAction(ev, {\n ArrowDown: () => stepDown(index),\n ArrowLeft: () => stepDown(index),\n ArrowRight: () => stepUp(index),\n ArrowUp: () => stepUp(index),\n End: () => onChange(index, max),\n Home: () => onChange(index, min),\n PageDown: () => stepDown(index, tenStep),\n PageUp: () => stepUp(index, tenStep),\n })\n },\n [getMinMax, onChange, stepDown, stepUp, tenStep],\n )\n\n const getRootProps: PropGetter = useCallback(\n (props = {}) => {\n const computedProps: HTMLProps = {\n ...dataProps,\n \"data-orientation\": orientation,\n ...rest,\n ...props,\n onBlur: handlerAll(props.onBlur, eventProps.onBlur),\n onFocus: handlerAll(props.onFocus, eventProps.onFocus),\n }\n\n computedProps.style ??= {}\n\n if (isArray(percent)) {\n computedProps.style[\"--range-start\"] = `${Math.abs(percent[0]!)}%`\n computedProps.style[\"--range-end\"] = `${Math.abs(percent[1]!)}%`\n } else {\n computedProps.style[\"--range-start\"] = \"0%\"\n computedProps.style[\"--range-end\"] = `${Math.abs(percent)}%`\n }\n\n return computedProps\n },\n [dataProps, eventProps, orientation, percent, rest],\n )\n\n const getInputProps: PropGetter<\"input\", { index?: number }> = useCallback(\n ({ index = 0, ...props } = {}) => ({\n ...visuallyHiddenAttributes,\n ...dataProps,\n ...ariaProps,\n id,\n type: \"hidden\",\n name,\n disabled,\n readOnly,\n required,\n value: range ? value[index]! : value,\n ...props,\n ref: index === 0 ? mergeRefs(props.ref, ref) : props.ref,\n }),\n [\n dataProps,\n ariaProps,\n id,\n name,\n disabled,\n readOnly,\n required,\n range,\n value,\n ref,\n ],\n )\n\n const getTrackProps: PropGetter = useCallback(\n (props) =>\n getPanEventProps({\n ...dataProps,\n \"data-orientation\": orientation,\n ...props,\n }),\n [dataProps, getPanEventProps, orientation],\n )\n\n const getRangeProps: PropGetter = useCallback(\n (props) => ({\n ...dataProps,\n \"data-orientation\": orientation,\n \"data-range\": dataAttr(range),\n ...props,\n }),\n [dataProps, orientation, range],\n )\n\n const getMarkProps: RequiredPropGetter<\"div\", { value: number }> =\n useCallback(\n ({ style, value: valueProp, ...props }) => {\n const between = range\n ? value[0] < valueProp && valueProp < value[1]\n : valueProp < value\n const percent = valueToPercent(valueProp, min, max)\n\n return {\n ...dataProps,\n \"aria-hidden\": true,\n \"data-between\": dataAttr(between),\n \"data-orientation\": orientation,\n role: \"presentation\",\n ...props,\n style: { ...style, \"--mark-position\": `${percent}%` },\n }\n },\n [dataProps, max, min, orientation, range, value],\n )\n\n const getThumbProps: PropGetter<\"div\", { index?: number }> = useCallback(\n ({ index = 0, ...rest } = {}) => {\n const { max, min } = getMinMax(index)\n\n const props: HTMLProps = {\n ...dataProps,\n ...ariaProps,\n \"aria-label\": t(\"Slider thumb\"),\n \"aria-orientation\": orientation,\n \"aria-valuemax\": max,\n \"aria-valuemin\": min,\n role: \"slider\",\n tabIndex: interactive ? 0 : -1,\n ...rest,\n \"aria-labelledby\": cx(rest[\"aria-labelledby\"], ariaLabelledBy),\n onKeyDown: handlerAll(rest.onKeyDown, onKeyDown(index)),\n }\n\n if (range) {\n const currentValue = value[index]!\n\n props[\"data-start\"] = dataAttr(index === 0)\n props[\"data-end\"] = dataAttr(index === 1)\n props[\"aria-valuenow\"] = currentValue\n props[\"aria-valuetext\"] =\n ariaValueText ??\n getAriaValueText?.(currentValue, index) ??\n currentValue.toString()\n } else {\n props[\"data-end\"] = dataAttr(index === 0)\n props[\"aria-valuenow\"] = value\n props[\"aria-valuetext\"] =\n ariaValueText ?? getAriaValueText?.(value, index) ?? value.toString()\n }\n\n return props\n },\n [\n t,\n ariaLabelledBy,\n ariaProps,\n ariaValueText,\n dataProps,\n getAriaValueText,\n getMinMax,\n interactive,\n onKeyDown,\n orientation,\n range,\n value,\n ],\n )\n\n return {\n percent,\n range,\n setValue,\n stepDown,\n stepUp,\n value,\n getInputProps,\n getMarkProps,\n getRangeProps,\n getRootProps,\n getThumbProps,\n getTrackProps,\n onChange,\n }\n}\n\nexport type UseSliderReturn = ReturnType<typeof useSlider>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-autosize.cjs","names":["rows: number","value","getTextareaProps: PropGetter<\"textarea\">","mergeRefs"],"sources":["../../../../src/components/textarea/use-autosize.ts"],"sourcesContent":["\"use client\"\n\nimport type { PropGetter } from \"../../core\"\nimport { useCallback, useRef } from \"react\"\nimport {\n addDomEvent,\n createdDom,\n handlerAll,\n mergeRefs,\n noop,\n pickObject,\n useSafeLayoutEffect,\n useUpdateEffect,\n} from \"../../utils\"\n\nconst SIZING_STYLE_PROPERTIES = [\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"borderRightWidth\",\n \"borderTopWidth\",\n \"boxSizing\",\n \"fontFamily\",\n \"fontSize\",\n \"fontStyle\",\n \"fontWeight\",\n \"letterSpacing\",\n \"lineHeight\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"paddingRight\",\n \"paddingTop\",\n // non-standard\n \"tabSize\",\n \"textIndent\",\n // non-standard\n \"textRendering\",\n \"textTransform\",\n \"width\",\n \"wordBreak\",\n] as const\n\nconst HIDDEN_STYLE = {\n height: \"0\",\n \"max-height\": \"none\",\n \"min-height\": \"0\",\n overflow: \"hidden\",\n position: \"absolute\",\n right: \"0\",\n top: \"0\",\n visibility: \"hidden\",\n \"z-index\": \"-1000\",\n} as const\n\ntype SizingProperties = Extract<\n (typeof SIZING_STYLE_PROPERTIES)[number],\n keyof CSSStyleDeclaration\n>\n\ninterface SizingStyle {\n border: number\n padding: number\n rowHeight: number\n style: Pick<CSSStyleDeclaration, SizingProperties>\n}\n\nconst getSizingStyle = (el: HTMLElement): null | SizingStyle => {\n const style = window.getComputedStyle(el) as CSSStyleDeclaration | undefined\n\n if (style == null) return null\n\n const computedStyle = pickObject(style, SIZING_STYLE_PROPERTIES)\n\n if (computedStyle.boxSizing === \"\") return null\n\n const padding =\n parseFloat(computedStyle.paddingBottom!) +\n parseFloat(computedStyle.paddingTop!)\n\n const border =\n parseFloat(computedStyle.borderBottomWidth!) +\n parseFloat(computedStyle.borderTopWidth!)\n\n const rowHeight = parseFloat(computedStyle.lineHeight!)\n\n return {\n style: computedStyle,\n border,\n padding,\n rowHeight,\n }\n}\n\nconst setHiddenStyle = (el: HTMLElement) => {\n Object.keys(HIDDEN_STYLE).forEach((key) => {\n el.style.setProperty(\n key,\n HIDDEN_STYLE[key as keyof typeof HIDDEN_STYLE],\n \"important\",\n )\n })\n}\n\nconst calcRows = (\n el: HTMLTextAreaElement,\n sizingStyle: SizingStyle,\n value: string,\n maxRows: number,\n minRows: number,\n) => {\n const cloneEl = el.cloneNode() as HTMLTextAreaElement\n\n Object.assign(cloneEl.style, sizingStyle.style)\n\n setHiddenStyle(cloneEl)\n\n cloneEl.value = value\n\n document.body.appendChild(cloneEl)\n\n let rows: number\n\n if (cloneEl.scrollHeight) {\n const rowHeight = sizingStyle.rowHeight\n\n rows = Math.min(\n maxRows,\n Math.max(minRows, Math.floor(cloneEl.scrollHeight / rowHeight)),\n )\n } else {\n const lineBreaks = (value.match(/\\n/g) || []).length\n\n rows = Math.min(maxRows, Math.max(minRows, lineBreaks + 1))\n }\n\n document.body.removeChild(cloneEl)\n\n return rows\n}\n\nexport interface UseAutosizeProps {\n /**\n * If `true`, the Textarea height will not be adjusted.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Autosize up to maxRows rows.\n *\n * @default Infinity\n */\n maxRows?: number\n /**\n * Autosize up to minRows rows.\n *\n * @default 2\n */\n minRows?: number\n}\n\nexport const useAutosize = ({\n disabled = false,\n maxRows = Infinity,\n minRows = 2,\n}: UseAutosizeProps = {}) => {\n const ref = useRef<HTMLTextAreaElement>(null)\n const beforeValueRef = useRef<string>(null)\n const value = ref.current?.value ?? \"\"\n\n const onResizeTextarea = useCallback(() => {\n const el = ref.current\n\n if (!el) return\n\n let { placeholder, value } = el\n\n if (value === beforeValueRef.current) return\n\n beforeValueRef.current = value\n\n value ||= placeholder || \"x\"\n\n const sizingStyle = getSizingStyle(el)\n\n if (!sizingStyle) return\n\n const rows = calcRows(el, sizingStyle, value, maxRows, minRows)\n\n el.rows = rows\n }, [ref, maxRows, minRows])\n\n const getTextareaProps: PropGetter<\"textarea\"> = useCallback(\n (props = {}) => ({\n ...props,\n ref: mergeRefs(props.ref, ref),\n style: { resize: !disabled ? \"none\" : undefined, ...props.style },\n onChange: handlerAll(props.onChange, !disabled ? onResizeTextarea : noop),\n }),\n [ref, onResizeTextarea, disabled],\n )\n\n useSafeLayoutEffect(() => {\n if (!createdDom() || disabled) return\n\n onResizeTextarea()\n\n const unsubscribeResize = addDomEvent(window, \"resize\", onResizeTextarea)\n const unsubscribeLoadingdone = addDomEvent(\n document.fonts,\n \"loadingdone\",\n onResizeTextarea,\n )\n\n return () => {\n unsubscribeResize()\n unsubscribeLoadingdone()\n }\n }, [])\n\n useUpdateEffect(() => {\n if (disabled) return\n\n onResizeTextarea()\n }, [value])\n\n return { ref, getTextareaProps, onResizeTextarea }\n}\n\nexport type UseAutosizeReturn = ReturnType<typeof useAutosize>\n"],"mappings":";;;;;;;;;AAeA,MAAM,0BAA0B;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACA;CACA;CACD;AAED,MAAM,eAAe;CACnB,QAAQ;CACR,cAAc;CACd,cAAc;CACd,UAAU;CACV,UAAU;CACV,OAAO;CACP,KAAK;CACL,YAAY;CACZ,WAAW;CACZ;AAcD,MAAM,kBAAkB,OAAwC;CAC9D,MAAM,QAAQ,OAAO,iBAAiB,GAAG;AAEzC,KAAI,SAAS,KAAM,QAAO;CAE1B,MAAM,kEAA2B,OAAO,wBAAwB;AAEhE,KAAI,cAAc,cAAc,GAAI,QAAO;CAE3C,MAAM,UACJ,WAAW,cAAc,cAAe,GACxC,WAAW,cAAc,WAAY;AAQvC,QAAO;EACL,OAAO;EACP,QAPA,WAAW,cAAc,kBAAmB,GAC5C,WAAW,cAAc,eAAgB;EAOzC;EACA,WANgB,WAAW,cAAc,WAAY;EAOtD;;AAGH,MAAM,kBAAkB,OAAoB;AAC1C,QAAO,KAAK,aAAa,CAAC,SAAS,QAAQ;AACzC,KAAG,MAAM,YACP,KACA,aAAa,MACb,YACD;GACD;;AAGJ,MAAM,YACJ,IACA,aACA,OACA,SACA,YACG;CACH,MAAM,UAAU,GAAG,WAAW;AAE9B,QAAO,OAAO,QAAQ,OAAO,YAAY,MAAM;AAE/C,gBAAe,QAAQ;AAEvB,SAAQ,QAAQ;AAEhB,UAAS,KAAK,YAAY,QAAQ;CAElC,IAAIA;AAEJ,KAAI,QAAQ,cAAc;EACxB,MAAM,YAAY,YAAY;AAE9B,SAAO,KAAK,IACV,SACA,KAAK,IAAI,SAAS,KAAK,MAAM,QAAQ,eAAe,UAAU,CAAC,CAChE;QACI;EACL,MAAM,cAAc,MAAM,MAAM,MAAM,IAAI,EAAE,EAAE;AAE9C,SAAO,KAAK,IAAI,SAAS,KAAK,IAAI,SAAS,aAAa,EAAE,CAAC;;AAG7D,UAAS,KAAK,YAAY,QAAQ;AAElC,QAAO;;AAwBT,MAAa,eAAe,EAC1B,WAAW,OACX,UAAU,UACV,UAAU,MACU,EAAE,KAAK;CAC3B,MAAM,wBAAkC,KAAK;CAC7C,MAAM,mCAAgC,KAAK;CAC3C,MAAM,QAAQ,IAAI,SAAS,SAAS;CAEpC,MAAM,gDAAqC;EACzC,MAAM,KAAK,IAAI;AAEf,MAAI,CAAC,GAAI;EAET,IAAI,EAAE,aAAa,mBAAU;AAE7B,MAAIC,YAAU,eAAe,QAAS;AAEtC,iBAAe,UAAUA;AAEzB,cAAU,eAAe;EAEzB,MAAM,cAAc,eAAe,GAAG;AAEtC,MAAI,CAAC,YAAa;AAIlB,KAAG,OAFU,SAAS,IAAI,aAAaA,SAAO,SAAS,QAAQ;IAG9D;EAAC;EAAK;EAAS;EAAQ,CAAC;CAE3B,MAAMC,2CACH,QAAQ,EAAE,MAAM;EACf,GAAG;EACH,KAAKC,sBAAU,MAAM,KAAK,IAAI;EAC9B,OAAO;GAAE,QAAQ,CAAC,WAAW,SAAS;GAAW,GAAG,MAAM;GAAO;EACjE,4DAAqB,MAAM,UAAU,CAAC,WAAW,qDAAmB,KAAK;EAC1E,GACD;EAAC;EAAK;EAAkB;EAAS,CAClC;AAED,0CAA0B;AACxB,MAAI,oDAAa,IAAI,SAAU;AAE/B,oBAAkB;EAElB,MAAM,uEAAgC,QAAQ,UAAU,iBAAiB;EACzE,MAAM,4EACJ,SAAS,OACT,eACA,iBACD;AAED,eAAa;AACX,sBAAmB;AACnB,2BAAwB;;IAEzB,EAAE,CAAC;AAEN,sCAAsB;AACpB,MAAI,SAAU;AAEd,oBAAkB;IACjB,CAAC,MAAM,CAAC;AAEX,QAAO;EAAE;EAAK;EAAkB;EAAkB"}
1
+ {"version":3,"file":"use-autosize.cjs","names":["rows: number","value","getTextareaProps: PropGetter<\"textarea\">","mergeRefs"],"sources":["../../../../src/components/textarea/use-autosize.ts"],"sourcesContent":["\"use client\"\n\nimport type { PropGetter } from \"../../core\"\nimport { useCallback, useRef } from \"react\"\nimport {\n addDomEvent,\n createdDom,\n handlerAll,\n mergeRefs,\n noop,\n pickObject,\n useSafeLayoutEffect,\n useUpdateEffect,\n} from \"../../utils\"\n\nconst SIZING_STYLE_PROPERTIES = [\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"borderRightWidth\",\n \"borderTopWidth\",\n \"boxSizing\",\n \"fontFamily\",\n \"fontSize\",\n \"fontStyle\",\n \"fontWeight\",\n \"letterSpacing\",\n \"lineHeight\",\n \"paddingBottom\",\n \"paddingLeft\",\n \"paddingRight\",\n \"paddingTop\",\n // non-standard\n \"tabSize\",\n \"textIndent\",\n // non-standard\n \"textRendering\",\n \"textTransform\",\n \"width\",\n \"wordBreak\",\n] as const\n\nconst HIDDEN_STYLE = {\n height: \"0\",\n \"max-height\": \"none\",\n \"min-height\": \"0\",\n overflow: \"hidden\",\n position: \"absolute\",\n right: \"0\",\n top: \"0\",\n visibility: \"hidden\",\n \"z-index\": \"-1000\",\n} as const\n\ntype SizingProperties = Extract<\n (typeof SIZING_STYLE_PROPERTIES)[number],\n keyof CSSStyleDeclaration\n>\n\ninterface SizingStyle {\n border: number\n padding: number\n rowHeight: number\n style: Pick<CSSStyleDeclaration, SizingProperties>\n}\n\nconst getSizingStyle = (el: HTMLElement): null | SizingStyle => {\n const style = window.getComputedStyle(el) as CSSStyleDeclaration | undefined\n\n if (style == null) return null\n\n const computedStyle = pickObject(style, SIZING_STYLE_PROPERTIES)\n\n if (computedStyle.boxSizing === \"\") return null\n\n const padding =\n parseFloat(computedStyle.paddingBottom) +\n parseFloat(computedStyle.paddingTop)\n\n const border =\n parseFloat(computedStyle.borderBottomWidth) +\n parseFloat(computedStyle.borderTopWidth)\n\n const rowHeight = parseFloat(computedStyle.lineHeight)\n\n return {\n style: computedStyle,\n border,\n padding,\n rowHeight,\n }\n}\n\nconst setHiddenStyle = (el: HTMLElement) => {\n Object.keys(HIDDEN_STYLE).forEach((key) => {\n el.style.setProperty(\n key,\n HIDDEN_STYLE[key as keyof typeof HIDDEN_STYLE],\n \"important\",\n )\n })\n}\n\nconst calcRows = (\n el: HTMLTextAreaElement,\n sizingStyle: SizingStyle,\n value: string,\n maxRows: number,\n minRows: number,\n) => {\n const cloneEl = el.cloneNode() as HTMLTextAreaElement\n\n Object.assign(cloneEl.style, sizingStyle.style)\n\n setHiddenStyle(cloneEl)\n\n cloneEl.value = value\n\n document.body.appendChild(cloneEl)\n\n let rows: number\n\n if (cloneEl.scrollHeight) {\n const rowHeight = sizingStyle.rowHeight\n\n rows = Math.min(\n maxRows,\n Math.max(minRows, Math.floor(cloneEl.scrollHeight / rowHeight)),\n )\n } else {\n const lineBreaks = (value.match(/\\n/g) || []).length\n\n rows = Math.min(maxRows, Math.max(minRows, lineBreaks + 1))\n }\n\n document.body.removeChild(cloneEl)\n\n return rows\n}\n\nexport interface UseAutosizeProps {\n /**\n * If `true`, the Textarea height will not be adjusted.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Autosize up to maxRows rows.\n *\n * @default Infinity\n */\n maxRows?: number\n /**\n * Autosize up to minRows rows.\n *\n * @default 2\n */\n minRows?: number\n}\n\nexport const useAutosize = ({\n disabled = false,\n maxRows = Infinity,\n minRows = 2,\n}: UseAutosizeProps = {}) => {\n const ref = useRef<HTMLTextAreaElement>(null)\n const beforeValueRef = useRef<string>(null)\n const value = ref.current?.value ?? \"\"\n\n const onResizeTextarea = useCallback(() => {\n const el = ref.current\n\n if (!el) return\n\n let { placeholder, value } = el\n\n if (value === beforeValueRef.current) return\n\n beforeValueRef.current = value\n\n value ||= placeholder || \"x\"\n\n const sizingStyle = getSizingStyle(el)\n\n if (!sizingStyle) return\n\n const rows = calcRows(el, sizingStyle, value, maxRows, minRows)\n\n el.rows = rows\n }, [ref, maxRows, minRows])\n\n const getTextareaProps: PropGetter<\"textarea\"> = useCallback(\n (props = {}) => ({\n ...props,\n ref: mergeRefs(props.ref, ref),\n style: { resize: !disabled ? \"none\" : undefined, ...props.style },\n onChange: handlerAll(props.onChange, !disabled ? onResizeTextarea : noop),\n }),\n [ref, onResizeTextarea, disabled],\n )\n\n useSafeLayoutEffect(() => {\n if (!createdDom() || disabled) return\n\n onResizeTextarea()\n\n const unsubscribeResize = addDomEvent(window, \"resize\", onResizeTextarea)\n const unsubscribeLoadingdone = addDomEvent(\n document.fonts,\n \"loadingdone\",\n onResizeTextarea,\n )\n\n return () => {\n unsubscribeResize()\n unsubscribeLoadingdone()\n }\n }, [])\n\n useUpdateEffect(() => {\n if (disabled) return\n\n onResizeTextarea()\n }, [value])\n\n return { ref, getTextareaProps, onResizeTextarea }\n}\n\nexport type UseAutosizeReturn = ReturnType<typeof useAutosize>\n"],"mappings":";;;;;;;;;AAeA,MAAM,0BAA0B;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CAEA;CACA;CACA;CACA;CACD;AAED,MAAM,eAAe;CACnB,QAAQ;CACR,cAAc;CACd,cAAc;CACd,UAAU;CACV,UAAU;CACV,OAAO;CACP,KAAK;CACL,YAAY;CACZ,WAAW;CACZ;AAcD,MAAM,kBAAkB,OAAwC;CAC9D,MAAM,QAAQ,OAAO,iBAAiB,GAAG;AAEzC,KAAI,SAAS,KAAM,QAAO;CAE1B,MAAM,kEAA2B,OAAO,wBAAwB;AAEhE,KAAI,cAAc,cAAc,GAAI,QAAO;CAE3C,MAAM,UACJ,WAAW,cAAc,cAAc,GACvC,WAAW,cAAc,WAAW;AAQtC,QAAO;EACL,OAAO;EACP,QAPA,WAAW,cAAc,kBAAkB,GAC3C,WAAW,cAAc,eAAe;EAOxC;EACA,WANgB,WAAW,cAAc,WAAW;EAOrD;;AAGH,MAAM,kBAAkB,OAAoB;AAC1C,QAAO,KAAK,aAAa,CAAC,SAAS,QAAQ;AACzC,KAAG,MAAM,YACP,KACA,aAAa,MACb,YACD;GACD;;AAGJ,MAAM,YACJ,IACA,aACA,OACA,SACA,YACG;CACH,MAAM,UAAU,GAAG,WAAW;AAE9B,QAAO,OAAO,QAAQ,OAAO,YAAY,MAAM;AAE/C,gBAAe,QAAQ;AAEvB,SAAQ,QAAQ;AAEhB,UAAS,KAAK,YAAY,QAAQ;CAElC,IAAIA;AAEJ,KAAI,QAAQ,cAAc;EACxB,MAAM,YAAY,YAAY;AAE9B,SAAO,KAAK,IACV,SACA,KAAK,IAAI,SAAS,KAAK,MAAM,QAAQ,eAAe,UAAU,CAAC,CAChE;QACI;EACL,MAAM,cAAc,MAAM,MAAM,MAAM,IAAI,EAAE,EAAE;AAE9C,SAAO,KAAK,IAAI,SAAS,KAAK,IAAI,SAAS,aAAa,EAAE,CAAC;;AAG7D,UAAS,KAAK,YAAY,QAAQ;AAElC,QAAO;;AAwBT,MAAa,eAAe,EAC1B,WAAW,OACX,UAAU,UACV,UAAU,MACU,EAAE,KAAK;CAC3B,MAAM,wBAAkC,KAAK;CAC7C,MAAM,mCAAgC,KAAK;CAC3C,MAAM,QAAQ,IAAI,SAAS,SAAS;CAEpC,MAAM,gDAAqC;EACzC,MAAM,KAAK,IAAI;AAEf,MAAI,CAAC,GAAI;EAET,IAAI,EAAE,aAAa,mBAAU;AAE7B,MAAIC,YAAU,eAAe,QAAS;AAEtC,iBAAe,UAAUA;AAEzB,cAAU,eAAe;EAEzB,MAAM,cAAc,eAAe,GAAG;AAEtC,MAAI,CAAC,YAAa;AAIlB,KAAG,OAFU,SAAS,IAAI,aAAaA,SAAO,SAAS,QAAQ;IAG9D;EAAC;EAAK;EAAS;EAAQ,CAAC;CAE3B,MAAMC,2CACH,QAAQ,EAAE,MAAM;EACf,GAAG;EACH,KAAKC,sBAAU,MAAM,KAAK,IAAI;EAC9B,OAAO;GAAE,QAAQ,CAAC,WAAW,SAAS;GAAW,GAAG,MAAM;GAAO;EACjE,4DAAqB,MAAM,UAAU,CAAC,WAAW,qDAAmB,KAAK;EAC1E,GACD;EAAC;EAAK;EAAkB;EAAS,CAClC;AAED,0CAA0B;AACxB,MAAI,oDAAa,IAAI,SAAU;AAE/B,oBAAkB;EAElB,MAAM,uEAAgC,QAAQ,UAAU,iBAAiB;EACzE,MAAM,4EACJ,SAAS,OACT,eACA,iBACD;AAED,eAAa;AACX,sBAAmB;AACnB,2BAAwB;;IAEzB,EAAE,CAAC;AAEN,sCAAsB;AACpB,MAAI,SAAU;AAEd,oBAAkB;IACjB,CAAC,MAAM,CAAC;AAEX,QAAO;EAAE;EAAK;EAAkB;EAAkB"}
@@ -37,7 +37,7 @@ const useToggleGroup = ({ defaultValue, disabled, readOnly, value: valueProp, on
37
37
  onReset(nextValue);
38
38
  return nextValue;
39
39
  }
40
- else if (value$1 === prev) {
40
+ else if (String(value$1) === prev) {
41
41
  onReset();
42
42
  return;
43
43
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"use-toggle-group.cjs","names":["createContext","useControllableState","value"],"sources":["../../../../src/components/toggle/use-toggle-group.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useRef } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport {\n createContext,\n dataAttr,\n isArray,\n isUndefined,\n toArray,\n useUpdateEffect,\n} from \"../../utils\"\n\ninterface ToggleGroupContext {\n onChangeMapRef: RefObject<Map<string, (value: boolean) => void>>\n disabled?: boolean\n readOnly?: boolean\n value?: string | string[]\n onChange?: <Y extends string = string>(value: undefined | Y) => void\n}\n\nconst [ToggleGroupContext, useToggleGroupContext] =\n createContext<ToggleGroupContext>({\n name: \"ToggleGroupContext\",\n strict: false,\n })\n\nexport { ToggleGroupContext, useToggleGroupContext }\n\nexport interface UseToggleGroupProps<\n Y extends string | string[] = string,\n> extends Omit<HTMLProps, \"defaultValue\" | \"onChange\" | \"value\"> {\n /**\n * The initial value of the toggle button group.\n */\n defaultValue?: Y extends any[] ? Y : undefined | Y\n /**\n * If `true`, all wrapped toggle button will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * If `true`, all wrapped toggle button will be readonly.\n *\n * @default false\n */\n readOnly?: boolean\n /**\n * The value of the toggle button group.\n */\n value?: Y extends any[] ? Y : undefined | Y\n /**\n * The callback fired when any children toggle button is selected or unselected.\n */\n onChange?: (value: Y extends any[] ? Y : undefined | Y) => void\n}\n\nexport const useToggleGroup = <Y extends string | string[] = string>({\n defaultValue,\n disabled,\n readOnly,\n value: valueProp,\n onChange: onChangeProp,\n ...rest\n}: UseToggleGroupProps<Y>) => {\n type Value = Y extends any[] ? Y : undefined | Y\n\n const onChangeMapRef = useRef<Map<string, (value: boolean) => void>>(\n new Map(),\n )\n const [value, setValue] = useControllableState<Value>({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n\n const onReset = useCallback((targetValue?: string[]) => {\n onChangeMapRef.current.forEach((onChange, value) => {\n if (targetValue?.includes(value)) {\n onChange(true)\n } else {\n onChange(false)\n }\n })\n }, [])\n\n const onChange = useCallback(\n <M extends string = Y extends any[] ? Y[number] : Y>(\n value: M | undefined,\n ) => {\n if (isUndefined(value)) return\n\n setValue((prev) => {\n if (isArray(prev)) {\n const included = prev.includes(value)\n\n if (included) {\n const nextValue = prev.filter((prevValue) => prevValue !== value)\n\n onReset(nextValue)\n\n return nextValue as Value\n } else {\n const nextValue = [...prev, value]\n\n onReset(nextValue)\n\n return nextValue as Value\n }\n } else {\n if (value === (prev as string | undefined)) {\n onReset()\n\n return undefined as Value\n } else {\n onReset([value])\n\n return value as unknown as Value\n }\n }\n })\n },\n [setValue, onReset],\n )\n\n useUpdateEffect(() => {\n onReset(!isUndefined(valueProp) ? toArray(valueProp) : undefined)\n\n setValue(valueProp as Value)\n }, [valueProp])\n\n const getGroupProps: PropGetter = useCallback(\n (props) => ({\n \"data-disabled\": dataAttr(disabled),\n \"data-readonly\": dataAttr(readOnly),\n role: \"group\",\n ...rest,\n ...props,\n }),\n [disabled, readOnly, rest],\n )\n\n return { disabled, readOnly, value, getGroupProps, onChange, onChangeMapRef }\n}\n\nexport type UseToggleGroupReturn = ReturnType<typeof useToggleGroup>\n"],"mappings":";;;;;;;;;;AAuBA,MAAM,CAAC,oBAAoB,yBACzBA,8BAAkC;CAChC,MAAM;CACN,QAAQ;CACT,CAAC;AAiCJ,MAAa,kBAAwD,EACnE,cACA,UACA,UACA,OAAO,WACP,UAAU,cACV,GAAG,WACyB;CAG5B,MAAM,mDACJ,IAAI,KAAK,CACV;CACD,MAAM,CAAC,OAAO,YAAYC,gEAA4B;EACpD;EACA,OAAO;EACP,UAAU;EACX,CAAC;CAEF,MAAM,kCAAuB,gBAA2B;AACtD,iBAAe,QAAQ,SAAS,YAAU,YAAU;AAClD,OAAI,aAAa,SAASC,QAAM,CAC9B,YAAS,KAAK;OAEd,YAAS,MAAM;IAEjB;IACD,EAAE,CAAC;CAEN,MAAM,mCAEF,YACG;AACH,yDAAgBA,QAAM,CAAE;AAExB,YAAU,SAAS;AACjB,sDAAY,KAAK,CAGf,KAFiB,KAAK,SAASA,QAAM,EAEvB;IACZ,MAAM,YAAY,KAAK,QAAQ,cAAc,cAAcA,QAAM;AAEjE,YAAQ,UAAU;AAElB,WAAO;UACF;IACL,MAAM,YAAY,CAAC,GAAG,MAAMA,QAAM;AAElC,YAAQ,UAAU;AAElB,WAAO;;YAGLA,YAAW,MAA6B;AAC1C,aAAS;AAET;UACK;AACL,YAAQ,CAACA,QAAM,CAAC;AAEhB,WAAOA;;IAGX;IAEJ,CAAC,UAAU,QAAQ,CACpB;AAED,sCAAsB;AACpB,UAAQ,oDAAa,UAAU,kDAAW,UAAU,GAAG,OAAU;AAEjE,WAAS,UAAmB;IAC3B,CAAC,UAAU,CAAC;AAaf,QAAO;EAAE;EAAU;EAAU;EAAO,uCAVjC,WAAW;GACV,iEAA0B,SAAS;GACnC,iEAA0B,SAAS;GACnC,MAAM;GACN,GAAG;GACH,GAAG;GACJ,GACD;GAAC;GAAU;GAAU;GAAK,CAC3B;EAEkD;EAAU;EAAgB"}
1
+ {"version":3,"file":"use-toggle-group.cjs","names":["createContext","useControllableState","value"],"sources":["../../../../src/components/toggle/use-toggle-group.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport type { HTMLProps, PropGetter } from \"../../core\"\nimport { useCallback, useRef } from \"react\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport {\n createContext,\n dataAttr,\n isArray,\n isUndefined,\n toArray,\n useUpdateEffect,\n} from \"../../utils\"\n\ninterface ToggleGroupContext {\n onChangeMapRef: RefObject<Map<string, (value: boolean) => void>>\n disabled?: boolean\n readOnly?: boolean\n value?: string | string[]\n onChange?: <Y extends string = string>(value: undefined | Y) => void\n}\n\nconst [ToggleGroupContext, useToggleGroupContext] =\n createContext<ToggleGroupContext>({\n name: \"ToggleGroupContext\",\n strict: false,\n })\n\nexport { ToggleGroupContext, useToggleGroupContext }\n\nexport interface UseToggleGroupProps<\n Y extends string | string[] = string,\n> extends Omit<HTMLProps, \"defaultValue\" | \"onChange\" | \"value\"> {\n /**\n * The initial value of the toggle button group.\n */\n defaultValue?: Y extends any[] ? Y : undefined | Y\n /**\n * If `true`, all wrapped toggle button will be disabled.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * If `true`, all wrapped toggle button will be readonly.\n *\n * @default false\n */\n readOnly?: boolean\n /**\n * The value of the toggle button group.\n */\n value?: Y extends any[] ? Y : undefined | Y\n /**\n * The callback fired when any children toggle button is selected or unselected.\n */\n onChange?: (value: Y extends any[] ? Y : undefined | Y) => void\n}\n\nexport const useToggleGroup = <Y extends string | string[] = string>({\n defaultValue,\n disabled,\n readOnly,\n value: valueProp,\n onChange: onChangeProp,\n ...rest\n}: UseToggleGroupProps<Y>) => {\n type Value = Y extends any[] ? Y : undefined | Y\n\n const onChangeMapRef = useRef<Map<string, (value: boolean) => void>>(\n new Map(),\n )\n const [value, setValue] = useControllableState<Value>({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n\n const onReset = useCallback((targetValue?: string[]) => {\n onChangeMapRef.current.forEach((onChange, value) => {\n if (targetValue?.includes(value)) {\n onChange(true)\n } else {\n onChange(false)\n }\n })\n }, [])\n\n const onChange = useCallback(\n <M extends string = Y extends any[] ? Y[number] : Y>(\n value: M | undefined,\n ) => {\n if (isUndefined(value)) return\n\n setValue((prev) => {\n if (isArray(prev)) {\n const included = prev.includes(value)\n\n if (included) {\n const nextValue = prev.filter((prevValue) => prevValue !== value)\n\n onReset(nextValue)\n\n return nextValue as Value\n } else {\n const nextValue = [...prev, value]\n\n onReset(nextValue)\n\n return nextValue as Value\n }\n } else {\n if (String(value) === prev) {\n onReset()\n\n return undefined as Value\n } else {\n onReset([value])\n\n return value as unknown as Value\n }\n }\n })\n },\n [setValue, onReset],\n )\n\n useUpdateEffect(() => {\n onReset(!isUndefined(valueProp) ? toArray(valueProp) : undefined)\n\n setValue(valueProp as Value)\n }, [valueProp])\n\n const getGroupProps: PropGetter = useCallback(\n (props) => ({\n \"data-disabled\": dataAttr(disabled),\n \"data-readonly\": dataAttr(readOnly),\n role: \"group\",\n ...rest,\n ...props,\n }),\n [disabled, readOnly, rest],\n )\n\n return { disabled, readOnly, value, getGroupProps, onChange, onChangeMapRef }\n}\n\nexport type UseToggleGroupReturn = ReturnType<typeof useToggleGroup>\n"],"mappings":";;;;;;;;;;AAuBA,MAAM,CAAC,oBAAoB,yBACzBA,8BAAkC;CAChC,MAAM;CACN,QAAQ;CACT,CAAC;AAiCJ,MAAa,kBAAwD,EACnE,cACA,UACA,UACA,OAAO,WACP,UAAU,cACV,GAAG,WACyB;CAG5B,MAAM,mDACJ,IAAI,KAAK,CACV;CACD,MAAM,CAAC,OAAO,YAAYC,gEAA4B;EACpD;EACA,OAAO;EACP,UAAU;EACX,CAAC;CAEF,MAAM,kCAAuB,gBAA2B;AACtD,iBAAe,QAAQ,SAAS,YAAU,YAAU;AAClD,OAAI,aAAa,SAASC,QAAM,CAC9B,YAAS,KAAK;OAEd,YAAS,MAAM;IAEjB;IACD,EAAE,CAAC;CAEN,MAAM,mCAEF,YACG;AACH,yDAAgBA,QAAM,CAAE;AAExB,YAAU,SAAS;AACjB,sDAAY,KAAK,CAGf,KAFiB,KAAK,SAASA,QAAM,EAEvB;IACZ,MAAM,YAAY,KAAK,QAAQ,cAAc,cAAcA,QAAM;AAEjE,YAAQ,UAAU;AAElB,WAAO;UACF;IACL,MAAM,YAAY,CAAC,GAAG,MAAMA,QAAM;AAElC,YAAQ,UAAU;AAElB,WAAO;;YAGL,OAAOA,QAAM,KAAK,MAAM;AAC1B,aAAS;AAET;UACK;AACL,YAAQ,CAACA,QAAM,CAAC;AAEhB,WAAOA;;IAGX;IAEJ,CAAC,UAAU,QAAQ,CACpB;AAED,sCAAsB;AACpB,UAAQ,oDAAa,UAAU,kDAAW,UAAU,GAAG,OAAU;AAEjE,WAAS,UAAmB;IAC3B,CAAC,UAAU,CAAC;AAaf,QAAO;EAAE;EAAU;EAAU;EAAO,uCAVjC,WAAW;GACV,iEAA0B,SAAS;GACnC,iEAA0B,SAAS;GACnC,MAAM;GACN,GAAG;GACH,GAAG;GACJ,GACD;GAAC;GAAU;GAAU;GAAK,CAC3B;EAEkD;EAAU;EAAgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"calc.cjs","names":["isCSSFunction","isCSSToken","globalValues","getCSSFunction","splitValues","value"],"sources":["../../../../src/core/css/calc.ts"],"sourcesContent":["import type { ThemeToken } from \"../system\"\nimport type { Transform } from \"./utils\"\nimport { isNumeric } from \"../../utils\"\nimport {\n getCSSFunction,\n globalValues,\n isCSSFunction,\n isCSSToken,\n splitValues,\n} from \"./utils\"\n\nconst OPERATORS = [\"+\", \"-\", \"*\", \"/\"]\n\nfunction getValue(value: string | undefined, fallbackValue = \"\"): Transform {\n return function (token, { system, ...rest }) {\n if (!value) return fallbackValue\n\n const prevent = isCSSFunction(value)\n\n if (prevent) {\n return generateCalc(token)(value, { system, ...rest })\n } else {\n if (isNumeric(value)) return value\n\n const resolvedToken = `${token}.${value}`\n\n if (isCSSToken(system)(resolvedToken)) {\n return system.cssMap![resolvedToken]!.ref\n } else {\n return value\n }\n }\n }\n}\n\nfunction isOperator(value: string) {\n return new RegExp(`\\\\s[${OPERATORS.join(\"\\\\\")}]\\\\s`).test(value)\n}\n\nexport function generateCalc(token: ThemeToken): Transform {\n return function (value, options) {\n if (value == null || globalValues.has(value)) return value\n\n const prevent = isCSSFunction(value)\n\n if (!prevent) return value\n\n let { type, values } = getCSSFunction(value)\n\n if (!type || !values) return value\n\n switch (type) {\n case \"calc\": {\n const computedValues = splitValues(\n values,\n (char, prev, next) => isOperator(`${prev}${char}${next}`),\n true,\n ).map((value) => {\n if (value && OPERATORS.includes(value)) return value\n\n return getValue(value)(token, options)\n })\n\n return `calc(${computedValues.join(\" \")})`\n }\n\n case \"min\":\n case \"max\": {\n let [firstValue, secondValue, ...otherValues] = splitValues(values)\n\n firstValue = getValue(firstValue, \"100%\")(token, options)\n secondValue = getValue(secondValue, \"100%\")(token, options)\n otherValues = otherValues.map((value) =>\n getValue(value)(token, options),\n )\n\n return (\n `${type}(` +\n `${firstValue}, ${secondValue}` +\n (otherValues.length ? `, ${otherValues.join(\", \")}` : \"\") +\n \")\"\n )\n }\n\n case \"clamp\": {\n let [min, preferred, max] = splitValues(values)\n\n if (!max) {\n max = preferred\n preferred = \"\"\n }\n\n min = getValue(min)(token, options)\n preferred = getValue(preferred, \"100%\")(token, options)\n max = getValue(max)(token, options)\n\n return `clamp(${min}, ${preferred}, ${max})`\n }\n\n case \"minmax\": {\n let [min, max] = splitValues(values)\n\n min = getValue(min)(token, options)\n max = getValue(max)(token, options)\n\n return `minmax(${min}, ${max})`\n }\n\n case \"fit-content\": {\n let [value] = splitValues(values)\n\n value = getValue(value)(token, options)\n\n return `fit-content(${value})`\n }\n\n default:\n return value\n }\n }\n}\n"],"mappings":";;;;AAWA,MAAM,YAAY;CAAC;CAAK;CAAK;CAAK;CAAI;AAEtC,SAAS,SAAS,OAA2B,gBAAgB,IAAe;AAC1E,QAAO,SAAU,OAAO,EAAE,QAAQ,GAAG,QAAQ;AAC3C,MAAI,CAAC,MAAO,QAAO;AAInB,MAFgBA,4BAAc,MAAM,CAGlC,QAAO,aAAa,MAAM,CAAC,OAAO;GAAE;GAAQ,GAAG;GAAM,CAAC;OACjD;AACL,wDAAc,MAAM,CAAE,QAAO;GAE7B,MAAM,gBAAgB,GAAG,MAAM,GAAG;AAElC,OAAIC,yBAAW,OAAO,CAAC,cAAc,CACnC,QAAO,OAAO,OAAQ,eAAgB;OAEtC,QAAO;;;;AAMf,SAAS,WAAW,OAAe;AACjC,yBAAO,IAAI,OAAO,OAAO,UAAU,KAAK,KAAK,CAAC,MAAM,EAAC,KAAK,MAAM;;AAGlE,SAAgB,aAAa,OAA8B;AACzD,QAAO,SAAU,OAAO,SAAS;AAC/B,MAAI,SAAS,QAAQC,2BAAa,IAAI,MAAM,CAAE,QAAO;AAIrD,MAAI,CAFYF,4BAAc,MAAM,CAEtB,QAAO;EAErB,IAAI,EAAE,MAAM,WAAWG,6BAAe,MAAM;AAE5C,MAAI,CAAC,QAAQ,CAAC,OAAQ,QAAO;AAE7B,UAAQ,MAAR;GACE,KAAK,OAWH,QAAO,QAVgBC,0BACrB,SACC,MAAM,MAAM,SAAS,WAAW,GAAG,OAAO,OAAO,OAAO,EACzD,KACD,CAAC,KAAK,YAAU;AACf,QAAIC,WAAS,UAAU,SAASA,QAAM,CAAE,QAAOA;AAE/C,WAAO,SAASA,QAAM,CAAC,OAAO,QAAQ;KACtC,CAE4B,KAAK,IAAI,CAAC;GAG1C,KAAK;GACL,KAAK,OAAO;IACV,IAAI,CAAC,YAAY,aAAa,GAAG,eAAeD,0BAAY,OAAO;AAEnE,iBAAa,SAAS,YAAY,OAAO,CAAC,OAAO,QAAQ;AACzD,kBAAc,SAAS,aAAa,OAAO,CAAC,OAAO,QAAQ;AAC3D,kBAAc,YAAY,KAAK,YAC7B,SAASC,QAAM,CAAC,OAAO,QAAQ,CAChC;AAED,WACE,GAAG,KAAK,GACL,WAAW,IAAI,iBACjB,YAAY,SAAS,KAAK,YAAY,KAAK,KAAK,KAAK,MACtD;;GAIJ,KAAK,SAAS;IACZ,IAAI,CAAC,KAAK,WAAW,OAAOD,0BAAY,OAAO;AAE/C,QAAI,CAAC,KAAK;AACR,WAAM;AACN,iBAAY;;AAGd,UAAM,SAAS,IAAI,CAAC,OAAO,QAAQ;AACnC,gBAAY,SAAS,WAAW,OAAO,CAAC,OAAO,QAAQ;AACvD,UAAM,SAAS,IAAI,CAAC,OAAO,QAAQ;AAEnC,WAAO,SAAS,IAAI,IAAI,UAAU,IAAI,IAAI;;GAG5C,KAAK,UAAU;IACb,IAAI,CAAC,KAAK,OAAOA,0BAAY,OAAO;AAEpC,UAAM,SAAS,IAAI,CAAC,OAAO,QAAQ;AACnC,UAAM,SAAS,IAAI,CAAC,OAAO,QAAQ;AAEnC,WAAO,UAAU,IAAI,IAAI,IAAI;;GAG/B,KAAK,eAAe;IAClB,IAAI,CAACC,WAASD,0BAAY,OAAO;AAEjC,cAAQ,SAASC,QAAM,CAAC,OAAO,QAAQ;AAEvC,WAAO,eAAeA,QAAM;;GAG9B,QACE,QAAO"}
1
+ {"version":3,"file":"calc.cjs","names":["isCSSFunction","isCSSToken","globalValues","getCSSFunction","splitValues","value"],"sources":["../../../../src/core/css/calc.ts"],"sourcesContent":["import type { ThemeToken } from \"../system\"\nimport type { Transform } from \"./utils\"\nimport { isNumeric } from \"../../utils\"\nimport {\n getCSSFunction,\n globalValues,\n isCSSFunction,\n isCSSToken,\n splitValues,\n} from \"./utils\"\n\nconst OPERATORS = [\"+\", \"-\", \"*\", \"/\"]\n\nfunction getValue(value: string | undefined, fallbackValue = \"\"): Transform {\n return function (token, { system, ...rest }) {\n if (!value) return fallbackValue\n\n const prevent = isCSSFunction(value)\n\n if (prevent) {\n return generateCalc(token)(value, { system, ...rest })\n } else {\n if (isNumeric(value)) return value\n\n const resolvedToken = `${token}.${value}`\n\n if (isCSSToken(system)(resolvedToken)) {\n return system.cssMap[resolvedToken]!.ref\n } else {\n return value\n }\n }\n }\n}\n\nfunction isOperator(value: string) {\n return new RegExp(`\\\\s[${OPERATORS.join(\"\\\\\")}]\\\\s`).test(value)\n}\n\nexport function generateCalc(token: ThemeToken): Transform {\n return function (value, options) {\n if (value == null || globalValues.has(value)) return value\n\n const prevent = isCSSFunction(value)\n\n if (!prevent) return value\n\n let { type, values } = getCSSFunction(value)\n\n if (!type || !values) return value\n\n switch (type) {\n case \"calc\": {\n const computedValues = splitValues(\n values,\n (char, prev, next) => isOperator(`${prev}${char}${next}`),\n true,\n ).map((value) => {\n if (value && OPERATORS.includes(value)) return value\n\n return getValue(value)(token, options)\n })\n\n return `calc(${computedValues.join(\" \")})`\n }\n\n case \"min\":\n case \"max\": {\n let [firstValue, secondValue, ...otherValues] = splitValues(values)\n\n firstValue = getValue(firstValue, \"100%\")(token, options)\n secondValue = getValue(secondValue, \"100%\")(token, options)\n otherValues = otherValues.map((value) =>\n getValue(value)(token, options),\n )\n\n return (\n `${type}(` +\n `${firstValue}, ${secondValue}` +\n (otherValues.length ? `, ${otherValues.join(\", \")}` : \"\") +\n \")\"\n )\n }\n\n case \"clamp\": {\n let [min, preferred, max] = splitValues(values)\n\n if (!max) {\n max = preferred\n preferred = \"\"\n }\n\n min = getValue(min)(token, options)\n preferred = getValue(preferred, \"100%\")(token, options)\n max = getValue(max)(token, options)\n\n return `clamp(${min}, ${preferred}, ${max})`\n }\n\n case \"minmax\": {\n let [min, max] = splitValues(values)\n\n min = getValue(min)(token, options)\n max = getValue(max)(token, options)\n\n return `minmax(${min}, ${max})`\n }\n\n case \"fit-content\": {\n let [value] = splitValues(values)\n\n value = getValue(value)(token, options)\n\n return `fit-content(${value})`\n }\n\n default:\n return value\n }\n }\n}\n"],"mappings":";;;;AAWA,MAAM,YAAY;CAAC;CAAK;CAAK;CAAK;CAAI;AAEtC,SAAS,SAAS,OAA2B,gBAAgB,IAAe;AAC1E,QAAO,SAAU,OAAO,EAAE,QAAQ,GAAG,QAAQ;AAC3C,MAAI,CAAC,MAAO,QAAO;AAInB,MAFgBA,4BAAc,MAAM,CAGlC,QAAO,aAAa,MAAM,CAAC,OAAO;GAAE;GAAQ,GAAG;GAAM,CAAC;OACjD;AACL,wDAAc,MAAM,CAAE,QAAO;GAE7B,MAAM,gBAAgB,GAAG,MAAM,GAAG;AAElC,OAAIC,yBAAW,OAAO,CAAC,cAAc,CACnC,QAAO,OAAO,OAAO,eAAgB;OAErC,QAAO;;;;AAMf,SAAS,WAAW,OAAe;AACjC,yBAAO,IAAI,OAAO,OAAO,UAAU,KAAK,KAAK,CAAC,MAAM,EAAC,KAAK,MAAM;;AAGlE,SAAgB,aAAa,OAA8B;AACzD,QAAO,SAAU,OAAO,SAAS;AAC/B,MAAI,SAAS,QAAQC,2BAAa,IAAI,MAAM,CAAE,QAAO;AAIrD,MAAI,CAFYF,4BAAc,MAAM,CAEtB,QAAO;EAErB,IAAI,EAAE,MAAM,WAAWG,6BAAe,MAAM;AAE5C,MAAI,CAAC,QAAQ,CAAC,OAAQ,QAAO;AAE7B,UAAQ,MAAR;GACE,KAAK,OAWH,QAAO,QAVgBC,0BACrB,SACC,MAAM,MAAM,SAAS,WAAW,GAAG,OAAO,OAAO,OAAO,EACzD,KACD,CAAC,KAAK,YAAU;AACf,QAAIC,WAAS,UAAU,SAASA,QAAM,CAAE,QAAOA;AAE/C,WAAO,SAASA,QAAM,CAAC,OAAO,QAAQ;KACtC,CAE4B,KAAK,IAAI,CAAC;GAG1C,KAAK;GACL,KAAK,OAAO;IACV,IAAI,CAAC,YAAY,aAAa,GAAG,eAAeD,0BAAY,OAAO;AAEnE,iBAAa,SAAS,YAAY,OAAO,CAAC,OAAO,QAAQ;AACzD,kBAAc,SAAS,aAAa,OAAO,CAAC,OAAO,QAAQ;AAC3D,kBAAc,YAAY,KAAK,YAC7B,SAASC,QAAM,CAAC,OAAO,QAAQ,CAChC;AAED,WACE,GAAG,KAAK,GACL,WAAW,IAAI,iBACjB,YAAY,SAAS,KAAK,YAAY,KAAK,KAAK,KAAK,MACtD;;GAIJ,KAAK,SAAS;IACZ,IAAI,CAAC,KAAK,WAAW,OAAOD,0BAAY,OAAO;AAE/C,QAAI,CAAC,KAAK;AACR,WAAM;AACN,iBAAY;;AAGd,UAAM,SAAS,IAAI,CAAC,OAAO,QAAQ;AACnC,gBAAY,SAAS,WAAW,OAAO,CAAC,OAAO,QAAQ;AACvD,UAAM,SAAS,IAAI,CAAC,OAAO,QAAQ;AAEnC,WAAO,SAAS,IAAI,IAAI,UAAU,IAAI,IAAI;;GAG5C,KAAK,UAAU;IACb,IAAI,CAAC,KAAK,OAAOA,0BAAY,OAAO;AAEpC,UAAM,SAAS,IAAI,CAAC,OAAO,QAAQ;AACnC,UAAM,SAAS,IAAI,CAAC,OAAO,QAAQ;AAEnC,WAAO,UAAU,IAAI,IAAI,IAAI;;GAG/B,KAAK,eAAe;IAClB,IAAI,CAACC,WAASD,0BAAY,OAAO;AAEjC,cAAQ,SAASC,QAAM,CAAC,OAAO,QAAQ;AAEvC,WAAO,eAAeA,QAAM;;GAG9B,QACE,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"css.cjs","names":["variableLengthProperties","computedCSS: Dict","conditions","key","getCondition","css","transformInterpolation","value","getColorSchemeVar","colorMix","isCSSToken","getVar","styles","cssOrFn","prev: Dict","options: TransformOptions","isImportant","omitImportant","insertImportant"],"sources":["../../../../src/core/css/css.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type { Breakpoints, System, UsageTheme } from \"../system\"\nimport type { StyleConfig } from \"./config\"\nimport type { CSSObjectOrFunction } from \"./index.types\"\nimport type { StyleProperty, VariableLengthProperty } from \"./styles\"\nimport type { TransformOptions } from \"./utils\"\nimport {\n isArray,\n isObject,\n isString,\n isUndefined,\n merge,\n runIfFn,\n} from \"../../utils\"\nimport { getColorSchemeVar, getVar, transformInterpolation } from \"../system\"\nimport { colorMix } from \"./color-mix\"\nimport { conditions, getCondition } from \"./conditions\"\nimport { styles, variableLengthProperties } from \"./styles\"\nimport {\n insertImportant,\n isCSSToken,\n isImportant,\n omitImportant,\n} from \"./utils\"\n\nfunction isVariableLength(key: string): boolean {\n return variableLengthProperties.includes(key as VariableLengthProperty)\n}\n\nfunction isConditionalObject(breakpoints: Breakpoints) {\n return function (value: any): boolean {\n if (!isObject(value)) return false\n\n const keys = Object.keys(value)\n\n if (!keys.length) return false\n\n if (!keys.includes(\"base\")) return false\n\n return keys.every((key) => {\n return (\n breakpoints.isResponsiveKey(key) ||\n key.startsWith(\"@\") ||\n key.startsWith(\"_\")\n )\n })\n }\n}\n\nfunction transformColorModeArray(breakpoints: Breakpoints) {\n return function (key: string, [lightValue, darkValue]: any[]): Dict {\n let computedCSS: Dict = {}\n\n if (isConditionalObject(breakpoints)(lightValue)) {\n computedCSS = transformConditionalObject(breakpoints)(key, lightValue)\n } else {\n computedCSS[key] = lightValue\n }\n\n if (isConditionalObject(breakpoints)(darkValue)) {\n computedCSS[conditions._dark] = transformConditionalObject(breakpoints)(\n key,\n darkValue,\n )\n } else {\n computedCSS[conditions._dark] = { [key]: darkValue }\n }\n\n return computedCSS\n }\n}\n\nfunction transformConditionalObject(breakpoints: Breakpoints) {\n return function (key: string, value: Dict) {\n const conditionalKeys = Object.keys(value).filter(\n (key) => !breakpoints.isResponsiveKey(key),\n )\n\n const breakpointObj = breakpoints.queries.reduce<Dict>(\n (prev, { breakpoint, query }) => {\n const breakpointValue = value[breakpoint]\n\n if (!isUndefined(breakpointValue)) {\n if (isArray(breakpointValue)) {\n const colorModeValue = transformColorModeArray(breakpoints)(\n key,\n breakpointValue,\n )\n\n prev = merge(\n prev,\n query ? { [query]: colorModeValue } : colorModeValue,\n )\n } else if (isConditionalObject(breakpoints)(breakpointValue)) {\n const conditionalValue = transformConditionalObject(breakpoints)(\n key,\n breakpointValue,\n )\n\n prev = merge(\n prev,\n query ? { [query]: conditionalValue } : conditionalValue,\n )\n } else {\n prev = merge(\n prev,\n query\n ? { [query]: { [key]: breakpointValue } }\n : { [key]: breakpointValue },\n )\n }\n }\n\n return prev\n },\n {},\n )\n\n const additionalObj = conditionalKeys.reduce<Dict>(\n (prev, conditionalKey) => {\n const query = getCondition(conditionalKey)\n\n prev[query] = { [key]: value[conditionalKey] }\n\n return prev\n },\n {},\n )\n\n return merge(breakpointObj, additionalObj)\n }\n}\n\nexport function transformConditionalValue({ breakpoints }: System) {\n return function (key: string, value: any) {\n if (isArray(value)) {\n return transformColorModeArray(breakpoints)(key, value)\n } else if (isConditionalObject(breakpoints)(value)) {\n return transformConditionalObject(breakpoints)(key, value)\n } else {\n return { [key]: value }\n }\n }\n}\n\nfunction expandCSS(system: System) {\n return function (css: Dict): Dict {\n let computedCSS: Dict = {}\n\n for (let [key, value] of Object.entries(css)) {\n if (value == null) continue\n\n if (!isVariableLength(key)) {\n computedCSS = merge(\n computedCSS,\n transformConditionalValue(system)(key, value),\n )\n } else {\n computedCSS = merge(computedCSS, { [key]: value })\n }\n }\n\n return computedCSS\n }\n}\n\nfunction valueToVar(system: System) {\n return function (prop: string, value: any) {\n const result = transformInterpolation(\n value,\n function (value: string, fallbackValue?: string) {\n if (value.includes(\"colorScheme.\")) {\n return getColorSchemeVar(system)(value)\n } else if (value.includes(\"colors.\")) {\n return colorMix(value, { fallback: fallbackValue, system })\n } else if (isCSSToken(system)(value)) {\n return system.cssMap![value]!.ref\n } else if (fallbackValue) {\n fallbackValue = isCSSToken(system)(fallbackValue)\n ? system.cssMap![fallbackValue]!.ref\n : fallbackValue\n\n return getVar(value, fallbackValue)\n } else {\n return getVar(value)\n }\n },\n )\n\n if (prop.startsWith(\"--\") && isString(result)) {\n if (result.includes(\"colorScheme.\")) {\n return getColorSchemeVar(system)(result)\n } else if (result.includes(\"colors.\")) {\n return colorMix(result, { system })\n } else if (isCSSToken(system)(result)) {\n return system.cssMap![result]!.ref\n } else {\n return result\n }\n } else {\n return result\n }\n }\n}\n\nfunction mergeCSS(prev: Dict, value: any, prop: string, properties?: string[]) {\n if (properties) {\n for (const property of properties) {\n prev[property] = prev[property] ?? {}\n prev[property] = merge(prev[property], value)\n }\n } else {\n prev[prop] = prev[prop] ?? {}\n prev[prop] = merge(prev[prop], value)\n }\n\n return prev\n}\n\nfunction insertCSS(\n prev: Dict,\n value: any,\n prop: string,\n properties?: string[],\n) {\n if (properties) {\n for (const property of properties) {\n prev[property] = value\n }\n } else {\n prev[prop] = value\n }\n\n return prev\n}\n\nexport function getStyle(prop: string) {\n const style = styles[prop as StyleProperty] as StyleConfig | true | undefined\n\n return style === true ? { properties: [prop] } : style\n}\n\nexport function css(system: System, theme: UsageTheme = {}) {\n return function (cssOrFn: CSSObjectOrFunction) {\n function createCSS(cssOrFn: CSSObjectOrFunction): Dict {\n const cssObj = runIfFn(cssOrFn, system)\n const computedCSS = expandCSS(system)(cssObj)\n\n let prev: Dict = {}\n\n for (let [prop, value] of Object.entries(computedCSS)) {\n value = valueToVar(system)(prop, value)\n\n if (value == null) continue\n\n prop = getCondition(prop)\n\n const style = getStyle(prop)\n const options: TransformOptions = {\n css,\n prev,\n properties: style?.properties,\n system,\n theme,\n }\n\n if (isObject(value)) {\n value = style?.transform?.(value, options) ?? value\n\n if (isObject(value)) {\n prev = mergeCSS(prev, createCSS(value), prop, style?.properties)\n } else {\n prev = insertCSS(prev, value, prop, style?.properties)\n }\n\n continue\n }\n\n const important = isImportant(value)\n\n value = omitImportant(value)\n value = style?.transform?.(value, options) ?? value\n\n if (important) value = insertImportant(value, style)\n\n if (style?.static) prev = merge(prev, style.static)\n\n if (isObject(value)) {\n prev = merge(prev, createCSS(value))\n\n continue\n }\n\n prev = insertCSS(prev, value, prop, style?.properties)\n }\n\n return prev\n }\n\n return createCSS(cssOrFn)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"css.cjs","names":["variableLengthProperties","computedCSS: Dict","conditions","key","getCondition","css","transformInterpolation","value","getColorSchemeVar","colorMix","isCSSToken","getVar","styles","cssOrFn","prev: Dict","options: TransformOptions","isImportant","omitImportant","insertImportant"],"sources":["../../../../src/core/css/css.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type { Breakpoints, System, UsageTheme } from \"../system\"\nimport type { StyleConfig } from \"./config\"\nimport type { CSSObjectOrFunction } from \"./index.types\"\nimport type { StyleProperty, VariableLengthProperty } from \"./styles\"\nimport type { TransformOptions } from \"./utils\"\nimport {\n isArray,\n isObject,\n isString,\n isUndefined,\n merge,\n runIfFn,\n} from \"../../utils\"\nimport { getColorSchemeVar, getVar, transformInterpolation } from \"../system\"\nimport { colorMix } from \"./color-mix\"\nimport { conditions, getCondition } from \"./conditions\"\nimport { styles, variableLengthProperties } from \"./styles\"\nimport {\n insertImportant,\n isCSSToken,\n isImportant,\n omitImportant,\n} from \"./utils\"\n\nfunction isVariableLength(key: string): boolean {\n return variableLengthProperties.includes(key as VariableLengthProperty)\n}\n\nfunction isConditionalObject(breakpoints: Breakpoints) {\n return function (value: any): boolean {\n if (!isObject(value)) return false\n\n const keys = Object.keys(value)\n\n if (!keys.length) return false\n\n if (!keys.includes(\"base\")) return false\n\n return keys.every((key) => {\n return (\n breakpoints.isResponsiveKey(key) ||\n key.startsWith(\"@\") ||\n key.startsWith(\"_\")\n )\n })\n }\n}\n\nfunction transformColorModeArray(breakpoints: Breakpoints) {\n return function (key: string, [lightValue, darkValue]: any[]): Dict {\n let computedCSS: Dict = {}\n\n if (isConditionalObject(breakpoints)(lightValue)) {\n computedCSS = transformConditionalObject(breakpoints)(key, lightValue)\n } else {\n computedCSS[key] = lightValue\n }\n\n if (isConditionalObject(breakpoints)(darkValue)) {\n computedCSS[conditions._dark] = transformConditionalObject(breakpoints)(\n key,\n darkValue,\n )\n } else {\n computedCSS[conditions._dark] = { [key]: darkValue }\n }\n\n return computedCSS\n }\n}\n\nfunction transformConditionalObject(breakpoints: Breakpoints) {\n return function (key: string, value: Dict) {\n const conditionalKeys = Object.keys(value).filter(\n (key) => !breakpoints.isResponsiveKey(key),\n )\n\n const breakpointObj = breakpoints.queries.reduce<Dict>(\n (prev, { breakpoint, query }) => {\n const breakpointValue = value[breakpoint]\n\n if (!isUndefined(breakpointValue)) {\n if (isArray(breakpointValue)) {\n const colorModeValue = transformColorModeArray(breakpoints)(\n key,\n breakpointValue,\n )\n\n prev = merge(\n prev,\n query ? { [query]: colorModeValue } : colorModeValue,\n )\n } else if (isConditionalObject(breakpoints)(breakpointValue)) {\n const conditionalValue = transformConditionalObject(breakpoints)(\n key,\n breakpointValue,\n )\n\n prev = merge(\n prev,\n query ? { [query]: conditionalValue } : conditionalValue,\n )\n } else {\n prev = merge(\n prev,\n query\n ? { [query]: { [key]: breakpointValue } }\n : { [key]: breakpointValue },\n )\n }\n }\n\n return prev\n },\n {},\n )\n\n const additionalObj = conditionalKeys.reduce<Dict>(\n (prev, conditionalKey) => {\n const query = getCondition(conditionalKey)\n\n prev[query] = { [key]: value[conditionalKey] }\n\n return prev\n },\n {},\n )\n\n return merge(breakpointObj, additionalObj)\n }\n}\n\nexport function transformConditionalValue({ breakpoints }: System) {\n return function (key: string, value: any) {\n if (isArray(value)) {\n return transformColorModeArray(breakpoints)(key, value)\n } else if (isConditionalObject(breakpoints)(value)) {\n return transformConditionalObject(breakpoints)(key, value)\n } else {\n return { [key]: value }\n }\n }\n}\n\nfunction expandCSS(system: System) {\n return function (css: Dict): Dict {\n let computedCSS: Dict = {}\n\n for (let [key, value] of Object.entries(css)) {\n if (value == null) continue\n\n if (!isVariableLength(key)) {\n computedCSS = merge(\n computedCSS,\n transformConditionalValue(system)(key, value),\n )\n } else {\n computedCSS = merge(computedCSS, { [key]: value })\n }\n }\n\n return computedCSS\n }\n}\n\nfunction valueToVar(system: System) {\n return function (prop: string, value: any) {\n const result = transformInterpolation(\n value,\n function (value: string, fallbackValue?: string) {\n if (value.includes(\"colorScheme.\")) {\n return getColorSchemeVar(system)(value)\n } else if (value.includes(\"colors.\")) {\n return colorMix(value, { fallback: fallbackValue, system })\n } else if (isCSSToken(system)(value)) {\n return system.cssMap[value]!.ref\n } else if (fallbackValue) {\n fallbackValue = isCSSToken(system)(fallbackValue)\n ? system.cssMap[fallbackValue]!.ref\n : fallbackValue\n\n return getVar(value, fallbackValue)\n } else {\n return getVar(value)\n }\n },\n )\n\n if (prop.startsWith(\"--\") && isString(result)) {\n if (result.includes(\"colorScheme.\")) {\n return getColorSchemeVar(system)(result)\n } else if (result.includes(\"colors.\")) {\n return colorMix(result, { system })\n } else if (isCSSToken(system)(result)) {\n return system.cssMap[result]!.ref\n } else {\n return result\n }\n } else {\n return result\n }\n }\n}\n\nfunction mergeCSS(prev: Dict, value: any, prop: string, properties?: string[]) {\n if (properties) {\n for (const property of properties) {\n prev[property] = prev[property] ?? {}\n prev[property] = merge(prev[property], value)\n }\n } else {\n prev[prop] = prev[prop] ?? {}\n prev[prop] = merge(prev[prop], value)\n }\n\n return prev\n}\n\nfunction insertCSS(\n prev: Dict,\n value: any,\n prop: string,\n properties?: string[],\n) {\n if (properties) {\n for (const property of properties) {\n prev[property] = value\n }\n } else {\n prev[prop] = value\n }\n\n return prev\n}\n\nexport function getStyle(prop: string) {\n const style = styles[prop as StyleProperty] as StyleConfig | true | undefined\n\n return style === true ? { properties: [prop] } : style\n}\n\nexport function css(system: System, theme: UsageTheme = {}) {\n return function (cssOrFn: CSSObjectOrFunction) {\n function createCSS(cssOrFn: CSSObjectOrFunction): Dict {\n const cssObj = runIfFn(cssOrFn, system)\n const computedCSS = expandCSS(system)(cssObj)\n\n let prev: Dict = {}\n\n for (let [prop, value] of Object.entries(computedCSS)) {\n value = valueToVar(system)(prop, value)\n\n if (value == null) continue\n\n prop = getCondition(prop)\n\n const style = getStyle(prop)\n const options: TransformOptions = {\n css,\n prev,\n properties: style?.properties,\n system,\n theme,\n }\n\n if (isObject(value)) {\n value = style?.transform?.(value, options) ?? value\n\n if (isObject(value)) {\n prev = mergeCSS(prev, createCSS(value), prop, style?.properties)\n } else {\n prev = insertCSS(prev, value, prop, style?.properties)\n }\n\n continue\n }\n\n const important = isImportant(value)\n\n value = omitImportant(value)\n value = style?.transform?.(value, options) ?? value\n\n if (important) value = insertImportant(value, style)\n\n if (style?.static) prev = merge(prev, style.static)\n\n if (isObject(value)) {\n prev = merge(prev, createCSS(value))\n\n continue\n }\n\n prev = insertCSS(prev, value, prop, style?.properties)\n }\n\n return prev\n }\n\n return createCSS(cssOrFn)\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gradient.cjs","names":["directions: { [key: string]: string }","globalValues","isCSSFunction","getCSSFunction","splitValues","isCSSToken"],"sources":["../../../../src/core/css/gradient.ts"],"sourcesContent":["import type { TransformOptions } from \"./utils\"\nimport { isArray, isUndefined } from \"../../utils\"\nimport {\n getCSSFunction,\n globalValues,\n isCSSFunction,\n isCSSToken,\n splitValues,\n} from \"./utils\"\n\nconst directions: { [key: string]: string } = {\n \"to-b\": \"to bottom\",\n \"to-bl\": \"to bottom left\",\n \"to-br\": \"to bottom right\",\n \"to-l\": \"to left\",\n \"to-r\": \"to right\",\n \"to-t\": \"to top\",\n \"to-tl\": \"to top left\",\n \"to-tr\": \"to top right\",\n}\n\nconst directionValues = new Set(Object.values(directions))\n\nexport function gradient(value: any, { system }: TransformOptions) {\n if (value == null || globalValues.has(value)) return value\n\n const prevent = isCSSFunction(value)\n\n if (!prevent) return `url('${value}')`\n\n let { type, values } = getCSSFunction(value)\n\n if (!type || !values) return value\n\n type = type.includes(\"-gradient\") ? type : `${type}-gradient`\n\n const [maybeDirection, ...colors] = splitValues(values)\n\n if (!colors.length) return value\n\n const direction =\n maybeDirection && maybeDirection in directions\n ? directions[maybeDirection]\n : maybeDirection\n\n if (!isUndefined(direction)) colors.unshift(direction)\n\n const computedValues = colors.map((_color) => {\n if (isUndefined(_color)) return _color\n\n if (directionValues.has(_color)) return _color\n\n const i = _color.indexOf(\" \")\n\n let [color, _ratio] =\n i !== -1 ? [_color.slice(0, i), _color.slice(i + 1)] : [_color]\n\n const ratio = isCSSFunction(_ratio) ? _ratio : _ratio?.split(\" \")\n\n const token = `colors.${color}`\n\n color = isCSSToken(system)(token) ? system.cssMap![token]!.ref : color\n\n if (ratio) {\n return [color, ...(isArray(ratio) ? ratio : [ratio])].join(\" \")\n } else {\n return color\n }\n })\n\n return `${type}(${computedValues.join(\", \")})`\n}\n"],"mappings":";;;;AAUA,MAAMA,aAAwC;CAC5C,QAAQ;CACR,SAAS;CACT,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,SAAS;CACV;AAED,MAAM,kBAAkB,IAAI,IAAI,OAAO,OAAO,WAAW,CAAC;AAE1D,SAAgB,SAAS,OAAY,EAAE,UAA4B;AACjE,KAAI,SAAS,QAAQC,2BAAa,IAAI,MAAM,CAAE,QAAO;AAIrD,KAAI,CAFYC,4BAAc,MAAM,CAEtB,QAAO,QAAQ,MAAM;CAEnC,IAAI,EAAE,MAAM,WAAWC,6BAAe,MAAM;AAE5C,KAAI,CAAC,QAAQ,CAAC,OAAQ,QAAO;AAE7B,QAAO,KAAK,SAAS,YAAY,GAAG,OAAO,GAAG,KAAK;CAEnD,MAAM,CAAC,gBAAgB,GAAG,UAAUC,0BAAY,OAAO;AAEvD,KAAI,CAAC,OAAO,OAAQ,QAAO;CAE3B,MAAM,YACJ,kBAAkB,kBAAkB,aAChC,WAAW,kBACX;AAEN,KAAI,oDAAa,UAAU,CAAE,QAAO,QAAQ,UAAU;CAEtD,MAAM,iBAAiB,OAAO,KAAK,WAAW;AAC5C,yDAAgB,OAAO,CAAE,QAAO;AAEhC,MAAI,gBAAgB,IAAI,OAAO,CAAE,QAAO;EAExC,MAAM,IAAI,OAAO,QAAQ,IAAI;EAE7B,IAAI,CAAC,OAAO,UACV,MAAM,KAAK,CAAC,OAAO,MAAM,GAAG,EAAE,EAAE,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO;EAEjE,MAAM,QAAQF,4BAAc,OAAO,GAAG,SAAS,QAAQ,MAAM,IAAI;EAEjE,MAAM,QAAQ,UAAU;AAExB,UAAQG,yBAAW,OAAO,CAAC,MAAM,GAAG,OAAO,OAAQ,OAAQ,MAAM;AAEjE,MAAI,MACF,QAAO,CAAC,OAAO,kDAAY,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAE,CAAC,KAAK,IAAI;MAE/D,QAAO;GAET;AAEF,QAAO,GAAG,KAAK,GAAG,eAAe,KAAK,KAAK,CAAC"}
1
+ {"version":3,"file":"gradient.cjs","names":["directions: { [key: string]: string }","globalValues","isCSSFunction","getCSSFunction","splitValues","isCSSToken"],"sources":["../../../../src/core/css/gradient.ts"],"sourcesContent":["import type { TransformOptions } from \"./utils\"\nimport { isArray, isUndefined } from \"../../utils\"\nimport {\n getCSSFunction,\n globalValues,\n isCSSFunction,\n isCSSToken,\n splitValues,\n} from \"./utils\"\n\nconst directions: { [key: string]: string } = {\n \"to-b\": \"to bottom\",\n \"to-bl\": \"to bottom left\",\n \"to-br\": \"to bottom right\",\n \"to-l\": \"to left\",\n \"to-r\": \"to right\",\n \"to-t\": \"to top\",\n \"to-tl\": \"to top left\",\n \"to-tr\": \"to top right\",\n}\n\nconst directionValues = new Set(Object.values(directions))\n\nexport function gradient(value: any, { system }: TransformOptions) {\n if (value == null || globalValues.has(value)) return value\n\n const prevent = isCSSFunction(value)\n\n if (!prevent) return `url('${value}')`\n\n let { type, values } = getCSSFunction(value)\n\n if (!type || !values) return value\n\n type = type.includes(\"-gradient\") ? type : `${type}-gradient`\n\n const [maybeDirection, ...colors] = splitValues(values)\n\n if (!colors.length) return value\n\n const direction =\n maybeDirection && maybeDirection in directions\n ? directions[maybeDirection]\n : maybeDirection\n\n if (!isUndefined(direction)) colors.unshift(direction)\n\n const computedValues = colors.map((_color) => {\n if (isUndefined(_color)) return _color\n\n if (directionValues.has(_color)) return _color\n\n const i = _color.indexOf(\" \")\n\n let [color, _ratio] =\n i !== -1 ? [_color.slice(0, i), _color.slice(i + 1)] : [_color]\n\n const ratio = isCSSFunction(_ratio) ? _ratio : _ratio?.split(\" \")\n\n const token = `colors.${color}`\n\n color = isCSSToken(system)(token) ? system.cssMap[token]!.ref : color\n\n if (ratio) {\n return [color, ...(isArray(ratio) ? ratio : [ratio])].join(\" \")\n } else {\n return color\n }\n })\n\n return `${type}(${computedValues.join(\", \")})`\n}\n"],"mappings":";;;;AAUA,MAAMA,aAAwC;CAC5C,QAAQ;CACR,SAAS;CACT,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,SAAS;CACV;AAED,MAAM,kBAAkB,IAAI,IAAI,OAAO,OAAO,WAAW,CAAC;AAE1D,SAAgB,SAAS,OAAY,EAAE,UAA4B;AACjE,KAAI,SAAS,QAAQC,2BAAa,IAAI,MAAM,CAAE,QAAO;AAIrD,KAAI,CAFYC,4BAAc,MAAM,CAEtB,QAAO,QAAQ,MAAM;CAEnC,IAAI,EAAE,MAAM,WAAWC,6BAAe,MAAM;AAE5C,KAAI,CAAC,QAAQ,CAAC,OAAQ,QAAO;AAE7B,QAAO,KAAK,SAAS,YAAY,GAAG,OAAO,GAAG,KAAK;CAEnD,MAAM,CAAC,gBAAgB,GAAG,UAAUC,0BAAY,OAAO;AAEvD,KAAI,CAAC,OAAO,OAAQ,QAAO;CAE3B,MAAM,YACJ,kBAAkB,kBAAkB,aAChC,WAAW,kBACX;AAEN,KAAI,oDAAa,UAAU,CAAE,QAAO,QAAQ,UAAU;CAEtD,MAAM,iBAAiB,OAAO,KAAK,WAAW;AAC5C,yDAAgB,OAAO,CAAE,QAAO;AAEhC,MAAI,gBAAgB,IAAI,OAAO,CAAE,QAAO;EAExC,MAAM,IAAI,OAAO,QAAQ,IAAI;EAE7B,IAAI,CAAC,OAAO,UACV,MAAM,KAAK,CAAC,OAAO,MAAM,GAAG,EAAE,EAAE,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO;EAEjE,MAAM,QAAQF,4BAAc,OAAO,GAAG,SAAS,QAAQ,MAAM,IAAI;EAEjE,MAAM,QAAQ,UAAU;AAExB,UAAQG,yBAAW,OAAO,CAAC,MAAM,GAAG,OAAO,OAAO,OAAQ,MAAM;AAEhE,MAAI,MACF,QAAO,CAAC,OAAO,kDAAY,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAE,CAAC,KAAK,IAAI;MAE/D,QAAO;GAET;AAEF,QAAO,GAAG,KAAK,GAAG,eAAe,KAAK,KAAK,CAAC"}