premium-ds 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +113 -0
  3. package/dist/alert.d.ts +31 -0
  4. package/dist/alert.js +6 -0
  5. package/dist/alert.js.map +1 -0
  6. package/dist/avatar-group.d.ts +13 -0
  7. package/dist/avatar-group.js +3 -0
  8. package/dist/avatar-group.js.map +1 -0
  9. package/dist/avatar.d.ts +25 -0
  10. package/dist/avatar.js +3 -0
  11. package/dist/avatar.js.map +1 -0
  12. package/dist/badge.d.ts +23 -0
  13. package/dist/badge.js +3 -0
  14. package/dist/badge.js.map +1 -0
  15. package/dist/button.d.ts +20 -0
  16. package/dist/button.js +3 -0
  17. package/dist/button.js.map +1 -0
  18. package/dist/checkbox.d.ts +25 -0
  19. package/dist/checkbox.js +3 -0
  20. package/dist/checkbox.js.map +1 -0
  21. package/dist/chunk-2OWHZ4JT.js +36 -0
  22. package/dist/chunk-2OWHZ4JT.js.map +1 -0
  23. package/dist/chunk-34SIXSYL.js +64 -0
  24. package/dist/chunk-34SIXSYL.js.map +1 -0
  25. package/dist/chunk-37O2ZXD6.js +55 -0
  26. package/dist/chunk-37O2ZXD6.js.map +1 -0
  27. package/dist/chunk-4AZL76UJ.js +89 -0
  28. package/dist/chunk-4AZL76UJ.js.map +1 -0
  29. package/dist/chunk-4HSCN5TZ.js +86 -0
  30. package/dist/chunk-4HSCN5TZ.js.map +1 -0
  31. package/dist/chunk-5DDOOT33.js +258 -0
  32. package/dist/chunk-5DDOOT33.js.map +1 -0
  33. package/dist/chunk-5FVHWIMY.js +117 -0
  34. package/dist/chunk-5FVHWIMY.js.map +1 -0
  35. package/dist/chunk-5K6KRJGX.js +147 -0
  36. package/dist/chunk-5K6KRJGX.js.map +1 -0
  37. package/dist/chunk-5PQMQBQC.js +74 -0
  38. package/dist/chunk-5PQMQBQC.js.map +1 -0
  39. package/dist/chunk-7OCTVQ7C.js +95 -0
  40. package/dist/chunk-7OCTVQ7C.js.map +1 -0
  41. package/dist/chunk-7OPMOET7.js +39 -0
  42. package/dist/chunk-7OPMOET7.js.map +1 -0
  43. package/dist/chunk-BXXS7YRC.js +270 -0
  44. package/dist/chunk-BXXS7YRC.js.map +1 -0
  45. package/dist/chunk-CV2Q4YXX.js +272 -0
  46. package/dist/chunk-CV2Q4YXX.js.map +1 -0
  47. package/dist/chunk-EIMMDWIW.js +282 -0
  48. package/dist/chunk-EIMMDWIW.js.map +1 -0
  49. package/dist/chunk-EZ2CWTBE.js +230 -0
  50. package/dist/chunk-EZ2CWTBE.js.map +1 -0
  51. package/dist/chunk-FGHDG3Y4.js +89 -0
  52. package/dist/chunk-FGHDG3Y4.js.map +1 -0
  53. package/dist/chunk-FPP2XLKX.js +127 -0
  54. package/dist/chunk-FPP2XLKX.js.map +1 -0
  55. package/dist/chunk-G6OY35DI.js +295 -0
  56. package/dist/chunk-G6OY35DI.js.map +1 -0
  57. package/dist/chunk-H6KWJNOE.js +65 -0
  58. package/dist/chunk-H6KWJNOE.js.map +1 -0
  59. package/dist/chunk-HGILYGY3.js +45 -0
  60. package/dist/chunk-HGILYGY3.js.map +1 -0
  61. package/dist/chunk-I3BCB4Z5.js +88 -0
  62. package/dist/chunk-I3BCB4Z5.js.map +1 -0
  63. package/dist/chunk-KBWNUUWM.js +582 -0
  64. package/dist/chunk-KBWNUUWM.js.map +1 -0
  65. package/dist/chunk-KN7JFAZ6.js +113 -0
  66. package/dist/chunk-KN7JFAZ6.js.map +1 -0
  67. package/dist/chunk-MEF7PI6U.js +16 -0
  68. package/dist/chunk-MEF7PI6U.js.map +1 -0
  69. package/dist/chunk-NKGMQL6I.js +310 -0
  70. package/dist/chunk-NKGMQL6I.js.map +1 -0
  71. package/dist/chunk-NMFQRGLL.js +127 -0
  72. package/dist/chunk-NMFQRGLL.js.map +1 -0
  73. package/dist/chunk-OUBWD6CX.js +433 -0
  74. package/dist/chunk-OUBWD6CX.js.map +1 -0
  75. package/dist/chunk-PFNXVBLU.js +96 -0
  76. package/dist/chunk-PFNXVBLU.js.map +1 -0
  77. package/dist/chunk-PUPZ4HME.js +165 -0
  78. package/dist/chunk-PUPZ4HME.js.map +1 -0
  79. package/dist/chunk-QFS52OK5.js +690 -0
  80. package/dist/chunk-QFS52OK5.js.map +1 -0
  81. package/dist/chunk-QNC6O3PG.js +45 -0
  82. package/dist/chunk-QNC6O3PG.js.map +1 -0
  83. package/dist/chunk-QUHOXWBK.js +82 -0
  84. package/dist/chunk-QUHOXWBK.js.map +1 -0
  85. package/dist/chunk-UIQGSTBJ.js +106 -0
  86. package/dist/chunk-UIQGSTBJ.js.map +1 -0
  87. package/dist/chunk-UJQKVP6V.js +193 -0
  88. package/dist/chunk-UJQKVP6V.js.map +1 -0
  89. package/dist/chunk-VVPGEAC6.js +11 -0
  90. package/dist/chunk-VVPGEAC6.js.map +1 -0
  91. package/dist/chunk-XA3T5KWA.js +58 -0
  92. package/dist/chunk-XA3T5KWA.js.map +1 -0
  93. package/dist/chunk-YSHJHSJM.js +19 -0
  94. package/dist/chunk-YSHJHSJM.js.map +1 -0
  95. package/dist/chunk-YVHOAVSM.js +182 -0
  96. package/dist/chunk-YVHOAVSM.js.map +1 -0
  97. package/dist/collapse.d.ts +16 -0
  98. package/dist/collapse.js +3 -0
  99. package/dist/collapse.js.map +1 -0
  100. package/dist/count-badge.d.ts +11 -0
  101. package/dist/count-badge.js +4 -0
  102. package/dist/count-badge.js.map +1 -0
  103. package/dist/date-field.d.ts +39 -0
  104. package/dist/date-field.js +8 -0
  105. package/dist/date-field.js.map +1 -0
  106. package/dist/date-range-field.d.ts +30 -0
  107. package/dist/date-range-field.js +8 -0
  108. package/dist/date-range-field.js.map +1 -0
  109. package/dist/datetime-field.d.ts +28 -0
  110. package/dist/datetime-field.js +10 -0
  111. package/dist/datetime-field.js.map +1 -0
  112. package/dist/dialog.d.ts +26 -0
  113. package/dist/dialog.js +7 -0
  114. package/dist/dialog.js.map +1 -0
  115. package/dist/index.d.ts +35 -0
  116. package/dist/index.js +40 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/motion-tokens.d.ts +29 -0
  119. package/dist/motion-tokens.js +3 -0
  120. package/dist/motion-tokens.js.map +1 -0
  121. package/dist/multi-select.d.ts +25 -0
  122. package/dist/multi-select.js +7 -0
  123. package/dist/multi-select.js.map +1 -0
  124. package/dist/number-field.d.ts +24 -0
  125. package/dist/number-field.js +4 -0
  126. package/dist/number-field.js.map +1 -0
  127. package/dist/otp-field.d.ts +20 -0
  128. package/dist/otp-field.js +3 -0
  129. package/dist/otp-field.js.map +1 -0
  130. package/dist/overlay.d.ts +31 -0
  131. package/dist/overlay.js +4 -0
  132. package/dist/overlay.js.map +1 -0
  133. package/dist/pagination.d.ts +24 -0
  134. package/dist/pagination.js +5 -0
  135. package/dist/pagination.js.map +1 -0
  136. package/dist/radio-group.d.ts +46 -0
  137. package/dist/radio-group.js +6 -0
  138. package/dist/radio-group.js.map +1 -0
  139. package/dist/select-core-SAyS-8w0.d.ts +16 -0
  140. package/dist/select.d.ts +27 -0
  141. package/dist/select.js +7 -0
  142. package/dist/select.js.map +1 -0
  143. package/dist/status-badge.d.ts +17 -0
  144. package/dist/status-badge.js +5 -0
  145. package/dist/status-badge.js.map +1 -0
  146. package/dist/table.d.ts +65 -0
  147. package/dist/table.js +5 -0
  148. package/dist/table.js.map +1 -0
  149. package/dist/tabs.d.ts +44 -0
  150. package/dist/tabs.js +5 -0
  151. package/dist/tabs.js.map +1 -0
  152. package/dist/tag.d.ts +28 -0
  153. package/dist/tag.js +5 -0
  154. package/dist/tag.js.map +1 -0
  155. package/dist/text-field.d.ts +30 -0
  156. package/dist/text-field.js +6 -0
  157. package/dist/text-field.js.map +1 -0
  158. package/dist/textarea.d.ts +33 -0
  159. package/dist/textarea.js +5 -0
  160. package/dist/textarea.js.map +1 -0
  161. package/dist/time-field.d.ts +27 -0
  162. package/dist/time-field.js +6 -0
  163. package/dist/time-field.js.map +1 -0
  164. package/dist/toast-store.d.ts +75 -0
  165. package/dist/toast-store.js +3 -0
  166. package/dist/toast-store.js.map +1 -0
  167. package/dist/toast.d.ts +3 -0
  168. package/dist/toast.js +6 -0
  169. package/dist/toast.js.map +1 -0
  170. package/dist/toggle-tag.d.ts +24 -0
  171. package/dist/toggle-tag.js +4 -0
  172. package/dist/toggle-tag.js.map +1 -0
  173. package/dist/toggle.d.ts +21 -0
  174. package/dist/toggle.js +3 -0
  175. package/dist/toggle.js.map +1 -0
  176. package/dist/tooltip.d.ts +27 -0
  177. package/dist/tooltip.js +4 -0
  178. package/dist/tooltip.js.map +1 -0
  179. package/llms.txt +165 -0
  180. package/package.json +205 -0
  181. package/src/components/alert/Alert.tsx +118 -0
  182. package/src/components/alert/alert.css +136 -0
  183. package/src/components/avatar/Avatar.tsx +128 -0
  184. package/src/components/avatar/AvatarGroup.tsx +50 -0
  185. package/src/components/avatar/avatar.css +200 -0
  186. package/src/components/badge/Badge.tsx +66 -0
  187. package/src/components/badge/CountBadge.tsx +46 -0
  188. package/src/components/badge/StatusBadge.tsx +132 -0
  189. package/src/components/badge/badge.css +243 -0
  190. package/src/components/button/Button.tsx +68 -0
  191. package/src/components/button/button.css +222 -0
  192. package/src/components/checkbox/Checkbox.tsx +90 -0
  193. package/src/components/checkbox/checkbox.css +179 -0
  194. package/src/components/date-picker/DateField.tsx +362 -0
  195. package/src/components/date-picker/DateRangeField.tsx +533 -0
  196. package/src/components/date-picker/DateTimeField.tsx +177 -0
  197. package/src/components/date-picker/TimeField.tsx +100 -0
  198. package/src/components/date-picker/date-picker.css +591 -0
  199. package/src/components/date-picker/date-utils.ts +55 -0
  200. package/src/components/date-picker/field-shell.tsx +78 -0
  201. package/src/components/date-picker/glide-pill.tsx +81 -0
  202. package/src/components/date-picker/time-core.tsx +305 -0
  203. package/src/components/dialog/Dialog.tsx +181 -0
  204. package/src/components/dialog/dialog.css +170 -0
  205. package/src/components/glass/glass.css +100 -0
  206. package/src/components/icon/Icon.tsx +76 -0
  207. package/src/components/icon/IconSlot.tsx +11 -0
  208. package/src/components/icon/icon.css +33 -0
  209. package/src/components/input/NumberField.tsx +117 -0
  210. package/src/components/input/OtpField.tsx +118 -0
  211. package/src/components/input/TextField.tsx +123 -0
  212. package/src/components/input/input.css +335 -0
  213. package/src/components/motion/Collapse.tsx +33 -0
  214. package/src/components/motion/collapse.css +41 -0
  215. package/src/components/overlay/Overlay.tsx +239 -0
  216. package/src/components/overlay/overlay-core.tsx +565 -0
  217. package/src/components/overlay/overlay.css +119 -0
  218. package/src/components/overlay/sheet-drag.tsx +146 -0
  219. package/src/components/pagination/Pagination.tsx +140 -0
  220. package/src/components/pagination/pagination.css +48 -0
  221. package/src/components/radio-group/RadioGroup.tsx +182 -0
  222. package/src/components/radio-group/radio-group.css +277 -0
  223. package/src/components/select/MultiSelect.tsx +251 -0
  224. package/src/components/select/Select.tsx +235 -0
  225. package/src/components/select/select-core.tsx +417 -0
  226. package/src/components/select/select.css +386 -0
  227. package/src/components/table/Table.tsx +433 -0
  228. package/src/components/table/table.css +348 -0
  229. package/src/components/tabs/Tabs.tsx +371 -0
  230. package/src/components/tabs/tabs.css +228 -0
  231. package/src/components/tag/Tag.tsx +145 -0
  232. package/src/components/tag/ToggleTag.tsx +125 -0
  233. package/src/components/tag/tag.css +248 -0
  234. package/src/components/textarea/Textarea.tsx +197 -0
  235. package/src/components/textarea/textarea.css +219 -0
  236. package/src/components/toast/Toast.tsx +349 -0
  237. package/src/components/toast/toast-store.ts +266 -0
  238. package/src/components/toast/toast.css +233 -0
  239. package/src/components/toggle/Toggle.tsx +94 -0
  240. package/src/components/toggle/toggle.css +152 -0
  241. package/src/components/tooltip/Tooltip.tsx +365 -0
  242. package/src/components/tooltip/tooltip.css +86 -0
  243. package/src/index.ts +42 -0
  244. package/src/styles.css +39 -0
  245. package/src/tokens/avatar.css +20 -0
  246. package/src/tokens/color.css +56 -0
  247. package/src/tokens/elevation.css +20 -0
  248. package/src/tokens/fonts.css +3 -0
  249. package/src/tokens/glass.css +21 -0
  250. package/src/tokens/icons.css +7 -0
  251. package/src/tokens/layers.css +6 -0
  252. package/src/tokens/motion-tokens.ts +72 -0
  253. package/src/tokens/motion.css +49 -0
  254. package/src/tokens/radius.css +11 -0
  255. package/src/tokens/semantic.css +75 -0
  256. package/src/tokens/spacing.css +26 -0
  257. package/src/tokens/typography.css +54 -0
@@ -0,0 +1,270 @@
1
+ 'use client';import { UIMotion } from './chunk-37O2ZXD6.js';
2
+ import * as React from 'react';
3
+ import * as ReactDOM from 'react-dom';
4
+ import { createRoot } from 'react-dom/client';
5
+ import { AnimatePresence, motion } from 'motion/react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var SM = UIMotion;
9
+ var { useRef, useEffect, useLayoutEffect, useState, useId, useSyncExternalStore } = React;
10
+ var OPEN_DELAY = 350;
11
+ var CLOSE_GRACE = 140;
12
+ var WARM_WINDOW = 300;
13
+ var TIP_GAP = typeof document !== "undefined" ? parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--space-2")) || 8 : 8;
14
+ var store = {
15
+ active: null,
16
+ closeTimer: 0,
17
+ warmUntil: 0,
18
+ listeners: /* @__PURE__ */ new Set(),
19
+ get: () => store.active,
20
+ subscribe(l) {
21
+ store.listeners.add(l);
22
+ return () => store.listeners.delete(l);
23
+ },
24
+ emit() {
25
+ store.listeners.forEach((l) => l());
26
+ },
27
+ isWarm: () => store.active !== null || performance.now() < store.warmUntil,
28
+ open(payload) {
29
+ clearTimeout(store.closeTimer);
30
+ store.active = payload;
31
+ store.emit();
32
+ },
33
+ close(id, grace = CLOSE_GRACE) {
34
+ clearTimeout(store.closeTimer);
35
+ store.closeTimer = setTimeout(() => {
36
+ if (store.active && store.active.id === id) store.closeNow();
37
+ }, grace);
38
+ },
39
+ closeNow() {
40
+ clearTimeout(store.closeTimer);
41
+ if (!store.active) return;
42
+ store.warmUntil = performance.now() + WARM_WINDOW;
43
+ store.active = null;
44
+ store.emit();
45
+ }
46
+ };
47
+ function targetBox(size, t, want) {
48
+ const vw = window.innerWidth, vh = window.innerHeight, M = TIP_GAP;
49
+ let p = want;
50
+ if (p === "top" && t.top - size.h - TIP_GAP < M) p = "bottom";
51
+ else if (p === "bottom" && t.bottom + size.h + TIP_GAP > vh - M) p = "top";
52
+ else if (p === "left" && t.left - size.w - TIP_GAP < M) p = "right";
53
+ else if (p === "right" && t.right + size.w + TIP_GAP > vw - M) p = "left";
54
+ let x, y;
55
+ if (p === "top") {
56
+ x = t.left + t.width / 2 - size.w / 2;
57
+ y = t.top - size.h - TIP_GAP;
58
+ } else if (p === "bottom") {
59
+ x = t.left + t.width / 2 - size.w / 2;
60
+ y = t.bottom + TIP_GAP;
61
+ } else if (p === "left") {
62
+ x = t.left - size.w - TIP_GAP;
63
+ y = t.top + t.height / 2 - size.h / 2;
64
+ } else {
65
+ x = t.right + TIP_GAP;
66
+ y = t.top + t.height / 2 - size.h / 2;
67
+ }
68
+ return {
69
+ x: Math.round(Math.min(Math.max(x, M), vw - size.w - M)),
70
+ y: Math.round(Math.min(Math.max(y, M), vh - size.h - M)),
71
+ w: size.w,
72
+ h: size.h,
73
+ placement: p
74
+ };
75
+ }
76
+ var fromEdge = (p) => ({
77
+ // enter/exit offset toward the trigger
78
+ x: p === "left" ? 4 : p === "right" ? -4 : 0,
79
+ y: p === "top" ? 4 : p === "bottom" ? -4 : 0
80
+ });
81
+ function Body({ a, width }) {
82
+ return /* @__PURE__ */ jsx("span", { className: "tooltip__body", style: width ? { width } : void 0, children: a.shortcut ? /* @__PURE__ */ jsxs("span", { className: "tooltip__row", children: [
83
+ /* @__PURE__ */ jsx("span", { children: a.content }),
84
+ /* @__PURE__ */ jsx("kbd", { className: "tooltip__shortcut", children: a.shortcut })
85
+ ] }) : a.content });
86
+ }
87
+ function TooltipHost() {
88
+ const active = useSyncExternalStore(store.subscribe, store.get);
89
+ const measureRef = useRef(null);
90
+ const [box, setBox] = useState(null);
91
+ useLayoutEffect(() => {
92
+ if (!active) {
93
+ setBox(null);
94
+ return;
95
+ }
96
+ const r = measureRef.current.getBoundingClientRect();
97
+ const b = measureRef.current.firstChild.getBoundingClientRect();
98
+ setBox({
99
+ ...targetBox(
100
+ { w: Math.ceil(r.width), h: Math.ceil(r.height) },
101
+ active.rect(),
102
+ active.placement
103
+ ),
104
+ bodyW: Math.ceil(b.width)
105
+ });
106
+ }, [active]);
107
+ useEffect(() => {
108
+ if (!active) return void 0;
109
+ const onKey = (e) => {
110
+ if (e.key === "Escape") store.closeNow();
111
+ };
112
+ const onScroll = () => store.closeNow();
113
+ document.addEventListener("keydown", onKey);
114
+ window.addEventListener("scroll", onScroll, true);
115
+ return () => {
116
+ document.removeEventListener("keydown", onKey);
117
+ window.removeEventListener("scroll", onScroll, true);
118
+ };
119
+ }, [active]);
120
+ const off = box ? fromEdge(box.placement) : { x: 0, y: 0 };
121
+ return ReactDOM.createPortal(
122
+ /* @__PURE__ */ jsxs(React.Fragment, { children: [
123
+ active && /* @__PURE__ */ jsx("div", { className: "tooltip tooltip--measure", ref: measureRef, "aria-hidden": "true", children: /* @__PURE__ */ jsx(Body, { a: active }) }),
124
+ /* @__PURE__ */ jsx(AnimatePresence, { children: active && box && /* @__PURE__ */ jsx(
125
+ motion.div,
126
+ {
127
+ className: "tooltip",
128
+ id: "scheduly-tooltip",
129
+ role: "tooltip",
130
+ "data-placement": box.placement,
131
+ initial: {
132
+ x: box.x + off.x,
133
+ y: box.y + off.y,
134
+ width: box.w,
135
+ height: box.h,
136
+ opacity: 0,
137
+ scale: 0.96
138
+ },
139
+ animate: { x: box.x, y: box.y, width: box.w, height: box.h, opacity: 1, scale: 1 },
140
+ exit: {
141
+ x: box.x + off.x,
142
+ y: box.y + off.y,
143
+ opacity: 0,
144
+ scale: 0.96,
145
+ transition: { duration: SM.dur.fast, ease: SM.ease.exit }
146
+ },
147
+ transition: {
148
+ x: SM.t.layout,
149
+ y: SM.t.layout,
150
+ width: SM.t.layout,
151
+ height: SM.t.layout,
152
+ opacity: SM.t.enter,
153
+ scale: SM.t.enter
154
+ },
155
+ children: /* @__PURE__ */ jsx(
156
+ motion.span,
157
+ {
158
+ initial: { opacity: 0 },
159
+ animate: { opacity: 1, transition: SM.t.enter },
160
+ children: /* @__PURE__ */ jsx(Body, { a: active, width: box.bodyW })
161
+ },
162
+ active.id
163
+ )
164
+ },
165
+ "tip"
166
+ ) })
167
+ ] }),
168
+ document.body
169
+ );
170
+ }
171
+ var hostMounted = false;
172
+ function ensureHost() {
173
+ if (hostMounted) return;
174
+ hostMounted = true;
175
+ const el = document.createElement("div");
176
+ el.setAttribute("data-tooltip-host", "");
177
+ document.body.appendChild(el);
178
+ createRoot(el).render(/* @__PURE__ */ jsx(TooltipHost, {}));
179
+ }
180
+ var chain = (theirs, mine) => (e) => {
181
+ if (theirs) theirs(e);
182
+ mine(e);
183
+ };
184
+ function Tooltip({
185
+ content,
186
+ shortcut = null,
187
+ placement = "top",
188
+ disabled = false,
189
+ openDelay = OPEN_DELAY,
190
+ closeDelay = CLOSE_GRACE,
191
+ asChild = false,
192
+ id,
193
+ children
194
+ }) {
195
+ const triggerRef = useRef(null);
196
+ const wrapRef = useRef(null);
197
+ const openTimer = useRef(0);
198
+ const myId = id || "tip-" + useId();
199
+ const anchorEl = () => asChild ? triggerRef.current : wrapRef.current?.firstElementChild ?? null;
200
+ useEffect(
201
+ () => () => {
202
+ clearTimeout(openTimer.current);
203
+ store.close(myId, 0);
204
+ },
205
+ []
206
+ );
207
+ function show(immediate) {
208
+ if (disabled) return;
209
+ ensureHost();
210
+ clearTimeout(openTimer.current);
211
+ const el = anchorEl();
212
+ if (!el) return;
213
+ el.setAttribute("aria-describedby", "scheduly-tooltip");
214
+ const open = () => store.open({
215
+ id: myId,
216
+ content,
217
+ shortcut,
218
+ placement,
219
+ rect: () => anchorEl().getBoundingClientRect()
220
+ });
221
+ if (immediate || store.isWarm()) open();
222
+ else openTimer.current = setTimeout(open, openDelay);
223
+ }
224
+ function hide() {
225
+ clearTimeout(openTimer.current);
226
+ const el = anchorEl();
227
+ if (el) el.removeAttribute("aria-describedby");
228
+ store.close(myId, closeDelay);
229
+ }
230
+ const onEnter = (e) => {
231
+ if (e.pointerType !== "touch") show(false);
232
+ };
233
+ const onFocusIn = (e) => {
234
+ if (e.target.matches(":focus-visible")) show(true);
235
+ };
236
+ if (!asChild) {
237
+ return /* @__PURE__ */ jsx(
238
+ "span",
239
+ {
240
+ ref: wrapRef,
241
+ className: "tooltip-anchor",
242
+ onPointerEnter: onEnter,
243
+ onPointerLeave: hide,
244
+ onPointerDown: hide,
245
+ onFocus: onFocusIn,
246
+ onBlur: hide,
247
+ children
248
+ }
249
+ );
250
+ }
251
+ const child = React.Children.only(children);
252
+ const childRef = child.ref;
253
+ const childProps = child.props;
254
+ return React.cloneElement(child, {
255
+ ref: (node) => {
256
+ triggerRef.current = node;
257
+ if (typeof childRef === "function") childRef(node);
258
+ else if (childRef && typeof childRef === "object") childRef.current = node;
259
+ },
260
+ onPointerEnter: chain(childProps.onPointerEnter, onEnter),
261
+ onPointerLeave: chain(childProps.onPointerLeave, hide),
262
+ onPointerDown: chain(childProps.onPointerDown, hide),
263
+ onFocus: chain(childProps.onFocus, onFocusIn),
264
+ onBlur: chain(childProps.onBlur, hide)
265
+ });
266
+ }
267
+
268
+ export { Tooltip, TooltipHost };
269
+ //# sourceMappingURL=chunk-BXXS7YRC.js.map
270
+ //# sourceMappingURL=chunk-BXXS7YRC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/tooltip/Tooltip.tsx"],"names":[],"mappings":"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","file":"chunk-BXXS7YRC.js","sourcesContent":["'use client';\n\n/* Tooltip - a transient, non-interactive hint on hover/focus (one shared bubble). */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createRoot } from 'react-dom/client';\nimport { motion, AnimatePresence } from 'motion/react';\nimport type { ReactElement, ReactNode } from 'react';\nimport { UIMotion } from '../../tokens/motion-tokens';\n\nconst SM = UIMotion;\nconst { useRef, useEffect, useLayoutEffect, useState, useId, useSyncExternalStore } = React;\n\ntype Placement = 'top' | 'bottom' | 'left' | 'right';\n\ninterface ActivePayload {\n id: string;\n content: ReactNode;\n shortcut?: string | null;\n placement: Placement;\n rect: () => DOMRect;\n}\n\ninterface Size {\n w: number;\n h: number;\n}\ninterface TargetBox extends Size {\n x: number;\n y: number;\n placement: Placement;\n}\ninterface RenderedBox extends TargetBox {\n bodyW: number;\n}\n\nconst OPEN_DELAY = 350;\nconst CLOSE_GRACE = 140;\nconst WARM_WINDOW = 300;\n\nconst TIP_GAP =\n typeof document !== 'undefined'\n ? parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--space-2')) || 8\n : 8;\n\n/* Store - what's showing, where; triggers write, the host renders. */\nconst store = {\n active: null as ActivePayload | null,\n closeTimer: 0 as ReturnType<typeof setTimeout> | 0,\n warmUntil: 0,\n listeners: new Set<() => void>(),\n get: () => store.active,\n subscribe(l: () => void) {\n store.listeners.add(l);\n return () => store.listeners.delete(l);\n },\n emit() {\n store.listeners.forEach((l) => l());\n },\n isWarm: () => store.active !== null || performance.now() < store.warmUntil,\n open(payload: ActivePayload) {\n clearTimeout(store.closeTimer);\n store.active = payload;\n store.emit();\n },\n close(id: string, grace = CLOSE_GRACE) {\n // graced; only the owning trigger can close\n clearTimeout(store.closeTimer);\n store.closeTimer = setTimeout(() => {\n if (store.active && store.active.id === id) store.closeNow();\n }, grace);\n },\n closeNow() {\n clearTimeout(store.closeTimer);\n if (!store.active) return;\n store.warmUntil = performance.now() + WARM_WINDOW;\n store.active = null;\n store.emit();\n },\n};\n\n/* Target box from the trigger rect + the measured content size; flips + clamps. */\nfunction targetBox(size: Size, t: DOMRect, want: Placement): TargetBox {\n const vw = window.innerWidth,\n vh = window.innerHeight,\n M = TIP_GAP;\n let p = want;\n if (p === 'top' && t.top - size.h - TIP_GAP < M) p = 'bottom';\n else if (p === 'bottom' && t.bottom + size.h + TIP_GAP > vh - M) p = 'top';\n else if (p === 'left' && t.left - size.w - TIP_GAP < M) p = 'right';\n else if (p === 'right' && t.right + size.w + TIP_GAP > vw - M) p = 'left';\n let x, y;\n if (p === 'top') {\n x = t.left + t.width / 2 - size.w / 2;\n y = t.top - size.h - TIP_GAP;\n } else if (p === 'bottom') {\n x = t.left + t.width / 2 - size.w / 2;\n y = t.bottom + TIP_GAP;\n } else if (p === 'left') {\n x = t.left - size.w - TIP_GAP;\n y = t.top + t.height / 2 - size.h / 2;\n } else {\n x = t.right + TIP_GAP;\n y = t.top + t.height / 2 - size.h / 2;\n }\n return {\n x: Math.round(Math.min(Math.max(x, M), vw - size.w - M)),\n y: Math.round(Math.min(Math.max(y, M), vh - size.h - M)),\n w: size.w,\n h: size.h,\n placement: p,\n };\n}\n\nconst fromEdge = (p: Placement) => ({\n // enter/exit offset toward the trigger\n x: p === 'left' ? 4 : p === 'right' ? -4 : 0,\n y: p === 'top' ? 4 : p === 'bottom' ? -4 : 0,\n});\n\nfunction Body({ a, width }: { a: ActivePayload; width?: number }) {\n return (\n <span className=\"tooltip__body\" style={width ? { width } : undefined}>\n {a.shortcut ? (\n <span className=\"tooltip__row\">\n <span>{a.content}</span>\n <kbd className=\"tooltip__shortcut\">{a.shortcut}</kbd>\n </span>\n ) : (\n a.content\n )}\n </span>\n );\n}\n\n/* Host - the one bubble + its hidden measuring twin. */\nfunction TooltipHost() {\n const active = useSyncExternalStore(store.subscribe, store.get);\n const measureRef = useRef<HTMLDivElement>(null);\n const [box, setBox] = useState<RenderedBox | null>(null);\n\n // Measure the clone before paint: box = its border box; bodyW locks the live body's wrapping to the clone's.\n useLayoutEffect(() => {\n if (!active) {\n setBox(null);\n return;\n }\n const r = measureRef.current.getBoundingClientRect();\n const b = (measureRef.current.firstChild as HTMLElement).getBoundingClientRect();\n setBox({\n ...targetBox(\n { w: Math.ceil(r.width), h: Math.ceil(r.height) },\n active.rect(),\n active.placement,\n ),\n bodyW: Math.ceil(b.width),\n });\n }, [active]);\n\n // Esc or any scroll dismisses (a stale hint is worse than none)\n useEffect(() => {\n if (!active) return undefined;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') store.closeNow();\n };\n const onScroll = () => store.closeNow();\n document.addEventListener('keydown', onKey);\n window.addEventListener('scroll', onScroll, true);\n return () => {\n document.removeEventListener('keydown', onKey);\n window.removeEventListener('scroll', onScroll, true);\n };\n }, [active]);\n\n const off = box ? fromEdge(box.placement) : { x: 0, y: 0 };\n\n return ReactDOM.createPortal(\n <React.Fragment>\n {active && (\n <div className=\"tooltip tooltip--measure\" ref={measureRef} aria-hidden=\"true\">\n <Body a={active} />\n </div>\n )}\n <AnimatePresence>\n {active && box && (\n <motion.div\n key=\"tip\"\n className=\"tooltip\"\n id=\"scheduly-tooltip\"\n role=\"tooltip\"\n data-placement={box.placement}\n initial={{\n x: box.x + off.x,\n y: box.y + off.y,\n width: box.w,\n height: box.h,\n opacity: 0,\n scale: 0.96,\n }}\n animate={{ x: box.x, y: box.y, width: box.w, height: box.h, opacity: 1, scale: 1 }}\n exit={{\n x: box.x + off.x,\n y: box.y + off.y,\n opacity: 0,\n scale: 0.96,\n transition: { duration: SM.dur.fast, ease: SM.ease.exit },\n }}\n transition={{\n x: SM.t.layout,\n y: SM.t.layout,\n width: SM.t.layout,\n height: SM.t.layout,\n opacity: SM.t.enter,\n scale: SM.t.enter,\n }}\n >\n {/* one node keyed by trigger: old cuts, new fades in while the box travels (fixed width keeps wrapping stable) */}\n <motion.span\n key={active.id}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1, transition: SM.t.enter }}\n >\n <Body a={active} width={box.bodyW} />\n </motion.span>\n </motion.div>\n )}\n </AnimatePresence>\n </React.Fragment>,\n document.body,\n );\n}\n\n// Mount the host exactly once, lazily, in its own root.\nlet hostMounted = false;\nfunction ensureHost() {\n if (hostMounted) return;\n hostMounted = true;\n const el = document.createElement('div');\n el.setAttribute('data-tooltip-host', '');\n document.body.appendChild(el);\n createRoot(el).render(<TooltipHost />);\n}\n\nconst chain = (theirs: ((e: any) => void) | undefined, mine: (e: any) => void) => (e: any) => {\n if (theirs) theirs(e);\n mine(e);\n};\n\n/* Trigger - reports to the store; default wraps the child in a display:contents anchor (any element, no ref), asChild clones instead. */\nexport interface TooltipProps {\n /** The hint - a string or small node; never interactive content. */\n content: ReactNode;\n /** Optional keyboard hint, rendered as mono metadata (\"⌘↩\", \"S\"). */\n shortcut?: string | null;\n /** Preferred side; flips automatically when out of viewport room. */\n placement?: Placement;\n /** Suppress the tooltip entirely (trigger renders untouched). */\n disabled?: boolean;\n /** ms before a cold hover shows; warm hovers + focus are instant. Default 350. */\n openDelay?: number;\n /** ms the bubble lingers after leaving (bridges moving to a neighbour). Default 140. */\n closeDelay?: number;\n /** Skip the wrapper - clone the child and merge handlers + ref onto it (child must take a ref). Default false. */\n asChild?: boolean;\n id?: string;\n /** Exactly one element; any element works by default, asChild requires one that accepts a ref. */\n children: ReactElement;\n}\n\nfunction Tooltip({\n content,\n shortcut = null,\n placement = 'top',\n disabled = false,\n openDelay = OPEN_DELAY,\n closeDelay = CLOSE_GRACE,\n asChild = false,\n id,\n children,\n}: TooltipProps) {\n const triggerRef = useRef<HTMLElement | null>(null);\n const wrapRef = useRef<HTMLSpanElement | null>(null);\n const openTimer = useRef<ReturnType<typeof setTimeout> | 0>(0);\n const myId = id || 'tip-' + useId();\n\n // The element we anchor to + set aria-describedby on (clone, or the wrapper's child).\n const anchorEl = (): HTMLElement | null =>\n asChild ? triggerRef.current : ((wrapRef.current?.firstElementChild as HTMLElement) ?? null);\n\n useEffect(\n () => () => {\n clearTimeout(openTimer.current);\n store.close(myId, 0);\n },\n [],\n ); // eslint-disable-line react-hooks/exhaustive-deps\n\n function show(immediate: boolean) {\n if (disabled) return;\n ensureHost();\n clearTimeout(openTimer.current);\n const el = anchorEl();\n if (!el) return;\n el.setAttribute('aria-describedby', 'scheduly-tooltip');\n const open = () =>\n store.open({\n id: myId,\n content,\n shortcut,\n placement,\n rect: () => anchorEl()!.getBoundingClientRect(),\n });\n if (immediate || store.isWarm()) open();\n else openTimer.current = setTimeout(open, openDelay);\n }\n function hide() {\n clearTimeout(openTimer.current);\n const el = anchorEl();\n if (el) el.removeAttribute('aria-describedby');\n store.close(myId, closeDelay);\n }\n\n const onEnter = (e: React.PointerEvent) => {\n if (e.pointerType !== 'touch') show(false);\n };\n const onFocusIn = (e: React.FocusEvent) => {\n if ((e.target as HTMLElement).matches(':focus-visible')) show(true);\n };\n\n // Default: a display:contents wrapper carries the listeners + rect; the child needs no ref.\n if (!asChild) {\n return (\n <span\n ref={wrapRef}\n className=\"tooltip-anchor\"\n onPointerEnter={onEnter}\n onPointerLeave={hide}\n onPointerDown={hide}\n onFocus={onFocusIn}\n onBlur={hide}\n >\n {children}\n </span>\n );\n }\n\n // asChild: clone the child, merging our handlers + ref (a press dismisses: activating != hinting).\n const child = React.Children.only(children) as ReactElement & { ref?: any };\n const childRef = child.ref;\n const childProps = child.props as any;\n return React.cloneElement(child, {\n ref: (node: HTMLElement | null) => {\n triggerRef.current = node;\n if (typeof childRef === 'function') childRef(node);\n else if (childRef && typeof childRef === 'object') childRef.current = node;\n },\n onPointerEnter: chain(childProps.onPointerEnter, onEnter),\n onPointerLeave: chain(childProps.onPointerLeave, hide),\n onPointerDown: chain(childProps.onPointerDown, hide),\n onFocus: chain(childProps.onFocus, onFocusIn),\n onBlur: chain(childProps.onBlur, hide),\n } as any);\n}\n\nexport { Tooltip, TooltipHost };\n"]}
@@ -0,0 +1,272 @@
1
+ 'use client';import { parse, today, useGlide, grid, key, MONTHS, DOW, GlidePill, tzLabel, pad } from './chunk-UIQGSTBJ.js';
2
+ import { useControllable, FieldShell } from './chunk-QNC6O3PG.js';
3
+ import { Overlay } from './chunk-QFS52OK5.js';
4
+ import { Icon } from './chunk-KBWNUUWM.js';
5
+ import { UIMotion } from './chunk-37O2ZXD6.js';
6
+ import * as React from 'react';
7
+ import { motion, animate } from 'motion/react';
8
+ import { jsxs, jsx } from 'react/jsx-runtime';
9
+
10
+ var { useState, useRef, useEffect, useId } = React;
11
+ var dtfMotion = motion;
12
+ var dtfAnimate = animate;
13
+ var dtfSM = UIMotion;
14
+ function dtfDisplay(key2) {
15
+ if (!key2) return null;
16
+ const d = parse(key2);
17
+ const mon = MONTHS[d.getMonth()].slice(0, 3);
18
+ const year = d.getFullYear() === (/* @__PURE__ */ new Date()).getFullYear() ? "" : ", " + d.getFullYear();
19
+ return mon + " " + pad(d.getDate()) + year;
20
+ }
21
+ function DtpPanel({ val, commit, min, max, timezone, label, close, slot }) {
22
+ const seed = val ? parse(val) : /* @__PURE__ */ new Date();
23
+ const [view, setView] = useState({
24
+ y: seed.getFullYear(),
25
+ m: seed.getMonth()
26
+ });
27
+ const [focusKey, setFocusKey] = useState(val || today());
28
+ const daysRef = useRef(null);
29
+ const prevViewRef = useRef(null);
30
+ const pendingFocusRef = useRef(false);
31
+ const uid = useId();
32
+ const pillId = "dtp-pill-" + uid;
33
+ const glide = useGlide(daysRef);
34
+ const inRange = (key2) => (!min || key2 >= min) && (!max || key2 <= max);
35
+ function pickDay(key2) {
36
+ if (!inRange(key2)) return;
37
+ pendingFocusRef.current = true;
38
+ setFocusKey(key2);
39
+ const d = parse(key2);
40
+ goToMonth(d.getFullYear(), d.getMonth());
41
+ commit(key2);
42
+ }
43
+ function goToMonth(y, m) {
44
+ setView((v) => v.y === y && v.m === m ? v : { y, m });
45
+ }
46
+ function nav(dir) {
47
+ const d = new Date(view.y, view.m + dir, 1);
48
+ goToMonth(d.getFullYear(), d.getMonth());
49
+ }
50
+ const dtfNow = /* @__PURE__ */ new Date();
51
+ const viewIsCurrent = view.y === dtfNow.getFullYear() && view.m === dtfNow.getMonth();
52
+ function goToToday() {
53
+ const key2 = today();
54
+ const d = parse(key2);
55
+ pendingFocusRef.current = true;
56
+ setFocusKey(key2);
57
+ goToMonth(d.getFullYear(), d.getMonth());
58
+ }
59
+ const viewIdx = view.y * 12 + view.m;
60
+ useEffect(() => {
61
+ const prev = prevViewRef.current;
62
+ prevViewRef.current = viewIdx;
63
+ const el = daysRef.current;
64
+ if (prev == null || prev === viewIdx || !el) return;
65
+ const dir = viewIdx > prev ? 1 : -1;
66
+ dtfAnimate(
67
+ el,
68
+ { x: [dir * 16, 0], opacity: [0, 1] },
69
+ { duration: dtfSM.t.enter.duration, ease: dtfSM.t.enter.ease }
70
+ );
71
+ }, [viewIdx]);
72
+ useEffect(() => {
73
+ const el = daysRef.current;
74
+ if (!el) return;
75
+ const btn = el.querySelector('[tabindex="0"]:not(:disabled)') || el.querySelector(".dtp__day:not(:disabled)");
76
+ if (btn) btn.focus({ preventScroll: true });
77
+ }, []);
78
+ useEffect(() => {
79
+ if (!pendingFocusRef.current || !daysRef.current) return;
80
+ pendingFocusRef.current = false;
81
+ const btn = daysRef.current.querySelector('[data-key="' + focusKey + '"]');
82
+ if (btn) btn.focus({ preventScroll: true });
83
+ }, [focusKey, viewIdx]);
84
+ function moveFocus(deltaDays, deltaMonths) {
85
+ const d = parse(focusKey);
86
+ if (deltaMonths) d.setMonth(d.getMonth() + deltaMonths);
87
+ if (deltaDays) d.setDate(d.getDate() + deltaDays);
88
+ const key2 = key(d);
89
+ pendingFocusRef.current = true;
90
+ setFocusKey(key2);
91
+ goToMonth(d.getFullYear(), d.getMonth());
92
+ }
93
+ function onGridKeyDown(e) {
94
+ const k = e.key;
95
+ if (k === "ArrowLeft") moveFocus(-1, 0);
96
+ else if (k === "ArrowRight") moveFocus(1, 0);
97
+ else if (k === "ArrowUp") moveFocus(-7, 0);
98
+ else if (k === "ArrowDown") moveFocus(7, 0);
99
+ else if (k === "PageUp") moveFocus(0, -1);
100
+ else if (k === "PageDown") moveFocus(0, 1);
101
+ else if (k === "Home") moveFocus(-((parse(focusKey).getDay() + 6) % 7), 0);
102
+ else if (k === "End") moveFocus(6 - (parse(focusKey).getDay() + 6) % 7, 0);
103
+ else if (k === "Enter" || k === " ") pickDay(focusKey);
104
+ else return;
105
+ e.preventDefault();
106
+ }
107
+ const days = grid(view.y, view.m);
108
+ const todayKey = today();
109
+ const selKey = val || null;
110
+ const gridKeys = days.map(key);
111
+ const tabKey = gridKeys.indexOf(focusKey) >= 0 ? focusKey : selKey && gridKeys.indexOf(selKey) >= 0 ? selKey : gridKeys.indexOf(todayKey) >= 0 ? todayKey : key(new Date(view.y, view.m, 1));
112
+ const prevEnd = key(new Date(view.y, view.m, 0));
113
+ const nextStart = key(new Date(view.y, view.m + 1, 1));
114
+ const canPrev = !min || prevEnd >= min;
115
+ const canNext = !max || nextStart <= max;
116
+ const weeks = [];
117
+ for (let w = 0; w < 6; w++) weeks.push(days.slice(w * 7, w * 7 + 7));
118
+ return /* @__PURE__ */ jsxs("div", { className: "dtp", role: "dialog", "aria-label": label || "Pick a date", children: [
119
+ /* @__PURE__ */ jsxs("div", { className: "dtp__cal", children: [
120
+ /* @__PURE__ */ jsxs("div", { className: "dtp__head", children: [
121
+ /* @__PURE__ */ jsxs("span", { className: "dtp__month", "aria-live": "polite", children: [
122
+ MONTHS[view.m],
123
+ " ",
124
+ /* @__PURE__ */ jsx("span", { className: "dtp__year", children: view.y })
125
+ ] }),
126
+ /* @__PURE__ */ jsxs("div", { className: "dtp__navs", children: [
127
+ /* @__PURE__ */ jsx(
128
+ "button",
129
+ {
130
+ type: "button",
131
+ className: "dtp__nav",
132
+ "aria-label": "Previous month",
133
+ disabled: !canPrev,
134
+ onClick: () => nav(-1),
135
+ children: /* @__PURE__ */ jsx(Icon, { name: "caret-left", size: "sm" })
136
+ }
137
+ ),
138
+ /* @__PURE__ */ jsx(
139
+ "button",
140
+ {
141
+ type: "button",
142
+ className: "dtp__nav",
143
+ "aria-label": "Go to today",
144
+ disabled: viewIsCurrent,
145
+ onClick: goToToday,
146
+ children: /* @__PURE__ */ jsx(Icon, { name: "calendar-dot", size: "sm" })
147
+ }
148
+ ),
149
+ /* @__PURE__ */ jsx(
150
+ "button",
151
+ {
152
+ type: "button",
153
+ className: "dtp__nav",
154
+ "aria-label": "Next month",
155
+ disabled: !canNext,
156
+ onClick: () => nav(1),
157
+ children: /* @__PURE__ */ jsx(Icon, { name: "caret-right", size: "sm" })
158
+ }
159
+ )
160
+ ] })
161
+ ] }),
162
+ /* @__PURE__ */ jsx("div", { className: "dtp__dow", "aria-hidden": "true", children: DOW.map((d) => /* @__PURE__ */ jsx("span", { children: d }, d)) }),
163
+ /* @__PURE__ */ jsxs(
164
+ "div",
165
+ {
166
+ className: "dtp__days",
167
+ ref: daysRef,
168
+ role: "grid",
169
+ "aria-label": "Calendar",
170
+ onKeyDown: onGridKeyDown,
171
+ onPointerLeave: glide.leave,
172
+ children: [
173
+ weeks.map((week, wi) => /* @__PURE__ */ jsx("div", { role: "row", className: "dtp__row", children: week.map((d) => {
174
+ const key2 = key(d);
175
+ const out = d.getMonth() !== view.m;
176
+ const sel = key2 === selKey;
177
+ const cls = [
178
+ "dtp__day",
179
+ out ? "is-out" : "",
180
+ sel ? "is-selected" : "",
181
+ key2 === todayKey ? "is-today" : ""
182
+ ].filter(Boolean).join(" ");
183
+ return /* @__PURE__ */ jsxs(
184
+ "button",
185
+ {
186
+ type: "button",
187
+ role: "gridcell",
188
+ "data-key": key2,
189
+ className: cls,
190
+ disabled: !inRange(key2),
191
+ tabIndex: key2 === tabKey ? 0 : -1,
192
+ "aria-selected": sel || void 0,
193
+ "aria-label": MONTHS[d.getMonth()] + " " + d.getDate() + ", " + d.getFullYear(),
194
+ onClick: () => pickDay(key2),
195
+ onPointerEnter: (e) => glide.enter(e.currentTarget),
196
+ children: [
197
+ sel ? /* @__PURE__ */ jsx(
198
+ dtfMotion.span,
199
+ {
200
+ className: "dtp__pill",
201
+ layoutId: pillId,
202
+ transition: dtfSM.t.settle,
203
+ "aria-hidden": "true"
204
+ }
205
+ ) : null,
206
+ /* @__PURE__ */ jsx("span", { className: "dtp__num", children: d.getDate() }),
207
+ key2 === todayKey ? /* @__PURE__ */ jsx("span", { className: "dtp__dot", "aria-hidden": "true" }) : null
208
+ ]
209
+ },
210
+ key2
211
+ );
212
+ }) }, wi)),
213
+ /* @__PURE__ */ jsx(GlidePill, { className: "dtp__hover", rect: glide.rect, active: glide.active })
214
+ ]
215
+ }
216
+ )
217
+ ] }),
218
+ slot || null,
219
+ /* @__PURE__ */ jsxs("div", { className: "dtp__foot", children: [
220
+ timezone ? /* @__PURE__ */ jsx("span", { className: "dtp__tz", children: tzLabel(timezone, selKey) }) : null,
221
+ /* @__PURE__ */ jsx("span", { className: "dtp__footSpacer" }),
222
+ /* @__PURE__ */ jsx("button", { type: "button", className: "btn btn--primary btn--sm", onClick: close, children: "Done" })
223
+ ] })
224
+ ] });
225
+ }
226
+ function DateField({
227
+ value,
228
+ defaultValue = null,
229
+ onChange,
230
+ label,
231
+ placeholder = "Pick a date",
232
+ timezone,
233
+ min,
234
+ max,
235
+ required = false,
236
+ invalid = false,
237
+ message,
238
+ disabled = false,
239
+ className = ""
240
+ }) {
241
+ const [val, commit] = useControllable(value, defaultValue, onChange);
242
+ const display = dtfDisplay(val);
243
+ const trigger = /* @__PURE__ */ jsx("button", { type: "button", className: "fld__input dtf__trigger", disabled, children: display ? /* @__PURE__ */ jsx("span", { className: "dtf__value", children: display }) : /* @__PURE__ */ jsx("span", { className: "dtf__placeholder", children: placeholder }) });
244
+ return /* @__PURE__ */ jsx(
245
+ FieldShell,
246
+ {
247
+ variant: "dtf",
248
+ label,
249
+ required,
250
+ invalid,
251
+ message,
252
+ icon: "calendar",
253
+ className,
254
+ children: /* @__PURE__ */ jsx(Overlay, { trigger, side: "bottom", align: "start", children: (api) => /* @__PURE__ */ jsx(
255
+ DtpPanel,
256
+ {
257
+ val,
258
+ commit,
259
+ close: api.close,
260
+ min,
261
+ max,
262
+ timezone,
263
+ label
264
+ }
265
+ ) })
266
+ }
267
+ );
268
+ }
269
+
270
+ export { DateField, DtpPanel };
271
+ //# sourceMappingURL=chunk-CV2Q4YXX.js.map
272
+ //# sourceMappingURL=chunk-CV2Q4YXX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/date-picker/DateField.tsx"],"names":["key"],"mappings":"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","file":"chunk-CV2Q4YXX.js","sourcesContent":["'use client';\n\n/* DateField - opinionated single-date picker: a .fld trigger opens a month-calendar popover, commit is live on day pick. */\n\nimport * as React from 'react';\nimport type { ReactNode } from 'react';\nimport { motion, animate } from 'motion/react';\nimport { UIMotion } from '../../tokens/motion-tokens';\nimport { Icon } from '../icon/Icon';\nimport { Overlay } from '../overlay/Overlay';\nimport { FieldShell, useControllable } from './field-shell';\nimport { GlidePill, useGlide } from './glide-pill';\nimport {\n MONTHS as DTF_MONTHS,\n DOW as DTF_DOW,\n pad as dtfPad,\n key as dtfKey,\n parse as dtfParse,\n today as dtfToday,\n grid as dtfGrid,\n tzLabel as dtfTzLabel,\n} from './date-utils';\n\nconst { useState, useRef, useEffect, useId } = React;\nconst dtfMotion = motion;\nconst dtfAnimate = animate;\nconst dtfSM = UIMotion;\n\n/* 'Jun 12' (year only when it isn't the current one) */\nfunction dtfDisplay(key: string | null): string | null {\n if (!key) return null;\n const d = dtfParse(key);\n const mon = DTF_MONTHS[d.getMonth()].slice(0, 3);\n const year = d.getFullYear() === new Date().getFullYear() ? '' : ', ' + d.getFullYear();\n return mon + ' ' + dtfPad(d.getDate()) + year;\n}\n\nexport interface DtpPanelProps {\n val: string | null;\n commit: (key: string) => void;\n min?: string;\n max?: string;\n timezone?: string;\n label?: string;\n close: () => void;\n slot?: ReactNode;\n}\n\n/* the popover panel, mounted only while open - owns view + roving focus, so each open starts at the picked month. */\nexport function DtpPanel({ val, commit, min, max, timezone, label, close, slot }: DtpPanelProps) {\n const seed = val ? dtfParse(val) : new Date();\n const [view, setView] = useState<{ y: number; m: number }>({\n y: seed.getFullYear(),\n m: seed.getMonth(),\n });\n const [focusKey, setFocusKey] = useState<string>(val || dtfToday());\n\n const daysRef = useRef<HTMLDivElement>(null);\n const prevViewRef = useRef<number | null>(null);\n const pendingFocusRef = useRef(false);\n const uid = useId();\n const pillId = 'dtp-pill-' + uid;\n\n /* gliding hover: one persistent pill that travels to the hovered cell (see glide-pill). */\n const glide = useGlide(daysRef);\n\n const inRange = (key: string): boolean => (!min || key >= min) && (!max || key <= max);\n\n function pickDay(key: string) {\n if (!inRange(key)) return;\n pendingFocusRef.current = true;\n setFocusKey(key);\n const d = dtfParse(key);\n goToMonth(d.getFullYear(), d.getMonth());\n commit(key);\n }\n\n function goToMonth(y: number, m: number) {\n setView((v) => (v.y === y && v.m === m ? v : { y: y, m: m }));\n }\n function nav(dir: number) {\n const d = new Date(view.y, view.m + dir, 1);\n goToMonth(d.getFullYear(), d.getMonth());\n }\n /* today-jump is navigation, not commit: slides home + focuses today; disabled while viewing the current month. */\n const dtfNow = new Date();\n const viewIsCurrent = view.y === dtfNow.getFullYear() && view.m === dtfNow.getMonth();\n function goToToday() {\n const key = dtfToday();\n const d = dtfParse(key);\n pendingFocusRef.current = true;\n setFocusKey(key);\n goToMonth(d.getFullYear(), d.getMonth());\n }\n const viewIdx = view.y * 12 + view.m;\n useEffect(() => {\n const prev = prevViewRef.current;\n prevViewRef.current = viewIdx;\n const el = daysRef.current;\n if (prev == null || prev === viewIdx || !el) return;\n const dir = viewIdx > prev ? 1 : -1;\n dtfAnimate(\n el,\n { x: [dir * 16, 0], opacity: [0, 1] },\n { duration: dtfSM.t.enter.duration, ease: dtfSM.t.enter.ease },\n );\n }, [viewIdx]);\n\n /* seed focus into the grid on open - the panel portals to <body>, unreachable from the trigger otherwise. */\n useEffect(() => {\n const el = daysRef.current;\n if (!el) return;\n const btn =\n el.querySelector('[tabindex=\"0\"]:not(:disabled)') ||\n el.querySelector('.dtp__day:not(:disabled)');\n if (btn) (btn as HTMLElement).focus({ preventScroll: true });\n }, []);\n\n /* focus follows keyboard travel across month boundaries */\n useEffect(() => {\n if (!pendingFocusRef.current || !daysRef.current) return;\n pendingFocusRef.current = false;\n const btn = daysRef.current.querySelector('[data-key=\"' + focusKey + '\"]');\n if (btn) (btn as HTMLElement).focus({ preventScroll: true });\n }, [focusKey, viewIdx]);\n\n function moveFocus(deltaDays: number, deltaMonths: number) {\n const d = dtfParse(focusKey);\n if (deltaMonths) d.setMonth(d.getMonth() + deltaMonths);\n if (deltaDays) d.setDate(d.getDate() + deltaDays);\n const key = dtfKey(d);\n pendingFocusRef.current = true;\n setFocusKey(key);\n goToMonth(d.getFullYear(), d.getMonth());\n }\n function onGridKeyDown(e: React.KeyboardEvent<HTMLDivElement>) {\n const k = e.key;\n if (k === 'ArrowLeft') moveFocus(-1, 0);\n else if (k === 'ArrowRight') moveFocus(1, 0);\n else if (k === 'ArrowUp') moveFocus(-7, 0);\n else if (k === 'ArrowDown') moveFocus(7, 0);\n else if (k === 'PageUp') moveFocus(0, -1);\n else if (k === 'PageDown') moveFocus(0, 1);\n else if (k === 'Home') moveFocus(-((dtfParse(focusKey).getDay() + 6) % 7), 0);\n else if (k === 'End') moveFocus(6 - ((dtfParse(focusKey).getDay() + 6) % 7), 0);\n else if (k === 'Enter' || k === ' ') pickDay(focusKey);\n else return;\n e.preventDefault();\n }\n\n const days = dtfGrid(view.y, view.m);\n const todayKey = dtfToday();\n const selKey = val || null;\n const gridKeys = days.map(dtfKey);\n const tabKey =\n gridKeys.indexOf(focusKey) >= 0\n ? focusKey\n : selKey && gridKeys.indexOf(selKey) >= 0\n ? selKey\n : gridKeys.indexOf(todayKey) >= 0\n ? todayKey\n : dtfKey(new Date(view.y, view.m, 1));\n\n const prevEnd = dtfKey(new Date(view.y, view.m, 0));\n const nextStart = dtfKey(new Date(view.y, view.m + 1, 1));\n const canPrev = !min || prevEnd >= min;\n const canNext = !max || nextStart <= max;\n\n const weeks: Date[][] = [];\n for (let w = 0; w < 6; w++) weeks.push(days.slice(w * 7, w * 7 + 7));\n\n return (\n <div className=\"dtp\" role=\"dialog\" aria-label={label || 'Pick a date'}>\n <div className=\"dtp__cal\">\n <div className=\"dtp__head\">\n <span className=\"dtp__month\" aria-live=\"polite\">\n {DTF_MONTHS[view.m]} <span className=\"dtp__year\">{view.y}</span>\n </span>\n <div className=\"dtp__navs\">\n <button\n type=\"button\"\n className=\"dtp__nav\"\n aria-label=\"Previous month\"\n disabled={!canPrev}\n onClick={() => nav(-1)}\n >\n <Icon name=\"caret-left\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"dtp__nav\"\n aria-label=\"Go to today\"\n disabled={viewIsCurrent}\n onClick={goToToday}\n >\n <Icon name=\"calendar-dot\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"dtp__nav\"\n aria-label=\"Next month\"\n disabled={!canNext}\n onClick={() => nav(1)}\n >\n <Icon name=\"caret-right\" size=\"sm\" />\n </button>\n </div>\n </div>\n <div className=\"dtp__dow\" aria-hidden=\"true\">\n {DTF_DOW.map((d) => (\n <span key={d}>{d}</span>\n ))}\n </div>\n <div\n className=\"dtp__days\"\n ref={daysRef}\n role=\"grid\"\n aria-label=\"Calendar\"\n onKeyDown={onGridKeyDown}\n onPointerLeave={glide.leave}\n >\n {weeks.map((week, wi) => (\n <div key={wi} role=\"row\" className=\"dtp__row\">\n {week.map((d) => {\n const key = dtfKey(d);\n const out = d.getMonth() !== view.m;\n const sel = key === selKey;\n const cls = [\n 'dtp__day',\n out ? 'is-out' : '',\n sel ? 'is-selected' : '',\n key === todayKey ? 'is-today' : '',\n ]\n .filter(Boolean)\n .join(' ');\n return (\n <button\n key={key}\n type=\"button\"\n role=\"gridcell\"\n data-key={key}\n className={cls}\n disabled={!inRange(key)}\n tabIndex={key === tabKey ? 0 : -1}\n aria-selected={sel || undefined}\n aria-label={\n DTF_MONTHS[d.getMonth()] + ' ' + d.getDate() + ', ' + d.getFullYear()\n }\n onClick={() => pickDay(key)}\n onPointerEnter={(e) => glide.enter(e.currentTarget)}\n >\n {sel ? (\n <dtfMotion.span\n className=\"dtp__pill\"\n layoutId={pillId}\n transition={dtfSM.t.settle}\n aria-hidden=\"true\"\n ></dtfMotion.span>\n ) : null}\n <span className=\"dtp__num\">{d.getDate()}</span>\n {key === todayKey ? (\n <span className=\"dtp__dot\" aria-hidden=\"true\"></span>\n ) : null}\n </button>\n );\n })}\n </div>\n ))}\n <GlidePill className=\"dtp__hover\" rect={glide.rect} active={glide.active} />\n </div>\n </div>\n\n {slot || null}\n\n <div className=\"dtp__foot\">\n {timezone ? <span className=\"dtp__tz\">{dtfTzLabel(timezone, selKey)}</span> : null}\n <span className=\"dtp__footSpacer\"></span>\n <button type=\"button\" className=\"btn btn--primary btn--sm\" onClick={close}>\n Done\n </button>\n </div>\n </div>\n );\n}\n\nexport interface DateFieldProps {\n /** Controlled value, 'YYYY-MM-DD'. */\n value?: string | null;\n defaultValue?: string | null;\n onChange?: (value: string) => void;\n label?: string;\n placeholder?: string;\n /** IANA timezone name (e.g. 'Europe/Riga') - display context only, shown with its GMT offset in the footer. */\n timezone?: string;\n /** Earliest pickable date, 'YYYY-MM-DD', inclusive. */\n min?: string;\n /** Latest pickable date, 'YYYY-MM-DD', inclusive. */\n max?: string;\n /** Asterisk on the label. */\n required?: boolean;\n /** Danger border + message color (.fld is-error). */\n invalid?: boolean;\n /** Helper / error text under the field. */\n message?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function DateField({\n value,\n defaultValue = null,\n onChange,\n label,\n placeholder = 'Pick a date',\n timezone,\n min,\n max,\n required = false,\n invalid = false,\n message,\n disabled = false,\n className = '',\n}: DateFieldProps) {\n const [val, commit] = useControllable(value, defaultValue, onChange);\n const display = dtfDisplay(val);\n\n const trigger = (\n <button type=\"button\" className=\"fld__input dtf__trigger\" disabled={disabled}>\n {display ? (\n <span className=\"dtf__value\">{display}</span>\n ) : (\n <span className=\"dtf__placeholder\">{placeholder}</span>\n )}\n </button>\n );\n\n return (\n <FieldShell\n variant=\"dtf\"\n label={label}\n required={required}\n invalid={invalid}\n message={message}\n icon=\"calendar\"\n className={className}\n >\n <Overlay trigger={trigger} side=\"bottom\" align=\"start\">\n {(api) => (\n <DtpPanel\n val={val}\n commit={commit}\n close={api.close}\n min={min}\n max={max}\n timezone={timezone}\n label={label}\n />\n )}\n </Overlay>\n </FieldShell>\n );\n}\n"]}