@clubmed/trident-ui 2.0.0-beta.1 → 2.0.0-beta.2
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.
- package/chunks/Backdrop.js +104 -118
- package/chunks/Backdrop.js.map +1 -1
- package/chunks/DateField.js +185 -0
- package/chunks/DateField.js.map +1 -0
- package/chunks/Range.js +195 -0
- package/chunks/Range.js.map +1 -0
- package/chunks/bundle-mjs.js +1619 -2782
- package/chunks/bundle-mjs.js.map +1 -1
- package/chunks/chunk.js +16 -0
- package/chunks/clsx.js +16 -15
- package/chunks/clsx.js.map +1 -1
- package/chunks/dist.js +569 -0
- package/chunks/dist.js.map +1 -0
- package/chunks/resize-observer.js +279 -0
- package/chunks/resize-observer.js.map +1 -0
- package/examples/advanced-toast-demo.js +32 -33
- package/examples/advanced-toast-demo.js.map +1 -1
- package/examples/advanced-toast-green-demo.js +32 -33
- package/examples/advanced-toast-green-demo.js.map +1 -1
- package/examples/advanced-toast-no-dismiss-demo.js +33 -34
- package/examples/advanced-toast-no-dismiss-demo.js.map +1 -1
- package/examples/advanced-toast-red-demo.js +32 -33
- package/examples/advanced-toast-red-demo.js.map +1 -1
- package/examples/advanced-toast-with-details-demo.js +40 -41
- package/examples/advanced-toast-with-details-demo.js.map +1 -1
- package/examples/arrow-button-accessible-demo.js +13 -8
- package/examples/arrow-button-accessible-demo.js.map +1 -1
- package/examples/arrow-button-demo.js +12 -8
- package/examples/arrow-button-demo.js.map +1 -1
- package/examples/arrow-button-disabled-demo.js +13 -8
- package/examples/arrow-button-disabled-demo.js.map +1 -1
- package/examples/arrow-button-left-demo.js +12 -8
- package/examples/arrow-button-left-demo.js.map +1 -1
- package/examples/arrow-button-outline-demo.js +16 -8
- package/examples/arrow-button-outline-demo.js.map +1 -1
- package/examples/arrow-button-tail-demo.js +11 -7
- package/examples/arrow-button-tail-demo.js.map +1 -1
- package/examples/arrows-demo.js +26 -25
- package/examples/arrows-demo.js.map +1 -1
- package/examples/arrows-disabled-demo.js +26 -25
- package/examples/arrows-disabled-demo.js.map +1 -1
- package/examples/arrows-white-solid-demo.js +30 -26
- package/examples/arrows-white-solid-demo.js.map +1 -1
- package/examples/avatar-demo.js +26 -16
- package/examples/avatar-demo.js.map +1 -1
- package/examples/backdrop-demo.js +36 -26
- package/examples/backdrop-demo.js.map +1 -1
- package/examples/basic-toast-demo.js +26 -31
- package/examples/basic-toast-demo.js.map +1 -1
- package/examples/basic-toast-saffron-demo.js +26 -31
- package/examples/basic-toast-saffron-demo.js.map +1 -1
- package/examples/basic-toast-with-icon-demo.js +27 -32
- package/examples/basic-toast-with-icon-demo.js.map +1 -1
- package/examples/breadcrumb-demo.js +29 -19
- package/examples/breadcrumb-demo.js.map +1 -1
- package/examples/button-circle-demo.js +19 -8
- package/examples/button-circle-demo.js.map +1 -1
- package/examples/button-demo.js +33 -15
- package/examples/button-demo.js.map +1 -1
- package/examples/button-disabled-demo.js +15 -7
- package/examples/button-disabled-demo.js.map +1 -1
- package/examples/button-icon-demo.js +15 -7
- package/examples/button-icon-demo.js.map +1 -1
- package/examples/button-large-demo.js +14 -7
- package/examples/button-large-demo.js.map +1 -1
- package/examples/button-outline-demo.js +14 -7
- package/examples/button-outline-demo.js.map +1 -1
- package/examples/button-small-demo.js +14 -7
- package/examples/button-small-demo.js.map +1 -1
- package/examples/card-button-demo.js +35 -30
- package/examples/card-button-demo.js.map +1 -1
- package/examples/card-demo.js +18 -11
- package/examples/card-demo.js.map +1 -1
- package/examples/card-list-demo.js +37 -18
- package/examples/card-list-demo.js.map +1 -1
- package/examples/card-no-border-demo.js +32 -13
- package/examples/card-no-border-demo.js.map +1 -1
- package/examples/card-tag-demo.js +31 -21
- package/examples/card-tag-demo.js.map +1 -1
- package/examples/chat-button-demo.js +11 -7
- package/examples/chat-button-demo.js.map +1 -1
- package/examples/chat-button-offset-demo.js +11 -7
- package/examples/chat-button-offset-demo.js.map +1 -1
- package/examples/checkbox-demo.js +28 -33
- package/examples/checkbox-demo.js.map +1 -1
- package/examples/checkbox-disabled-demo.js +23 -11
- package/examples/checkbox-disabled-demo.js.map +1 -1
- package/examples/checkboxes-demo.js +25 -12
- package/examples/checkboxes-demo.js.map +1 -1
- package/examples/checkboxes-with-form-control-demo.js +31 -13
- package/examples/checkboxes-with-form-control-demo.js.map +1 -1
- package/examples/chip-demo.js +18 -9
- package/examples/chip-demo.js.map +1 -1
- package/examples/choice-expander-demo.js +213 -335
- package/examples/choice-expander-demo.js.map +1 -1
- package/examples/clickable-demo.js +13 -15
- package/examples/clickable-demo.js.map +1 -1
- package/examples/date-field-demo.js +13 -15
- package/examples/date-field-demo.js.map +1 -1
- package/examples/dropdown-demo.d.ts +1 -0
- package/examples/dropdown-demo.js +40 -0
- package/examples/dropdown-demo.js.map +1 -0
- package/examples/elastic-height-demo.js +32 -24
- package/examples/elastic-height-demo.js.map +1 -1
- package/examples/expandable-card-demo.js +19 -8
- package/examples/expandable-card-demo.js.map +1 -1
- package/examples/filter-demo.js +16 -12
- package/examples/filter-demo.js.map +1 -1
- package/examples/form-control-demo.js +21 -26
- package/examples/form-control-demo.js.map +1 -1
- package/examples/form-label-demo.js +15 -8
- package/examples/form-label-demo.js.map +1 -1
- package/examples/hamburger-icon-demo.js +15 -17
- package/examples/hamburger-icon-demo.js.map +1 -1
- package/examples/heading-demo.js +12 -7
- package/examples/heading-demo.js.map +1 -1
- package/examples/image-demo.js +13 -15
- package/examples/image-demo.js.map +1 -1
- package/examples/link-demo.js +12 -7
- package/examples/link-demo.js.map +1 -1
- package/examples/loader-demo.js +18 -14
- package/examples/loader-demo.js.map +1 -1
- package/examples/number-field-demo.js +19 -21
- package/examples/number-field-demo.js.map +1 -1
- package/examples/pagination-demo.js +25 -27
- package/examples/pagination-demo.js.map +1 -1
- package/examples/password-demo.js +34 -36
- package/examples/password-demo.js.map +1 -1
- package/examples/phone-field-demo.js +26 -31
- package/examples/phone-field-demo.js.map +1 -1
- package/examples/popin-demo.js +21 -23
- package/examples/popin-demo.js.map +1 -1
- package/examples/portal-demo.js +38 -31
- package/examples/portal-demo.js.map +1 -1
- package/examples/prose-demo.js +11 -15
- package/examples/prose-demo.js.map +1 -1
- package/examples/radio-demo.js +36 -41
- package/examples/radio-demo.js.map +1 -1
- package/examples/radio-group-demo.js +36 -25
- package/examples/radio-group-demo.js.map +1 -1
- package/examples/range-demo.js +34 -21
- package/examples/range-demo.js.map +1 -1
- package/examples/select-demo.js +33 -13
- package/examples/select-demo.js.map +1 -1
- package/examples/sidebar-layout-demo.d.ts +1 -1
- package/examples/sidebar-layout-demo.js +95 -45
- package/examples/sidebar-layout-demo.js.map +1 -1
- package/examples/sidebar-layout-minimal-demo.d.ts +1 -1
- package/examples/sidebar-layout-minimal-demo.js +32 -34
- package/examples/sidebar-layout-minimal-demo.js.map +1 -1
- package/examples/sidebar-layout-with-header-demo.d.ts +1 -1
- package/examples/sidebar-layout-with-header-demo.js +39 -26
- package/examples/sidebar-layout-with-header-demo.js.map +1 -1
- package/examples/spinner-demo.js +8 -7
- package/examples/spinner-demo.js.map +1 -1
- package/examples/switch-demo.js +20 -13
- package/examples/switch-demo.js.map +1 -1
- package/examples/tabs-demo.js +36 -26
- package/examples/tabs-demo.js.map +1 -1
- package/examples/tabs-with-select-demo.js +47 -27
- package/examples/tabs-with-select-demo.js.map +1 -1
- package/examples/tabs-within-tabs-demo.js +117 -58
- package/examples/tabs-within-tabs-demo.js.map +1 -1
- package/examples/tag-demo.js +14 -9
- package/examples/tag-demo.js.map +1 -1
- package/examples/text-field-demo.js +48 -59
- package/examples/text-field-demo.js.map +1 -1
- package/examples/validation-message-demo.js +24 -11
- package/examples/validation-message-demo.js.map +1 -1
- package/index.js +6 -5
- package/index.js.map +1 -1
- package/package.json +2 -4
- package/ui/AdvancedToast.config.js +1 -4
- package/ui/AdvancedToast.js +93 -118
- package/ui/AdvancedToast.js.map +1 -1
- package/ui/Avatar.d.ts +1 -2
- package/ui/Avatar.js +35 -49
- package/ui/Avatar.js.map +1 -1
- package/ui/Backdrop.js +2 -9
- package/ui/BasicToast.config.js +11 -7
- package/ui/BasicToast.config.js.map +1 -1
- package/ui/BasicToast.d.ts +7 -5
- package/ui/BasicToast.js +56 -58
- package/ui/BasicToast.js.map +1 -1
- package/ui/Breadcrumb.js +51 -49
- package/ui/Breadcrumb.js.map +1 -1
- package/ui/Breadcrumb.themes.js +16 -15
- package/ui/Breadcrumb.themes.js.map +1 -1
- package/ui/ChatButton.js +32 -59
- package/ui/ChatButton.js.map +1 -1
- package/ui/Chip.d.ts +4 -5
- package/ui/Chip.js +21 -37
- package/ui/Chip.js.map +1 -1
- package/ui/Chip.themes.js +16 -21
- package/ui/Chip.themes.js.map +1 -1
- package/ui/ChoiceExpander.js +132 -172
- package/ui/ChoiceExpander.js.map +1 -1
- package/ui/Clickable.js +22 -23
- package/ui/Clickable.js.map +1 -1
- package/ui/Dropdown.d.ts +6 -0
- package/ui/Dropdown.js +47 -0
- package/ui/Dropdown.js.map +1 -0
- package/ui/ElasticHeight.js +29 -34
- package/ui/ElasticHeight.js.map +1 -1
- package/ui/HamburgerIcon.js +24 -41
- package/ui/HamburgerIcon.js.map +1 -1
- package/ui/Image.js +18 -17
- package/ui/Image.js.map +1 -1
- package/ui/Link.js +35 -60
- package/ui/Link.js.map +1 -1
- package/ui/Loader.js +77 -86
- package/ui/Loader.js.map +1 -1
- package/ui/Pagination.helper.js +23 -29
- package/ui/Pagination.helper.js.map +1 -1
- package/ui/Pagination.js +95 -152
- package/ui/Pagination.js.map +1 -1
- package/ui/Popin.js +50 -60
- package/ui/Popin.js.map +1 -1
- package/ui/Portal.js +26 -28
- package/ui/Portal.js.map +1 -1
- package/ui/Prose.js +14 -16
- package/ui/Prose.js.map +1 -1
- package/ui/SidebarLayout.d.ts +24 -23
- package/ui/SidebarLayout.js +143 -243
- package/ui/SidebarLayout.js.map +1 -1
- package/ui/Spinner.js +34 -22
- package/ui/Spinner.js.map +1 -1
- package/ui/Tag.js +45 -78
- package/ui/Tag.js.map +1 -1
- package/ui/arrows/Arrows.js +35 -66
- package/ui/arrows/Arrows.js.map +1 -1
- package/ui/arrows/ArrowsLabels.d.js +0 -2
- package/ui/buttons/ArrowButton.js +15 -7
- package/ui/buttons/ArrowButton.js.map +1 -1
- package/ui/buttons/Button.js +50 -47
- package/ui/buttons/Button.js.map +1 -1
- package/ui/buttons/Button.type.js +36 -46
- package/ui/buttons/Button.type.js.map +1 -1
- package/ui/buttons/ButtonContent.js +12 -15
- package/ui/buttons/ButtonContent.js.map +1 -1
- package/ui/cards/Card.js +19 -33
- package/ui/cards/Card.js.map +1 -1
- package/ui/cards/CardAspectRatios.js +10 -9
- package/ui/cards/CardAspectRatios.js.map +1 -1
- package/ui/cards/CardBackground.js +21 -29
- package/ui/cards/CardBackground.js.map +1 -1
- package/ui/cards/CardBackgroundContext.js +9 -9
- package/ui/cards/CardBackgroundContext.js.map +1 -1
- package/ui/cards/CardClickable.js +25 -35
- package/ui/cards/CardClickable.js.map +1 -1
- package/ui/cards/ExpandableCard.js +61 -78
- package/ui/cards/ExpandableCard.js.map +1 -1
- package/ui/contexts/Device.js +3 -8
- package/ui/contexts/TabControl.js +104 -78
- package/ui/contexts/TabControl.js.map +1 -1
- package/ui/contexts/TridentUIConfig.js +788 -1297
- package/ui/contexts/TridentUIConfig.js.map +1 -1
- package/ui/contexts/devices/Device.js +21 -20
- package/ui/contexts/devices/Device.js.map +1 -1
- package/ui/contexts/devices/hooks/useQueries.js +39 -23
- package/ui/contexts/devices/hooks/useQueries.js.map +1 -1
- package/ui/contexts/devices/reducers/reducer.js +39 -48
- package/ui/contexts/devices/reducers/reducer.js.map +1 -1
- package/ui/forms/DateField.js +2 -168
- package/ui/forms/Filter.js +67 -66
- package/ui/forms/Filter.js.map +1 -1
- package/ui/forms/FormControl.d.ts +5 -1
- package/ui/forms/FormControl.js +33 -54
- package/ui/forms/FormControl.js.map +1 -1
- package/ui/forms/FormControlError.js +19 -25
- package/ui/forms/FormControlError.js.map +1 -1
- package/ui/forms/FormLabel.js +25 -45
- package/ui/forms/FormLabel.js.map +1 -1
- package/ui/forms/NumberField.d.ts +1 -0
- package/ui/forms/NumberField.js +96 -135
- package/ui/forms/NumberField.js.map +1 -1
- package/ui/forms/PhoneField.js +218 -277
- package/ui/forms/PhoneField.js.map +1 -1
- package/ui/forms/Range.js +2 -161
- package/ui/forms/Select.js +91 -105
- package/ui/forms/Select.js.map +1 -1
- package/ui/forms/Switch.js +40 -39
- package/ui/forms/Switch.js.map +1 -1
- package/ui/forms/TextField.js +101 -112
- package/ui/forms/TextField.js.map +1 -1
- package/ui/forms/checkboxes/Checkbox.d.ts +10 -1
- package/ui/forms/checkboxes/Checkbox.js +62 -87
- package/ui/forms/checkboxes/Checkbox.js.map +1 -1
- package/ui/forms/checkboxes/Checkboxes.js +43 -48
- package/ui/forms/checkboxes/Checkboxes.js.map +1 -1
- package/ui/forms/checkboxes/index.js +3 -7
- package/ui/forms/password/Password.js +93 -114
- package/ui/forms/password/Password.js.map +1 -1
- package/ui/forms/password/ValidationMessage.js +34 -26
- package/ui/forms/password/ValidationMessage.js.map +1 -1
- package/ui/forms/password/index.js +3 -7
- package/ui/forms/radios/Radio.d.ts +2 -1
- package/ui/forms/radios/Radio.js +49 -50
- package/ui/forms/radios/Radio.js.map +1 -1
- package/ui/forms/radios/RadioGroup.js +67 -76
- package/ui/forms/radios/RadioGroup.js.map +1 -1
- package/ui/forms/radios/index.js +3 -7
- package/ui/heading/Heading.js +16 -13
- package/ui/heading/Heading.js.map +1 -1
- package/ui/heading/HeadingGroup.js +16 -15
- package/ui/heading/HeadingGroup.js.map +1 -1
- package/ui/helpers/colors/colors.js +122 -129
- package/ui/helpers/colors/colors.js.map +1 -1
- package/ui/helpers/phone/defaultPrefixes.js +126 -29
- package/ui/helpers/phone/defaultPrefixes.js.map +1 -1
- package/ui/helpers/phone/formatters.js +29 -37
- package/ui/helpers/phone/formatters.js.map +1 -1
- package/ui/helpers/phone/index.js +3 -10
- package/ui/helpers/twMerge.js +20 -26
- package/ui/helpers/twMerge.js.map +1 -1
- package/ui/hooks/keyboard.constants.js +12 -7
- package/ui/hooks/keyboard.constants.js.map +1 -1
- package/ui/hooks/tabControl.js +32 -31
- package/ui/hooks/tabControl.js.map +1 -1
- package/ui/hooks/useCountdown.js +28 -25
- package/ui/hooks/useCountdown.js.map +1 -1
- package/ui/hooks/useInternalStatus.js +19 -20
- package/ui/hooks/useInternalStatus.js.map +1 -1
- package/ui/hooks/useKeyboardControls.js +24 -34
- package/ui/hooks/useKeyboardControls.js.map +1 -1
- package/ui/hooks/useResizeObserver.js +68 -80
- package/ui/hooks/useResizeObserver.js.map +1 -1
- package/ui/hooks/useSlots.js +21 -22
- package/ui/hooks/useSlots.js.map +1 -1
- package/ui/hooks/useValue.js +22 -27
- package/ui/hooks/useValue.js.map +1 -1
- package/ui/tabs/Tabs.js +168 -228
- package/ui/tabs/Tabs.js.map +1 -1
- package/ui/types/Colors.js +0 -2
- package/ui/types/Devices.js +11 -10
- package/ui/types/Devices.js.map +1 -1
- package/ui/types/Direction.js +0 -2
- package/ui/types/LiteralUnion.js +0 -2
- package/ui/types/ScrollerLabels.js +0 -2
- package/ui/types/Theme.js +0 -2
- package/ui/types/index.js +2 -5
- package/vite-env.d.js +0 -2
- package/chunks/ResizeObserver.js +0 -287
- package/chunks/ResizeObserver.js.map +0 -1
- package/chunks/_commonjsHelpers.js +0 -9
- package/chunks/_commonjsHelpers.js.map +0 -1
- package/chunks/index.js +0 -406
- package/chunks/index.js.map +0 -1
- package/ui/AdvancedToast.config.js.map +0 -1
- package/ui/Backdrop.js.map +0 -1
- package/ui/arrows/ArrowsLabels.d.js.map +0 -1
- package/ui/contexts/Device.js.map +0 -1
- package/ui/forms/DateField.js.map +0 -1
- package/ui/forms/Range.js.map +0 -1
- package/ui/forms/checkboxes/index.js.map +0 -1
- package/ui/forms/password/index.js.map +0 -1
- package/ui/forms/radios/index.js.map +0 -1
- package/ui/helpers/phone/index.js.map +0 -1
- package/ui/hooks/useSafeBoop.d.ts +0 -8
- package/ui/hooks/useSafeBoop.js +0 -2199
- package/ui/hooks/useSafeBoop.js.map +0 -1
- package/ui/types/Colors.js.map +0 -1
- package/ui/types/Direction.js.map +0 -1
- package/ui/types/LiteralUnion.js.map +0 -1
- package/ui/types/ScrollerLabels.js.map +0 -1
- package/ui/types/Theme.js.map +0 -1
- package/ui/types/index.js.map +0 -1
- package/vite-env.d.js.map +0 -1
package/chunks/Backdrop.js
CHANGED
|
@@ -1,119 +1,105 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
],
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}),
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
},
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
"bg-white/80 backdrop-blur": !c,
|
|
102
|
-
"bg-white/0 backdrop-blur-none": c,
|
|
103
|
-
"-translate-x-full": n && (r === "preEnter" || r === "entering"),
|
|
104
|
-
"translate-x-full": n && r === "exiting"
|
|
105
|
-
}),
|
|
106
|
-
onClick: a,
|
|
107
|
-
type: "button"
|
|
108
|
-
}
|
|
109
|
-
),
|
|
110
|
-
t
|
|
111
|
-
]
|
|
112
|
-
}
|
|
113
|
-
) });
|
|
1
|
+
import { t as e } from "./clsx.js";
|
|
2
|
+
import { Portal as t } from "../ui/Portal.js";
|
|
3
|
+
import { useCallback as n, useEffect as r, useRef as i, useState as a } from "react";
|
|
4
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
5
|
+
var c = 5, l = 6, u = [
|
|
6
|
+
"preEnter",
|
|
7
|
+
"entering",
|
|
8
|
+
"entered",
|
|
9
|
+
"preExit",
|
|
10
|
+
"exiting",
|
|
11
|
+
"exited",
|
|
12
|
+
"unmounted"
|
|
13
|
+
], d = (e) => ({
|
|
14
|
+
_s: e,
|
|
15
|
+
status: u[e],
|
|
16
|
+
isEnter: e < 3,
|
|
17
|
+
isMounted: e !== l,
|
|
18
|
+
isResolved: e === 2 || e > 4
|
|
19
|
+
}), f = (e) => e ? l : c, p = (e, t) => {
|
|
20
|
+
switch (e) {
|
|
21
|
+
case 1:
|
|
22
|
+
case 0: return 2;
|
|
23
|
+
case 4:
|
|
24
|
+
case 3: return f(t);
|
|
25
|
+
}
|
|
26
|
+
}, m = (e) => typeof e == "object" ? [e.enter, e.exit] : [e, e], h = (...e) => setTimeout(...e), g = (e, t) => h(() => {
|
|
27
|
+
isNaN(document.body.offsetTop) || e(t + 1);
|
|
28
|
+
}, 0), _ = (e, t, n, r, i) => {
|
|
29
|
+
clearTimeout(r.current);
|
|
30
|
+
let a = d(e);
|
|
31
|
+
t(a), n.current = a, i && i({ current: a });
|
|
32
|
+
}, v = ({ enter: e = !0, exit: t = !0, preEnter: r, preExit: o, timeout: s, initialEntered: c, mountOnEnter: l, unmountOnExit: u, onStateChange: v } = {}) => {
|
|
33
|
+
let [y, b] = a(() => d(c ? 2 : f(l))), x = i(y), S = i(0), [C, w] = m(s), T = n(() => {
|
|
34
|
+
let e = p(x.current._s, u);
|
|
35
|
+
e && _(e, b, x, S, v);
|
|
36
|
+
}, [v, u]);
|
|
37
|
+
return [
|
|
38
|
+
y,
|
|
39
|
+
n((n) => {
|
|
40
|
+
let i = (e) => {
|
|
41
|
+
switch (_(e, b, x, S, v), e) {
|
|
42
|
+
case 1:
|
|
43
|
+
C >= 0 && (S.current = h(T, C));
|
|
44
|
+
break;
|
|
45
|
+
case 4:
|
|
46
|
+
w >= 0 && (S.current = h(T, w));
|
|
47
|
+
break;
|
|
48
|
+
case 0:
|
|
49
|
+
case 3:
|
|
50
|
+
S.current = g(i, e);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}, a = x.current.isEnter;
|
|
54
|
+
typeof n != "boolean" && (n = !a), n ? !a && i(e ? r ? 0 : 1 : 2) : a && i(t ? o ? 3 : 4 : f(u));
|
|
55
|
+
}, [
|
|
56
|
+
T,
|
|
57
|
+
v,
|
|
58
|
+
e,
|
|
59
|
+
t,
|
|
60
|
+
r,
|
|
61
|
+
o,
|
|
62
|
+
C,
|
|
63
|
+
w,
|
|
64
|
+
u
|
|
65
|
+
]),
|
|
66
|
+
T
|
|
67
|
+
];
|
|
68
|
+
}, y = ({ children: n, className: i = "flex justify-center", onClose: a, isVisible: c, target: l = "backdrop", sweep: u = !1, ...d }) => {
|
|
69
|
+
let [f, p] = v({
|
|
70
|
+
timeout: {
|
|
71
|
+
enter: 0,
|
|
72
|
+
exit: 500
|
|
73
|
+
},
|
|
74
|
+
mountOnEnter: !0,
|
|
75
|
+
unmountOnExit: !0,
|
|
76
|
+
preEnter: !0
|
|
77
|
+
}), { status: m, isMounted: h } = f;
|
|
78
|
+
r(() => {
|
|
79
|
+
p(c);
|
|
80
|
+
}, [c, p]);
|
|
81
|
+
let g = m === "preEnter" || m === "exiting";
|
|
82
|
+
return /* @__PURE__ */ o(t, {
|
|
83
|
+
target: l,
|
|
84
|
+
children: h && /* @__PURE__ */ s("div", {
|
|
85
|
+
...d,
|
|
86
|
+
role: "presentation",
|
|
87
|
+
className: e(i, "fixed inset-0 isolate items-center"),
|
|
88
|
+
children: [/* @__PURE__ */ o("button", {
|
|
89
|
+
"aria-hidden": "true",
|
|
90
|
+
className: e("absolute inset-0 -z-1 transition-all duration-500", {
|
|
91
|
+
"bg-white/80 backdrop-blur": !g,
|
|
92
|
+
"bg-white/0 backdrop-blur-none": g,
|
|
93
|
+
"-translate-x-full": u && (m === "preEnter" || m === "entering"),
|
|
94
|
+
"translate-x-full": u && m === "exiting"
|
|
95
|
+
}),
|
|
96
|
+
onClick: a,
|
|
97
|
+
type: "button"
|
|
98
|
+
}), n]
|
|
99
|
+
})
|
|
100
|
+
});
|
|
114
101
|
};
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
//# sourceMappingURL=Backdrop.js.map
|
|
102
|
+
//#endregion
|
|
103
|
+
export { v as n, y as t };
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=Backdrop.js.map
|
package/chunks/Backdrop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Backdrop.js","sources":["../../../../node_modules/.pnpm/react-transition-state@2.3.3_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-transition-state/dist/esm/utils.mjs","../../../../node_modules/.pnpm/react-transition-state@2.3.3_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-transition-state/dist/esm/useTransitionState.mjs","../../lib/ui/Backdrop.tsx"],"sourcesContent":["//#region src/utils.ts\nconst PRE_ENTER = 0;\nconst ENTERING = 1;\nconst ENTERED = 2;\nconst PRE_EXIT = 3;\nconst EXITING = 4;\nconst EXITED = 5;\nconst UNMOUNTED = 6;\nconst STATUS = [\n\t\"preEnter\",\n\t\"entering\",\n\t\"entered\",\n\t\"preExit\",\n\t\"exiting\",\n\t\"exited\",\n\t\"unmounted\"\n];\nconst getState = (status) => ({\n\t_s: status,\n\tstatus: STATUS[status],\n\tisEnter: status < PRE_EXIT,\n\tisMounted: status !== UNMOUNTED,\n\tisResolved: status === ENTERED || status > EXITING\n});\nconst startOrEnd = (unmounted) => unmounted ? UNMOUNTED : EXITED;\nconst getEndStatus = (status, unmountOnExit) => {\n\tswitch (status) {\n\t\tcase ENTERING:\n\t\tcase PRE_ENTER: return ENTERED;\n\t\tcase EXITING:\n\t\tcase PRE_EXIT: return startOrEnd(unmountOnExit);\n\t}\n};\nconst getTimeout = (timeout) => typeof timeout === \"object\" ? [timeout.enter, timeout.exit] : [timeout, timeout];\nconst _setTimeout = (...args) => setTimeout(...args);\nconst nextTick = (transitState, status) => _setTimeout(() => {\n\tisNaN(document.body.offsetTop) || transitState(status + 1);\n}, 0);\n\n//#endregion\nexport { ENTERED, ENTERING, EXITING, PRE_ENTER, PRE_EXIT, _setTimeout, getEndStatus, getState, getTimeout, nextTick, startOrEnd };","import { ENTERED, ENTERING, EXITING, PRE_ENTER, PRE_EXIT, _setTimeout, getEndStatus, getState, getTimeout, nextTick, startOrEnd } from \"./utils.mjs\";\nimport { useCallback, useRef, useState } from \"react\";\n\n//#region src/useTransitionState.ts\nconst updateState = (status, setState, latestState, timeoutId, onChange) => {\n\tclearTimeout(timeoutId.current);\n\tconst state = getState(status);\n\tsetState(state);\n\tlatestState.current = state;\n\tonChange && onChange({ current: state });\n};\nconst useTransitionState = ({ enter = true, exit = true, preEnter, preExit, timeout, initialEntered, mountOnEnter, unmountOnExit, onStateChange: onChange } = {}) => {\n\tconst [state, setState] = useState(() => getState(initialEntered ? ENTERED : startOrEnd(mountOnEnter)));\n\tconst latestState = useRef(state);\n\tconst timeoutId = useRef(0);\n\tconst [enterTimeout, exitTimeout] = getTimeout(timeout);\n\tconst endTransition = useCallback(() => {\n\t\tconst status = getEndStatus(latestState.current._s, unmountOnExit);\n\t\tstatus && updateState(status, setState, latestState, timeoutId, onChange);\n\t}, [onChange, unmountOnExit]);\n\treturn [\n\t\tstate,\n\t\tuseCallback((toEnter) => {\n\t\t\tconst transitState = (status) => {\n\t\t\t\tupdateState(status, setState, latestState, timeoutId, onChange);\n\t\t\t\tswitch (status) {\n\t\t\t\t\tcase ENTERING:\n\t\t\t\t\t\tif (enterTimeout >= 0) timeoutId.current = _setTimeout(endTransition, enterTimeout);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase EXITING:\n\t\t\t\t\t\tif (exitTimeout >= 0) timeoutId.current = _setTimeout(endTransition, exitTimeout);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PRE_ENTER:\n\t\t\t\t\tcase PRE_EXIT:\n\t\t\t\t\t\ttimeoutId.current = nextTick(transitState, status);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst enterStage = latestState.current.isEnter;\n\t\t\tif (typeof toEnter !== \"boolean\") toEnter = !enterStage;\n\t\t\tif (toEnter) !enterStage && transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);\n\t\t\telse enterStage && transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));\n\t\t}, [\n\t\t\tendTransition,\n\t\t\tonChange,\n\t\t\tenter,\n\t\t\texit,\n\t\t\tpreEnter,\n\t\t\tpreExit,\n\t\t\tenterTimeout,\n\t\t\texitTimeout,\n\t\t\tunmountOnExit\n\t\t]),\n\t\tendTransition\n\t];\n};\n\n//#endregion\nexport { useTransitionState };","import {\n type ComponentProps,\n type FunctionComponent,\n type MouseEvent,\n type PropsWithChildren,\n useEffect,\n} from 'react';\nimport clsx from 'clsx';\nimport { useTransitionState } from 'react-transition-state';\nimport { Portal } from './Portal';\n\nexport interface BackdropProps extends ComponentProps<'div'> {\n /**\n * On close\n * @param event\n */\n onClose?: (event: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Is visible\n */\n isVisible?: boolean;\n /**\n * Sweep Mode™\n * (makes it appear from the sides instead of from everywhere)\n */\n sweep?: boolean;\n /**\n * Target ID for the Portal component\n */\n target?: ComponentProps<typeof Portal>['target'];\n}\n\nexport const Backdrop: FunctionComponent<PropsWithChildren<BackdropProps>> = ({\n children,\n className = 'flex justify-center',\n onClose,\n isVisible,\n target = 'backdrop',\n sweep = false,\n ...attrs\n}) => {\n const [state, toggle] = useTransitionState({\n timeout: { enter: 0, exit: 500 },\n mountOnEnter: true,\n unmountOnExit: true,\n preEnter: true,\n });\n\n const { status, isMounted } = state;\n\n useEffect(() => {\n toggle(isVisible);\n }, [isVisible, toggle]);\n\n const animated = status === 'preEnter' || status === 'exiting';\n\n return (\n <Portal target={target}>\n {isMounted && (\n <div\n {...attrs}\n role=\"presentation\"\n className={clsx(className, 'fixed inset-0 isolate items-center')}\n >\n <button\n aria-hidden=\"true\"\n className={clsx('absolute inset-0 -z-1 transition-all duration-500', {\n 'bg-white/80 backdrop-blur': !animated,\n 'bg-white/0 backdrop-blur-none': animated,\n '-translate-x-full': sweep && (status === 'preEnter' || status === 'entering'),\n 'translate-x-full': sweep && status === 'exiting',\n })}\n onClick={onClose}\n type=\"button\"\n />\n {children}\n </div>\n )}\n </Portal>\n );\n};\n"],"
|
|
1
|
+
{"version":3,"file":"Backdrop.js","names":[],"sources":["../../../../node_modules/.pnpm/react-transition-state@2.3.3_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-transition-state/dist/esm/utils.mjs","../../../../node_modules/.pnpm/react-transition-state@2.3.3_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-transition-state/dist/esm/useTransitionState.mjs","../../lib/ui/Backdrop.tsx"],"sourcesContent":["//#region src/utils.ts\nconst PRE_ENTER = 0;\nconst ENTERING = 1;\nconst ENTERED = 2;\nconst PRE_EXIT = 3;\nconst EXITING = 4;\nconst EXITED = 5;\nconst UNMOUNTED = 6;\nconst STATUS = [\n\t\"preEnter\",\n\t\"entering\",\n\t\"entered\",\n\t\"preExit\",\n\t\"exiting\",\n\t\"exited\",\n\t\"unmounted\"\n];\nconst getState = (status) => ({\n\t_s: status,\n\tstatus: STATUS[status],\n\tisEnter: status < PRE_EXIT,\n\tisMounted: status !== UNMOUNTED,\n\tisResolved: status === ENTERED || status > EXITING\n});\nconst startOrEnd = (unmounted) => unmounted ? UNMOUNTED : EXITED;\nconst getEndStatus = (status, unmountOnExit) => {\n\tswitch (status) {\n\t\tcase ENTERING:\n\t\tcase PRE_ENTER: return ENTERED;\n\t\tcase EXITING:\n\t\tcase PRE_EXIT: return startOrEnd(unmountOnExit);\n\t}\n};\nconst getTimeout = (timeout) => typeof timeout === \"object\" ? [timeout.enter, timeout.exit] : [timeout, timeout];\nconst _setTimeout = (...args) => setTimeout(...args);\nconst nextTick = (transitState, status) => _setTimeout(() => {\n\tisNaN(document.body.offsetTop) || transitState(status + 1);\n}, 0);\n\n//#endregion\nexport { ENTERED, ENTERING, EXITING, PRE_ENTER, PRE_EXIT, _setTimeout, getEndStatus, getState, getTimeout, nextTick, startOrEnd };","import { ENTERED, ENTERING, EXITING, PRE_ENTER, PRE_EXIT, _setTimeout, getEndStatus, getState, getTimeout, nextTick, startOrEnd } from \"./utils.mjs\";\nimport { useCallback, useRef, useState } from \"react\";\n\n//#region src/useTransitionState.ts\nconst updateState = (status, setState, latestState, timeoutId, onChange) => {\n\tclearTimeout(timeoutId.current);\n\tconst state = getState(status);\n\tsetState(state);\n\tlatestState.current = state;\n\tonChange && onChange({ current: state });\n};\nconst useTransitionState = ({ enter = true, exit = true, preEnter, preExit, timeout, initialEntered, mountOnEnter, unmountOnExit, onStateChange: onChange } = {}) => {\n\tconst [state, setState] = useState(() => getState(initialEntered ? ENTERED : startOrEnd(mountOnEnter)));\n\tconst latestState = useRef(state);\n\tconst timeoutId = useRef(0);\n\tconst [enterTimeout, exitTimeout] = getTimeout(timeout);\n\tconst endTransition = useCallback(() => {\n\t\tconst status = getEndStatus(latestState.current._s, unmountOnExit);\n\t\tstatus && updateState(status, setState, latestState, timeoutId, onChange);\n\t}, [onChange, unmountOnExit]);\n\treturn [\n\t\tstate,\n\t\tuseCallback((toEnter) => {\n\t\t\tconst transitState = (status) => {\n\t\t\t\tupdateState(status, setState, latestState, timeoutId, onChange);\n\t\t\t\tswitch (status) {\n\t\t\t\t\tcase ENTERING:\n\t\t\t\t\t\tif (enterTimeout >= 0) timeoutId.current = _setTimeout(endTransition, enterTimeout);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase EXITING:\n\t\t\t\t\t\tif (exitTimeout >= 0) timeoutId.current = _setTimeout(endTransition, exitTimeout);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PRE_ENTER:\n\t\t\t\t\tcase PRE_EXIT:\n\t\t\t\t\t\ttimeoutId.current = nextTick(transitState, status);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst enterStage = latestState.current.isEnter;\n\t\t\tif (typeof toEnter !== \"boolean\") toEnter = !enterStage;\n\t\t\tif (toEnter) !enterStage && transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);\n\t\t\telse enterStage && transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));\n\t\t}, [\n\t\t\tendTransition,\n\t\t\tonChange,\n\t\t\tenter,\n\t\t\texit,\n\t\t\tpreEnter,\n\t\t\tpreExit,\n\t\t\tenterTimeout,\n\t\t\texitTimeout,\n\t\t\tunmountOnExit\n\t\t]),\n\t\tendTransition\n\t];\n};\n\n//#endregion\nexport { useTransitionState };","import {\n type ComponentProps,\n type FunctionComponent,\n type MouseEvent,\n type PropsWithChildren,\n useEffect,\n} from 'react';\nimport clsx from 'clsx';\nimport { useTransitionState } from 'react-transition-state';\nimport { Portal } from './Portal';\n\nexport interface BackdropProps extends ComponentProps<'div'> {\n /**\n * On close\n * @param event\n */\n onClose?: (event: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Is visible\n */\n isVisible?: boolean;\n /**\n * Sweep Mode™\n * (makes it appear from the sides instead of from everywhere)\n */\n sweep?: boolean;\n /**\n * Target ID for the Portal component\n */\n target?: ComponentProps<typeof Portal>['target'];\n}\n\nexport const Backdrop: FunctionComponent<PropsWithChildren<BackdropProps>> = ({\n children,\n className = 'flex justify-center',\n onClose,\n isVisible,\n target = 'backdrop',\n sweep = false,\n ...attrs\n}) => {\n const [state, toggle] = useTransitionState({\n timeout: { enter: 0, exit: 500 },\n mountOnEnter: true,\n unmountOnExit: true,\n preEnter: true,\n });\n\n const { status, isMounted } = state;\n\n useEffect(() => {\n toggle(isVisible);\n }, [isVisible, toggle]);\n\n const animated = status === 'preEnter' || status === 'exiting';\n\n return (\n <Portal target={target}>\n {isMounted && (\n <div\n {...attrs}\n role=\"presentation\"\n className={clsx(className, 'fixed inset-0 isolate items-center')}\n >\n <button\n aria-hidden=\"true\"\n className={clsx('absolute inset-0 -z-1 transition-all duration-500', {\n 'bg-white/80 backdrop-blur': !animated,\n 'bg-white/0 backdrop-blur-none': animated,\n '-translate-x-full': sweep && (status === 'preEnter' || status === 'entering'),\n 'translate-x-full': sweep && status === 'exiting',\n })}\n onClick={onClose}\n type=\"button\"\n />\n {children}\n </div>\n )}\n </Portal>\n );\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { t as e } from "./clsx.js";
|
|
2
|
+
import { useInternalStatus as t } from "../ui/hooks/useInternalStatus.js";
|
|
3
|
+
import { useValue as n } from "../ui/hooks/useValue.js";
|
|
4
|
+
import { FormControl as r } from "../ui/forms/FormControl.js";
|
|
5
|
+
import { useCallback as i, useEffect as a, useId as o, useRef as s, useState as c } from "react";
|
|
6
|
+
import { Icon as l } from "@clubmed/trident-icons";
|
|
7
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
8
|
+
//#region ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.js
|
|
9
|
+
var f = 365.2425, p = 3600 * 24;
|
|
10
|
+
p * 7, p * f / 12 * 3;
|
|
11
|
+
var m = Symbol.for("constructDateFrom");
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructFrom.js
|
|
14
|
+
function h(e, t) {
|
|
15
|
+
return typeof e == "function" ? e(t) : e && typeof e == "object" && m in e ? e[m](t) : e instanceof Date ? new e.constructor(t) : new Date(t);
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/toDate.js
|
|
19
|
+
function g(e, t) {
|
|
20
|
+
return h(t || e, e);
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isDate.js
|
|
24
|
+
function _(e) {
|
|
25
|
+
return e instanceof Date || typeof e == "object" && Object.prototype.toString.call(e) === "[object Date]";
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isValid.js
|
|
29
|
+
function v(e) {
|
|
30
|
+
return !(!_(e) && typeof e != "number" || isNaN(+g(e)));
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceInMilliseconds.js
|
|
34
|
+
function y(e, t) {
|
|
35
|
+
return g(e) - +g(t);
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
//#region ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/addLeadingZeros.js
|
|
39
|
+
function b(e, t) {
|
|
40
|
+
return (e < 0 ? "-" : "") + Math.abs(e).toString().padStart(t, "0");
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region ../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatISO.js
|
|
44
|
+
function x(e, t) {
|
|
45
|
+
let n = g(e, t?.in);
|
|
46
|
+
if (isNaN(+n)) throw RangeError("Invalid time value");
|
|
47
|
+
let r = t?.format ?? "extended", i = t?.representation ?? "complete", a = "", o = "", s = r === "extended" ? "-" : "", c = r === "extended" ? ":" : "";
|
|
48
|
+
if (i !== "time") {
|
|
49
|
+
let e = b(n.getDate(), 2), t = b(n.getMonth() + 1, 2);
|
|
50
|
+
a = `${b(n.getFullYear(), 4)}${s}${t}${s}${e}`;
|
|
51
|
+
}
|
|
52
|
+
if (i !== "date") {
|
|
53
|
+
let e = n.getTimezoneOffset();
|
|
54
|
+
if (e !== 0) {
|
|
55
|
+
let t = Math.abs(e), n = b(Math.trunc(t / 60), 2), r = b(t % 60, 2);
|
|
56
|
+
o = `${e < 0 ? "+" : "-"}${n}:${r}`;
|
|
57
|
+
} else o = "Z";
|
|
58
|
+
let t = b(n.getHours(), 2), r = b(n.getMinutes(), 2), i = b(n.getSeconds(), 2), s = a === "" ? "" : "T", l = [
|
|
59
|
+
t,
|
|
60
|
+
r,
|
|
61
|
+
i
|
|
62
|
+
].join(c);
|
|
63
|
+
a = `${a}${s}${l}${o}`;
|
|
64
|
+
}
|
|
65
|
+
return a;
|
|
66
|
+
}
|
|
67
|
+
//#endregion
|
|
68
|
+
//#region lib/ui/forms/DateField.tsx
|
|
69
|
+
var S = (e) => !e || !v(new Date(e)) ? "" : x(new Date(e), { representation: "date" }), C = (e, t, n) => {
|
|
70
|
+
if (!e) return !0;
|
|
71
|
+
let r = (e) => new Date(e.getFullYear(), e.getMonth(), e.getDate()), i = r(new Date(e));
|
|
72
|
+
return !(t && i < r(t) || n && i > r(n));
|
|
73
|
+
}, w = (f) => {
|
|
74
|
+
let p = o(), { id: m = p, name: h = m, label: g, description: _, openDatepicker: v, validationStatus: b = "default", icon: x = "CalendarDefault", iconType: w, errorMessage: T, disabled: E = !1, required: D = !1, hideRequiredStar: O, dataTestId: k = "DateField", value: A, min: j, max: M, onChange: N, ...P } = f, F = s(null), [I, L] = c(!1), R = t({
|
|
75
|
+
isDisabled: E,
|
|
76
|
+
validationStatus: b
|
|
77
|
+
}), { setValue: z, value: B } = n({
|
|
78
|
+
name: h,
|
|
79
|
+
formatter: S,
|
|
80
|
+
initialValue: A,
|
|
81
|
+
onChange: (e, t) => N?.(e, new Date(t))
|
|
82
|
+
}), V = S(j), H = S(M), U = (e) => {
|
|
83
|
+
z(e.target.value);
|
|
84
|
+
}, W = () => {
|
|
85
|
+
F.current?.showPicker();
|
|
86
|
+
}, G = i(() => {
|
|
87
|
+
let e = new Date(B);
|
|
88
|
+
if (j && M) {
|
|
89
|
+
z(Math.abs(y(e, j)) <= Math.abs(y(e, M)) ? V : H);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (j) {
|
|
93
|
+
z(V);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (M) {
|
|
97
|
+
z(H);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}, [
|
|
101
|
+
M,
|
|
102
|
+
j,
|
|
103
|
+
H,
|
|
104
|
+
V,
|
|
105
|
+
z,
|
|
106
|
+
B
|
|
107
|
+
]);
|
|
108
|
+
return a(() => {
|
|
109
|
+
!C(B, j, M) && !I && G();
|
|
110
|
+
}, [
|
|
111
|
+
G,
|
|
112
|
+
M,
|
|
113
|
+
j,
|
|
114
|
+
I,
|
|
115
|
+
B
|
|
116
|
+
]), /* @__PURE__ */ u(r, {
|
|
117
|
+
id: m,
|
|
118
|
+
label: g,
|
|
119
|
+
description: _,
|
|
120
|
+
dataName: "DateField",
|
|
121
|
+
dataTestId: k,
|
|
122
|
+
disabled: E,
|
|
123
|
+
required: D,
|
|
124
|
+
hideRequiredStar: O,
|
|
125
|
+
validationStatus: b,
|
|
126
|
+
errorMessage: T,
|
|
127
|
+
children: /* @__PURE__ */ d("div", {
|
|
128
|
+
className: "relative",
|
|
129
|
+
role: "group",
|
|
130
|
+
children: [/* @__PURE__ */ u("input", {
|
|
131
|
+
...P,
|
|
132
|
+
type: "date",
|
|
133
|
+
className: e("text-b3 rounded-pill date-field min-h-[50px] w-full border px-20 py-12 ps-[52px] font-normal outline-none", {
|
|
134
|
+
"border-middleGrey focus:border-black active:border-black": R === "default",
|
|
135
|
+
"pe-[52px]": R === "error" || R === "success",
|
|
136
|
+
"bg-pearl border-middleGrey": E,
|
|
137
|
+
"bg-white text-black": !E,
|
|
138
|
+
"border-red": !E && R === "error",
|
|
139
|
+
"border-green": !E && R === "success"
|
|
140
|
+
}),
|
|
141
|
+
id: m,
|
|
142
|
+
disabled: E,
|
|
143
|
+
required: D,
|
|
144
|
+
ref: F,
|
|
145
|
+
value: B,
|
|
146
|
+
min: V,
|
|
147
|
+
max: H,
|
|
148
|
+
onChange: U,
|
|
149
|
+
onFocus: () => L(!0),
|
|
150
|
+
onBlur: () => L(!1)
|
|
151
|
+
}), /* @__PURE__ */ d("div", {
|
|
152
|
+
className: e("pointer-events-none absolute inset-0 flex items-center justify-between px-20 py-12", {
|
|
153
|
+
"text-grey": E,
|
|
154
|
+
"text-red": !E && R === "error",
|
|
155
|
+
"text-green": !E && R === "success"
|
|
156
|
+
}),
|
|
157
|
+
children: [/* @__PURE__ */ d("button", {
|
|
158
|
+
className: "pointer-events-auto leading-none",
|
|
159
|
+
onClick: W,
|
|
160
|
+
children: [/* @__PURE__ */ u(l, {
|
|
161
|
+
name: x,
|
|
162
|
+
iconType: w,
|
|
163
|
+
width: "24px"
|
|
164
|
+
}), /* @__PURE__ */ u("span", {
|
|
165
|
+
className: "sr-only",
|
|
166
|
+
children: v
|
|
167
|
+
})]
|
|
168
|
+
}), /* @__PURE__ */ d("span", {
|
|
169
|
+
className: "ms-auto flex gap-x-8",
|
|
170
|
+
children: [R === "error" && /* @__PURE__ */ u(l, {
|
|
171
|
+
name: "CrossDefault",
|
|
172
|
+
width: "24px"
|
|
173
|
+
}), R === "success" && /* @__PURE__ */ u(l, {
|
|
174
|
+
name: "CheckDefault",
|
|
175
|
+
width: "24px"
|
|
176
|
+
})]
|
|
177
|
+
})]
|
|
178
|
+
})]
|
|
179
|
+
})
|
|
180
|
+
});
|
|
181
|
+
};
|
|
182
|
+
//#endregion
|
|
183
|
+
export { w as t };
|
|
184
|
+
|
|
185
|
+
//# sourceMappingURL=DateField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateField.js","names":[],"sources":["../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructFrom.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/toDate.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isDate.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isValid.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceInMilliseconds.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/addLeadingZeros.js","../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/formatISO.js","../../lib/ui/forms/DateField.tsx"],"sourcesContent":["/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n *\n * @returns The number of milliseconds\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport function differenceInMilliseconds(laterDate, earlierDate) {\n return +toDate(laterDate) - +toDate(earlierDate);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMilliseconds;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"./_lib/addLeadingZeros.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link formatISO} function options.\n */\n\n/**\n * @name formatISO\n * @category Common Helpers\n * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).\n *\n * @description\n * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.\n *\n * @param date - The original date\n * @param options - An object with options.\n *\n * @returns The formatted date string (in local time zone)\n *\n * @throws `date` must not be Invalid Date\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918T190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, date only:\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52Z'\n */\nexport function formatISO(date, options) {\n const date_ = toDate(date, options?.in);\n\n if (isNaN(+date_)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n const format = options?.format ?? \"extended\";\n const representation = options?.representation ?? \"complete\";\n\n let result = \"\";\n let tzOffset = \"\";\n\n const dateDelimiter = format === \"extended\" ? \"-\" : \"\";\n const timeDelimiter = format === \"extended\" ? \":\" : \"\";\n\n // Representation is either 'date' or 'complete'\n if (representation !== \"time\") {\n const day = addLeadingZeros(date_.getDate(), 2);\n const month = addLeadingZeros(date_.getMonth() + 1, 2);\n const year = addLeadingZeros(date_.getFullYear(), 4);\n\n // yyyyMMdd or yyyy-MM-dd.\n result = `${year}${dateDelimiter}${month}${dateDelimiter}${day}`;\n }\n\n // Representation is either 'time' or 'complete'\n if (representation !== \"date\") {\n // Add the timezone.\n const offset = date_.getTimezoneOffset();\n\n if (offset !== 0) {\n const absoluteOffset = Math.abs(offset);\n const hourOffset = addLeadingZeros(Math.trunc(absoluteOffset / 60), 2);\n const minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n // If less than 0, the sign is +, because it is ahead of time.\n const sign = offset < 0 ? \"+\" : \"-\";\n\n tzOffset = `${sign}${hourOffset}:${minuteOffset}`;\n } else {\n tzOffset = \"Z\";\n }\n\n const hour = addLeadingZeros(date_.getHours(), 2);\n const minute = addLeadingZeros(date_.getMinutes(), 2);\n const second = addLeadingZeros(date_.getSeconds(), 2);\n\n // If there's also date, separate it with time with 'T'\n const separator = result === \"\" ? \"\" : \"T\";\n\n // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.\n const time = [hour, minute, second].join(timeDelimiter);\n\n // HHmmss or HH:mm:ss.\n result = `${result}${separator}${time}${tzOffset}`;\n }\n\n return result;\n}\n\n// Fallback for modularized imports:\nexport default formatISO;\n","import clsx from 'clsx';\nimport { differenceInMilliseconds, formatISO, isValid } from 'date-fns';\nimport { type ChangeEvent, useCallback, useEffect, useId, useRef, useState } from 'react';\nimport { Icon, type IconicNames, type IconicTypes } from '@clubmed/trident-icons';\n\nimport { useValue } from '../hooks/useValue';\nimport { useInternalStatus } from '../hooks/useInternalStatus';\nimport { FormControl, type FormControlProps } from './FormControl';\n\ninterface DateFieldProps extends Omit<FormControlProps<Date | null>, 'max' | 'min'> {\n description?: string;\n /**\n * Open datepicker text\n */\n openDatepicker?: string;\n id?: string;\n icon?: IconicNames;\n iconType?: IconicTypes;\n errorMessage?: string;\n dataTestId?: string;\n /**\n * Minimum Date allowed\n */\n min?: Date | undefined;\n /**\n * Maximum Date allowed\n */\n max?: Date | undefined;\n}\n\nconst formatDate = (value: Date | number | undefined | null): string => {\n if (!value || !isValid(new Date(value))) {\n return '';\n }\n\n return formatISO(new Date(value), { representation: 'date' });\n};\n\nconst validateDateRange = (date: string, min?: Date, max?: Date): boolean => {\n if (!date) {\n return true;\n }\n\n const normalizeDate = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n const inputDate = new Date(date);\n const normalizedInputDate = normalizeDate(inputDate);\n\n if (min && normalizedInputDate < normalizeDate(min)) {\n return false;\n }\n if (max && normalizedInputDate > normalizeDate(max)) {\n return false;\n }\n\n return true;\n};\n\nexport const DateField = (props: DateFieldProps) => {\n const internalId = useId();\n\n const {\n id = internalId,\n name = id,\n label,\n description,\n openDatepicker,\n validationStatus = 'default',\n icon = 'CalendarDefault',\n iconType,\n errorMessage,\n disabled = false,\n required = false,\n hideRequiredStar,\n dataTestId = 'DateField',\n value: initialValue,\n min: initialMin,\n max: initialMax,\n onChange,\n ...rest\n } = props;\n\n // NO LOGIC IS IMPLEMENTED YET HERE\n // THIS IS A VISUAL COMPONENT ONLY\n const ref = useRef<HTMLInputElement>(null);\n const [isFocused, setIsFocused] = useState<boolean>(false);\n\n const internalStatus = useInternalStatus({\n isDisabled: disabled,\n validationStatus,\n });\n\n const { setValue, value } = useValue<string, Date | number | undefined | null>({\n name,\n formatter: formatDate as never,\n initialValue,\n onChange: (name, value) => onChange?.(name, new Date(value)),\n });\n\n const min = formatDate(initialMin);\n const max = formatDate(initialMax);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n setValue(event.target.value);\n };\n\n const handleClickPicker = () => {\n ref.current?.showPicker();\n };\n\n const handleOutOfRangeDate = useCallback(() => {\n const currentDate = new Date(value);\n\n if (initialMin && initialMax) {\n const distanceToMin = Math.abs(differenceInMilliseconds(currentDate, initialMin));\n const distanceToMax = Math.abs(differenceInMilliseconds(currentDate, initialMax));\n setValue(distanceToMin <= distanceToMax ? min : max);\n return;\n }\n\n if (initialMin) {\n setValue(min);\n return;\n }\n\n if (initialMax) {\n setValue(max);\n return;\n }\n }, [initialMax, initialMin, max, min, setValue, value]);\n\n useEffect(() => {\n const isValid = validateDateRange(value, initialMin, initialMax);\n if (!isValid && !isFocused) {\n handleOutOfRangeDate();\n }\n }, [handleOutOfRangeDate, initialMax, initialMin, isFocused, value]);\n\n return (\n <FormControl\n id={id}\n label={label}\n description={description}\n dataName=\"DateField\"\n dataTestId={dataTestId}\n disabled={disabled}\n required={required}\n hideRequiredStar={hideRequiredStar}\n validationStatus={validationStatus}\n errorMessage={errorMessage}\n >\n <div className=\"relative\" role=\"group\">\n <input\n {...rest}\n type=\"date\"\n className={clsx(\n 'text-b3 rounded-pill date-field min-h-[50px] w-full border px-20 py-12 ps-[52px] font-normal outline-none',\n {\n 'border-middleGrey focus:border-black active:border-black':\n internalStatus === 'default',\n 'pe-[52px]': internalStatus === 'error' || internalStatus === 'success',\n 'bg-pearl border-middleGrey': disabled,\n 'bg-white text-black': !disabled,\n 'border-red': !disabled && internalStatus === 'error',\n 'border-green': !disabled && internalStatus === 'success',\n },\n )}\n id={id}\n disabled={disabled}\n required={required}\n ref={ref}\n value={value}\n min={min}\n max={max}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n />\n <div\n className={clsx(\n 'pointer-events-none absolute inset-0 flex items-center justify-between px-20 py-12',\n {\n 'text-grey': disabled,\n 'text-red': !disabled && internalStatus === 'error',\n 'text-green': !disabled && internalStatus === 'success',\n },\n )}\n >\n <button className=\"pointer-events-auto leading-none\" onClick={handleClickPicker}>\n <Icon name={icon} iconType={iconType} width=\"24px\" />\n <span className=\"sr-only\">\n {openDatepicker}\n {/* REPLACE THAT WITH SOMETHING LIKE \"OPEN DATEPICKER\" SOONER RATHER THAN LATER PLZ */}\n </span>\n </button>\n <span className=\"ms-auto flex gap-x-8\">\n {internalStatus === 'error' && <Icon name=\"CrossDefault\" width=\"24px\" />}\n {internalStatus === 'success' && <Icon name=\"CheckDefault\" width=\"24px\" />}\n </span>\n </div>\n </div>\n </FormControl>\n );\n};\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7],"mappings":"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"}
|