@zyncat/ui 0.10.0 → 0.12.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-UXONUUPI.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-OMHQ4U4J.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-ZCOUPPTI.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-FTOAUJL5.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-356HZMT4.js → chunk-DDRSMHN4.js} +31 -22
- 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-K5X2GCXU.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-RCONNA7I.js → chunk-VAXCXZ53.js} +34 -22
- 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 +1809 -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 -184
- 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 -19
- 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 -221
- 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 +38 -21
- 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-356HZMT4.js.map +0 -1
- package/dist/chunk-62P3KD57.js.map +0 -1
- package/dist/chunk-7SZCJ7WI.js.map +0 -1
- package/dist/chunk-CONSWNIV.js.map +0 -1
- package/dist/chunk-FTOAUJL5.js.map +0 -1
- package/dist/chunk-I4XQ4PV2.js.map +0 -1
- package/dist/chunk-K5X2GCXU.js.map +0 -1
- package/dist/chunk-NEF5XAHG.js.map +0 -1
- package/dist/chunk-NNXJCLTV.js.map +0 -1
- package/dist/chunk-OMHQ4U4J.js.map +0 -1
- package/dist/chunk-PMECHR3A.js.map +0 -1
- package/dist/chunk-QDK66S4G.js.map +0 -1
- package/dist/chunk-RCONNA7I.js.map +0 -1
- package/dist/chunk-S5ZTZANS.js.map +0 -1
- package/dist/chunk-UXONUUPI.js.map +0 -1
- package/dist/chunk-VTJTGVZZ.js.map +0 -1
- package/dist/chunk-WM5J5TDI.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/chunk-ZCOUPPTI.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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/motion/flip.ts","../src/motion/element.tsx"],"names":["useRef"],"mappings":"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","file":"chunk-5PZ43DCG.js","sourcesContent":["'use client';\n\nimport { useLayoutEffect, useRef, type RefObject } from 'react';\n\nimport {\n dropShared,\n flip,\n keepShared,\n measure,\n readShared,\n type Box,\n type FlipOptions,\n type Playback,\n} from '../engine';\nimport { UIMotion } from '../tokens/motion-tokens';\n\nexport type FlipTuning = FlipOptions;\n\nconst sharedOwner = new Map<string, HTMLElement>();\n\nconst usable = (box: Box | null): box is Box => !!box && box.width > 0 && box.height > 0;\n\nexport function useFlip<T extends HTMLElement>(\n sharedId: string | null,\n tuning: FlipTuning = {},\n enabled = true,\n): RefObject<T | null> {\n const ref = useRef<T | null>(null);\n const privateBox = useRef<Box | null>(null);\n const playing = useRef<{ play: Playback; el: T } | null>(null);\n const interrupted = useRef<Box | null>(null);\n const { size, timing } = tuning;\n\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el || !enabled) return;\n const live = playing.current;\n let from: Box | null;\n if (live && live.el === el) from = measure(el);\n else if (interrupted.current) from = interrupted.current;\n else if (sharedId === null) from = privateBox.current;\n else from = sharedOwner.get(sharedId) === el ? null : readShared(sharedId);\n live?.play.stop();\n const settled = measure(el);\n if (sharedId === null) privateBox.current = settled;\n else {\n keepShared(sharedId, settled);\n sharedOwner.set(sharedId, el);\n }\n const next = usable(from) && !UIMotion.reduced ? flip(el, from, { size, timing }) : null;\n playing.current = next ? { play: next, el } : null;\n interrupted.current = next ? from : null;\n next?.finished.then(() => {\n if (playing.current?.play === next) {\n playing.current = null;\n interrupted.current = null;\n }\n });\n });\n\n useLayoutEffect(() => {\n if (!enabled || sharedId === null) return;\n return () => {\n const live = playing.current;\n let box: Box | null = live ? measure(live.el) : null;\n live?.play.stop();\n playing.current = null;\n if (!usable(box)) box = ref.current ? measure(ref.current) : null;\n if (usable(box)) keepShared(sharedId, box);\n const mine = readShared(sharedId);\n queueMicrotask(() => {\n if (readShared(sharedId) === mine) dropShared(sharedId);\n const owner = sharedOwner.get(sharedId);\n if (owner && !owner.isConnected) sharedOwner.delete(sharedId);\n });\n };\n }, [sharedId, enabled]);\n\n return ref;\n}\n","'use client';\n\nimport { createElement, useCallback, useRef, type ReactNode, type Ref } from 'react';\n\nimport { useFlip, type FlipTuning } from './flip';\nimport { useMotion, type MotionSpecs } from './use-motion';\n\nexport interface MotionProps extends MotionSpecs {\n /** Tag for the element this renders. @default 'div' */\n as?: string;\n /** FLIP this element from its previous box on every render. Implied by `layoutId`. */\n layout?: boolean;\n /** FLIP from whatever element last held this id, so the box travels between nodes. */\n layoutId?: string;\n /** Tunes whichever layout animation is active; ignored without `layout` or `layoutId`. */\n layoutTransition?: FlipTuning;\n ref?: Ref<HTMLElement | null>;\n children?: ReactNode;\n [prop: string]: unknown;\n}\n\nexport function Motion({\n as = 'div',\n animate,\n exit,\n initial,\n deps,\n layout,\n layoutId,\n layoutTransition,\n ref,\n children,\n ...rest\n}: MotionProps) {\n const flipRef = useFlip<HTMLElement>(layoutId ?? null, layoutTransition, !!layoutId || !!layout);\n const host = useRef<HTMLElement | null>(null);\n const forwarded = useRef(ref);\n forwarded.current = ref;\n\n useMotion(host, { animate, exit, initial, deps });\n\n const attach = useCallback(\n (el: HTMLElement | null) => {\n host.current = el;\n flipRef.current = el;\n const outer = forwarded.current;\n if (typeof outer === 'function') outer(el);\n else if (outer) outer.current = el;\n },\n [flipRef],\n );\n\n return createElement(as, { ...rest, ref: attach }, children);\n}\n"]}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
// src/tokens/motion-tokens.ts
|
|
2
|
-
var DEFAULT_DUR = { fast: 0.14, base: 0.
|
|
2
|
+
var DEFAULT_DUR = { fast: 0.14, base: 0.25, slow: 0.33, slower: 0.45, slowest: 0.9 };
|
|
3
3
|
var DEFAULT_EASE = {
|
|
4
4
|
standard: [0.2, 0, 0, 1],
|
|
5
|
-
entrance: [0.
|
|
5
|
+
entrance: [0.25, 1, 0.4, 1],
|
|
6
6
|
exit: [0.4, 0, 1, 1],
|
|
7
7
|
spring: [0.34, 1.4, 0.5, 1],
|
|
8
8
|
glide: [0.55, 0, 0.15, 1]
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
var DEFAULT_DIST = { sm: 8, md: 16, lg: 24 };
|
|
11
|
+
var DEFAULT_SCALE = { panel: 0.98, floating: 0.95, chip: 0.9 };
|
|
12
|
+
function build(scales) {
|
|
13
|
+
const { dur, ease } = scales;
|
|
11
14
|
const reduced = dur.base <= 5e-3;
|
|
12
15
|
return {
|
|
13
|
-
|
|
14
|
-
ease,
|
|
16
|
+
...scales,
|
|
15
17
|
reduced,
|
|
16
18
|
t: {
|
|
17
19
|
enter: { duration: dur.base, ease: ease.entrance },
|
|
@@ -23,35 +25,56 @@ function build(dur, ease) {
|
|
|
23
25
|
}
|
|
24
26
|
function readFromDom() {
|
|
25
27
|
const cs = getComputedStyle(document.documentElement);
|
|
28
|
+
const rootFontSize = parseFloat(cs.fontSize) || 16;
|
|
26
29
|
const seconds = (name, fallback) => {
|
|
27
30
|
const v = cs.getPropertyValue(name).trim();
|
|
28
31
|
const n = v.slice(-2) === "ms" ? parseFloat(v) / 1e3 : parseFloat(v);
|
|
29
32
|
return isNaN(n) ? fallback : n;
|
|
30
33
|
};
|
|
34
|
+
const pixels = (name, fallback) => {
|
|
35
|
+
const v = cs.getPropertyValue(name).trim();
|
|
36
|
+
const n = parseFloat(v);
|
|
37
|
+
if (isNaN(n)) return fallback;
|
|
38
|
+
return v.endsWith("rem") ? n * rootFontSize : n;
|
|
39
|
+
};
|
|
40
|
+
const ratio = (name, fallback) => {
|
|
41
|
+
const n = parseFloat(cs.getPropertyValue(name));
|
|
42
|
+
return isNaN(n) ? fallback : n;
|
|
43
|
+
};
|
|
31
44
|
const bezier = (name, fallback) => {
|
|
32
45
|
const m = cs.getPropertyValue(name).match(/-?[\d.]+/g);
|
|
33
46
|
return m && m.length === 4 ? m.map(Number) : fallback;
|
|
34
47
|
};
|
|
35
|
-
return build(
|
|
36
|
-
{
|
|
48
|
+
return build({
|
|
49
|
+
dur: {
|
|
37
50
|
fast: seconds("--duration-fast", DEFAULT_DUR.fast),
|
|
38
51
|
base: seconds("--duration-base", DEFAULT_DUR.base),
|
|
39
52
|
slow: seconds("--duration-slow", DEFAULT_DUR.slow),
|
|
40
53
|
slower: seconds("--duration-slower", DEFAULT_DUR.slower),
|
|
41
54
|
slowest: seconds("--duration-slowest", DEFAULT_DUR.slowest)
|
|
42
55
|
},
|
|
43
|
-
{
|
|
56
|
+
ease: {
|
|
44
57
|
standard: bezier("--ease-standard", DEFAULT_EASE.standard),
|
|
45
58
|
entrance: bezier("--ease-entrance", DEFAULT_EASE.entrance),
|
|
46
59
|
exit: bezier("--ease-exit", DEFAULT_EASE.exit),
|
|
47
60
|
spring: bezier("--ease-spring", DEFAULT_EASE.spring),
|
|
48
61
|
glide: bezier("--ease-glide", DEFAULT_EASE.glide)
|
|
62
|
+
},
|
|
63
|
+
dist: {
|
|
64
|
+
sm: pixels("--distance-sm", DEFAULT_DIST.sm),
|
|
65
|
+
md: pixels("--distance-md", DEFAULT_DIST.md),
|
|
66
|
+
lg: pixels("--distance-lg", DEFAULT_DIST.lg)
|
|
67
|
+
},
|
|
68
|
+
scale: {
|
|
69
|
+
panel: ratio("--scale-panel", DEFAULT_SCALE.panel),
|
|
70
|
+
floating: ratio("--scale-floating", DEFAULT_SCALE.floating),
|
|
71
|
+
chip: ratio("--scale-chip", DEFAULT_SCALE.chip)
|
|
49
72
|
}
|
|
50
|
-
);
|
|
73
|
+
});
|
|
51
74
|
}
|
|
52
|
-
var UIMotion = typeof document !== "undefined" ? readFromDom() : build(DEFAULT_DUR, DEFAULT_EASE);
|
|
75
|
+
var UIMotion = typeof document !== "undefined" ? readFromDom() : build({ dur: DEFAULT_DUR, ease: DEFAULT_EASE, dist: DEFAULT_DIST, scale: DEFAULT_SCALE });
|
|
53
76
|
var motion_tokens_default = UIMotion;
|
|
54
77
|
|
|
55
78
|
export { UIMotion, motion_tokens_default };
|
|
56
|
-
//# sourceMappingURL=chunk-
|
|
57
|
-
//# sourceMappingURL=chunk-
|
|
79
|
+
//# sourceMappingURL=chunk-7IZJERGA.js.map
|
|
80
|
+
//# sourceMappingURL=chunk-7IZJERGA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tokens/motion-tokens.ts"],"names":[],"mappings":"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","file":"chunk-7IZJERGA.js","sourcesContent":["import type { DistanceToken, DurationToken, EaseToken, ScaleToken } from './motion-scale';\n\nexport interface MotionTransition {\n type?: 'spring' | 'tween' | 'inertia' | 'keyframes';\n duration?: number;\n ease?:\n | Bezier\n | 'linear'\n | 'easeIn'\n | 'easeOut'\n | 'easeInOut'\n | 'circIn'\n | 'circOut'\n | 'circInOut'\n | 'backIn'\n | 'backOut'\n | 'backInOut'\n | 'anticipate';\n bounce?: number;\n visualDuration?: number;\n delay?: number;\n}\n\nexport type Bezier = [number, number, number, number];\n\nexport type { DistanceToken, DurationToken, EaseToken, ScaleToken } from './motion-scale';\n\nexport interface MotionTokens {\n /** seconds - fast 0.14 - base 0.2 - slow 0.3 - slower 0.45 - slowest 0.9 */\n dur: Record<DurationToken, number>;\n ease: Record<EaseToken, Bezier>;\n dist: Record<DistanceToken, number>;\n scale: Record<ScaleToken, number>;\n /** ready-made Motion transitions */\n t: { enter: MotionTransition; exit: MotionTransition; layout: MotionTransition; settle: MotionTransition };\n reduced: boolean;\n}\n\ntype MotionScales = Pick<MotionTokens, 'dur' | 'ease' | 'dist' | 'scale'>;\n\nconst DEFAULT_DUR: MotionTokens['dur'] = { fast: 0.14, base: 0.25, slow: 0.33, slower: 0.45, slowest: 0.9 };\nconst DEFAULT_EASE: MotionTokens['ease'] = {\n standard: [0.2, 0, 0, 1],\n entrance: [0.25, 1, 0.4, 1],\n exit: [0.4, 0, 1, 1],\n spring: [0.34, 1.4, 0.5, 1],\n glide: [0.55, 0, 0.15, 1],\n};\nconst DEFAULT_DIST: MotionTokens['dist'] = { sm: 8, md: 16, lg: 24 };\nconst DEFAULT_SCALE: MotionTokens['scale'] = { panel: 0.98, floating: 0.95, chip: 0.9 };\n\nfunction build(scales: MotionScales): MotionTokens {\n const { dur, ease } = scales;\n const reduced = dur.base <= 0.005;\n return {\n ...scales,\n reduced,\n t: {\n enter: { duration: dur.base, ease: ease.entrance },\n exit: { duration: dur.fast, ease: ease.exit },\n layout: { duration: dur.slow, ease: ease.entrance },\n settle: reduced ? { duration: 0 } : { type: 'spring', visualDuration: dur.fast, bounce: 0.25 },\n },\n };\n}\n\nfunction readFromDom(): MotionTokens {\n const cs = getComputedStyle(document.documentElement);\n const rootFontSize = parseFloat(cs.fontSize) || 16;\n const seconds = (name: string, fallback: number): number => {\n const v = cs.getPropertyValue(name).trim();\n const n = v.slice(-2) === 'ms' ? parseFloat(v) / 1000 : parseFloat(v);\n return isNaN(n) ? fallback : n;\n };\n const pixels = (name: string, fallback: number): number => {\n const v = cs.getPropertyValue(name).trim();\n const n = parseFloat(v);\n if (isNaN(n)) return fallback;\n return v.endsWith('rem') ? n * rootFontSize : n;\n };\n const ratio = (name: string, fallback: number): number => {\n const n = parseFloat(cs.getPropertyValue(name));\n return isNaN(n) ? fallback : n;\n };\n const bezier = (name: string, fallback: Bezier): Bezier => {\n const m = cs.getPropertyValue(name).match(/-?[\\d.]+/g);\n return m && m.length === 4 ? (m.map(Number) as Bezier) : fallback;\n };\n return build({\n dur: {\n fast: seconds('--duration-fast', DEFAULT_DUR.fast),\n base: seconds('--duration-base', DEFAULT_DUR.base),\n slow: seconds('--duration-slow', DEFAULT_DUR.slow),\n slower: seconds('--duration-slower', DEFAULT_DUR.slower),\n slowest: seconds('--duration-slowest', DEFAULT_DUR.slowest),\n },\n ease: {\n standard: bezier('--ease-standard', DEFAULT_EASE.standard),\n entrance: bezier('--ease-entrance', DEFAULT_EASE.entrance),\n exit: bezier('--ease-exit', DEFAULT_EASE.exit),\n spring: bezier('--ease-spring', DEFAULT_EASE.spring),\n glide: bezier('--ease-glide', DEFAULT_EASE.glide),\n },\n dist: {\n sm: pixels('--distance-sm', DEFAULT_DIST.sm),\n md: pixels('--distance-md', DEFAULT_DIST.md),\n lg: pixels('--distance-lg', DEFAULT_DIST.lg),\n },\n scale: {\n panel: ratio('--scale-panel', DEFAULT_SCALE.panel),\n floating: ratio('--scale-floating', DEFAULT_SCALE.floating),\n chip: ratio('--scale-chip', DEFAULT_SCALE.chip),\n },\n });\n}\n\nexport const UIMotion: MotionTokens =\n typeof document !== 'undefined'\n ? readFromDom()\n : build({ dur: DEFAULT_DUR, ease: DEFAULT_EASE, dist: DEFAULT_DIST, scale: DEFAULT_SCALE });\n\nexport default UIMotion;\n"]}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
'use client';import { ovIsTop, ovInOverlayAbove } from './chunk-
|
|
2
|
-
import { useEffect } from 'react';
|
|
1
|
+
'use client';import { ovIsTop, ovInOverlayAbove } from './chunk-VAXCXZ53.js';
|
|
2
|
+
import { useRef, useEffect } from 'react';
|
|
3
3
|
|
|
4
4
|
function useReturnFocus(nodeRef) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const opener = useRef(void 0);
|
|
6
|
+
if (opener.current === void 0 && typeof document !== "undefined") {
|
|
7
|
+
opener.current = document.activeElement;
|
|
8
|
+
}
|
|
9
|
+
useEffect(
|
|
10
|
+
() => () => {
|
|
11
|
+
const prev = opener.current;
|
|
8
12
|
const a = document.activeElement;
|
|
9
13
|
const orphaned = !a || a === document.body || nodeRef.current && nodeRef.current.contains(a);
|
|
10
14
|
if (orphaned && prev && prev.isConnected && typeof prev.focus === "function") {
|
|
@@ -12,11 +16,17 @@ function useReturnFocus(nodeRef) {
|
|
|
12
16
|
if (prev.isConnected) prev.focus({ preventScroll: true });
|
|
13
17
|
});
|
|
14
18
|
}
|
|
15
|
-
}
|
|
16
|
-
|
|
19
|
+
},
|
|
20
|
+
[]
|
|
21
|
+
// eslint-disable-line react-hooks/exhaustive-deps
|
|
22
|
+
);
|
|
17
23
|
}
|
|
18
24
|
var OV_FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
19
|
-
function useFocusTrap({
|
|
25
|
+
function useFocusTrap({
|
|
26
|
+
panelRef,
|
|
27
|
+
entry,
|
|
28
|
+
scoped
|
|
29
|
+
}) {
|
|
20
30
|
useEffect(() => {
|
|
21
31
|
const panel = panelRef.current;
|
|
22
32
|
if (!panel) return void 0;
|
|
@@ -49,14 +59,14 @@ function useFocusTrap({ panelRef, entry }) {
|
|
|
49
59
|
(focusables()[0] || panel).focus({ preventScroll: true });
|
|
50
60
|
};
|
|
51
61
|
panel.addEventListener("keydown", onKeyDown);
|
|
52
|
-
document.addEventListener("focusin", onFocusIn);
|
|
62
|
+
if (!scoped) document.addEventListener("focusin", onFocusIn);
|
|
53
63
|
return () => {
|
|
54
64
|
panel.removeEventListener("keydown", onKeyDown);
|
|
55
|
-
document.removeEventListener("focusin", onFocusIn);
|
|
65
|
+
if (!scoped) document.removeEventListener("focusin", onFocusIn);
|
|
56
66
|
};
|
|
57
67
|
}, []);
|
|
58
68
|
}
|
|
59
69
|
|
|
60
70
|
export { useFocusTrap, useReturnFocus };
|
|
61
|
-
//# sourceMappingURL=chunk-
|
|
62
|
-
//# sourceMappingURL=chunk-
|
|
71
|
+
//# sourceMappingURL=chunk-A5WTZACK.js.map
|
|
72
|
+
//# sourceMappingURL=chunk-A5WTZACK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/internal/overlay/focus.ts"],"names":[],"mappings":"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","file":"chunk-A5WTZACK.js","sourcesContent":["'use client';\n\nimport { useEffect, useRef, type RefObject } from 'react';\n\nimport { ovInOverlayAbove, ovIsTop, type OverlayEntry } from './layer';\n\nexport function useReturnFocus(nodeRef: RefObject<HTMLElement>) {\n const opener = useRef<HTMLElement | null | undefined>(undefined);\n\n if (opener.current === undefined && typeof document !== 'undefined') {\n opener.current = document.activeElement as HTMLElement | null;\n }\n\n useEffect(\n () => () => {\n const prev = opener.current;\n const a = document.activeElement;\n const orphaned = !a || a === document.body || (nodeRef.current && nodeRef.current.contains(a));\n if (orphaned && prev && prev.isConnected && typeof prev.focus === 'function') {\n queueMicrotask(() => {\n if (prev.isConnected) prev.focus({ preventScroll: true });\n });\n }\n },\n [], // eslint-disable-line react-hooks/exhaustive-deps\n );\n}\n\nconst OV_FOCUSABLE =\n 'a[href], button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), ' +\n 'select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport function useFocusTrap({\n panelRef,\n entry,\n scoped,\n}: {\n panelRef: RefObject<HTMLElement>;\n entry: OverlayEntry;\n scoped: boolean;\n}) {\n useEffect(() => {\n const panel = panelRef.current;\n if (!panel) return undefined;\n const focusables = () =>\n Array.from(panel.querySelectorAll<HTMLElement>(OV_FOCUSABLE)).filter(\n (el) => el.offsetParent !== null || el === document.activeElement,\n );\n\n const seed = panel.querySelector<HTMLElement>('[autofocus], [data-autofocus]') || focusables()[0] || panel;\n seed.focus({ preventScroll: true });\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const f = focusables();\n if (f.length === 0) {\n e.preventDefault();\n return;\n }\n const cur = document.activeElement;\n if (e.shiftKey) {\n if (cur === f[0] || cur === panel) {\n e.preventDefault();\n f[f.length - 1].focus();\n }\n } else if (cur === f[f.length - 1]) {\n e.preventDefault();\n f[0].focus();\n }\n };\n const onFocusIn = (e: FocusEvent) => {\n if (panel.contains(e.target as Node)) return;\n if (!ovIsTop(entry) || ovInOverlayAbove(entry, e.target)) return;\n (focusables()[0] || panel).focus({ preventScroll: true });\n };\n\n panel.addEventListener('keydown', onKeyDown);\n if (!scoped) document.addEventListener('focusin', onFocusIn);\n return () => {\n panel.removeEventListener('keydown', onKeyDown);\n if (!scoped) document.removeEventListener('focusin', onFocusIn);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use client';import { pad } from './chunk-
|
|
1
|
+
'use client';import { pad } from './chunk-4C5RZXBT.js';
|
|
2
2
|
import { cx } from './chunk-QGNC7LH5.js';
|
|
3
3
|
import './date-picker.css';
|
|
4
4
|
import { useState, useRef, useEffect } from 'react';
|
|
@@ -254,5 +254,5 @@ function TimeSegments({
|
|
|
254
254
|
}
|
|
255
255
|
|
|
256
256
|
export { TimeSegments, disp12 };
|
|
257
|
-
//# sourceMappingURL=chunk-
|
|
258
|
-
//# sourceMappingURL=chunk-
|
|
257
|
+
//# sourceMappingURL=chunk-AADAJL7D.js.map
|
|
258
|
+
//# sourceMappingURL=chunk-AADAJL7D.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/composites/date-picker/time-core.tsx"],"names":[],"mappings":"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","file":"chunk-64UU4LGU.js","sourcesContent":["'use client';\n\nimport './date-picker.css';\nimport { useEffect, useRef, useState, type ClipboardEvent, type KeyboardEvent, type RefObject } from 'react';\nimport { cx } from '../../internal/utils/cx';\nimport { pad } from './date-utils';\n\ntype Meridiem = 'AM' | 'PM';\ntype Segment = 'h' | 'm';\ninterface Pending {\n seg: Segment;\n d: number;\n}\n\nexport interface TimeSegmentsProps {\n value?: string | null;\n onCommit?: (value: string) => void;\n format?: '24h' | '12h';\n minuteStep?: number;\n min?: string | null;\n max?: string | null;\n disabled?: boolean;\n ariaLabel?: string;\n className?: string;\n}\n\nexport const disp12 = (h24: number): number => ((h24 + 11) % 12) + 1;\nconst tsgToH24 = (d12: number, mer: Meridiem): number => (d12 % 12) + (mer === 'PM' ? 12 : 0);\n\nfunction tsgFeed(pend: number | null, d: number, hi: number): { val: number; done: boolean } {\n if (pend != null) {\n const n = pend * 10 + d;\n if (n <= hi) return { val: n, done: true };\n }\n return { val: d, done: d * 10 > hi };\n}\n\nexport function TimeSegments({\n value = null,\n onCommit,\n format = '24h',\n minuteStep = 5,\n min = null,\n max = null,\n disabled = false,\n ariaLabel = 'Time',\n className = '',\n}: TimeSegmentsProps) {\n const is12 = format === '12h';\n const seed = value ? value.split(':').map(Number) : [null, null];\n\n const [h, setHState] = useState<number | null>(seed[0]);\n const [m, setMState] = useState<number | null>(seed[1]);\n const [mer, setMer] = useState<Meridiem>(seed[0] != null && seed[0] >= 12 ? 'PM' : 'AM');\n const [pend, setPendState] = useState<Pending | null>(null);\n\n const hLive = useRef<number | null>(seed[0]);\n const mLive = useRef<number | null>(seed[1]);\n const pendLive = useRef<Pending | null>(null);\n const setH = (v: number | null) => {\n hLive.current = v;\n setHState(v);\n };\n const setM = (v: number | null) => {\n mLive.current = v;\n setMState(v);\n };\n const setPend = (v: Pending | null) => {\n pendLive.current = v;\n setPendState(v);\n };\n\n const hRef = useRef<HTMLSpanElement>(null);\n const mRef = useRef<HTMLSpanElement>(null);\n const merRef = useRef<HTMLSpanElement>(null);\n const lastRef = useRef<string | null>(value || null);\n\n useEffect(() => {\n if ((value || null) === lastRef.current) return;\n lastRef.current = value || null;\n const p = value ? value.split(':').map(Number) : [null, null];\n setH(p[0]);\n setM(p[1]);\n if (p[0] != null) setMer(p[0] >= 12 ? 'PM' : 'AM');\n setPend(null);\n }, [value]);\n\n function tryCommit(nh: number | null, nm: number | null) {\n if (nh == null || nm == null) return;\n let t = pad(nh) + ':' + pad(nm);\n if (min && t < min) t = min;\n if (max && t > max) t = max;\n const p = t.split(':').map(Number);\n if (p[0] !== nh) {\n setH(p[0]);\n setMer(p[0] >= 12 ? 'PM' : 'AM');\n setPend(null);\n }\n if (p[1] !== nm) setM(p[1]);\n if (t === lastRef.current) return;\n lastRef.current = t;\n if (onCommit) onCommit(t);\n }\n\n const focusSeg = (r: RefObject<HTMLSpanElement | null>) => {\n if (r.current) r.current.focus();\n };\n\n function onHKey(e: KeyboardEvent<HTMLSpanElement>) {\n const k = e.key;\n if (/^[0-9]$/.test(k)) {\n const pd = pend && pend.seg === 'h' ? pend.d : null;\n const r = tsgFeed(pd, +k, is12 ? 12 : 23);\n const nh = is12 ? tsgToH24(r.val === 0 ? 12 : r.val, mer) : r.val;\n setH(nh);\n if (!is12) setMer(nh >= 12 ? 'PM' : 'AM');\n setPend(r.done ? null : { seg: 'h', d: r.val });\n if (r.done) {\n focusSeg(mRef);\n tryCommit(nh, mLive.current);\n }\n } else if (k === 'ArrowUp' || k === 'ArrowDown') {\n const dir = k === 'ArrowUp' ? 1 : -1;\n const nh = h == null ? new Date().getHours() : (h + dir + 24) % 24;\n setH(nh);\n setMer(nh >= 12 ? 'PM' : 'AM');\n setPend(null);\n tryCommit(nh, mLive.current);\n } else if (k === 'Backspace' || k === 'Delete') {\n setH(null);\n setPend(null);\n } else if (k === 'ArrowRight' || k === ':' || k === ';') {\n focusSeg(mRef);\n } else if (k === 'Tab') {\n return;\n } else if (k.length === 1 && !e.metaKey && !e.ctrlKey) {\n } else return;\n e.preventDefault();\n }\n\n function onMKey(e: KeyboardEvent<HTMLSpanElement>) {\n const k = e.key;\n if (/^[0-9]$/.test(k)) {\n const pd = pend && pend.seg === 'm' ? pend.d : null;\n const r = tsgFeed(pd, +k, 59);\n setM(r.val);\n setPend(r.done ? null : { seg: 'm', d: r.val });\n if (r.done) {\n if (is12) focusSeg(merRef);\n tryCommit(hLive.current, r.val);\n }\n } else if (k === 'ArrowUp' || k === 'ArrowDown') {\n const dir = k === 'ArrowUp' ? 1 : -1;\n let nm;\n if (m == null) {\n nm = (Math.round(new Date().getMinutes() / minuteStep) * minuteStep) % 60;\n } else {\n const next =\n dir > 0 ? (Math.floor(m / minuteStep) + 1) * minuteStep : (Math.ceil(m / minuteStep) - 1) * minuteStep;\n nm = ((next % 60) + 60) % 60;\n }\n setM(nm);\n setPend(null);\n tryCommit(hLive.current, nm);\n } else if (k === 'Backspace' || k === 'Delete') {\n if (m == null && !(pend && pend.seg === 'm')) {\n focusSeg(hRef);\n } else {\n setM(null);\n setPend(null);\n }\n } else if (k === 'ArrowLeft') {\n focusSeg(hRef);\n } else if (k === 'ArrowRight' && is12) {\n focusSeg(merRef);\n } else if (k === 'Tab') {\n return;\n } else if (k.length === 1 && !e.metaKey && !e.ctrlKey) {\n } else return;\n e.preventDefault();\n }\n\n function setMeridiem(next: Meridiem) {\n setMer(next);\n if (h != null) {\n const nh = tsgToH24(disp12(h), next);\n setH(nh);\n tryCommit(nh, mLive.current);\n }\n }\n function onMerKey(e: KeyboardEvent<HTMLSpanElement>) {\n const k = e.key;\n if (k === 'a' || k === 'A') setMeridiem('AM');\n else if (k === 'p' || k === 'P') setMeridiem('PM');\n else if (k === 'ArrowUp' || k === 'ArrowDown') setMeridiem(mer === 'AM' ? 'PM' : 'AM');\n else if (k === 'ArrowLeft') focusSeg(mRef);\n else if (k === 'Tab') {\n return;\n } else if (k.length === 1 && !e.metaKey && !e.ctrlKey) {\n } else return;\n e.preventDefault();\n }\n\n function onPaste(e: ClipboardEvent<HTMLDivElement>) {\n if (disabled) return;\n const txt = (e.clipboardData.getData('text') || '').trim();\n const mt = txt.match(/^(\\d{1,2})[:h.\\s]?(\\d{2})?\\s*([ap])\\.?m?\\.?$/i) || txt.match(/^(\\d{1,2})[:h.\\s]?(\\d{2})?$/);\n if (!mt) return;\n e.preventDefault();\n let hh = +mt[1];\n const mm = mt[2] != null ? +mt[2] : 0;\n if (mt[3]) hh = tsgToH24(hh, /^p/i.test(mt[3]) ? 'PM' : 'AM');\n if (hh > 23 || mm > 59) return;\n setH(hh);\n setM(mm);\n setMer(hh >= 12 ? 'PM' : 'AM');\n setPend(null);\n tryCommit(hh, mm);\n }\n\n const onSegBlur = (seg: Segment) => () => {\n if (pendLive.current && pendLive.current.seg === seg) {\n setPend(null);\n tryCommit(hLive.current, mLive.current);\n }\n };\n\n const hText = pend && pend.seg === 'h' ? pad(pend.d) : h == null ? '--' : pad(is12 ? disp12(h) : h);\n const mText = pend && pend.seg === 'm' ? pad(pend.d) : m == null ? '--' : pad(m);\n\n const segCls = (empty: boolean): string => 'tsg__seg' + (empty ? ' is-empty' : '');\n const tab = disabled ? -1 : 0;\n\n return (\n <div\n className={cx('tsg', disabled && 'is-disabled', className)}\n role=\"group\"\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n onPaste={onPaste}\n >\n <span\n ref={hRef}\n className={segCls(h == null && !(pend && pend.seg === 'h'))}\n role=\"spinbutton\"\n tabIndex={tab}\n aria-label=\"Hours\"\n aria-valuemin={is12 ? 1 : 0}\n aria-valuemax={is12 ? 12 : 23}\n aria-valuenow={h == null ? undefined : is12 ? disp12(h) : h}\n aria-valuetext={h == null ? 'Empty' : hText}\n onKeyDown={disabled ? undefined : onHKey}\n onBlur={onSegBlur('h')}\n >\n {hText}\n </span>\n <span className=\"tsg__sep\" aria-hidden=\"true\">\n :\n </span>\n <span\n ref={mRef}\n className={segCls(m == null && !(pend && pend.seg === 'm'))}\n role=\"spinbutton\"\n tabIndex={tab}\n aria-label=\"Minutes\"\n aria-valuemin={0}\n aria-valuemax={59}\n aria-valuenow={m == null ? undefined : m}\n aria-valuetext={m == null ? 'Empty' : mText}\n onKeyDown={disabled ? undefined : onMKey}\n onBlur={onSegBlur('m')}\n >\n {mText}\n </span>\n {is12 ? (\n <span\n ref={merRef}\n className=\"tsg__seg tsg__seg--mer\"\n role=\"spinbutton\"\n tabIndex={tab}\n aria-label=\"AM or PM\"\n aria-valuetext={mer}\n onKeyDown={disabled ? undefined : onMerKey}\n >\n {mer}\n </span>\n ) : null}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/composites/date-picker/time-core.tsx"],"names":[],"mappings":"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","file":"chunk-AADAJL7D.js","sourcesContent":["'use client';\n\nimport './date-picker.css';\n\nimport { useEffect, useRef, useState, type ClipboardEvent, type KeyboardEvent, type RefObject } from 'react';\n\nimport { cx } from '../../internal/utils/cx';\nimport { pad } from './date-utils';\n\ntype Meridiem = 'AM' | 'PM';\ntype Segment = 'h' | 'm';\ninterface Pending {\n seg: Segment;\n d: number;\n}\n\nexport interface TimeSegmentsProps {\n value?: string | null;\n onCommit?: (value: string) => void;\n format?: '24h' | '12h';\n minuteStep?: number;\n min?: string | null;\n max?: string | null;\n disabled?: boolean;\n ariaLabel?: string;\n className?: string;\n}\n\nexport const disp12 = (h24: number): number => ((h24 + 11) % 12) + 1;\nconst tsgToH24 = (d12: number, mer: Meridiem): number => (d12 % 12) + (mer === 'PM' ? 12 : 0);\n\nfunction tsgFeed(pend: number | null, d: number, hi: number): { val: number; done: boolean } {\n if (pend != null) {\n const n = pend * 10 + d;\n if (n <= hi) return { val: n, done: true };\n }\n return { val: d, done: d * 10 > hi };\n}\n\nexport function TimeSegments({\n value = null,\n onCommit,\n format = '24h',\n minuteStep = 5,\n min = null,\n max = null,\n disabled = false,\n ariaLabel = 'Time',\n className = '',\n}: TimeSegmentsProps) {\n const is12 = format === '12h';\n const seed = value ? value.split(':').map(Number) : [null, null];\n\n const [h, setHState] = useState<number | null>(seed[0]);\n const [m, setMState] = useState<number | null>(seed[1]);\n const [mer, setMer] = useState<Meridiem>(seed[0] != null && seed[0] >= 12 ? 'PM' : 'AM');\n const [pend, setPendState] = useState<Pending | null>(null);\n\n const hLive = useRef<number | null>(seed[0]);\n const mLive = useRef<number | null>(seed[1]);\n const pendLive = useRef<Pending | null>(null);\n const setH = (v: number | null) => {\n hLive.current = v;\n setHState(v);\n };\n const setM = (v: number | null) => {\n mLive.current = v;\n setMState(v);\n };\n const setPend = (v: Pending | null) => {\n pendLive.current = v;\n setPendState(v);\n };\n\n const hRef = useRef<HTMLSpanElement>(null);\n const mRef = useRef<HTMLSpanElement>(null);\n const merRef = useRef<HTMLSpanElement>(null);\n const lastRef = useRef<string | null>(value || null);\n\n useEffect(() => {\n if ((value || null) === lastRef.current) return;\n lastRef.current = value || null;\n const p = value ? value.split(':').map(Number) : [null, null];\n setH(p[0]);\n setM(p[1]);\n if (p[0] != null) setMer(p[0] >= 12 ? 'PM' : 'AM');\n setPend(null);\n }, [value]);\n\n function tryCommit(nh: number | null, nm: number | null) {\n if (nh == null || nm == null) return;\n let t = pad(nh) + ':' + pad(nm);\n if (min && t < min) t = min;\n if (max && t > max) t = max;\n const p = t.split(':').map(Number);\n if (p[0] !== nh) {\n setH(p[0]);\n setMer(p[0] >= 12 ? 'PM' : 'AM');\n setPend(null);\n }\n if (p[1] !== nm) setM(p[1]);\n if (t === lastRef.current) return;\n lastRef.current = t;\n if (onCommit) onCommit(t);\n }\n\n const focusSeg = (r: RefObject<HTMLSpanElement | null>) => {\n if (r.current) r.current.focus();\n };\n\n function onHKey(e: KeyboardEvent<HTMLSpanElement>) {\n const k = e.key;\n if (/^[0-9]$/.test(k)) {\n const pd = pend && pend.seg === 'h' ? pend.d : null;\n const r = tsgFeed(pd, +k, is12 ? 12 : 23);\n const nh = is12 ? tsgToH24(r.val === 0 ? 12 : r.val, mer) : r.val;\n setH(nh);\n if (!is12) setMer(nh >= 12 ? 'PM' : 'AM');\n setPend(r.done ? null : { seg: 'h', d: r.val });\n if (r.done) {\n focusSeg(mRef);\n tryCommit(nh, mLive.current);\n }\n } else if (k === 'ArrowUp' || k === 'ArrowDown') {\n const dir = k === 'ArrowUp' ? 1 : -1;\n const nh = h == null ? new Date().getHours() : (h + dir + 24) % 24;\n setH(nh);\n setMer(nh >= 12 ? 'PM' : 'AM');\n setPend(null);\n tryCommit(nh, mLive.current);\n } else if (k === 'Backspace' || k === 'Delete') {\n setH(null);\n setPend(null);\n } else if (k === 'ArrowRight' || k === ':' || k === ';') {\n focusSeg(mRef);\n } else if (k === 'Tab') {\n return;\n } else if (k.length === 1 && !e.metaKey && !e.ctrlKey) {\n } else return;\n e.preventDefault();\n }\n\n function onMKey(e: KeyboardEvent<HTMLSpanElement>) {\n const k = e.key;\n if (/^[0-9]$/.test(k)) {\n const pd = pend && pend.seg === 'm' ? pend.d : null;\n const r = tsgFeed(pd, +k, 59);\n setM(r.val);\n setPend(r.done ? null : { seg: 'm', d: r.val });\n if (r.done) {\n if (is12) focusSeg(merRef);\n tryCommit(hLive.current, r.val);\n }\n } else if (k === 'ArrowUp' || k === 'ArrowDown') {\n const dir = k === 'ArrowUp' ? 1 : -1;\n let nm;\n if (m == null) {\n nm = (Math.round(new Date().getMinutes() / minuteStep) * minuteStep) % 60;\n } else {\n const next =\n dir > 0 ? (Math.floor(m / minuteStep) + 1) * minuteStep : (Math.ceil(m / minuteStep) - 1) * minuteStep;\n nm = ((next % 60) + 60) % 60;\n }\n setM(nm);\n setPend(null);\n tryCommit(hLive.current, nm);\n } else if (k === 'Backspace' || k === 'Delete') {\n if (m == null && !(pend && pend.seg === 'm')) {\n focusSeg(hRef);\n } else {\n setM(null);\n setPend(null);\n }\n } else if (k === 'ArrowLeft') {\n focusSeg(hRef);\n } else if (k === 'ArrowRight' && is12) {\n focusSeg(merRef);\n } else if (k === 'Tab') {\n return;\n } else if (k.length === 1 && !e.metaKey && !e.ctrlKey) {\n } else return;\n e.preventDefault();\n }\n\n function setMeridiem(next: Meridiem) {\n setMer(next);\n if (h != null) {\n const nh = tsgToH24(disp12(h), next);\n setH(nh);\n tryCommit(nh, mLive.current);\n }\n }\n function onMerKey(e: KeyboardEvent<HTMLSpanElement>) {\n const k = e.key;\n if (k === 'a' || k === 'A') setMeridiem('AM');\n else if (k === 'p' || k === 'P') setMeridiem('PM');\n else if (k === 'ArrowUp' || k === 'ArrowDown') setMeridiem(mer === 'AM' ? 'PM' : 'AM');\n else if (k === 'ArrowLeft') focusSeg(mRef);\n else if (k === 'Tab') {\n return;\n } else if (k.length === 1 && !e.metaKey && !e.ctrlKey) {\n } else return;\n e.preventDefault();\n }\n\n function onPaste(e: ClipboardEvent<HTMLDivElement>) {\n if (disabled) return;\n const txt = (e.clipboardData.getData('text') || '').trim();\n const mt = txt.match(/^(\\d{1,2})[:h.\\s]?(\\d{2})?\\s*([ap])\\.?m?\\.?$/i) || txt.match(/^(\\d{1,2})[:h.\\s]?(\\d{2})?$/);\n if (!mt) return;\n e.preventDefault();\n let hh = +mt[1];\n const mm = mt[2] != null ? +mt[2] : 0;\n if (mt[3]) hh = tsgToH24(hh, /^p/i.test(mt[3]) ? 'PM' : 'AM');\n if (hh > 23 || mm > 59) return;\n setH(hh);\n setM(mm);\n setMer(hh >= 12 ? 'PM' : 'AM');\n setPend(null);\n tryCommit(hh, mm);\n }\n\n const onSegBlur = (seg: Segment) => () => {\n if (pendLive.current && pendLive.current.seg === seg) {\n setPend(null);\n tryCommit(hLive.current, mLive.current);\n }\n };\n\n const hText = pend && pend.seg === 'h' ? pad(pend.d) : h == null ? '--' : pad(is12 ? disp12(h) : h);\n const mText = pend && pend.seg === 'm' ? pad(pend.d) : m == null ? '--' : pad(m);\n\n const segCls = (empty: boolean): string => 'tsg__seg' + (empty ? ' is-empty' : '');\n const tab = disabled ? -1 : 0;\n\n return (\n <div\n className={cx('tsg', disabled && 'is-disabled', className)}\n role=\"group\"\n aria-label={ariaLabel}\n aria-disabled={disabled || undefined}\n onPaste={onPaste}\n >\n <span\n ref={hRef}\n className={segCls(h == null && !(pend && pend.seg === 'h'))}\n role=\"spinbutton\"\n tabIndex={tab}\n aria-label=\"Hours\"\n aria-valuemin={is12 ? 1 : 0}\n aria-valuemax={is12 ? 12 : 23}\n aria-valuenow={h == null ? undefined : is12 ? disp12(h) : h}\n aria-valuetext={h == null ? 'Empty' : hText}\n onKeyDown={disabled ? undefined : onHKey}\n onBlur={onSegBlur('h')}\n >\n {hText}\n </span>\n <span className=\"tsg__sep\" aria-hidden=\"true\">\n :\n </span>\n <span\n ref={mRef}\n className={segCls(m == null && !(pend && pend.seg === 'm'))}\n role=\"spinbutton\"\n tabIndex={tab}\n aria-label=\"Minutes\"\n aria-valuemin={0}\n aria-valuemax={59}\n aria-valuenow={m == null ? undefined : m}\n aria-valuetext={m == null ? 'Empty' : mText}\n onKeyDown={disabled ? undefined : onMKey}\n onBlur={onSegBlur('m')}\n >\n {mText}\n </span>\n {is12 ? (\n <span\n ref={merRef}\n className=\"tsg__seg tsg__seg--mer\"\n role=\"spinbutton\"\n tabIndex={tab}\n aria-label=\"AM or PM\"\n aria-valuetext={mer}\n onKeyDown={disabled ? undefined : onMerKey}\n >\n {mer}\n </span>\n ) : null}\n </div>\n );\n}\n"]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
'use client';import { useAnchorPosition } from './chunk-
|
|
2
|
-
import { useReturnFocus } from './chunk-
|
|
3
|
-
import { ovCloneTrigger, OverlayPortal, useOverlayEntry, useOutsidePress } from './chunk-
|
|
4
|
-
import {
|
|
5
|
-
import { Presence } from './chunk-
|
|
6
|
-
import {
|
|
1
|
+
'use client';import { useAnchorPosition } from './chunk-IUQAUBVM.js';
|
|
2
|
+
import { useReturnFocus } from './chunk-A5WTZACK.js';
|
|
3
|
+
import { ovCloneTrigger, OverlayPortal, useOverlayEntry, useOutsidePress } from './chunk-VAXCXZ53.js';
|
|
4
|
+
import { popOut, popIn } from './chunk-HDSFWZ7L.js';
|
|
5
|
+
import { Presence } from './chunk-DDRSMHN4.js';
|
|
6
|
+
import { resolveMotionTiming } from './chunk-TUTXXC3W.js';
|
|
7
|
+
import { useMotion } from './chunk-M43IOM5C.js';
|
|
7
8
|
import { useControllable } from './chunk-MMRIQNEN.js';
|
|
9
|
+
import { UIMotion } from './chunk-7IZJERGA.js';
|
|
8
10
|
import { cx } from './chunk-QGNC7LH5.js';
|
|
9
11
|
import './popover.css';
|
|
10
12
|
import { useRef, useId, Fragment } from 'react';
|
|
@@ -53,6 +55,7 @@ function Popover({
|
|
|
53
55
|
defaultOpen = false,
|
|
54
56
|
onOpenChange,
|
|
55
57
|
trigger = null,
|
|
58
|
+
activateOn,
|
|
56
59
|
anchor = null,
|
|
57
60
|
side = "bottom",
|
|
58
61
|
align = "start",
|
|
@@ -70,12 +73,19 @@ function Popover({
|
|
|
70
73
|
const close = () => setOpen(false);
|
|
71
74
|
const timings = resolveMotionTiming(animation, POPOVER_TIMING);
|
|
72
75
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
73
|
-
ovCloneTrigger(trigger, {
|
|
76
|
+
ovCloneTrigger(trigger, {
|
|
77
|
+
open,
|
|
78
|
+
onPress: () => setOpen(!open),
|
|
79
|
+
panelId,
|
|
80
|
+
haspopup: "true",
|
|
81
|
+
triggerRef,
|
|
82
|
+
activateOn
|
|
83
|
+
}),
|
|
74
84
|
/* @__PURE__ */ jsx(OverlayPortal, { children: /* @__PURE__ */ jsx(Presence, { children: open && /* @__PURE__ */ jsx(
|
|
75
85
|
PopoverPanel,
|
|
76
86
|
{
|
|
77
|
-
animate:
|
|
78
|
-
exit:
|
|
87
|
+
animate: popIn(UIMotion.scale.floating, timings.open),
|
|
88
|
+
exit: popOut(UIMotion.scale.floating, timings.close),
|
|
79
89
|
panelId,
|
|
80
90
|
side,
|
|
81
91
|
align,
|
|
@@ -93,5 +103,5 @@ function Popover({
|
|
|
93
103
|
}
|
|
94
104
|
|
|
95
105
|
export { Popover };
|
|
96
|
-
//# sourceMappingURL=chunk-
|
|
97
|
-
//# sourceMappingURL=chunk-
|
|
106
|
+
//# sourceMappingURL=chunk-CF4QHO4N.js.map
|
|
107
|
+
//# sourceMappingURL=chunk-CF4QHO4N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/composites/popover/Popover.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;AAsBA,IAAM,cAAA,GAAiB;AAAA,EACrB,IAAA,EAAM,EAAE,QAAA,EAAU,MAAA,EAAQ,MAAM,UAAA,EAAW;AAAA,EAC3C,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,MAAM,MAAA;AACnC,CAAA;AAsCA,SAAS,YAAA,CAAa;AAAA,EACpB,OAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAWiB;AACf,EAAA,MAAM,QAAA,GAAW,OAAoB,IAAI,CAAA;AACzC,EAAA,MAAM,QAAQ,eAAA,CAAgB,EAAE,SAAS,QAAA,EAAU,WAAA,EAAa,cAAc,CAAA;AAC9E,EAAA,SAAA,CAAU,QAAA,EAAU,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA;AACrC,EAAA,cAAA,CAAe,QAAQ,CAAA;AACvB,EAAA,iBAAA,CAAkB,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,MAAA,EAAQ,UAAA,EAAY,UAAU,CAAA;AACtE,EAAA,eAAA,CAAgB,EAAE,KAAA,EAAO,IAAA,EAAM,CAAC,UAAA,EAAY,QAAQ,CAAA,EAAG,OAAA,EAAS,WAAA,EAAa,OAAA,EAAS,YAAA,EAAc,CAAA;AACpG,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,GAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,SAAA,EAAW,SAAS,CAAA;AAAA,MAEpD,QAAA,EAAA;AAAA,QAAA,KAAA,oBAAS,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAAyB,eAAY,MAAA,EAAO,CAAA;AAAA,QACrE;AAAA;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,OAAA,GAAU,IAAA;AAAA,EACV,UAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,IAAA,GAAO,QAAA;AAAA,EACP,KAAA,GAAQ,OAAA;AAAA,EACR,KAAA,GAAQ,KAAA;AAAA,EACR,WAAA,GAAc,IAAA;AAAA,EACd,EAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,IAAI,eAAA,CAAgB,cAAA,EAAgB,aAAa,YAAY,CAAA;AACjF,EAAA,MAAM,UAAA,GAAa,OAAoB,IAAI,CAAA;AAC3C,EAAA,MAAM,SAAS,KAAA,EAAM;AACrB,EAAA,MAAM,OAAA,GAAU,MAAM,UAAA,GAAa,MAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,KAAK,CAAA;AACjC,EAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,SAAA,EAAW,cAAc,CAAA;AAE7D,EAAA,4BACG,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,cAAA,CAAe,OAAA,EAAS;AAAA,MACvB,IAAA;AAAA,MACA,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,MAC5B,OAAA;AAAA,MACA,QAAA,EAAU,MAAA;AAAA,MACV,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,oBACD,GAAA,CAAC,aAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EACE,QAAA,EAAA,IAAA,oBACC,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QAEC,SAAS,KAAA,CAAM,QAAA,CAAS,KAAA,CAAM,QAAA,EAAU,QAAQ,IAAI,CAAA;AAAA,QACpD,MAAM,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,QAAA,EAAU,QAAQ,KAAK,CAAA;AAAA,QACnD,OAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,WAAA;AAAA,QACA,YAAA,EAAc,KAAA;AAAA,QACd,MAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QAEC;AAAA,OAAA;AAAA,MAbG;AAAA,OAgBV,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-CF4QHO4N.js","sourcesContent":["'use client';\n\nimport './popover.css';\n\nimport { Fragment, useId, useRef, type HTMLAttributes, type ReactElement, type ReactNode, type RefObject } from 'react';\n\nimport type { DataAttributes } from '../../../dom-props';\nimport { resolveMotionTiming } from '../../../motion/motion-timing';\nimport { Presence } from '../../../motion/presence';\nimport { popIn, popOut } from '../../../motion/presets';\nimport type { DisableableAnimation } from '../../../motion/timing';\nimport { useMotion, type MotionSpecs } from '../../../motion/use-motion';\nimport { UIMotion } from '../../../tokens/motion-tokens';\nimport { useControllable } from '../../internal/hooks/use-controllable';\nimport { useReturnFocus } from '../../internal/overlay/focus';\nimport { ovCloneTrigger, OverlayPortal, useOutsidePress, useOverlayEntry } from '../../internal/overlay/layer';\nimport { useAnchorPosition, type VirtualAnchor } from '../../internal/overlay/position';\nimport type { ActivateOn } from '../../internal/utils/activation';\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 /** Whether the trigger fires on `pointerdown` (snappier) or waits for `click`. @default 'click' */\n activateOn?: ActivateOn;\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 activateOn,\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, {\n open,\n onPress: () => setOpen(!open),\n panelId,\n haspopup: 'true',\n triggerRef,\n activateOn,\n })}\n <OverlayPortal>\n <Presence>\n {open && (\n <PopoverPanel\n key=\"panel\"\n animate={popIn(UIMotion.scale.floating, timings.open)}\n exit={popOut(UIMotion.scale.floating, 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,5 +1,5 @@
|
|
|
1
|
-
'use client';import { animate } from './chunk-
|
|
2
|
-
import { UIMotion } from './chunk-
|
|
1
|
+
'use client';import { measure, set, animate, flip } from './chunk-IJS7TPGV.js';
|
|
2
|
+
import { UIMotion } from './chunk-7IZJERGA.js';
|
|
3
3
|
import { useRef } from 'react';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -9,24 +9,20 @@ function useGlide(containerRef) {
|
|
|
9
9
|
function enter(target) {
|
|
10
10
|
const box = containerRef.current, pill = ref.current;
|
|
11
11
|
if (!box || !pill || !target) return;
|
|
12
|
-
const was = pill
|
|
12
|
+
const was = measure(pill);
|
|
13
13
|
const b = box.getBoundingClientRect();
|
|
14
14
|
const t = target.getBoundingClientRect();
|
|
15
15
|
const s = box.offsetWidth ? b.width / box.offsetWidth : 1;
|
|
16
|
-
pill
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
set(pill, {
|
|
17
|
+
x: [(t.left - b.left) / s + box.scrollLeft],
|
|
18
|
+
y: [(t.top - b.top) / s + box.scrollTop],
|
|
19
|
+
width: [t.width / s],
|
|
20
|
+
height: [t.height / s]
|
|
21
|
+
});
|
|
20
22
|
animate(pill, { opacity: [1], timing: { duration: UIMotion.dur.fast, ease: UIMotion.ease.standard } });
|
|
21
|
-
const glided = visible.current && !UIMotion.reduced;
|
|
23
|
+
const glided = visible.current && !UIMotion.reduced && was.width > 0 && was.height > 0;
|
|
22
24
|
visible.current = true;
|
|
23
|
-
if (
|
|
24
|
-
const timing = { ...UIMotion.t.settle, fill: "none" };
|
|
25
|
-
animate(
|
|
26
|
-
pill,
|
|
27
|
-
{ x: [was.left - now.left, 0], y: [was.top - now.top, 0], timing, composite: "add" },
|
|
28
|
-
{ width: [was.width, now.width], height: [was.height, now.height], timing }
|
|
29
|
-
);
|
|
25
|
+
if (glided) flip(pill, was, { size: "morph", timing: UIMotion.t.settle });
|
|
30
26
|
}
|
|
31
27
|
function leave() {
|
|
32
28
|
visible.current = false;
|
|
@@ -39,5 +35,5 @@ function GlidePill({ className, glide }) {
|
|
|
39
35
|
}
|
|
40
36
|
|
|
41
37
|
export { GlidePill, useGlide };
|
|
42
|
-
//# sourceMappingURL=chunk-
|
|
43
|
-
//# sourceMappingURL=chunk-
|
|
38
|
+
//# sourceMappingURL=chunk-CNWTIMIP.js.map
|
|
39
|
+
//# sourceMappingURL=chunk-CNWTIMIP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/motion/glide.tsx"],"names":[],"mappings":";;;;;AASO,SAAS,SAAgC,YAAA,EAAmC;AACjF,EAAA,MAAM,GAAA,GAAM,OAA+B,IAAI,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAE5B,EAAA,SAAS,MAAM,MAAA,EAA4B;AACzC,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,OAAA,EACvB,IAAA,GAAO,GAAA,CAAI,OAAA;AACb,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,IAAA,IAAQ,CAAC,MAAA,EAAQ;AAC9B,IAAA,MAAM,GAAA,GAAM,QAAQ,IAAI,CAAA;AACxB,IAAA,MAAM,CAAA,GAAI,IAAI,qBAAA,EAAsB;AACpC,IAAA,MAAM,CAAA,GAAI,OAAO,qBAAA,EAAsB;AACvC,IAAA,MAAM,IAAI,GAAA,CAAI,WAAA,GAAc,CAAA,CAAE,KAAA,GAAQ,IAAI,WAAA,GAAc,CAAA;AACxD,IAAA,GAAA,CAAI,IAAA,EAAM;AAAA,MACR,CAAA,EAAG,EAAE,CAAA,CAAE,IAAA,GAAO,EAAE,IAAA,IAAQ,CAAA,GAAI,IAAI,UAAU,CAAA;AAAA,MAC1C,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,GAAM,EAAE,GAAA,IAAO,CAAA,GAAI,IAAI,SAAS,CAAA;AAAA,MACvC,KAAA,EAAO,CAAC,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACnB,MAAA,EAAQ,CAAC,CAAA,CAAE,MAAA,GAAS,CAAC;AAAA,KACtB,CAAA;AACD,IAAA,OAAA,CAAQ,MAAM,EAAE,OAAA,EAAS,CAAC,CAAC,GAAG,MAAA,EAAQ,EAAE,QAAA,EAAU,QAAA,CAAG,IAAI,IAAA,EAAM,IAAA,EAAM,SAAG,IAAA,CAAK,QAAA,IAAY,CAAA;AACzF,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,IAAW,CAAC,QAAA,CAAG,WAAW,GAAA,CAAI,KAAA,GAAQ,CAAA,IAAK,GAAA,CAAI,MAAA,GAAS,CAAA;AAC/E,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,IAAA,IAAI,MAAA,EAAQ,IAAA,CAAK,IAAA,EAAM,GAAA,EAAK,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,QAAA,CAAG,CAAA,CAAE,MAAA,EAAQ,CAAA;AAAA,EACpE;AAEA,EAAA,SAAS,KAAA,GAAQ;AACf,IAAA,OAAA,CAAQ,OAAA,GAAU,KAAA;AAClB,IAAA,IAAI,GAAA,CAAI,SAAS,OAAA,CAAQ,GAAA,CAAI,SAAS,EAAE,OAAA,EAAS,CAAC,CAAC,CAAA,EAAG,QAAQ,EAAE,QAAA,EAAU,SAAG,GAAA,CAAI,IAAA,EAAM,MAAM,QAAA,CAAG,IAAA,CAAK,IAAA,EAAK,EAAG,CAAA;AAAA,EAC/G;AAEA,EAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,KAAA,EAAM;AAC7B;AAEO,SAAS,SAAA,CAAU,EAAE,SAAA,EAAW,KAAA,EAAM,EAA4C;AACvF,EAAA,2BAAQ,MAAA,EAAA,EAAK,GAAA,EAAK,MAAM,GAAA,EAAK,SAAA,EAAsB,eAAY,MAAA,EAAO,CAAA;AACxE","file":"chunk-CNWTIMIP.js","sourcesContent":["'use client';\n\nimport { useRef, type RefObject } from 'react';\n\nimport { animate, flip, measure, set } 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 = measure(pill);\n const b = box.getBoundingClientRect();\n const t = target.getBoundingClientRect();\n const s = box.offsetWidth ? b.width / box.offsetWidth : 1;\n set(pill, {\n x: [(t.left - b.left) / s + box.scrollLeft],\n y: [(t.top - b.top) / s + box.scrollTop],\n width: [t.width / s],\n height: [t.height / s],\n });\n animate(pill, { opacity: [1], timing: { duration: SM.dur.fast, ease: SM.ease.standard } });\n const glided = visible.current && !SM.reduced && was.width > 0 && was.height > 0;\n visible.current = true;\n if (glided) flip(pill, was, { size: 'morph', timing: SM.t.settle });\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,5 +1,5 @@
|
|
|
1
|
-
'use client';import { PresenceContext } from './chunk-
|
|
2
|
-
import {
|
|
1
|
+
'use client';import { PresenceContext } from './chunk-M43IOM5C.js';
|
|
2
|
+
import { useRef, useState, useEffect, createElement, Fragment, Children, isValidElement } from 'react';
|
|
3
3
|
|
|
4
4
|
function toEntries(children) {
|
|
5
5
|
const out = [];
|
|
@@ -8,19 +8,40 @@ function toEntries(children) {
|
|
|
8
8
|
});
|
|
9
9
|
return out;
|
|
10
10
|
}
|
|
11
|
+
function withExiting(previous, incoming, claims, latest) {
|
|
12
|
+
const live = new Set(incoming.map((entry) => entry.key));
|
|
13
|
+
const merged = incoming.map((entry) => ({ ...entry }));
|
|
14
|
+
previous.forEach((entry, index) => {
|
|
15
|
+
if (live.has(entry.key)) return;
|
|
16
|
+
if (!claims.get(entry.key)?.size) return;
|
|
17
|
+
const node = latest.get(entry.key) ?? entry.node;
|
|
18
|
+
merged.splice(index, 0, entry.exiting ? entry : { ...entry, node, exiting: true });
|
|
19
|
+
});
|
|
20
|
+
return merged;
|
|
21
|
+
}
|
|
11
22
|
function Presence({ children, initial = true, mode = "sync", onExitComplete }) {
|
|
12
23
|
const incoming = toEntries(children);
|
|
13
24
|
const signature = incoming.map((entry) => entry.key).join("|");
|
|
14
|
-
const
|
|
25
|
+
const claims = useRef(/* @__PURE__ */ new Map());
|
|
26
|
+
const latest = useRef(/* @__PURE__ */ new Map());
|
|
27
|
+
for (const entry of incoming) latest.current.set(entry.key, entry.node);
|
|
28
|
+
const [tracked, setTracked] = useState({ shown: incoming, signature });
|
|
15
29
|
const bornAtMount = useRef(new Set(incoming.map((entry) => entry.key)));
|
|
16
30
|
const wasExiting = useRef(false);
|
|
17
31
|
const complete = useRef(onExitComplete);
|
|
18
32
|
complete.current = onExitComplete;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
33
|
+
let shown = tracked.shown;
|
|
34
|
+
if (tracked.signature !== signature) {
|
|
35
|
+
shown = withExiting(tracked.shown, incoming, claims.current, latest.current);
|
|
36
|
+
setTracked({ shown, signature });
|
|
37
|
+
}
|
|
38
|
+
const drop = (key) => {
|
|
39
|
+
latest.current.delete(key);
|
|
40
|
+
setTracked((previous) => {
|
|
41
|
+
const next = previous.shown.filter((entry) => entry.key !== key || !entry.exiting);
|
|
42
|
+
return next.length === previous.shown.length ? previous : { ...previous, shown: next };
|
|
43
|
+
});
|
|
44
|
+
};
|
|
24
45
|
const claimExit = (key) => () => {
|
|
25
46
|
let tokens = claims.current.get(key);
|
|
26
47
|
if (!tokens) {
|
|
@@ -36,18 +57,6 @@ function Presence({ children, initial = true, mode = "sync", onExitComplete }) {
|
|
|
36
57
|
drop(key);
|
|
37
58
|
};
|
|
38
59
|
};
|
|
39
|
-
useLayoutEffect(() => {
|
|
40
|
-
setShown((previous) => {
|
|
41
|
-
const live = new Set(incoming.map((entry) => entry.key));
|
|
42
|
-
const merged = incoming.map((entry) => ({ ...entry }));
|
|
43
|
-
previous.forEach((entry, index) => {
|
|
44
|
-
if (live.has(entry.key)) return;
|
|
45
|
-
if (!claims.current.get(entry.key)?.size) return;
|
|
46
|
-
merged.splice(index, 0, entry.exiting ? entry : { ...entry, exiting: true });
|
|
47
|
-
});
|
|
48
|
-
return merged;
|
|
49
|
-
});
|
|
50
|
-
}, [signature]);
|
|
51
60
|
const leaving = shown.some((entry) => entry.exiting);
|
|
52
61
|
useEffect(() => {
|
|
53
62
|
if (wasExiting.current && !leaving) complete.current?.();
|
|
@@ -76,5 +85,5 @@ function Presence({ children, initial = true, mode = "sync", onExitComplete }) {
|
|
|
76
85
|
}
|
|
77
86
|
|
|
78
87
|
export { Presence };
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
80
|
-
//# sourceMappingURL=chunk-
|
|
88
|
+
//# sourceMappingURL=chunk-DDRSMHN4.js.map
|
|
89
|
+
//# sourceMappingURL=chunk-DDRSMHN4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/motion/presence.tsx"],"names":[],"mappings":"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","file":"chunk-DDRSMHN4.js","sourcesContent":["'use client';\n\nimport {\n Children,\n createElement,\n Fragment,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { PresenceContext } from './presence-context';\n\ninterface Entry {\n key: string;\n node: ReactElement;\n exiting: boolean;\n}\n\ntype Claims = Map<string, Set<object>>;\ntype Latest = Map<string, ReactElement>;\n\ninterface Tracked {\n shown: Entry[];\n signature: string;\n}\n\nfunction toEntries(children: ReactNode): Entry[] {\n const out: Entry[] = [];\n Children.forEach(children, (child, index) => {\n if (isValidElement(child)) out.push({ key: String(child.key ?? index), node: child, exiting: false });\n });\n return out;\n}\n\nfunction withExiting(previous: Entry[], incoming: Entry[], claims: Claims, latest: Latest): Entry[] {\n const live = new Set(incoming.map((entry) => entry.key));\n const merged: Entry[] = incoming.map((entry) => ({ ...entry }));\n previous.forEach((entry, index) => {\n if (live.has(entry.key)) return;\n if (!claims.get(entry.key)?.size) return;\n const node = latest.get(entry.key) ?? entry.node;\n merged.splice(index, 0, entry.exiting ? entry : { ...entry, node, exiting: true });\n });\n return merged;\n}\n\nexport interface PresenceProps {\n /** Keyed children. A child animates out only if it renders a `<Motion>` carrying `exit`. */\n children?: ReactNode;\n /** Let children present on the first paint play their `animate`. @default true */\n initial?: boolean;\n /** `wait` holds entering children back until the outgoing ones have left. @default 'sync' */\n mode?: 'sync' | 'wait';\n /** Fires once the last exiting child has been removed. */\n onExitComplete?: () => void;\n}\n\nexport function Presence({ children, initial = true, mode = 'sync', onExitComplete }: PresenceProps) {\n const incoming = toEntries(children);\n const signature = incoming.map((entry) => entry.key).join('|');\n const claims = useRef<Claims>(new Map());\n const latest = useRef<Latest>(new Map());\n for (const entry of incoming) latest.current.set(entry.key, entry.node);\n const [tracked, setTracked] = useState<Tracked>({ shown: incoming, signature });\n const bornAtMount = useRef(new Set(incoming.map((entry) => entry.key)));\n const wasExiting = useRef(false);\n const complete = useRef(onExitComplete);\n complete.current = onExitComplete;\n\n let shown = tracked.shown;\n if (tracked.signature !== signature) {\n shown = withExiting(tracked.shown, incoming, claims.current, latest.current);\n setTracked({ shown, signature });\n }\n\n const drop = (key: string) => {\n latest.current.delete(key);\n setTracked((previous) => {\n const next = previous.shown.filter((entry) => entry.key !== key || !entry.exiting);\n return next.length === previous.shown.length ? previous : { ...previous, shown: next };\n });\n };\n\n const claimExit = (key: string) => (): (() => void) => {\n let tokens = claims.current.get(key);\n if (!tokens) {\n tokens = new Set<object>();\n claims.current.set(key, tokens);\n }\n const token = {};\n const held = tokens;\n held.add(token);\n return () => {\n if (!held.delete(token) || held.size) return;\n if (claims.current.get(key) === held) claims.current.delete(key);\n drop(key);\n };\n };\n\n const leaving = shown.some((entry) => entry.exiting);\n\n useEffect(() => {\n if (wasExiting.current && !leaving) complete.current?.();\n wasExiting.current = leaving;\n }, [leaving]);\n\n const fresh = new Map(incoming.map((entry) => [entry.key, entry.node]));\n const visible = mode === 'wait' && leaving ? shown.filter((entry) => entry.exiting) : shown;\n\n return createElement(\n Fragment,\n null,\n visible.map((entry) =>\n createElement(\n PresenceContext.Provider,\n {\n key: entry.key,\n value: {\n isPresent: !entry.exiting,\n initial: initial || !bornAtMount.current.has(entry.key),\n claimExit: claimExit(entry.key),\n },\n },\n fresh.get(entry.key) ?? entry.node,\n ),\n ),\n );\n}\n"]}
|
|
@@ -18,5 +18,5 @@ function timingVars(prefix, animation) {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export { resolveDirection, timingVars };
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
22
|
-
//# sourceMappingURL=chunk-
|
|
21
|
+
//# sourceMappingURL=chunk-DMX2F6B4.js.map
|
|
22
|
+
//# sourceMappingURL=chunk-DMX2F6B4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/motion/timing.ts"],"names":[],"mappings":";AA6BO,SAAS,gBAAA,CACd,QACA,GAAA,EACmB;AACnB,EAAA,OAAO,OAAO,MAAA,KAAW,QAAA,GAAW,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA;AACpD;AAEO,SAAS,UAAA,CAAW,QAAgB,SAAA,EAAwE;AACjH,EAAA,IAAI,SAAA,KAAc,QAAW,OAAO,MAAA;AACpC,EAAA,IAAI,cAAc,IAAA,EAAM;AACtB,IAAA,OAAO,EAAE,CAAC,CAAA,EAAA,EAAK,MAAM,CAAA,SAAA,CAAW,GAAG,KAAA,EAAO,CAAC,CAAA,EAAA,EAAK,MAAM,CAAA,UAAA,CAAY,GAAG,KAAA,EAAM;AAAA,EAC7E;AACA,EAAA,MAAM,OAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,GAAA,IAAO,CAAC,MAAA,EAAQ,OAAO,CAAA,EAAY;AAC5C,IAAA,MAAM,CAAA,GAAI,gBAAA,CAAiB,SAAA,CAAU,QAAA,EAAU,GAAG,CAAA;AAClD,IAAA,MAAM,CAAA,GAAI,gBAAA,CAAiB,SAAA,CAAU,IAAA,EAAM,GAAG,CAAA;AAC9C,IAAA,IAAI,CAAA,OAAQ,CAAA,EAAA,EAAK,MAAM,QAAQ,GAAG,CAAA,CAAE,CAAA,GAAI,CAAA,eAAA,EAAkB,CAAC,CAAA,CAAA,CAAA;AAC3D,IAAA,IAAI,CAAA,OAAQ,CAAA,EAAA,EAAK,MAAM,SAAS,GAAG,CAAA,CAAE,CAAA,GAAI,CAAA,WAAA,EAAc,CAAC,CAAA,CAAA,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,SAAU,IAAA,GAAyB,MAAA;AAC9D","file":"chunk-DMX2F6B4.js","sourcesContent":["import type { CSSProperties } from 'react';\n\nimport type { DurationToken, EaseToken } from '../tokens/motion-scale';\n\nexport type TimingDirection = 'open' | 'close';\n/** One token for both directions, or split per direction; an omitted direction keeps its default. */\nexport type DirectionalToken<Token extends string> = Token | { [D in TimingDirection]?: Token };\n\n/** Timing of an open/close transition, constrained to the motion token vocabulary -\n * see DurationToken / EaseToken for what each token means. */\nexport interface AnimationTiming {\n /** Duration token(s); an omitted field or direction keeps the component's default. */\n duration?: DirectionalToken<DurationToken>;\n /** Ease token(s); an omitted field or direction keeps the component's default. */\n ease?: DirectionalToken<EaseToken>;\n}\n\n/** The `animation` prop shape: tokens to retime, omit for the component's defaults, or\n * `null` to disable the transition entirely (it plays instantly). */\nexport type DisableableAnimation = AnimationTiming | null;\n\n/** Extend this to expose the timing API on a component; redeclare `animation`\n * to document the component's own default tokens. */\nexport interface TimingProps {\n /** Transition timing - motion tokens only, each field a single token or { open, close };\n * `null` disables the transition (it plays instantly). */\n animation?: DisableableAnimation;\n}\n\nexport function resolveDirection<Token extends string>(\n timing: DirectionalToken<Token> | undefined,\n dir: TimingDirection,\n): Token | undefined {\n return typeof timing === 'object' ? timing[dir] : timing;\n}\n\nexport function timingVars(prefix: string, animation: DisableableAnimation | undefined): CSSProperties | undefined {\n if (animation === undefined) return undefined;\n if (animation === null) {\n return { [`--${prefix}-dur-open`]: '0ms', [`--${prefix}-dur-close`]: '0ms' } as CSSProperties;\n }\n const vars: Record<string, string> = {};\n for (const dir of ['open', 'close'] as const) {\n const d = resolveDirection(animation.duration, dir);\n const e = resolveDirection(animation.ease, dir);\n if (d) vars[`--${prefix}-dur-${dir}`] = `var(--duration-${d})`;\n if (e) vars[`--${prefix}-ease-${dir}`] = `var(--ease-${e})`;\n }\n return Object.keys(vars).length ? (vars as CSSProperties) : undefined;\n}\n"]}
|
|
@@ -571,5 +571,5 @@ function Icon({ name, size = "md", weight = "regular", label, className = "" })
|
|
|
571
571
|
}
|
|
572
572
|
|
|
573
573
|
export { Icon };
|
|
574
|
-
//# sourceMappingURL=chunk-
|
|
575
|
-
//# sourceMappingURL=chunk-
|
|
574
|
+
//# sourceMappingURL=chunk-EAI4POPB.js.map
|
|
575
|
+
//# sourceMappingURL=chunk-EAI4POPB.js.map
|