@zyncat/ui 0.11.0 → 0.13.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/README.md +135 -40
- package/dist/alert.css +126 -121
- package/dist/alert.js +12 -14
- package/dist/alert.js.map +1 -1
- package/dist/avatar-group.js.map +1 -1
- package/dist/avatar.css +179 -174
- package/dist/avatar.js.map +1 -1
- package/dist/badge.css +166 -160
- package/dist/badge.js +1 -1
- package/dist/button.css +272 -246
- package/dist/button.js +1 -1
- package/dist/checkbox.css +158 -153
- package/dist/checkbox.js +2 -2
- package/dist/{chunk-AMFGY56I.js → chunk-227ZW4V7.js} +40 -32
- package/dist/chunk-227ZW4V7.js.map +1 -0
- package/dist/{chunk-2ERBBFZS.js → chunk-3MPF7FZV.js} +2 -2
- package/dist/chunk-3MPF7FZV.js.map +1 -0
- package/dist/{chunk-AIQXS2XY.js → chunk-43M6GQ4Q.js} +86 -79
- package/dist/chunk-43M6GQ4Q.js.map +1 -0
- package/dist/{chunk-7SZCJ7WI.js → chunk-45R4Z5XN.js} +3 -3
- package/dist/chunk-45R4Z5XN.js.map +1 -0
- package/dist/{chunk-I4XQ4PV2.js → chunk-4BSHB7R3.js} +9 -7
- package/dist/chunk-4BSHB7R3.js.map +1 -0
- package/dist/{chunk-YGGCQNNU.js → chunk-4C5RZXBT.js} +33 -34
- package/dist/chunk-4C5RZXBT.js.map +1 -0
- package/dist/{chunk-2QWJ6FAX.js → chunk-5PZ43DCG.js} +31 -15
- package/dist/chunk-5PZ43DCG.js.map +1 -0
- package/dist/{chunk-S5ZTZANS.js → chunk-7IZJERGA.js} +35 -12
- package/dist/chunk-7IZJERGA.js.map +1 -0
- package/dist/{chunk-DKVUPFQR.js → chunk-A5WTZACK.js} +22 -12
- package/dist/chunk-A5WTZACK.js.map +1 -0
- package/dist/{chunk-64UU4LGU.js → chunk-AADAJL7D.js} +3 -3
- package/dist/{chunk-64UU4LGU.js.map → chunk-AADAJL7D.js.map} +1 -1
- package/dist/{chunk-XJQQQJAO.js → chunk-CF4QHO4N.js} +21 -11
- package/dist/chunk-CF4QHO4N.js.map +1 -0
- package/dist/{chunk-WM5J5TDI.js → chunk-CNWTIMIP.js} +13 -17
- package/dist/chunk-CNWTIMIP.js.map +1 -0
- package/dist/{chunk-NGTA34V2.js → chunk-DDRSMHN4.js} +16 -10
- package/dist/chunk-DDRSMHN4.js.map +1 -0
- package/dist/{chunk-VTJTGVZZ.js → chunk-DMX2F6B4.js} +2 -2
- package/dist/chunk-DMX2F6B4.js.map +1 -0
- package/dist/{chunk-3SBCBYB7.js → chunk-EAI4POPB.js} +2 -2
- package/dist/{chunk-3SBCBYB7.js.map → chunk-EAI4POPB.js.map} +1 -1
- package/dist/{chunk-Y7AJQVWJ.js → chunk-EF6RPXU7.js} +17 -15
- package/dist/chunk-EF6RPXU7.js.map +1 -0
- package/dist/{chunk-WFHRAKN3.js → chunk-FONOS5RN.js} +14 -15
- package/dist/chunk-FONOS5RN.js.map +1 -0
- package/dist/{chunk-PMECHR3A.js → chunk-FQEHSKEI.js} +2 -2
- package/dist/chunk-FQEHSKEI.js.map +1 -0
- package/dist/chunk-HDSFWZ7L.js +12 -0
- package/dist/chunk-HDSFWZ7L.js.map +1 -0
- package/dist/{chunk-2F5PITAO.js → chunk-HY5MPISE.js} +2 -2
- package/dist/chunk-HY5MPISE.js.map +1 -0
- package/dist/{chunk-QDK66S4G.js → chunk-I45AU6KH.js} +3 -3
- package/dist/chunk-I45AU6KH.js.map +1 -0
- package/dist/{chunk-YGCVWGUG.js → chunk-IJS7TPGV.js} +153 -46
- package/dist/chunk-IJS7TPGV.js.map +1 -0
- package/dist/{chunk-62P3KD57.js → chunk-IUQAUBVM.js} +18 -11
- package/dist/chunk-IUQAUBVM.js.map +1 -0
- package/dist/chunk-JY6A2ZJZ.js +44 -0
- package/dist/chunk-JY6A2ZJZ.js.map +1 -0
- package/dist/{chunk-XWUWYSCT.js → chunk-M43IOM5C.js} +20 -10
- package/dist/chunk-M43IOM5C.js.map +1 -0
- package/dist/{chunk-S7B34VGN.js → chunk-OWNMRMPN.js} +3 -3
- package/dist/{chunk-S7B34VGN.js.map → chunk-OWNMRMPN.js.map} +1 -1
- package/dist/chunk-RFRE4WKX.js +22 -0
- package/dist/chunk-RFRE4WKX.js.map +1 -0
- package/dist/{chunk-NNXJCLTV.js → chunk-RJFGWJ4W.js} +2 -2
- package/dist/chunk-RJFGWJ4W.js.map +1 -0
- package/dist/{chunk-NEF5XAHG.js → chunk-TUTXXC3W.js} +4 -4
- package/dist/chunk-TUTXXC3W.js.map +1 -0
- package/dist/chunk-TVYH4AN7.js +70 -0
- package/dist/chunk-TVYH4AN7.js.map +1 -0
- package/dist/{chunk-U4MHX3KH.js → chunk-VAXCXZ53.js} +33 -12
- package/dist/chunk-VAXCXZ53.js.map +1 -0
- package/dist/chunk-XNIYSAMJ.js +52 -0
- package/dist/chunk-XNIYSAMJ.js.map +1 -0
- package/dist/{chunk-CONSWNIV.js → chunk-Y2YA7QRF.js} +6 -6
- package/dist/chunk-Y2YA7QRF.js.map +1 -0
- package/dist/cli.js +1828 -0
- package/dist/collapse.css +70 -61
- package/dist/collapse.js +2 -2
- package/dist/confetti.css +45 -0
- package/dist/confetti.js +540 -0
- package/dist/confetti.js.map +1 -0
- package/dist/count-badge.js +3 -3
- package/dist/count-badge.js.map +1 -1
- package/dist/date-field.js +24 -19
- package/dist/date-field.js.map +1 -1
- package/dist/date-picker.css +563 -559
- package/dist/date-range-field.js +58 -41
- package/dist/date-range-field.js.map +1 -1
- package/dist/datetime-field.js +24 -19
- package/dist/datetime-field.js.map +1 -1
- package/dist/dialog.css +176 -172
- package/dist/dialog.js +30 -19
- package/dist/dialog.js.map +1 -1
- package/dist/digit-strip.css +65 -0
- package/dist/dropdown.css +65 -0
- package/dist/dropdown.js +350 -0
- package/dist/dropdown.js.map +1 -0
- package/dist/emoji-picker.js +713 -0
- package/dist/emoji-picker.js.map +1 -0
- package/dist/facebook-feed.css +880 -0
- package/dist/facebook-feed.js +697 -0
- package/dist/facebook-feed.js.map +1 -0
- package/dist/flow-field.css +49 -0
- package/dist/flow-field.js +269 -0
- package/dist/flow-field.js.map +1 -0
- package/dist/glide.js +3 -3
- package/dist/icon.css +34 -30
- package/dist/input.css +296 -318
- package/dist/instagram-feed.css +378 -0
- package/dist/instagram-feed.js +272 -0
- package/dist/instagram-feed.js.map +1 -0
- package/dist/lens.css +119 -0
- package/dist/lens.js +307 -0
- package/dist/lens.js.map +1 -0
- package/dist/mcp.js +379 -181
- package/dist/menu-surface.css +127 -0
- package/dist/modal.css +11 -7
- package/dist/modal.js +24 -17
- package/dist/modal.js.map +1 -1
- package/dist/morphing-text.css +84 -0
- package/dist/morphing-text.js +256 -0
- package/dist/morphing-text.js.map +1 -0
- package/dist/motion-devtools.css +237 -233
- package/dist/motion-devtools.js +7 -6
- package/dist/motion-devtools.js.map +1 -1
- package/dist/motion-tokens.js +1 -1
- package/dist/multi-select.js +20 -17
- package/dist/multi-select.js.map +1 -1
- package/dist/number-field.js +11 -7
- package/dist/number-field.js.map +1 -1
- package/dist/odometer.css +58 -59
- package/dist/odometer.js +109 -0
- package/dist/odometer.js.map +1 -0
- package/dist/otp-field.js.map +1 -1
- package/dist/overlay.css +24 -20
- package/dist/pagination.css +42 -38
- package/dist/pagination.js +6 -12
- package/dist/pagination.js.map +1 -1
- package/dist/popover.css +69 -65
- package/dist/popover.js +12 -10
- package/dist/radio-group.css +275 -276
- package/dist/radio-group.js +70 -95
- package/dist/radio-group.js.map +1 -1
- package/dist/select.css +291 -386
- package/dist/select.js +18 -15
- package/dist/select.js.map +1 -1
- package/dist/sheet.css +47 -23
- package/dist/sheet.js +11 -10
- package/dist/status-badge.js +3 -3
- package/dist/status-badge.js.map +1 -1
- package/dist/styles.css +221 -0
- package/dist/support-rail.css +421 -0
- package/dist/support-rail.js +243 -0
- package/dist/support-rail.js.map +1 -0
- package/dist/table.css +333 -323
- package/dist/table.js +32 -21
- package/dist/table.js.map +1 -1
- package/dist/tabs.css +163 -156
- package/dist/tabs.js +26 -20
- package/dist/tabs.js.map +1 -1
- package/dist/tag.css +209 -231
- package/dist/tag.js +11 -10
- package/dist/tag.js.map +1 -1
- package/dist/text-field.js +7 -67
- package/dist/text-field.js.map +1 -1
- package/dist/textarea.css +205 -211
- package/dist/textarea.js +12 -12
- package/dist/textarea.js.map +1 -1
- package/dist/theme.js +69 -0
- package/dist/theme.js.map +1 -0
- package/dist/tiktok.css +662 -0
- package/dist/tiktok.js +494 -0
- package/dist/tiktok.js.map +1 -0
- package/dist/time-field.js +6 -6
- package/dist/time-field.js.map +1 -1
- package/dist/toast.css +237 -233
- package/dist/toast.js +43 -47
- package/dist/toast.js.map +1 -1
- package/dist/toggle-tag.js +1 -1
- package/dist/toggle-tag.js.map +1 -1
- package/dist/toggle.css +139 -135
- package/dist/toggle.js.map +1 -1
- package/dist/tooltip.css +79 -78
- package/dist/tooltip.js +50 -60
- package/dist/tooltip.js.map +1 -1
- package/dist/trigger.css +13 -0
- package/dist/{alert.d.ts → types/components/composites/alert/Alert.d.ts} +13 -15
- package/dist/{date-field.d.ts → types/components/composites/date-picker/DateField.d.ts} +4 -10
- package/dist/types/components/composites/date-picker/DateRangeField.d.ts +21 -0
- package/dist/{datetime-field.d.ts → types/components/composites/date-picker/DateTimeField.d.ts} +4 -10
- package/dist/{time-field.d.ts → types/components/composites/date-picker/TimeField.d.ts} +5 -11
- package/dist/types/components/composites/date-picker/calendar-panel.d.ts +16 -0
- package/dist/types/components/composites/date-picker/date-utils.d.ts +12 -0
- package/dist/types/components/composites/date-picker/field-shell.d.ts +46 -0
- package/dist/types/components/composites/date-picker/range-panel.d.ts +24 -0
- package/dist/types/components/composites/date-picker/time-core.d.ts +14 -0
- package/dist/types/components/composites/date-picker/use-day-focus.d.ts +2 -0
- package/dist/{dialog.d.ts → types/components/composites/dialog/Dialog.d.ts} +10 -11
- package/dist/types/components/composites/dropdown/Dropdown.d.ts +37 -0
- package/dist/types/components/composites/dropdown/menu-panel.d.ts +7 -0
- package/dist/types/components/composites/dropdown/types.d.ts +71 -0
- package/dist/types/components/composites/emoji-picker/EmojiPickerPanel.d.ts +45 -0
- package/dist/types/components/composites/emoji-picker/category-icons.d.ts +9 -0
- package/dist/types/components/composites/emoji-picker/data.d.ts +33 -0
- package/dist/types/components/composites/emoji-picker/dom.d.ts +19 -0
- package/dist/types/components/composites/emoji-picker/getEmojiUrl.d.ts +2 -0
- package/dist/types/components/composites/emoji-picker/navigation.d.ts +7 -0
- package/dist/types/components/composites/emoji-picker/picker.d.ts +20 -0
- package/dist/types/components/composites/emoji-picker/react/category-bar.d.ts +6 -0
- package/dist/types/components/composites/emoji-picker/react/useEmojiPicker.d.ts +50 -0
- package/dist/types/components/composites/emoji-picker/scaffold.d.ts +8 -0
- package/dist/types/components/composites/emoji-picker/search.d.ts +1 -0
- package/dist/types/components/composites/emoji-picker/types.d.ts +13 -0
- package/dist/{modal.d.ts → types/components/composites/modal/Modal.d.ts} +10 -11
- package/dist/{pagination.d.ts → types/components/composites/pagination/Pagination.d.ts} +5 -8
- package/dist/{popover.d.ts → types/components/composites/popover/Popover.d.ts} +11 -14
- package/dist/{multi-select.d.ts → types/components/composites/select/MultiSelect.d.ts} +12 -11
- package/dist/{select.d.ts → types/components/composites/select/Select.d.ts} +16 -14
- package/dist/types/components/composites/select/core/index.d.ts +4 -0
- package/dist/types/components/composites/select/core/menu.d.ts +13 -0
- package/dist/types/components/composites/select/core/panel.d.ts +18 -0
- package/dist/types/components/composites/select/core/trigger.d.ts +16 -0
- package/dist/{types-SGMShK7R.d.ts → types/components/composites/select/core/types.d.ts} +13 -6
- package/dist/types/components/composites/select/core/use-listbox.d.ts +42 -0
- package/dist/{sheet.d.ts → types/components/composites/sheet/Sheet.d.ts} +10 -11
- package/dist/types/components/composites/sheet/use-sheet-drag.d.ts +13 -0
- package/dist/{table.d.ts → types/components/composites/table/Table.d.ts} +12 -12
- package/dist/{tabs.d.ts → types/components/composites/tabs/Tabs.d.ts} +13 -13
- package/dist/types/components/composites/toast/Toast.d.ts +10 -0
- package/dist/{toast-store.d.ts → types/components/composites/toast/toast-store.d.ts} +12 -14
- package/dist/{tooltip.d.ts → types/components/composites/tooltip/Tooltip.d.ts} +6 -10
- package/dist/types/components/composites/tooltip/tooltip-host.d.ts +1 -0
- package/dist/types/components/composites/tooltip/tooltip-store.d.ts +29 -0
- package/dist/types/components/compound/support-rail/SupportRail.d.ts +41 -0
- package/dist/types/components/dev/MotionDevtools.d.ts +24 -0
- package/dist/types/components/dev/slowmo-engine.d.ts +27 -0
- package/dist/types/components/expressive/confetti/Confetti.d.ts +43 -0
- package/dist/types/components/expressive/facebook-feed/FacebookFeed.d.ts +73 -0
- package/dist/types/components/expressive/facebook-feed/chrome.d.ts +30 -0
- package/dist/types/components/expressive/facebook-feed/icons.d.ts +21 -0
- package/dist/types/components/expressive/facebook-feed/post.d.ts +25 -0
- package/dist/types/components/expressive/facebook-feed/reel.d.ts +26 -0
- package/dist/types/components/expressive/facebook-feed/story.d.ts +20 -0
- package/dist/types/components/expressive/flow-field/FlowField.d.ts +23 -0
- package/dist/types/components/expressive/instagram-feed/InstagramFeed.d.ts +59 -0
- package/dist/types/components/expressive/lens/Lens.d.ts +23 -0
- package/dist/types/components/expressive/morphing-text/MorphingText.d.ts +21 -0
- package/dist/types/components/expressive/odometer/Odometer.d.ts +21 -0
- package/dist/types/components/expressive/tiktok/TikTok.d.ts +85 -0
- package/dist/types/components/expressive/tiktok/glyphs.d.ts +40 -0
- package/dist/types/components/expressive/typing-lines/TypingLines.d.ts +25 -0
- package/dist/types/components/expressive/weight-field/WeightField.d.ts +19 -0
- package/dist/types/components/expressive/youtube/YouTube.d.ts +73 -0
- package/dist/types/components/expressive/youtube/format.d.ts +2 -0
- package/dist/types/components/expressive/youtube/glyphs.d.ts +16 -0
- package/dist/types/components/expressive/youtube/media.d.ts +8 -0
- package/dist/types/components/expressive/youtube/post.d.ts +19 -0
- package/dist/types/components/expressive/youtube/short.d.ts +18 -0
- package/dist/types/components/expressive/youtube/video.d.ts +14 -0
- package/dist/types/components/internal/collection/collection.d.ts +19 -0
- package/dist/types/components/internal/glass/glint.d.ts +1 -0
- package/dist/types/components/internal/hooks/use-controllable.d.ts +1 -0
- package/dist/types/components/internal/hooks/use-media-query.d.ts +1 -0
- package/dist/types/components/internal/hooks/use-scroll-edges.d.ts +10 -0
- package/dist/types/components/internal/hooks/use-typeahead.d.ts +5 -0
- package/dist/types/components/internal/icon/Icon.d.ts +33 -0
- package/dist/types/components/internal/icon/IconSlot.d.ts +7 -0
- package/dist/types/components/internal/menu/menu-row.d.ts +11 -0
- package/dist/types/components/internal/overlay/focus.d.ts +8 -0
- package/dist/types/components/internal/overlay/layer.d.ts +38 -0
- package/dist/types/components/internal/overlay/modal.d.ts +18 -0
- package/dist/types/components/internal/overlay/position.d.ts +14 -0
- package/dist/types/components/internal/support/types.d.ts +15 -0
- package/dist/types/components/internal/utils/activation.d.ts +23 -0
- package/dist/types/components/internal/utils/cx.d.ts +1 -0
- package/dist/types/components/internal/utils/token-px.d.ts +1 -0
- package/dist/{avatar.d.ts → types/components/primitives/avatar/Avatar.d.ts} +10 -12
- package/dist/{avatar-group.d.ts → types/components/primitives/avatar/AvatarGroup.d.ts} +7 -9
- package/dist/{badge.d.ts → types/components/primitives/badge/Badge.d.ts} +8 -10
- package/dist/types/components/primitives/badge/CountBadge.d.ts +8 -0
- package/dist/types/components/primitives/badge/StatusBadge.d.ts +15 -0
- package/dist/types/components/primitives/badge/digit-strip.d.ts +5 -0
- package/dist/{button.d.ts → types/components/primitives/button/Button.d.ts} +6 -8
- package/dist/{checkbox.d.ts → types/components/primitives/checkbox/Checkbox.d.ts} +6 -8
- package/dist/types/components/primitives/checkbox/check-glyph.d.ts +6 -0
- package/dist/{collapse.d.ts → types/components/primitives/collapse/Collapse.d.ts} +12 -13
- package/dist/types/components/primitives/collapse/collapse.typecheck.d.ts +2 -0
- package/dist/{number-field.d.ts → types/components/primitives/input/NumberField.d.ts} +7 -9
- package/dist/{otp-field.d.ts → types/components/primitives/input/OtpField.d.ts} +6 -8
- package/dist/{text-field.d.ts → types/components/primitives/input/TextField.d.ts} +7 -9
- package/dist/types/components/primitives/input/field-chrome.d.ts +45 -0
- package/dist/{radio-group.d.ts → types/components/primitives/radio-group/RadioGroup.d.ts} +8 -10
- package/dist/{tag.d.ts → types/components/primitives/tag/Tag.d.ts} +9 -12
- package/dist/{toggle-tag.d.ts → types/components/primitives/tag/ToggleTag.d.ts} +7 -8
- package/dist/{textarea.d.ts → types/components/primitives/textarea/Textarea.d.ts} +7 -9
- package/dist/{toggle.d.ts → types/components/primitives/toggle/Toggle.d.ts} +6 -8
- package/dist/{dom-props-C0jrllBw.d.ts → types/dom-props.d.ts} +1 -3
- package/dist/types/engine/animate.d.ts +30 -0
- package/dist/types/engine/drag.d.ts +17 -0
- package/dist/types/engine/ease.d.ts +15 -0
- package/dist/types/engine/flip.d.ts +18 -0
- package/dist/types/engine/index.d.ts +4 -0
- package/dist/types/engine/loop.d.ts +9 -0
- package/dist/types/motion/element.d.ts +17 -0
- package/dist/types/motion/flip.d.ts +4 -0
- package/dist/types/motion/glide.d.ts +11 -0
- package/dist/types/motion/motion-timing.d.ts +16 -0
- package/dist/types/motion/presence-context.d.ts +11 -0
- package/dist/types/motion/presence.d.ts +12 -0
- package/dist/types/motion/presets.d.ts +6 -0
- package/dist/{timing-7JA_zQHP.d.ts → types/motion/timing.d.ts} +9 -9
- package/dist/types/motion/use-motion.d.ts +17 -0
- package/dist/types/tokens/component-styles.generated.d.ts +262 -0
- package/dist/{motion-scale-Canq4stZ.d.ts → types/tokens/motion-scale.d.ts} +4 -4
- package/dist/{motion-tokens.d.ts → types/tokens/motion-tokens.d.ts} +9 -9
- package/dist/types/tokens/theme-tokens.generated.d.ts +1249 -0
- package/dist/types/tokens/theme.d.ts +12 -0
- package/dist/typing-lines.css +92 -0
- package/dist/typing-lines.js +139 -0
- package/dist/typing-lines.js.map +1 -0
- package/dist/weight-field.css +84 -0
- package/dist/weight-field.js +17 -0
- package/dist/weight-field.js.map +1 -0
- package/dist/youtube.css +611 -0
- package/dist/youtube.js +814 -0
- package/dist/youtube.js.map +1 -0
- package/package.json +155 -49
- package/skills/zyncat-ui/SKILL.md +95 -0
- package/skills/zyncat-ui/references/components.md +85 -0
- package/skills/zyncat-ui/references/recipes.md +171 -0
- package/skills/zyncat-ui/references/theming.md +83 -0
- package/src/components/composites/alert/Alert.tsx +13 -11
- package/src/components/composites/alert/Alert.usage.md +15 -0
- package/src/components/composites/alert/alert.css +126 -121
- package/src/components/composites/date-picker/DateField.tsx +7 -2
- package/src/components/composites/date-picker/DateField.usage.md +10 -0
- package/src/components/composites/date-picker/DateRangeField.tsx +18 -16
- package/src/components/composites/date-picker/DateRangeField.usage.md +10 -0
- package/src/components/composites/date-picker/DateTimeField.tsx +10 -5
- package/src/components/composites/date-picker/DateTimeField.usage.md +12 -0
- package/src/components/composites/date-picker/TimeField.tsx +3 -1
- package/src/components/composites/date-picker/TimeField.usage.md +12 -0
- package/src/components/composites/date-picker/calendar-panel.tsx +15 -10
- package/src/components/composites/date-picker/date-picker.css +563 -559
- package/src/components/composites/date-picker/field-shell.tsx +9 -3
- package/src/components/composites/date-picker/range-panel.tsx +23 -8
- package/src/components/composites/date-picker/time-core.tsx +2 -0
- package/src/components/composites/dialog/Dialog.tsx +30 -15
- package/src/components/composites/dialog/Dialog.usage.md +17 -0
- package/src/components/composites/dialog/dialog.css +176 -172
- package/src/components/composites/dropdown/Dropdown.tsx +184 -0
- package/src/components/composites/dropdown/Dropdown.usage.md +19 -0
- package/src/components/composites/dropdown/dropdown.css +65 -0
- package/src/components/composites/dropdown/menu-panel.tsx +255 -0
- package/src/components/composites/dropdown/types.ts +95 -0
- package/src/components/composites/emoji-picker/EmojiPickerPanel.tsx +153 -0
- package/src/components/composites/emoji-picker/EmojiPickerPanel.usage.md +26 -0
- package/src/components/composites/emoji-picker/category-icons.ts +29 -0
- package/src/components/composites/emoji-picker/data.ts +83 -0
- package/src/components/composites/emoji-picker/dom.ts +79 -0
- package/src/components/composites/emoji-picker/getEmojiUrl.ts +17 -0
- package/src/components/composites/emoji-picker/navigation.ts +86 -0
- package/src/components/composites/emoji-picker/picker.ts +169 -0
- package/src/components/composites/emoji-picker/react/category-bar.tsx +77 -0
- package/src/components/composites/emoji-picker/react/useEmojiPicker.ts +139 -0
- package/src/components/composites/emoji-picker/scaffold.ts +74 -0
- package/src/components/composites/emoji-picker/search.ts +79 -0
- package/src/components/composites/emoji-picker/styles.css +221 -0
- package/src/components/composites/emoji-picker/types.ts +14 -0
- package/src/components/composites/modal/Modal.tsx +24 -13
- package/src/components/composites/modal/Modal.usage.md +24 -0
- package/src/components/composites/modal/modal.css +11 -7
- package/src/components/composites/pagination/Pagination.tsx +6 -11
- package/src/components/composites/pagination/Pagination.usage.md +12 -0
- package/src/components/composites/pagination/pagination.css +42 -38
- package/src/components/composites/popover/Popover.tsx +22 -7
- package/src/components/composites/popover/Popover.usage.md +15 -0
- package/src/components/composites/popover/popover.css +69 -65
- package/src/components/composites/select/MultiSelect.tsx +13 -5
- package/src/components/composites/select/MultiSelect.usage.md +12 -0
- package/src/components/composites/select/Select.tsx +23 -7
- package/src/components/composites/select/Select.usage.md +20 -0
- package/src/components/composites/select/core/index.ts +1 -1
- package/src/components/composites/select/core/menu.tsx +8 -6
- package/src/components/composites/select/core/panel.tsx +25 -26
- package/src/components/composites/select/core/trigger.tsx +36 -24
- package/src/components/composites/select/core/types.ts +17 -15
- package/src/components/composites/select/core/use-listbox.ts +22 -21
- package/src/components/composites/select/select.css +291 -386
- package/src/components/composites/sheet/Sheet.tsx +28 -18
- package/src/components/composites/sheet/Sheet.usage.md +15 -0
- package/src/components/composites/sheet/sheet.css +47 -23
- package/src/components/composites/sheet/use-sheet-drag.ts +19 -15
- package/src/components/composites/table/Table.tsx +17 -6
- package/src/components/composites/table/Table.usage.md +19 -0
- package/src/components/composites/table/table.css +333 -323
- package/src/components/composites/tabs/Tabs.tsx +31 -23
- package/src/components/composites/tabs/Tabs.usage.md +13 -0
- package/src/components/composites/tabs/tabs.css +163 -156
- package/src/components/composites/toast/Toast.tsx +48 -51
- package/src/components/composites/toast/Toast.usage.md +23 -0
- package/src/components/composites/toast/toast-store.usage.md +16 -0
- package/src/components/composites/toast/toast.css +237 -233
- package/src/components/composites/tooltip/Tooltip.tsx +13 -8
- package/src/components/composites/tooltip/Tooltip.usage.md +14 -0
- package/src/components/composites/tooltip/tooltip-host.tsx +29 -61
- package/src/components/composites/tooltip/tooltip-store.ts +10 -0
- package/src/components/composites/tooltip/tooltip.css +79 -78
- package/src/components/compound/support-rail/SupportRail.tsx +343 -0
- package/src/components/compound/support-rail/SupportRail.usage.md +18 -0
- package/src/components/compound/support-rail/support-rail.css +421 -0
- package/src/components/dev/MotionDevtools.tsx +3 -1
- package/src/components/dev/MotionDevtools.usage.md +16 -0
- package/src/components/dev/motion-devtools.css +237 -233
- package/src/components/expressive/confetti/Confetti.tsx +727 -0
- package/src/components/expressive/confetti/Confetti.usage.md +18 -0
- package/src/components/expressive/confetti/confetti.css +45 -0
- package/src/components/expressive/facebook-feed/FacebookFeed.tsx +200 -0
- package/src/components/expressive/facebook-feed/FacebookFeed.usage.md +18 -0
- package/src/components/expressive/facebook-feed/chrome.tsx +120 -0
- package/src/components/expressive/facebook-feed/facebook-feed.css +880 -0
- package/src/components/expressive/facebook-feed/icons.tsx +145 -0
- package/src/components/expressive/facebook-feed/post.tsx +213 -0
- package/src/components/expressive/facebook-feed/reel.tsx +199 -0
- package/src/components/expressive/facebook-feed/story.tsx +132 -0
- package/src/components/expressive/flow-field/FlowField.tsx +348 -0
- package/src/components/expressive/flow-field/FlowField.usage.md +19 -0
- package/src/components/expressive/flow-field/flow-field.css +49 -0
- package/src/components/expressive/instagram-feed/InstagramFeed.tsx +374 -0
- package/src/components/expressive/instagram-feed/InstagramFeed.usage.md +18 -0
- package/src/components/expressive/instagram-feed/instagram-feed.css +378 -0
- package/src/components/expressive/lens/Lens.tsx +415 -0
- package/src/components/expressive/lens/Lens.usage.md +20 -0
- package/src/components/expressive/lens/lens.css +119 -0
- package/src/components/expressive/morphing-text/MorphingText.tsx +328 -0
- package/src/components/expressive/morphing-text/MorphingText.usage.md +19 -0
- package/src/components/expressive/morphing-text/morphing-text.css +84 -0
- package/src/components/expressive/odometer/Odometer.tsx +158 -0
- package/src/components/expressive/odometer/Odometer.usage.md +17 -0
- package/src/components/expressive/odometer/odometer.css +61 -0
- package/src/components/expressive/tiktok/TikTok.tsx +542 -0
- package/src/components/expressive/tiktok/TikTok.usage.md +17 -0
- package/src/components/expressive/tiktok/glyphs.tsx +163 -0
- package/src/components/expressive/tiktok/tiktok.css +662 -0
- package/src/components/expressive/typing-lines/TypingLines.tsx +0 -0
- package/src/components/expressive/typing-lines/TypingLines.usage.md +17 -0
- package/src/components/expressive/typing-lines/typing-lines.css +92 -0
- package/src/components/expressive/weight-field/WeightField.tsx +41 -0
- package/src/components/expressive/weight-field/WeightField.usage.md +20 -0
- package/src/components/expressive/weight-field/weight-field.css +84 -0
- package/src/components/expressive/youtube/YouTube.tsx +192 -0
- package/src/components/expressive/youtube/YouTube.usage.md +18 -0
- package/src/components/expressive/youtube/format.ts +22 -0
- package/src/components/expressive/youtube/glyphs.tsx +235 -0
- package/src/components/expressive/youtube/media.tsx +18 -0
- package/src/components/expressive/youtube/post.tsx +282 -0
- package/src/components/expressive/youtube/short.tsx +212 -0
- package/src/components/expressive/youtube/video.tsx +75 -0
- package/src/components/expressive/youtube/youtube.css +611 -0
- package/src/components/internal/collection/collection.ts +44 -0
- package/src/components/internal/glass/glass.css +88 -84
- package/src/components/internal/hooks/use-media-query.ts +20 -0
- package/src/components/internal/hooks/use-typeahead.ts +28 -0
- package/src/components/internal/icon/Icon.tsx +2 -0
- package/src/components/internal/icon/IconSlot.tsx +2 -0
- package/src/components/internal/icon/icon.css +34 -30
- package/src/components/internal/menu/menu-row.tsx +34 -0
- package/src/components/internal/menu/menu-surface.css +127 -0
- package/src/components/internal/overlay/focus.ts +26 -10
- package/src/components/internal/overlay/layer.tsx +50 -9
- package/src/components/internal/overlay/modal.tsx +14 -12
- package/src/components/internal/overlay/overlay.css +24 -20
- package/src/components/internal/overlay/position.ts +19 -9
- package/src/components/internal/overlay/trigger.css +13 -0
- package/src/components/internal/support/types.ts +16 -0
- package/src/components/internal/utils/activation.ts +78 -0
- package/src/components/primitives/avatar/Avatar.tsx +2 -0
- package/src/components/primitives/avatar/Avatar.usage.md +12 -0
- package/src/components/primitives/avatar/AvatarGroup.tsx +3 -1
- package/src/components/primitives/avatar/AvatarGroup.usage.md +15 -0
- package/src/components/primitives/avatar/avatar.css +179 -174
- package/src/components/primitives/badge/Badge.tsx +3 -1
- package/src/components/primitives/badge/Badge.usage.md +14 -0
- package/src/components/primitives/badge/CountBadge.tsx +2 -2
- package/src/components/primitives/badge/CountBadge.usage.md +13 -0
- package/src/components/primitives/badge/StatusBadge.tsx +3 -1
- package/src/components/primitives/badge/StatusBadge.usage.md +14 -0
- package/src/components/primitives/badge/badge.css +166 -160
- package/src/components/primitives/badge/digit-strip.css +65 -0
- package/src/components/primitives/badge/{odometer.tsx → digit-strip.tsx} +3 -3
- package/src/components/primitives/button/Button.tsx +2 -0
- package/src/components/primitives/button/Button.usage.md +14 -0
- package/src/components/primitives/button/button.css +272 -246
- package/src/components/primitives/checkbox/Checkbox.tsx +3 -1
- package/src/components/primitives/checkbox/Checkbox.usage.md +12 -0
- package/src/components/primitives/checkbox/check-glyph.tsx +1 -0
- package/src/components/primitives/checkbox/checkbox.css +158 -153
- package/src/components/primitives/collapse/Collapse.tsx +3 -1
- package/src/components/primitives/collapse/Collapse.usage.md +17 -0
- package/src/components/primitives/collapse/collapse.css +70 -61
- package/src/components/primitives/collapse/collapse.typecheck.tsx +2 -0
- package/src/components/primitives/input/NumberField.tsx +18 -5
- package/src/components/primitives/input/NumberField.usage.md +12 -0
- package/src/components/primitives/input/OtpField.tsx +2 -0
- package/src/components/primitives/input/OtpField.usage.md +12 -0
- package/src/components/primitives/input/TextField.tsx +16 -4
- package/src/components/primitives/input/TextField.usage.md +13 -0
- package/src/components/primitives/input/field-chrome.tsx +11 -2
- package/src/components/primitives/input/input.css +296 -318
- package/src/components/primitives/radio-group/RadioGroup.tsx +20 -44
- package/src/components/primitives/radio-group/RadioGroup.usage.md +13 -0
- package/src/components/primitives/radio-group/radio-group.css +275 -276
- package/src/components/primitives/tag/Tag.tsx +10 -6
- package/src/components/primitives/tag/Tag.usage.md +14 -0
- package/src/components/primitives/tag/ToggleTag.tsx +4 -2
- package/src/components/primitives/tag/ToggleTag.usage.md +14 -0
- package/src/components/primitives/tag/tag.css +209 -231
- package/src/components/primitives/textarea/Textarea.tsx +17 -7
- package/src/components/primitives/textarea/Textarea.usage.md +12 -0
- package/src/components/primitives/textarea/textarea.css +205 -211
- package/src/components/primitives/toggle/Toggle.tsx +3 -1
- package/src/components/primitives/toggle/Toggle.usage.md +12 -0
- package/src/components/primitives/toggle/toggle.css +139 -135
- package/src/engine/animate.ts +40 -13
- package/src/engine/ease.ts +1 -0
- package/src/engine/flip.ts +32 -15
- package/src/engine/index.ts +2 -1
- package/src/engine/loop.ts +97 -0
- package/src/mcp/server.ts +315 -218
- package/src/motion/element.tsx +1 -0
- package/src/motion/flip.ts +29 -10
- package/src/motion/glide.tsx +11 -14
- package/src/motion/glide.usage.md +15 -0
- package/src/motion/motion-timing.ts +3 -3
- package/src/motion/presence.tsx +12 -5
- package/src/motion/presets.ts +13 -0
- package/src/motion/timing.ts +1 -0
- package/src/motion/use-motion.ts +16 -3
- package/src/styles.css +5 -0
- package/src/tokens/avatar.css +20 -16
- package/src/tokens/color.css +67 -56
- package/src/tokens/component-styles.generated.ts +270 -0
- package/src/tokens/elevation.css +28 -17
- package/src/tokens/fonts.css +1 -1
- package/src/tokens/glass.css +19 -15
- package/src/tokens/icons.css +8 -4
- package/src/tokens/layers.css +9 -4
- package/src/tokens/motion-scale.ts +4 -0
- package/src/tokens/motion-tokens.ts +42 -12
- package/src/tokens/motion-tokens.usage.md +16 -0
- package/src/tokens/motion.css +63 -45
- package/src/tokens/radius.css +12 -8
- package/src/tokens/semantic.css +62 -54
- package/src/tokens/spacing.css +25 -21
- package/src/tokens/theme-tokens.generated.ts +1278 -0
- package/src/tokens/theme.tsx +83 -0
- package/src/tokens/theme.usage.md +36 -0
- package/src/tokens/typography.css +53 -49
- package/dist/chunk-2ERBBFZS.js.map +0 -1
- package/dist/chunk-2F5PITAO.js.map +0 -1
- package/dist/chunk-2QWJ6FAX.js.map +0 -1
- package/dist/chunk-62P3KD57.js.map +0 -1
- package/dist/chunk-7SZCJ7WI.js.map +0 -1
- package/dist/chunk-AIQXS2XY.js.map +0 -1
- package/dist/chunk-AMFGY56I.js.map +0 -1
- package/dist/chunk-CONSWNIV.js.map +0 -1
- package/dist/chunk-DKVUPFQR.js.map +0 -1
- package/dist/chunk-I4XQ4PV2.js.map +0 -1
- package/dist/chunk-NEF5XAHG.js.map +0 -1
- package/dist/chunk-NGTA34V2.js.map +0 -1
- package/dist/chunk-NNXJCLTV.js.map +0 -1
- package/dist/chunk-PMECHR3A.js.map +0 -1
- package/dist/chunk-QDK66S4G.js.map +0 -1
- package/dist/chunk-S5ZTZANS.js.map +0 -1
- package/dist/chunk-U4MHX3KH.js.map +0 -1
- package/dist/chunk-VTJTGVZZ.js.map +0 -1
- package/dist/chunk-WFHRAKN3.js.map +0 -1
- package/dist/chunk-WM5J5TDI.js.map +0 -1
- package/dist/chunk-XJQQQJAO.js.map +0 -1
- package/dist/chunk-XWUWYSCT.js.map +0 -1
- package/dist/chunk-Y7AJQVWJ.js.map +0 -1
- package/dist/chunk-YGCVWGUG.js.map +0 -1
- package/dist/chunk-YGGCQNNU.js.map +0 -1
- package/dist/count-badge.d.ts +0 -13
- package/dist/date-range-field.d.ts +0 -33
- package/dist/field-chrome-CMPOQSLs.d.ts +0 -28
- package/dist/field-shell-Cuda-feL.d.ts +0 -24
- package/dist/glide.d.ts +0 -15
- package/dist/motion-devtools.d.ts +0 -51
- package/dist/status-badge.d.ts +0 -19
- package/dist/toast.d.ts +0 -12
- package/llms.txt +0 -220
- package/src/components/primitives/badge/odometer.css +0 -62
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/motion/glide.tsx"],"names":[],"mappings":"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","file":"chunk-WM5J5TDI.js","sourcesContent":["'use client';\n\nimport { useRef, type RefObject } from 'react';\nimport { animate } from '../engine';\nimport { UIMotion as SM } from '../tokens/motion-tokens';\n\nexport type GlideApi = ReturnType<typeof useGlide>;\n\nexport function useGlide<T extends HTMLElement>(containerRef: RefObject<T | null>) {\n const ref = useRef<HTMLSpanElement | null>(null);\n const visible = useRef(false);\n\n function enter(target: HTMLElement | null) {\n const box = containerRef.current,\n pill = ref.current;\n if (!box || !pill || !target) return;\n const was = pill.getBoundingClientRect();\n const b = box.getBoundingClientRect();\n const t = target.getBoundingClientRect();\n const s = box.offsetWidth ? b.width / box.offsetWidth : 1;\n pill.style.translate = `${(t.left - b.left) / s + box.scrollLeft}px ${(t.top - b.top) / s + box.scrollTop}px`;\n pill.style.width = `${t.width / s}px`;\n pill.style.height = `${t.height / s}px`;\n const now = pill.getBoundingClientRect();\n animate(pill, { opacity: [1], timing: { duration: SM.dur.fast, ease: SM.ease.standard } });\n const glided = visible.current && !SM.reduced;\n visible.current = true;\n if (!glided) return;\n const timing = { ...SM.t.settle, fill: 'none' as const };\n animate(\n pill,\n { x: [was.left - now.left, 0], y: [was.top - now.top, 0], timing, composite: 'add' },\n { width: [was.width, now.width], height: [was.height, now.height], timing },\n );\n }\n\n function leave() {\n visible.current = false;\n if (ref.current) animate(ref.current, { opacity: [0], timing: { duration: SM.dur.fast, ease: SM.ease.exit } });\n }\n\n return { ref, enter, leave };\n}\n\nexport function GlidePill({ className, glide }: { className?: string; glide: GlideApi }) {\n return <span ref={glide.ref} className={className} aria-hidden=\"true\" />;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/composites/popover/Popover.tsx"],"names":[],"mappings":"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","file":"chunk-XJQQQJAO.js","sourcesContent":["'use client';\n\nimport './popover.css';\nimport { Fragment, useId, useRef, type HTMLAttributes, type ReactElement, type ReactNode, type RefObject } from 'react';\nimport { Presence } from '../../../motion/presence';\nimport { useMotion, type MotionSpecs } from '../../../motion/use-motion';\nimport { resolveMotionTiming } from '../../../motion/motion-timing';\nimport type { DisableableAnimation } from '../../../motion/timing';\nimport { useControllable } from '../../internal/hooks/use-controllable';\nimport { ovCloneTrigger, useOverlayEntry, useOutsidePress, OverlayPortal } from '../../internal/overlay/layer';\nimport { useReturnFocus } from '../../internal/overlay/focus';\nimport { useAnchorPosition, type VirtualAnchor } from '../../internal/overlay/position';\nimport type { DataAttributes } from '../../../dom-props';\nimport { cx } from '../../internal/utils/cx';\n\nexport type { VirtualAnchor };\n\nconst POPOVER_TIMING = {\n open: { duration: 'base', ease: 'entrance' },\n close: { duration: 'fast', ease: 'exit' },\n} as const;\n\nexport interface PopoverProps {\n /** Controlled open state. Omit to stay uncontrolled. */\n open?: boolean;\n /** Initial state when uncontrolled. Default false. */\n defaultOpen?: boolean;\n /** Fires whenever the open state changes. Pair with `open` for controlled use. */\n onOpenChange?: (open: boolean) => void;\n\n /** Cloned to toggle the panel, and used as the anchor unless `anchor` is set. */\n trigger?: ReactElement | null;\n /** Anchor to an arbitrary rect instead of the trigger - any `{ getBoundingClientRect() }`, which an element also satisfies.\n * Drive `open` yourself; pass a new object to re-place a moving anchor. */\n anchor?: VirtualAnchor | null;\n\n /** Preferred side; flips to the opposite side when cramped. Default 'bottom'. */\n side?: 'top' | 'bottom' | 'left' | 'right';\n /** Cross-axis alignment against the trigger. Default 'start'. */\n align?: 'start' | 'center' | 'end';\n /** Caret tracking the trigger center. Default false. */\n arrow?: boolean;\n\n /** Esc + outside-press dismissal. Default true. */\n dismissible?: boolean;\n\n /** Base id for the panel; drives the trigger's `aria-controls`. Auto-generated when omitted. */\n id?: string;\n /** Standard attributes (className, style, data-*, ...) forwarded to the popover panel. */\n htmlProps?: HTMLAttributes<HTMLDivElement> & DataAttributes;\n /** Open/close timing - motion tokens only, or `null` to disable. @default open 'base'/'entrance', close 'fast'/'exit' */\n animation?: DisableableAnimation;\n /** The ENTIRE surface - paint AND semantics. Drive dismissal with `open`/`onOpenChange`. */\n children: ReactNode;\n}\n\nfunction PopoverPanel({\n panelId,\n side,\n align,\n arrow,\n dismissible,\n requestClose,\n anchor,\n triggerRef,\n htmlProps,\n animate,\n exit,\n children,\n}: {\n panelId: string;\n side: 'top' | 'bottom' | 'left' | 'right';\n align: 'start' | 'center' | 'end';\n arrow: boolean;\n dismissible: boolean;\n requestClose: () => void;\n anchor?: VirtualAnchor | null;\n triggerRef: RefObject<HTMLElement>;\n htmlProps?: HTMLAttributes<HTMLDivElement> & DataAttributes;\n children: ReactNode;\n} & MotionSpecs) {\n const panelRef = useRef<HTMLElement>(null);\n const entry = useOverlayEntry({ nodeRef: panelRef, dismissible, requestClose });\n useMotion(panelRef, { animate, exit });\n useReturnFocus(panelRef);\n useAnchorPosition({ side, align, arrow, anchor, triggerRef, panelRef });\n useOutsidePress({ entry, refs: [triggerRef, panelRef], enabled: dismissible, onPress: requestClose });\n return (\n <div\n {...htmlProps}\n id={panelId}\n ref={panelRef as RefObject<HTMLDivElement>}\n className={cx('overlay-popover', htmlProps?.className)}\n >\n {arrow && <span className=\"overlay-popover__arrow\" aria-hidden=\"true\"></span>}\n {children}\n </div>\n );\n}\n\nexport function Popover({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n trigger = null,\n anchor = null,\n side = 'bottom',\n align = 'start',\n arrow = false,\n dismissible = true,\n id,\n htmlProps,\n animation,\n children,\n}: PopoverProps) {\n const [open, setOpen] = useControllable(controlledOpen, defaultOpen, onOpenChange);\n const triggerRef = useRef<HTMLElement>(null);\n const autoId = useId();\n const panelId = id || 'popover-' + autoId;\n const close = () => setOpen(false);\n const timings = resolveMotionTiming(animation, POPOVER_TIMING);\n\n return (\n <Fragment>\n {ovCloneTrigger(trigger, { open, onPress: () => setOpen(!open), panelId, haspopup: 'true', triggerRef })}\n <OverlayPortal>\n <Presence>\n {open && (\n <PopoverPanel\n key=\"panel\"\n animate={{ opacity: [0, 1], scale: [0.96, 1], timing: timings.open }}\n exit={{ opacity: [0], scale: [0.96], timing: timings.close }}\n panelId={panelId}\n side={side}\n align={align}\n arrow={arrow}\n dismissible={dismissible}\n requestClose={close}\n anchor={anchor}\n triggerRef={triggerRef}\n htmlProps={htmlProps}\n >\n {children}\n </PopoverPanel>\n )}\n </Presence>\n </OverlayPortal>\n </Fragment>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/motion/presence-context.ts","../src/motion/use-motion.ts"],"names":["animate"],"mappings":"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","file":"chunk-XWUWYSCT.js","sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\n\nexport interface PresenceState {\n /** False once the child has been removed from `children` but is still mounted for its exit. */\n isPresent: boolean;\n /** False for children present at the Presence's own first paint when `initial={false}`. */\n initial: boolean;\n /** Claims responsibility for animating this child out; call the returned release once the\n * exit has finished. A child nobody claims is dropped as soon as it leaves `children`. */\n claimExit: () => () => void;\n}\n\nconst DETACHED: PresenceState = { isPresent: true, initial: true, claimExit: () => () => {} };\n\nexport const PresenceContext = createContext<PresenceState>(DETACHED);\n\nexport const usePresence = (): PresenceState => useContext(PresenceContext);\n","'use client';\n\nimport { useLayoutEffect, useRef, type RefObject } from 'react';\nimport { animate, type Layer, type Playback } from '../engine';\nimport { usePresence } from './presence-context';\n\nexport type Plays = Playback | Playback[] | null | undefined | void;\nexport type MotionSpec = Layer | Layer[] | ((el: HTMLElement) => Plays);\n\nconst toList = (plays: Plays): Playback[] => (!plays ? [] : Array.isArray(plays) ? plays : [plays]);\n\nexport function run(spec: MotionSpec | undefined, el: HTMLElement): Playback[] {\n if (!spec) return [];\n if (typeof spec === 'function') return toList(spec(el));\n return [Array.isArray(spec) ? animate(el, ...spec) : animate(el, spec)];\n}\n\nconst allSettled = (plays: Playback[]): Promise<void> =>\n plays.length ? Promise.all(plays.map((play) => play.finished)).then((): void => {}) : Promise.resolve();\n\nexport interface MotionSpecs {\n /** Plays on mount, and again whenever `deps` change. */\n animate?: MotionSpec;\n /** Plays when a parent `<Presence>` drops this child; it stays mounted until this finishes. */\n exit?: MotionSpec;\n /** Play `animate` on mount. Falls back to the parent Presence's own `initial`. @default true */\n initial?: boolean;\n /** Replay `animate` when these change. Must keep a stable length. @default [] */\n deps?: unknown[];\n}\n\n/** Drives `<Motion>`; use it directly on elements you hold a ref to but do not render. */\nexport function useMotion(ref: RefObject<HTMLElement | null>, { animate, exit, initial, deps }: MotionSpecs): void {\n const presence = usePresence();\n const playing = useRef<Playback[]>([]);\n const mounted = useRef(false);\n const spec = useRef({ animate, exit, initial });\n spec.current = { animate, exit, initial };\n const release = useRef<(() => void) | null>(null);\n const ownsExit = !!exit;\n\n const stop = () => {\n for (const play of playing.current) play.stop();\n playing.current = [];\n };\n\n useLayoutEffect(() => {\n if (!ownsExit) return;\n release.current = presence.claimExit();\n return () => {\n release.current?.();\n release.current = null;\n };\n }, [ownsExit]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useLayoutEffect(() => {\n const el = ref.current;\n const atMount = !mounted.current;\n mounted.current = true;\n if (!el) return;\n if (atMount && (spec.current.initial ?? presence.initial) === false) return;\n stop();\n playing.current = run(spec.current.animate, el);\n }, deps ?? []); // eslint-disable-line react-hooks/exhaustive-deps\n\n useLayoutEffect(() => {\n if (presence.isPresent || !ownsExit) return;\n const el = ref.current;\n stop();\n playing.current = el ? run(spec.current.exit, el) : [];\n allSettled(playing.current).then(() => release.current?.());\n }, [presence.isPresent]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useLayoutEffect(() => stop, []);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/composites/date-picker/calendar-panel.tsx"],"names":[],"mappings":"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","file":"chunk-Y7AJQVWJ.js","sourcesContent":["'use client';\n\nimport './date-picker.css';\nimport { useEffect, useId, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { animate } from '../../../engine';\nimport { UIMotion } from '../../../tokens/motion-tokens';\nimport { Icon } from '../../internal/icon/Icon';\nimport { Button } from '../../primitives/button/Button';\nimport { GlidePill, useGlide } from '../../../motion/glide';\nimport { Motion } from '../../../motion/element';\nimport { useDayFocus } from './use-day-focus';\nimport { MONTHS, DOW, toKey, parse, col, today, grid, tzLabel, within } from './date-utils';\nimport { cx } from '../../internal/utils/cx';\n\nconst PILL_FLIP = { timing: UIMotion.t.settle };\n\ninterface DtpPanelProps {\n val: string | null;\n commit: (key: string) => void;\n close: () => void;\n min?: string;\n max?: string;\n timezone?: string;\n label?: string;\n slot?: ReactNode;\n}\n\nexport function DtpPanel({ val, commit, min, max, timezone, label, close, slot }: DtpPanelProps) {\n const seed = val ? parse(val) : new Date();\n const [view, setView] = useState<{ y: number; m: number }>({ y: seed.getFullYear(), m: seed.getMonth() });\n const [focusKey, setFocusKey] = useState<string>(val || today());\n\n const daysRef = useRef<HTMLDivElement>(null);\n const prevViewRef = useRef<number | null>(null);\n const uid = useId();\n const pillId = 'dtp-pill-' + uid;\n\n const glide = useGlide(daysRef);\n\n const inRange = (key: string): boolean => within(key, min, max);\n\n function pickDay(key: string) {\n if (!inRange(key)) return;\n armFocus();\n setFocusKey(key);\n const d = parse(key);\n goToMonth(d.getFullYear(), d.getMonth());\n commit(key);\n }\n\n function goToMonth(y: number, m: number) {\n setView((v) => (v.y === y && v.m === m ? v : { y: y, m: m }));\n }\n function nav(dir: number) {\n const d = new Date(view.y, view.m + dir, 1);\n goToMonth(d.getFullYear(), d.getMonth());\n }\n const now = new Date();\n const viewIsCurrent = view.y === now.getFullYear() && view.m === now.getMonth();\n function goToToday() {\n const key = today();\n const d = parse(key);\n armFocus();\n setFocusKey(key);\n goToMonth(d.getFullYear(), d.getMonth());\n }\n const viewIdx = view.y * 12 + view.m;\n const armFocus = useDayFocus(daysRef, focusKey, viewIdx, '[tabindex=\"0\"]:not(:disabled)');\n useEffect(() => {\n const prev = prevViewRef.current;\n prevViewRef.current = viewIdx;\n const el = daysRef.current;\n if (prev == null || prev === viewIdx || !el) return;\n const dir = viewIdx > prev ? 1 : -1;\n animate(el, { x: [dir * 16, 0], opacity: [0, 1], timing: UIMotion.t.enter });\n }, [viewIdx]);\n\n function moveFocus(deltaDays: number, deltaMonths: number) {\n const d = parse(focusKey);\n if (deltaMonths) d.setMonth(d.getMonth() + deltaMonths);\n if (deltaDays) d.setDate(d.getDate() + deltaDays);\n const key = toKey(d);\n armFocus();\n setFocusKey(key);\n goToMonth(d.getFullYear(), d.getMonth());\n }\n function onGridKeyDown(e: KeyboardEvent<HTMLDivElement>) {\n const k = e.key;\n if (k === 'ArrowLeft') moveFocus(-1, 0);\n else if (k === 'ArrowRight') moveFocus(1, 0);\n else if (k === 'ArrowUp') moveFocus(-7, 0);\n else if (k === 'ArrowDown') moveFocus(7, 0);\n else if (k === 'PageUp') moveFocus(0, -1);\n else if (k === 'PageDown') moveFocus(0, 1);\n else if (k === 'Home') moveFocus(-col(parse(focusKey)), 0);\n else if (k === 'End') moveFocus(6 - col(parse(focusKey)), 0);\n else if (k === 'Enter' || k === ' ') pickDay(focusKey);\n else return;\n e.preventDefault();\n }\n\n const days = grid(view.y, view.m);\n const todayKey = today();\n const selKey = val || null;\n const gridKeys = days.map(toKey);\n const tabKey =\n gridKeys.indexOf(focusKey) >= 0\n ? focusKey\n : selKey && gridKeys.indexOf(selKey) >= 0\n ? selKey\n : gridKeys.indexOf(todayKey) >= 0\n ? todayKey\n : toKey(new Date(view.y, view.m, 1));\n\n const prevEnd = toKey(new Date(view.y, view.m, 0));\n const nextStart = toKey(new Date(view.y, view.m + 1, 1));\n const canPrev = !min || prevEnd >= min;\n const canNext = !max || nextStart <= max;\n\n const weeks: Date[][] = [];\n for (let w = 0; w < 6; w++) weeks.push(days.slice(w * 7, w * 7 + 7));\n\n return (\n <div className=\"dtp\" role=\"dialog\" aria-label={label || 'Pick a date'}>\n <div className=\"dtp__cal\">\n <div className=\"dtp__head\">\n <span className=\"dtp__month\" aria-live=\"polite\">\n {MONTHS[view.m]} <span className=\"dtp__year\">{view.y}</span>\n </span>\n <div className=\"dtp__navs\">\n <button\n type=\"button\"\n className=\"dtp__nav\"\n aria-label=\"Previous month\"\n disabled={!canPrev}\n onClick={() => nav(-1)}\n >\n <Icon name=\"caret-left\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"dtp__nav\"\n aria-label=\"Go to today\"\n disabled={viewIsCurrent}\n onClick={goToToday}\n >\n <Icon name=\"calendar-dot\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n className=\"dtp__nav\"\n aria-label=\"Next month\"\n disabled={!canNext}\n onClick={() => nav(1)}\n >\n <Icon name=\"caret-right\" size=\"sm\" />\n </button>\n </div>\n </div>\n <div className=\"dtp__dow\" aria-hidden=\"true\">\n {DOW.map((d) => (\n <span key={d}>{d}</span>\n ))}\n </div>\n <div\n className=\"dtp__days\"\n ref={daysRef}\n role=\"grid\"\n aria-label=\"Calendar\"\n onKeyDown={onGridKeyDown}\n onPointerLeave={glide.leave}\n >\n {weeks.map((week, wi) => (\n <div key={wi} role=\"row\" className=\"dtp__row\">\n {week.map((d) => {\n const key = toKey(d);\n const out = d.getMonth() !== view.m;\n const sel = key === selKey;\n const cls = cx('dtp__day', out && 'is-out', sel && 'is-selected', key === todayKey && 'is-today');\n return (\n <button\n key={key}\n type=\"button\"\n role=\"gridcell\"\n data-key={key}\n className={cls}\n disabled={!inRange(key)}\n tabIndex={key === tabKey ? 0 : -1}\n aria-selected={sel || undefined}\n aria-label={MONTHS[d.getMonth()] + ' ' + d.getDate() + ', ' + d.getFullYear()}\n onClick={() => pickDay(key)}\n onPointerEnter={(e) => glide.enter(e.currentTarget)}\n >\n {sel ? (\n <Motion\n as=\"span\"\n layoutId={pillId}\n layoutTransition={PILL_FLIP}\n className=\"dtp__pill\"\n aria-hidden=\"true\"\n />\n ) : null}\n <span className=\"dtp__num\">{d.getDate()}</span>\n {key === todayKey ? <span className=\"dtp__dot\" aria-hidden=\"true\"></span> : null}\n </button>\n );\n })}\n </div>\n ))}\n <GlidePill className=\"dtp__hover\" glide={glide} />\n </div>\n </div>\n\n {slot || null}\n\n <div className=\"dtp__foot\">\n {timezone ? <span className=\"dtp__tz\">{tzLabel(timezone, selKey)}</span> : null}\n <span className=\"dtp__footSpacer\"></span>\n <Button variant=\"primary\" size=\"sm\" onClick={close}>\n Done\n </Button>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine/ease.ts","../src/engine/animate.ts","../src/engine/drag.ts","../src/engine/flip.ts"],"names":[],"mappings":"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","file":"chunk-YGCVWGUG.js","sourcesContent":["import type { Bezier, MotionTransition } from '../tokens/motion-tokens';\n\nconst NAMED: Record<string, Bezier> = {\n linear: [0, 0, 1, 1],\n easeIn: [0.42, 0, 1, 1],\n easeOut: [0, 0, 0.58, 1],\n easeInOut: [0.42, 0, 0.58, 1],\n circIn: [0.55, 0, 1, 0.45],\n circOut: [0, 0.55, 0.45, 1],\n circInOut: [0.85, 0, 0.15, 1],\n backIn: [0.36, 0, 0.66, -0.56],\n backOut: [0.34, 1.56, 0.64, 1],\n backInOut: [0.68, -0.6, 0.32, 1.6],\n anticipate: [0.38, -0.4, 0.88, 1.08],\n};\n\nexport type EaseValue = NonNullable<MotionTransition['ease']>;\n\nconst toBezier = (ease: EaseValue): Bezier => (typeof ease === 'string' ? (NAMED[ease] ?? NAMED.easeInOut) : ease);\n\nconst cssBezier = (ease: EaseValue): string => `cubic-bezier(${toBezier(ease).join(',')})`;\n\nconst isSegmented = (ease: unknown): ease is EaseValue[] =>\n Array.isArray(ease) && (Array.isArray(ease[0]) || typeof ease[0] === 'string');\n\nconst ARRIVAL = 0.99;\nconst SETTLE_BAND = 0.002;\nconst MAX_SPRING_SECONDS = 4;\nconst SETTLE_LIMIT = 2.5;\nconst SETTLE_STEP = 1 / 240;\nconst OMEGA_PROBE = 0.1;\nconst OMEGA_CEILING = 1e5;\n\nfunction springAt(zeta: number, omega: number, t: number): number {\n const decay = Math.exp(-zeta * omega * t);\n if (zeta < 1) {\n const damped = omega * Math.sqrt(1 - zeta * zeta);\n return 1 - decay * (Math.cos(damped * t) + ((zeta * omega) / damped) * Math.sin(damped * t));\n }\n return 1 - decay * (1 + omega * t);\n}\n\nfunction omegaForArrival(zeta: number, visual: number): number {\n let hi = OMEGA_PROBE / visual;\n while (hi < OMEGA_CEILING && springAt(zeta, hi, visual) < ARRIVAL) hi *= 2;\n let lo = hi / 2;\n for (let i = 0; i < 40; i++) {\n const mid = (lo + hi) / 2;\n if (springAt(zeta, mid, visual) < ARRIVAL) lo = mid;\n else hi = mid;\n }\n return hi;\n}\n\nfunction settleSeconds(zeta: number, omega: number, visual: number): number {\n let last = SETTLE_STEP;\n for (let t = SETTLE_STEP; t < MAX_SPRING_SECONDS; t += SETTLE_STEP) {\n if (Math.abs(springAt(zeta, omega, t) - 1) >= SETTLE_BAND) last = t;\n }\n return Math.min(MAX_SPRING_SECONDS, visual * SETTLE_LIMIT, last + SETTLE_STEP);\n}\n\nconst SAMPLE_MS = 4;\nconst MIN_SAMPLES = 24;\nconst MAX_SAMPLES = 120;\n\nconst trim = (n: number) => Math.round(n * 1e4) / 1e4;\n\nfunction toLinearEasing(at: (progress: number) => number, durationMs: number): string {\n const steps = Math.min(MAX_SAMPLES, Math.max(MIN_SAMPLES, Math.round(durationMs / SAMPLE_MS)));\n const points: string[] = [];\n for (let i = 0; i <= steps; i++) points.push(String(trim(at(i / steps))));\n return `linear(${points.join(',')})`;\n}\n\ninterface SpringCurve {\n duration: number;\n easing: string;\n}\n\nconst springCache = new Map<string, SpringCurve>();\n\nfunction springCurve(visual: number, bounce: number): SpringCurve {\n const key = `${visual}:${bounce}`;\n const cached = springCache.get(key);\n if (cached) return cached;\n const zeta = Math.min(1, Math.max(0.05, 1 - bounce));\n const omega = omegaForArrival(zeta, visual);\n const seconds = settleSeconds(zeta, omega, visual);\n const duration = seconds * 1000;\n const at = (progress: number) => (progress >= 1 ? 1 : springAt(zeta, omega, progress * seconds));\n const curve: SpringCurve = { duration, easing: toLinearEasing(at, duration) };\n springCache.set(key, curve);\n return curve;\n}\n\nexport interface Timing extends Omit<MotionTransition, 'ease'> {\n ease?: EaseValue | EaseValue[];\n times?: number[];\n fill?: FillMode;\n}\n\nexport interface ResolvedTiming {\n duration: number;\n delay: number;\n easing: string;\n segments: string[] | null;\n}\n\nexport function resolveTiming(timing: Timing = {}): ResolvedTiming {\n const delay = (timing.delay ?? 0) * 1000;\n const spring = timing.type === 'spring' || (timing.visualDuration != null && !timing.type);\n if (spring) {\n const visual = Math.max(timing.visualDuration ?? timing.duration ?? 0.3, 0.01);\n const curve = springCurve(visual, timing.bounce ?? 0);\n return { duration: curve.duration, delay, easing: curve.easing, segments: null };\n }\n const duration = (timing.duration ?? 0.3) * 1000;\n const ease = timing.ease;\n if (isSegmented(ease)) return { duration, delay, easing: 'linear', segments: ease.map(cssBezier) };\n const bezier = ease === undefined ? NAMED.easeInOut : toBezier(ease);\n return { duration, delay, easing: cssBezier(bezier), segments: null };\n}\n","import { resolveTiming, type Timing } from './ease';\n\nexport const clock = { scale: 1 };\n\nexport interface Playback {\n stop(): void;\n finished: Promise<void>;\n}\n\ntype Vec = [number, number];\nexport type Size = number | 'auto';\n\nexport interface Layer {\n x?: number[];\n y?: number[];\n scale?: number[] | Vec[];\n opacity?: number[];\n width?: Size[];\n height?: Size[];\n timing?: Timing;\n composite?: CompositeOperation;\n}\n\nconst RESET: Record<string, string> = { translate: '0px 0px', scale: '1' };\nconst AUTO_METRIC = { width: 'offsetWidth', height: 'offsetHeight' } as const;\nconst SIZES = ['width', 'height'] as const;\n\nfunction measureAuto(el: HTMLElement, key: 'width' | 'height'): number {\n const saved = el.style.getPropertyValue(key);\n el.style.setProperty(key, 'auto');\n const measured = el[AUTO_METRIC[key]];\n if (saved) el.style.setProperty(key, saved);\n else el.style.removeProperty(key);\n return measured;\n}\n\nfunction held(list: number[], index: number): number {\n return list[Math.min(index, list.length - 1)];\n}\n\nfunction currentValue(el: HTMLElement, key: string): string {\n const raw = getComputedStyle(el).getPropertyValue(key).trim();\n return raw && raw !== 'none' ? raw : RESET[key];\n}\n\nfunction compile(el: HTMLElement, layer: Layer) {\n const frames: Record<string, string[]> = {};\n const autoKeys: string[] = [];\n\n if (layer.x?.length || layer.y?.length) {\n const x = layer.x?.length ? layer.x : [0];\n const y = layer.y?.length ? layer.y : [0];\n const count = Math.max(x.length, y.length);\n frames.translate = Array.from({ length: count }, (_, i) => `${held(x, i)}px ${held(y, i)}px`);\n }\n if (layer.scale) frames.scale = layer.scale.map((v) => (typeof v === 'number' ? String(v) : `${v[0]} ${v[1]}`));\n if (layer.opacity) frames.opacity = layer.opacity.map(String);\n\n for (const key of SIZES) {\n const list = layer[key];\n if (!list) continue;\n if (list[list.length - 1] === 'auto') autoKeys.push(key);\n const measured = list.includes('auto') ? measureAuto(el, key) : 0;\n frames[key] = list.map((v) => `${v === 'auto' ? measured : v}px`);\n }\n\n for (const [key, list] of Object.entries(frames)) if (list.length === 1) list.unshift(currentValue(el, key));\n return { frames, autoKeys };\n}\n\nconst owned = new WeakMap<HTMLElement, Map<string, Animation>>();\n\nfunction claim(el: HTMLElement, keys: string[], animation: Animation | null): void {\n const map = owned.get(el) ?? new Map<string, Animation>();\n owned.set(el, map);\n for (const key of keys) {\n const previous = map.get(key);\n if (previous && previous !== animation) previous.cancel();\n if (animation) map.set(key, animation);\n else map.delete(key);\n }\n}\n\nfunction play(el: HTMLElement, layer: Layer): Playback | null {\n const { frames, autoKeys } = compile(el, layer);\n const keys = Object.keys(frames);\n if (!keys.length) return null;\n\n const timing = layer.timing;\n const resolved = resolveTiming(timing);\n\n if (resolved.duration <= 0) {\n claim(el, keys, null);\n if (timing?.fill !== 'none') for (const key of keys) el.style.setProperty(key, frames[key][frames[key].length - 1]);\n return null;\n }\n\n const shaped: PropertyIndexedKeyframes = { ...frames };\n if (timing?.times) shaped.offset = timing.times;\n if (resolved.segments) shaped.easing = resolved.segments;\n\n const animation = el.animate(shaped, {\n duration: resolved.duration,\n delay: resolved.delay,\n easing: resolved.easing,\n fill: timing?.fill ?? 'both',\n composite: layer.composite,\n });\n animation.playbackRate = 1 / clock.scale;\n if (layer.composite !== 'add') claim(el, keys, animation);\n\n const finished = animation.finished.then(\n (): void => {\n if (!autoKeys.length) return;\n animation.commitStyles();\n animation.cancel();\n for (const key of autoKeys) el.style.setProperty(key, 'auto');\n },\n (): void => {},\n );\n\n return { stop: () => animation.cancel(), finished };\n}\n\nconst settled: Playback = { stop() {}, finished: Promise.resolve() };\n\nexport function animate(el: HTMLElement, ...layers: Layer[]): Playback {\n const plays: Playback[] = [];\n for (const layer of layers) {\n const started = play(el, layer);\n if (started) plays.push(started);\n }\n if (!plays.length) return settled;\n if (plays.length === 1) return plays[0];\n return {\n stop: () => {\n for (const started of plays) started.stop();\n },\n finished: Promise.all(plays.map((started) => started.finished)).then((): void => {}),\n };\n}\n","interface Axes {\n x: number;\n y: number;\n}\n\nexport interface PanInfo {\n offset: Axes;\n velocity: Axes;\n}\n\ninterface DragHandlers {\n onMove?: (info: PanInfo) => void;\n onEnd?: (info: PanInfo) => void;\n}\n\nexport function startDrag(origin: { clientX: number; clientY: number }, handlers: DragHandlers): () => void {\n const startX = origin.clientX;\n const startY = origin.clientY;\n let lastX = startX;\n let lastY = startY;\n let lastTime = performance.now();\n let velocity: Axes = { x: 0, y: 0 };\n\n const info = (): PanInfo => ({ offset: { x: lastX - startX, y: lastY - startY }, velocity });\n\n const move = (event: PointerEvent) => {\n const now = performance.now();\n const elapsed = now - lastTime;\n if (elapsed > 0) {\n velocity = { x: ((event.clientX - lastX) / elapsed) * 1000, y: ((event.clientY - lastY) / elapsed) * 1000 };\n lastTime = now;\n }\n lastX = event.clientX;\n lastY = event.clientY;\n handlers.onMove?.(info());\n };\n\n const detach = () => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', end);\n window.removeEventListener('pointercancel', end);\n };\n\n const end = () => {\n detach();\n handlers.onEnd?.(info());\n };\n\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', end);\n window.addEventListener('pointercancel', end);\n return detach;\n}\n","import { animate, type Layer, type Playback } from './animate';\nimport type { Timing } from './ease';\n\nexport interface Box {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\nconst MOVE_EPSILON = 0.5;\nconst SCALE_EPSILON = 0.01;\n\nexport function measure(el: HTMLElement): Box {\n const rect = el.getBoundingClientRect();\n return { left: rect.left + window.scrollX, top: rect.top + window.scrollY, width: rect.width, height: rect.height };\n}\n\nconst shared = new Map<string, Box>();\n\nexport function keepShared(key: string, box: Box): void {\n shared.set(key, box);\n}\n\nexport function readShared(key: string): Box | null {\n return shared.get(key) ?? null;\n}\n\nexport function dropShared(key: string): void {\n shared.delete(key);\n}\n\nexport interface FlipOptions {\n scale?: boolean;\n timing?: Timing;\n}\n\nexport function flip(el: HTMLElement, from: Box, options: FlipOptions = {}): Playback | null {\n const to = measure(el);\n if (!to.width || !to.height) return null;\n\n const dx = from.left - to.left;\n const dy = from.top - to.top;\n const sx = options.scale === false ? 1 : from.width / to.width;\n const sy = options.scale === false ? 1 : from.height / to.height;\n\n const moved = Math.abs(dx) > MOVE_EPSILON || Math.abs(dy) > MOVE_EPSILON;\n const scaled = Math.abs(sx - 1) > SCALE_EPSILON || Math.abs(sy - 1) > SCALE_EPSILON;\n if (!moved && !scaled) return null;\n\n const layer: Layer = { x: [dx, 0], y: [dy, 0], timing: { ...options.timing, fill: 'none' } };\n if (scaled)\n layer.scale = [\n [sx, sy],\n [1, 1],\n ];\n\n return animate(el, layer);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/composites/date-picker/field-shell.tsx","../src/components/composites/date-picker/date-utils.ts"],"names":[],"mappings":"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","file":"chunk-YGGCQNNU.js","sourcesContent":["'use client';\n\nimport './date-picker.css';\nimport type { ButtonHTMLAttributes, HTMLAttributes, ReactNode, Ref } from 'react';\nimport { Icon, type IconName } from '../../internal/icon/Icon';\nimport { FieldLabel, FieldMessage } from '../../primitives/input/field-chrome';\nimport type { DisableableAnimation } from '../../../motion/timing';\nimport type { DataAttributes } from '../../../dom-props';\nimport { cx } from '../../internal/utils/cx';\n\nexport interface DateFieldBaseProps {\n /** Field label rendered above the trigger. */\n label?: string;\n /** Asterisk on the label. @default false */\n required?: boolean;\n /** Danger border + message color (.fld is-error). @default false */\n invalid?: boolean;\n /** Helper / error text under the field. */\n message?: string;\n /** Disable the field. @default false */\n disabled?: boolean;\n /** Extra class on the field shell root. */\n className?: string;\n /** Standard <div> attributes (style, data-*, aria-*, ...) forwarded to the field shell root. */\n htmlProps?: HTMLAttributes<HTMLDivElement> & DataAttributes;\n /** Popover open/close timing - motion tokens only, or `null` to disable. (Not used by TimeField, which is inline.) */\n animation?: DisableableAnimation;\n}\n\nexport interface FieldShellProps {\n variant: string;\n label?: string;\n required?: boolean;\n invalid?: boolean;\n message?: ReactNode;\n icon: IconName;\n className?: string;\n htmlProps?: HTMLAttributes<HTMLDivElement> & DataAttributes;\n children?: ReactNode;\n}\n\nexport function FieldShell({\n variant,\n label,\n required,\n invalid,\n message,\n icon,\n className,\n htmlProps,\n children,\n}: FieldShellProps) {\n const cls = cx('fld', variant, 'fld--has-lead', invalid && 'is-error', className, htmlProps?.className);\n return (\n <div {...htmlProps} className={cls}>\n <FieldLabel label={label} required={required} />\n <div className=\"fld__control\">\n {children}\n <span className=\"fld__icon fld__icon--lead\" aria-hidden=\"true\">\n <Icon name={icon} size=\"md\" />\n </span>\n </div>\n <FieldMessage message={message ? <span>{message}</span> : null} />\n </div>\n );\n}\n\nexport function FieldTrigger({\n display,\n placeholder,\n disabled,\n ...rest\n}: { display: string | null; placeholder: string; disabled?: boolean } & ButtonHTMLAttributes<HTMLButtonElement> & {\n ref?: Ref<HTMLButtonElement>;\n }) {\n return (\n <button type=\"button\" className=\"fld__input dtf__trigger\" disabled={disabled} {...rest}>\n {display ? (\n <span className=\"dtf__value\">{display}</span>\n ) : (\n <span className=\"dtf__placeholder\">{placeholder}</span>\n )}\n </button>\n );\n}\n","export const MONTHS: string[] = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\nexport const DOW: string[] = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\nexport const pad = (n: number): string => String(n).padStart(2, '0');\nexport const toKey = (d: Date): string => d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate());\nexport function parse(k: string): Date {\n const p = k.split('-').map(Number);\n return new Date(p[0], p[1] - 1, p[2]);\n}\nexport const today = (): string => toKey(new Date());\nexport const add = (k: string, days: number): string => {\n const d = parse(k);\n d.setDate(d.getDate() + days);\n return toKey(d);\n};\nexport const col = (d: Date): number => (d.getDay() + 6) % 7;\n\nexport const within = (k: string, min?: string, max?: string): boolean => (!min || k >= min) && (!max || k <= max);\n\nexport function displayDay(k: string | null): string | null {\n if (!k) return null;\n const d = parse(k);\n const year = d.getFullYear() === new Date().getFullYear() ? '' : ', ' + d.getFullYear();\n return MONTHS[d.getMonth()].slice(0, 3) + ' ' + pad(d.getDate()) + year;\n}\n\nexport function grid(y: number, m: number): Date[] {\n const lead = (new Date(y, m, 1).getDay() + 6) % 7;\n const days: Date[] = [];\n for (let i = 0; i < 42; i++) days.push(new Date(y, m, 1 - lead + i));\n return days;\n}\n\nexport function tzLabel(tz: string, dateKey?: string): string {\n try {\n const at = dateKey ? parse(dateKey) : new Date();\n const parts = new Intl.DateTimeFormat('en-US', { timeZone: tz, timeZoneName: 'shortOffset' }).formatToParts(at);\n const name = parts.find((p) => p.type === 'timeZoneName');\n return tz.replace(/_/g, ' ') + (name ? ' - ' + name.value : '');\n } catch (_e) {\n return tz;\n }\n}\n"]}
|
package/dist/count-badge.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import * as react from 'react';
|
|
2
|
-
import { BadgeProps } from './badge.js';
|
|
3
|
-
import './dom-props-C0jrllBw.js';
|
|
4
|
-
|
|
5
|
-
interface CountBadgeProps extends Omit<BadgeProps, 'children'> {
|
|
6
|
-
/** The chip content - stringified; in `roll` mode each digit becomes an odometer column. */
|
|
7
|
-
value: string | number;
|
|
8
|
-
/** Odometer: digits roll vertically on change. */
|
|
9
|
-
roll?: boolean;
|
|
10
|
-
}
|
|
11
|
-
declare function CountBadge({ value, tone, roll, ...rest }: CountBadgeProps): react.JSX.Element;
|
|
12
|
-
|
|
13
|
-
export { CountBadge, type CountBadgeProps };
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import * as react from 'react';
|
|
2
|
-
import { D as DateFieldBaseProps } from './field-shell-Cuda-feL.js';
|
|
3
|
-
import './timing-7JA_zQHP.js';
|
|
4
|
-
import './motion-scale-Canq4stZ.js';
|
|
5
|
-
import './dom-props-C0jrllBw.js';
|
|
6
|
-
|
|
7
|
-
/** A date range as wall-clock 'YYYY-MM-DD' endpoints, inclusive. */
|
|
8
|
-
interface DateRange {
|
|
9
|
-
/** Range start, inclusive - `'YYYY-MM-DD'`. */
|
|
10
|
-
start: string;
|
|
11
|
-
/** Range end, inclusive - `'YYYY-MM-DD'`. Never before `start`. */
|
|
12
|
-
end: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
interface DateRangeFieldProps extends DateFieldBaseProps {
|
|
16
|
-
/** Controlled value - both endpoints, or null when empty. */
|
|
17
|
-
value?: DateRange | null;
|
|
18
|
-
/** Uncontrolled initial range. Use instead of `value`. @default null */
|
|
19
|
-
defaultValue?: DateRange | null;
|
|
20
|
-
/** Fires only on a COMPLETE range (a lone anchor never commits). */
|
|
21
|
-
onChange?: (value: DateRange) => void;
|
|
22
|
-
/** Trigger text shown when no range is picked. @default 'Pick a date range' */
|
|
23
|
-
placeholder?: string;
|
|
24
|
-
/** IANA timezone (e.g. 'Europe/Riga') - display context, shown in the footer. */
|
|
25
|
-
timezone?: string;
|
|
26
|
-
/** Earliest pickable date, 'YYYY-MM-DD', inclusive. */
|
|
27
|
-
min?: string;
|
|
28
|
-
/** Latest pickable date, 'YYYY-MM-DD', inclusive. */
|
|
29
|
-
max?: string;
|
|
30
|
-
}
|
|
31
|
-
declare function DateRangeField({ value, defaultValue, onChange, label, placeholder, timezone, min, max, required, invalid, message, disabled, className, htmlProps, animation, }: DateRangeFieldProps): react.JSX.Element;
|
|
32
|
-
|
|
33
|
-
export { type DateRange, DateRangeField, type DateRangeFieldProps };
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
interface FieldIdProps {
|
|
4
|
-
/** Field id, ties the label to the control. */
|
|
5
|
-
id?: string;
|
|
6
|
-
}
|
|
7
|
-
interface FieldRequirementProps {
|
|
8
|
-
/** Mark the control required - reaches the native element and shows a danger `*` after the label. */
|
|
9
|
-
required?: boolean;
|
|
10
|
-
/** Show a muted "(optional)" after the label. */
|
|
11
|
-
optional?: boolean;
|
|
12
|
-
}
|
|
13
|
-
interface FieldCoreMessagingProps {
|
|
14
|
-
/** Label text (sentence case). */
|
|
15
|
-
label?: ReactNode;
|
|
16
|
-
/** Neutral helper text - shown when there's no validation message. */
|
|
17
|
-
helper?: ReactNode;
|
|
18
|
-
/** Error message - sets the error state (border + icon + colour). Wins over warning/success/helper. */
|
|
19
|
-
error?: ReactNode;
|
|
20
|
-
}
|
|
21
|
-
interface FieldMessagingProps extends FieldIdProps, FieldRequirementProps, FieldCoreMessagingProps {
|
|
22
|
-
/** Warning message - amber state. Loses to `error`; wins over `success`/`helper`. */
|
|
23
|
-
warning?: ReactNode;
|
|
24
|
-
/** Success message - green state. Loses to `error`/`warning`; wins over `helper`. */
|
|
25
|
-
success?: ReactNode;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type { FieldIdProps as F, FieldCoreMessagingProps as a, FieldMessagingProps as b, FieldRequirementProps as c };
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { HTMLAttributes } from 'react';
|
|
2
|
-
import { D as DisableableAnimation } from './timing-7JA_zQHP.js';
|
|
3
|
-
import { D as DataAttributes } from './dom-props-C0jrllBw.js';
|
|
4
|
-
|
|
5
|
-
interface DateFieldBaseProps {
|
|
6
|
-
/** Field label rendered above the trigger. */
|
|
7
|
-
label?: string;
|
|
8
|
-
/** Asterisk on the label. @default false */
|
|
9
|
-
required?: boolean;
|
|
10
|
-
/** Danger border + message color (.fld is-error). @default false */
|
|
11
|
-
invalid?: boolean;
|
|
12
|
-
/** Helper / error text under the field. */
|
|
13
|
-
message?: string;
|
|
14
|
-
/** Disable the field. @default false */
|
|
15
|
-
disabled?: boolean;
|
|
16
|
-
/** Extra class on the field shell root. */
|
|
17
|
-
className?: string;
|
|
18
|
-
/** Standard <div> attributes (style, data-*, aria-*, ...) forwarded to the field shell root. */
|
|
19
|
-
htmlProps?: HTMLAttributes<HTMLDivElement> & DataAttributes;
|
|
20
|
-
/** Popover open/close timing - motion tokens only, or `null` to disable. (Not used by TimeField, which is inline.) */
|
|
21
|
-
animation?: DisableableAnimation;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export type { DateFieldBaseProps as D };
|
package/dist/glide.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import * as react from 'react';
|
|
2
|
-
import { RefObject } from 'react';
|
|
3
|
-
|
|
4
|
-
type GlideApi = ReturnType<typeof useGlide>;
|
|
5
|
-
declare function useGlide<T extends HTMLElement>(containerRef: RefObject<T | null>): {
|
|
6
|
-
ref: RefObject<HTMLSpanElement>;
|
|
7
|
-
enter: (target: HTMLElement | null) => void;
|
|
8
|
-
leave: () => void;
|
|
9
|
-
};
|
|
10
|
-
declare function GlidePill({ className, glide }: {
|
|
11
|
-
className?: string;
|
|
12
|
-
glide: GlideApi;
|
|
13
|
-
}): react.JSX.Element;
|
|
14
|
-
|
|
15
|
-
export { type GlideApi, GlidePill, useGlide };
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import * as react from 'react';
|
|
2
|
-
|
|
3
|
-
interface SlowmoState {
|
|
4
|
-
/** 1 = real time. >1 = that many times slower (4 = quarter speed). */
|
|
5
|
-
factor: number;
|
|
6
|
-
/** Freeze motion in place - useful for inspecting a transition mid-flight. */
|
|
7
|
-
paused: boolean;
|
|
8
|
-
}
|
|
9
|
-
interface SlowmoOptions {
|
|
10
|
-
/** Also scale setTimeout/setInterval so duration-coupled JS cleanups don't truncate
|
|
11
|
-
* slowed CSS. Turn off if stretched app timers get in your way. @default true */
|
|
12
|
-
scaleTimers: boolean;
|
|
13
|
-
}
|
|
14
|
-
/** Imperative control surface - drive slow-mo from a console, a hotkey, or the panel.
|
|
15
|
-
* Safe to call during SSR (no-ops the DOM work, still tracks state for hydration). */
|
|
16
|
-
declare const motionSlowmo: {
|
|
17
|
-
/** Current state (a copy). */
|
|
18
|
-
get(): SlowmoState;
|
|
19
|
-
/** Merge a partial state. factor is clamped to [1, 64]. */
|
|
20
|
-
set(patch: Partial<SlowmoState>): void;
|
|
21
|
-
/** Tune engine behaviour (e.g. stop scaling timers). Applies immediately if active. */
|
|
22
|
-
configure(patch: Partial<SlowmoOptions>): void;
|
|
23
|
-
/** Convenience: back to real time and unpaused. */
|
|
24
|
-
reset(): void;
|
|
25
|
-
/** Subscribe to state changes; returns an unsubscribe fn. */
|
|
26
|
-
subscribe(cb: (s: SlowmoState) => void): () => void;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
type MotionDevtoolsPlacement = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
30
|
-
interface MotionDevtoolsProps {
|
|
31
|
-
/** Which corner of the viewport to pin to. @default 'bottom-right' */
|
|
32
|
-
placement?: MotionDevtoolsPlacement;
|
|
33
|
-
/** Distance from the viewport edges, in px. @default 16 */
|
|
34
|
-
offset?: number;
|
|
35
|
-
/** Quick-select slow-down factors (1 = real time). @default [1, 2, 4, 8, 16] */
|
|
36
|
-
presets?: number[];
|
|
37
|
-
/** Upper bound of the fine slider. @default 16 */
|
|
38
|
-
maxFactor?: number;
|
|
39
|
-
/** Slow-down factor to start at. @default 1 */
|
|
40
|
-
defaultFactor?: number;
|
|
41
|
-
/** Scale setTimeout/setInterval too, so duration-coupled JS cleanups don't truncate
|
|
42
|
-
* slowed CSS. Exposed as a live toggle in the panel. @default true */
|
|
43
|
-
scaleTimers?: boolean;
|
|
44
|
-
/** Remember the chosen factor across reloads (localStorage). @default true */
|
|
45
|
-
persist?: boolean;
|
|
46
|
-
/** Start with the full panel open rather than collapsed to its header. @default false */
|
|
47
|
-
defaultOpen?: boolean;
|
|
48
|
-
}
|
|
49
|
-
declare function MotionDevtools({ placement, offset, presets, maxFactor, defaultFactor, scaleTimers, persist, defaultOpen, }: MotionDevtoolsProps): react.ReactPortal;
|
|
50
|
-
|
|
51
|
-
export { MotionDevtools, type MotionDevtoolsPlacement, type MotionDevtoolsProps, type SlowmoState, MotionDevtools as default, motionSlowmo };
|
package/dist/status-badge.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import * as react from 'react';
|
|
2
|
-
import { BadgeProps } from './badge.js';
|
|
3
|
-
import './dom-props-C0jrllBw.js';
|
|
4
|
-
|
|
5
|
-
type PostStatus = 'draft' | 'scheduled' | 'processing' | 'published' | 'failed';
|
|
6
|
-
declare const POST_STATUS: Record<PostStatus, {
|
|
7
|
-
tone: BadgeProps['tone'];
|
|
8
|
-
label: string;
|
|
9
|
-
live?: boolean;
|
|
10
|
-
}>;
|
|
11
|
-
interface StatusBadgeProps extends Omit<BadgeProps, 'children' | 'tone'> {
|
|
12
|
-
/** Lifecycle state - maps to a canonical `tone` + label (`processing` also pulses live). Unknown falls back to `draft`. */
|
|
13
|
-
status: PostStatus;
|
|
14
|
-
/** Morph in place as `status` changes instead of swapping. */
|
|
15
|
-
morph?: boolean;
|
|
16
|
-
}
|
|
17
|
-
declare function StatusBadge({ status, morph, ...rest }: StatusBadgeProps): react.JSX.Element;
|
|
18
|
-
|
|
19
|
-
export { POST_STATUS, type PostStatus, StatusBadge, type StatusBadgeProps };
|
package/dist/toast.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { HTMLAttributes, ReactElement } from 'react';
|
|
2
|
-
import { ToasterConfig } from './toast-store.js';
|
|
3
|
-
export { toast } from './toast-store.js';
|
|
4
|
-
import { D as DataAttributes } from './dom-props-C0jrllBw.js';
|
|
5
|
-
|
|
6
|
-
interface ToasterProps extends Partial<ToasterConfig> {
|
|
7
|
-
/** Standard <ol> attributes (className, style, data-*, ...) forwarded to the toast viewport. */
|
|
8
|
-
htmlProps?: HTMLAttributes<HTMLOListElement> & DataAttributes;
|
|
9
|
-
}
|
|
10
|
-
declare function Toaster({ htmlProps, ...props }: ToasterProps): ReactElement;
|
|
11
|
-
|
|
12
|
-
export { Toaster, type ToasterProps };
|
package/llms.txt
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
# Zyncat UI - LLM usage guide
|
|
2
|
-
|
|
3
|
-
Premium React 19 design system, shipped as built ESM + types. This is a compact per-component
|
|
4
|
-
index; full prop types (with docs) live in node_modules/@zyncat/ui/dist/*.d.ts.
|
|
5
|
-
|
|
6
|
-
Setup:
|
|
7
|
-
import { Button } from '@zyncat/ui/button'; // one subpath per component - there is no barrel entry
|
|
8
|
-
import '@zyncat/ui/styles.css'; // base layer (fonts+tokens) - link ONCE; each component lazy-loads its own CSS
|
|
9
|
-
Peers: react, react-dom. (The curated Phosphor glyphs used internally are bundled in - not a peer.)
|
|
10
|
-
Animation is built in - a ~2.5 kB WAAPI engine, no animation library to install.
|
|
11
|
-
No bundler/transpile config - built ESM keeps 'use client' intact for the Next.js App Router.
|
|
12
|
-
|
|
13
|
-
Conventions:
|
|
14
|
-
- Sentence case everywhere; no emoji or exclamation marks in UI. One primary <Button> per view.
|
|
15
|
-
- Numbers, times, IDs, status read mono + tabular. Status words: Scheduled, Draft, Published, Failed.
|
|
16
|
-
- Status hues (info/success/warning/danger) only for genuine status; hierarchy from the neutral ramp.
|
|
17
|
-
- Icons: Zyncat UI renders its own glyphs from a bundled curated Phosphor set, but does NOT
|
|
18
|
-
export an Icon component. Where an example below shows <Icon name="..." />, that is YOUR OWN icon
|
|
19
|
-
node - any ReactNode you pass into the prop (e.g. an @phosphor-icons/react element).
|
|
20
|
-
|
|
21
|
-
Every named export is also a subpath: @zyncat/ui/<kebab-name> (e.g. @zyncat/ui/status-badge).
|
|
22
|
-
|
|
23
|
-
Agents: prefer the bundled MCP server over scanning this file or node_modules - register
|
|
24
|
-
{ "mcpServers": { "zyncat-ui": { "command": "node", "args": ["./node_modules/@zyncat/ui/dist/mcp.js"] } } }
|
|
25
|
-
then use list_components / get_component / search_api / get_tokens.
|
|
26
|
-
|
|
27
|
-
============================================================ PRIMITIVES
|
|
28
|
-
|
|
29
|
-
Button - @zyncat/ui/button
|
|
30
|
-
One control for every click; exactly one primary per view. variant primary|secondary|ghost|danger|link, size sm|md|lg|icon, loading, disabled. Icons are plain children - Button lays them out in a centered row with gap, no iconLeft/iconRight slots.
|
|
31
|
-
<Button variant="primary"><Icon name="plus" size="sm" />Schedule post</Button>
|
|
32
|
-
<Button size="icon" aria-label="Close"><Icon name="x" size="sm" /></Button>
|
|
33
|
-
|
|
34
|
-
Collapse - @zyncat/ui/collapse
|
|
35
|
-
Layout-transition primitive; eases height open/closed, never teleports. Closed content also
|
|
36
|
-
leaves the tab order, accessibility tree and hit-testing once the exit completes; reopening is
|
|
37
|
-
focusable immediately. animation takes motion tokens ONLY - { duration, ease }, each one token
|
|
38
|
-
(fast|base|slow|slower|slowest / standard|entrance|exit|spring|glide) or per-direction { open, close }.
|
|
39
|
-
<Collapse open={open} animation={{ duration: { close: 'fast' }, ease: { close: 'exit' } }}><div>...revealed content...</div></Collapse>
|
|
40
|
-
|
|
41
|
-
Glide / GlidePill - @zyncat/ui/glide
|
|
42
|
-
A persistent background pill that glides smoothly between hovered/active elements. Container must be `position: relative`.
|
|
43
|
-
const glide = useGlide(containerRef); // { ref, enter, leave } - pass the whole thing to GlidePill
|
|
44
|
-
<nav ref={containerRef} onPointerLeave={glide.leave}>
|
|
45
|
-
<GlidePill glide={glide} className="my-pill" />
|
|
46
|
-
<button onPointerEnter={(e) => glide.enter(e.currentTarget)}>Item 1</button>
|
|
47
|
-
</nav>
|
|
48
|
-
|
|
49
|
-
Badge - @zyncat/ui/badge
|
|
50
|
-
Glass or outline chip. tone neutral|info|success|warning|danger, dot, live, variant="outline", pill, size="sm".
|
|
51
|
-
<Badge tone="success" pill>Published</Badge>
|
|
52
|
-
|
|
53
|
-
StatusBadge - @zyncat/ui/status-badge
|
|
54
|
-
Canonical post status - tone + one-word label. status draft|scheduled|processing|published|failed; add `morph` to animate in place as status changes.
|
|
55
|
-
<StatusBadge status="published" />
|
|
56
|
-
<StatusBadge status={s} morph />
|
|
57
|
-
|
|
58
|
-
CountBadge - @zyncat/ui/count-badge
|
|
59
|
-
Mono tabular count; `roll` animates digits like an odometer. value: number | string.
|
|
60
|
-
<CountBadge value="7 / 10" />
|
|
61
|
-
<CountBadge value={count} roll tone="info" />
|
|
62
|
-
|
|
63
|
-
============================================================ FORMS
|
|
64
|
-
(all take label, helper/error/warning/success, size sm|md|lg, disabled)
|
|
65
|
-
|
|
66
|
-
TextField - @zyncat/ui/text-field
|
|
67
|
-
Base text input; states disclose via Collapse. leadingIcon, clearable, optional/required.
|
|
68
|
-
<TextField id="ws" label="Workspace name" required value={v} onChange={(e) => set(e.target.value)} />
|
|
69
|
-
<TextField id="h" label="Username" error="Must be at least 4 characters." value={v} onChange={...} />
|
|
70
|
-
|
|
71
|
-
NumberField - @zyncat/ui/number-field
|
|
72
|
-
Tabular figures, caret steppers, unit suffix, clamp to [min,max]. onChange(value: number).
|
|
73
|
-
<NumberField id="seats" label="Seats" unit="users" min={1} max={50} value={n} onChange={setN} />
|
|
74
|
-
|
|
75
|
-
OtpField - @zyncat/ui/otp-field
|
|
76
|
-
Segmented one-time code; auto-advance, paste-to-fill. length, group, error, size.
|
|
77
|
-
<OtpField length={6} group={3} value={code} onChange={setCode} />
|
|
78
|
-
|
|
79
|
-
Textarea - @zyncat/ui/textarea
|
|
80
|
-
Auto-grow, char meter (max), ⌘/Ctrl+↵ submit (onSubmit). minRows/maxRows.
|
|
81
|
-
<Textarea id="bio" label="Bio" max={280} minRows={4} value={v} onChange={(e) => set(e.target.value)} onSubmit={save} />
|
|
82
|
-
|
|
83
|
-
Checkbox - @zyncat/ui/checkbox
|
|
84
|
-
Stages a choice. label, description, indeterminate, invalid, required, disabled. Standard checked/onChange.
|
|
85
|
-
<Checkbox label="Email me about product updates" checked={on} onChange={(e) => set(e.target.checked)} />
|
|
86
|
-
|
|
87
|
-
Toggle - @zyncat/ui/toggle
|
|
88
|
-
Actuates a setting on the spot. label, description; checked/onChange like a checkbox.
|
|
89
|
-
<Toggle label="Auto-save drafts" checked={on} onChange={(e) => set(e.target.checked)} />
|
|
90
|
-
|
|
91
|
-
RadioGroup - @zyncat/ui/radio-group
|
|
92
|
-
Pick exactly one. options: RadioOption[] ({ value, label, description?, icon?, disabled? }); variant rows|cards, orientation; value/onChange(value).
|
|
93
|
-
<RadioGroup name="role" label="Member role" value={role} onChange={setRole} options={ROLES} />
|
|
94
|
-
|
|
95
|
-
Select - @zyncat/ui/select
|
|
96
|
-
Single-select listbox. options: SelectOption[]; value: string|null, onChange(value); searchable, leadingIcon, placeholder, invalid, loading, ariaLabel.
|
|
97
|
-
<Select options={TIMEZONES} value={tz} onChange={setTz} searchable placeholder="Choose a time zone" ariaLabel="Time zone" />
|
|
98
|
-
|
|
99
|
-
MultiSelect - @zyncat/ui/multi-select
|
|
100
|
-
Many-of listbox; stays open while toggling, trigger summarises as first +N. value: string[], onChange(string[]); searchable.
|
|
101
|
-
<MultiSelect options={PEOPLE} value={ids} onChange={setIds} placeholder="Choose members" ariaLabel="Members" />
|
|
102
|
-
|
|
103
|
-
============================================================ DATA DISPLAY
|
|
104
|
-
|
|
105
|
-
Avatar - @zyncat/ui/avatar
|
|
106
|
-
Identity mark: image, initials, or silhouette. name, src, size xs|sm|md|lg|xl, status online|away|busy|offline, shape, paletteIndex, icon.
|
|
107
|
-
<Avatar name="Ana Ng" src="..." status="online" />
|
|
108
|
-
|
|
109
|
-
AvatarGroup - @zyncat/ui/avatar-group
|
|
110
|
-
Overlapping avatars with +N overflow. max, size; children are <Avatar>s.
|
|
111
|
-
<AvatarGroup max={4} size="sm"><Avatar name="Ana Ng" />...</AvatarGroup>
|
|
112
|
-
|
|
113
|
-
Tag / TagGroup - @zyncat/ui/tag
|
|
114
|
-
User-owned label (a control, not a status). icon, size, disabled, onRemove + removeLabel (removable). TagGroup wraps a labelled set.
|
|
115
|
-
<Tag icon={<Icon name="hash" />} onRemove={fn} removeLabel="Remove design">design</Tag>
|
|
116
|
-
|
|
117
|
-
ToggleTag - @zyncat/ui/toggle-tag
|
|
118
|
-
Many-of-many filter chip. selected/onChange(next) or defaultSelected; icon, count.
|
|
119
|
-
<ToggleTag selected={on} onChange={setOn} icon={<Icon name="star" />} count={48}>Starred</ToggleTag>
|
|
120
|
-
|
|
121
|
-
Table - @zyncat/ui/table
|
|
122
|
-
Declare columns + rows; owns sort, selection, stickiness, overflow. columns: TableColumn<T>[] ({ key, label, render?, sortable?, sortBy?, align?, mono?, strong?, grow? }); selectable, defaultSort, footer.
|
|
123
|
-
<Table<Invoice> ariaLabel="Invoices" columns={COLUMNS} rows={INVOICES} selectable defaultSort={{ key: 'amount', dir: 'desc' }} />
|
|
124
|
-
|
|
125
|
-
Pagination - @zyncat/ui/pagination
|
|
126
|
-
Cursor strip: mono range readout + prev/next pair. range: [from,to], total?, hasPrev/hasNext, onPrev/onNext, ariaLabel.
|
|
127
|
-
<Pagination ariaLabel="Rows" range={[from, to]} total={312} hasPrev hasNext onPrev={...} onNext={...} />
|
|
128
|
-
|
|
129
|
-
============================================================ DATE, TIME & TABS
|
|
130
|
-
(value is a string; onChange(value | null); timezone, min/max, disabled)
|
|
131
|
-
|
|
132
|
-
DateField - @zyncat/ui/date-field
|
|
133
|
-
Month calendar in a popover; value 'YYYY-MM-DD'.
|
|
134
|
-
<DateField label="Start date" value={d} onChange={setD} timezone="Europe/Riga" min="2026-06-01" />
|
|
135
|
-
|
|
136
|
-
DateTimeField - @zyncat/ui/datetime-field
|
|
137
|
-
Calendar + segmented HH:MM; value 'YYYY-MM-DDTHH:mm'. format 12h|24h, minuteStep.
|
|
138
|
-
<DateTimeField label="Due at" value={v} onChange={setV} format="12h" minuteStep={15} />
|
|
139
|
-
|
|
140
|
-
DateRangeField - @zyncat/ui/date-range-field
|
|
141
|
-
Two-tap auto-ordering window; value DateRange { start, end } | null; commits when both ends exist.
|
|
142
|
-
<DateRangeField label="Reporting period" value={r} onChange={setR} />
|
|
143
|
-
|
|
144
|
-
TimeField - @zyncat/ui/time-field
|
|
145
|
-
Standalone segmented time; value 'HH:mm'; bounds saturate. format, minuteStep.
|
|
146
|
-
<TimeField label="Send at" value={t} onChange={setT} format="12h" minuteStep={15} />
|
|
147
|
-
|
|
148
|
-
Tabs / TabPanel - @zyncat/ui/tabs
|
|
149
|
-
Line tabs; the ink reaches then releases; panels enter from the side you moved toward. items: TabItem[]; value/onChange(value, dir). Pair with <TabPanel name tab dir>.
|
|
150
|
-
<Tabs name="views" ariaLabel="Workspace views" value={view} onChange={(v, d) => { setView(v); setDir(d); }} items={items} />
|
|
151
|
-
<TabPanel name="views" tab={view} dir={dir}>...</TabPanel>
|
|
152
|
-
|
|
153
|
-
============================================================ OVERLAYS & FEEDBACK
|
|
154
|
-
|
|
155
|
-
Alert - @zyncat/ui/alert
|
|
156
|
-
Persistent, in-flow status. tone, title, children (body), action { label, onClick }, dismissible, banner, open/onDismiss (controlled).
|
|
157
|
-
<Alert tone="warning" title="Your trial ends in 5 days" action={{ label: 'Upgrade', onClick: fn }}>Add a plan...</Alert>
|
|
158
|
-
|
|
159
|
-
Toast - @zyncat/ui/toast (imperative; mount <Toaster /> once at the app root, then call toast() from anywhere)
|
|
160
|
-
<Toaster /> props: position ('bottom-right' default), duration, visibleToasts, gap, offset, expand. Without it, toast() no-ops.
|
|
161
|
-
toast(msg) - toast.success/error/warning/info(msg, { description, action }) - toast.promise(p, { loading, success, error }) - toast.loading - toast.dismiss().
|
|
162
|
-
import { Toaster, toast } from '@zyncat/ui/toast';
|
|
163
|
-
// once at the root: <Toaster position="bottom-right" />
|
|
164
|
-
toast.success('Changes saved', { description: 'Synced to the cloud' });
|
|
165
|
-
toast.promise(save(), { loading: 'Saving...', success: (v) => `Saved - ${v.count}`, error: (e) => `Failed - ${e.message}` });
|
|
166
|
-
|
|
167
|
-
Tooltip - @zyncat/ui/tooltip
|
|
168
|
-
Transient hint on hover/focus; wraps any child (no ref wiring needed). content, shortcut, placement top|bottom|left|right.
|
|
169
|
-
<Tooltip content="Save changes" shortcut="⌘S"><Button>Save</Button></Tooltip>
|
|
170
|
-
|
|
171
|
-
Dialog - @zyncat/ui/dialog
|
|
172
|
-
DEFAULT CHOICE for modals - the styled surface: header (icon/title/description/close), scrolling body,
|
|
173
|
-
footer actions, on top of scrim + focus trap + scroll lock. Reach for Modal only if this chrome is wrong.
|
|
174
|
-
open/onOpenChange, tone, icon, title, description, footer: (close) => node. Header is omitted entirely
|
|
175
|
-
when there is no icon/title/description and dismissible={false}.
|
|
176
|
-
container mounts it inside a positioned element instead of the viewport; scrim, scroll lock and
|
|
177
|
-
inert then scope to that box and the rest of the page stays live.
|
|
178
|
-
<Dialog open={o} onOpenChange={setO} tone="danger" title="Delete this project?" footer={(close) => <>...</>}>...</Dialog>
|
|
179
|
-
|
|
180
|
-
Modal - @zyncat/ui/modal
|
|
181
|
-
The SAME modality as Dialog (scrim, focus trap, scroll lock, inert, Esc, motion) with ZERO paint - no
|
|
182
|
-
header, no body padding, no width cap, no border/radius/shadow. You supply the whole surface AND its
|
|
183
|
-
semantics (role="dialog" + a label).
|
|
184
|
-
Use it ONLY when Dialog's chrome is the problem: lightbox / image viewer, full-bleed media, video,
|
|
185
|
-
a custom layout that owns its own edges. If the content is a title + text + buttons, use Dialog instead.
|
|
186
|
-
htmlProps paints the panel (centered by default; width+height 100% = full-bleed), layerProps reaches the
|
|
187
|
-
box behind it (set --bg-overlay to retint the scrim). Also takes trigger, dismissible, container, animation.
|
|
188
|
-
<Modal open={!!src} onOpenChange={() => setSrc(null)} htmlProps={{ className: 'lightbox' }} layerProps={{ style: { '--bg-overlay': 'rgb(0 0 0 / 0.92)' } }}>
|
|
189
|
-
<div role="dialog" aria-label="Image viewer"><img src={src} alt="" /></div>
|
|
190
|
-
</Modal>
|
|
191
|
-
|
|
192
|
-
Popover - @zyncat/ui/popover
|
|
193
|
-
Headless anchored panel, non-modal. side, align, arrow, trigger (node), dismissible.
|
|
194
|
-
Anchor without a trigger: pass anchor - anything with getBoundingClientRect (a DOMRect source, an
|
|
195
|
-
element) - and drive open yourself. Pass a new object to re-place a moving anchor.
|
|
196
|
-
<Popover side="bottom" align="start" trigger={<Button>Actions</Button>}><menu>...</menu></Popover>
|
|
197
|
-
<Popover open={!!spot} onOpenChange={dismiss} anchor={spot} side="right"><menu>...</menu></Popover>
|
|
198
|
-
|
|
199
|
-
Sheet - @zyncat/ui/sheet
|
|
200
|
-
Edge-docked modal panel, drag-to-dismiss. side right|bottom, trigger (node), dismissible.
|
|
201
|
-
container docks it inside a positioned element instead of the viewport; scrim, scroll lock and
|
|
202
|
-
inert then scope to that box and the rest of the page stays live.
|
|
203
|
-
<Sheet side="right" trigger={<Button>Filters</Button>}><div role="dialog">...</div></Sheet>
|
|
204
|
-
<Sheet side="bottom" container={panel} open={o} onOpenChange={setO}><div role="dialog">...</div></Sheet>
|
|
205
|
-
|
|
206
|
-
============================================================ DEV TOOLS
|
|
207
|
-
|
|
208
|
-
MotionDevtools - @zyncat/ui/motion-devtools
|
|
209
|
-
Dev-only floating panel that slows or freezes EVERY animation at once (CSS and WAAPI)
|
|
210
|
-
for motion debugging. Mount once at the app root - no provider, touches no other component.
|
|
211
|
-
Gate behind a dev check; keep it out of production.
|
|
212
|
-
placement top-left|top-right|bottom-left|bottom-right, offset, presets, maxFactor, defaultFactor,
|
|
213
|
-
scaleTimers, persist, defaultOpen. Also exports motionSlowmo for console/hotkey control.
|
|
214
|
-
{import.meta.env.DEV && <MotionDevtools placement="bottom-right" />}
|
|
215
|
-
|
|
216
|
-
============================================================ THEMING
|
|
217
|
-
Re-skin by overriding the CSS custom properties (tokens) in your own stylesheet, loaded after
|
|
218
|
-
@zyncat/ui/styles.css - never fork the source. Token groups: spacing --space-*, type --type-*,
|
|
219
|
-
color (--bg-*, --text-*, --border-*, --accent), --radius-*, elevation --shadow-*, motion
|
|
220
|
-
(--duration-*, --ease-*).
|