@stamcat/craftsman 0.0.27-alpha.9 → 0.0.28
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/AGENTS.md +21 -403
- package/Components.esm.js +62 -11
- package/README.md +63 -12
- package/Styles.esm.js +7 -7
- package/Utilities.esm.js +2 -2
- package/_virtual/_rolldown/runtime.esm.js +18 -6
- package/package.json +51 -3
- package/src/components/Button/AGENTS.md +65 -0
- package/src/components/Button/Button.d.ts +1 -1
- package/src/components/Button/Button.esm.js +11 -17
- package/src/components/Carousel/AGENTS.md +41 -0
- package/src/components/Carousel/Carousel.css +1 -0
- package/src/components/Carousel/Carousel.d.ts +11 -0
- package/src/components/Carousel/Carousel.scss +34 -0
- package/src/components/Carousel/Carousel2.esm.js +75 -0
- package/src/components/Checkbox/AGENTS.md +34 -0
- package/src/components/Checkbox/Checkbox.d.ts +8 -0
- package/src/components/Checkbox/Checkbox.esm.js +18 -0
- package/src/components/DatePicker/AGENTS.md +36 -0
- package/src/components/DatePicker/DatePicker.css +1 -0
- package/src/components/DatePicker/DatePicker.d.ts +8 -0
- package/src/components/DatePicker/DatePicker.scss +61 -0
- package/src/components/DatePicker/DatePicker2.esm.js +29 -0
- package/src/components/DatePicker/ReactCalendar.css +1 -0
- package/src/components/DatePicker/ReactCalendar.scss +158 -0
- package/src/components/DatePicker/_DatePicker.scss +73 -0
- package/src/components/DateRangePicker/AGENTS.md +38 -0
- package/src/components/DateRangePicker/DateRangePicker.css +1 -0
- package/src/components/DateRangePicker/DateRangePicker.d.ts +8 -0
- package/src/components/DateRangePicker/DateRangePicker.scss +62 -0
- package/src/components/DateRangePicker/DateRangePicker2.esm.js +29 -0
- package/src/components/DateTimePicker/AGENTS.md +41 -0
- package/src/components/DateTimePicker/DateTimePicker.css +1 -0
- package/src/components/DateTimePicker/DateTimePicker.d.ts +13 -0
- package/src/components/DateTimePicker/DateTimePicker.scss +86 -0
- package/src/components/DateTimePicker/DateTimePicker2.esm.js +82 -0
- package/src/components/Icons/IconAmazonPay.d.ts +2 -0
- package/src/components/Icons/IconAmazonPay.esm.js +76 -0
- package/src/components/Icons/IconAmex.d.ts +2 -0
- package/src/components/Icons/IconAmex.esm.js +87 -0
- package/src/components/Icons/IconApplePay.d.ts +2 -0
- package/src/components/Icons/IconApplePay.esm.js +26 -0
- package/src/components/Icons/IconDiscover.d.ts +2 -0
- package/src/components/Icons/IconDiscover.esm.js +129 -0
- package/src/components/Icons/IconGooglePay.d.ts +2 -0
- package/src/components/Icons/IconGooglePay.esm.js +64 -0
- package/src/components/Icons/IconMaestro.d.ts +2 -0
- package/src/components/Icons/IconMaestro.esm.js +38 -0
- package/src/components/Icons/IconMastercard.d.ts +2 -0
- package/src/components/Icons/IconMastercard.esm.js +27 -0
- package/src/components/Icons/IconPayPal.d.ts +2 -0
- package/src/components/Icons/IconPayPal.esm.js +52 -0
- package/src/components/Icons/IconSepa.d.ts +2 -0
- package/src/components/Icons/IconSepa.esm.js +272 -0
- package/src/components/Icons/IconShopPay.d.ts +2 -0
- package/src/components/Icons/IconShopPay.esm.js +35 -0
- package/src/components/Icons/IconSquare.d.ts +2 -0
- package/src/components/Icons/IconSquare.esm.js +11 -0
- package/src/components/Icons/IconStripe.d.ts +2 -0
- package/src/components/Icons/IconStripe.esm.js +57 -0
- package/src/components/Icons/IconUnionPay.d.ts +2 -0
- package/src/components/Icons/IconUnionPay.esm.js +28 -0
- package/src/components/Icons/IconVenmo.d.ts +2 -0
- package/src/components/Icons/IconVenmo.esm.js +21 -0
- package/src/components/Icons/IconVisa.d.ts +2 -0
- package/src/components/Icons/IconVisa.esm.js +14 -0
- package/src/components/Icons/index.d.ts +15 -0
- package/src/components/Icons/index.esm.js +16 -0
- package/src/components/Icons/types.d.ts +4 -0
- package/src/components/Input/AGENTS.md +30 -0
- package/src/components/Input/Input.css +1 -1
- package/src/components/Input/Input.scss +108 -95
- package/src/components/Input/Input2.esm.js +27 -18
- package/src/components/Input/InputWrapper.d.ts +1 -0
- package/src/components/InputNumber/AGENTS.md +37 -0
- package/src/components/InputNumber/InputNumber.css +1 -0
- package/src/components/InputNumber/InputNumber.d.ts +10 -0
- package/src/components/InputNumber/InputNumber.scss +29 -0
- package/src/components/InputNumber/InputNumber2.esm.js +36 -0
- package/src/components/InputPassword/AGENTS.md +29 -0
- package/src/components/{Input → InputPassword}/InputPassword.d.ts +1 -1
- package/src/components/InputPassword/InputPassword.esm.js +30 -0
- package/src/components/InputPhone/AGENTS.md +35 -0
- package/src/components/InputPhone/InputPhone.css +1 -0
- package/src/components/{Input → InputPhone}/InputPhone.d.ts +1 -1
- package/src/components/InputPhone/InputPhone.scss +266 -0
- package/src/components/{Input/InputPhone.esm.js → InputPhone/InputPhone2.esm.js} +4 -4
- package/src/components/Loader/AGENTS.md +31 -0
- package/src/components/Loader/Loader.esm.js +1 -1
- package/src/components/Loader/types.d.ts +1 -1
- package/src/components/Modal/AGENTS.md +47 -0
- package/src/components/Modal/Modal.css +1 -0
- package/src/components/Modal/Modal.scss +150 -0
- package/src/components/Modal/Modal2.esm.js +53 -0
- package/src/components/Notice/AGENTS.md +42 -0
- package/src/components/Notice/Notice.css +1 -0
- package/src/components/Notice/Notice.d.ts +13 -0
- package/src/components/Notice/Notice.scss +76 -0
- package/src/components/Notice/Notice2.esm.js +56 -0
- package/src/components/Pagination/AGENTS.md +38 -0
- package/src/components/Pagination/Pagination.css +1 -0
- package/src/components/Pagination/Pagination.d.ts +10 -0
- package/src/components/Pagination/Pagination.scss +22 -0
- package/src/components/Pagination/Pagination2.esm.js +64 -0
- package/src/components/RadioButton/AGENTS.md +44 -0
- package/src/components/RadioButton/RadioButton.d.ts +9 -0
- package/src/components/RadioButton/RadioButton.esm.js +18 -0
- package/src/components/Select/AGENTS.md +36 -0
- package/src/components/SortableList/AGENTS.md +45 -0
- package/src/components/SortableList/ListItem.d.ts +10 -0
- package/src/components/SortableList/ListItem.esm.js +67 -0
- package/src/components/SortableList/SortableList.css +1 -0
- package/src/components/SortableList/SortableList.d.ts +23 -0
- package/src/components/SortableList/SortableList.scss +41 -0
- package/src/components/SortableList/SortableList2.esm.js +54 -0
- package/src/components/SortableList/utilities.d.ts +7 -0
- package/src/components/SortableList/utilities.esm.js +4 -0
- package/src/components/Text/AGENTS.md +32 -0
- package/src/components/Text/Text.css +1 -1
- package/src/components/Text/Text.scss +2 -2
- package/src/components/Textarea/AGENTS.md +32 -0
- package/src/components/{Input → Textarea}/Textarea.d.ts +1 -1
- package/src/components/Textarea/Textarea.esm.js +23 -0
- package/src/components/TimePicker/AGENTS.md +42 -0
- package/src/components/TimePicker/TimePicker.css +1 -0
- package/src/components/TimePicker/TimePicker.d.ts +13 -0
- package/src/components/TimePicker/TimePicker.scss +226 -0
- package/src/components/TimePicker/TimePicker2.esm.js +98 -0
- package/src/components/TimePicker/TimePickerDisplay.d.ts +16 -0
- package/src/components/TimePicker/TimePickerDisplay.esm.js +54 -0
- package/src/components/TimePicker/TimePickerWheel.d.ts +13 -0
- package/src/components/TimePicker/TimePickerWheel.esm.js +61 -0
- package/src/components/TimePicker/constants.d.ts +7 -0
- package/src/components/TimePicker/constants.esm.js +3 -0
- package/src/components/TimePicker/utilities.d.ts +15 -0
- package/src/components/TimePicker/utilities.esm.js +20 -0
- package/src/components/Toggle/AGENTS.md +33 -0
- package/src/components/Toggle/Toggle.css +1 -0
- package/src/components/Toggle/Toggle.d.ts +5 -0
- package/src/components/Toggle/Toggle.scss +64 -0
- package/src/components/Toggle/Toggle2.esm.js +19 -0
- package/src/components/Tooltip/AGENTS.md +41 -0
- package/src/components/Tooltip/Tooltip.css +1 -0
- package/src/components/Tooltip/Tooltip.d.ts +12 -0
- package/src/components/Tooltip/Tooltip.scss +29 -0
- package/src/components/Tooltip/Tooltip2.esm.js +65 -0
- package/src/components/index.d.ts +17 -6
- package/src/styles/global/components/_button.scss +24 -21
- package/src/styles/global/components/_checkbox.scss +5 -4
- package/src/styles/global/components/_input.scss +1 -1
- package/src/styles/global/components/_radioButton.scss +5 -4
- package/src/styles/global/components/_typography.scss +6 -1
- package/src/styles/global/globalStyles.scss +9 -5
- package/src/styles/theme/components.esm.js +5 -6
- package/src/styles/utilities/_functions.scss +2 -2
- package/src/styles/utilities/_placeholders.scss +6 -0
- package/src/styles/utilities/layout.esm.js +3 -3
- package/src/utilities/types.d.ts +28 -3
- package/src/utilities/types.esm.js +11 -5
- package/src/utilities/validations.d.ts +5 -0
- package/src/utilities/validations.esm.js +19 -1
- package/src/components/Input/Checkbox.d.ts +0 -7
- package/src/components/Input/Checkbox.esm.js +0 -11
- package/src/components/Input/DatePicker.d.ts +0 -8
- package/src/components/Input/DatePicker.esm.js +0 -24
- package/src/components/Input/InputPassword.esm.js +0 -28
- package/src/components/Input/RadioButton.d.ts +0 -7
- package/src/components/Input/RadioButton.esm.js +0 -11
- package/src/components/Input/Textarea.esm.js +0 -24
- package/src/components/Modal/Modal.esm.js +0 -53
- package/src/components/Modal/Modal.module.css +0 -1
- package/src/components/Modal/Modal.module.esm.js +0 -16
- package/src/components/Modal/Modal.module.scss +0 -147
- package/src/styles/global/components/_reactCalendar.css +0 -1
- package/src/styles/global/components/_reactCalendar.scss +0 -237
- package/src/styles/global/components/_reactDatePicker.css +0 -1
- package/src/styles/global/components/_reactDatePicker.scss +0 -152
- package/src/styles/global/components/_reactPhone.css +0 -1
- package/src/styles/global/components/_reactPhone.scss +0 -265
- /package/src/components/{Progress.d.ts → Progress/Progress.d.ts} +0 -0
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
//#region \0rolldown/runtime.js
|
|
2
|
-
var e = Object.
|
|
2
|
+
var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescriptor, r = Object.getOwnPropertyNames, i = Object.getPrototypeOf, a = Object.prototype.hasOwnProperty, o = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), s = (e, n) => {
|
|
3
3
|
let r = {};
|
|
4
|
-
for (var i in
|
|
5
|
-
get:
|
|
4
|
+
for (var i in e) t(r, i, {
|
|
5
|
+
get: e[i],
|
|
6
6
|
enumerable: !0
|
|
7
7
|
});
|
|
8
|
-
return n ||
|
|
9
|
-
}
|
|
8
|
+
return n || t(r, Symbol.toStringTag, { value: "Module" }), r;
|
|
9
|
+
}, c = (e, i, o, s) => {
|
|
10
|
+
if (i && typeof i == "object" || typeof i == "function") for (var c = r(i), l = 0, u = c.length, d; l < u; l++) d = c[l], !a.call(e, d) && d !== o && t(e, d, {
|
|
11
|
+
get: ((e) => i[e]).bind(null, d),
|
|
12
|
+
enumerable: !(s = n(i, d)) || s.enumerable
|
|
13
|
+
});
|
|
14
|
+
return e;
|
|
15
|
+
}, l = (n, r, a) => (a = n == null ? {} : e(i(n)), c(r || !n || !n.__esModule ? t(a, "default", {
|
|
16
|
+
value: n,
|
|
17
|
+
enumerable: !0
|
|
18
|
+
}) : a, n)), u = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy < "u" ? new Proxy(e, { get: (e, t) => (typeof require < "u" ? require : e)[t] }) : e)(function(e) {
|
|
19
|
+
if (typeof require < "u") return require.apply(this, arguments);
|
|
20
|
+
throw Error("Calling `require` for \"" + e + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
|
|
21
|
+
});
|
|
10
22
|
//#endregion
|
|
11
|
-
export {
|
|
23
|
+
export { o as __commonJSMin, s as __exportAll, u as __require, l as __toESM };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stamcat/craftsman",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.28",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A powerful, lightweight framework for design systems",
|
|
6
6
|
"repository": {
|
|
@@ -23,14 +23,22 @@
|
|
|
23
23
|
"prepublishOnly": "node ./scripts/prepublishCheck.js"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
+
"@atlaskit/pragmatic-drag-and-drop": "3.0.0",
|
|
27
|
+
"@floating-ui/react-dom": "2.1.9",
|
|
28
|
+
"@wojtekmaj/react-daterange-picker": "7.1.0",
|
|
26
29
|
"clsx": "2.1.1",
|
|
27
|
-
"
|
|
30
|
+
"country-flag-icons": "1.6.20",
|
|
31
|
+
"dompurify": "3.4.13",
|
|
32
|
+
"embla-carousel-react": "8.6.0",
|
|
28
33
|
"react": "19.2.7",
|
|
29
34
|
"react-date-picker": "12.0.2",
|
|
30
35
|
"react-datetime-picker": "7.0.2",
|
|
36
|
+
"react-device-detect": "2.2.3",
|
|
31
37
|
"react-dom": "19.2.7",
|
|
32
38
|
"react-icons": "5.7.0",
|
|
33
39
|
"react-international-phone": "4.8.0",
|
|
40
|
+
"react-intl": "10.1.20",
|
|
41
|
+
"react-time-picker": "8.1.0",
|
|
34
42
|
"react-toastify": "11.1.0",
|
|
35
43
|
"sass-embedded": "1.100.0",
|
|
36
44
|
"typescript-plugin-css-modules": "5.2.0",
|
|
@@ -38,7 +46,7 @@
|
|
|
38
46
|
},
|
|
39
47
|
"devDependencies": {},
|
|
40
48
|
"overrides": {
|
|
41
|
-
"postcss": "8.5.
|
|
49
|
+
"postcss": "8.5.23",
|
|
42
50
|
"sharp": "0.35.3"
|
|
43
51
|
},
|
|
44
52
|
"exports": {
|
|
@@ -104,9 +112,49 @@
|
|
|
104
112
|
"types": "./src/components/DatePicker.d.ts",
|
|
105
113
|
"default": "./src/components/DatePicker.esm.js"
|
|
106
114
|
},
|
|
115
|
+
"./DateRangePicker": {
|
|
116
|
+
"types": "./src/components/DateRangePicker.d.ts",
|
|
117
|
+
"default": "./src/components/DateRangePicker.esm.js"
|
|
118
|
+
},
|
|
107
119
|
"./InputPhone": {
|
|
108
120
|
"types": "./src/components/InputPhone.d.ts",
|
|
109
121
|
"default": "./src/components/InputPhone.esm.js"
|
|
122
|
+
},
|
|
123
|
+
"./InputNumber": {
|
|
124
|
+
"types": "./src/components/InputNumber.d.ts",
|
|
125
|
+
"default": "./src/components/InputNumber.esm.js"
|
|
126
|
+
},
|
|
127
|
+
"./Toggle": {
|
|
128
|
+
"types": "./src/components/Toggle.d.ts",
|
|
129
|
+
"default": "./src/components/Toggle.esm.js"
|
|
130
|
+
},
|
|
131
|
+
"./Pagination": {
|
|
132
|
+
"types": "./src/components/Pagination.d.ts",
|
|
133
|
+
"default": "./src/components/Pagination.esm.js"
|
|
134
|
+
},
|
|
135
|
+
"./Carousel": {
|
|
136
|
+
"types": "./src/components/Carousel.d.ts",
|
|
137
|
+
"default": "./src/components/Carousel.esm.js"
|
|
138
|
+
},
|
|
139
|
+
"./TimePicker": {
|
|
140
|
+
"types": "./src/components/TimePicker.d.ts",
|
|
141
|
+
"default": "./src/components/TimePicker.esm.js"
|
|
142
|
+
},
|
|
143
|
+
"./DateTimePicker": {
|
|
144
|
+
"types": "./src/components/DateTimePicker.d.ts",
|
|
145
|
+
"default": "./src/components/DateTimePicker.esm.js"
|
|
146
|
+
},
|
|
147
|
+
"./Tooltip": {
|
|
148
|
+
"types": "./src/components/Tooltip.d.ts",
|
|
149
|
+
"default": "./src/components/Tooltip.esm.js"
|
|
150
|
+
},
|
|
151
|
+
"./Notice": {
|
|
152
|
+
"types": "./src/components/Notice.d.ts",
|
|
153
|
+
"default": "./src/components/Notice.esm.js"
|
|
154
|
+
},
|
|
155
|
+
"./SortableList": {
|
|
156
|
+
"types": "./src/components/SortableList.d.ts",
|
|
157
|
+
"default": "./src/components/SortableList.esm.js"
|
|
110
158
|
}
|
|
111
159
|
}
|
|
112
160
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Button — Agent Usage Notes
|
|
2
|
+
|
|
3
|
+
Import:
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Button } from "@stamcat/craftsman/Button";
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Props:
|
|
10
|
+
|
|
11
|
+
- Inherits all native `<button>` props.
|
|
12
|
+
- `variant?: "primary" | "default" | "text"` (default: `"default"`)
|
|
13
|
+
- `size?: number` (default visual scale is `1`)
|
|
14
|
+
- `styles?: React.CSSProperties` (inline style override)
|
|
15
|
+
|
|
16
|
+
Behavior notes:
|
|
17
|
+
|
|
18
|
+
- `type` defaults to `"button"`.
|
|
19
|
+
- For `variant !== "default"`, variant is appended to `className` (for example `"primary"`).
|
|
20
|
+
- `className` is preserved and merged after component classes.
|
|
21
|
+
- Theme component overrides are selector-based CSS emitted by `ThemeProvider`; `theme.components.*` accepts JS style objects or raw CSS/Sass strings for the target selector.
|
|
22
|
+
- If `children` is empty (per `isEmpty`), the component renders nothing.
|
|
23
|
+
- `size` is clamped to `[0.1, 10]` before styling is applied.
|
|
24
|
+
- When `size` is provided, Button sets a single `--btn-size` CSS variable inline; all scaling math lives in SCSS:
|
|
25
|
+
- `border-radius: calc(var(--w-gutter) * 0.75 * var(--btn-size))`
|
|
26
|
+
- `padding: calc(var(--w-gutter) * 0.5 * var(--btn-size)) calc(var(--w-gutter) * 0.75 * var(--btn-size))`
|
|
27
|
+
- `font-size: max(10px, calc(var(--w-text) * var(--btn-size)))`
|
|
28
|
+
- This is the standard sizing pattern used across the library (see `Toggle`'s `--toggle-width`): components expose one scale/size CSS variable, and SCSS does all the `calc()` work.
|
|
29
|
+
- There is no dedicated icon/loading prop. Icons, loaders, and mixed content are passed as `children`.
|
|
30
|
+
- Supports both real disable (`disabled={true}`) and style-only disable (`className="disabled"`).
|
|
31
|
+
- Native button modes are supported (`type="button" | "submit" | "reset"`).
|
|
32
|
+
- Accessibility props such as `aria-label` pass through unchanged.
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
<Button variant="primary" onClick={onSave}>Save</Button>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Story-aligned usage examples:
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
// Scaled compact button (size is clamped to [0.1, 10])
|
|
44
|
+
<Button variant="primary" size={0.5}>Mini Action</Button>
|
|
45
|
+
|
|
46
|
+
// Icon content
|
|
47
|
+
<Button variant="primary">
|
|
48
|
+
<TruckIcon size={20} /> <span>Ship</span>
|
|
49
|
+
</Button>
|
|
50
|
+
|
|
51
|
+
// Loading content
|
|
52
|
+
<Button aria-label="Saving">
|
|
53
|
+
<Loader type="boxy" width={32} color="#de13ca" />
|
|
54
|
+
</Button>
|
|
55
|
+
|
|
56
|
+
// Style-only disabled appearance while still allowing click handlers
|
|
57
|
+
<Button className="disabled" onClick={onClick}>Disabled Look</Button>
|
|
58
|
+
|
|
59
|
+
// Native submit behavior
|
|
60
|
+
<Button type="submit" aria-label="Save form">Save</Button>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Implementation caution:
|
|
64
|
+
|
|
65
|
+
- Size scaling depends on CSS variables provided by the package global styles (`--btn-border-radius`, `--btn-pad-y`, `--btn-pad-x`, `--w-text`).
|
|
@@ -1,26 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { isEmpty as e } from "../../utilities/validations.esm.js";
|
|
3
|
-
import
|
|
4
|
-
import "
|
|
5
|
-
import n from "clsx";
|
|
6
|
-
import { Fragment as r, jsx as i } from "react/jsx-runtime";
|
|
3
|
+
import t from "clsx";
|
|
4
|
+
import { Fragment as n, jsx as r } from "react/jsx-runtime";
|
|
7
5
|
//#region src/components/Button/Button.tsx
|
|
8
|
-
var
|
|
9
|
-
let { type:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} : {};
|
|
14
|
-
return e(a.children) ? /* @__PURE__ */ i(r, {}) : /* @__PURE__ */ i("button", {
|
|
15
|
-
type: o,
|
|
16
|
-
className: n(s, u),
|
|
6
|
+
var i = (i) => {
|
|
7
|
+
let { type: a = "button", variant: o = "default", size: s, styles: c, className: l, style: u, ...d } = i, f = typeof s == "number" ? Math.min(10, Math.max(.1, s)) : void 0, p = e(c) ? void 0 : c, m = f ? { "--btn-size": f } : void 0;
|
|
8
|
+
return e(i.children) ? /* @__PURE__ */ r(n, {}) : /* @__PURE__ */ r("button", {
|
|
9
|
+
type: a,
|
|
10
|
+
className: t("button", o, l),
|
|
17
11
|
style: {
|
|
18
|
-
...h,
|
|
19
12
|
...m,
|
|
20
|
-
...
|
|
13
|
+
...p,
|
|
14
|
+
...u
|
|
21
15
|
},
|
|
22
|
-
...
|
|
16
|
+
...d
|
|
23
17
|
});
|
|
24
18
|
};
|
|
25
19
|
//#endregion
|
|
26
|
-
export {
|
|
20
|
+
export { i as Button };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Carousel — Agent Usage Notes
|
|
2
|
+
|
|
3
|
+
Import:
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Carousel } from "@stamcat/craftsman/Carousel";
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Props:
|
|
10
|
+
|
|
11
|
+
- Extends `EmblaOptionsType` from `embla-carousel`, except `slides`.
|
|
12
|
+
- `slides?: React.ReactNode[]`
|
|
13
|
+
- `className?: string`
|
|
14
|
+
- `style?: React.CSSProperties`
|
|
15
|
+
- `buttons?: boolean` (default: `true`)
|
|
16
|
+
- `pagination?: "dots" | "numbers"` (default: `"dots"`)
|
|
17
|
+
|
|
18
|
+
Behavior notes:
|
|
19
|
+
|
|
20
|
+
- `slides` is an array prop; do not pass slide content as `children`.
|
|
21
|
+
- Built on `embla-carousel-react`, so standard Embla options such as `loop`, `align`, `dragFree`, and `slidesToScroll` pass through.
|
|
22
|
+
- Previous/next controls are built in and can be hidden with `buttons={false}`.
|
|
23
|
+
- Pagination can render dots or the shared `Pagination` component in number mode.
|
|
24
|
+
- Number pagination uses zero-based indexes internally, consistent with `Pagination`.
|
|
25
|
+
- The component manages its own selected index from the Embla instance; there is no separate controlled index prop.
|
|
26
|
+
|
|
27
|
+
Example:
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
const slides = [
|
|
31
|
+
<figure key="one"><img src="/slide-1.jpg" alt="First slide" /></figure>,
|
|
32
|
+
<figure key="two"><img src="/slide-2.jpg" alt="Second slide" /></figure>,
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
<Carousel
|
|
36
|
+
slides={slides}
|
|
37
|
+
loop={false}
|
|
38
|
+
pagination="dots"
|
|
39
|
+
align="center"
|
|
40
|
+
/>
|
|
41
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer craftsman-component{.carousel{position:relative}.carousel__viewport{overflow:hidden}.carousel__container{touch-action:pan-y pinch-zoom;display:flex}.carousel__slide{flex:0 0 100%;min-width:0}.carousel__controls{justify-content:space-between;gap:calc(var(--w-gutter) * .5);margin-top:calc(var(--w-gutter) * .75);flex-flow:row;width:100%;display:inline-flex}.carousel__dots button{margin:0 calc(var(--w-gutter) * .125)}}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { EmblaOptionsType } from 'embla-carousel';
|
|
3
|
+
import { CarouselPageType } from '../../utilities/types';
|
|
4
|
+
export type CarouselProps = Omit<EmblaOptionsType, "slides"> & {
|
|
5
|
+
slides?: React.ReactNode[];
|
|
6
|
+
className?: string;
|
|
7
|
+
style?: React.CSSProperties;
|
|
8
|
+
buttons?: boolean;
|
|
9
|
+
pagination?: CarouselPageType;
|
|
10
|
+
};
|
|
11
|
+
export declare const Carousel: React.FC<CarouselProps>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
@use "../../styles/utilities/_functions" as u;
|
|
2
|
+
|
|
3
|
+
@layer craftsman-component {
|
|
4
|
+
.carousel {
|
|
5
|
+
position: relative;
|
|
6
|
+
|
|
7
|
+
&__viewport {
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
&__container {
|
|
12
|
+
display: flex;
|
|
13
|
+
touch-action: pan-y pinch-zoom;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&__slide {
|
|
17
|
+
flex: 0 0 100%;
|
|
18
|
+
min-width: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
&__controls {
|
|
22
|
+
display: inline-flex;
|
|
23
|
+
justify-content: space-between;
|
|
24
|
+
flex-flow: row nowrap;
|
|
25
|
+
gap: #{u.width("gutter", 0.5)};
|
|
26
|
+
margin-top: #{u.width("gutter", 0.75)};
|
|
27
|
+
width: 100%;
|
|
28
|
+
}
|
|
29
|
+
&__dots button {
|
|
30
|
+
margin: 0 #{u.width("gutter", 0.125)};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Button as e } from "../Button/Button.esm.js";
|
|
3
|
+
import { Pagination as t } from "../Pagination/Pagination2.esm.js";
|
|
4
|
+
import './Carousel.css';/* empty css */
|
|
5
|
+
import n from "clsx";
|
|
6
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
7
|
+
import { useCallback as a, useSyncExternalStore as o } from "react";
|
|
8
|
+
import { FaAngleLeft as s, FaAngleRight as c, FaCircle as l, FaRegCircle as u } from "react-icons/fa6";
|
|
9
|
+
import d from "embla-carousel-react";
|
|
10
|
+
//#region src/components/Carousel/Carousel.tsx
|
|
11
|
+
var f = (f) => {
|
|
12
|
+
let { slides: p = [], className: m, style: h, buttons: g = !0, pagination: _ = "dots", ...v } = f, [y, b] = d(v), x = a((e) => b ? (b.on("select", e).on("reInit", e), () => {
|
|
13
|
+
b.off("select", e), b.off("reInit", e);
|
|
14
|
+
}) : () => {}, [b]), S = o(x, () => !!b?.canScrollPrev(), () => !1), C = o(x, () => !!b?.canScrollNext(), () => !1), w = o(x, () => b?.selectedScrollSnap() ?? 0, () => 0), T = () => b?.scrollPrev(), E = () => b?.scrollNext(), D = (e) => {
|
|
15
|
+
let t = parseInt(e.currentTarget.value, 10) || 0;
|
|
16
|
+
b?.scrollTo(t);
|
|
17
|
+
};
|
|
18
|
+
return /* @__PURE__ */ i("div", {
|
|
19
|
+
className: n("carousel", m),
|
|
20
|
+
style: h,
|
|
21
|
+
children: [/* @__PURE__ */ r("div", {
|
|
22
|
+
className: "carousel__viewport",
|
|
23
|
+
ref: y,
|
|
24
|
+
children: /* @__PURE__ */ r("div", {
|
|
25
|
+
className: "carousel__container",
|
|
26
|
+
children: p.map((e, t) => /* @__PURE__ */ r("div", {
|
|
27
|
+
className: "carousel__slide",
|
|
28
|
+
children: e
|
|
29
|
+
}, `slide-${t}`))
|
|
30
|
+
})
|
|
31
|
+
}), /* @__PURE__ */ i("div", {
|
|
32
|
+
className: "carousel__controls",
|
|
33
|
+
children: [
|
|
34
|
+
g && /* @__PURE__ */ i("div", {
|
|
35
|
+
className: "carousel__buttons",
|
|
36
|
+
children: [/* @__PURE__ */ r(e, {
|
|
37
|
+
variant: "text",
|
|
38
|
+
onClick: T,
|
|
39
|
+
disabled: !S,
|
|
40
|
+
name: "prev",
|
|
41
|
+
children: /* @__PURE__ */ r(s, {
|
|
42
|
+
size: 24,
|
|
43
|
+
"aria-label": "prev"
|
|
44
|
+
})
|
|
45
|
+
}), /* @__PURE__ */ r(e, {
|
|
46
|
+
variant: "text",
|
|
47
|
+
onClick: E,
|
|
48
|
+
disabled: !C,
|
|
49
|
+
name: "next",
|
|
50
|
+
children: /* @__PURE__ */ r(c, {
|
|
51
|
+
size: 24,
|
|
52
|
+
"aria-label": "next"
|
|
53
|
+
})
|
|
54
|
+
})]
|
|
55
|
+
}),
|
|
56
|
+
_ === "dots" && /* @__PURE__ */ r("div", {
|
|
57
|
+
className: "carousel__dots",
|
|
58
|
+
children: p.map((t, n) => /* @__PURE__ */ r(e, {
|
|
59
|
+
variant: "text",
|
|
60
|
+
value: n,
|
|
61
|
+
onClick: D,
|
|
62
|
+
children: r(w === n ? l : u, { size: 16 })
|
|
63
|
+
}, `dot-${n}`))
|
|
64
|
+
}),
|
|
65
|
+
_ === "numbers" && /* @__PURE__ */ r(t, {
|
|
66
|
+
total: p.length,
|
|
67
|
+
current: w,
|
|
68
|
+
onChange: D
|
|
69
|
+
})
|
|
70
|
+
]
|
|
71
|
+
})]
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
//#endregion
|
|
75
|
+
export { f as Carousel };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Checkbox — Agent Usage Notes
|
|
2
|
+
|
|
3
|
+
Import:
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Checkbox } from "@stamcat/craftsman/Checkbox";
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Props:
|
|
10
|
+
|
|
11
|
+
- Extends `Input` props.
|
|
12
|
+
- `type?: "checkbox"` (default: `"checkbox"`)
|
|
13
|
+
- `labelPosition?: "left" | "right" | "top" | "bottom"` (default: `"right"`)
|
|
14
|
+
- `size?: number` (default visual scale is `1`, clamped to `[0.1, 10]`)
|
|
15
|
+
|
|
16
|
+
Behavior notes:
|
|
17
|
+
|
|
18
|
+
- `Checkbox` is a thin wrapper around `Input` with checkbox-specific guardrails.
|
|
19
|
+
- The wrapper enforces checkbox type by default and narrows label position options to common checkbox layouts.
|
|
20
|
+
- Controlled and uncontrolled patterns are both supported (`checked` + `onChange`, or `defaultChecked`).
|
|
21
|
+
- When `size` is provided, Checkbox sets a single `--checkbox-size` CSS variable inline; the checkbox box and checkmark scale via SCSS `calc()` from that variable (same pattern as `Button`'s `--btn-size` and `Toggle`'s `--toggle-width`).
|
|
22
|
+
|
|
23
|
+
Example:
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
<Checkbox
|
|
27
|
+
id="accept-terms"
|
|
28
|
+
name="terms"
|
|
29
|
+
value="accepted"
|
|
30
|
+
label="Accept terms"
|
|
31
|
+
checked={accepted}
|
|
32
|
+
onChange={(event) => setAccepted(event.currentTarget.checked)}
|
|
33
|
+
/>
|
|
34
|
+
```
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { InputProps } from '../Input/Input';
|
|
2
|
+
import { CheckboxLabelPosition } from '../../utilities/types';
|
|
3
|
+
export type CheckboxProps = InputProps & {
|
|
4
|
+
type?: "checkbox";
|
|
5
|
+
labelPosition?: CheckboxLabelPosition;
|
|
6
|
+
size?: number;
|
|
7
|
+
};
|
|
8
|
+
export declare const Checkbox: React.FC<CheckboxProps>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Input as e } from "../Input/Input2.esm.js";
|
|
3
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/Checkbox/Checkbox.tsx
|
|
5
|
+
var n = ({ type: n = "checkbox", labelPosition: r = "right", size: i, style: a, ...o }) => {
|
|
6
|
+
let s = typeof i == "number" ? Math.min(10, Math.max(.1, i)) : void 0;
|
|
7
|
+
return /* @__PURE__ */ t(e, {
|
|
8
|
+
type: n,
|
|
9
|
+
labelPosition: r,
|
|
10
|
+
style: {
|
|
11
|
+
...s ? { "--checkbox-size": s } : void 0,
|
|
12
|
+
...a
|
|
13
|
+
},
|
|
14
|
+
...o
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
//#endregion
|
|
18
|
+
export { n as Checkbox };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# DatePicker — Agent Usage Notes
|
|
2
|
+
|
|
3
|
+
Import:
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { DatePicker } from "@stamcat/craftsman/DatePicker";
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Props:
|
|
10
|
+
|
|
11
|
+
- Extends `DatePickerProps` from `react-date-picker`.
|
|
12
|
+
- `label?: string | ReactNode`
|
|
13
|
+
- `labelPosition?: "top" | "left" | "bottom" | "right" | "inside" | "hidden"` (default: `"top"`)
|
|
14
|
+
- `error?: string | boolean | ReactNode`
|
|
15
|
+
- `required?: boolean`
|
|
16
|
+
- `value?: Date | null`
|
|
17
|
+
- `onChange?: (value: DatePickerProps["value"]) => void`
|
|
18
|
+
|
|
19
|
+
Behavior notes:
|
|
20
|
+
|
|
21
|
+
- Controlled component — parent owns `value` and `onChange`.
|
|
22
|
+
- Calendar flyout renders below the input; ensure the container has at least 400px of vertical space.
|
|
23
|
+
- Use `useState` to manage the selected date value.
|
|
24
|
+
|
|
25
|
+
Example:
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
const [date, setDate] = useState<Date | null>(null);
|
|
29
|
+
|
|
30
|
+
<DatePicker
|
|
31
|
+
label="Appointment Date"
|
|
32
|
+
value={date}
|
|
33
|
+
onChange={setDate}
|
|
34
|
+
required
|
|
35
|
+
/>
|
|
36
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer craftsman-base{.react-date-picker__wrapper:focus{box-shadow:none;outline:0}.react-date-picker__wrapper{color:var(--text);border:1px solid var(--gray400);padding:calc(var(--w-gutter) * .5);background-color:var(--white);border-radius:6px}[type=number].react-date-picker__wrapper::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}[type=number].react-date-picker__wrapper::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}[type=number].react-date-picker__wrapper{appearance:textfield}.react-date-picker__wrapper:disabled,.disabled.react-date-picker__wrapper{border-color:var(--gray200);background-color:var(--gray100)}.react-date-picker__calendar{z-index:1;width:350px;max-width:100vw}.react-date-picker__calendar .react-calendar{border-width:thin}.react-date-picker__calendar--closed,.react-date-picker__clock--closed{display:none}.react-date-picker__calendar .react-date-picker__inputGroup__input:invalid{background:unset}}.react-date-picker,.react-date-picker *,.react-date-picker :before,.react-date-picker :after{box-sizing:border-box}@layer craftsman-component{.react-date-picker{display:inline-flex;position:relative}.react-date-picker--disabled{color:#6d6d6d;background-color:#f0f0f0}.react-date-picker__wrapper{flex-grow:1;flex-shrink:0;padding:6px 8px;display:flex}.react-date-picker__inputGroup{box-sizing:content-box;flex-grow:1;padding:0 2px}.react-date-picker__inputGroup__divider{white-space:pre;padding:1px 0}.react-date-picker__inputGroup__divider,.react-date-picker__inputGroup__leadingZero{font:inherit;display:inline-block}.react-date-picker__inputGroup__input{text-align:center;color:currentColor;min-width:calc(2ch + 1px);height:calc(100% - 2px);font:inherit;box-sizing:content-box;appearance:textfield;background:0 0;border:0;padding:1px;position:relative}[name=year].react-date-picker__inputGroup__input{min-width:calc(4ch + 2px)}.react-date-picker__inputGroup__input:disabled{background-color:unset}.react-date-picker__inputGroup__input::-webkit-outer-spin-button{appearance:none;margin:0}.react-date-picker__inputGroup__input::-webkit-inner-spin-button{appearance:none;margin:0}.react-date-picker__inputGroup__input--hasLeadingZero{margin-left:-.54em;padding-left:calc(1px + .54em)}.react-date-picker__button{border:0;padding:4px 4px 4px 7px}.react-date-picker__button:hover{background:0 0}}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { LabeledInput } from '../Input/InputWrapper';
|
|
3
|
+
import { DatePickerProps as ReactDatePickerProps } from 'react-date-picker';
|
|
4
|
+
export type DatePickerProps = ReactDatePickerProps & LabeledInput & {
|
|
5
|
+
id?: string;
|
|
6
|
+
style?: React.CSSProperties;
|
|
7
|
+
};
|
|
8
|
+
export declare const DatePicker: React.FC<DatePickerProps>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
@use "../../styles/global/components/input";
|
|
2
|
+
@use "../../styles/utilities/_functions" as u;
|
|
3
|
+
@use "../../styles/utilities/_placeholders";
|
|
4
|
+
@use "./_DatePicker";
|
|
5
|
+
@layer craftsman-base {
|
|
6
|
+
.react-date-picker,
|
|
7
|
+
.react-date-picker *,
|
|
8
|
+
.react-date-picker *:before,
|
|
9
|
+
.react-date-picker *:after {
|
|
10
|
+
@extend %border-box;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.react-date-picker {
|
|
14
|
+
@extend %date-picker-styles;
|
|
15
|
+
&--disabled {
|
|
16
|
+
@extend %date-picker-disabled;
|
|
17
|
+
}
|
|
18
|
+
&__wrapper {
|
|
19
|
+
@extend %date-picker-wrapper;
|
|
20
|
+
}
|
|
21
|
+
&__inputGroup {
|
|
22
|
+
@extend %date-picker-input-group;
|
|
23
|
+
}
|
|
24
|
+
&__inputGroup__divider {
|
|
25
|
+
@extend %date-picker-divider;
|
|
26
|
+
}
|
|
27
|
+
&__inputGroup__divider,
|
|
28
|
+
&__inputGroup__leadingZero {
|
|
29
|
+
@extend %date-picker-leading-zero-divider;
|
|
30
|
+
}
|
|
31
|
+
&__inputGroup__input {
|
|
32
|
+
@extend %date-picker-group-input;
|
|
33
|
+
}
|
|
34
|
+
&__inputGroup__input::-webkit-outer-spin-button,
|
|
35
|
+
&__inputGroup__input::-webkit-inner-spin-button {
|
|
36
|
+
@extend %date-picker-input-spinner;
|
|
37
|
+
}
|
|
38
|
+
&__inputGroup__input--hasLeadingZero {
|
|
39
|
+
@extend %date-picker-input-leading-zero;
|
|
40
|
+
}
|
|
41
|
+
&__button {
|
|
42
|
+
@extend %date-picker-button;
|
|
43
|
+
}
|
|
44
|
+
&__calendar {
|
|
45
|
+
width: 350px;
|
|
46
|
+
max-width: 100vw;
|
|
47
|
+
z-index: 1;
|
|
48
|
+
.react-calendar {
|
|
49
|
+
border-width: thin;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
&__calendar--closed, &__clock--closed {
|
|
53
|
+
display: none;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
.react-date-picker__calendar
|
|
58
|
+
.react-date-picker__inputGroup__input:invalid {
|
|
59
|
+
background: unset;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { InputWrapper as e } from "../Input/InputWrapper.esm.js";
|
|
3
|
+
import './ReactCalendar.css';import './DatePicker.css';/* empty css */
|
|
4
|
+
/* empty css */
|
|
5
|
+
import t from "clsx";
|
|
6
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
7
|
+
import { useId as r } from "react";
|
|
8
|
+
import { DatePicker as i } from "react-date-picker";
|
|
9
|
+
import { FaRegCalendar as a, FaX as o } from "react-icons/fa6";
|
|
10
|
+
//#region src/components/DatePicker/DatePicker.tsx
|
|
11
|
+
var s = ({ label: s, id: c, labelPosition: l = "top", required: u = !1, error: d, style: f, className: p, ...m }) => {
|
|
12
|
+
let h = r();
|
|
13
|
+
return /* @__PURE__ */ n(e, {
|
|
14
|
+
id: c || h,
|
|
15
|
+
className: t("datePicker", p),
|
|
16
|
+
label: s,
|
|
17
|
+
labelPosition: l,
|
|
18
|
+
error: d,
|
|
19
|
+
required: u,
|
|
20
|
+
style: f,
|
|
21
|
+
children: /* @__PURE__ */ n(i, {
|
|
22
|
+
calendarIcon: /* @__PURE__ */ n(a, { size: 16 }),
|
|
23
|
+
clearIcon: /* @__PURE__ */ n(o, { size: 14 }),
|
|
24
|
+
...m
|
|
25
|
+
})
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { s as DatePicker };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.react-calendar,.react-calendar *,.react-calendar :before,.react-calendar :after{box-sizing:border-box}@layer craftsman-base{.react-calendar{background:#fff;border:1px solid #a0a096;width:350px;max-width:100%;line-height:1.125em}.react-calendar--doubleView{width:700px}.react-calendar--doubleView .react-calendar__viewContainer{margin:-.5em;display:flex}.react-calendar--doubleView .react-calendar__viewContainer>*{width:50%;margin:.5em}.react-calendar button{border:0;outline:none;margin:0}.react-calendar button:enabled:hover{cursor:pointer}.react-calendar__navigation{height:44px;margin-bottom:1em;display:flex}.react-calendar__navigation button{background:0 0;min-width:44px}.react-calendar__navigation button:disabled{background-color:#f0f0f0}.react-calendar__navigation button:enabled:hover,.react-calendar__navigation button:enabled:focus{background-color:#e6e6e6}.react-calendar__month-view__weekdays{text-align:center;text-transform:uppercase;font:inherit;font-size:.75em;font-weight:700}.react-calendar__month-view__weekdays__weekday{padding:.5em}.react-calendar__month-view__weekNumbers .react-calendar__tile{font:inherit;justify-content:center;align-items:center;font-size:.75em;font-weight:700;display:flex}.react-calendar__month-view__days__day--weekend{color:#d10000}.react-calendar__month-view__days__day--neighboringMonth,.react-calendar__decade-view__years__year--neighboringDecade,.react-calendar__century-view__decades__decade--neighboringCentury{color:#757575}.react-calendar__tile:disabled{color:#ababab;background-color:#f0f0f0}.react-calendar__month-view__days__day--neighboringMonth:disabled,.react-calendar__decade-view__years__year--neighboringDecade:disabled,.react-calendar__century-view__decades__decade--neighboringCentury:disabled{color:#cdcdcd}.react-calendar__tile:enabled:hover,.react-calendar__tile:enabled:focus{background-color:#e6e6e6}.react-calendar__tile--now{background:#ffff76}.react-calendar__tile--now:enabled:hover,.react-calendar__tile--now:enabled:focus{background:#ffffa9}.react-calendar__tile--hasActive{background:#76baff}.react-calendar__tile--hasActive:enabled:hover,.react-calendar__tile--hasActive:enabled:focus{background:#a9d4ff}.react-calendar__tile--active{color:#fff;background:#006edc}.react-calendar__tile--active:enabled:hover,.react-calendar__tile--active:enabled:focus{background:#1087ff}.react-calendar--selectRange .react-calendar__tile--hover{background-color:#e6e6e6}.react-calendar{border-color:var(--gray400)}.react-calendar button{border-radius:unset;justify-content:center;padding:12px 0}.react-calendar__year-view button,.react-calendar__decade-view button,.react-calendar__century-view button{padding:18px 0}}
|