@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.
- package/LICENSE +21 -0
- package/dist/back-top.d.ts +16 -0
- package/dist/back-top.d.ts.map +1 -0
- package/dist/back-top.js +29 -0
- package/dist/back-top.js.map +1 -0
- package/dist/back-top.test.d.ts +2 -0
- package/dist/back-top.test.d.ts.map +1 -0
- package/dist/back-top.test.js +44 -0
- package/dist/back-top.test.js.map +1 -0
- package/dist/banner.d.ts +19 -0
- package/dist/banner.d.ts.map +1 -0
- package/dist/banner.js +20 -0
- package/dist/banner.js.map +1 -0
- package/dist/banner.test.d.ts +2 -0
- package/dist/banner.test.d.ts.map +1 -0
- package/dist/banner.test.js +29 -0
- package/dist/banner.test.js.map +1 -0
- package/dist/breakpoints.d.ts +30 -0
- package/dist/breakpoints.d.ts.map +1 -0
- package/dist/breakpoints.js +45 -0
- package/dist/breakpoints.js.map +1 -0
- package/dist/breakpoints.test.d.ts +2 -0
- package/dist/breakpoints.test.d.ts.map +1 -0
- package/dist/breakpoints.test.js +46 -0
- package/dist/breakpoints.test.js.map +1 -0
- package/dist/calendar.d.ts +63 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +94 -0
- package/dist/calendar.js.map +1 -0
- package/dist/calendar.test.d.ts +2 -0
- package/dist/calendar.test.d.ts.map +1 -0
- package/dist/calendar.test.js +88 -0
- package/dist/calendar.test.js.map +1 -0
- package/dist/cascader.d.ts +64 -0
- package/dist/cascader.d.ts.map +1 -0
- package/dist/cascader.js +79 -0
- package/dist/cascader.js.map +1 -0
- package/dist/cascader.test.d.ts +2 -0
- package/dist/cascader.test.d.ts.map +1 -0
- package/dist/cascader.test.js +107 -0
- package/dist/cascader.test.js.map +1 -0
- package/dist/color.d.ts +70 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +217 -0
- package/dist/color.js.map +1 -0
- package/dist/color.test.d.ts +2 -0
- package/dist/color.test.d.ts.map +1 -0
- package/dist/color.test.js +161 -0
- package/dist/color.test.js.map +1 -0
- package/dist/config-provider.d.ts +57 -0
- package/dist/config-provider.d.ts.map +1 -0
- package/dist/config-provider.js +49 -0
- package/dist/config-provider.js.map +1 -0
- package/dist/config-provider.test.d.ts +2 -0
- package/dist/config-provider.test.d.ts.map +1 -0
- package/dist/config-provider.test.js +76 -0
- package/dist/config-provider.test.js.map +1 -0
- package/dist/copyable.d.ts +43 -0
- package/dist/copyable.d.ts.map +1 -0
- package/dist/copyable.js +102 -0
- package/dist/copyable.js.map +1 -0
- package/dist/copyable.test.d.ts +2 -0
- package/dist/copyable.test.d.ts.map +1 -0
- package/dist/copyable.test.js +97 -0
- package/dist/copyable.test.js.map +1 -0
- package/dist/date.d.ts +86 -0
- package/dist/date.d.ts.map +1 -0
- package/dist/date.js +226 -0
- package/dist/date.js.map +1 -0
- package/dist/date.test.d.ts +2 -0
- package/dist/date.test.d.ts.map +1 -0
- package/dist/date.test.js +171 -0
- package/dist/date.test.js.map +1 -0
- package/dist/dismiss.d.ts +28 -0
- package/dist/dismiss.d.ts.map +1 -0
- package/dist/dismiss.js +42 -0
- package/dist/dismiss.js.map +1 -0
- package/dist/editable.d.ts +59 -0
- package/dist/editable.d.ts.map +1 -0
- package/dist/editable.js +85 -0
- package/dist/editable.js.map +1 -0
- package/dist/editable.test.d.ts +2 -0
- package/dist/editable.test.d.ts.map +1 -0
- package/dist/editable.test.js +111 -0
- package/dist/editable.test.js.map +1 -0
- package/dist/ellipsis.d.ts +76 -0
- package/dist/ellipsis.d.ts.map +1 -0
- package/dist/ellipsis.js +99 -0
- package/dist/ellipsis.js.map +1 -0
- package/dist/ellipsis.test.d.ts +2 -0
- package/dist/ellipsis.test.d.ts.map +1 -0
- package/dist/ellipsis.test.js +94 -0
- package/dist/ellipsis.test.js.map +1 -0
- package/dist/floating.d.ts +78 -0
- package/dist/floating.d.ts.map +1 -0
- package/dist/floating.js +169 -0
- package/dist/floating.js.map +1 -0
- package/dist/floating.test.d.ts +2 -0
- package/dist/floating.test.d.ts.map +1 -0
- package/dist/floating.test.js +169 -0
- package/dist/floating.test.js.map +1 -0
- package/dist/focus-trap.d.ts +24 -0
- package/dist/focus-trap.d.ts.map +1 -0
- package/dist/focus-trap.js +64 -0
- package/dist/focus-trap.js.map +1 -0
- package/dist/form.d.ts +131 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +257 -0
- package/dist/form.js.map +1 -0
- package/dist/form.test.d.ts +2 -0
- package/dist/form.test.d.ts.map +1 -0
- package/dist/form.test.js +323 -0
- package/dist/form.test.js.map +1 -0
- package/dist/highlight.d.ts +57 -0
- package/dist/highlight.d.ts.map +1 -0
- package/dist/highlight.js +124 -0
- package/dist/highlight.js.map +1 -0
- package/dist/highlight.test.d.ts +2 -0
- package/dist/highlight.test.d.ts.map +1 -0
- package/dist/highlight.test.js +155 -0
- package/dist/highlight.test.js.map +1 -0
- package/dist/id.d.ts +4 -0
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +14 -0
- package/dist/id.js.map +1 -0
- package/dist/id.test.d.ts +2 -0
- package/dist/id.test.d.ts.map +1 -0
- package/dist/id.test.js +13 -0
- package/dist/id.test.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/inert-background.d.ts +27 -0
- package/dist/inert-background.d.ts.map +1 -0
- package/dist/inert-background.js +92 -0
- package/dist/inert-background.js.map +1 -0
- package/dist/inert-background.test.d.ts +2 -0
- package/dist/inert-background.test.d.ts.map +1 -0
- package/dist/inert-background.test.js +62 -0
- package/dist/inert-background.test.js.map +1 -0
- package/dist/input-number.d.ts +34 -0
- package/dist/input-number.d.ts.map +1 -0
- package/dist/input-number.js +69 -0
- package/dist/input-number.js.map +1 -0
- package/dist/input-number.test.d.ts +2 -0
- package/dist/input-number.test.d.ts.map +1 -0
- package/dist/input-number.test.js +74 -0
- package/dist/input-number.test.js.map +1 -0
- package/dist/list-selection.d.ts +38 -0
- package/dist/list-selection.d.ts.map +1 -0
- package/dist/list-selection.js +61 -0
- package/dist/list-selection.js.map +1 -0
- package/dist/list-selection.test.d.ts +2 -0
- package/dist/list-selection.test.d.ts.map +1 -0
- package/dist/list-selection.test.js +61 -0
- package/dist/list-selection.test.js.map +1 -0
- package/dist/live-announcer.d.ts +38 -0
- package/dist/live-announcer.d.ts.map +1 -0
- package/dist/live-announcer.js +89 -0
- package/dist/live-announcer.js.map +1 -0
- package/dist/live-announcer.test.d.ts +2 -0
- package/dist/live-announcer.test.d.ts.map +1 -0
- package/dist/live-announcer.test.js +70 -0
- package/dist/live-announcer.test.js.map +1 -0
- package/dist/lottie-icon.d.ts +88 -0
- package/dist/lottie-icon.d.ts.map +1 -0
- package/dist/lottie-icon.js +84 -0
- package/dist/lottie-icon.js.map +1 -0
- package/dist/lottie-icon.test.d.ts +2 -0
- package/dist/lottie-icon.test.d.ts.map +1 -0
- package/dist/lottie-icon.test.js +88 -0
- package/dist/lottie-icon.test.js.map +1 -0
- package/dist/notification.d.ts +61 -0
- package/dist/notification.d.ts.map +1 -0
- package/dist/notification.js +133 -0
- package/dist/notification.js.map +1 -0
- package/dist/notification.test.d.ts +2 -0
- package/dist/notification.test.d.ts.map +1 -0
- package/dist/notification.test.js +103 -0
- package/dist/notification.test.js.map +1 -0
- package/dist/overflow-list.d.ts +102 -0
- package/dist/overflow-list.d.ts.map +1 -0
- package/dist/overflow-list.js +159 -0
- package/dist/overflow-list.js.map +1 -0
- package/dist/overflow-list.test.d.ts +2 -0
- package/dist/overflow-list.test.d.ts.map +1 -0
- package/dist/overflow-list.test.js +223 -0
- package/dist/overflow-list.test.js.map +1 -0
- package/dist/pagination.d.ts +51 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +127 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pagination.test.d.ts +2 -0
- package/dist/pagination.test.d.ts.map +1 -0
- package/dist/pagination.test.js +147 -0
- package/dist/pagination.test.js.map +1 -0
- package/dist/progress.d.ts +64 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +92 -0
- package/dist/progress.js.map +1 -0
- package/dist/progress.test.d.ts +2 -0
- package/dist/progress.test.d.ts.map +1 -0
- package/dist/progress.test.js +79 -0
- package/dist/progress.test.js.map +1 -0
- package/dist/resize-observer.d.ts +133 -0
- package/dist/resize-observer.d.ts.map +1 -0
- package/dist/resize-observer.js +358 -0
- package/dist/resize-observer.js.map +1 -0
- package/dist/resize-observer.test.d.ts +2 -0
- package/dist/resize-observer.test.d.ts.map +1 -0
- package/dist/resize-observer.test.js +377 -0
- package/dist/resize-observer.test.js.map +1 -0
- package/dist/roving.d.ts +26 -0
- package/dist/roving.d.ts.map +1 -0
- package/dist/roving.js +61 -0
- package/dist/roving.js.map +1 -0
- package/dist/roving.test.d.ts +2 -0
- package/dist/roving.test.d.ts.map +1 -0
- package/dist/roving.test.js +48 -0
- package/dist/roving.test.js.map +1 -0
- package/dist/scroll-list.d.ts +81 -0
- package/dist/scroll-list.d.ts.map +1 -0
- package/dist/scroll-list.js +175 -0
- package/dist/scroll-list.js.map +1 -0
- package/dist/scroll-list.test.d.ts +2 -0
- package/dist/scroll-list.test.d.ts.map +1 -0
- package/dist/scroll-list.test.js +135 -0
- package/dist/scroll-list.test.js.map +1 -0
- package/dist/scroll-lock.d.ts +11 -0
- package/dist/scroll-lock.d.ts.map +1 -0
- package/dist/scroll-lock.js +45 -0
- package/dist/scroll-lock.js.map +1 -0
- package/dist/scroll-lock.test.d.ts +2 -0
- package/dist/scroll-lock.test.d.ts.map +1 -0
- package/dist/scroll-lock.test.js +55 -0
- package/dist/scroll-lock.test.js.map +1 -0
- package/dist/sider.d.ts +26 -0
- package/dist/sider.d.ts.map +1 -0
- package/dist/sider.js +55 -0
- package/dist/sider.js.map +1 -0
- package/dist/sider.test.d.ts +2 -0
- package/dist/sider.test.d.ts.map +1 -0
- package/dist/sider.test.js +29 -0
- package/dist/sider.test.js.map +1 -0
- package/dist/spin.d.ts +25 -0
- package/dist/spin.d.ts.map +1 -0
- package/dist/spin.js +96 -0
- package/dist/spin.js.map +1 -0
- package/dist/spin.test.d.ts +2 -0
- package/dist/spin.test.d.ts.map +1 -0
- package/dist/spin.test.js +80 -0
- package/dist/spin.test.js.map +1 -0
- package/dist/table.d.ts +101 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +244 -0
- package/dist/table.js.map +1 -0
- package/dist/table.test.d.ts +2 -0
- package/dist/table.test.d.ts.map +1 -0
- package/dist/table.test.js +184 -0
- package/dist/table.test.js.map +1 -0
- package/dist/textarea.d.ts +48 -0
- package/dist/textarea.d.ts.map +1 -0
- package/dist/textarea.js +76 -0
- package/dist/textarea.js.map +1 -0
- package/dist/textarea.test.d.ts +2 -0
- package/dist/textarea.test.d.ts.map +1 -0
- package/dist/textarea.test.js +77 -0
- package/dist/textarea.test.js.map +1 -0
- package/dist/time.d.ts +93 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +181 -0
- package/dist/time.js.map +1 -0
- package/dist/time.test.d.ts +2 -0
- package/dist/time.test.d.ts.map +1 -0
- package/dist/time.test.js +159 -0
- package/dist/time.test.js.map +1 -0
- package/dist/toast.d.ts +60 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +135 -0
- package/dist/toast.js.map +1 -0
- package/dist/toast.test.d.ts +2 -0
- package/dist/toast.test.d.ts.map +1 -0
- package/dist/toast.test.js +127 -0
- package/dist/toast.test.js.map +1 -0
- package/dist/tree.d.ts +129 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +351 -0
- package/dist/tree.js.map +1 -0
- package/dist/tree.test.d.ts +2 -0
- package/dist/tree.test.d.ts.map +1 -0
- package/dist/tree.test.js +291 -0
- package/dist/tree.test.js.map +1 -0
- package/dist/upload.d.ts +62 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +85 -0
- package/dist/upload.js.map +1 -0
- package/dist/upload.test.d.ts +2 -0
- package/dist/upload.test.d.ts.map +1 -0
- package/dist/upload.test.js +169 -0
- package/dist/upload.test.js.map +1 -0
- package/dist/virtual-list.d.ts +83 -0
- package/dist/virtual-list.d.ts.map +1 -0
- package/dist/virtual-list.js +143 -0
- package/dist/virtual-list.js.map +1 -0
- package/dist/virtual-list.test.d.ts +2 -0
- package/dist/virtual-list.test.d.ts.map +1 -0
- package/dist/virtual-list.test.js +148 -0
- package/dist/virtual-list.test.js.map +1 -0
- package/package.json +22 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 chenzylab
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createBackTop helpers — framework-agnostic easing + threshold logic for BackTop.
|
|
3
|
+
* Pure functions only (easing curve, visibility threshold, scroll interpolation);
|
|
4
|
+
* the svelte layer owns the scroll listener (rAF) and DOM scroll writes.
|
|
5
|
+
* See specs/components/other/BackTop.spec.md §3.
|
|
6
|
+
*/
|
|
7
|
+
/** easeInOutCubic — smooth acceleration then deceleration, t in [0,1] → [0,1]. */
|
|
8
|
+
export declare function easeInOutCubic(t: number): number;
|
|
9
|
+
/** true if the button should be visible given the current scroll position. */
|
|
10
|
+
export declare function isAboveThreshold(scrollTop: number, visibilityHeight: number): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Interpolate the scroll position at elapsed `elapsed` ms of a `duration` ms
|
|
13
|
+
* animation easing from `from` to 0. Returns the scrollTop to set this frame.
|
|
14
|
+
*/
|
|
15
|
+
export declare function scrollPositionAt(from: number, elapsed: number, duration: number): number;
|
|
16
|
+
//# sourceMappingURL=back-top.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"back-top.d.ts","sourceRoot":"","sources":["../src/back-top.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAErF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIxF"}
|
package/dist/back-top.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createBackTop helpers — framework-agnostic easing + threshold logic for BackTop.
|
|
3
|
+
* Pure functions only (easing curve, visibility threshold, scroll interpolation);
|
|
4
|
+
* the svelte layer owns the scroll listener (rAF) and DOM scroll writes.
|
|
5
|
+
* See specs/components/other/BackTop.spec.md §3.
|
|
6
|
+
*/
|
|
7
|
+
/** easeInOutCubic — smooth acceleration then deceleration, t in [0,1] → [0,1]. */
|
|
8
|
+
export function easeInOutCubic(t) {
|
|
9
|
+
if (t <= 0)
|
|
10
|
+
return 0;
|
|
11
|
+
if (t >= 1)
|
|
12
|
+
return 1;
|
|
13
|
+
return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
|
|
14
|
+
}
|
|
15
|
+
/** true if the button should be visible given the current scroll position. */
|
|
16
|
+
export function isAboveThreshold(scrollTop, visibilityHeight) {
|
|
17
|
+
return scrollTop >= visibilityHeight;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Interpolate the scroll position at elapsed `elapsed` ms of a `duration` ms
|
|
21
|
+
* animation easing from `from` to 0. Returns the scrollTop to set this frame.
|
|
22
|
+
*/
|
|
23
|
+
export function scrollPositionAt(from, elapsed, duration) {
|
|
24
|
+
if (duration <= 0)
|
|
25
|
+
return 0;
|
|
26
|
+
const t = Math.min(1, elapsed / duration);
|
|
27
|
+
return Math.round(from * (1 - easeInOutCubic(t)));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=back-top.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"back-top.js","sourceRoot":"","sources":["../src/back-top.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACnE,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,gBAAwB;IAC1E,OAAO,SAAS,IAAI,gBAAgB,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAe,EAAE,QAAgB;IAC9E,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"back-top.test.d.ts","sourceRoot":"","sources":["../src/back-top.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { easeInOutCubic, isAboveThreshold, scrollPositionAt } from './back-top.js';
|
|
3
|
+
describe('easeInOutCubic', () => {
|
|
4
|
+
it('clamps endpoints', () => {
|
|
5
|
+
expect(easeInOutCubic(0)).toBe(0);
|
|
6
|
+
expect(easeInOutCubic(1)).toBe(1);
|
|
7
|
+
expect(easeInOutCubic(-0.5)).toBe(0);
|
|
8
|
+
expect(easeInOutCubic(2)).toBe(1);
|
|
9
|
+
});
|
|
10
|
+
it('is symmetric around the midpoint', () => {
|
|
11
|
+
expect(easeInOutCubic(0.5)).toBeCloseTo(0.5, 5);
|
|
12
|
+
// ease(t) + ease(1-t) === 1 for cubic in-out
|
|
13
|
+
expect(easeInOutCubic(0.25) + easeInOutCubic(0.75)).toBeCloseTo(1, 5);
|
|
14
|
+
});
|
|
15
|
+
it('eases slowly at the start', () => {
|
|
16
|
+
// at t=0.25 the cubic-in segment is well below linear 0.25
|
|
17
|
+
expect(easeInOutCubic(0.25)).toBeLessThan(0.25);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe('isAboveThreshold', () => {
|
|
21
|
+
it('flips exactly at the threshold', () => {
|
|
22
|
+
expect(isAboveThreshold(399, 400)).toBe(false);
|
|
23
|
+
expect(isAboveThreshold(400, 400)).toBe(true);
|
|
24
|
+
expect(isAboveThreshold(401, 400)).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('scrollPositionAt', () => {
|
|
28
|
+
it('starts at `from` and ends at 0', () => {
|
|
29
|
+
expect(scrollPositionAt(800, 0, 450)).toBe(800);
|
|
30
|
+
expect(scrollPositionAt(800, 450, 450)).toBe(0);
|
|
31
|
+
expect(scrollPositionAt(800, 1000, 450)).toBe(0); // past end clamps
|
|
32
|
+
});
|
|
33
|
+
it('duration 0 jumps straight to 0', () => {
|
|
34
|
+
expect(scrollPositionAt(800, 0, 0)).toBe(0);
|
|
35
|
+
});
|
|
36
|
+
it('is monotonically decreasing', () => {
|
|
37
|
+
const a = scrollPositionAt(1000, 100, 450);
|
|
38
|
+
const b = scrollPositionAt(1000, 200, 450);
|
|
39
|
+
const c = scrollPositionAt(1000, 300, 450);
|
|
40
|
+
expect(a).toBeGreaterThan(b);
|
|
41
|
+
expect(b).toBeGreaterThan(c);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=back-top.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"back-top.test.js","sourceRoot":"","sources":["../src/back-top.test.ts"],"names":[],"mappings":"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"}
|
package/dist/banner.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createBanner helpers — framework-agnostic role/aria-live resolution for Banner.
|
|
3
|
+
* Pure functions only; the render layer (svelte runes) owns the open state.
|
|
4
|
+
* See specs/components/feedback/Banner.spec.md §3.
|
|
5
|
+
*/
|
|
6
|
+
export type BannerType = 'info' | 'success' | 'warning' | 'danger';
|
|
7
|
+
export interface BannerRoleProps {
|
|
8
|
+
/** alert for urgent (danger/warning), status for info/success, region for static */
|
|
9
|
+
role: 'alert' | 'status' | 'region';
|
|
10
|
+
'aria-live'?: 'assertive' | 'polite';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the root role + aria-live for a banner.
|
|
14
|
+
* - Static (non-dynamically-inserted) banners use role=region to avoid noisy
|
|
15
|
+
* announcements on first paint.
|
|
16
|
+
* - Dynamic danger/warning announce assertively; info/success politely.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveBannerRole(type: BannerType, dynamic?: boolean): BannerRoleProps;
|
|
19
|
+
//# sourceMappingURL=banner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,WAAW,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,UAAQ,GAAG,eAAe,CAMpF"}
|
package/dist/banner.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createBanner helpers — framework-agnostic role/aria-live resolution for Banner.
|
|
3
|
+
* Pure functions only; the render layer (svelte runes) owns the open state.
|
|
4
|
+
* See specs/components/feedback/Banner.spec.md §3.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Resolve the root role + aria-live for a banner.
|
|
8
|
+
* - Static (non-dynamically-inserted) banners use role=region to avoid noisy
|
|
9
|
+
* announcements on first paint.
|
|
10
|
+
* - Dynamic danger/warning announce assertively; info/success politely.
|
|
11
|
+
*/
|
|
12
|
+
export function resolveBannerRole(type, dynamic = false) {
|
|
13
|
+
if (!dynamic)
|
|
14
|
+
return { role: 'region' };
|
|
15
|
+
if (type === 'danger' || type === 'warning') {
|
|
16
|
+
return { role: 'alert', 'aria-live': 'assertive' };
|
|
17
|
+
}
|
|
18
|
+
return { role: 'status', 'aria-live': 'polite' };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAgB,EAAE,OAAO,GAAG,KAAK;IACjE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACxC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.test.d.ts","sourceRoot":"","sources":["../src/banner.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { resolveBannerRole } from './banner.js';
|
|
3
|
+
describe('resolveBannerRole', () => {
|
|
4
|
+
it('static banners use region (no live noise)', () => {
|
|
5
|
+
expect(resolveBannerRole('info')).toEqual({ role: 'region' });
|
|
6
|
+
expect(resolveBannerRole('danger')).toEqual({ role: 'region' });
|
|
7
|
+
});
|
|
8
|
+
it('dynamic danger/warning announce assertively', () => {
|
|
9
|
+
expect(resolveBannerRole('danger', true)).toEqual({
|
|
10
|
+
role: 'alert',
|
|
11
|
+
'aria-live': 'assertive',
|
|
12
|
+
});
|
|
13
|
+
expect(resolveBannerRole('warning', true)).toEqual({
|
|
14
|
+
role: 'alert',
|
|
15
|
+
'aria-live': 'assertive',
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
it('dynamic info/success announce politely', () => {
|
|
19
|
+
expect(resolveBannerRole('info', true)).toEqual({
|
|
20
|
+
role: 'status',
|
|
21
|
+
'aria-live': 'polite',
|
|
22
|
+
});
|
|
23
|
+
expect(resolveBannerRole('success', true)).toEqual({
|
|
24
|
+
role: 'status',
|
|
25
|
+
'aria-live': 'polite',
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=banner.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.test.js","sourceRoot":"","sources":["../src/banner.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAChD,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,WAAW;SACzB,CAAC,CAAC;QACH,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACjD,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,WAAW;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,QAAQ;SACtB,CAAC,CAAC;QACH,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACjD,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,QAAQ;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* breakpoints — framework-agnostic responsive breakpoint resolution.
|
|
3
|
+
* Six-tier scale aligned with Semi Design / Ant Design. Pure functions over a
|
|
4
|
+
* viewport width; no DOM, no matchMedia (the render layer owns the listener).
|
|
5
|
+
* See specs/components/basic/Grid.spec.md (responsive).
|
|
6
|
+
*/
|
|
7
|
+
/** ordered from smallest to largest; min-width (px) for each tier. */
|
|
8
|
+
export declare const BREAKPOINTS: {
|
|
9
|
+
readonly xs: 0;
|
|
10
|
+
readonly sm: 576;
|
|
11
|
+
readonly md: 768;
|
|
12
|
+
readonly lg: 992;
|
|
13
|
+
readonly xl: 1200;
|
|
14
|
+
readonly xxl: 1600;
|
|
15
|
+
};
|
|
16
|
+
export type Breakpoint = keyof typeof BREAKPOINTS;
|
|
17
|
+
/** smallest → largest, the降级查找顺序的反向基准 */
|
|
18
|
+
export declare const BREAKPOINT_ORDER: Breakpoint[];
|
|
19
|
+
/** the active breakpoint for a viewport width (largest tier whose min-width ≤ width). */
|
|
20
|
+
export declare function resolveActiveBreakpoint(width: number): Breakpoint;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a per-breakpoint map to the value that applies at `active`, cascading
|
|
23
|
+
* down: if `active` has no value, fall back to the nearest smaller tier that
|
|
24
|
+
* does (mobile-first). Returns `fallback` if none match.
|
|
25
|
+
*
|
|
26
|
+
* resolveResponsiveValue({ xs: 24, md: 12 }, 'lg') // → 12 (md cascades up to lg)
|
|
27
|
+
* resolveResponsiveValue({ md: 12 }, 'sm') // → fallback (no sm/xs)
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveResponsiveValue<T>(byBreakpoint: Partial<Record<Breakpoint, T>>, active: Breakpoint, fallback: T): T;
|
|
30
|
+
//# sourceMappingURL=breakpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakpoints.d.ts","sourceRoot":"","sources":["../src/breakpoints.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sEAAsE;AACtE,eAAO,MAAM,WAAW;;;;;;;CAOd,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,WAAW,CAAC;AAElD,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,UAAU,EAA0C,CAAC;AAEpF,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAMjE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAC5C,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,CAAC,GACV,CAAC,CAQH"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* breakpoints — framework-agnostic responsive breakpoint resolution.
|
|
3
|
+
* Six-tier scale aligned with Semi Design / Ant Design. Pure functions over a
|
|
4
|
+
* viewport width; no DOM, no matchMedia (the render layer owns the listener).
|
|
5
|
+
* See specs/components/basic/Grid.spec.md (responsive).
|
|
6
|
+
*/
|
|
7
|
+
/** ordered from smallest to largest; min-width (px) for each tier. */
|
|
8
|
+
export const BREAKPOINTS = {
|
|
9
|
+
xs: 0,
|
|
10
|
+
sm: 576,
|
|
11
|
+
md: 768,
|
|
12
|
+
lg: 992,
|
|
13
|
+
xl: 1200,
|
|
14
|
+
xxl: 1600,
|
|
15
|
+
};
|
|
16
|
+
/** smallest → largest, the降级查找顺序的反向基准 */
|
|
17
|
+
export const BREAKPOINT_ORDER = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
|
|
18
|
+
/** the active breakpoint for a viewport width (largest tier whose min-width ≤ width). */
|
|
19
|
+
export function resolveActiveBreakpoint(width) {
|
|
20
|
+
let active = 'xs';
|
|
21
|
+
for (const bp of BREAKPOINT_ORDER) {
|
|
22
|
+
if (width >= BREAKPOINTS[bp])
|
|
23
|
+
active = bp;
|
|
24
|
+
}
|
|
25
|
+
return active;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Resolve a per-breakpoint map to the value that applies at `active`, cascading
|
|
29
|
+
* down: if `active` has no value, fall back to the nearest smaller tier that
|
|
30
|
+
* does (mobile-first). Returns `fallback` if none match.
|
|
31
|
+
*
|
|
32
|
+
* resolveResponsiveValue({ xs: 24, md: 12 }, 'lg') // → 12 (md cascades up to lg)
|
|
33
|
+
* resolveResponsiveValue({ md: 12 }, 'sm') // → fallback (no sm/xs)
|
|
34
|
+
*/
|
|
35
|
+
export function resolveResponsiveValue(byBreakpoint, active, fallback) {
|
|
36
|
+
const activeIndex = BREAKPOINT_ORDER.indexOf(active);
|
|
37
|
+
for (let i = activeIndex; i >= 0; i -= 1) {
|
|
38
|
+
const bp = BREAKPOINT_ORDER[i];
|
|
39
|
+
const value = byBreakpoint[bp];
|
|
40
|
+
if (value !== undefined)
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
return fallback;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=breakpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakpoints.js","sourceRoot":"","sources":["../src/breakpoints.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,IAAI;CACD,CAAC;AAIX,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAEpF,yFAAyF;AACzF,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,IAAI,MAAM,GAAe,IAAI,CAAC;IAC9B,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;QAClC,IAAI,KAAK,IAAI,WAAW,CAAC,EAAE,CAAC;YAAE,MAAM,GAAG,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,YAA4C,EAC5C,MAAkB,EAClB,QAAW;IAEX,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAE,CAAC;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakpoints.test.d.ts","sourceRoot":"","sources":["../src/breakpoints.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { BREAKPOINTS, resolveActiveBreakpoint, resolveResponsiveValue, } from './breakpoints.js';
|
|
3
|
+
describe('resolveActiveBreakpoint', () => {
|
|
4
|
+
it('returns xs below the sm threshold', () => {
|
|
5
|
+
expect(resolveActiveBreakpoint(0)).toBe('xs');
|
|
6
|
+
expect(resolveActiveBreakpoint(575)).toBe('xs');
|
|
7
|
+
});
|
|
8
|
+
it('returns the exact tier at its min-width boundary', () => {
|
|
9
|
+
expect(resolveActiveBreakpoint(BREAKPOINTS.sm)).toBe('sm');
|
|
10
|
+
expect(resolveActiveBreakpoint(BREAKPOINTS.md)).toBe('md');
|
|
11
|
+
expect(resolveActiveBreakpoint(BREAKPOINTS.lg)).toBe('lg');
|
|
12
|
+
expect(resolveActiveBreakpoint(BREAKPOINTS.xl)).toBe('xl');
|
|
13
|
+
expect(resolveActiveBreakpoint(BREAKPOINTS.xxl)).toBe('xxl');
|
|
14
|
+
});
|
|
15
|
+
it('returns the largest tier whose min-width is ≤ width', () => {
|
|
16
|
+
expect(resolveActiveBreakpoint(700)).toBe('sm'); // 576 ≤ 700 < 768
|
|
17
|
+
expect(resolveActiveBreakpoint(1000)).toBe('lg'); // 992 ≤ 1000 < 1200
|
|
18
|
+
expect(resolveActiveBreakpoint(5000)).toBe('xxl');
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
describe('resolveResponsiveValue', () => {
|
|
22
|
+
it('returns the exact value when the active tier is set', () => {
|
|
23
|
+
expect(resolveResponsiveValue({ xs: 24, md: 12 }, 'md', 0)).toBe(12);
|
|
24
|
+
});
|
|
25
|
+
it('cascades up from the nearest smaller tier (mobile-first)', () => {
|
|
26
|
+
// lg unset → falls back to md
|
|
27
|
+
expect(resolveResponsiveValue({ xs: 24, md: 12 }, 'lg', 0)).toBe(12);
|
|
28
|
+
// xxl unset → cascades all the way to xs
|
|
29
|
+
expect(resolveResponsiveValue({ xs: 24 }, 'xxl', 0)).toBe(24);
|
|
30
|
+
});
|
|
31
|
+
it('does NOT cascade down from a larger tier', () => {
|
|
32
|
+
// only md set, active is sm → no smaller value → fallback
|
|
33
|
+
expect(resolveResponsiveValue({ md: 12 }, 'sm', 99)).toBe(99);
|
|
34
|
+
});
|
|
35
|
+
it('returns the fallback when the map is empty', () => {
|
|
36
|
+
expect(resolveResponsiveValue({}, 'lg', 8)).toBe(8);
|
|
37
|
+
});
|
|
38
|
+
it('treats 0 as a present value (not missing)', () => {
|
|
39
|
+
expect(resolveResponsiveValue({ xs: 0, lg: 6 }, 'sm', 99)).toBe(0);
|
|
40
|
+
});
|
|
41
|
+
it('works with object values (span/offset config)', () => {
|
|
42
|
+
const cfg = { xs: { span: 24 }, lg: { span: 8, offset: 2 } };
|
|
43
|
+
expect(resolveResponsiveValue(cfg, 'xl', { span: 24 })).toEqual({ span: 8, offset: 2 });
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=breakpoints.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakpoints.test.js","sourceRoot":"","sources":["../src/breakpoints.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createCalendar helpers — framework-agnostic month-view event grouping.
|
|
3
|
+
* Pure functions only; reuses date.ts grid math. No DOM, no framework deps.
|
|
4
|
+
* See specs/components/show/Calendar.spec.md §3 (month-view subset).
|
|
5
|
+
*/
|
|
6
|
+
import { isSameDay } from './date.js';
|
|
7
|
+
export type CalendarEventKey = string | number;
|
|
8
|
+
export interface CalendarEvent {
|
|
9
|
+
key: CalendarEventKey;
|
|
10
|
+
/** event start (inclusive) */
|
|
11
|
+
start: Date;
|
|
12
|
+
/** event end (inclusive day for multi-day; same day as start if omitted) */
|
|
13
|
+
end?: Date;
|
|
14
|
+
title: string;
|
|
15
|
+
/** category accent color (any CSS color); render layer falls back to a token */
|
|
16
|
+
color?: string;
|
|
17
|
+
allDay?: boolean;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** Events visible on one day plus an overflow count after capping. */
|
|
21
|
+
export interface DayEvents {
|
|
22
|
+
/** events shown (already capped to `maxPerDay`) */
|
|
23
|
+
visible: CalendarEvent[];
|
|
24
|
+
/** total events on the day (including hidden) */
|
|
25
|
+
total: CalendarEvent[];
|
|
26
|
+
/** how many events are hidden beyond the cap (total - visible) */
|
|
27
|
+
overflow: number;
|
|
28
|
+
}
|
|
29
|
+
/** true if `date` falls within [start, end] (inclusive, day granularity). */
|
|
30
|
+
export declare function eventCoversDay(event: CalendarEvent, date: Date): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Group events onto a specific day, sorted by start time, capped at `maxPerDay`.
|
|
33
|
+
* Multi-day events appear on every day they cover.
|
|
34
|
+
*/
|
|
35
|
+
export declare function eventsForDay(events: readonly CalendarEvent[], date: Date, maxPerDay?: number): DayEvents;
|
|
36
|
+
/**
|
|
37
|
+
* Build a map (keyed by `YYYY-M-D`) of events-per-day for a set of cells,
|
|
38
|
+
* so the render layer can look up each grid cell in O(1).
|
|
39
|
+
*/
|
|
40
|
+
export declare function groupEventsByDays(events: readonly CalendarEvent[], days: readonly Date[], maxPerDay?: number): Map<string, DayEvents>;
|
|
41
|
+
/** stable per-day map key (local time) */
|
|
42
|
+
export declare function dayKey(date: Date): string;
|
|
43
|
+
/** true if `date` is strictly before today (day granularity) */
|
|
44
|
+
export declare function isPastDay(date: Date, today: Date): boolean;
|
|
45
|
+
/** Events laid out on a single day's hour timeline. */
|
|
46
|
+
export interface DayTimeline {
|
|
47
|
+
/** all-day events + events that cover the day without a concrete hour (e.g. multi-day) */
|
|
48
|
+
allDay: CalendarEvent[];
|
|
49
|
+
/** map of hour (0..23) → timed events starting in that hour, sorted by start time */
|
|
50
|
+
byHour: Map<number, CalendarEvent[]>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Split a day's events into an all-day bucket and per-hour buckets for the
|
|
54
|
+
* day timeline (`mode='day'`). An event is "timed" on `date` only when it
|
|
55
|
+
* actually starts on that calendar day and is not flagged `allDay`; its hour
|
|
56
|
+
* is clamped into [fromHour, toHour]. Everything else covering the day (all-day
|
|
57
|
+
* flagged, or multi-day events whose start falls on another day) goes to
|
|
58
|
+
* `allDay`. Pure: no DOM, no mutation of inputs.
|
|
59
|
+
*/
|
|
60
|
+
export declare function timelineForDay(events: readonly CalendarEvent[], date: Date, fromHour?: number, toHour?: number): DayTimeline;
|
|
61
|
+
/** re-export for convenience so the render layer imports calendar bits from one place */
|
|
62
|
+
export { isSameDay };
|
|
63
|
+
//# sourceMappingURL=calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,gBAAgB,CAAC;IACtB,8BAA8B;IAC9B,KAAK,EAAE,IAAI,CAAC;IACZ,4EAA4E;IAC5E,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,sEAAsE;AACtE,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,iDAAiD;IACjD,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAKxE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,IAAI,EAAE,IAAI,EACV,SAAS,SAAW,GACnB,SAAS,CAcX;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,IAAI,EAAE,SAAS,IAAI,EAAE,EACrB,SAAS,SAAW,GACnB,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAMxB;AAED,0CAA0C;AAC1C,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEzC;AAED,gEAAgE;AAChE,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAE1D;AAED,uDAAuD;AACvD,MAAM,WAAW,WAAW;IAC1B,0FAA0F;IAC1F,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,qFAAqF;IACrF,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;CACtC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,IAAI,EAAE,IAAI,EACV,QAAQ,SAAI,EACZ,MAAM,SAAK,GACV,WAAW,CA0Bb;AAED,yFAAyF;AACzF,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
package/dist/calendar.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createCalendar helpers — framework-agnostic month-view event grouping.
|
|
3
|
+
* Pure functions only; reuses date.ts grid math. No DOM, no framework deps.
|
|
4
|
+
* See specs/components/show/Calendar.spec.md §3 (month-view subset).
|
|
5
|
+
*/
|
|
6
|
+
import { isSameDay, startOfDay } from './date.js';
|
|
7
|
+
/** true if `date` falls within [start, end] (inclusive, day granularity). */
|
|
8
|
+
export function eventCoversDay(event, date) {
|
|
9
|
+
const day = startOfDay(date).getTime();
|
|
10
|
+
const start = startOfDay(event.start).getTime();
|
|
11
|
+
const end = startOfDay(event.end ?? event.start).getTime();
|
|
12
|
+
return day >= start && day <= end;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Group events onto a specific day, sorted by start time, capped at `maxPerDay`.
|
|
16
|
+
* Multi-day events appear on every day they cover.
|
|
17
|
+
*/
|
|
18
|
+
export function eventsForDay(events, date, maxPerDay = Infinity) {
|
|
19
|
+
const total = events
|
|
20
|
+
.filter((e) => eventCoversDay(e, date))
|
|
21
|
+
.slice()
|
|
22
|
+
.sort((a, b) => {
|
|
23
|
+
// all-day events first, then by start time, then stable by key string
|
|
24
|
+
if (!!a.allDay !== !!b.allDay)
|
|
25
|
+
return a.allDay ? -1 : 1;
|
|
26
|
+
const d = a.start.getTime() - b.start.getTime();
|
|
27
|
+
if (d !== 0)
|
|
28
|
+
return d;
|
|
29
|
+
return String(a.key).localeCompare(String(b.key));
|
|
30
|
+
});
|
|
31
|
+
const cap = maxPerDay < 0 ? 0 : maxPerDay;
|
|
32
|
+
const visible = total.slice(0, cap);
|
|
33
|
+
return { visible, total, overflow: Math.max(0, total.length - visible.length) };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build a map (keyed by `YYYY-M-D`) of events-per-day for a set of cells,
|
|
37
|
+
* so the render layer can look up each grid cell in O(1).
|
|
38
|
+
*/
|
|
39
|
+
export function groupEventsByDays(events, days, maxPerDay = Infinity) {
|
|
40
|
+
const map = new Map();
|
|
41
|
+
for (const date of days) {
|
|
42
|
+
map.set(dayKey(date), eventsForDay(events, date, maxPerDay));
|
|
43
|
+
}
|
|
44
|
+
return map;
|
|
45
|
+
}
|
|
46
|
+
/** stable per-day map key (local time) */
|
|
47
|
+
export function dayKey(date) {
|
|
48
|
+
return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;
|
|
49
|
+
}
|
|
50
|
+
/** true if `date` is strictly before today (day granularity) */
|
|
51
|
+
export function isPastDay(date, today) {
|
|
52
|
+
return startOfDay(date).getTime() < startOfDay(today).getTime();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Split a day's events into an all-day bucket and per-hour buckets for the
|
|
56
|
+
* day timeline (`mode='day'`). An event is "timed" on `date` only when it
|
|
57
|
+
* actually starts on that calendar day and is not flagged `allDay`; its hour
|
|
58
|
+
* is clamped into [fromHour, toHour]. Everything else covering the day (all-day
|
|
59
|
+
* flagged, or multi-day events whose start falls on another day) goes to
|
|
60
|
+
* `allDay`. Pure: no DOM, no mutation of inputs.
|
|
61
|
+
*/
|
|
62
|
+
export function timelineForDay(events, date, fromHour = 0, toHour = 23) {
|
|
63
|
+
const lo = Math.max(0, Math.min(23, Math.floor(fromHour)));
|
|
64
|
+
const hi = Math.max(lo, Math.min(23, Math.floor(toHour)));
|
|
65
|
+
const covering = events.filter((e) => eventCoversDay(e, date));
|
|
66
|
+
const allDay = [];
|
|
67
|
+
const timed = [];
|
|
68
|
+
for (const e of covering) {
|
|
69
|
+
if (e.allDay || !isSameDay(e.start, date)) {
|
|
70
|
+
allDay.push(e);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const hour = Math.max(lo, Math.min(hi, e.start.getHours()));
|
|
74
|
+
timed.push({ hour, event: e });
|
|
75
|
+
}
|
|
76
|
+
timed.sort((a, b) => {
|
|
77
|
+
const d = a.event.start.getTime() - b.event.start.getTime();
|
|
78
|
+
if (d !== 0)
|
|
79
|
+
return d;
|
|
80
|
+
return String(a.event.key).localeCompare(String(b.event.key));
|
|
81
|
+
});
|
|
82
|
+
const byHour = new Map();
|
|
83
|
+
for (const { hour, event } of timed) {
|
|
84
|
+
const list = byHour.get(hour);
|
|
85
|
+
if (list)
|
|
86
|
+
list.push(event);
|
|
87
|
+
else
|
|
88
|
+
byHour.set(hour, [event]);
|
|
89
|
+
}
|
|
90
|
+
return { allDay, byHour };
|
|
91
|
+
}
|
|
92
|
+
/** re-export for convenience so the render layer imports calendar bits from one place */
|
|
93
|
+
export { isSameDay };
|
|
94
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.test.d.ts","sourceRoot":"","sources":["../src/calendar.test.ts"],"names":[],"mappings":""}
|