@chenzy-design/core 0.2.1 → 0.4.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/dist/ai-chat-dialogue.d.ts +300 -0
- package/dist/ai-chat-dialogue.d.ts.map +1 -0
- package/dist/ai-chat-dialogue.js +699 -0
- package/dist/ai-chat-dialogue.js.map +1 -0
- package/dist/ai-chat-dialogue.test.d.ts +2 -0
- package/dist/ai-chat-dialogue.test.d.ts.map +1 -0
- package/dist/ai-chat-dialogue.test.js +338 -0
- package/dist/ai-chat-dialogue.test.js.map +1 -0
- package/dist/ai-chat-input.d.ts +191 -0
- package/dist/ai-chat-input.d.ts.map +1 -0
- package/dist/ai-chat-input.js +274 -0
- package/dist/ai-chat-input.js.map +1 -0
- package/dist/ai-chat-input.test.d.ts +2 -0
- package/dist/ai-chat-input.test.d.ts.map +1 -0
- package/dist/ai-chat-input.test.js +339 -0
- package/dist/ai-chat-input.test.js.map +1 -0
- package/dist/audio-player.d.ts +154 -0
- package/dist/audio-player.d.ts.map +1 -0
- package/dist/audio-player.js +254 -0
- package/dist/audio-player.js.map +1 -0
- package/dist/audio-player.test.d.ts +2 -0
- package/dist/audio-player.test.d.ts.map +1 -0
- package/dist/audio-player.test.js +275 -0
- package/dist/audio-player.test.js.map +1 -0
- package/dist/back-top.d.ts +4 -1
- package/dist/back-top.d.ts.map +1 -1
- package/dist/back-top.js +5 -2
- package/dist/back-top.js.map +1 -1
- package/dist/back-top.test.js +3 -2
- package/dist/back-top.test.js.map +1 -1
- package/dist/calendar.d.ts +132 -44
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +413 -70
- package/dist/calendar.js.map +1 -1
- package/dist/calendar.test.js +160 -76
- package/dist/calendar.test.js.map +1 -1
- package/dist/chat.d.ts +172 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +210 -0
- package/dist/chat.js.map +1 -0
- package/dist/chat.test.d.ts +2 -0
- package/dist/chat.test.d.ts.map +1 -0
- package/dist/chat.test.js +181 -0
- package/dist/chat.test.js.map +1 -0
- package/dist/code-highlight.d.ts +30 -0
- package/dist/code-highlight.d.ts.map +1 -0
- package/dist/code-highlight.js +37 -0
- package/dist/code-highlight.js.map +1 -0
- package/dist/code-highlight.test.d.ts +2 -0
- package/dist/code-highlight.test.d.ts.map +1 -0
- package/dist/code-highlight.test.js +36 -0
- package/dist/code-highlight.test.js.map +1 -0
- package/dist/collapsible.d.ts +41 -0
- package/dist/collapsible.d.ts.map +1 -0
- package/dist/collapsible.js +33 -0
- package/dist/collapsible.js.map +1 -0
- package/dist/collapsible.test.d.ts +2 -0
- package/dist/collapsible.test.d.ts.map +1 -0
- package/dist/collapsible.test.js +57 -0
- package/dist/collapsible.test.js.map +1 -0
- package/dist/color-value.d.ts +60 -0
- package/dist/color-value.d.ts.map +1 -0
- package/dist/color-value.js +165 -0
- package/dist/color-value.js.map +1 -0
- package/dist/color-value.test.d.ts +2 -0
- package/dist/color-value.test.d.ts.map +1 -0
- package/dist/color-value.test.js +104 -0
- package/dist/color-value.test.js.map +1 -0
- package/dist/config-provider.d.ts +76 -37
- package/dist/config-provider.d.ts.map +1 -1
- package/dist/config-provider.js +107 -32
- package/dist/config-provider.js.map +1 -1
- package/dist/config-provider.test.js +123 -60
- package/dist/config-provider.test.js.map +1 -1
- package/dist/cropper.d.ts +164 -0
- package/dist/cropper.d.ts.map +1 -0
- package/dist/cropper.js +841 -0
- package/dist/cropper.js.map +1 -0
- package/dist/cropper.test.d.ts +2 -0
- package/dist/cropper.test.d.ts.map +1 -0
- package/dist/cropper.test.js +259 -0
- package/dist/cropper.test.js.map +1 -0
- package/dist/drag-move.d.ts +119 -0
- package/dist/drag-move.d.ts.map +1 -0
- package/dist/drag-move.js +237 -0
- package/dist/drag-move.js.map +1 -0
- package/dist/drag-move.test.d.ts +2 -0
- package/dist/drag-move.test.d.ts.map +1 -0
- package/dist/drag-move.test.js +304 -0
- package/dist/drag-move.test.js.map +1 -0
- package/dist/editable.d.ts +24 -4
- package/dist/editable.d.ts.map +1 -1
- package/dist/editable.js +18 -0
- package/dist/editable.js.map +1 -1
- package/dist/editable.test.js +55 -2
- package/dist/editable.test.js.map +1 -1
- package/dist/ellipsis.d.ts +13 -0
- package/dist/ellipsis.d.ts.map +1 -1
- package/dist/ellipsis.js +36 -0
- package/dist/ellipsis.js.map +1 -1
- package/dist/ellipsis.test.js +37 -1
- package/dist/ellipsis.test.js.map +1 -1
- package/dist/form-path.d.ts +19 -0
- package/dist/form-path.d.ts.map +1 -0
- package/dist/form-path.js +97 -0
- package/dist/form-path.js.map +1 -0
- package/dist/form-path.test.d.ts +2 -0
- package/dist/form-path.test.d.ts.map +1 -0
- package/dist/form-path.test.js +57 -0
- package/dist/form-path.test.js.map +1 -0
- package/dist/form-validate.d.ts +13 -0
- package/dist/form-validate.d.ts.map +1 -0
- package/dist/form-validate.js +204 -0
- package/dist/form-validate.js.map +1 -0
- package/dist/form.d.ts +91 -18
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +170 -115
- package/dist/form.js.map +1 -1
- package/dist/form.test.js +349 -76
- package/dist/form.test.js.map +1 -1
- package/dist/highlight.d.ts +42 -32
- package/dist/highlight.d.ts.map +1 -1
- package/dist/highlight.js +67 -41
- package/dist/highlight.js.map +1 -1
- package/dist/highlight.test.js +73 -32
- package/dist/highlight.test.js.map +1 -1
- package/dist/hotkeys.d.ts +151 -0
- package/dist/hotkeys.d.ts.map +1 -0
- package/dist/hotkeys.js +188 -0
- package/dist/hotkeys.js.map +1 -0
- package/dist/hotkeys.test.d.ts +2 -0
- package/dist/hotkeys.test.d.ts.map +1 -0
- package/dist/hotkeys.test.js +170 -0
- package/dist/hotkeys.test.js.map +1 -0
- package/dist/index.d.ts +33 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -13
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +34 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +54 -0
- package/dist/input.js.map +1 -0
- package/dist/input.test.d.ts +2 -0
- package/dist/input.test.d.ts.map +1 -0
- package/dist/input.test.js +56 -0
- package/dist/input.test.js.map +1 -0
- package/dist/markdown-render.d.ts +49 -0
- package/dist/markdown-render.d.ts.map +1 -0
- package/dist/markdown-render.js +61 -0
- package/dist/markdown-render.js.map +1 -0
- package/dist/markdown-render.test.d.ts +2 -0
- package/dist/markdown-render.test.d.ts.map +1 -0
- package/dist/markdown-render.test.js +106 -0
- package/dist/markdown-render.test.js.map +1 -0
- package/dist/notification.d.ts +40 -31
- package/dist/notification.d.ts.map +1 -1
- package/dist/notification.js +86 -70
- package/dist/notification.js.map +1 -1
- package/dist/notification.test.js +62 -39
- package/dist/notification.test.js.map +1 -1
- package/dist/numeral.d.ts +32 -0
- package/dist/numeral.d.ts.map +1 -0
- package/dist/numeral.js +67 -0
- package/dist/numeral.js.map +1 -0
- package/dist/numeral.test.d.ts +2 -0
- package/dist/numeral.test.d.ts.map +1 -0
- package/dist/numeral.test.js +59 -0
- package/dist/numeral.test.js.map +1 -0
- package/dist/overflow-list.d.ts +9 -40
- package/dist/overflow-list.d.ts.map +1 -1
- package/dist/overflow-list.js +9 -70
- package/dist/overflow-list.js.map +1 -1
- package/dist/overflow-list.test.js +1 -122
- package/dist/overflow-list.test.js.map +1 -1
- package/dist/pagination.d.ts +17 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +48 -0
- package/dist/pagination.js.map +1 -1
- package/dist/pagination.test.js +40 -1
- package/dist/pagination.test.js.map +1 -1
- package/dist/pincode.d.ts +79 -0
- package/dist/pincode.d.ts.map +1 -0
- package/dist/pincode.js +119 -0
- package/dist/pincode.js.map +1 -0
- package/dist/pincode.test.d.ts +2 -0
- package/dist/pincode.test.d.ts.map +1 -0
- package/dist/pincode.test.js +151 -0
- package/dist/pincode.test.js.map +1 -0
- package/dist/progress.d.ts +32 -30
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +257 -64
- package/dist/progress.js.map +1 -1
- package/dist/progress.test.js +50 -47
- package/dist/progress.test.js.map +1 -1
- package/dist/resizable.d.ts +200 -0
- package/dist/resizable.d.ts.map +1 -0
- package/dist/resizable.js +329 -0
- package/dist/resizable.js.map +1 -0
- package/dist/resizable.test.d.ts +2 -0
- package/dist/resizable.test.d.ts.map +1 -0
- package/dist/resizable.test.js +302 -0
- package/dist/resizable.test.js.map +1 -0
- package/dist/scroll-list.d.ts +69 -62
- package/dist/scroll-list.d.ts.map +1 -1
- package/dist/scroll-list.js +103 -144
- package/dist/scroll-list.js.map +1 -1
- package/dist/scroll-list.test.js +100 -110
- package/dist/scroll-list.test.js.map +1 -1
- package/dist/sidebar.d.ts +46 -0
- package/dist/sidebar.d.ts.map +1 -0
- package/dist/sidebar.js +65 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/sidebar.test.d.ts +2 -0
- package/dist/sidebar.test.d.ts.map +1 -0
- package/dist/sidebar.test.js +88 -0
- package/dist/sidebar.test.js.map +1 -0
- package/dist/spin.d.ts +5 -5
- package/dist/spin.d.ts.map +1 -1
- package/dist/spin.js +13 -39
- package/dist/spin.js.map +1 -1
- package/dist/spin.test.js +2 -26
- package/dist/spin.test.js.map +1 -1
- package/dist/toast.d.ts +33 -30
- package/dist/toast.d.ts.map +1 -1
- package/dist/toast.js +77 -72
- package/dist/toast.js.map +1 -1
- package/dist/toast.test.js +63 -37
- package/dist/toast.test.js.map +1 -1
- package/dist/tree.d.ts +22 -5
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +61 -9
- package/dist/tree.js.map +1 -1
- package/dist/tree.test.js +72 -1
- package/dist/tree.test.js.map +1 -1
- package/dist/user-guide.d.ts +73 -0
- package/dist/user-guide.d.ts.map +1 -0
- package/dist/user-guide.js +95 -0
- package/dist/user-guide.js.map +1 -0
- package/dist/user-guide.test.d.ts +2 -0
- package/dist/user-guide.test.d.ts.map +1 -0
- package/dist/user-guide.test.js +109 -0
- package/dist/user-guide.test.js.map +1 -0
- package/dist/video-player.d.ts +196 -0
- package/dist/video-player.d.ts.map +1 -0
- package/dist/video-player.js +461 -0
- package/dist/video-player.js.map +1 -0
- package/dist/video-player.test.d.ts +2 -0
- package/dist/video-player.test.d.ts.map +1 -0
- package/dist/video-player.test.js +435 -0
- package/dist/video-player.test.js.map +1 -0
- package/package.json +17 -1
- package/dist/banner.d.ts +0 -19
- package/dist/banner.d.ts.map +0 -1
- package/dist/banner.js +0 -20
- package/dist/banner.js.map +0 -1
- package/dist/banner.test.d.ts +0 -2
- package/dist/banner.test.d.ts.map +0 -1
- package/dist/banner.test.js +0 -29
- package/dist/banner.test.js.map +0 -1
- package/dist/breakpoints.d.ts +0 -30
- package/dist/breakpoints.d.ts.map +0 -1
- package/dist/breakpoints.js +0 -45
- package/dist/breakpoints.js.map +0 -1
- package/dist/breakpoints.test.d.ts +0 -2
- package/dist/breakpoints.test.d.ts.map +0 -1
- package/dist/breakpoints.test.js +0 -46
- package/dist/breakpoints.test.js.map +0 -1
- package/dist/lottie-icon.d.ts +0 -88
- package/dist/lottie-icon.d.ts.map +0 -1
- package/dist/lottie-icon.js +0 -84
- package/dist/lottie-icon.js.map +0 -1
- package/dist/lottie-icon.test.d.ts +0 -2
- package/dist/lottie-icon.test.d.ts.map +0 -1
- package/dist/lottie-icon.test.js +0 -88
- package/dist/lottie-icon.test.js.map +0 -1
- package/dist/sider.d.ts +0 -26
- package/dist/sider.d.ts.map +0 -1
- package/dist/sider.js +0 -55
- package/dist/sider.js.map +0 -1
- package/dist/sider.test.d.ts +0 -2
- package/dist/sider.test.d.ts.map +0 -1
- package/dist/sider.test.js +0 -29
- package/dist/sider.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification.test.js","sourceRoot":"","sources":["../src/notification.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IAEpC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"notification.test.js","sourceRoot":"","sources":["../src/notification.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IAEpC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvB,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACvC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAE,CAAC;QAC9B,wCAAwC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACZ,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACX,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACZ,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACZ,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACb,6BAA6B;QAC7B,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,CAAC,GAAG,uBAAuB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAC/F,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* numeral — framework-agnostic number-formatting for Typography.Numeral
|
|
3
|
+
* (aligned to Semi Typography Numeral). Scans a text string for numeric tokens
|
|
4
|
+
* and rewrites each according to `rule` + `precision` + `truncate`, or hands the
|
|
5
|
+
* whole string to a custom `parser`. No framework deps.
|
|
6
|
+
*
|
|
7
|
+
* See specs/components/basic/Typography.spec.md.
|
|
8
|
+
*/
|
|
9
|
+
/** Parse rule (aligned to Semi). */
|
|
10
|
+
export type NumeralRule = 'text' | 'numbers' | 'bytes-decimal' | 'bytes-binary' | 'percentages' | 'exponential';
|
|
11
|
+
/** Rounding mode for the retained decimal places. */
|
|
12
|
+
export type NumeralTruncate = 'ceil' | 'floor' | 'round';
|
|
13
|
+
export interface NumeralOptions {
|
|
14
|
+
rule?: NumeralRule;
|
|
15
|
+
/** Decimal places to keep. */
|
|
16
|
+
precision?: number;
|
|
17
|
+
/** How to round the kept decimals (Math.ceil/floor/round). */
|
|
18
|
+
truncate?: NumeralTruncate;
|
|
19
|
+
/** Custom parser — takes precedence over `rule`. */
|
|
20
|
+
parser?: (raw: string) => string;
|
|
21
|
+
}
|
|
22
|
+
/** Round `n` to `precision` decimals using the given truncate mode. */
|
|
23
|
+
export declare function roundTo(n: number, precision: number, truncate: NumeralTruncate): number;
|
|
24
|
+
/** Format a single number per rule/precision/truncate. */
|
|
25
|
+
export declare function formatNumber(n: number, rule: NumeralRule, precision: number, truncate: NumeralTruncate): string;
|
|
26
|
+
/**
|
|
27
|
+
* formatNumeral — rewrite every numeric token in `text` per the options.
|
|
28
|
+
* `rule: 'numbers'` keeps only the numbers (drops surrounding non-numeric text);
|
|
29
|
+
* all other rules rewrite numbers in place. `parser` overrides everything.
|
|
30
|
+
*/
|
|
31
|
+
export declare function formatNumeral(text: string, options?: NumeralOptions): string;
|
|
32
|
+
//# sourceMappingURL=numeral.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numeral.d.ts","sourceRoot":"","sources":["../src/numeral.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oCAAoC;AACpC,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,SAAS,GACT,eAAe,GACf,cAAc,GACd,aAAa,GACb,aAAa,CAAC;AAElB,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,oDAAoD;IACpD,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CAClC;AAKD,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAIvF;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAC1B,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,MAAM,CA8BR;AAKD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,CAWhF"}
|
package/dist/numeral.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* numeral — framework-agnostic number-formatting for Typography.Numeral
|
|
3
|
+
* (aligned to Semi Typography Numeral). Scans a text string for numeric tokens
|
|
4
|
+
* and rewrites each according to `rule` + `precision` + `truncate`, or hands the
|
|
5
|
+
* whole string to a custom `parser`. No framework deps.
|
|
6
|
+
*
|
|
7
|
+
* See specs/components/basic/Typography.spec.md.
|
|
8
|
+
*/
|
|
9
|
+
const BYTES_DECIMAL_UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
10
|
+
const BYTES_BINARY_UNITS = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];
|
|
11
|
+
/** Round `n` to `precision` decimals using the given truncate mode. */
|
|
12
|
+
export function roundTo(n, precision, truncate) {
|
|
13
|
+
const factor = Math.pow(10, precision);
|
|
14
|
+
const fn = truncate === 'ceil' ? Math.ceil : truncate === 'floor' ? Math.floor : Math.round;
|
|
15
|
+
return fn(n * factor) / factor;
|
|
16
|
+
}
|
|
17
|
+
/** Format a single number per rule/precision/truncate. */
|
|
18
|
+
export function formatNumber(n, rule, precision, truncate) {
|
|
19
|
+
switch (rule) {
|
|
20
|
+
case 'percentages': {
|
|
21
|
+
const v = roundTo(n * 100, precision, truncate);
|
|
22
|
+
return `${v.toFixed(precision)}%`;
|
|
23
|
+
}
|
|
24
|
+
case 'exponential': {
|
|
25
|
+
return n.toExponential(precision);
|
|
26
|
+
}
|
|
27
|
+
case 'bytes-decimal':
|
|
28
|
+
case 'bytes-binary': {
|
|
29
|
+
const base = rule === 'bytes-decimal' ? 1000 : 1024;
|
|
30
|
+
const units = rule === 'bytes-decimal' ? BYTES_DECIMAL_UNITS : BYTES_BINARY_UNITS;
|
|
31
|
+
const neg = n < 0;
|
|
32
|
+
let v = Math.abs(n);
|
|
33
|
+
let i = 0;
|
|
34
|
+
while (v >= base && i < units.length - 1) {
|
|
35
|
+
v /= base;
|
|
36
|
+
i += 1;
|
|
37
|
+
}
|
|
38
|
+
const rounded = roundTo(v, precision, truncate);
|
|
39
|
+
return `${neg ? '-' : ''}${rounded.toFixed(precision)} ${units[i]}`;
|
|
40
|
+
}
|
|
41
|
+
case 'numbers':
|
|
42
|
+
case 'text':
|
|
43
|
+
default: {
|
|
44
|
+
const v = roundTo(n, precision, truncate);
|
|
45
|
+
return v.toFixed(precision);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Matches a numeric token, including scientific notation (e.g. 1.6111e1) and sign.
|
|
50
|
+
const NUMBER_RE = /-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g;
|
|
51
|
+
/**
|
|
52
|
+
* formatNumeral — rewrite every numeric token in `text` per the options.
|
|
53
|
+
* `rule: 'numbers'` keeps only the numbers (drops surrounding non-numeric text);
|
|
54
|
+
* all other rules rewrite numbers in place. `parser` overrides everything.
|
|
55
|
+
*/
|
|
56
|
+
export function formatNumeral(text, options = {}) {
|
|
57
|
+
const { rule = 'text', precision = 0, truncate = 'round', parser } = options;
|
|
58
|
+
if (parser)
|
|
59
|
+
return parser(text);
|
|
60
|
+
if (rule === 'numbers') {
|
|
61
|
+
// Extract numbers only, formatted, comma-joined (对齐 Semi formatNumeral: join(',')).
|
|
62
|
+
const nums = text.match(NUMBER_RE) ?? [];
|
|
63
|
+
return nums.map((m) => formatNumber(Number(m), 'numbers', precision, truncate)).join(',');
|
|
64
|
+
}
|
|
65
|
+
return text.replace(NUMBER_RE, (m) => formatNumber(Number(m), rule, precision, truncate));
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=numeral.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numeral.js","sourceRoot":"","sources":["../src/numeral.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numeral.test.d.ts","sourceRoot":"","sources":["../src/numeral.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { formatNumeral, formatNumber, roundTo } from './numeral.js';
|
|
3
|
+
describe('roundTo', () => {
|
|
4
|
+
it('rounds/floors/ceils to precision', () => {
|
|
5
|
+
expect(roundTo(1.2345, 2, 'round')).toBe(1.23);
|
|
6
|
+
expect(roundTo(1.2355, 2, 'round')).toBe(1.24);
|
|
7
|
+
expect(roundTo(1.239, 2, 'floor')).toBe(1.23);
|
|
8
|
+
expect(roundTo(1.231, 2, 'ceil')).toBe(1.24);
|
|
9
|
+
expect(roundTo(1.9, 0, 'floor')).toBe(1);
|
|
10
|
+
expect(roundTo(1.1, 0, 'ceil')).toBe(2);
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
describe('formatNumber — rules', () => {
|
|
14
|
+
it('text: rounds to precision', () => {
|
|
15
|
+
expect(formatNumber(16.111, 'text', 1, 'round')).toBe('16.1');
|
|
16
|
+
expect(formatNumber(16.111, 'text', 0, 'round')).toBe('16');
|
|
17
|
+
});
|
|
18
|
+
it('percentages: ×100 + %', () => {
|
|
19
|
+
expect(formatNumber(0.915, 'percentages', 2, 'round')).toBe('91.50%');
|
|
20
|
+
expect(formatNumber(0.6, 'percentages', 0, 'round')).toBe('60%');
|
|
21
|
+
});
|
|
22
|
+
it('exponential: scientific notation', () => {
|
|
23
|
+
expect(formatNumber(1000, 'exponential', 1, 'round')).toBe('1.0e+3');
|
|
24
|
+
});
|
|
25
|
+
it('bytes-decimal: 1KB = 1000B', () => {
|
|
26
|
+
expect(formatNumber(1000, 'bytes-decimal', 2, 'floor')).toBe('1.00 KB');
|
|
27
|
+
expect(formatNumber(1_500_000, 'bytes-decimal', 2, 'floor')).toBe('1.50 MB');
|
|
28
|
+
});
|
|
29
|
+
it('bytes-binary: 1KiB = 1024B', () => {
|
|
30
|
+
expect(formatNumber(1024, 'bytes-binary', 2, 'floor')).toBe('1.00 KiB');
|
|
31
|
+
expect(formatNumber(1024 * 1024, 'bytes-binary', 2, 'floor')).toBe('1.00 MiB');
|
|
32
|
+
});
|
|
33
|
+
it('bytes: negative preserved', () => {
|
|
34
|
+
expect(formatNumber(-2000, 'bytes-decimal', 1, 'floor')).toBe('-2.0 KB');
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('formatNumeral — text scanning', () => {
|
|
38
|
+
it('rewrites numbers in place (text rule)', () => {
|
|
39
|
+
expect(formatNumeral('点赞量:1.6111e1 K', { precision: 1 })).toBe('点赞量:16.1 K');
|
|
40
|
+
});
|
|
41
|
+
it('percentages in sentence', () => {
|
|
42
|
+
expect(formatNumeral('胜率是0.6,输的概率是0.4', { rule: 'percentages' })).toBe('胜率是60%,输的概率是40%');
|
|
43
|
+
});
|
|
44
|
+
it('numbers rule keeps only numbers', () => {
|
|
45
|
+
expect(formatNumeral('2.4444e2', { rule: 'numbers', precision: 1 })).toBe('244.4');
|
|
46
|
+
expect(formatNumeral('a 12 b 34', { rule: 'numbers', precision: 0 })).toBe('12,34');
|
|
47
|
+
});
|
|
48
|
+
it('bytes-decimal in sentence', () => {
|
|
49
|
+
expect(formatNumeral('已使用: 1000', { rule: 'bytes-decimal', precision: 2, truncate: 'floor' })).toBe('已使用: 1.00 KB');
|
|
50
|
+
});
|
|
51
|
+
it('custom parser overrides rule', () => {
|
|
52
|
+
const parser = (s) => s.replace(/\d+/g, (m) => `${m}+`);
|
|
53
|
+
expect(formatNumeral('7100 stars', { parser, rule: 'percentages' })).toBe('7100+ stars');
|
|
54
|
+
});
|
|
55
|
+
it('no numbers → unchanged (text rule)', () => {
|
|
56
|
+
expect(formatNumeral('no digits here', {})).toBe('no digits here');
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=numeral.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numeral.test.js","sourceRoot":"","sources":["../src/numeral.test.ts"],"names":[],"mappings":"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"}
|
package/dist/overflow-list.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* no framework deps, no internal mutable state
|
|
6
|
-
*
|
|
7
|
-
* The
|
|
8
|
-
*
|
|
9
|
-
* `
|
|
2
|
+
* Overflow-collapse math — framework-agnostic pure functions.
|
|
3
|
+
* Given measured item/tab widths + container width, compute how many leading
|
|
4
|
+
* items fit before the rest collapse into a "+N" (OverflowList) or "more"
|
|
5
|
+
* dropdown (Tabs) node. No DOM, no framework deps, no internal mutable state.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: The Svelte OverflowList strictly mirrors Semi and measures/collapses
|
|
8
|
+
* inline (per-item ResizeObserver accumulation), so it no longer consumes these
|
|
9
|
+
* helpers. `computeVisibleCount` is retained only as the shared leading-fit core
|
|
10
|
+
* for `computeTabOverflow` (Tabs dropdown-overflow).
|
|
10
11
|
*/
|
|
11
12
|
export interface OverflowComputeInput {
|
|
12
13
|
/** measured main-axis size of each item, in document order */
|
|
@@ -34,32 +35,6 @@ export interface OverflowComputeResult {
|
|
|
34
35
|
* possible. `alwaysVisible` indexes and `minVisibleItems` raise the floor.
|
|
35
36
|
*/
|
|
36
37
|
export declare function computeVisibleCount(input: OverflowComputeInput): OverflowComputeResult;
|
|
37
|
-
/** which end the overflow node collapses from: trailing (`end`) or leading (`start`) */
|
|
38
|
-
export type CollapseFrom = 'end' | 'start';
|
|
39
|
-
export interface OverflowPartitionInput extends OverflowComputeInput {
|
|
40
|
-
/** collapse trailing items (`end`, default) or leading items (`start`) */
|
|
41
|
-
collapseFrom?: CollapseFrom;
|
|
42
|
-
}
|
|
43
|
-
export interface OverflowPartitionResult extends OverflowComputeResult {
|
|
44
|
-
/** indexes rendered visibly, in document order */
|
|
45
|
-
visibleIndexes: number[];
|
|
46
|
-
/** indexes collapsed into the overflow node, in document order */
|
|
47
|
-
overflowIndexes: number[];
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Partition items into visible + overflow honoring `collapseFrom`. The fit math
|
|
51
|
-
* is direction-agnostic (the svelte layer feeds the main-axis sizes regardless
|
|
52
|
-
* of horizontal/vertical), so the same {@link computeVisibleCount} drives both
|
|
53
|
-
* ends — for `start` we mirror the size array, fit the same number of items, and
|
|
54
|
-
* map the kept window back to the trailing positions.
|
|
55
|
-
*
|
|
56
|
-
* `end` → visible = leading [0..k), overflow = trailing [k..count)
|
|
57
|
-
* `start`→ visible = trailing [count-k..count), overflow = leading [0..count-k)
|
|
58
|
-
*
|
|
59
|
-
* `alwaysVisible` indexes and `minVisibleItems` raise the visible-count floor in
|
|
60
|
-
* both directions (mirrored for `start`).
|
|
61
|
-
*/
|
|
62
|
-
export declare function computeOverflowPartition(input: OverflowPartitionInput): OverflowPartitionResult;
|
|
63
38
|
/**
|
|
64
39
|
* Tabs dropdown-overflow partition input. Given measured tab sizes + the bar's
|
|
65
40
|
* available main-axis size, decide which leading tabs render inline and which
|
|
@@ -93,10 +68,4 @@ export interface TabOverflowResult {
|
|
|
93
68
|
* landed in the overflow set.
|
|
94
69
|
*/
|
|
95
70
|
export declare function computeTabOverflow(input: TabOverflowInput): TabOverflowResult;
|
|
96
|
-
/**
|
|
97
|
-
* Apply hysteresis: keep the previous visibleCount unless the new computation
|
|
98
|
-
* differs by enough to cross the threshold band, preventing flicker at the
|
|
99
|
-
* boundary width. Returns the count to actually render.
|
|
100
|
-
*/
|
|
101
|
-
export declare function applyHysteresis(prev: number, next: number, prevContainerSize: number, containerSize: number, threshold: number): number;
|
|
102
71
|
//# sourceMappingURL=overflow-list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overflow-list.d.ts","sourceRoot":"","sources":["../src/overflow-list.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"overflow-list.d.ts","sourceRoot":"","sources":["../src/overflow-list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,oBAAoB;IACnC,8DAA8D;IAC9D,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;CACvB;AAWD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAsCtF;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,wEAAwE;IACxE,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAqC7E"}
|
package/dist/overflow-list.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* no framework deps, no internal mutable state
|
|
6
|
-
*
|
|
7
|
-
* The
|
|
8
|
-
*
|
|
9
|
-
* `
|
|
2
|
+
* Overflow-collapse math — framework-agnostic pure functions.
|
|
3
|
+
* Given measured item/tab widths + container width, compute how many leading
|
|
4
|
+
* items fit before the rest collapse into a "+N" (OverflowList) or "more"
|
|
5
|
+
* dropdown (Tabs) node. No DOM, no framework deps, no internal mutable state.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: The Svelte OverflowList strictly mirrors Semi and measures/collapses
|
|
8
|
+
* inline (per-item ResizeObserver accumulation), so it no longer consumes these
|
|
9
|
+
* helpers. `computeVisibleCount` is retained only as the shared leading-fit core
|
|
10
|
+
* for `computeTabOverflow` (Tabs dropdown-overflow).
|
|
10
11
|
*/
|
|
11
12
|
/** sum of `n` item sizes plus the gaps between them */
|
|
12
13
|
function rowWidth(sizes, n, gap) {
|
|
@@ -52,55 +53,6 @@ export function computeVisibleCount(input) {
|
|
|
52
53
|
return { visibleCount: count, overflowCount: 0 };
|
|
53
54
|
return { visibleCount: visible, overflowCount: count - visible };
|
|
54
55
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Partition items into visible + overflow honoring `collapseFrom`. The fit math
|
|
57
|
-
* is direction-agnostic (the svelte layer feeds the main-axis sizes regardless
|
|
58
|
-
* of horizontal/vertical), so the same {@link computeVisibleCount} drives both
|
|
59
|
-
* ends — for `start` we mirror the size array, fit the same number of items, and
|
|
60
|
-
* map the kept window back to the trailing positions.
|
|
61
|
-
*
|
|
62
|
-
* `end` → visible = leading [0..k), overflow = trailing [k..count)
|
|
63
|
-
* `start`→ visible = trailing [count-k..count), overflow = leading [0..count-k)
|
|
64
|
-
*
|
|
65
|
-
* `alwaysVisible` indexes and `minVisibleItems` raise the visible-count floor in
|
|
66
|
-
* both directions (mirrored for `start`).
|
|
67
|
-
*/
|
|
68
|
-
export function computeOverflowPartition(input) {
|
|
69
|
-
const { itemSizes, collapseFrom = 'end', alwaysVisible = [] } = input;
|
|
70
|
-
const count = itemSizes.length;
|
|
71
|
-
if (collapseFrom === 'end') {
|
|
72
|
-
const { visibleCount, overflowCount } = computeVisibleCount(input);
|
|
73
|
-
const visibleIndexes = [];
|
|
74
|
-
const overflowIndexes = [];
|
|
75
|
-
for (let i = 0; i < count; i += 1) {
|
|
76
|
-
if (i < visibleCount)
|
|
77
|
-
visibleIndexes.push(i);
|
|
78
|
-
else
|
|
79
|
-
overflowIndexes.push(i);
|
|
80
|
-
}
|
|
81
|
-
return { visibleCount, overflowCount, visibleIndexes, overflowIndexes };
|
|
82
|
-
}
|
|
83
|
-
// start: mirror so the same leading-fit math keeps the *trailing* window.
|
|
84
|
-
const mirroredSizes = [...itemSizes].reverse();
|
|
85
|
-
// mirror alwaysVisible indexes too (i → count-1-i).
|
|
86
|
-
const mirroredAlways = alwaysVisible.map((i) => count - 1 - i);
|
|
87
|
-
const { visibleCount } = computeVisibleCount({
|
|
88
|
-
...input,
|
|
89
|
-
itemSizes: mirroredSizes,
|
|
90
|
-
alwaysVisible: mirroredAlways,
|
|
91
|
-
});
|
|
92
|
-
const overflowCount = count - visibleCount;
|
|
93
|
-
const firstVisible = overflowCount; // [overflowCount .. count) stay visible
|
|
94
|
-
const visibleIndexes = [];
|
|
95
|
-
const overflowIndexes = [];
|
|
96
|
-
for (let i = 0; i < count; i += 1) {
|
|
97
|
-
if (i < firstVisible)
|
|
98
|
-
overflowIndexes.push(i);
|
|
99
|
-
else
|
|
100
|
-
visibleIndexes.push(i);
|
|
101
|
-
}
|
|
102
|
-
return { visibleCount, overflowCount, visibleIndexes, overflowIndexes };
|
|
103
|
-
}
|
|
104
56
|
/**
|
|
105
57
|
* Partition tabs into visible (inline) and overflow (collapsed into "more").
|
|
106
58
|
* Reuses {@link computeVisibleCount} for the leading-fit math, then guarantees
|
|
@@ -143,17 +95,4 @@ export function computeTabOverflow(input) {
|
|
|
143
95
|
}
|
|
144
96
|
return { visibleIndexes, overflowIndexes };
|
|
145
97
|
}
|
|
146
|
-
/**
|
|
147
|
-
* Apply hysteresis: keep the previous visibleCount unless the new computation
|
|
148
|
-
* differs by enough to cross the threshold band, preventing flicker at the
|
|
149
|
-
* boundary width. Returns the count to actually render.
|
|
150
|
-
*/
|
|
151
|
-
export function applyHysteresis(prev, next, prevContainerSize, containerSize, threshold) {
|
|
152
|
-
// Only damp tiny size wobbles; a real resize (beyond threshold) always applies.
|
|
153
|
-
if (Math.abs(containerSize - prevContainerSize) <= threshold && next !== prev) {
|
|
154
|
-
// within the dead-band: prefer keeping more items visible (avoid collapse churn)
|
|
155
|
-
return Math.max(prev, next);
|
|
156
|
-
}
|
|
157
|
-
return next;
|
|
158
|
-
}
|
|
159
98
|
//# sourceMappingURL=overflow-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overflow-list.js","sourceRoot":"","sources":["../src/overflow-list.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"overflow-list.js","sourceRoot":"","sources":["../src/overflow-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { computeVisibleCount,
|
|
2
|
+
import { computeVisibleCount, computeTabOverflow, } from './overflow-list.js';
|
|
3
3
|
// five items, each 100px wide, gap 0 for easy arithmetic
|
|
4
4
|
const sizes = [100, 100, 100, 100, 100];
|
|
5
5
|
describe('computeVisibleCount', () => {
|
|
@@ -67,127 +67,6 @@ describe('computeVisibleCount', () => {
|
|
|
67
67
|
});
|
|
68
68
|
});
|
|
69
69
|
});
|
|
70
|
-
describe('computeOverflowPartition', () => {
|
|
71
|
-
it('end (default): collapses trailing items, leading stay visible', () => {
|
|
72
|
-
// 360, gap 10, overflow 40 → 2 leading fit (same math as computeVisibleCount)
|
|
73
|
-
const r = computeOverflowPartition({
|
|
74
|
-
itemSizes: sizes,
|
|
75
|
-
containerSize: 360,
|
|
76
|
-
overflowSize: 40,
|
|
77
|
-
gap: 10,
|
|
78
|
-
});
|
|
79
|
-
expect(r).toEqual({
|
|
80
|
-
visibleCount: 2,
|
|
81
|
-
overflowCount: 3,
|
|
82
|
-
visibleIndexes: [0, 1],
|
|
83
|
-
overflowIndexes: [2, 3, 4],
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
it('start: collapses leading items, trailing stay visible', () => {
|
|
87
|
-
// same fit (2 items), but kept window is the *last* two → [3,4] visible
|
|
88
|
-
const r = computeOverflowPartition({
|
|
89
|
-
itemSizes: sizes,
|
|
90
|
-
containerSize: 360,
|
|
91
|
-
overflowSize: 40,
|
|
92
|
-
gap: 10,
|
|
93
|
-
collapseFrom: 'start',
|
|
94
|
-
});
|
|
95
|
-
expect(r).toEqual({
|
|
96
|
-
visibleCount: 2,
|
|
97
|
-
overflowCount: 3,
|
|
98
|
-
visibleIndexes: [3, 4],
|
|
99
|
-
overflowIndexes: [0, 1, 2],
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
it('start: uneven sizes fit from the tail, not the head', () => {
|
|
103
|
-
// tail two are tiny, head three are huge. container only fits the tail.
|
|
104
|
-
// sizes reversed = [20,20,300,300,300]; container 60 gap 10 overflow 40:
|
|
105
|
-
// reserved 50; n=1 →20+50=70>60 → 0? use container 80: n=1→20+50=70≤80, n=2→20+20+10+50=100>80 → 1 visible.
|
|
106
|
-
const r = computeOverflowPartition({
|
|
107
|
-
itemSizes: [300, 300, 300, 20, 20],
|
|
108
|
-
containerSize: 80,
|
|
109
|
-
overflowSize: 40,
|
|
110
|
-
gap: 10,
|
|
111
|
-
collapseFrom: 'start',
|
|
112
|
-
});
|
|
113
|
-
expect(r.visibleCount).toBe(1);
|
|
114
|
-
expect(r.visibleIndexes).toEqual([4]);
|
|
115
|
-
expect(r.overflowIndexes).toEqual([0, 1, 2, 3]);
|
|
116
|
-
});
|
|
117
|
-
it('start: mirrors alwaysVisible indexes (index 0 must stay → floor)', () => {
|
|
118
|
-
// only 1 fits normally, but index 0 must stay visible. mirrored → keeps a
|
|
119
|
-
// window large enough to include index 0, i.e. all items visible.
|
|
120
|
-
const r = computeOverflowPartition({
|
|
121
|
-
itemSizes: sizes,
|
|
122
|
-
containerSize: 150,
|
|
123
|
-
overflowSize: 40,
|
|
124
|
-
gap: 0,
|
|
125
|
-
collapseFrom: 'start',
|
|
126
|
-
alwaysVisible: [0],
|
|
127
|
-
});
|
|
128
|
-
expect(r.visibleIndexes).toContain(0);
|
|
129
|
-
expect(r.visibleCount).toBe(5);
|
|
130
|
-
});
|
|
131
|
-
it('respects minVisibleItems in start mode', () => {
|
|
132
|
-
const r = computeOverflowPartition({
|
|
133
|
-
itemSizes: sizes,
|
|
134
|
-
containerSize: 150,
|
|
135
|
-
overflowSize: 40,
|
|
136
|
-
gap: 0,
|
|
137
|
-
collapseFrom: 'start',
|
|
138
|
-
minVisibleItems: 3,
|
|
139
|
-
});
|
|
140
|
-
expect(r.visibleCount).toBe(3);
|
|
141
|
-
expect(r.visibleIndexes).toEqual([2, 3, 4]);
|
|
142
|
-
expect(r.overflowIndexes).toEqual([0, 1]);
|
|
143
|
-
});
|
|
144
|
-
it('everything fits → no overflow, both directions', () => {
|
|
145
|
-
const end = computeOverflowPartition({
|
|
146
|
-
itemSizes: sizes,
|
|
147
|
-
containerSize: 500,
|
|
148
|
-
overflowSize: 40,
|
|
149
|
-
gap: 0,
|
|
150
|
-
});
|
|
151
|
-
const start = computeOverflowPartition({
|
|
152
|
-
itemSizes: sizes,
|
|
153
|
-
containerSize: 500,
|
|
154
|
-
overflowSize: 40,
|
|
155
|
-
gap: 0,
|
|
156
|
-
collapseFrom: 'start',
|
|
157
|
-
});
|
|
158
|
-
expect(end.visibleIndexes).toEqual([0, 1, 2, 3, 4]);
|
|
159
|
-
expect(start.visibleIndexes).toEqual([0, 1, 2, 3, 4]);
|
|
160
|
-
expect(end.overflowCount).toBe(0);
|
|
161
|
-
expect(start.overflowCount).toBe(0);
|
|
162
|
-
});
|
|
163
|
-
it('empty input', () => {
|
|
164
|
-
const r = computeOverflowPartition({
|
|
165
|
-
itemSizes: [],
|
|
166
|
-
containerSize: 500,
|
|
167
|
-
overflowSize: 40,
|
|
168
|
-
gap: 0,
|
|
169
|
-
collapseFrom: 'start',
|
|
170
|
-
});
|
|
171
|
-
expect(r).toEqual({
|
|
172
|
-
visibleCount: 0,
|
|
173
|
-
overflowCount: 0,
|
|
174
|
-
visibleIndexes: [],
|
|
175
|
-
overflowIndexes: [],
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
describe('applyHysteresis', () => {
|
|
180
|
-
it('keeps more items visible inside the dead-band', () => {
|
|
181
|
-
// container wobbled by 5px (≤ threshold 8); next would collapse to 3, prev was 4 → keep 4
|
|
182
|
-
expect(applyHysteresis(4, 3, 500, 495, 8)).toBe(4);
|
|
183
|
-
});
|
|
184
|
-
it('applies the new count for a real resize beyond threshold', () => {
|
|
185
|
-
expect(applyHysteresis(4, 2, 500, 400, 8)).toBe(2);
|
|
186
|
-
});
|
|
187
|
-
it('no change when next equals prev', () => {
|
|
188
|
-
expect(applyHysteresis(4, 4, 500, 498, 8)).toBe(4);
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
70
|
describe('computeTabOverflow', () => {
|
|
192
71
|
it('shows all tabs when everything fits', () => {
|
|
193
72
|
expect(computeTabOverflow({ tabSizes: sizes, containerSize: 500, moreSize: 40, gap: 0 })).toEqual({ visibleIndexes: [0, 1, 2, 3, 4], overflowIndexes: [] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overflow-list.test.js","sourceRoot":"","sources":["../src/overflow-list.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"overflow-list.test.js","sourceRoot":"","sources":["../src/overflow-list.test.ts"],"names":[],"mappings":"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"}
|
package/dist/pagination.d.ts
CHANGED
|
@@ -42,6 +42,23 @@ export type PageCell = {
|
|
|
42
42
|
* `[1, count]`, `count` is floored at 1.
|
|
43
43
|
*/
|
|
44
44
|
export declare function pageRange(current: number, count: number, siblingCount?: number, boundaryCount?: number): PageCell[];
|
|
45
|
+
/** Semi 分页页码列表:pageList 含 '...',restLeft/restRight 为各省略号背后的隐藏页。 */
|
|
46
|
+
export interface SemiPageList {
|
|
47
|
+
pageList: (number | '...')[];
|
|
48
|
+
restLeft: number[];
|
|
49
|
+
restRight: number[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 严格镜像 Semi `_updatePageList` 的折叠逻辑(t=总页数, c=当前页):
|
|
53
|
+
* - t≤7:全展开
|
|
54
|
+
* - c<4:`1 2 3 4 … (t-1) t`
|
|
55
|
+
* - c=4:`1 2 3 4 5 … t`
|
|
56
|
+
* - 4<c<t-3:`1 … (c-1) c (c+1) … t`
|
|
57
|
+
* - t-3≤c≤t:`1 … (t-4)(t-3)(t-2)(t-1)(t)`
|
|
58
|
+
* 截断符 + 数字总计 7 个。restLeft/restRight 为省略号 hover 弹层的隐藏页码。
|
|
59
|
+
* 纯函数,页码数百万仍产出 O(1) 单元格。
|
|
60
|
+
*/
|
|
61
|
+
export declare function semiPageList(current: number, total: number): SemiPageList;
|
|
45
62
|
/**
|
|
46
63
|
* Parse + clamp a quick-jumper text input into a valid page number.
|
|
47
64
|
* Returns the clamped page, or `null` when the input is empty / non-numeric
|
package/dist/pagination.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO/E;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGpF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKvF;AAED,gFAAgF;AAChF,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,YAAY,SAAI,EAChB,aAAa,SAAI,GAChB,QAAQ,EAAE,CAmDZ;
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO/E;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGpF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKvF;AAED,gFAAgF;AAChF,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,YAAY,SAAI,EAChB,aAAa,SAAI,GAChB,QAAQ,EAAE,CAmDZ;AAcD,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAmCzE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAOf"}
|