@chenzy-design/core 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 (310) hide show
  1. package/LICENSE +21 -0
  2. package/dist/back-top.d.ts +16 -0
  3. package/dist/back-top.d.ts.map +1 -0
  4. package/dist/back-top.js +29 -0
  5. package/dist/back-top.js.map +1 -0
  6. package/dist/back-top.test.d.ts +2 -0
  7. package/dist/back-top.test.d.ts.map +1 -0
  8. package/dist/back-top.test.js +44 -0
  9. package/dist/back-top.test.js.map +1 -0
  10. package/dist/banner.d.ts +19 -0
  11. package/dist/banner.d.ts.map +1 -0
  12. package/dist/banner.js +20 -0
  13. package/dist/banner.js.map +1 -0
  14. package/dist/banner.test.d.ts +2 -0
  15. package/dist/banner.test.d.ts.map +1 -0
  16. package/dist/banner.test.js +29 -0
  17. package/dist/banner.test.js.map +1 -0
  18. package/dist/breakpoints.d.ts +30 -0
  19. package/dist/breakpoints.d.ts.map +1 -0
  20. package/dist/breakpoints.js +45 -0
  21. package/dist/breakpoints.js.map +1 -0
  22. package/dist/breakpoints.test.d.ts +2 -0
  23. package/dist/breakpoints.test.d.ts.map +1 -0
  24. package/dist/breakpoints.test.js +46 -0
  25. package/dist/breakpoints.test.js.map +1 -0
  26. package/dist/calendar.d.ts +63 -0
  27. package/dist/calendar.d.ts.map +1 -0
  28. package/dist/calendar.js +94 -0
  29. package/dist/calendar.js.map +1 -0
  30. package/dist/calendar.test.d.ts +2 -0
  31. package/dist/calendar.test.d.ts.map +1 -0
  32. package/dist/calendar.test.js +88 -0
  33. package/dist/calendar.test.js.map +1 -0
  34. package/dist/cascader.d.ts +64 -0
  35. package/dist/cascader.d.ts.map +1 -0
  36. package/dist/cascader.js +79 -0
  37. package/dist/cascader.js.map +1 -0
  38. package/dist/cascader.test.d.ts +2 -0
  39. package/dist/cascader.test.d.ts.map +1 -0
  40. package/dist/cascader.test.js +107 -0
  41. package/dist/cascader.test.js.map +1 -0
  42. package/dist/color.d.ts +70 -0
  43. package/dist/color.d.ts.map +1 -0
  44. package/dist/color.js +217 -0
  45. package/dist/color.js.map +1 -0
  46. package/dist/color.test.d.ts +2 -0
  47. package/dist/color.test.d.ts.map +1 -0
  48. package/dist/color.test.js +161 -0
  49. package/dist/color.test.js.map +1 -0
  50. package/dist/config-provider.d.ts +57 -0
  51. package/dist/config-provider.d.ts.map +1 -0
  52. package/dist/config-provider.js +49 -0
  53. package/dist/config-provider.js.map +1 -0
  54. package/dist/config-provider.test.d.ts +2 -0
  55. package/dist/config-provider.test.d.ts.map +1 -0
  56. package/dist/config-provider.test.js +76 -0
  57. package/dist/config-provider.test.js.map +1 -0
  58. package/dist/copyable.d.ts +43 -0
  59. package/dist/copyable.d.ts.map +1 -0
  60. package/dist/copyable.js +102 -0
  61. package/dist/copyable.js.map +1 -0
  62. package/dist/copyable.test.d.ts +2 -0
  63. package/dist/copyable.test.d.ts.map +1 -0
  64. package/dist/copyable.test.js +97 -0
  65. package/dist/copyable.test.js.map +1 -0
  66. package/dist/date.d.ts +86 -0
  67. package/dist/date.d.ts.map +1 -0
  68. package/dist/date.js +226 -0
  69. package/dist/date.js.map +1 -0
  70. package/dist/date.test.d.ts +2 -0
  71. package/dist/date.test.d.ts.map +1 -0
  72. package/dist/date.test.js +171 -0
  73. package/dist/date.test.js.map +1 -0
  74. package/dist/dismiss.d.ts +28 -0
  75. package/dist/dismiss.d.ts.map +1 -0
  76. package/dist/dismiss.js +42 -0
  77. package/dist/dismiss.js.map +1 -0
  78. package/dist/editable.d.ts +59 -0
  79. package/dist/editable.d.ts.map +1 -0
  80. package/dist/editable.js +85 -0
  81. package/dist/editable.js.map +1 -0
  82. package/dist/editable.test.d.ts +2 -0
  83. package/dist/editable.test.d.ts.map +1 -0
  84. package/dist/editable.test.js +111 -0
  85. package/dist/editable.test.js.map +1 -0
  86. package/dist/ellipsis.d.ts +76 -0
  87. package/dist/ellipsis.d.ts.map +1 -0
  88. package/dist/ellipsis.js +99 -0
  89. package/dist/ellipsis.js.map +1 -0
  90. package/dist/ellipsis.test.d.ts +2 -0
  91. package/dist/ellipsis.test.d.ts.map +1 -0
  92. package/dist/ellipsis.test.js +94 -0
  93. package/dist/ellipsis.test.js.map +1 -0
  94. package/dist/floating.d.ts +78 -0
  95. package/dist/floating.d.ts.map +1 -0
  96. package/dist/floating.js +169 -0
  97. package/dist/floating.js.map +1 -0
  98. package/dist/floating.test.d.ts +2 -0
  99. package/dist/floating.test.d.ts.map +1 -0
  100. package/dist/floating.test.js +169 -0
  101. package/dist/floating.test.js.map +1 -0
  102. package/dist/focus-trap.d.ts +24 -0
  103. package/dist/focus-trap.d.ts.map +1 -0
  104. package/dist/focus-trap.js +64 -0
  105. package/dist/focus-trap.js.map +1 -0
  106. package/dist/form.d.ts +131 -0
  107. package/dist/form.d.ts.map +1 -0
  108. package/dist/form.js +257 -0
  109. package/dist/form.js.map +1 -0
  110. package/dist/form.test.d.ts +2 -0
  111. package/dist/form.test.d.ts.map +1 -0
  112. package/dist/form.test.js +323 -0
  113. package/dist/form.test.js.map +1 -0
  114. package/dist/highlight.d.ts +57 -0
  115. package/dist/highlight.d.ts.map +1 -0
  116. package/dist/highlight.js +124 -0
  117. package/dist/highlight.js.map +1 -0
  118. package/dist/highlight.test.d.ts +2 -0
  119. package/dist/highlight.test.d.ts.map +1 -0
  120. package/dist/highlight.test.js +155 -0
  121. package/dist/highlight.test.js.map +1 -0
  122. package/dist/id.d.ts +4 -0
  123. package/dist/id.d.ts.map +1 -0
  124. package/dist/id.js +14 -0
  125. package/dist/id.js.map +1 -0
  126. package/dist/id.test.d.ts +2 -0
  127. package/dist/id.test.d.ts.map +1 -0
  128. package/dist/id.test.js +13 -0
  129. package/dist/id.test.js.map +1 -0
  130. package/dist/index.d.ts +46 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +45 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/inert-background.d.ts +27 -0
  135. package/dist/inert-background.d.ts.map +1 -0
  136. package/dist/inert-background.js +92 -0
  137. package/dist/inert-background.js.map +1 -0
  138. package/dist/inert-background.test.d.ts +2 -0
  139. package/dist/inert-background.test.d.ts.map +1 -0
  140. package/dist/inert-background.test.js +62 -0
  141. package/dist/inert-background.test.js.map +1 -0
  142. package/dist/input-number.d.ts +34 -0
  143. package/dist/input-number.d.ts.map +1 -0
  144. package/dist/input-number.js +69 -0
  145. package/dist/input-number.js.map +1 -0
  146. package/dist/input-number.test.d.ts +2 -0
  147. package/dist/input-number.test.d.ts.map +1 -0
  148. package/dist/input-number.test.js +74 -0
  149. package/dist/input-number.test.js.map +1 -0
  150. package/dist/list-selection.d.ts +38 -0
  151. package/dist/list-selection.d.ts.map +1 -0
  152. package/dist/list-selection.js +61 -0
  153. package/dist/list-selection.js.map +1 -0
  154. package/dist/list-selection.test.d.ts +2 -0
  155. package/dist/list-selection.test.d.ts.map +1 -0
  156. package/dist/list-selection.test.js +61 -0
  157. package/dist/list-selection.test.js.map +1 -0
  158. package/dist/live-announcer.d.ts +38 -0
  159. package/dist/live-announcer.d.ts.map +1 -0
  160. package/dist/live-announcer.js +89 -0
  161. package/dist/live-announcer.js.map +1 -0
  162. package/dist/live-announcer.test.d.ts +2 -0
  163. package/dist/live-announcer.test.d.ts.map +1 -0
  164. package/dist/live-announcer.test.js +70 -0
  165. package/dist/live-announcer.test.js.map +1 -0
  166. package/dist/lottie-icon.d.ts +88 -0
  167. package/dist/lottie-icon.d.ts.map +1 -0
  168. package/dist/lottie-icon.js +84 -0
  169. package/dist/lottie-icon.js.map +1 -0
  170. package/dist/lottie-icon.test.d.ts +2 -0
  171. package/dist/lottie-icon.test.d.ts.map +1 -0
  172. package/dist/lottie-icon.test.js +88 -0
  173. package/dist/lottie-icon.test.js.map +1 -0
  174. package/dist/notification.d.ts +61 -0
  175. package/dist/notification.d.ts.map +1 -0
  176. package/dist/notification.js +133 -0
  177. package/dist/notification.js.map +1 -0
  178. package/dist/notification.test.d.ts +2 -0
  179. package/dist/notification.test.d.ts.map +1 -0
  180. package/dist/notification.test.js +103 -0
  181. package/dist/notification.test.js.map +1 -0
  182. package/dist/overflow-list.d.ts +102 -0
  183. package/dist/overflow-list.d.ts.map +1 -0
  184. package/dist/overflow-list.js +159 -0
  185. package/dist/overflow-list.js.map +1 -0
  186. package/dist/overflow-list.test.d.ts +2 -0
  187. package/dist/overflow-list.test.d.ts.map +1 -0
  188. package/dist/overflow-list.test.js +223 -0
  189. package/dist/overflow-list.test.js.map +1 -0
  190. package/dist/pagination.d.ts +51 -0
  191. package/dist/pagination.d.ts.map +1 -0
  192. package/dist/pagination.js +127 -0
  193. package/dist/pagination.js.map +1 -0
  194. package/dist/pagination.test.d.ts +2 -0
  195. package/dist/pagination.test.d.ts.map +1 -0
  196. package/dist/pagination.test.js +147 -0
  197. package/dist/pagination.test.js.map +1 -0
  198. package/dist/progress.d.ts +64 -0
  199. package/dist/progress.d.ts.map +1 -0
  200. package/dist/progress.js +92 -0
  201. package/dist/progress.js.map +1 -0
  202. package/dist/progress.test.d.ts +2 -0
  203. package/dist/progress.test.d.ts.map +1 -0
  204. package/dist/progress.test.js +79 -0
  205. package/dist/progress.test.js.map +1 -0
  206. package/dist/resize-observer.d.ts +133 -0
  207. package/dist/resize-observer.d.ts.map +1 -0
  208. package/dist/resize-observer.js +358 -0
  209. package/dist/resize-observer.js.map +1 -0
  210. package/dist/resize-observer.test.d.ts +2 -0
  211. package/dist/resize-observer.test.d.ts.map +1 -0
  212. package/dist/resize-observer.test.js +377 -0
  213. package/dist/resize-observer.test.js.map +1 -0
  214. package/dist/roving.d.ts +26 -0
  215. package/dist/roving.d.ts.map +1 -0
  216. package/dist/roving.js +61 -0
  217. package/dist/roving.js.map +1 -0
  218. package/dist/roving.test.d.ts +2 -0
  219. package/dist/roving.test.d.ts.map +1 -0
  220. package/dist/roving.test.js +48 -0
  221. package/dist/roving.test.js.map +1 -0
  222. package/dist/scroll-list.d.ts +81 -0
  223. package/dist/scroll-list.d.ts.map +1 -0
  224. package/dist/scroll-list.js +175 -0
  225. package/dist/scroll-list.js.map +1 -0
  226. package/dist/scroll-list.test.d.ts +2 -0
  227. package/dist/scroll-list.test.d.ts.map +1 -0
  228. package/dist/scroll-list.test.js +135 -0
  229. package/dist/scroll-list.test.js.map +1 -0
  230. package/dist/scroll-lock.d.ts +11 -0
  231. package/dist/scroll-lock.d.ts.map +1 -0
  232. package/dist/scroll-lock.js +45 -0
  233. package/dist/scroll-lock.js.map +1 -0
  234. package/dist/scroll-lock.test.d.ts +2 -0
  235. package/dist/scroll-lock.test.d.ts.map +1 -0
  236. package/dist/scroll-lock.test.js +55 -0
  237. package/dist/scroll-lock.test.js.map +1 -0
  238. package/dist/sider.d.ts +26 -0
  239. package/dist/sider.d.ts.map +1 -0
  240. package/dist/sider.js +55 -0
  241. package/dist/sider.js.map +1 -0
  242. package/dist/sider.test.d.ts +2 -0
  243. package/dist/sider.test.d.ts.map +1 -0
  244. package/dist/sider.test.js +29 -0
  245. package/dist/sider.test.js.map +1 -0
  246. package/dist/spin.d.ts +25 -0
  247. package/dist/spin.d.ts.map +1 -0
  248. package/dist/spin.js +96 -0
  249. package/dist/spin.js.map +1 -0
  250. package/dist/spin.test.d.ts +2 -0
  251. package/dist/spin.test.d.ts.map +1 -0
  252. package/dist/spin.test.js +80 -0
  253. package/dist/spin.test.js.map +1 -0
  254. package/dist/table.d.ts +101 -0
  255. package/dist/table.d.ts.map +1 -0
  256. package/dist/table.js +244 -0
  257. package/dist/table.js.map +1 -0
  258. package/dist/table.test.d.ts +2 -0
  259. package/dist/table.test.d.ts.map +1 -0
  260. package/dist/table.test.js +184 -0
  261. package/dist/table.test.js.map +1 -0
  262. package/dist/textarea.d.ts +48 -0
  263. package/dist/textarea.d.ts.map +1 -0
  264. package/dist/textarea.js +76 -0
  265. package/dist/textarea.js.map +1 -0
  266. package/dist/textarea.test.d.ts +2 -0
  267. package/dist/textarea.test.d.ts.map +1 -0
  268. package/dist/textarea.test.js +77 -0
  269. package/dist/textarea.test.js.map +1 -0
  270. package/dist/time.d.ts +93 -0
  271. package/dist/time.d.ts.map +1 -0
  272. package/dist/time.js +181 -0
  273. package/dist/time.js.map +1 -0
  274. package/dist/time.test.d.ts +2 -0
  275. package/dist/time.test.d.ts.map +1 -0
  276. package/dist/time.test.js +159 -0
  277. package/dist/time.test.js.map +1 -0
  278. package/dist/toast.d.ts +60 -0
  279. package/dist/toast.d.ts.map +1 -0
  280. package/dist/toast.js +135 -0
  281. package/dist/toast.js.map +1 -0
  282. package/dist/toast.test.d.ts +2 -0
  283. package/dist/toast.test.d.ts.map +1 -0
  284. package/dist/toast.test.js +127 -0
  285. package/dist/toast.test.js.map +1 -0
  286. package/dist/tree.d.ts +129 -0
  287. package/dist/tree.d.ts.map +1 -0
  288. package/dist/tree.js +351 -0
  289. package/dist/tree.js.map +1 -0
  290. package/dist/tree.test.d.ts +2 -0
  291. package/dist/tree.test.d.ts.map +1 -0
  292. package/dist/tree.test.js +291 -0
  293. package/dist/tree.test.js.map +1 -0
  294. package/dist/upload.d.ts +62 -0
  295. package/dist/upload.d.ts.map +1 -0
  296. package/dist/upload.js +85 -0
  297. package/dist/upload.js.map +1 -0
  298. package/dist/upload.test.d.ts +2 -0
  299. package/dist/upload.test.d.ts.map +1 -0
  300. package/dist/upload.test.js +169 -0
  301. package/dist/upload.test.js.map +1 -0
  302. package/dist/virtual-list.d.ts +83 -0
  303. package/dist/virtual-list.d.ts.map +1 -0
  304. package/dist/virtual-list.js +143 -0
  305. package/dist/virtual-list.js.map +1 -0
  306. package/dist/virtual-list.test.d.ts +2 -0
  307. package/dist/virtual-list.test.d.ts.map +1 -0
  308. package/dist/virtual-list.test.js +148 -0
  309. package/dist/virtual-list.test.js.map +1 -0
  310. package/package.json +22 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * createCopyable — framework-agnostic clipboard-copy state machine for Typography.
3
+ *
4
+ * Pure logic + a thin imperative clipboard bridge:
5
+ * - copy(content?) writes to the clipboard (navigator.clipboard.writeText with a
6
+ * document.execCommand('copy') fallback for non-secure contexts / older browsers).
7
+ * - manages a transient `copied` flag that auto-resets after `resetDelay` ms.
8
+ * - notifies the render layer via onChange (so it can re-render) and fires
9
+ * onCopy(content) / onError(error) callbacks. The render layer owns the live
10
+ * region announce + DOM; this module never touches the DOM beyond clipboard.
11
+ *
12
+ * No framework deps, no $state. The svelte layer wraps the snapshot in $state.
13
+ * See specs/components/basic/Typography.spec.md §3, §11.
14
+ */
15
+ export interface CopyableOptions {
16
+ /** default content to copy when copy() is called without an argument */
17
+ content?: string;
18
+ /** ms before the `copied` flag auto-resets (default 3000) */
19
+ resetDelay?: number;
20
+ /** called whenever copied flips, so the render layer can re-read state */
21
+ onChange?: (copied: boolean) => void;
22
+ /** called after a successful copy with the copied content */
23
+ onCopy?: (content: string) => void;
24
+ /** called when both clipboard strategies fail */
25
+ onError?: (error: unknown) => void;
26
+ }
27
+ export interface CopyableApi {
28
+ /** whether the success state is currently shown */
29
+ readonly copied: boolean;
30
+ /**
31
+ * Copy `content` (or the configured default) to the clipboard.
32
+ * Resolves true on success, false on failure. Never throws.
33
+ */
34
+ copy(content?: string): Promise<boolean>;
35
+ /** immediately clear the copied flag + cancel the pending reset timer */
36
+ reset(): void;
37
+ /** cancel timers; call on unmount */
38
+ destroy(): void;
39
+ }
40
+ /** Imperative clipboard write with execCommand fallback. Returns success. */
41
+ export declare function writeClipboard(text: string): Promise<boolean>;
42
+ export declare function createCopyable(options?: CopyableOptions): CopyableApi;
43
+ //# sourceMappingURL=copyable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyable.d.ts","sourceRoot":"","sources":["../src/copyable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,iDAAiD;IACjD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,yEAAyE;IACzE,KAAK,IAAI,IAAI,CAAC;IACd,qCAAqC;IACrC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,6EAA6E;AAC7E,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsCnE;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,WAAW,CAgDzE"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * createCopyable — framework-agnostic clipboard-copy state machine for Typography.
3
+ *
4
+ * Pure logic + a thin imperative clipboard bridge:
5
+ * - copy(content?) writes to the clipboard (navigator.clipboard.writeText with a
6
+ * document.execCommand('copy') fallback for non-secure contexts / older browsers).
7
+ * - manages a transient `copied` flag that auto-resets after `resetDelay` ms.
8
+ * - notifies the render layer via onChange (so it can re-render) and fires
9
+ * onCopy(content) / onError(error) callbacks. The render layer owns the live
10
+ * region announce + DOM; this module never touches the DOM beyond clipboard.
11
+ *
12
+ * No framework deps, no $state. The svelte layer wraps the snapshot in $state.
13
+ * See specs/components/basic/Typography.spec.md §3, §11.
14
+ */
15
+ /** Imperative clipboard write with execCommand fallback. Returns success. */
16
+ export async function writeClipboard(text) {
17
+ // Primary: async Clipboard API (requires secure context + permission).
18
+ try {
19
+ if (typeof navigator !== 'undefined' &&
20
+ navigator.clipboard &&
21
+ typeof navigator.clipboard.writeText === 'function') {
22
+ await navigator.clipboard.writeText(text);
23
+ return true;
24
+ }
25
+ }
26
+ catch {
27
+ // fall through to legacy path
28
+ }
29
+ // Fallback: hidden textarea + execCommand('copy').
30
+ if (typeof document === 'undefined')
31
+ return false;
32
+ try {
33
+ const ta = document.createElement('textarea');
34
+ ta.value = text;
35
+ // keep it out of the viewport + non-interactive so focus is restored cleanly
36
+ ta.setAttribute('readonly', '');
37
+ ta.style.position = 'fixed';
38
+ ta.style.top = '-9999px';
39
+ ta.style.left = '-9999px';
40
+ ta.style.opacity = '0';
41
+ document.body.appendChild(ta);
42
+ const active = document.activeElement;
43
+ ta.select();
44
+ ta.setSelectionRange(0, ta.value.length);
45
+ const ok = document.execCommand('copy');
46
+ document.body.removeChild(ta);
47
+ // restore focus to whatever had it before
48
+ active?.focus?.();
49
+ return ok;
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ }
55
+ export function createCopyable(options = {}) {
56
+ const resetDelay = options.resetDelay ?? 3000;
57
+ let copied = false;
58
+ let timer;
59
+ function clearTimer() {
60
+ if (timer !== undefined) {
61
+ clearTimeout(timer);
62
+ timer = undefined;
63
+ }
64
+ }
65
+ function setCopied(next) {
66
+ if (copied === next)
67
+ return;
68
+ copied = next;
69
+ options.onChange?.(copied);
70
+ }
71
+ return {
72
+ get copied() {
73
+ return copied;
74
+ },
75
+ async copy(content) {
76
+ const text = content ?? options.content ?? '';
77
+ const ok = await writeClipboard(text);
78
+ if (!ok) {
79
+ options.onError?.(new Error('copy failed'));
80
+ return false;
81
+ }
82
+ clearTimer();
83
+ setCopied(true);
84
+ options.onCopy?.(text);
85
+ if (resetDelay > 0 && resetDelay !== Number.POSITIVE_INFINITY) {
86
+ timer = setTimeout(() => {
87
+ timer = undefined;
88
+ setCopied(false);
89
+ }, resetDelay);
90
+ }
91
+ return true;
92
+ },
93
+ reset() {
94
+ clearTimer();
95
+ setCopied(false);
96
+ },
97
+ destroy() {
98
+ clearTimer();
99
+ },
100
+ };
101
+ }
102
+ //# sourceMappingURL=copyable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyable.js","sourceRoot":"","sources":["../src/copyable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=copyable.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyable.test.d.ts","sourceRoot":"","sources":["../src/copyable.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,97 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
3
+ import { createCopyable, writeClipboard } from './copyable.js';
4
+ describe('writeClipboard', () => {
5
+ const origNav = globalThis.navigator;
6
+ afterEach(() => {
7
+ vi.restoreAllMocks();
8
+ Object.defineProperty(globalThis, 'navigator', { value: origNav, configurable: true });
9
+ });
10
+ it('uses navigator.clipboard.writeText when available', async () => {
11
+ const writeText = vi.fn().mockResolvedValue(undefined);
12
+ Object.defineProperty(globalThis, 'navigator', {
13
+ value: { clipboard: { writeText } },
14
+ configurable: true,
15
+ });
16
+ const ok = await writeClipboard('hello');
17
+ expect(ok).toBe(true);
18
+ expect(writeText).toHaveBeenCalledWith('hello');
19
+ });
20
+ it('falls back to execCommand when clipboard API throws', async () => {
21
+ Object.defineProperty(globalThis, 'navigator', {
22
+ value: { clipboard: { writeText: vi.fn().mockRejectedValue(new Error('denied')) } },
23
+ configurable: true,
24
+ });
25
+ const exec = vi.fn().mockReturnValue(true);
26
+ // jsdom provides document; stub execCommand
27
+ document.execCommand = exec;
28
+ const ok = await writeClipboard('fallback');
29
+ expect(ok).toBe(true);
30
+ expect(exec).toHaveBeenCalledWith('copy');
31
+ });
32
+ it('returns false when both strategies fail', async () => {
33
+ Object.defineProperty(globalThis, 'navigator', {
34
+ value: { clipboard: { writeText: vi.fn().mockRejectedValue(new Error('x')) } },
35
+ configurable: true,
36
+ });
37
+ document.execCommand = vi.fn().mockReturnValue(false);
38
+ const ok = await writeClipboard('nope');
39
+ expect(ok).toBe(false);
40
+ });
41
+ });
42
+ describe('createCopyable', () => {
43
+ beforeEach(() => {
44
+ vi.useFakeTimers();
45
+ Object.defineProperty(globalThis, 'navigator', {
46
+ value: { clipboard: { writeText: vi.fn().mockResolvedValue(undefined) } },
47
+ configurable: true,
48
+ });
49
+ });
50
+ afterEach(() => {
51
+ vi.useRealTimers();
52
+ vi.restoreAllMocks();
53
+ });
54
+ it('flips copied true on success and fires onCopy + onChange', async () => {
55
+ const onCopy = vi.fn();
56
+ const onChange = vi.fn();
57
+ const c = createCopyable({ content: 'abc', onCopy, onChange, resetDelay: 1000 });
58
+ const ok = await c.copy();
59
+ expect(ok).toBe(true);
60
+ expect(c.copied).toBe(true);
61
+ expect(onCopy).toHaveBeenCalledWith('abc');
62
+ expect(onChange).toHaveBeenCalledWith(true);
63
+ });
64
+ it('auto-resets copied after resetDelay', async () => {
65
+ const c = createCopyable({ content: 'abc', resetDelay: 1000 });
66
+ await c.copy();
67
+ expect(c.copied).toBe(true);
68
+ vi.advanceTimersByTime(1000);
69
+ expect(c.copied).toBe(false);
70
+ });
71
+ it('copy(content) overrides the default content', async () => {
72
+ const onCopy = vi.fn();
73
+ const c = createCopyable({ content: 'default', onCopy });
74
+ await c.copy('explicit');
75
+ expect(onCopy).toHaveBeenCalledWith('explicit');
76
+ });
77
+ it('reset clears timer and flag', async () => {
78
+ const c = createCopyable({ content: 'abc', resetDelay: 5000 });
79
+ await c.copy();
80
+ c.reset();
81
+ expect(c.copied).toBe(false);
82
+ });
83
+ it('fires onError and stays not-copied on failure', async () => {
84
+ Object.defineProperty(globalThis, 'navigator', {
85
+ value: { clipboard: { writeText: vi.fn().mockRejectedValue(new Error('x')) } },
86
+ configurable: true,
87
+ });
88
+ document.execCommand = vi.fn().mockReturnValue(false);
89
+ const onError = vi.fn();
90
+ const c = createCopyable({ content: 'abc', onError });
91
+ const ok = await c.copy();
92
+ expect(ok).toBe(false);
93
+ expect(c.copied).toBe(false);
94
+ expect(onError).toHaveBeenCalled();
95
+ });
96
+ });
97
+ //# sourceMappingURL=copyable.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyable.test.js","sourceRoot":"","sources":["../src/copyable.test.ts"],"names":[],"mappings":"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"}
package/dist/date.d.ts ADDED
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Framework-agnostic date utilities for DatePicker/Calendar.
3
+ * No DOM, no framework deps. See specs/components/input/DatePicker.spec.md.
4
+ * Pure calendar math only — formatting is the render layer's job (Intl).
5
+ */
6
+ /** A cell in a month grid. */
7
+ export interface DayCell {
8
+ date: Date;
9
+ /** belongs to the displayed month (vs. leading/trailing days) */
10
+ inMonth: boolean;
11
+ }
12
+ /** true if two dates fall on the same calendar day (local time) */
13
+ export declare function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean;
14
+ /** start of day (00:00:00.000) clone */
15
+ export declare function startOfDay(d: Date): Date;
16
+ /** add (possibly negative) months, clamping the day to the target month length */
17
+ export declare function addMonths(d: Date, delta: number): Date;
18
+ /**
19
+ * Build a 6-row (42-cell) month grid for the month containing `cursor`.
20
+ * @param weekStart 0 = Sunday (default), 1 = Monday
21
+ */
22
+ export declare function getMonthGrid(cursor: Date, weekStart?: number): DayCell[];
23
+ /** ordered weekday indices given a week start (e.g. [1,2,3,4,5,6,0] for Monday-start) */
24
+ export declare function weekdayOrder(weekStart?: number): number[];
25
+ /** add (possibly negative) weeks (7-day steps), preserving the day-of-week */
26
+ export declare function addWeeks(d: Date, delta: number): Date;
27
+ /** add (possibly negative) days, preserving the local time-of-day */
28
+ export declare function addDays(d: Date, delta: number): Date;
29
+ /**
30
+ * Build an ordered list of hour slots [from, to) for a single day's timeline.
31
+ * Each slot's `date` is the start-of-hour Date on the day of `cursor`.
32
+ * @param from first hour (inclusive), default 0
33
+ * @param to last hour (inclusive), default 23
34
+ */
35
+ export declare function getDayHours(cursor: Date, from?: number, to?: number): {
36
+ hour: number;
37
+ date: Date;
38
+ }[];
39
+ /**
40
+ * Whole calendar days between two dates (b - a), ignoring time-of-day.
41
+ * Positive when `b` is after `a`. Order-independent magnitude via Math.abs.
42
+ */
43
+ export declare function daysBetween(a: Date, b: Date): number;
44
+ /**
45
+ * Token-based date formatting. Supported tokens (longest-match first):
46
+ * YYYY year (4) MM month (01-12) DD day (01-31)
47
+ * HH hour (00-23) mm minute (00-59) ss second (00-59)
48
+ * Any other characters in the pattern are emitted verbatim (separators,
49
+ * literals). No locale/timezone math — uses the Date's local fields.
50
+ */
51
+ export declare function formatDate(date: Date, pattern: string): string;
52
+ /**
53
+ * Parse a string against a token pattern (mirror of {@link formatDate}).
54
+ * Returns a local Date on success, or null when the input doesn't match the
55
+ * pattern or yields an out-of-range field. Missing time tokens default to 0.
56
+ * Non-token characters in the pattern must appear literally in the input.
57
+ */
58
+ export declare function parseDateString(input: string, pattern: string): Date | null;
59
+ /** Keys a calendar date grid responds to for roving focus navigation. */
60
+ export type GridFocusKey = 'ArrowLeft' | 'ArrowRight' | 'ArrowUp' | 'ArrowDown' | 'PageUp' | 'PageDown' | 'Home' | 'End';
61
+ /**
62
+ * Pure roving-focus navigation for a day grid (WAI-ARIA grid pattern).
63
+ * Returns the day that focus should move to for the given key, or `null` if the
64
+ * key is not a navigation key (caller leaves focus untouched).
65
+ *
66
+ * ArrowLeft/Right ∓1 day ArrowUp/Down ∓1 week (7 days)
67
+ * PageUp/Down ∓1 month Home/End first/last day of that week
68
+ *
69
+ * `mode` constrains vertical/page motion:
70
+ * - 'week': Up/Down/PageUp/Down step by a single day (single-row grid) — the
71
+ * grid is one row, so vertical motion has no row to move to; we degrade to
72
+ * ±1 day so arrow keys still traverse the visible week.
73
+ * - 'month': full 2-D motion as described above.
74
+ *
75
+ * Pure: no DOM, no clamping to a visible window — the render layer re-derives
76
+ * the grid from the returned date (which may shift the displayed month/week).
77
+ * @param weekStart 0 = Sunday (default), 1 = Monday — anchors Home/End.
78
+ */
79
+ export declare function gridFocusMove(date: Date, key: GridFocusKey, mode?: 'month' | 'week', weekStart?: number): Date | null;
80
+ /**
81
+ * Build a single-week (7-cell) grid for the week containing `cursor`.
82
+ * Every cell `inMonth` is relative to the month of `cursor`.
83
+ * @param weekStart 0 = Sunday (default), 1 = Monday
84
+ */
85
+ export declare function getWeekGrid(cursor: Date, weekStart?: number): DayCell[];
86
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAOzF;AAED,wCAAwC;AACxC,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAIxC;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAMtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,SAAI,GAAG,OAAO,EAAE,CAenE;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,SAAS,SAAI,GAAG,MAAM,EAAE,CAEpD;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIpD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,SAAI,EAAE,EAAE,SAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,EAAE,CAU3F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAGpD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAW9D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAwC3E;AAgBD,yEAAyE;AACzE,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,YAAY,GACZ,SAAS,GACT,WAAW,GACX,QAAQ,GACR,UAAU,GACV,MAAM,GACN,KAAK,CAAC;AAEV;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,YAAY,EACjB,IAAI,GAAE,OAAO,GAAG,MAAgB,EAChC,SAAS,SAAI,GACZ,IAAI,GAAG,IAAI,CAyBb;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,SAAI,GAAG,OAAO,EAAE,CAUlE"}
package/dist/date.js ADDED
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Framework-agnostic date utilities for DatePicker/Calendar.
3
+ * No DOM, no framework deps. See specs/components/input/DatePicker.spec.md.
4
+ * Pure calendar math only — formatting is the render layer's job (Intl).
5
+ */
6
+ /** true if two dates fall on the same calendar day (local time) */
7
+ export function isSameDay(a, b) {
8
+ if (!a || !b)
9
+ return false;
10
+ return (a.getFullYear() === b.getFullYear() &&
11
+ a.getMonth() === b.getMonth() &&
12
+ a.getDate() === b.getDate());
13
+ }
14
+ /** start of day (00:00:00.000) clone */
15
+ export function startOfDay(d) {
16
+ const r = new Date(d);
17
+ r.setHours(0, 0, 0, 0);
18
+ return r;
19
+ }
20
+ /** add (possibly negative) months, clamping the day to the target month length */
21
+ export function addMonths(d, delta) {
22
+ const r = new Date(d);
23
+ const targetMonth = r.getMonth() + delta;
24
+ r.setDate(1);
25
+ r.setMonth(targetMonth);
26
+ return r;
27
+ }
28
+ /**
29
+ * Build a 6-row (42-cell) month grid for the month containing `cursor`.
30
+ * @param weekStart 0 = Sunday (default), 1 = Monday
31
+ */
32
+ export function getMonthGrid(cursor, weekStart = 0) {
33
+ const year = cursor.getFullYear();
34
+ const month = cursor.getMonth();
35
+ const first = new Date(year, month, 1);
36
+ const firstWeekday = first.getDay(); // 0..6 (Sun..Sat)
37
+ const lead = (firstWeekday - weekStart + 7) % 7;
38
+ const cells = [];
39
+ // start `lead` days before the 1st
40
+ const start = new Date(year, month, 1 - lead);
41
+ for (let i = 0; i < 42; i += 1) {
42
+ const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);
43
+ cells.push({ date, inMonth: date.getMonth() === month });
44
+ }
45
+ return cells;
46
+ }
47
+ /** ordered weekday indices given a week start (e.g. [1,2,3,4,5,6,0] for Monday-start) */
48
+ export function weekdayOrder(weekStart = 0) {
49
+ return Array.from({ length: 7 }, (_, i) => (i + weekStart) % 7);
50
+ }
51
+ /** add (possibly negative) weeks (7-day steps), preserving the day-of-week */
52
+ export function addWeeks(d, delta) {
53
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate() + delta * 7);
54
+ }
55
+ /** add (possibly negative) days, preserving the local time-of-day */
56
+ export function addDays(d, delta) {
57
+ const r = new Date(d);
58
+ r.setDate(r.getDate() + delta);
59
+ return r;
60
+ }
61
+ /**
62
+ * Build an ordered list of hour slots [from, to) for a single day's timeline.
63
+ * Each slot's `date` is the start-of-hour Date on the day of `cursor`.
64
+ * @param from first hour (inclusive), default 0
65
+ * @param to last hour (inclusive), default 23
66
+ */
67
+ export function getDayHours(cursor, from = 0, to = 23) {
68
+ const lo = Math.max(0, Math.min(23, Math.floor(from)));
69
+ const hi = Math.max(lo, Math.min(23, Math.floor(to)));
70
+ const y = cursor.getFullYear();
71
+ const m = cursor.getMonth();
72
+ const d = cursor.getDate();
73
+ return Array.from({ length: hi - lo + 1 }, (_, i) => {
74
+ const hour = lo + i;
75
+ return { hour, date: new Date(y, m, d, hour) };
76
+ });
77
+ }
78
+ /**
79
+ * Whole calendar days between two dates (b - a), ignoring time-of-day.
80
+ * Positive when `b` is after `a`. Order-independent magnitude via Math.abs.
81
+ */
82
+ export function daysBetween(a, b) {
83
+ const ms = startOfDay(b).getTime() - startOfDay(a).getTime();
84
+ return Math.round(ms / 86_400_000);
85
+ }
86
+ /**
87
+ * Token-based date formatting. Supported tokens (longest-match first):
88
+ * YYYY year (4) MM month (01-12) DD day (01-31)
89
+ * HH hour (00-23) mm minute (00-59) ss second (00-59)
90
+ * Any other characters in the pattern are emitted verbatim (separators,
91
+ * literals). No locale/timezone math — uses the Date's local fields.
92
+ */
93
+ export function formatDate(date, pattern) {
94
+ const pad = (n, len = 2) => String(n).padStart(len, '0');
95
+ const map = {
96
+ YYYY: pad(date.getFullYear(), 4),
97
+ MM: pad(date.getMonth() + 1),
98
+ DD: pad(date.getDate()),
99
+ HH: pad(date.getHours()),
100
+ mm: pad(date.getMinutes()),
101
+ ss: pad(date.getSeconds()),
102
+ };
103
+ return pattern.replace(/YYYY|MM|DD|HH|mm|ss/g, (t) => map[t] ?? t);
104
+ }
105
+ /**
106
+ * Parse a string against a token pattern (mirror of {@link formatDate}).
107
+ * Returns a local Date on success, or null when the input doesn't match the
108
+ * pattern or yields an out-of-range field. Missing time tokens default to 0.
109
+ * Non-token characters in the pattern must appear literally in the input.
110
+ */
111
+ export function parseDateString(input, pattern) {
112
+ if (!input)
113
+ return null;
114
+ const tokenRe = /YYYY|MM|DD|HH|mm|ss/g;
115
+ const order = [];
116
+ let regexSrc = '';
117
+ let last = 0;
118
+ const escape = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
119
+ for (let m = tokenRe.exec(pattern); m; m = tokenRe.exec(pattern)) {
120
+ regexSrc += escape(pattern.slice(last, m.index));
121
+ const tok = m[0];
122
+ order.push(tok);
123
+ regexSrc += tok === 'YYYY' ? '(\\d{4})' : '(\\d{1,2})';
124
+ last = tokenRe.lastIndex;
125
+ }
126
+ regexSrc += escape(pattern.slice(last));
127
+ const match = new RegExp(`^${regexSrc}$`).exec(input.trim());
128
+ if (!match)
129
+ return null;
130
+ const parts = {};
131
+ order.forEach((tok, i) => {
132
+ parts[tok] = Number(match[i + 1]);
133
+ });
134
+ const year = parts.YYYY ?? new Date().getFullYear();
135
+ const month = parts.MM != null ? parts.MM - 1 : 0;
136
+ const day = parts.DD ?? 1;
137
+ const hour = parts.HH ?? 0;
138
+ const minute = parts.mm ?? 0;
139
+ const second = parts.ss ?? 0;
140
+ if (month < 0 || month > 11)
141
+ return null;
142
+ if (day < 1 || day > 31)
143
+ return null;
144
+ if (hour > 23 || minute > 59 || second > 59)
145
+ return null;
146
+ const d = new Date(year, month, day, hour, minute, second, 0);
147
+ // reject overflow normalization (e.g. Feb 30 → Mar 2)
148
+ if (d.getFullYear() !== year || d.getMonth() !== month || d.getDate() !== day) {
149
+ return null;
150
+ }
151
+ return d;
152
+ }
153
+ /**
154
+ * Shift by whole months while preserving the day-of-month, clamping to the
155
+ * target month's length (e.g. Jan 31 + 1mo → Feb 28). Unlike {@link addMonths}
156
+ * (which snaps to the 1st for view-anchor navigation), this keeps the focused
157
+ * day so PageUp/PageDown move focus to "the same date next/prev month".
158
+ */
159
+ function shiftMonthKeepDay(d, delta) {
160
+ const day = d.getDate();
161
+ const target = new Date(d.getFullYear(), d.getMonth() + delta, 1);
162
+ const lastDay = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate();
163
+ target.setDate(Math.min(day, lastDay));
164
+ return target;
165
+ }
166
+ /**
167
+ * Pure roving-focus navigation for a day grid (WAI-ARIA grid pattern).
168
+ * Returns the day that focus should move to for the given key, or `null` if the
169
+ * key is not a navigation key (caller leaves focus untouched).
170
+ *
171
+ * ArrowLeft/Right ∓1 day ArrowUp/Down ∓1 week (7 days)
172
+ * PageUp/Down ∓1 month Home/End first/last day of that week
173
+ *
174
+ * `mode` constrains vertical/page motion:
175
+ * - 'week': Up/Down/PageUp/Down step by a single day (single-row grid) — the
176
+ * grid is one row, so vertical motion has no row to move to; we degrade to
177
+ * ±1 day so arrow keys still traverse the visible week.
178
+ * - 'month': full 2-D motion as described above.
179
+ *
180
+ * Pure: no DOM, no clamping to a visible window — the render layer re-derives
181
+ * the grid from the returned date (which may shift the displayed month/week).
182
+ * @param weekStart 0 = Sunday (default), 1 = Monday — anchors Home/End.
183
+ */
184
+ export function gridFocusMove(date, key, mode = 'month', weekStart = 0) {
185
+ switch (key) {
186
+ case 'ArrowLeft':
187
+ return addDays(date, -1);
188
+ case 'ArrowRight':
189
+ return addDays(date, 1);
190
+ case 'ArrowUp':
191
+ return mode === 'week' ? addDays(date, -1) : addDays(date, -7);
192
+ case 'ArrowDown':
193
+ return mode === 'week' ? addDays(date, 1) : addDays(date, 7);
194
+ case 'PageUp':
195
+ return mode === 'week' ? addWeeks(date, -1) : shiftMonthKeepDay(date, -1);
196
+ case 'PageDown':
197
+ return mode === 'week' ? addWeeks(date, 1) : shiftMonthKeepDay(date, 1);
198
+ case 'Home': {
199
+ const lead = (date.getDay() - weekStart + 7) % 7;
200
+ return addDays(date, -lead);
201
+ }
202
+ case 'End': {
203
+ const lead = (date.getDay() - weekStart + 7) % 7;
204
+ return addDays(date, 6 - lead);
205
+ }
206
+ default:
207
+ return null;
208
+ }
209
+ }
210
+ /**
211
+ * Build a single-week (7-cell) grid for the week containing `cursor`.
212
+ * Every cell `inMonth` is relative to the month of `cursor`.
213
+ * @param weekStart 0 = Sunday (default), 1 = Monday
214
+ */
215
+ export function getWeekGrid(cursor, weekStart = 0) {
216
+ const year = cursor.getFullYear();
217
+ const month = cursor.getMonth();
218
+ const weekday = cursor.getDay(); // 0..6 (Sun..Sat)
219
+ const lead = (weekday - weekStart + 7) % 7;
220
+ const start = new Date(year, month, cursor.getDate() - lead);
221
+ return Array.from({ length: 7 }, (_, i) => {
222
+ const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);
223
+ return { date, inMonth: date.getMonth() === month };
224
+ });
225
+ }
226
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=date.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.test.d.ts","sourceRoot":"","sources":["../src/date.test.ts"],"names":[],"mappings":""}