torch-glare 2.4.0 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/README.md +8 -0
  2. package/apps/lib/components/ActionButton.tsx +7 -12
  3. package/apps/lib/components/ActionsGroup.tsx +4 -15
  4. package/apps/lib/components/AlertDialog.tsx +173 -191
  5. package/apps/lib/components/Avatar.tsx +13 -16
  6. package/apps/lib/components/Badge.tsx +1 -3
  7. package/apps/lib/components/BadgeField.tsx +76 -71
  8. package/apps/lib/components/Breadcrumb.tsx +49 -85
  9. package/apps/lib/components/Button.tsx +20 -19
  10. package/apps/lib/components/ButtonGroup.tsx +31 -41
  11. package/apps/lib/components/Calendar.tsx +51 -29
  12. package/apps/lib/components/Card.tsx +2 -13
  13. package/apps/lib/components/ChartBlockTool.ts +17 -52
  14. package/apps/lib/components/Checkbox.tsx +9 -16
  15. package/apps/lib/components/ContextMenu.tsx +97 -96
  16. package/apps/lib/components/CountBadge.tsx +4 -6
  17. package/apps/lib/components/DataTable.tsx +196 -216
  18. package/apps/lib/components/DataViews/DataViewRadio.tsx +1 -6
  19. package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +13 -47
  20. package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
  21. package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
  22. package/apps/lib/components/DataViews/FilterPanel.tsx +155 -149
  23. package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
  24. package/apps/lib/components/DataViews/InboxView.tsx +22 -68
  25. package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
  26. package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
  27. package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
  28. package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
  29. package/apps/lib/components/DataViews/TableView.tsx +8 -28
  30. package/apps/lib/components/DataViews/TreeView.tsx +12 -40
  31. package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
  32. package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
  33. package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +30 -23
  34. package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
  35. package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
  36. package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
  37. package/apps/lib/components/DataViews/index.ts +26 -26
  38. package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
  39. package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
  40. package/apps/lib/components/DataViews/types.ts +104 -115
  41. package/apps/lib/components/DatePicker.tsx +198 -196
  42. package/apps/lib/components/Dialog.tsx +92 -105
  43. package/apps/lib/components/Divider.tsx +21 -24
  44. package/apps/lib/components/Drawer.tsx +79 -139
  45. package/apps/lib/components/DropdownMenu.tsx +131 -171
  46. package/apps/lib/components/FieldHint.tsx +4 -11
  47. package/apps/lib/components/Form.tsx +146 -155
  48. package/apps/lib/components/FormStepper.tsx +9 -39
  49. package/apps/lib/components/HeaderBar.tsx +1 -9
  50. package/apps/lib/components/ImageAttachment.tsx +111 -73
  51. package/apps/lib/components/InnerLabelField.tsx +20 -16
  52. package/apps/lib/components/Input.tsx +171 -172
  53. package/apps/lib/components/InputField.tsx +44 -45
  54. package/apps/lib/components/InputOTP.tsx +68 -69
  55. package/apps/lib/components/Label.tsx +31 -35
  56. package/apps/lib/components/LabelField.tsx +4 -5
  57. package/apps/lib/components/LabeledCheckBox.tsx +8 -12
  58. package/apps/lib/components/LabeledRadio.tsx +7 -5
  59. package/apps/lib/components/LinkButton.tsx +2 -9
  60. package/apps/lib/components/LoginButton.tsx +4 -9
  61. package/apps/lib/components/PasswordLevel.tsx +5 -5
  62. package/apps/lib/components/Popover.tsx +15 -33
  63. package/apps/lib/components/ProfileMenu.tsx +67 -72
  64. package/apps/lib/components/Radio.tsx +1 -5
  65. package/apps/lib/components/RadioCard.tsx +9 -28
  66. package/apps/lib/components/ScrollArea.tsx +45 -43
  67. package/apps/lib/components/SearchField.tsx +49 -39
  68. package/apps/lib/components/SearchableSelect.tsx +8 -14
  69. package/apps/lib/components/SearchableTable.tsx +108 -118
  70. package/apps/lib/components/SearchableTree.tsx +469 -0
  71. package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
  72. package/apps/lib/components/SectionBlock.tsx +4 -16
  73. package/apps/lib/components/Select.tsx +53 -80
  74. package/apps/lib/components/SimpleSelect.tsx +196 -187
  75. package/apps/lib/components/Skeleton.tsx +9 -12
  76. package/apps/lib/components/SlideDatePicker.tsx +215 -166
  77. package/apps/lib/components/SpinLoading.tsx +33 -49
  78. package/apps/lib/components/Stepper.tsx +13 -56
  79. package/apps/lib/components/Switch.tsx +8 -10
  80. package/apps/lib/components/TabFormItem.tsx +3 -12
  81. package/apps/lib/components/TabSwitch.tsx +7 -34
  82. package/apps/lib/components/Table.tsx +60 -75
  83. package/apps/lib/components/TableDnDWrapper.ts +15 -48
  84. package/apps/lib/components/TextEditor.tsx +93 -104
  85. package/apps/lib/components/Textarea.tsx +8 -12
  86. package/apps/lib/components/Timeline.tsx +21 -41
  87. package/apps/lib/components/Toast.tsx +83 -83
  88. package/apps/lib/components/Toggle.tsx +112 -114
  89. package/apps/lib/components/ToggleButton.tsx +1 -1
  90. package/apps/lib/components/Tooltip.tsx +24 -19
  91. package/apps/lib/components/TransparentLabel.tsx +61 -62
  92. package/apps/lib/components/TreeDropDown.tsx +86 -52
  93. package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
  94. package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
  95. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
  96. package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
  97. package/apps/lib/components/TreeFolder/icons.tsx +14 -17
  98. package/apps/lib/components/TreeFolder/index.ts +15 -8
  99. package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
  100. package/apps/lib/components/TreeFolder/types.ts +32 -32
  101. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
  102. package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
  103. package/apps/lib/hooks/useClickOutside.ts +21 -20
  104. package/apps/lib/hooks/useDataViewsState.ts +86 -80
  105. package/apps/lib/hooks/useIsMobile.ts +12 -12
  106. package/apps/lib/hooks/useResize.ts +54 -65
  107. package/apps/lib/hooks/useTagSelection.ts +201 -201
  108. package/apps/lib/layouts/CNLayout.tsx +181 -140
  109. package/apps/lib/layouts/DataViewCard.tsx +4 -18
  110. package/apps/lib/layouts/FieldSection.tsx +2 -6
  111. package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
  112. package/apps/lib/providers/ThemeProvider.tsx +8 -23
  113. package/apps/lib/registry.json +1004 -0
  114. package/apps/lib/tsconfig.json +9 -0
  115. package/apps/lib/utils/cn.ts +1 -1
  116. package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
  117. package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
  118. package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
  119. package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
  120. package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
  121. package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
  122. package/apps/lib/utils/dateFormat.ts +64 -54
  123. package/apps/lib/utils/markdownParser.ts +2 -7
  124. package/apps/lib/utils/resize.ts +21 -25
  125. package/apps/lib/utils/types.ts +13 -13
  126. package/dist/bin/index.js +8 -2
  127. package/dist/bin/index.js.map +1 -1
  128. package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
  129. package/dist/src/shared/getAvailableFiles.js +6 -1
  130. package/dist/src/shared/getAvailableFiles.js.map +1 -1
  131. package/dist/src/shared/loadRegistry.d.ts +7 -0
  132. package/dist/src/shared/loadRegistry.d.ts.map +1 -0
  133. package/dist/src/shared/loadRegistry.js +31 -0
  134. package/dist/src/shared/loadRegistry.js.map +1 -0
  135. package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
  136. package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
  137. package/dist/src/shared/resolveInstallPlan.js +39 -0
  138. package/dist/src/shared/resolveInstallPlan.js.map +1 -0
  139. package/dist/src/types/main.d.ts +24 -0
  140. package/dist/src/types/main.d.ts.map +1 -1
  141. package/docs/README.md +10 -2
  142. package/docs/components/action-button.md +30 -24
  143. package/docs/components/actions-group.md +26 -20
  144. package/docs/components/alert-dialog.md +45 -45
  145. package/docs/components/avatar.md +6 -2
  146. package/docs/components/badge-field.md +6 -2
  147. package/docs/components/badge.md +7 -1
  148. package/docs/components/breadcrumb.md +15 -40
  149. package/docs/components/button-group.md +13 -10
  150. package/docs/components/button.md +58 -33
  151. package/docs/components/calendar.md +26 -19
  152. package/docs/components/card.md +19 -16
  153. package/docs/components/chart-block-tool.md +128 -0
  154. package/docs/components/checkbox.md +16 -8
  155. package/docs/components/cn-layout.md +7 -1
  156. package/docs/components/context-menu.md +18 -25
  157. package/docs/components/count-badge.md +7 -1
  158. package/docs/components/data-table.md +45 -33
  159. package/docs/components/data-views-config-panel.md +15 -11
  160. package/docs/components/data-views-layout.md +13 -16
  161. package/docs/components/date-picker.md +30 -23
  162. package/docs/components/dialog.md +43 -42
  163. package/docs/components/divider.md +10 -4
  164. package/docs/components/drawer.md +8 -33
  165. package/docs/components/dropdown-menu.md +25 -34
  166. package/docs/components/field-hint.md +37 -25
  167. package/docs/components/field-section.md +9 -3
  168. package/docs/components/form-stepper.md +6 -0
  169. package/docs/components/form.md +17 -20
  170. package/docs/components/header-bar.md +6 -0
  171. package/docs/components/image-attachment.md +33 -41
  172. package/docs/components/inbox-view.md +16 -5
  173. package/docs/components/inner-label-field.md +34 -24
  174. package/docs/components/input-field.md +18 -10
  175. package/docs/components/input-otp.md +14 -11
  176. package/docs/components/input.md +22 -16
  177. package/docs/components/kanban-view.md +15 -5
  178. package/docs/components/label-field.md +32 -22
  179. package/docs/components/label.md +43 -32
  180. package/docs/components/labeled-check-box.md +16 -8
  181. package/docs/components/labeled-radio.md +18 -11
  182. package/docs/components/link-button.md +7 -1
  183. package/docs/components/login-button.md +8 -2
  184. package/docs/components/password-level.md +37 -24
  185. package/docs/components/popover.md +26 -23
  186. package/docs/components/profile-menu.md +38 -27
  187. package/docs/components/radio-card.md +16 -9
  188. package/docs/components/radio.md +16 -8
  189. package/docs/components/scroll-area.md +6 -2
  190. package/docs/components/search-field.md +14 -6
  191. package/docs/components/searchable-select.md +19 -14
  192. package/docs/components/searchable-table.md +18 -13
  193. package/docs/components/searchable-tree-dialog.md +190 -0
  194. package/docs/components/searchable-tree.md +200 -0
  195. package/docs/components/section-block.md +12 -4
  196. package/docs/components/select.md +23 -18
  197. package/docs/components/simple-select.md +14 -10
  198. package/docs/components/skeleton.md +43 -33
  199. package/docs/components/slide-date-picker.md +37 -29
  200. package/docs/components/spin-loading.md +32 -23
  201. package/docs/components/stepper.md +6 -0
  202. package/docs/components/switch.md +14 -6
  203. package/docs/components/tab-form-item.md +7 -1
  204. package/docs/components/tab-switch.md +13 -6
  205. package/docs/components/table-dnd-wrapper.md +105 -0
  206. package/docs/components/table-view.md +15 -5
  207. package/docs/components/table.md +28 -28
  208. package/docs/components/text-editor.md +19 -13
  209. package/docs/components/textarea.md +15 -7
  210. package/docs/components/timeline.md +6 -0
  211. package/docs/components/toast.md +35 -26
  212. package/docs/components/toggle-button.md +24 -21
  213. package/docs/components/toggle.md +23 -15
  214. package/docs/components/tooltip.md +42 -30
  215. package/docs/components/transparent-label.md +29 -20
  216. package/docs/components/tree-drop-down.md +31 -23
  217. package/docs/components/tree-sub-layout.md +6 -2
  218. package/docs/components/tree-view.md +16 -5
  219. package/docs/explanation/architecture.md +54 -0
  220. package/docs/explanation/design-system.md +52 -0
  221. package/docs/how-to/data-views-from-backend-response.md +6 -4
  222. package/docs/how-to/guides.md +24 -18
  223. package/docs/migration/changelog.md +38 -0
  224. package/docs/reference/cli.md +87 -0
  225. package/docs/reference/components.md +11 -12
  226. package/docs/reference/hooks.md +8 -8
  227. package/docs/reference/providers.md +22 -22
  228. package/docs/reference/tailwind-plugins.md +2 -2
  229. package/docs/reference/theme.md +85 -0
  230. package/docs/reference/types.md +4 -4
  231. package/docs/reference/utilities.md +19 -26
  232. package/docs/tutorials/building-first-form.md +20 -13
  233. package/docs/tutorials/component-composition.md +34 -50
  234. package/docs/tutorials/getting-started.md +2 -2
  235. package/docs/tutorials/theming-basics.md +13 -10
  236. package/package.json +31 -3
  237. package/dist/src/commands/block.d.ts +0 -5
  238. package/dist/src/commands/block.d.ts.map +0 -1
  239. package/dist/src/commands/block.js +0 -255
  240. package/dist/src/commands/block.js.map +0 -1
  241. package/dist/src/shared/configureFonts.d.ts +0 -6
  242. package/dist/src/shared/configureFonts.d.ts.map +0 -1
  243. package/dist/src/shared/configureFonts.js +0 -106
  244. package/dist/src/shared/configureFonts.js.map +0 -1
  245. package/dist/src/shared/configureGlobalCss.d.ts +0 -6
  246. package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
  247. package/dist/src/shared/configureGlobalCss.js +0 -154
  248. package/dist/src/shared/configureGlobalCss.js.map +0 -1
  249. package/dist/src/shared/configureTailwind.d.ts +0 -7
  250. package/dist/src/shared/configureTailwind.d.ts.map +0 -1
  251. package/dist/src/shared/configureTailwind.js +0 -163
  252. package/dist/src/shared/configureTailwind.js.map +0 -1
  253. package/dist/src/shared/detectFramework.d.ts +0 -23
  254. package/dist/src/shared/detectFramework.d.ts.map +0 -1
  255. package/dist/src/shared/detectFramework.js +0 -119
  256. package/dist/src/shared/detectFramework.js.map +0 -1
  257. package/dist/src/shared/installBaseUtils.d.ts +0 -5
  258. package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
  259. package/dist/src/shared/installBaseUtils.js +0 -79
  260. package/dist/src/shared/installBaseUtils.js.map +0 -1
  261. package/dist/src/shared/resolveAliases.d.ts +0 -24
  262. package/dist/src/shared/resolveAliases.d.ts.map +0 -1
  263. package/dist/src/shared/resolveAliases.js +0 -98
  264. package/dist/src/shared/resolveAliases.js.map +0 -1
@@ -1,13 +1,12 @@
1
1
  import React, {
2
- useState,
3
- forwardRef,
4
- ForwardedRef,
5
- HTMLAttributes,
6
- useEffect,
7
- cloneElement,
8
- isValidElement,
9
- useRef,
10
- Ref,
2
+ useState,
3
+ forwardRef,
4
+ ForwardedRef,
5
+ HTMLAttributes,
6
+ useEffect,
7
+ cloneElement,
8
+ isValidElement,
9
+ useRef,
11
10
  } from "react";
12
11
  import { Popover, PopoverContent, PopoverTrigger } from "./Popover";
13
12
  import { Calendar } from "./Calendar";
@@ -16,213 +15,216 @@ import { DateRange } from "react-day-picker";
16
15
  import Picker from "torch-react-mobile-picker";
17
16
 
18
17
  import {
19
- applyTimeToDateValue,
20
- formatDateValueToString,
21
- TimePickerValue,
18
+ applyTimeToDateValue,
19
+ formatDateValueToString,
20
+ TimePickerValue,
22
21
  } from "../utils/dateFormat";
23
22
  import { InputField } from "./InputField";
24
23
 
25
24
  export type CalendarProps = React.ComponentProps<typeof Calendar>;
26
25
 
27
26
  interface DatePickerProps extends HTMLAttributes<HTMLInputElement> {
28
- mode?: "single" | "multiple" | "range";
29
- selected?: Date | Date[] | DateRange | undefined;
30
- min?: number;
31
- max?: number;
32
- size?: "M" | "S";
33
- showWeekNumber?: boolean;
34
- captionLayout?: "dropdown" | "label" | "dropdown-months" | "dropdown-years";
35
- dateFormat?: string;
36
- calendarProps?: CalendarProps;
37
- timePicker?: boolean;
38
- value?: any;
27
+ mode?: "single" | "multiple" | "range";
28
+ selected?: Date | Date[] | DateRange | undefined;
29
+ min?: number;
30
+ max?: number;
31
+ size?: "M" | "S";
32
+ showWeekNumber?: boolean;
33
+ captionLayout?: "dropdown" | "label" | "dropdown-months" | "dropdown-years";
34
+ dateFormat?: string;
35
+ calendarProps?: CalendarProps;
36
+ timePicker?: boolean;
37
+ value?: Date | Date[] | DateRange;
39
38
  }
40
39
 
41
40
  export const DatePicker = forwardRef(
42
- (
43
- {
44
- size = "M",
45
- min,
46
- max,
47
- mode = "single",
48
- onChange,
49
- showWeekNumber = false,
50
- captionLayout = "dropdown",
51
- dateFormat = "yyyy/MM/dd",
52
- calendarProps,
53
- timePicker = false,
54
- children,
55
- value = new Date(),
56
- ...props
57
- }: DatePickerProps,
58
- ref: ForwardedRef<HTMLInputElement>
59
- ) => {
60
- const initialDate =
61
- mode == "multiple"
62
- ? Array.isArray(value)
63
- ? value
64
- : [value]
65
- : mode == "range"
66
- // Accept a DateRange ({ from, to }) directly, or wrap a single
67
- // Date into a one-day range.
68
- ? value && typeof value === "object" && !(value instanceof Date) &&
69
- ("from" in value || "to" in value)
70
- ? (value as DateRange)
71
- : { from: value, to: value }
72
- : value;
73
- const [date, setDate] = useState<Date[] | Date | DateRange | undefined>(initialDate);
74
- const [pickerValue, setPickerValue] = useState<TimePickerValue>({
75
- hour: (date instanceof Date ? date.getHours() : 12).toString(),
76
- minute: (date instanceof Date ? date.getMinutes() : 0)
77
- .toString()
78
- .padStart(2, "0"),
79
- time: date instanceof Date && date.getHours() < 12 ? "AM" : "PM",
80
- });
81
- const [isOpen, setIsOpen] = useState(false);
82
- const triggerRef = useRef<HTMLButtonElement>(null);
41
+ (
42
+ {
43
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- destructured to exclude from {...props} spread
44
+ size = "M",
45
+ min,
46
+ max,
47
+ mode = "single",
48
+ onChange,
49
+ showWeekNumber = false,
50
+ captionLayout = "dropdown",
51
+ dateFormat = "yyyy/MM/dd",
52
+ calendarProps,
53
+ timePicker = false,
54
+ children,
55
+ value = new Date(),
56
+ ...props
57
+ }: DatePickerProps,
58
+ ref: ForwardedRef<HTMLInputElement>,
59
+ ) => {
60
+ const initialDate =
61
+ mode == "multiple"
62
+ ? Array.isArray(value)
63
+ ? value
64
+ : [value]
65
+ : mode == "range"
66
+ ? // Accept a DateRange ({ from, to }) directly, or wrap a single
67
+ // Date into a one-day range.
68
+ value &&
69
+ typeof value === "object" &&
70
+ !(value instanceof Date) &&
71
+ ("from" in value || "to" in value)
72
+ ? (value as DateRange)
73
+ : { from: value, to: value }
74
+ : value;
75
+ const [date, setDate] = useState<Date[] | Date | DateRange | undefined>(
76
+ initialDate as Date[] | Date | DateRange | undefined,
77
+ );
78
+ const [pickerValue, setPickerValue] = useState<TimePickerValue>({
79
+ hour: (date instanceof Date ? date.getHours() : 12).toString(),
80
+ minute: (date instanceof Date ? date.getMinutes() : 0).toString().padStart(2, "0"),
81
+ time: date instanceof Date && date.getHours() < 12 ? "AM" : "PM",
82
+ });
83
+ const [isOpen, setIsOpen] = useState(false);
84
+ const triggerRef = useRef<HTMLButtonElement>(null);
83
85
 
84
- // Call the onChange function when the date or picker value changes
85
- useEffect(() => {
86
- onChange?.({
87
- target: {
88
- value: date,
89
- },
90
- } as any);
91
- }, [date, pickerValue]);
86
+ // Call the onChange function when the date or picker value changes
87
+ useEffect(() => {
88
+ onChange?.({
89
+ target: {
90
+ value: date,
91
+ },
92
+ } as unknown as React.ChangeEvent<HTMLInputElement>);
93
+ }, [date, pickerValue]);
92
94
 
93
- // Disable body scroll when popover is open
94
- useEffect(() => {
95
- if (isOpen) {
96
- // Save the current overflow style
97
- const originalOverflow = document.body.style.overflow;
98
- document.body.style.overflow = "hidden";
95
+ // Disable body scroll when popover is open
96
+ useEffect(() => {
97
+ if (isOpen) {
98
+ // Save the current overflow style
99
+ const originalOverflow = document.body.style.overflow;
100
+ document.body.style.overflow = "hidden";
99
101
 
100
- // Cleanup function to restore original overflow style
101
- return () => {
102
- document.body.style.overflow = originalOverflow;
103
- };
104
- }
105
- }, [isOpen]);
106
- const formattedValue = formatDateValueToString(
107
- date,
108
- pickerValue,
109
- dateFormat
110
- );
102
+ // Cleanup function to restore original overflow style
103
+ return () => {
104
+ document.body.style.overflow = originalOverflow;
105
+ };
106
+ }
107
+ }, [isOpen]);
108
+ const formattedValue = formatDateValueToString(date, pickerValue, dateFormat);
111
109
 
112
- return (
113
- <Popover onOpenChange={setIsOpen}>
114
- <PopoverTrigger ref={triggerRef} asChild>
115
- {/* Clone the children element and pass the formatted value to the input element */}
116
- {isValidElement(children) ? (
117
- cloneElement(children as React.ReactElement<HTMLInputElement>, {
118
- value:
119
- (children as React.ReactElement<HTMLInputElement>).props
120
- .value ?? formattedValue,
121
- type: "input",
122
- readOnly: true,
123
- })
124
- ) : (
125
- /* If the children is not a valid element, Show the default input */
126
- <InputField
127
- readOnly
128
- type="input"
129
- childrenSide={
130
- <ActionButton type="button" size={"M"} onClick={() => {
131
- triggerRef.current?.click();
132
- }}>
133
- <i className="ri-calendar-event-fill"></i>
134
- </ActionButton>
135
- }
136
- {...props}
137
- value={formattedValue}
138
- ref={ref}
139
- />
140
- )}
141
- </PopoverTrigger>
142
- <PopoverContent
143
- data-theme="dark"
144
- className="!h-fit max-h-[fit-content] p-0 border-none rounded-[12px] flex flex-col sm:flex-row "
110
+ return (
111
+ <Popover onOpenChange={setIsOpen}>
112
+ <PopoverTrigger ref={triggerRef} asChild>
113
+ {/* Clone the children element and pass the formatted value to the input element */}
114
+ {isValidElement(children) ? (
115
+ cloneElement(children as React.ReactElement<HTMLInputElement>, {
116
+ value:
117
+ (children as React.ReactElement<HTMLInputElement>).props.value ?? formattedValue,
118
+ type: "input",
119
+ readOnly: true,
120
+ })
121
+ ) : (
122
+ /* If the children is not a valid element, Show the default input */
123
+ <InputField
124
+ readOnly
125
+ type="input"
126
+ childrenSide={
127
+ <ActionButton
128
+ type="button"
129
+ size={"M"}
130
+ onClick={() => {
131
+ triggerRef.current?.click();
132
+ }}
145
133
  >
146
- <Calendar
147
- {...calendarProps}
148
- captionLayout={captionLayout}
149
- showWeekNumber={showWeekNumber}
150
- mode={mode as any}
151
- selected={date as any}
152
- onSelect={(e: any) => {
153
- setDate(applyTimeToDateValue(e, pickerValue));
154
- }}
155
- min={mode != "single" ? min : undefined}
156
- max={mode != "single" ? max : undefined}
157
- />
158
- {timePicker && (
159
- <TimePicker
160
- value={pickerValue}
161
- onChange={(value: TimePickerValue) => {
162
- setPickerValue(value);
163
- setDate(applyTimeToDateValue(date, value));
164
- }}
165
- />
166
- )}
167
- </PopoverContent>
168
- </Popover>
169
- );
170
- }
134
+ <i className="ri-calendar-event-fill"></i>
135
+ </ActionButton>
136
+ }
137
+ {...props}
138
+ value={formattedValue}
139
+ ref={ref}
140
+ />
141
+ )}
142
+ </PopoverTrigger>
143
+ <PopoverContent
144
+ data-theme="dark"
145
+ className="!h-fit max-h-[fit-content] p-0 border-none rounded-[12px] flex flex-col sm:flex-row "
146
+ >
147
+ <Calendar
148
+ {...calendarProps}
149
+ captionLayout={captionLayout}
150
+ showWeekNumber={showWeekNumber}
151
+ // The mode/selected/onSelect discriminated union cannot be
152
+ // resolved statically since `mode` is a runtime value; cast to
153
+ // one variant so the props typecheck (runtime is unchanged).
154
+ mode={mode as "range"}
155
+ selected={date as unknown as DateRange | undefined}
156
+ onSelect={(e: Date | Date[] | DateRange | undefined) => {
157
+ setDate(applyTimeToDateValue(e, pickerValue));
158
+ }}
159
+ min={mode != "single" ? min : undefined}
160
+ max={mode != "single" ? max : undefined}
161
+ />
162
+ {timePicker && (
163
+ <TimePicker
164
+ value={pickerValue}
165
+ onChange={(value: TimePickerValue) => {
166
+ setPickerValue(value);
167
+ setDate(applyTimeToDateValue(date, value));
168
+ }}
169
+ />
170
+ )}
171
+ </PopoverContent>
172
+ </Popover>
173
+ );
174
+ },
171
175
  );
172
176
 
173
177
  DatePicker.displayName = "DatePicker";
174
178
 
175
179
  interface TimePickerProps {
176
- value: TimePickerValue;
177
- onChange: (value: TimePickerValue) => void;
180
+ value: TimePickerValue;
181
+ onChange: (value: TimePickerValue) => void;
178
182
  }
179
183
 
180
184
  const TimePicker = ({ value, onChange }: TimePickerProps) => {
181
- return (
182
- <div className="relative w-full sm:w-[189px]" data-theme="dark">
183
- <Picker
184
- className="flex-1"
185
- selectContainerClassName="bg-background-system-body-tertiary z-[-1] rounded-[8px]"
186
- value={value}
187
- onChange={(e: TimePickerValue) => {
188
- onChange(e);
189
- }}
190
- wheelMode="normal"
191
- >
192
- <span className="absolute left-0 top-1/2 -translate-y-1/2 w-full h-[20px] flex justify-center items-center text-white text-[30px] pr-[55px] pb-[5px]">
193
- :
194
- </span>
195
- <Picker.Column name="hour">
196
- {Array.from({ length: 12 }, (_, i) => i + 1).map((hour) => (
197
- <Picker.Item key={hour + "hour"} value={hour}>
198
- <div className="typography-display-small-semibold flex gap-1 whitespace-nowrap text-content-presentation-global-primary pl-[25px]">
199
- {" "}
200
- <p className="text-content-presentation-global-primary">
201
- {hour}
202
- </p>
203
- </div>
204
- </Picker.Item>
205
- ))}
206
- </Picker.Column>
207
- <Picker.Column name="minute">
208
- {Array.from({ length: 60 }, (_, i) => i).map((minute) => (
209
- <Picker.Item key={minute + "minute"} value={minute}>
210
- <div className="typography-display-small-semibold text-content-presentation-global-primary">
211
- {minute.toString().padStart(2, "0")}
212
- </div>
213
- </Picker.Item>
214
- ))}
215
- </Picker.Column>
216
- <Picker.Column name="time">
217
- {["AM", "PM"].map((time) => (
218
- <Picker.Item key={time + "time"} value={time}>
219
- <div className="typography-display-small-semibold text-content-presentation-global-primary pr-[30px]">
220
- {time}
221
- </div>
222
- </Picker.Item>
223
- ))}
224
- </Picker.Column>
225
- </Picker>
226
- </div>
227
- );
185
+ return (
186
+ <div className="relative w-full sm:w-[189px]" data-theme="dark">
187
+ <Picker
188
+ className="flex-1"
189
+ selectContainerClassName="bg-background-system-body-tertiary z-[-1] rounded-[8px]"
190
+ value={value}
191
+ onChange={(e: TimePickerValue) => {
192
+ onChange(e);
193
+ }}
194
+ wheelMode="normal"
195
+ >
196
+ <span className="absolute left-0 top-1/2 -translate-y-1/2 w-full h-[20px] flex justify-center items-center text-white text-[30px] pr-[55px] pb-[5px]">
197
+ :
198
+ </span>
199
+ <Picker.Column name="hour">
200
+ {Array.from({ length: 12 }, (_, i) => i + 1).map((hour) => (
201
+ <Picker.Item key={hour + "hour"} value={hour}>
202
+ <div className="typography-display-small-semibold flex gap-1 whitespace-nowrap text-content-presentation-global-primary pl-[25px]">
203
+ {" "}
204
+ <p className="text-content-presentation-global-primary">{hour}</p>
205
+ </div>
206
+ </Picker.Item>
207
+ ))}
208
+ </Picker.Column>
209
+ <Picker.Column name="minute">
210
+ {Array.from({ length: 60 }, (_, i) => i).map((minute) => (
211
+ <Picker.Item key={minute + "minute"} value={minute}>
212
+ <div className="typography-display-small-semibold text-content-presentation-global-primary">
213
+ {minute.toString().padStart(2, "0")}
214
+ </div>
215
+ </Picker.Item>
216
+ ))}
217
+ </Picker.Column>
218
+ <Picker.Column name="time">
219
+ {["AM", "PM"].map((time) => (
220
+ <Picker.Item key={time + "time"} value={time}>
221
+ <div className="typography-display-small-semibold text-content-presentation-global-primary pr-[30px]">
222
+ {time}
223
+ </div>
224
+ </Picker.Item>
225
+ ))}
226
+ </Picker.Column>
227
+ </Picker>
228
+ </div>
229
+ );
228
230
  };
@@ -1,129 +1,116 @@
1
- "use client"
1
+ "use client";
2
2
 
3
- import * as React from "react"
4
- import * as DialogPrimitive from "@radix-ui/react-dialog"
3
+ import * as React from "react";
4
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
5
5
 
6
- import { cn } from "../utils/cn"
6
+ import { cn } from "../utils/cn";
7
7
 
8
- const Dialog = DialogPrimitive.Root
8
+ const Dialog = DialogPrimitive.Root;
9
9
 
10
- const DialogTrigger = DialogPrimitive.Trigger
10
+ const DialogTrigger = DialogPrimitive.Trigger;
11
11
 
12
- const DialogPortal = DialogPrimitive.Portal
12
+ const DialogPortal = DialogPrimitive.Portal;
13
13
 
14
- const DialogClose = DialogPrimitive.Close
14
+ const DialogClose = DialogPrimitive.Close;
15
15
 
16
16
  const DialogOverlay = React.forwardRef<
17
- React.ElementRef<typeof DialogPrimitive.Overlay>,
18
- React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
17
+ React.ElementRef<typeof DialogPrimitive.Overlay>,
18
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
19
19
  >(({ className, ...props }, ref) => (
20
- <DialogPrimitive.Overlay
21
- ref={ref}
22
- className={cn(
23
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
24
- className
25
- )}
26
- {...props}
27
- />
28
- ))
29
- DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
20
+ <DialogPrimitive.Overlay
21
+ ref={ref}
22
+ className={cn(
23
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
24
+ className,
25
+ )}
26
+ {...props}
27
+ />
28
+ ));
29
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
30
30
 
31
31
  const DialogContent = React.forwardRef<
32
- React.ElementRef<typeof DialogPrimitive.Content>,
33
- React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
32
+ React.ElementRef<typeof DialogPrimitive.Content>,
33
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
34
34
  >(({ className, children, ...props }, ref) => (
35
- <DialogPortal>
36
- <DialogOverlay />
37
- <DialogPrimitive.Content
38
- ref={ref}
39
- className={cn(
40
- "fixed left-[50%] top-[50%] z-50 flex flex-col items-start w-fit translate-x-[-50%] translate-y-[-50%] shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
41
- "flex justify-center items-center",
42
- className
43
- )}
44
- {...props}
45
- >
46
- {children}
47
-
48
- </DialogPrimitive.Content>
49
- </DialogPortal>
50
- ))
51
- DialogContent.displayName = DialogPrimitive.Content.displayName
52
-
35
+ <DialogPortal>
36
+ <DialogOverlay />
37
+ <DialogPrimitive.Content
38
+ ref={ref}
39
+ className={cn(
40
+ "fixed left-[50%] top-[50%] z-50 flex flex-col items-start w-fit translate-x-[-50%] translate-y-[-50%] shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
41
+ "flex justify-center items-center",
42
+ className,
43
+ )}
44
+ {...props}
45
+ >
46
+ {children}
47
+ </DialogPrimitive.Content>
48
+ </DialogPortal>
49
+ ));
50
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
53
51
 
54
52
  const DialogCloseButton = React.forwardRef<
55
- React.ElementRef<typeof DialogPrimitive.Close>,
56
- React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close>
53
+ React.ElementRef<typeof DialogPrimitive.Close>,
54
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Close>
57
55
  >(({ className, children, ...props }, ref) => (
58
- <DialogPrimitive.Close ref={ref} {...props} className={cn("m-0 p-0 h-fit", className)}>
59
- {children}
60
- </DialogPrimitive.Close>
61
- ))
62
- const DialogHeader = ({
63
- className,
64
- ...props
65
- }: React.HTMLAttributes<HTMLDivElement>) => (
66
- <div
67
- className={cn(
68
- "flex flex-col space-y-1.5 text-center sm:text-left",
69
- className
70
- )}
71
- {...props}
72
- />
73
- )
74
- DialogHeader.displayName = "DialogHeader"
56
+ <DialogPrimitive.Close ref={ref} {...props} className={cn("m-0 p-0 h-fit", className)}>
57
+ {children}
58
+ </DialogPrimitive.Close>
59
+ ));
60
+ DialogCloseButton.displayName = DialogPrimitive.Close.displayName;
61
+ const DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
62
+ <div className={cn("flex flex-col space-y-1.5 text-center sm:text-left", className)} {...props} />
63
+ );
64
+ DialogHeader.displayName = "DialogHeader";
75
65
 
76
- const DialogFooter = ({
77
- className,
78
- ...props
79
- }: React.HTMLAttributes<HTMLDivElement>) => (
80
- <div
81
- className={cn(
82
- "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
83
- className
84
- )}
85
- {...props}
86
- />
87
- )
88
- DialogFooter.displayName = "DialogFooter"
66
+ const DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
67
+ <div
68
+ className={cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className)}
69
+ {...props}
70
+ />
71
+ );
72
+ DialogFooter.displayName = "DialogFooter";
89
73
 
90
74
  const DialogTitle = React.forwardRef<
91
- React.ElementRef<typeof DialogPrimitive.Title>,
92
- React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
75
+ React.ElementRef<typeof DialogPrimitive.Title>,
76
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
93
77
  >(({ className, ...props }, ref) => (
94
- <DialogPrimitive.Title
95
- ref={ref}
96
- className={cn(
97
- "text-lg font-semibold leading-none tracking-tight text-content-presentation-global-primary",
98
- className
99
- )}
100
- {...props}
101
- />
102
- ))
103
- DialogTitle.displayName = DialogPrimitive.Title.displayName
78
+ <DialogPrimitive.Title
79
+ ref={ref}
80
+ className={cn(
81
+ "text-lg font-semibold leading-none tracking-tight text-content-presentation-global-primary",
82
+ className,
83
+ )}
84
+ {...props}
85
+ />
86
+ ));
87
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
104
88
 
105
89
  const DialogDescription = React.forwardRef<
106
- React.ElementRef<typeof DialogPrimitive.Description>,
107
- React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
90
+ React.ElementRef<typeof DialogPrimitive.Description>,
91
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
108
92
  >(({ className, ...props }, ref) => (
109
- <DialogPrimitive.Description
110
- ref={ref}
111
- className={cn("text-sm text-muted-foreground text-content-presentation-global-primary", className)}
112
- {...props}
113
- />
114
- ))
115
- DialogDescription.displayName = DialogPrimitive.Description.displayName
93
+ <DialogPrimitive.Description
94
+ ref={ref}
95
+ className={cn(
96
+ "text-sm text-muted-foreground text-content-presentation-global-primary",
97
+ className,
98
+ )}
99
+ {...props}
100
+ />
101
+ ));
102
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
116
103
 
117
104
  export {
118
- Dialog,
119
- DialogPortal,
120
- DialogOverlay,
121
- DialogTrigger,
122
- DialogClose,
123
- DialogContent,
124
- DialogHeader,
125
- DialogFooter,
126
- DialogTitle,
127
- DialogDescription,
128
- DialogCloseButton
129
- }
105
+ Dialog,
106
+ DialogPortal,
107
+ DialogOverlay,
108
+ DialogTrigger,
109
+ DialogClose,
110
+ DialogContent,
111
+ DialogHeader,
112
+ DialogFooter,
113
+ DialogTitle,
114
+ DialogDescription,
115
+ DialogCloseButton,
116
+ };