@dmsi/wedgekit-react 0.0.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/README.md +35 -0
- package/dist/chunk-27KIIUAR.js +59 -0
- package/dist/chunk-2G2E2JMA.js +123 -0
- package/dist/chunk-4C66DLIJ.js +51 -0
- package/dist/chunk-4RD5ZF2V.js +55 -0
- package/dist/chunk-4RJKB7LC.js +14 -0
- package/dist/chunk-4T7F5BZZ.js +26 -0
- package/dist/chunk-5GOBP2JS.js +53 -0
- package/dist/chunk-6ZY524ID.js +42 -0
- package/dist/chunk-AWQSSKCK.js +32 -0
- package/dist/chunk-BNHSAFMP.js +93 -0
- package/dist/chunk-BWRHL2AG.js +439 -0
- package/dist/chunk-DKKYR6DS.js +132 -0
- package/dist/chunk-E5ALT5W7.js +182 -0
- package/dist/chunk-FY7PTP6E.js +322 -0
- package/dist/chunk-GTCSRHPF.js +119 -0
- package/dist/chunk-I2UVVKQI.js +12 -0
- package/dist/chunk-IGQVA7SC.js +41 -0
- package/dist/chunk-K3IKUSZW.js +59 -0
- package/dist/chunk-KENSVWOY.js +151 -0
- package/dist/chunk-KX3O6GJ6.js +138 -0
- package/dist/chunk-L4UM372R.js +253 -0
- package/dist/chunk-ORMEWXMH.js +37 -0
- package/dist/chunk-Q3FKEKIN.js +23 -0
- package/dist/chunk-SEKKGFM6.js +28 -0
- package/dist/chunk-SY3HT54E.js +91 -0
- package/dist/chunk-TAW5ZZ4Z.js +346 -0
- package/dist/chunk-TRUPPHBQ.js +109 -0
- package/dist/chunk-TU55CHXU.js +30 -0
- package/dist/chunk-TWZZB4WO.js +114 -0
- package/dist/chunk-TYI74BSP.js +62 -0
- package/dist/chunk-U42SKNR6.js +104 -0
- package/dist/chunk-UU3FA6LV.js +72 -0
- package/dist/chunk-WVUIIBRR.js +51 -0
- package/dist/chunk-XUIPGYP5.js +39 -0
- package/dist/chunk-Z4UCFUF7.js +299 -0
- package/dist/components/Breadcrumbs.cjs +376 -0
- package/dist/components/Breadcrumbs.js +90 -0
- package/dist/components/Button.cjs +319 -0
- package/dist/components/Button.js +8 -0
- package/dist/components/CalendarRange.cjs +520 -0
- package/dist/components/CalendarRange.js +13 -0
- package/dist/components/Caption.cjs +283 -0
- package/dist/components/Caption.js +80 -0
- package/dist/components/Checkbox.cjs +378 -0
- package/dist/components/Checkbox.js +11 -0
- package/dist/components/ContentTab.cjs +382 -0
- package/dist/components/ContentTab.js +10 -0
- package/dist/components/ContentTabs.cjs +472 -0
- package/dist/components/ContentTabs.js +98 -0
- package/dist/components/DMSiLogo.cjs +79 -0
- package/dist/components/DMSiLogo.js +56 -0
- package/dist/components/DataGrid.cjs +3113 -0
- package/dist/components/DataGrid.js +758 -0
- package/dist/components/DataGridCell.cjs +1907 -0
- package/dist/components/DataGridCell.js +24 -0
- package/dist/components/DataTable.cjs +791 -0
- package/dist/components/DataTable.js +720 -0
- package/dist/components/DateInput.cjs +1130 -0
- package/dist/components/DateInput.js +170 -0
- package/dist/components/DateRangeInput.cjs +1131 -0
- package/dist/components/DateRangeInput.js +171 -0
- package/dist/components/DebugJson.cjs +50 -0
- package/dist/components/DebugJson.js +27 -0
- package/dist/components/Display.cjs +234 -0
- package/dist/components/Display.js +12 -0
- package/dist/components/EditingContext.cjs +73 -0
- package/dist/components/EditingContext.js +35 -0
- package/dist/components/FilterGroup.cjs +1431 -0
- package/dist/components/FilterGroup.js +231 -0
- package/dist/components/FullViewportBox.cjs +35 -0
- package/dist/components/FullViewportBox.js +12 -0
- package/dist/components/Grid.cjs +69 -0
- package/dist/components/Grid.js +36 -0
- package/dist/components/GridContainer.cjs +125 -0
- package/dist/components/GridContainer.js +92 -0
- package/dist/components/Heading.cjs +238 -0
- package/dist/components/Heading.js +14 -0
- package/dist/components/HorizontalDivider.cjs +33 -0
- package/dist/components/HorizontalDivider.js +10 -0
- package/dist/components/Icon.cjs +98 -0
- package/dist/components/Icon.js +7 -0
- package/dist/components/Input.cjs +672 -0
- package/dist/components/Input.js +21 -0
- package/dist/components/InputGroup.cjs +270 -0
- package/dist/components/InputGroup.js +60 -0
- package/dist/components/Label.cjs +223 -0
- package/dist/components/Label.js +8 -0
- package/dist/components/Link.cjs +262 -0
- package/dist/components/Link.js +8 -0
- package/dist/components/List.cjs +37 -0
- package/dist/components/List.js +14 -0
- package/dist/components/LiveChatComponent.cjs +63 -0
- package/dist/components/LiveChatComponent.js +40 -0
- package/dist/components/LogoAgilityTopBar.cjs +115 -0
- package/dist/components/LogoAgilityTopBar.js +92 -0
- package/dist/components/LogoDMSiTopBar.cjs +79 -0
- package/dist/components/LogoDMSiTopBar.js +7 -0
- package/dist/components/LogoMillworkTopBar.cjs +221 -0
- package/dist/components/LogoMillworkTopBar.js +198 -0
- package/dist/components/MainBar.cjs +211 -0
- package/dist/components/MainBar.js +65 -0
- package/dist/components/Menu.cjs +437 -0
- package/dist/components/Menu.js +11 -0
- package/dist/components/MenuOption.cjs +483 -0
- package/dist/components/MenuOption.js +13 -0
- package/dist/components/MobileDataGrid.cjs +658 -0
- package/dist/components/MobileDataGrid.js +125 -0
- package/dist/components/Modal.cjs +783 -0
- package/dist/components/Modal.js +245 -0
- package/dist/components/ModalButtons.cjs +385 -0
- package/dist/components/ModalButtons.js +10 -0
- package/dist/components/ModalContent.cjs +57 -0
- package/dist/components/ModalContent.js +7 -0
- package/dist/components/ModalHeader.cjs +426 -0
- package/dist/components/ModalHeader.js +11 -0
- package/dist/components/ModalScrim.cjs +64 -0
- package/dist/components/ModalScrim.js +7 -0
- package/dist/components/NavigationTab.cjs +431 -0
- package/dist/components/NavigationTab.js +10 -0
- package/dist/components/NavigationTabs.cjs +477 -0
- package/dist/components/NavigationTabs.js +56 -0
- package/dist/components/Notification.cjs +640 -0
- package/dist/components/Notification.js +117 -0
- package/dist/components/OptionPill.cjs +478 -0
- package/dist/components/OptionPill.js +11 -0
- package/dist/components/Paragraph.cjs +231 -0
- package/dist/components/Paragraph.js +8 -0
- package/dist/components/Password.cjs +700 -0
- package/dist/components/Password.js +53 -0
- package/dist/components/ProjectBar.cjs +242 -0
- package/dist/components/ProjectBar.js +63 -0
- package/dist/components/Radio.cjs +349 -0
- package/dist/components/Radio.js +131 -0
- package/dist/components/Search.cjs +767 -0
- package/dist/components/Search.js +12 -0
- package/dist/components/Select.cjs +758 -0
- package/dist/components/Select.js +12 -0
- package/dist/components/SideMenu.cjs +54 -0
- package/dist/components/SideMenu.js +21 -0
- package/dist/components/SideMenuGroup.cjs +422 -0
- package/dist/components/SideMenuGroup.js +83 -0
- package/dist/components/SideMenuItem.cjs +388 -0
- package/dist/components/SideMenuItem.js +70 -0
- package/dist/components/Stack.cjs +138 -0
- package/dist/components/Stack.js +7 -0
- package/dist/components/StatusPill.cjs +265 -0
- package/dist/components/StatusPill.js +52 -0
- package/dist/components/Stepper.cjs +885 -0
- package/dist/components/Stepper.js +105 -0
- package/dist/components/Subheader.cjs +226 -0
- package/dist/components/Subheader.js +8 -0
- package/dist/components/Surface.cjs +98 -0
- package/dist/components/Surface.js +40 -0
- package/dist/components/Swatch.cjs +1728 -0
- package/dist/components/Swatch.js +1319 -0
- package/dist/components/Textarea.cjs +269 -0
- package/dist/components/Textarea.js +96 -0
- package/dist/components/Theme.cjs +36 -0
- package/dist/components/Theme.js +7 -0
- package/dist/components/Time.cjs +1118 -0
- package/dist/components/Time.js +353 -0
- package/dist/components/Toast.cjs +644 -0
- package/dist/components/Toast.js +218 -0
- package/dist/components/Tooltip.cjs +273 -0
- package/dist/components/Tooltip.js +9 -0
- package/dist/components/TopBar.cjs +352 -0
- package/dist/components/TopBar.js +132 -0
- package/dist/components/useInfiniteScroll.cjs +57 -0
- package/dist/components/useInfiniteScroll.js +8 -0
- package/dist/components/useMatchesMedia.cjs +53 -0
- package/dist/components/useMatchesMedia.js +9 -0
- package/dist/components/useMenuSystem.cjs +358 -0
- package/dist/components/useMenuSystem.js +11 -0
- package/dist/components/useMounted.cjs +39 -0
- package/dist/components/useMounted.js +8 -0
- package/dist/fonts.css +21 -0
- package/dist/icons-light[FILL]-PPZXOLWS.woff2 +0 -0
- package/dist/icons-normal[FILL]-PPZXOLWS.woff2 +0 -0
- package/dist/index.css +4401 -0
- package/dist/open-sans-55T6A4JE.woff2 +0 -0
- package/dist/types.cjs +18 -0
- package/dist/types.js +0 -0
- package/package.json +66 -0
- package/src/brand.css +125 -0
- package/src/classNames.ts +144 -0
- package/src/components/Breadcrumbs.tsx +116 -0
- package/src/components/Button.tsx +210 -0
- package/src/components/CalendarRange.tsx +429 -0
- package/src/components/Caption.tsx +101 -0
- package/src/components/Checkbox.tsx +196 -0
- package/src/components/ContentTab.tsx +66 -0
- package/src/components/ContentTabs.tsx +103 -0
- package/src/components/DMSiLogo.tsx +32 -0
- package/src/components/DataGrid.tsx +948 -0
- package/src/components/DataGridCell.tsx +384 -0
- package/src/components/DataTable.tsx +835 -0
- package/src/components/DateInput.tsx +188 -0
- package/src/components/DateRangeInput.tsx +179 -0
- package/src/components/DebugJson.tsx +24 -0
- package/src/components/Display.tsx +60 -0
- package/src/components/EditingContext.tsx +40 -0
- package/src/components/FilterGroup.tsx +234 -0
- package/src/components/FullViewportBox.tsx +11 -0
- package/src/components/Grid.tsx +75 -0
- package/src/components/GridContainer.tsx +124 -0
- package/src/components/Heading.tsx +66 -0
- package/src/components/HorizontalDivider.tsx +3 -0
- package/src/components/Icon.tsx +36 -0
- package/src/components/Input.tsx +511 -0
- package/src/components/InputGroup.tsx +51 -0
- package/src/components/Label.tsx +40 -0
- package/src/components/Link.tsx +106 -0
- package/src/components/List.tsx +10 -0
- package/src/components/LiveChatComponent.tsx +56 -0
- package/src/components/LogoAgilityTopBar.tsx +53 -0
- package/src/components/LogoDMSiTopBar.tsx +32 -0
- package/src/components/LogoMillworkTopBar.tsx +118 -0
- package/src/components/MainBar.tsx +83 -0
- package/src/components/Menu.tsx +286 -0
- package/src/components/MenuOption.tsx +275 -0
- package/src/components/MobileDataGrid.tsx +135 -0
- package/src/components/Modal.tsx +271 -0
- package/src/components/ModalButtons.tsx +44 -0
- package/src/components/ModalContent.tsx +23 -0
- package/src/components/ModalHeader.tsx +41 -0
- package/src/components/ModalScrim.tsx +35 -0
- package/src/components/NavigationTab.tsx +89 -0
- package/src/components/NavigationTabs.tsx +63 -0
- package/src/components/Notification.tsx +120 -0
- package/src/components/OptionPill.tsx +114 -0
- package/src/components/Paragraph.tsx +49 -0
- package/src/components/Password.tsx +46 -0
- package/src/components/ProjectBar.tsx +76 -0
- package/src/components/Radio.tsx +140 -0
- package/src/components/Search.tsx +129 -0
- package/src/components/Select.tsx +104 -0
- package/src/components/SideMenu.tsx +21 -0
- package/src/components/SideMenuGroup.tsx +81 -0
- package/src/components/SideMenuItem.tsx +90 -0
- package/src/components/Stack.tsx +179 -0
- package/src/components/StatusPill.tsx +51 -0
- package/src/components/Stepper.tsx +91 -0
- package/src/components/Subheader.tsx +44 -0
- package/src/components/Surface.tsx +34 -0
- package/src/components/Swatch.tsx +1066 -0
- package/src/components/Textarea.tsx +101 -0
- package/src/components/Theme.tsx +13 -0
- package/src/components/Time.tsx +438 -0
- package/src/components/Toast.tsx +244 -0
- package/src/components/Tooltip.tsx +137 -0
- package/src/components/TopBar.tsx +124 -0
- package/src/components/useInfiniteScroll.tsx +40 -0
- package/src/components/useMatchesMedia.tsx +28 -0
- package/src/components/useMenuSystem.tsx +367 -0
- package/src/components/useMounted.tsx +14 -0
- package/src/darkmode.css +140 -0
- package/src/fonts.css +23 -0
- package/src/index.css +509 -0
- package/src/index.tsx +2 -0
- package/src/types.ts +149 -0
- package/src/utils/formatting.tsx +81 -0
- package/src/utils.ts +23 -0
|
@@ -0,0 +1,1130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __defProps = Object.defineProperties;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
9
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
|
+
var __spreadValues = (a, b) => {
|
|
14
|
+
for (var prop in b || (b = {}))
|
|
15
|
+
if (__hasOwnProp.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
if (__getOwnPropSymbols)
|
|
18
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
19
|
+
if (__propIsEnum.call(b, prop))
|
|
20
|
+
__defNormalProp(a, prop, b[prop]);
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
23
|
+
};
|
|
24
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
25
|
+
var __objRest = (source, exclude) => {
|
|
26
|
+
var target = {};
|
|
27
|
+
for (var prop in source)
|
|
28
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
29
|
+
target[prop] = source[prop];
|
|
30
|
+
if (source != null && __getOwnPropSymbols)
|
|
31
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
32
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
33
|
+
target[prop] = source[prop];
|
|
34
|
+
}
|
|
35
|
+
return target;
|
|
36
|
+
};
|
|
37
|
+
var __export = (target, all) => {
|
|
38
|
+
for (var name in all)
|
|
39
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
40
|
+
};
|
|
41
|
+
var __copyProps = (to, from, except, desc) => {
|
|
42
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
43
|
+
for (let key of __getOwnPropNames(from))
|
|
44
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
45
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
46
|
+
}
|
|
47
|
+
return to;
|
|
48
|
+
};
|
|
49
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
50
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
51
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
52
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
53
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
54
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
55
|
+
mod
|
|
56
|
+
));
|
|
57
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
58
|
+
|
|
59
|
+
// src/components/DateInput.tsx
|
|
60
|
+
var DateInput_exports = {};
|
|
61
|
+
__export(DateInput_exports, {
|
|
62
|
+
DateInput: () => DateInput
|
|
63
|
+
});
|
|
64
|
+
module.exports = __toCommonJS(DateInput_exports);
|
|
65
|
+
var import_react3 = require("react");
|
|
66
|
+
var import_react_dom = require("react-dom");
|
|
67
|
+
|
|
68
|
+
// src/components/Input.tsx
|
|
69
|
+
var import_react = require("react");
|
|
70
|
+
var import_clsx4 = __toESM(require("clsx"), 1);
|
|
71
|
+
|
|
72
|
+
// src/classNames.ts
|
|
73
|
+
var import_clsx = __toESM(require("clsx"), 1);
|
|
74
|
+
var typography = {
|
|
75
|
+
display1: (0, import_clsx.default)(
|
|
76
|
+
"font-sans font-semibold",
|
|
77
|
+
"text-display-1-mobile desktop:text-display-1-desktop compact:text-display-1-desktop-compact",
|
|
78
|
+
"leading-display-1-mobile desktop:leading-display-1-desktop"
|
|
79
|
+
),
|
|
80
|
+
display2: (0, import_clsx.default)(
|
|
81
|
+
"font-sans font-bold",
|
|
82
|
+
"text-display-2-mobile desktop:text-display-2-desktop compact:text-display-2-desktop-compact",
|
|
83
|
+
"leading-display-2-mobile desktop:leading-display-2-desktop"
|
|
84
|
+
),
|
|
85
|
+
heading1: (0, import_clsx.default)(
|
|
86
|
+
"font-sans font-semibold",
|
|
87
|
+
"text-heading-1-mobile desktop:text-heading-1-desktop compact:text-heading-1-desktop-compact",
|
|
88
|
+
"leading-heading-1-mobile desktop:leading-heading-1-desktop"
|
|
89
|
+
),
|
|
90
|
+
heading2: (0, import_clsx.default)(
|
|
91
|
+
"font-sans font-normal",
|
|
92
|
+
"text-heading-2-mobile desktop:text-heading-2-desktop compact:text-heading-2-desktop-compact",
|
|
93
|
+
"leading-heading-2-mobile desktop:leading-heading-2-desktop"
|
|
94
|
+
),
|
|
95
|
+
heading3: (0, import_clsx.default)(
|
|
96
|
+
"font-sans font-semibold",
|
|
97
|
+
"text-heading-3-mobile desktop:text-heading-3-desktop compact:text-heading-3-desktop-compact",
|
|
98
|
+
"leading-heading-3-mobile desktop:leading-heading-3-desktop"
|
|
99
|
+
),
|
|
100
|
+
subheader: (0, import_clsx.default)(
|
|
101
|
+
"font-sans font-semibold",
|
|
102
|
+
"text-subheader-mobile desktop:text-subheader-desktop compact:text-subheader-desktop-compact",
|
|
103
|
+
"leading-subheader-mobile desktop:leading-subheader-desktop"
|
|
104
|
+
),
|
|
105
|
+
link: (0, import_clsx.default)(
|
|
106
|
+
"font-sans font-normal",
|
|
107
|
+
"text-link-mobile desktop:text-link-desktop compact:text-link-desktop-compact",
|
|
108
|
+
"leading-link-mobile desktop:leading-link-desktop"
|
|
109
|
+
),
|
|
110
|
+
buttonLabel: (0, import_clsx.default)(
|
|
111
|
+
"font-sans font-semibold",
|
|
112
|
+
"text-label-mobile desktop:text-label-desktop compact:text-label-desktop-compact",
|
|
113
|
+
"leading-label-mobile desktop:leading-label-desktop"
|
|
114
|
+
),
|
|
115
|
+
label: (0, import_clsx.default)(
|
|
116
|
+
"font-sans font-semibold",
|
|
117
|
+
"text-label-mobile desktop:text-label-desktop compact:text-label-desktop-compact",
|
|
118
|
+
"leading-label-mobile desktop:leading-label-desktop"
|
|
119
|
+
),
|
|
120
|
+
paragraph: (0, import_clsx.default)(
|
|
121
|
+
"font-sans font-normal",
|
|
122
|
+
"text-paragraph-mobile desktop:text-paragraph-desktop compact:text-paragraph-desktop-compact",
|
|
123
|
+
"leading-paragraph-mobile desktop:leading-paragraph-desktop"
|
|
124
|
+
),
|
|
125
|
+
caption: (0, import_clsx.default)(
|
|
126
|
+
"font-sans font-normal",
|
|
127
|
+
"text-caption-mobile desktop:text-caption-desktop compact:text-caption-desktop-compact",
|
|
128
|
+
"leading-caption-mobile desktop:leading-caption-desktop"
|
|
129
|
+
)
|
|
130
|
+
};
|
|
131
|
+
var baseTransition = (0, import_clsx.default)(
|
|
132
|
+
"transition-colors duration-100 ease-in-out"
|
|
133
|
+
);
|
|
134
|
+
var componentGap = (0, import_clsx.default)(
|
|
135
|
+
"gap-mobile-component-gap desktop:gap-desktop-component-gap compact:gap-desktop-compact-component-gap"
|
|
136
|
+
);
|
|
137
|
+
var paddingUsingComponentGap = (0, import_clsx.default)(
|
|
138
|
+
"p-mobile-component-gap desktop:p-desktop-component-gap compact:p-desktop-compact-component-gap"
|
|
139
|
+
);
|
|
140
|
+
var paddingYUsingLayoutGroupGap = (0, import_clsx.default)(
|
|
141
|
+
"py-mobile-layout-group-gap desktop:py-desktop-layout-group-gap compact:py-desktop-compact-layout-group-gap"
|
|
142
|
+
);
|
|
143
|
+
var componentPadding = (0, import_clsx.default)(
|
|
144
|
+
"p-mobile-component-padding desktop:p-desktop-component-padding compact:p-desktop-compact-component-padding"
|
|
145
|
+
);
|
|
146
|
+
var componentPaddingBottom = (0, import_clsx.default)(
|
|
147
|
+
"pb-mobile-component-padding desktop:pb-desktop-component-padding compact:pb-desktop-compact-component-padding"
|
|
148
|
+
);
|
|
149
|
+
var componentPaddingY = (0, import_clsx.default)(
|
|
150
|
+
"py-mobile-component-padding desktop:py-desktop-component-padding compact:py-desktop-compact-component-padding"
|
|
151
|
+
);
|
|
152
|
+
var componentPaddingXUsingComponentGap = (0, import_clsx.default)(
|
|
153
|
+
"px-mobile-component-gap desktop:px-desktop-component-gap compact:px-desktop-compact-component-gap"
|
|
154
|
+
);
|
|
155
|
+
var componentPaddingYUsingComponentGap = (0, import_clsx.default)(
|
|
156
|
+
"py-mobile-component-gap desktop:py-desktop-component-gap compact:py-desktop-compact-component-gap"
|
|
157
|
+
);
|
|
158
|
+
var componentPaddingMinusBorder = (0, import_clsx.default)(
|
|
159
|
+
"p-[calc(var(--spacing-mobile-component-padding)_-_1px)] desktop:p-[calc(var(--spacing-desktop-component-padding)_-_1px)] compact:p-[calc(var(--spacing-desktop-compact-component-padding)_-_1px)]"
|
|
160
|
+
);
|
|
161
|
+
var componentPaddingMinus2pxBorder = (0, import_clsx.default)(
|
|
162
|
+
"p-[calc(var(--spacing-mobile-component-padding)_-_2px)] desktop:p-[calc(var(--spacing-desktop-component-padding)_-_2px)] compact:p-[calc(var(--spacing-desktop-compact-component-padding)_-_2px)]"
|
|
163
|
+
);
|
|
164
|
+
var layoutPaddingBottom = (0, import_clsx.default)(
|
|
165
|
+
"pb-mobile-layout-padding desktop:pb-desktop-layout-padding compact:pb-desktop-compact-layout-padding"
|
|
166
|
+
);
|
|
167
|
+
var layoutPaddingY = (0, import_clsx.default)(
|
|
168
|
+
"py-mobile-layout-padding desktop:py-desktop-layout-padding compact:py-desktop-compact-layout-padding"
|
|
169
|
+
);
|
|
170
|
+
var containerPaddingX = (0, import_clsx.default)(
|
|
171
|
+
"px-mobile-container-padding desktop:px-desktop-container-padding compact:px-desktop-compact-container-padding"
|
|
172
|
+
);
|
|
173
|
+
var containerPaddingY = (0, import_clsx.default)(
|
|
174
|
+
"py-mobile-container-padding desktop:py-desktop-container-padding compact:py-desktop-compact-container-padding"
|
|
175
|
+
);
|
|
176
|
+
var layoutGroupGapPaddingY = (0, import_clsx.default)(
|
|
177
|
+
"py-mobile-layout-group-gap desktop:py-desktop-layout-group-gap compact:py-desktop-compact-layout-group-gap"
|
|
178
|
+
);
|
|
179
|
+
var layoutGroupGap = (0, import_clsx.default)(
|
|
180
|
+
"gap-mobile-layout-group-gap desktop:gap-desktop-layout-group-gap compact:gap-desktop-compact-layout-group-gap"
|
|
181
|
+
);
|
|
182
|
+
var layoutGap = (0, import_clsx.default)(
|
|
183
|
+
"gap-mobile-layout-gap desktop:gap-desktop-layout-gap compact:gap-desktop-compact-layout-gap"
|
|
184
|
+
);
|
|
185
|
+
var gapUsingContainerPadding = (0, import_clsx.default)(
|
|
186
|
+
"gap-mobile-container-padding desktop:gap-desktop-container-padding compact:gap-desktop-compact-container-padding"
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
// src/components/Label.tsx
|
|
190
|
+
var import_clsx2 = __toESM(require("clsx"), 1);
|
|
191
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
192
|
+
var Label = (_a) => {
|
|
193
|
+
var _b = _a, {
|
|
194
|
+
as = "span",
|
|
195
|
+
padded,
|
|
196
|
+
className,
|
|
197
|
+
color,
|
|
198
|
+
align
|
|
199
|
+
} = _b, props = __objRest(_b, [
|
|
200
|
+
"as",
|
|
201
|
+
"padded",
|
|
202
|
+
"className",
|
|
203
|
+
"color",
|
|
204
|
+
"align"
|
|
205
|
+
]);
|
|
206
|
+
const Element = as;
|
|
207
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
208
|
+
Element,
|
|
209
|
+
__spreadProps(__spreadValues({
|
|
210
|
+
className: (0, import_clsx2.default)(
|
|
211
|
+
typography.label,
|
|
212
|
+
align === "left" && "text-left",
|
|
213
|
+
align === "center" && "text-center",
|
|
214
|
+
align === "right" && "text-right",
|
|
215
|
+
className,
|
|
216
|
+
padded && componentPaddingXUsingComponentGap
|
|
217
|
+
)
|
|
218
|
+
}, props), {
|
|
219
|
+
style: __spreadProps(__spreadValues({}, props.style), {
|
|
220
|
+
color: color ? `var(--color-${color})` : void 0
|
|
221
|
+
})
|
|
222
|
+
})
|
|
223
|
+
);
|
|
224
|
+
};
|
|
225
|
+
Label.displayName = "Label";
|
|
226
|
+
|
|
227
|
+
// src/components/Icon.tsx
|
|
228
|
+
var import_clsx3 = __toESM(require("clsx"), 1);
|
|
229
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
230
|
+
function Icon(_a) {
|
|
231
|
+
var _b = _a, {
|
|
232
|
+
name,
|
|
233
|
+
size = 24,
|
|
234
|
+
variant = "outline"
|
|
235
|
+
} = _b, props = __objRest(_b, [
|
|
236
|
+
"name",
|
|
237
|
+
"size",
|
|
238
|
+
"variant"
|
|
239
|
+
]);
|
|
240
|
+
const variantStyle = variant === "filled" ? '"FILL" 1' : '"FILL" 0';
|
|
241
|
+
const weightStyle = size === 16 ? '"wght" 400' : '"wght" 300';
|
|
242
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
243
|
+
"span",
|
|
244
|
+
__spreadProps(__spreadValues({}, props), {
|
|
245
|
+
className: (0, import_clsx3.default)(
|
|
246
|
+
"icon",
|
|
247
|
+
`icon-${size}`,
|
|
248
|
+
// size === 16 ? "font-normal" : "font-light", // size 16 font weight is not working as normal from before
|
|
249
|
+
props.className
|
|
250
|
+
),
|
|
251
|
+
style: __spreadValues({
|
|
252
|
+
fontVariationSettings: variantStyle + `, ${weightStyle}`
|
|
253
|
+
}, props.style),
|
|
254
|
+
children: name
|
|
255
|
+
})
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// src/utils/formatting.tsx
|
|
260
|
+
function getDecimalPlaceholder(decimals) {
|
|
261
|
+
if (!decimals || decimals <= 0) {
|
|
262
|
+
return {};
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
placeholder: `0.${"0".repeat(decimals)}`
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
function formatDecimalValue(value, decimals) {
|
|
269
|
+
if (!value || value === "") {
|
|
270
|
+
return "";
|
|
271
|
+
}
|
|
272
|
+
const numValue = typeof value === "string" ? parseFloat(value) : value;
|
|
273
|
+
if (isNaN(numValue)) {
|
|
274
|
+
return "";
|
|
275
|
+
}
|
|
276
|
+
if (!decimals || decimals <= 0) {
|
|
277
|
+
return String(Math.round(numValue));
|
|
278
|
+
}
|
|
279
|
+
return numValue.toFixed(decimals);
|
|
280
|
+
}
|
|
281
|
+
function formatCurrencyDisplay(value) {
|
|
282
|
+
if (!value || value === "") {
|
|
283
|
+
return "";
|
|
284
|
+
}
|
|
285
|
+
const parts = value.split(".");
|
|
286
|
+
const integerPart = parts[0];
|
|
287
|
+
const decimalPart = parts[1];
|
|
288
|
+
const formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
289
|
+
return decimalPart !== void 0 ? `${formattedInteger}.${decimalPart}` : formattedInteger;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// src/components/Input.tsx
|
|
293
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
294
|
+
var InputBase = (_a) => {
|
|
295
|
+
var _b = _a, {
|
|
296
|
+
before,
|
|
297
|
+
after,
|
|
298
|
+
type,
|
|
299
|
+
label,
|
|
300
|
+
error,
|
|
301
|
+
className,
|
|
302
|
+
align = "left",
|
|
303
|
+
caption,
|
|
304
|
+
required,
|
|
305
|
+
selectOnFocus,
|
|
306
|
+
removeRoundness,
|
|
307
|
+
inputContainerRef,
|
|
308
|
+
removeBorder,
|
|
309
|
+
wrapperClassName,
|
|
310
|
+
focus
|
|
311
|
+
} = _b, props = __objRest(_b, [
|
|
312
|
+
"before",
|
|
313
|
+
"after",
|
|
314
|
+
"type",
|
|
315
|
+
"label",
|
|
316
|
+
"error",
|
|
317
|
+
"className",
|
|
318
|
+
"align",
|
|
319
|
+
"caption",
|
|
320
|
+
"required",
|
|
321
|
+
"selectOnFocus",
|
|
322
|
+
"removeRoundness",
|
|
323
|
+
"inputContainerRef",
|
|
324
|
+
"removeBorder",
|
|
325
|
+
"wrapperClassName",
|
|
326
|
+
"focus"
|
|
327
|
+
]);
|
|
328
|
+
const attributes = {
|
|
329
|
+
"data-error": error && !focus || null,
|
|
330
|
+
"data-focus": focus || null
|
|
331
|
+
};
|
|
332
|
+
const inputRef = (0, import_react.useRef)(null);
|
|
333
|
+
(0, import_react.useEffect)(() => {
|
|
334
|
+
var _a2;
|
|
335
|
+
const input = inputRef.current;
|
|
336
|
+
const focusHandler = () => {
|
|
337
|
+
input == null ? void 0 : input.select();
|
|
338
|
+
};
|
|
339
|
+
if (selectOnFocus) {
|
|
340
|
+
(_a2 = inputRef.current) == null ? void 0 : _a2.addEventListener("focus", focusHandler);
|
|
341
|
+
return () => {
|
|
342
|
+
input == null ? void 0 : input.removeEventListener("focus", focusHandler);
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
}, [selectOnFocus]);
|
|
346
|
+
const inputBaseClass = (0, import_clsx4.default)(
|
|
347
|
+
"w-full",
|
|
348
|
+
"flex flex-row items-center",
|
|
349
|
+
"bg-background-action-secondary-normal caret-icon-on-action-secondary-normal",
|
|
350
|
+
componentGap,
|
|
351
|
+
baseTransition,
|
|
352
|
+
"outline-transparent outline-2 -outline-offset-2",
|
|
353
|
+
componentPaddingMinusBorder,
|
|
354
|
+
!removeRoundness && "rounded-base",
|
|
355
|
+
!removeBorder && "border border-border-primary-normal",
|
|
356
|
+
"relative"
|
|
357
|
+
);
|
|
358
|
+
const inputFocusClass = (0, import_clsx4.default)(
|
|
359
|
+
"has-[[data-focus]]:border-transparent has-[[data-focus]]:outline-border-primary-focus focus-within:border-transparent focus-within:outline-border-primary-focus"
|
|
360
|
+
);
|
|
361
|
+
const inputDisabledClass = (0, import_clsx4.default)(
|
|
362
|
+
"has-disabled:bg-background-action-secondary-disabled"
|
|
363
|
+
);
|
|
364
|
+
const inputReadOnlyClass = (0, import_clsx4.default)(
|
|
365
|
+
"has-[input:not(:disabled):read-only]:outline-none has-[input:not(:disabled):read-only]:bg-transparent has-[input:not(:disabled):read-only]:border-transparent has-[input:not(:disabled):read-only]:pl-0"
|
|
366
|
+
);
|
|
367
|
+
const inputInvalidClass = (0, import_clsx4.default)(
|
|
368
|
+
"has-[[data-error]]:border-transparent has-[[data-error]]:not-focus-within:outline-border-primary-error has-[[data-error]]:not-focus-within:outline-1"
|
|
369
|
+
);
|
|
370
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
371
|
+
"label",
|
|
372
|
+
{
|
|
373
|
+
ref: inputContainerRef,
|
|
374
|
+
className: (0, import_clsx4.default)(
|
|
375
|
+
"w-full flex flex-col",
|
|
376
|
+
"block",
|
|
377
|
+
"text-text-primary-normal has-disabled:text-text-primary-disabled",
|
|
378
|
+
componentGap
|
|
379
|
+
),
|
|
380
|
+
style: __spreadValues({}, props.style),
|
|
381
|
+
children: [
|
|
382
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: (0, import_clsx4.default)("flex items-center", componentGap), children: [
|
|
383
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
384
|
+
Label,
|
|
385
|
+
{
|
|
386
|
+
className: (0, import_clsx4.default)(
|
|
387
|
+
props.disabled || props.readOnly ? "cursor-default" : "cursor-pointer"
|
|
388
|
+
),
|
|
389
|
+
children: label
|
|
390
|
+
}
|
|
391
|
+
),
|
|
392
|
+
required && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
393
|
+
"span",
|
|
394
|
+
{
|
|
395
|
+
className: (0, import_clsx4.default)(typography.label, "text-text-critical-normal"),
|
|
396
|
+
children: "*"
|
|
397
|
+
}
|
|
398
|
+
)
|
|
399
|
+
] }),
|
|
400
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
401
|
+
"div",
|
|
402
|
+
{
|
|
403
|
+
className: (0, import_clsx4.default)(
|
|
404
|
+
inputBaseClass,
|
|
405
|
+
!props.disabled && inputInvalidClass,
|
|
406
|
+
inputFocusClass,
|
|
407
|
+
inputDisabledClass,
|
|
408
|
+
inputReadOnlyClass,
|
|
409
|
+
wrapperClassName
|
|
410
|
+
),
|
|
411
|
+
children: [
|
|
412
|
+
before,
|
|
413
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
414
|
+
"input",
|
|
415
|
+
__spreadProps(__spreadValues(__spreadValues({
|
|
416
|
+
ref: (el) => {
|
|
417
|
+
inputRef.current = el;
|
|
418
|
+
},
|
|
419
|
+
type,
|
|
420
|
+
required
|
|
421
|
+
}, props), attributes), {
|
|
422
|
+
id: props.id,
|
|
423
|
+
className: (0, import_clsx4.default)(
|
|
424
|
+
"flex-1 outline-none w-full max-w-full min-h-6 min-w-0",
|
|
425
|
+
"[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none",
|
|
426
|
+
"placeholder:text-text-secondary-normal disabled:text-text-secondary-disabled",
|
|
427
|
+
align === "right" && "text-right",
|
|
428
|
+
align === "center" && "text-center",
|
|
429
|
+
componentPaddingXUsingComponentGap,
|
|
430
|
+
typography.paragraph,
|
|
431
|
+
className,
|
|
432
|
+
props.readOnly && !props.disabled && "!px-0"
|
|
433
|
+
)
|
|
434
|
+
})
|
|
435
|
+
),
|
|
436
|
+
after
|
|
437
|
+
]
|
|
438
|
+
}
|
|
439
|
+
),
|
|
440
|
+
caption
|
|
441
|
+
]
|
|
442
|
+
}
|
|
443
|
+
);
|
|
444
|
+
};
|
|
445
|
+
var Input = (_a) => {
|
|
446
|
+
var _b = _a, {
|
|
447
|
+
variant = "default",
|
|
448
|
+
decimals,
|
|
449
|
+
uom,
|
|
450
|
+
removeSearchIcon,
|
|
451
|
+
value: propValue,
|
|
452
|
+
onChange,
|
|
453
|
+
onBlur,
|
|
454
|
+
onClear
|
|
455
|
+
} = _b, props = __objRest(_b, [
|
|
456
|
+
"variant",
|
|
457
|
+
"decimals",
|
|
458
|
+
"uom",
|
|
459
|
+
"removeSearchIcon",
|
|
460
|
+
"value",
|
|
461
|
+
"onChange",
|
|
462
|
+
"onBlur",
|
|
463
|
+
"onClear"
|
|
464
|
+
]);
|
|
465
|
+
const [internalValue, setInternalValue] = (0, import_react.useState)("");
|
|
466
|
+
const [displayValue, setDisplayValue] = (0, import_react.useState)("");
|
|
467
|
+
(0, import_react.useEffect)(() => {
|
|
468
|
+
var _a2;
|
|
469
|
+
const stringValue = (_a2 = propValue == null ? void 0 : propValue.toString()) != null ? _a2 : "";
|
|
470
|
+
if (variant === "currency") {
|
|
471
|
+
if (propValue === void 0 || propValue === "" || typeof propValue === "number" && isNaN(propValue)) {
|
|
472
|
+
setInternalValue("");
|
|
473
|
+
setDisplayValue("");
|
|
474
|
+
} else {
|
|
475
|
+
const numValue = typeof propValue === "string" ? parseFloat(propValue) : propValue;
|
|
476
|
+
if (!isNaN(numValue)) {
|
|
477
|
+
const formatted = numValue.toFixed(decimals != null ? decimals : 2);
|
|
478
|
+
setInternalValue(formatted);
|
|
479
|
+
setDisplayValue(formatCurrencyDisplay(formatted));
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
} else {
|
|
483
|
+
setInternalValue(stringValue);
|
|
484
|
+
setDisplayValue(stringValue);
|
|
485
|
+
}
|
|
486
|
+
}, [propValue, decimals, variant]);
|
|
487
|
+
const getInputProps = () => {
|
|
488
|
+
var _a2;
|
|
489
|
+
const baseProps = __spreadProps(__spreadValues(__spreadValues({}, props), getDecimalPlaceholder(decimals)), {
|
|
490
|
+
value: propValue
|
|
491
|
+
});
|
|
492
|
+
switch (variant) {
|
|
493
|
+
case "search":
|
|
494
|
+
return __spreadProps(__spreadValues({}, baseProps), {
|
|
495
|
+
placeholder: (_a2 = props.placeholder) != null ? _a2 : "Search",
|
|
496
|
+
className: "!mr-6",
|
|
497
|
+
value: displayValue
|
|
498
|
+
});
|
|
499
|
+
case "finder":
|
|
500
|
+
return baseProps;
|
|
501
|
+
case "currency":
|
|
502
|
+
return __spreadProps(__spreadValues({}, baseProps), {
|
|
503
|
+
align: "right",
|
|
504
|
+
type: "text",
|
|
505
|
+
value: displayValue
|
|
506
|
+
});
|
|
507
|
+
case "percentage":
|
|
508
|
+
case "uom":
|
|
509
|
+
return __spreadProps(__spreadValues({}, baseProps), {
|
|
510
|
+
type: "number",
|
|
511
|
+
align: "right"
|
|
512
|
+
});
|
|
513
|
+
default:
|
|
514
|
+
return baseProps;
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
const getBeforeElement = () => {
|
|
518
|
+
if (props.before) return props.before;
|
|
519
|
+
switch (variant) {
|
|
520
|
+
case "search":
|
|
521
|
+
return !removeSearchIcon ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-icon-primary-normal contents", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { name: "search" }) }) : null;
|
|
522
|
+
case "currency":
|
|
523
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-icon-primary-normal contents", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { name: "attach_money" }) });
|
|
524
|
+
default:
|
|
525
|
+
return null;
|
|
526
|
+
}
|
|
527
|
+
};
|
|
528
|
+
const getAfterElement = () => {
|
|
529
|
+
if (props.after) return props.after;
|
|
530
|
+
switch (variant) {
|
|
531
|
+
case "search": {
|
|
532
|
+
const hasValue = displayValue.length > 0;
|
|
533
|
+
return hasValue && !props.readOnly ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
534
|
+
Icon,
|
|
535
|
+
{
|
|
536
|
+
name: "close",
|
|
537
|
+
onClick: handleSearchReset,
|
|
538
|
+
className: "cursor-pointer absolute right-2 bottom-2/4 translate-y-2/4"
|
|
539
|
+
}
|
|
540
|
+
) : null;
|
|
541
|
+
}
|
|
542
|
+
case "finder":
|
|
543
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { name: "search" });
|
|
544
|
+
case "uom":
|
|
545
|
+
return uom ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-text-secondary-normal uppercase", children: uom.slice(0, 4) }) : null;
|
|
546
|
+
case "percentage":
|
|
547
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-icon-primary-normal contents", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { name: "percent" }) });
|
|
548
|
+
default:
|
|
549
|
+
return null;
|
|
550
|
+
}
|
|
551
|
+
};
|
|
552
|
+
const handleSearchReset = () => {
|
|
553
|
+
setInternalValue("");
|
|
554
|
+
setDisplayValue("");
|
|
555
|
+
if (onChange) {
|
|
556
|
+
const syntheticEvent = {
|
|
557
|
+
target: { value: "" }
|
|
558
|
+
};
|
|
559
|
+
if (typeof onChange === "function") {
|
|
560
|
+
onChange(syntheticEvent);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
onClear == null ? void 0 : onClear();
|
|
564
|
+
};
|
|
565
|
+
const handleChange = (e) => {
|
|
566
|
+
const rawValue = e.target.value;
|
|
567
|
+
if (variant === "search") {
|
|
568
|
+
setInternalValue(rawValue);
|
|
569
|
+
setDisplayValue(rawValue);
|
|
570
|
+
if (typeof onChange === "function") {
|
|
571
|
+
onChange(e);
|
|
572
|
+
}
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
if (variant === "currency") {
|
|
576
|
+
const raw = rawValue.replace(/,/g, "");
|
|
577
|
+
if (raw === "") {
|
|
578
|
+
setInternalValue("");
|
|
579
|
+
setDisplayValue("");
|
|
580
|
+
if (onChange) {
|
|
581
|
+
const syntheticEvent = __spreadProps(__spreadValues({}, e), {
|
|
582
|
+
target: __spreadProps(__spreadValues({}, e.target), { value: "" })
|
|
583
|
+
});
|
|
584
|
+
onChange(syntheticEvent);
|
|
585
|
+
}
|
|
586
|
+
return;
|
|
587
|
+
}
|
|
588
|
+
const regex = /^\d*\.?\d*$/;
|
|
589
|
+
if (!regex.test(raw)) return;
|
|
590
|
+
const parts = raw.split(".");
|
|
591
|
+
const currentDecimals = decimals != null ? decimals : 2;
|
|
592
|
+
if (parts.length === 2 && parts[1].length > currentDecimals) return;
|
|
593
|
+
setInternalValue(raw);
|
|
594
|
+
setDisplayValue(formatCurrencyDisplay(raw));
|
|
595
|
+
const asNumber = Number(raw);
|
|
596
|
+
if (!isNaN(asNumber) && onChange) {
|
|
597
|
+
const syntheticEvent = __spreadProps(__spreadValues({}, e), {
|
|
598
|
+
target: __spreadProps(__spreadValues({}, e.target), { value: asNumber.toString() })
|
|
599
|
+
});
|
|
600
|
+
onChange(syntheticEvent);
|
|
601
|
+
}
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
604
|
+
setInternalValue(rawValue);
|
|
605
|
+
setDisplayValue(rawValue);
|
|
606
|
+
if (typeof onChange === "function") {
|
|
607
|
+
onChange(e);
|
|
608
|
+
}
|
|
609
|
+
};
|
|
610
|
+
const handleBlur = (e) => {
|
|
611
|
+
if (variant === "currency") {
|
|
612
|
+
const formatted = formatDecimalValue(internalValue, decimals != null ? decimals : 2);
|
|
613
|
+
setInternalValue(formatted);
|
|
614
|
+
setDisplayValue(formatCurrencyDisplay(formatted));
|
|
615
|
+
const asNumber = Number(formatted);
|
|
616
|
+
if (!isNaN(asNumber) && onChange) {
|
|
617
|
+
const syntheticEvent = __spreadProps(__spreadValues({}, e), {
|
|
618
|
+
target: __spreadProps(__spreadValues({}, e.target), { value: asNumber.toString() })
|
|
619
|
+
});
|
|
620
|
+
onChange(syntheticEvent);
|
|
621
|
+
}
|
|
622
|
+
} else if (variant === "uom" || variant === "percentage") {
|
|
623
|
+
const formattedValue = formatDecimalValue(e.target.value, decimals);
|
|
624
|
+
e.target.value = formattedValue;
|
|
625
|
+
}
|
|
626
|
+
onBlur == null ? void 0 : onBlur(e);
|
|
627
|
+
};
|
|
628
|
+
const inputProps = getInputProps();
|
|
629
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
630
|
+
InputBase,
|
|
631
|
+
__spreadProps(__spreadValues({}, inputProps), {
|
|
632
|
+
before: getBeforeElement(),
|
|
633
|
+
after: getAfterElement(),
|
|
634
|
+
onChange: handleChange,
|
|
635
|
+
onBlur: handleBlur
|
|
636
|
+
})
|
|
637
|
+
);
|
|
638
|
+
};
|
|
639
|
+
Input.displayName = "Input";
|
|
640
|
+
var Finder = (props) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Input, __spreadProps(__spreadValues({}, props), { variant: "finder" }));
|
|
641
|
+
var UOM = (props) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Input, __spreadProps(__spreadValues({}, props), { variant: "uom" }));
|
|
642
|
+
var Currency = (props) => {
|
|
643
|
+
var _a;
|
|
644
|
+
const handleCurrencyChange = (e) => {
|
|
645
|
+
var _a2;
|
|
646
|
+
(_a2 = props.onChange) == null ? void 0 : _a2.call(props, e);
|
|
647
|
+
};
|
|
648
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
649
|
+
Input,
|
|
650
|
+
__spreadProps(__spreadValues({}, props), {
|
|
651
|
+
variant: "currency",
|
|
652
|
+
decimals: (_a = props.decimals) != null ? _a : 2,
|
|
653
|
+
onChange: handleCurrencyChange
|
|
654
|
+
})
|
|
655
|
+
);
|
|
656
|
+
};
|
|
657
|
+
var Percentage = (props) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Input, __spreadProps(__spreadValues({}, props), { variant: "percentage" }));
|
|
658
|
+
Finder.displayName = "Finder";
|
|
659
|
+
UOM.displayName = "UOM";
|
|
660
|
+
Currency.displayName = "Currency";
|
|
661
|
+
Percentage.displayName = "Percentage";
|
|
662
|
+
|
|
663
|
+
// src/components/CalendarRange.tsx
|
|
664
|
+
var import_clsx5 = __toESM(require("clsx"), 1);
|
|
665
|
+
var import_react2 = __toESM(require("react"), 1);
|
|
666
|
+
var import_polyfill = require("@js-temporal/polyfill");
|
|
667
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
668
|
+
function DateCell(_a) {
|
|
669
|
+
var _b = _a, {
|
|
670
|
+
date,
|
|
671
|
+
isInMonth,
|
|
672
|
+
isToday,
|
|
673
|
+
isSelected,
|
|
674
|
+
inRange,
|
|
675
|
+
isDisabled,
|
|
676
|
+
isRangeStart,
|
|
677
|
+
isRangeEnd,
|
|
678
|
+
onClick,
|
|
679
|
+
onMouseEnter,
|
|
680
|
+
onMouseLeave,
|
|
681
|
+
cellPadding = "",
|
|
682
|
+
isRangeDisabled = false
|
|
683
|
+
} = _b, props = __objRest(_b, [
|
|
684
|
+
"date",
|
|
685
|
+
"isInMonth",
|
|
686
|
+
"isToday",
|
|
687
|
+
"isSelected",
|
|
688
|
+
"inRange",
|
|
689
|
+
"isDisabled",
|
|
690
|
+
"isRangeStart",
|
|
691
|
+
"isRangeEnd",
|
|
692
|
+
"onClick",
|
|
693
|
+
"onMouseEnter",
|
|
694
|
+
"onMouseLeave",
|
|
695
|
+
"cellPadding",
|
|
696
|
+
"isRangeDisabled"
|
|
697
|
+
]);
|
|
698
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
699
|
+
"span",
|
|
700
|
+
__spreadProps(__spreadValues({}, props), {
|
|
701
|
+
className: (0, import_clsx5.default)(
|
|
702
|
+
"flex items-center justify-center aspect-square select-none transition-colors border duration-100 font-medium",
|
|
703
|
+
typography.caption,
|
|
704
|
+
cellPadding,
|
|
705
|
+
!isToday && !isSelected && !inRange && !isDisabled && !isRangeStart && !isRangeEnd && "border-transparent",
|
|
706
|
+
!isInMonth && "border-transparent",
|
|
707
|
+
// Today: subtle border ring
|
|
708
|
+
isToday && !isSelected && !inRange && "rounded-full border-border-primary-normal ",
|
|
709
|
+
// Selected: Figma blue, white text, strong shadow
|
|
710
|
+
isSelected && "bg-action-400 text-white border-action-400 z-10",
|
|
711
|
+
!isSelected && !inRange && "rounded-base",
|
|
712
|
+
// When range is disabled OR when only 'from' is selected (no range yet), apply rounded corners
|
|
713
|
+
(isRangeDisabled || !inRange && isSelected) && "rounded-base",
|
|
714
|
+
inRange && isSelected && "hover:border-action-500",
|
|
715
|
+
// In range: Figma light blue background
|
|
716
|
+
inRange && !isSelected && "bg-action-100 text-text-primary-normal border-y-action-400 border-x-0 ",
|
|
717
|
+
// Disabled: Figma gray, no pointer, no hover
|
|
718
|
+
isDisabled && !inRange ? "text-text-primary-disabled bg-transparent pointer-events-none opacity-40 border-transparent" : [
|
|
719
|
+
"text-text-primary-normal cursor-pointer",
|
|
720
|
+
// Figma hover: blue bg, blue text (or red text if selected)
|
|
721
|
+
isSelected ? "hover:bg-background-action-primary-hover hover:text-white" : "hover:bg-action-100 hover:text-text-action-primary-hover",
|
|
722
|
+
// Figma active: darker blue bg, white text
|
|
723
|
+
"active:bg-action-300 active:text-white",
|
|
724
|
+
// Figma focus: ring
|
|
725
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-action-400"
|
|
726
|
+
],
|
|
727
|
+
isRangeStart && "rounded-l",
|
|
728
|
+
isRangeEnd && "rounded-r"
|
|
729
|
+
),
|
|
730
|
+
tabIndex: isDisabled ? -1 : 0,
|
|
731
|
+
"aria-disabled": isDisabled,
|
|
732
|
+
onClick: () => !isDisabled && isInMonth && onClick(),
|
|
733
|
+
onMouseEnter: () => isInMonth && onMouseEnter(),
|
|
734
|
+
onMouseLeave: () => isInMonth && onMouseLeave(),
|
|
735
|
+
children: isInMonth ? date.day : ""
|
|
736
|
+
})
|
|
737
|
+
);
|
|
738
|
+
}
|
|
739
|
+
function CalendarRange({
|
|
740
|
+
from,
|
|
741
|
+
to,
|
|
742
|
+
onChange,
|
|
743
|
+
isDateAvailable,
|
|
744
|
+
mode = "double",
|
|
745
|
+
cardStyle = false,
|
|
746
|
+
disableRange = false
|
|
747
|
+
}) {
|
|
748
|
+
const weekDays = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
|
|
749
|
+
const parseDate = (d) => {
|
|
750
|
+
if (!d) return void 0;
|
|
751
|
+
if (typeof d === "number")
|
|
752
|
+
return import_polyfill.Temporal.PlainDate.from(new Date(d).toISOString().slice(0, 10));
|
|
753
|
+
if (typeof d === "string") return import_polyfill.Temporal.PlainDate.from(d);
|
|
754
|
+
return void 0;
|
|
755
|
+
};
|
|
756
|
+
const fromDate = parseDate(from);
|
|
757
|
+
const toDate = parseDate(to);
|
|
758
|
+
const today = import_polyfill.Temporal.Now.plainDateISO();
|
|
759
|
+
const [baseMonth, setBaseMonth] = (0, import_react2.useState)(
|
|
760
|
+
fromDate != null ? fromDate : today.with({ day: 1 })
|
|
761
|
+
);
|
|
762
|
+
const [selecting, setSelecting] = (0, import_react2.useState)("from");
|
|
763
|
+
const [pendingFrom, setPendingFrom] = (0, import_react2.useState)(void 0);
|
|
764
|
+
const [hoveredDate, setHoveredDate] = (0, import_react2.useState)(void 0);
|
|
765
|
+
function getMonthData(monthOffset) {
|
|
766
|
+
const monthDate = baseMonth.add({ months: monthOffset }).with({ day: 1 });
|
|
767
|
+
const days = monthDate.daysInMonth;
|
|
768
|
+
const firstDayOffset = monthDate.dayOfWeek % 7;
|
|
769
|
+
return {
|
|
770
|
+
name: monthDate.toLocaleString("en-US", { month: "long" }),
|
|
771
|
+
year: monthDate.year,
|
|
772
|
+
days,
|
|
773
|
+
firstDayOffset,
|
|
774
|
+
date: monthDate
|
|
775
|
+
};
|
|
776
|
+
}
|
|
777
|
+
function handleDayClick(date) {
|
|
778
|
+
if (isDateAvailable && !isDateAvailable(date)) return;
|
|
779
|
+
if (mode === "single" && disableRange) {
|
|
780
|
+
if (onChange) {
|
|
781
|
+
onChange(date.toString(), date.toString());
|
|
782
|
+
}
|
|
783
|
+
return;
|
|
784
|
+
}
|
|
785
|
+
if (selecting === "from") {
|
|
786
|
+
setPendingFrom(date);
|
|
787
|
+
setSelecting("to");
|
|
788
|
+
setHoveredDate(void 0);
|
|
789
|
+
} else if (pendingFrom) {
|
|
790
|
+
if (onChange) {
|
|
791
|
+
const [start, end] = import_polyfill.Temporal.PlainDate.compare(date, pendingFrom) < 0 ? [date, pendingFrom] : [pendingFrom, date];
|
|
792
|
+
onChange(start.toString(), end.toString());
|
|
793
|
+
}
|
|
794
|
+
setPendingFrom(void 0);
|
|
795
|
+
setSelecting("from");
|
|
796
|
+
setHoveredDate(void 0);
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
function isInRange(date) {
|
|
800
|
+
if (mode === "single" && disableRange) {
|
|
801
|
+
return false;
|
|
802
|
+
}
|
|
803
|
+
if (pendingFrom && selecting === "to" && hoveredDate) {
|
|
804
|
+
const [start, end] = import_polyfill.Temporal.PlainDate.compare(hoveredDate, pendingFrom) < 0 ? [hoveredDate, pendingFrom] : [pendingFrom, hoveredDate];
|
|
805
|
+
return import_polyfill.Temporal.PlainDate.compare(date, start) >= 0 && import_polyfill.Temporal.PlainDate.compare(date, end) <= 0;
|
|
806
|
+
}
|
|
807
|
+
if (!pendingFrom && fromDate && toDate) {
|
|
808
|
+
return import_polyfill.Temporal.PlainDate.compare(date, fromDate) >= 0 && import_polyfill.Temporal.PlainDate.compare(date, toDate) <= 0;
|
|
809
|
+
}
|
|
810
|
+
return false;
|
|
811
|
+
}
|
|
812
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
813
|
+
"div",
|
|
814
|
+
{
|
|
815
|
+
className: (0, import_clsx5.default)(
|
|
816
|
+
"relative bg-background-grouped-primary-normal rounded-base w-fit",
|
|
817
|
+
componentPadding,
|
|
818
|
+
componentGap,
|
|
819
|
+
cardStyle && "shadow-4",
|
|
820
|
+
// baseTransition,
|
|
821
|
+
"overflow-hidden"
|
|
822
|
+
),
|
|
823
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
824
|
+
"div",
|
|
825
|
+
{
|
|
826
|
+
className: (0, import_clsx5.default)(
|
|
827
|
+
"flex flex-row items-start justify-start bg-background-primary-normal overflow-clip",
|
|
828
|
+
componentGap,
|
|
829
|
+
paddingUsingComponentGap
|
|
830
|
+
),
|
|
831
|
+
children: (mode === "double" ? [0, 1] : [0]).map((offset, idx) => {
|
|
832
|
+
const month = getMonthData(offset);
|
|
833
|
+
const totalCells = 42;
|
|
834
|
+
const emptyCells = month.firstDayOffset;
|
|
835
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_react2.default.Fragment, { children: [
|
|
836
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
837
|
+
"div",
|
|
838
|
+
{
|
|
839
|
+
className: (0, import_clsx5.default)(
|
|
840
|
+
"flex flex-col",
|
|
841
|
+
componentGap,
|
|
842
|
+
componentPadding
|
|
843
|
+
),
|
|
844
|
+
children: [
|
|
845
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
846
|
+
"div",
|
|
847
|
+
{
|
|
848
|
+
className: (0, import_clsx5.default)(
|
|
849
|
+
"flex flex-row items-center justify-between",
|
|
850
|
+
componentGap,
|
|
851
|
+
componentPaddingXUsingComponentGap,
|
|
852
|
+
componentPaddingYUsingComponentGap,
|
|
853
|
+
"mb-3",
|
|
854
|
+
typography.label,
|
|
855
|
+
"text-text-action-primary-normal"
|
|
856
|
+
),
|
|
857
|
+
children: [
|
|
858
|
+
idx === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
859
|
+
"button",
|
|
860
|
+
{
|
|
861
|
+
type: "button",
|
|
862
|
+
className: (0, import_clsx5.default)(
|
|
863
|
+
"flex items-center justify-center rounded-base hover:bg-action-100 active:bg-action-300 text-icon-primary-normal",
|
|
864
|
+
componentPadding,
|
|
865
|
+
"mr-1"
|
|
866
|
+
),
|
|
867
|
+
"aria-label": "Previous month",
|
|
868
|
+
onClick: () => setBaseMonth(baseMonth.subtract({ months: 1 })),
|
|
869
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Icon, { name: "chevron_left", size: 24 })
|
|
870
|
+
}
|
|
871
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: (0, import_clsx5.default)(componentPadding, "mr-1") }),
|
|
872
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex gap-desktop-compact-component-padding", children: [
|
|
873
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "font-semibold text-text-action-primary-normal text-[14px] leading-[1] truncate", children: month.name }),
|
|
874
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "font-semibold text-text-action-primary-normal text-[14px] leading-[1] px-1 truncate", children: month.year })
|
|
875
|
+
] }),
|
|
876
|
+
(mode === "double" ? idx === 1 : true) ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
877
|
+
"button",
|
|
878
|
+
{
|
|
879
|
+
type: "button",
|
|
880
|
+
className: (0, import_clsx5.default)(
|
|
881
|
+
"flex items-center justify-center rounded-base hover:bg-action-100 active:bg-action-300 text-icon-primary-normal",
|
|
882
|
+
componentPadding,
|
|
883
|
+
"ml-1"
|
|
884
|
+
),
|
|
885
|
+
"aria-label": "Next month",
|
|
886
|
+
onClick: () => setBaseMonth(baseMonth.add({ months: 1 })),
|
|
887
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Icon, { name: "chevron_right", size: 24 })
|
|
888
|
+
}
|
|
889
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: (0, import_clsx5.default)(componentPadding, "ml-1") })
|
|
890
|
+
]
|
|
891
|
+
}
|
|
892
|
+
),
|
|
893
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: (0, import_clsx5.default)("grid grid-cols-7 mb-1", componentGap), children: weekDays.map((d) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
894
|
+
"span",
|
|
895
|
+
{
|
|
896
|
+
className: (0, import_clsx5.default)(
|
|
897
|
+
typography.caption,
|
|
898
|
+
"text-text-secondary-normal text-center"
|
|
899
|
+
),
|
|
900
|
+
children: d
|
|
901
|
+
},
|
|
902
|
+
d
|
|
903
|
+
)) }),
|
|
904
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: (0, import_clsx5.default)("grid grid-cols-7"), children: Array.from({ length: totalCells }).map((_, i) => {
|
|
905
|
+
const day = i - emptyCells + 1;
|
|
906
|
+
const date = month.date.with({ day: 1 }).add({
|
|
907
|
+
days: i - emptyCells
|
|
908
|
+
});
|
|
909
|
+
const isInMonth = day > 0 && day <= month.days;
|
|
910
|
+
const isToday = isInMonth && date.equals(today);
|
|
911
|
+
const isSelected = isInMonth && (!pendingFrom && fromDate && date.equals(fromDate) || !pendingFrom && toDate && date.equals(toDate) || pendingFrom && date.equals(pendingFrom));
|
|
912
|
+
const inRange = isInMonth && isInRange(date);
|
|
913
|
+
const isDisabled = !isInMonth || (isDateAvailable ? !isDateAvailable(date) : false);
|
|
914
|
+
const hoverDateIsBeforePendingFrom = hoveredDate && pendingFrom && import_polyfill.Temporal.PlainDate.compare(hoveredDate, pendingFrom) < 0;
|
|
915
|
+
const hoverDateIsAfterPendingFrom = hoveredDate && pendingFrom && import_polyfill.Temporal.PlainDate.compare(hoveredDate, pendingFrom) >= 0;
|
|
916
|
+
const isRangeStart = mode === "single" && disableRange ? false : !pendingFrom && isInMonth && fromDate && date.equals(fromDate) || hoverDateIsAfterPendingFrom && date.equals(pendingFrom);
|
|
917
|
+
const isRangeEnd = mode === "single" && disableRange ? false : !pendingFrom && isInMonth && toDate && date.equals(toDate) || hoverDateIsBeforePendingFrom && date.equals(pendingFrom);
|
|
918
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
919
|
+
DateCell,
|
|
920
|
+
{
|
|
921
|
+
date,
|
|
922
|
+
isInMonth: !!isInMonth,
|
|
923
|
+
isToday: !!isToday,
|
|
924
|
+
isSelected: !!isSelected,
|
|
925
|
+
inRange: !!inRange,
|
|
926
|
+
isDisabled: !!isDisabled,
|
|
927
|
+
onClick: () => handleDayClick(date),
|
|
928
|
+
onMouseEnter: () => setHoveredDate(date),
|
|
929
|
+
onMouseLeave: () => setHoveredDate(void 0),
|
|
930
|
+
isRangeStart: !!isRangeStart,
|
|
931
|
+
isRangeEnd: !!isRangeEnd,
|
|
932
|
+
isRangeDisabled: mode === "single" && disableRange,
|
|
933
|
+
cellPadding: "p-1.5 md:p-2 lg:p-2.5"
|
|
934
|
+
},
|
|
935
|
+
i
|
|
936
|
+
);
|
|
937
|
+
}) })
|
|
938
|
+
]
|
|
939
|
+
}
|
|
940
|
+
),
|
|
941
|
+
mode === "double" && idx === 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
942
|
+
"div",
|
|
943
|
+
{
|
|
944
|
+
className: (0, import_clsx5.default)(
|
|
945
|
+
"self-stretch bg-border-primary-normal rounded-base mx-mobile-component-padding desktop:mx-desktop-component-padding compact:mx-desktop-compact-component-padding",
|
|
946
|
+
// 1px width, full height, matches Figma divider
|
|
947
|
+
"w-px"
|
|
948
|
+
)
|
|
949
|
+
}
|
|
950
|
+
)
|
|
951
|
+
] }, month.name + month.year);
|
|
952
|
+
})
|
|
953
|
+
}
|
|
954
|
+
)
|
|
955
|
+
}
|
|
956
|
+
);
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
// src/utils.ts
|
|
960
|
+
function findDocumentRoot(element) {
|
|
961
|
+
if (typeof window === "undefined" || typeof document === "undefined") {
|
|
962
|
+
throw new Error(
|
|
963
|
+
"findDocumentRoot can only be used in a browser environment."
|
|
964
|
+
);
|
|
965
|
+
}
|
|
966
|
+
if (!element || !(element instanceof Node)) {
|
|
967
|
+
return window.document.body;
|
|
968
|
+
}
|
|
969
|
+
var currentElement = element;
|
|
970
|
+
while (currentElement && currentElement.parentNode) {
|
|
971
|
+
if (currentElement.parentNode === document) {
|
|
972
|
+
return document.body;
|
|
973
|
+
} else if (currentElement.parentNode instanceof DocumentFragment) {
|
|
974
|
+
return currentElement.parentNode;
|
|
975
|
+
} else {
|
|
976
|
+
currentElement = currentElement.parentNode;
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
return window.document.body;
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
// src/components/DateInput.tsx
|
|
983
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
984
|
+
var DateInput = (_a) => {
|
|
985
|
+
var _b = _a, {
|
|
986
|
+
value,
|
|
987
|
+
onChange,
|
|
988
|
+
placeholder = "MM/DD/YYYY",
|
|
989
|
+
disabled,
|
|
990
|
+
readOnly = false,
|
|
991
|
+
label
|
|
992
|
+
} = _b, props = __objRest(_b, [
|
|
993
|
+
"value",
|
|
994
|
+
"onChange",
|
|
995
|
+
"placeholder",
|
|
996
|
+
"disabled",
|
|
997
|
+
"readOnly",
|
|
998
|
+
"label"
|
|
999
|
+
]);
|
|
1000
|
+
const [visible, setVisible] = (0, import_react3.useState)(false);
|
|
1001
|
+
const popoverRef = (0, import_react3.useRef)(null);
|
|
1002
|
+
const triggerRef = (0, import_react3.useRef)(null);
|
|
1003
|
+
const [calendarPosition, setCalendarPosition] = (0, import_react3.useState)({
|
|
1004
|
+
top: 0,
|
|
1005
|
+
left: 0,
|
|
1006
|
+
width: 0
|
|
1007
|
+
});
|
|
1008
|
+
const [from, to] = [value, ""];
|
|
1009
|
+
const updatePosition = () => {
|
|
1010
|
+
if (triggerRef.current) {
|
|
1011
|
+
requestAnimationFrame(() => {
|
|
1012
|
+
if (triggerRef.current) {
|
|
1013
|
+
const rect = triggerRef.current.getBoundingClientRect();
|
|
1014
|
+
setCalendarPosition({
|
|
1015
|
+
top: rect.bottom + window.scrollY,
|
|
1016
|
+
left: rect.left + window.scrollX,
|
|
1017
|
+
width: rect.width
|
|
1018
|
+
});
|
|
1019
|
+
}
|
|
1020
|
+
});
|
|
1021
|
+
}
|
|
1022
|
+
};
|
|
1023
|
+
(0, import_react3.useEffect)(() => {
|
|
1024
|
+
updatePosition();
|
|
1025
|
+
const resizeObserver = new ResizeObserver(updatePosition);
|
|
1026
|
+
if (triggerRef.current) {
|
|
1027
|
+
resizeObserver.observe(triggerRef.current);
|
|
1028
|
+
}
|
|
1029
|
+
window.addEventListener("scroll", updatePosition);
|
|
1030
|
+
return () => {
|
|
1031
|
+
resizeObserver.disconnect();
|
|
1032
|
+
window.removeEventListener("scroll", updatePosition);
|
|
1033
|
+
};
|
|
1034
|
+
}, []);
|
|
1035
|
+
(0, import_react3.useEffect)(() => {
|
|
1036
|
+
const handleKeyDown = (event) => {
|
|
1037
|
+
var _a2;
|
|
1038
|
+
if (event.key === "Escape" && popoverRef.current) {
|
|
1039
|
+
setVisible(false);
|
|
1040
|
+
(_a2 = triggerRef.current) == null ? void 0 : _a2.blur();
|
|
1041
|
+
}
|
|
1042
|
+
};
|
|
1043
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
1044
|
+
return () => {
|
|
1045
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
1046
|
+
};
|
|
1047
|
+
});
|
|
1048
|
+
(0, import_react3.useEffect)(() => {
|
|
1049
|
+
const handleClickOutside = (event) => {
|
|
1050
|
+
if (popoverRef.current && !popoverRef.current.contains(event.target) && triggerRef.current && !triggerRef.current.contains(event.target)) {
|
|
1051
|
+
setVisible(false);
|
|
1052
|
+
}
|
|
1053
|
+
};
|
|
1054
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
1055
|
+
return () => {
|
|
1056
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
1057
|
+
};
|
|
1058
|
+
}, []);
|
|
1059
|
+
function handleDateChange(fromValue) {
|
|
1060
|
+
onChange(fromValue);
|
|
1061
|
+
setVisible(false);
|
|
1062
|
+
}
|
|
1063
|
+
const handleFocus = () => {
|
|
1064
|
+
if (readOnly) return;
|
|
1065
|
+
setVisible(true);
|
|
1066
|
+
updatePosition();
|
|
1067
|
+
};
|
|
1068
|
+
function formatDisplayValue(from2) {
|
|
1069
|
+
if (!from2) return "";
|
|
1070
|
+
return formatDate(from2 != null ? from2 : "");
|
|
1071
|
+
}
|
|
1072
|
+
function formatDate(date) {
|
|
1073
|
+
if (!date) return "";
|
|
1074
|
+
const [y, m, d] = date.split("-");
|
|
1075
|
+
return `${m}/${d}/${y}`;
|
|
1076
|
+
}
|
|
1077
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative", children: [
|
|
1078
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1079
|
+
InputBase,
|
|
1080
|
+
__spreadProps(__spreadValues({
|
|
1081
|
+
ref: (el) => {
|
|
1082
|
+
triggerRef.current = el;
|
|
1083
|
+
}
|
|
1084
|
+
}, props), {
|
|
1085
|
+
value: formatDisplayValue(from),
|
|
1086
|
+
placeholder,
|
|
1087
|
+
disabled,
|
|
1088
|
+
readOnly,
|
|
1089
|
+
after: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Icon, { name: "calendar_month" }),
|
|
1090
|
+
onFocus: handleFocus,
|
|
1091
|
+
onChange: () => {
|
|
1092
|
+
},
|
|
1093
|
+
label
|
|
1094
|
+
})
|
|
1095
|
+
),
|
|
1096
|
+
visible && !readOnly && (0, import_react_dom.createPortal)(
|
|
1097
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1098
|
+
"div",
|
|
1099
|
+
{
|
|
1100
|
+
ref: (el) => {
|
|
1101
|
+
popoverRef.current = el;
|
|
1102
|
+
},
|
|
1103
|
+
className: "absolute z-40 bg-white",
|
|
1104
|
+
style: {
|
|
1105
|
+
top: `${calendarPosition.top + 16}px`,
|
|
1106
|
+
left: `${calendarPosition.left - 4}px`,
|
|
1107
|
+
minWidth: `${calendarPosition.width}px`
|
|
1108
|
+
},
|
|
1109
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1110
|
+
CalendarRange,
|
|
1111
|
+
{
|
|
1112
|
+
from,
|
|
1113
|
+
to: to || from,
|
|
1114
|
+
onChange: handleDateChange,
|
|
1115
|
+
cardStyle: true,
|
|
1116
|
+
mode: "single",
|
|
1117
|
+
disableRange: true
|
|
1118
|
+
}
|
|
1119
|
+
)
|
|
1120
|
+
}
|
|
1121
|
+
),
|
|
1122
|
+
findDocumentRoot(popoverRef.current)
|
|
1123
|
+
)
|
|
1124
|
+
] });
|
|
1125
|
+
};
|
|
1126
|
+
DateInput.displayName = "DateInput";
|
|
1127
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
1128
|
+
0 && (module.exports = {
|
|
1129
|
+
DateInput
|
|
1130
|
+
});
|