@yewdiel21/motion-kit 0.9.1 → 0.14.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 +72 -0
- package/dist/auto/index.d.ts +72 -3
- package/dist/auto/index.js +139 -3
- package/dist/auto/index.js.map +1 -1
- package/dist/{chunk-BFC27F2G.js → chunk-6P4P7NU6.js} +2 -218
- package/dist/chunk-6P4P7NU6.js.map +1 -0
- package/dist/chunk-CU6SXW3E.js +20334 -0
- package/dist/chunk-CU6SXW3E.js.map +1 -0
- package/dist/{chunk-XDWBVFHQ.js → chunk-EY4BJKC4.js} +1203 -29
- package/dist/chunk-EY4BJKC4.js.map +1 -0
- package/dist/chunk-QP4QJOEN.js +72 -0
- package/dist/chunk-QP4QJOEN.js.map +1 -0
- package/dist/css/components/activity-feed.css +240 -0
- package/dist/css/components/attachment.css +266 -0
- package/dist/css/components/breadcrumb.css +110 -0
- package/dist/css/components/calendar.css +159 -0
- package/dist/css/components/chart-tooltip.css +168 -0
- package/dist/css/components/chart.css +296 -0
- package/dist/css/components/code-block.css +264 -0
- package/dist/css/components/color-area.css +82 -0
- package/dist/css/components/color-field.css +67 -0
- package/dist/css/components/color-picker.css +131 -0
- package/dist/css/components/color-slider.css +113 -0
- package/dist/css/components/command-search.css +252 -0
- package/dist/css/components/context-menu.css +23 -0
- package/dist/css/components/credit-card.css +288 -0
- package/dist/css/components/data-table.css +591 -0
- package/dist/css/components/date-range-picker.css +168 -0
- package/dist/css/components/date-time-picker.css +178 -0
- package/dist/css/components/drawer.css +58 -0
- package/dist/css/components/editable-table.css +201 -0
- package/dist/css/components/empty-state.css +61 -0
- package/dist/css/components/file-explorer.css +633 -0
- package/dist/css/components/filter-builder.css +232 -0
- package/dist/css/components/hold-confirm.css +87 -0
- package/dist/css/components/hover-card.css +20 -0
- package/dist/css/components/image-preview.css +195 -0
- package/dist/css/components/input-otp.css +10 -0
- package/dist/css/components/json-viewer.css +272 -0
- package/dist/css/components/like-button.css +78 -0
- package/dist/css/components/link-preview.css +275 -0
- package/dist/css/components/loading-button.css +77 -0
- package/dist/css/components/multi-select.css +267 -0
- package/dist/css/components/notification-bell.css +127 -0
- package/dist/css/components/pagination.css +11 -0
- package/dist/css/components/password-strength.css +183 -0
- package/dist/css/components/popover.css +25 -0
- package/dist/css/components/progress.css +140 -0
- package/dist/css/components/quantity.css +16 -0
- package/dist/css/components/questionnaire.css +217 -0
- package/dist/css/components/range-calendar.css +186 -0
- package/dist/css/components/range-slider.css +192 -0
- package/dist/css/components/resizable-panel.css +243 -0
- package/dist/css/components/rich-text-editor.css +284 -0
- package/dist/css/components/scratch-card.css +75 -0
- package/dist/css/components/skeleton.css +108 -0
- package/dist/css/components/slot-picker.css +126 -0
- package/dist/css/components/split-view.css +19 -0
- package/dist/css/components/star-rating.css +80 -0
- package/dist/css/components/stat-card.css +164 -0
- package/dist/css/components/studio-dock.css +35 -0
- package/dist/css/components/swipe-actions.css +105 -0
- package/dist/css/components/tag-input.css +244 -0
- package/dist/css/components/time-field.css +88 -0
- package/dist/css/components/timeline.css +219 -0
- package/dist/css/components/tooltip.css +79 -0
- package/dist/css/components/trailer.css +37 -0
- package/dist/css/components/tree-view.css +210 -0
- package/dist/css/components/virtual-list.css +195 -0
- package/dist/css/controls.css +65 -0
- package/dist/css/tokens.css +185 -181
- package/dist/elements/index.d.ts +742 -5
- package/dist/elements/index.js +1527 -8
- package/dist/elements/index.js.map +1 -1
- package/dist/{engine-GDGwQnJE.d.ts → engine-Cn6IhE3z.d.ts} +1 -1
- package/dist/engine-QECQnGz1.d.ts +33 -0
- package/dist/index.css +10113 -181
- package/dist/index.d.ts +89 -5
- package/dist/index.js +285 -9
- package/dist/index.js.map +1 -1
- package/dist/react/index.d.ts +678 -23
- package/dist/react/index.js +2389 -7
- package/dist/react/index.js.map +1 -1
- package/dist/{reduced-B98f8LPs.d.ts → reduced-BBUusld6.d.ts} +206 -2
- package/dist/reveal-DEvp6U6T.d.ts +2381 -0
- package/dist/{store-pHiUvxP8.d.ts → store-DjkTBX7f.d.ts} +2 -2
- package/package.json +1 -1
- package/registry.json +583 -104
- package/skills/motion-kit/SKILL.md +209 -189
- package/src/auto/auto-init.ts +136 -0
- package/src/components/activity-feed/README.md +56 -0
- package/src/components/activity-feed/activity-feed.css +239 -0
- package/src/components/activity-feed/element.ts +36 -0
- package/src/components/activity-feed/engine.ts +351 -0
- package/src/components/activity-feed/react.tsx +32 -0
- package/src/components/attachment/README.md +27 -0
- package/src/components/attachment/attachment.css +265 -0
- package/src/components/attachment/element.ts +50 -0
- package/src/components/attachment/engine.ts +469 -0
- package/src/components/attachment/react.tsx +65 -0
- package/src/components/breadcrumb/README.md +38 -0
- package/src/components/breadcrumb/breadcrumb.css +109 -0
- package/src/components/breadcrumb/element.ts +27 -0
- package/src/components/breadcrumb/engine.ts +249 -0
- package/src/components/breadcrumb/react.tsx +30 -0
- package/src/components/calendar/README.md +82 -0
- package/src/components/calendar/calendar.css +158 -0
- package/src/components/calendar/element.ts +27 -0
- package/src/components/calendar/engine.ts +412 -0
- package/src/components/calendar/react.tsx +69 -0
- package/src/components/chart/README.md +24 -0
- package/src/components/chart/chart.css +295 -0
- package/src/components/chart/element.ts +41 -0
- package/src/components/chart/engine.ts +811 -0
- package/src/components/chart/react.tsx +50 -0
- package/src/components/chart-tooltip/README.md +53 -0
- package/src/components/chart-tooltip/chart-tooltip.css +167 -0
- package/src/components/chart-tooltip/element.ts +37 -0
- package/src/components/chart-tooltip/engine.ts +442 -0
- package/src/components/chart-tooltip/react.tsx +47 -0
- package/src/components/code-block/README.md +19 -0
- package/src/components/code-block/code-block.css +263 -0
- package/src/components/code-block/element.ts +34 -0
- package/src/components/code-block/engine.ts +254 -0
- package/src/components/code-block/highlight.ts +244 -0
- package/src/components/code-block/react.tsx +94 -0
- package/src/components/color-area/README.md +50 -0
- package/src/components/color-area/color-area.css +81 -0
- package/src/components/color-area/element.ts +26 -0
- package/src/components/color-area/engine.ts +246 -0
- package/src/components/color-area/react.tsx +42 -0
- package/src/components/color-field/README.md +43 -0
- package/src/components/color-field/color-field.css +66 -0
- package/src/components/color-field/element.ts +26 -0
- package/src/components/color-field/engine.ts +174 -0
- package/src/components/color-field/react.tsx +42 -0
- package/src/components/color-picker/README.md +45 -0
- package/src/components/color-picker/color-picker.css +130 -0
- package/src/components/color-picker/element.ts +45 -0
- package/src/components/color-picker/engine.ts +314 -0
- package/src/components/color-picker/react.tsx +47 -0
- package/src/components/color-slider/README.md +55 -0
- package/src/components/color-slider/color-slider.css +112 -0
- package/src/components/color-slider/element.ts +26 -0
- package/src/components/color-slider/engine.ts +234 -0
- package/src/components/color-slider/react.tsx +45 -0
- package/src/components/command-search/README.md +15 -0
- package/src/components/command-search/command-search.css +251 -0
- package/src/components/command-search/element.ts +36 -0
- package/src/components/command-search/engine.ts +356 -0
- package/src/components/command-search/match.ts +53 -0
- package/src/components/command-search/react.tsx +66 -0
- package/src/components/context-menu/README.md +31 -0
- package/src/components/context-menu/context-menu.css +22 -0
- package/src/components/context-menu/element.ts +40 -0
- package/src/components/context-menu/engine.ts +153 -0
- package/src/components/context-menu/react.tsx +57 -0
- package/src/components/credit-card/README.md +20 -0
- package/src/components/credit-card/card.ts +77 -0
- package/src/components/credit-card/credit-card.css +287 -0
- package/src/components/credit-card/element.ts +33 -0
- package/src/components/credit-card/engine.ts +410 -0
- package/src/components/credit-card/react.tsx +36 -0
- package/src/components/data-table/README.md +83 -0
- package/src/components/data-table/data-table.css +590 -0
- package/src/components/data-table/element.ts +54 -0
- package/src/components/data-table/engine.ts +1059 -0
- package/src/components/data-table/react.tsx +94 -0
- package/src/components/date-range-picker/README.md +51 -0
- package/src/components/date-range-picker/date-range-picker.css +167 -0
- package/src/components/date-range-picker/element.ts +52 -0
- package/src/components/date-range-picker/engine.ts +352 -0
- package/src/components/date-range-picker/react.tsx +57 -0
- package/src/components/date-time-picker/README.md +48 -0
- package/src/components/date-time-picker/date-time-picker.css +177 -0
- package/src/components/date-time-picker/element.ts +47 -0
- package/src/components/date-time-picker/engine.ts +350 -0
- package/src/components/date-time-picker/react.tsx +54 -0
- package/src/components/dialog/README.md +103 -102
- package/src/components/dialog/element.ts +123 -118
- package/src/components/dialog/engine.ts +449 -432
- package/src/components/drawer/README.md +28 -0
- package/src/components/drawer/drawer.css +57 -0
- package/src/components/drawer/element.ts +21 -0
- package/src/components/drawer/engine.ts +56 -0
- package/src/components/drawer/react.tsx +85 -0
- package/src/components/editable-table/README.md +67 -0
- package/src/components/editable-table/editable-table.css +200 -0
- package/src/components/editable-table/element.ts +45 -0
- package/src/components/editable-table/engine.ts +775 -0
- package/src/components/editable-table/react.tsx +79 -0
- package/src/components/empty-state/README.md +41 -0
- package/src/components/empty-state/element.ts +23 -0
- package/src/components/empty-state/empty-state.css +60 -0
- package/src/components/empty-state/engine.ts +232 -0
- package/src/components/empty-state/react.tsx +34 -0
- package/src/components/file-explorer/README.md +67 -0
- package/src/components/file-explorer/element.ts +39 -0
- package/src/components/file-explorer/engine.ts +1307 -0
- package/src/components/file-explorer/file-explorer.css +632 -0
- package/src/components/file-explorer/react.tsx +77 -0
- package/src/components/filter-builder/README.md +47 -0
- package/src/components/filter-builder/element.ts +34 -0
- package/src/components/filter-builder/engine.ts +365 -0
- package/src/components/filter-builder/filter-builder.css +231 -0
- package/src/components/filter-builder/react.tsx +36 -0
- package/src/components/hold-confirm/README.md +13 -0
- package/src/components/hold-confirm/element.ts +24 -0
- package/src/components/hold-confirm/engine.ts +216 -0
- package/src/components/hold-confirm/hold-confirm.css +86 -0
- package/src/components/hold-confirm/react.tsx +28 -0
- package/src/components/hover-card/README.md +20 -0
- package/src/components/hover-card/element.ts +8 -0
- package/src/components/hover-card/engine.ts +131 -0
- package/src/components/hover-card/hover-card.css +19 -0
- package/src/components/hover-card/react.tsx +19 -0
- package/src/components/image-preview/README.md +16 -0
- package/src/components/image-preview/element.ts +26 -0
- package/src/components/image-preview/engine.ts +325 -0
- package/src/components/image-preview/image-preview.css +194 -0
- package/src/components/image-preview/react.tsx +43 -0
- package/src/components/input-otp/README.md +18 -0
- package/src/components/input-otp/element.ts +14 -0
- package/src/components/input-otp/engine.ts +106 -0
- package/src/components/input-otp/input-otp.css +9 -0
- package/src/components/input-otp/react.tsx +21 -0
- package/src/components/json-viewer/README.md +56 -0
- package/src/components/json-viewer/element.ts +37 -0
- package/src/components/json-viewer/engine.ts +440 -0
- package/src/components/json-viewer/json-viewer.css +271 -0
- package/src/components/json-viewer/react.tsx +56 -0
- package/src/components/like-button/README.md +13 -0
- package/src/components/like-button/element.ts +47 -0
- package/src/components/like-button/engine.ts +145 -0
- package/src/components/like-button/like-button.css +77 -0
- package/src/components/like-button/react.tsx +39 -0
- package/src/components/link-preview/README.md +19 -0
- package/src/components/link-preview/element.ts +29 -0
- package/src/components/link-preview/engine.ts +192 -0
- package/src/components/link-preview/link-preview.css +274 -0
- package/src/components/link-preview/react.tsx +101 -0
- package/src/components/loading-button/README.md +45 -0
- package/src/components/loading-button/element.ts +34 -0
- package/src/components/loading-button/engine.ts +201 -0
- package/src/components/loading-button/loading-button.css +76 -0
- package/src/components/loading-button/react.tsx +43 -0
- package/src/components/multi-select/README.md +48 -0
- package/src/components/multi-select/element.ts +28 -0
- package/src/components/multi-select/engine.ts +294 -0
- package/src/components/multi-select/multi-select.css +266 -0
- package/src/components/multi-select/react.tsx +39 -0
- package/src/components/notification-bell/README.md +14 -0
- package/src/components/notification-bell/element.ts +48 -0
- package/src/components/notification-bell/engine.ts +202 -0
- package/src/components/notification-bell/notification-bell.css +126 -0
- package/src/components/notification-bell/react.tsx +57 -0
- package/src/components/pagination/README.md +17 -0
- package/src/components/pagination/element.ts +14 -0
- package/src/components/pagination/engine.ts +102 -0
- package/src/components/pagination/pagination.css +10 -0
- package/src/components/pagination/react.tsx +22 -0
- package/src/components/password-strength/README.md +17 -0
- package/src/components/password-strength/element.ts +22 -0
- package/src/components/password-strength/engine.ts +212 -0
- package/src/components/password-strength/password-strength.css +182 -0
- package/src/components/password-strength/react.tsx +36 -0
- package/src/components/password-strength/score.ts +62 -0
- package/src/components/popover/README.md +44 -0
- package/src/components/popover/element.ts +31 -0
- package/src/components/popover/engine.ts +114 -0
- package/src/components/popover/popover.css +24 -0
- package/src/components/popover/react.tsx +50 -0
- package/src/components/progress/README.md +17 -0
- package/src/components/progress/element.ts +30 -0
- package/src/components/progress/engine.ts +173 -0
- package/src/components/progress/progress.css +139 -0
- package/src/components/progress/react.tsx +35 -0
- package/src/components/quantity/README.md +20 -0
- package/src/components/quantity/element.ts +14 -0
- package/src/components/quantity/engine.ts +85 -0
- package/src/components/quantity/quantity.css +15 -0
- package/src/components/quantity/react.tsx +21 -0
- package/src/components/questionnaire/README.md +32 -0
- package/src/components/questionnaire/element.ts +118 -0
- package/src/components/questionnaire/engine.ts +255 -0
- package/src/components/questionnaire/questionnaire.css +216 -0
- package/src/components/questionnaire/react.tsx +140 -0
- package/src/components/range-calendar/README.md +58 -0
- package/src/components/range-calendar/element.ts +42 -0
- package/src/components/range-calendar/engine.ts +390 -0
- package/src/components/range-calendar/range-calendar.css +185 -0
- package/src/components/range-calendar/react.tsx +56 -0
- package/src/components/range-slider/README.md +23 -0
- package/src/components/range-slider/element.ts +53 -0
- package/src/components/range-slider/engine.ts +316 -0
- package/src/components/range-slider/range-slider.css +191 -0
- package/src/components/range-slider/react.tsx +66 -0
- package/src/components/resizable-panel/README.md +61 -0
- package/src/components/resizable-panel/element.ts +36 -0
- package/src/components/resizable-panel/engine.ts +551 -0
- package/src/components/resizable-panel/react.tsx +74 -0
- package/src/components/resizable-panel/resizable-panel.css +242 -0
- package/src/components/rich-text-editor/README.md +57 -0
- package/src/components/rich-text-editor/element.ts +34 -0
- package/src/components/rich-text-editor/engine.ts +673 -0
- package/src/components/rich-text-editor/react.tsx +60 -0
- package/src/components/rich-text-editor/rich-text-editor.css +283 -0
- package/src/components/scratch-card/README.md +15 -0
- package/src/components/scratch-card/element.ts +30 -0
- package/src/components/scratch-card/engine.ts +257 -0
- package/src/components/scratch-card/react.tsx +40 -0
- package/src/components/scratch-card/scratch-card.css +74 -0
- package/src/components/skeleton/README.md +15 -0
- package/src/components/skeleton/element.ts +32 -0
- package/src/components/skeleton/engine.ts +104 -0
- package/src/components/skeleton/react.tsx +41 -0
- package/src/components/skeleton/skeleton.css +107 -0
- package/src/components/slot-picker/README.md +68 -0
- package/src/components/slot-picker/element.ts +27 -0
- package/src/components/slot-picker/engine.ts +412 -0
- package/src/components/slot-picker/react.tsx +76 -0
- package/src/components/slot-picker/slot-picker.css +125 -0
- package/src/components/split-view/README.md +50 -0
- package/src/components/split-view/element.ts +34 -0
- package/src/components/split-view/engine.ts +114 -0
- package/src/components/split-view/react.tsx +63 -0
- package/src/components/split-view/split-view.css +18 -0
- package/src/components/star-rating/README.md +14 -0
- package/src/components/star-rating/element.ts +26 -0
- package/src/components/star-rating/engine.ts +217 -0
- package/src/components/star-rating/react.tsx +33 -0
- package/src/components/star-rating/star-rating.css +79 -0
- package/src/components/stat-card/README.md +42 -0
- package/src/components/stat-card/element.ts +40 -0
- package/src/components/stat-card/engine.ts +283 -0
- package/src/components/stat-card/react.tsx +36 -0
- package/src/components/stat-card/stat-card.css +163 -0
- package/src/components/studio-dock/README.md +44 -0
- package/src/components/studio-dock/element.ts +11 -0
- package/src/components/studio-dock/engine.ts +212 -0
- package/src/components/studio-dock/react.tsx +23 -0
- package/src/components/studio-dock/studio-dock.css +34 -0
- package/src/components/swipe-actions/README.md +19 -0
- package/src/components/swipe-actions/element.ts +26 -0
- package/src/components/swipe-actions/engine.ts +260 -0
- package/src/components/swipe-actions/react.tsx +80 -0
- package/src/components/swipe-actions/swipe-actions.css +104 -0
- package/src/components/tag-input/README.md +42 -0
- package/src/components/tag-input/element.ts +39 -0
- package/src/components/tag-input/engine.ts +313 -0
- package/src/components/tag-input/react.tsx +54 -0
- package/src/components/tag-input/tag-input.css +243 -0
- package/src/components/time-field/README.md +54 -0
- package/src/components/time-field/element.ts +38 -0
- package/src/components/time-field/engine.ts +110 -0
- package/src/components/time-field/react.tsx +45 -0
- package/src/components/time-field/time-field.css +87 -0
- package/src/components/timeline/README.md +57 -0
- package/src/components/timeline/element.ts +31 -0
- package/src/components/timeline/engine.ts +300 -0
- package/src/components/timeline/react.tsx +59 -0
- package/src/components/timeline/timeline.css +218 -0
- package/src/components/tooltip/README.md +46 -0
- package/src/components/tooltip/element.ts +22 -0
- package/src/components/tooltip/engine.ts +288 -0
- package/src/components/tooltip/react.tsx +30 -0
- package/src/components/tooltip/tooltip.css +78 -0
- package/src/components/trailer/README.md +28 -0
- package/src/components/trailer/element.ts +13 -0
- package/src/components/trailer/engine.ts +189 -0
- package/src/components/trailer/react.tsx +16 -0
- package/src/components/trailer/trailer.css +36 -0
- package/src/components/tree-view/README.md +61 -0
- package/src/components/tree-view/element.ts +32 -0
- package/src/components/tree-view/engine.ts +569 -0
- package/src/components/tree-view/react.tsx +78 -0
- package/src/components/tree-view/tree-view.css +209 -0
- package/src/components/virtual-list/README.md +81 -0
- package/src/components/virtual-list/element.ts +42 -0
- package/src/components/virtual-list/engine.ts +678 -0
- package/src/components/virtual-list/react.tsx +101 -0
- package/src/components/virtual-list/virtual-list.css +194 -0
- package/src/core/chips.ts +196 -0
- package/src/core/color.ts +304 -0
- package/src/core/date-range.ts +67 -0
- package/src/core/dates.ts +108 -0
- package/src/core/files.ts +107 -0
- package/src/core/filter.ts +229 -0
- package/src/core/gsap.ts +80 -65
- package/src/core/listbox.ts +332 -0
- package/src/core/mark.ts +29 -0
- package/src/core/position.ts +89 -0
- package/src/core/relative-time.ts +77 -0
- package/src/core/segment-field.ts +373 -0
- package/src/core/segments.ts +153 -0
- package/src/core/tree.ts +116 -0
- package/src/core/virtual.ts +79 -0
- package/src/css/controls/README.md +14 -0
- package/src/css/controls/status.css +63 -0
- package/src/css/tokens.css +186 -182
- package/src/elements/index.ts +171 -0
- package/src/index.ts +97 -0
- package/src/motion/micro.ts +248 -0
- package/src/motion/sheet.ts +88 -65
- package/src/motion/surface.ts +9 -0
- package/src/react/index.ts +78 -0
- package/src/react/use-action-button.ts +6 -0
- package/src/react/use-editorial-reveal.ts +7 -0
- package/src/react/use-film-hero.ts +6 -0
- package/src/react/use-font-cycle.ts +7 -0
- package/src/react/use-image-zoom.ts +5 -0
- package/src/react/use-joined-cta.ts +5 -0
- package/src/react/use-local-clock.ts +5 -0
- package/src/react/use-scroll-dock.ts +5 -0
- package/src/react/use-sticker.ts +5 -0
- package/src/react/use-studio-dock.ts +8 -0
- package/src/react/use-thumbnail-nav.ts +7 -0
- package/src/react/use-trailer.ts +6 -0
- package/src/react/use-weight-hover.ts +5 -0
- package/src/recipes/action-button/README.md +31 -0
- package/src/recipes/action-button/action-button.css +113 -0
- package/src/recipes/action-button/create-action-button.ts +56 -0
- package/src/recipes/editorial-reveal/README.md +35 -0
- package/src/recipes/editorial-reveal/create-editorial-reveal.ts +91 -0
- package/src/recipes/editorial-reveal/editorial-reveal.css +17 -0
- package/src/recipes/film-hero/README.md +23 -0
- package/src/recipes/film-hero/create-film-hero.ts +65 -0
- package/src/recipes/film-hero/film-hero.css +29 -0
- package/src/recipes/font-cycle/README.md +11 -0
- package/src/recipes/font-cycle/create-font-cycle.ts +126 -0
- package/src/recipes/font-cycle/font-cycle.css +36 -0
- package/src/recipes/image-zoom/README.md +16 -0
- package/src/recipes/image-zoom/create-image-zoom.ts +27 -0
- package/src/recipes/image-zoom/image-zoom.css +7 -0
- package/src/recipes/joined-cta/README.md +13 -0
- package/src/recipes/joined-cta/create-joined-cta.ts +22 -0
- package/src/recipes/joined-cta/joined-cta.css +17 -0
- package/src/recipes/local-clock/README.md +31 -0
- package/src/recipes/local-clock/create-local-clock.ts +61 -0
- package/src/recipes/scroll-dock/README.md +46 -0
- package/src/recipes/scroll-dock/create-scroll-dock.ts +72 -0
- package/src/recipes/scroll-dock/scroll-dock.css +70 -0
- package/src/recipes/sticker/README.md +59 -0
- package/src/recipes/sticker/create-sticker.ts +490 -0
- package/src/recipes/sticker/sticker.css +112 -0
- package/src/recipes/thumbnail-nav/README.md +16 -0
- package/src/recipes/thumbnail-nav/create-thumbnail-nav.ts +165 -0
- package/src/recipes/thumbnail-nav/thumbnail-nav.css +108 -0
- package/src/recipes/weight-hover/README.md +37 -0
- package/src/recipes/weight-hover/create-weight-hover.ts +136 -0
- package/src/recipes/weight-hover/weight-hover.css +7 -0
- package/dist/chunk-BFC27F2G.js.map +0 -1
- package/dist/chunk-J6OCFNGU.js +0 -177
- package/dist/chunk-J6OCFNGU.js.map +0 -1
- package/dist/chunk-JQMJQSXD.js +0 -2374
- package/dist/chunk-JQMJQSXD.js.map +0 -1
- package/dist/chunk-XDWBVFHQ.js.map +0 -1
- package/dist/reveal-C0hCDcB_.d.ts +0 -415
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { createScope } from '../../core/scope';
|
|
2
|
+
import { inert, type Instance } from '../../core/types';
|
|
3
|
+
|
|
4
|
+
export interface InputOtpOptions {
|
|
5
|
+
length?: number;
|
|
6
|
+
value?: string;
|
|
7
|
+
mask?: boolean;
|
|
8
|
+
onChange?: (value: string) => void;
|
|
9
|
+
onComplete?: (value: string) => void;
|
|
10
|
+
}
|
|
11
|
+
export interface InputOtpInstance extends Instance {
|
|
12
|
+
setValue(value: string, notify?: boolean): void;
|
|
13
|
+
focus(): void;
|
|
14
|
+
readonly value: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** One real input preserves native editing, mobile autofill and password managers. */
|
|
18
|
+
export function createInputOtp(root: HTMLElement | null, options: InputOtpOptions = {}): InputOtpInstance {
|
|
19
|
+
const input = root?.querySelector<HTMLInputElement>('[data-mk-otp-input]');
|
|
20
|
+
const slots = root?.querySelector<HTMLElement>('[data-mk-otp-slots]');
|
|
21
|
+
if (!root || !input || !slots) return inert({ setValue() {}, focus() {}, value: '' });
|
|
22
|
+
const scope = createScope();
|
|
23
|
+
const length = Number.isFinite(options.length) ? Math.min(16, Math.max(1, Math.round(options.length!))) : 6;
|
|
24
|
+
const clean = (text: string) => text.replace(/[^0-9]/g, '').slice(0, length);
|
|
25
|
+
const original = input.value;
|
|
26
|
+
const originalNodes = [...slots.childNodes];
|
|
27
|
+
let value = clean(options.value ?? input.value);
|
|
28
|
+
let pendingReset: Event | null = null;
|
|
29
|
+
const cells = Array.from({ length }, () => {
|
|
30
|
+
const cell = document.createElement('span');
|
|
31
|
+
cell.className = 'mk-input-otp__slot';
|
|
32
|
+
return cell;
|
|
33
|
+
});
|
|
34
|
+
slots.replaceChildren(...cells);
|
|
35
|
+
scope.attr(slots, 'aria-hidden', 'true');
|
|
36
|
+
scope.attr(input, 'type', 'text');
|
|
37
|
+
scope.attr(input, 'inputmode', 'numeric');
|
|
38
|
+
scope.attr(input, 'autocomplete', 'one-time-code');
|
|
39
|
+
scope.attr(input, 'maxlength', String(length));
|
|
40
|
+
scope.attr(input, 'pattern', `[0-9]{${length}}`);
|
|
41
|
+
scope.attr(root, 'data-mk-ready', '');
|
|
42
|
+
const render = () => {
|
|
43
|
+
if (pendingReset) {
|
|
44
|
+
if (pendingReset.eventPhase !== 0) return;
|
|
45
|
+
if (!pendingReset.defaultPrevented) value = clean(input.value);
|
|
46
|
+
pendingReset = null;
|
|
47
|
+
}
|
|
48
|
+
input.value = value;
|
|
49
|
+
const active = document.activeElement === input ? Math.min(length - 1, input.selectionStart ?? value.length) : -1;
|
|
50
|
+
cells.forEach((cell, i) => {
|
|
51
|
+
const text = value[i] ? options.mask ? '•' : value[i]! : '';
|
|
52
|
+
if (cell.textContent !== text) cell.textContent = text;
|
|
53
|
+
cell.toggleAttribute('data-mk-active', i === active);
|
|
54
|
+
cell.toggleAttribute('data-mk-filled', i < value.length);
|
|
55
|
+
});
|
|
56
|
+
scope.attr(root, 'data-mk-complete', value.length === length ? '' : null);
|
|
57
|
+
};
|
|
58
|
+
const setValue = (next: string, notify = true) => {
|
|
59
|
+
if (scope.disposed) return;
|
|
60
|
+
if (pendingReset?.eventPhase === 0) pendingReset = null;
|
|
61
|
+
const previous = value;
|
|
62
|
+
value = clean(String(next));
|
|
63
|
+
render();
|
|
64
|
+
if (notify && value !== previous) {
|
|
65
|
+
options.onChange?.(value);
|
|
66
|
+
root.dispatchEvent(new CustomEvent('mk:change', { bubbles: true, detail: { value, complete: value.length === length } }));
|
|
67
|
+
if (value.length === length) {
|
|
68
|
+
options.onComplete?.(value);
|
|
69
|
+
root.dispatchEvent(new CustomEvent('mk:complete', { bubbles: true, detail: { value } }));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
scope.on(input, 'input', (event) => {
|
|
74
|
+
if ((event as InputEvent).isComposing) return;
|
|
75
|
+
const caret = clean(input.value.slice(0, input.selectionStart ?? input.value.length)).length;
|
|
76
|
+
setValue(input.value);
|
|
77
|
+
input.setSelectionRange(caret, caret);
|
|
78
|
+
render();
|
|
79
|
+
});
|
|
80
|
+
scope.on(input, 'compositionend', () => setValue(input.value));
|
|
81
|
+
scope.on(input, 'paste', (event) => {
|
|
82
|
+
const text = (event as ClipboardEvent).clipboardData?.getData('text');
|
|
83
|
+
if (text === undefined) return;
|
|
84
|
+
event.preventDefault();
|
|
85
|
+
const start = input.selectionStart ?? value.length;
|
|
86
|
+
const end = input.selectionEnd ?? start;
|
|
87
|
+
const inserted = clean(text);
|
|
88
|
+
setValue(value.slice(0, start) + inserted + value.slice(end));
|
|
89
|
+
const caret = Math.min(length, start + inserted.length);
|
|
90
|
+
input.setSelectionRange(caret, caret);
|
|
91
|
+
render();
|
|
92
|
+
});
|
|
93
|
+
scope.on(input, 'focus', render);
|
|
94
|
+
scope.on(input, 'blur', render);
|
|
95
|
+
scope.on(input, 'keyup', render);
|
|
96
|
+
scope.on(input, 'click', render);
|
|
97
|
+
scope.on(document, 'selectionchange', () => { if (document.activeElement === input) render(); });
|
|
98
|
+
if (input.form) scope.on(input.form, 'reset', (event) => {
|
|
99
|
+
render();
|
|
100
|
+
pendingReset = event;
|
|
101
|
+
scope.timeout(() => { if (pendingReset === event) render(); }, 0);
|
|
102
|
+
});
|
|
103
|
+
scope.add(() => { slots.replaceChildren(...originalNodes); input.value = original; });
|
|
104
|
+
render();
|
|
105
|
+
return { setValue, focus: () => { if (!scope.disposed) input.focus(); }, get value() { return value; }, destroy: () => scope.dispose() };
|
|
106
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
.mk-input-otp, mk-input-otp { --mk-otp-size: 2.75rem; --mk-otp-gap: .4rem; display: inline-block; position: relative; max-width: 100%; }
|
|
2
|
+
.mk-input-otp [data-mk-otp-slots], mk-input-otp [data-mk-otp-slots] { display: flex; flex-wrap: wrap; gap: var(--mk-otp-gap); }
|
|
3
|
+
.mk-input-otp__slot { box-sizing: border-box; width: var(--mk-otp-size); height: 3.5rem; display: grid; place-items: center; border: 1px solid var(--mk-outline-soft); border-radius: var(--mk-radius-sm); color: var(--mk-text); background: var(--mk-surface-1); font: 1.5rem var(--mk-font-mono, monospace); transition: border-color .2s, background .2s, transform .2s; }
|
|
4
|
+
.mk-input-otp__slot[data-mk-active] { outline: 2px solid var(--mk-accent); outline-offset: 2px; background: var(--mk-accent-soft); color: var(--mk-on-accent-soft); transform: translateY(-2px); }
|
|
5
|
+
.mk-input-otp [data-mk-otp-input], mk-input-otp [data-mk-otp-input] { position: absolute; inset: 0; box-sizing: border-box; width: 100%; height: 100%; border: 0; background: transparent; color: transparent; caret-color: transparent; outline: 0; font: 1.5rem var(--mk-font-mono, monospace); letter-spacing: calc(var(--mk-otp-size) + var(--mk-otp-gap) - 1ch); padding: 0 0 0 calc((var(--mk-otp-size) - 1ch) / 2); }
|
|
6
|
+
.mk-input-otp:has([aria-invalid=true]) .mk-input-otp__slot, mk-input-otp:has([aria-invalid=true]) .mk-input-otp__slot { border-color: var(--mk-error); }
|
|
7
|
+
.mk-input-otp:has(:disabled), mk-input-otp:has(:disabled) { opacity: .45; }
|
|
8
|
+
@media (max-width: 420px) { .mk-input-otp, mk-input-otp { --mk-otp-size: 2.25rem; --mk-otp-gap: .3rem; } }
|
|
9
|
+
@media (prefers-reduced-motion: reduce) { .mk-input-otp__slot { transition: none; transform: none !important; } }
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useRef, type HTMLAttributes } from 'react';
|
|
3
|
+
import { useIsomorphicLayoutEffect, useLatest } from '../../react/use-recipe';
|
|
4
|
+
import { createInputOtp, type InputOtpOptions } from './engine';
|
|
5
|
+
export interface InputOtpProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'onComplete' | 'defaultValue'>, InputOtpOptions {
|
|
6
|
+
label?: string; name?: string; disabled?: boolean; required?: boolean; invalid?: boolean; defaultValue?: string;
|
|
7
|
+
}
|
|
8
|
+
export function InputOtp({ length, value, defaultValue, mask, onChange, onComplete, label = 'Código de verificación', name, disabled, required, invalid, className, ...props }: InputOtpProps) {
|
|
9
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
10
|
+
const edited = useRef<string | undefined>(undefined);
|
|
11
|
+
const change = useLatest(onChange);
|
|
12
|
+
const complete = useLatest(onComplete);
|
|
13
|
+
useIsomorphicLayoutEffect(() => {
|
|
14
|
+
const instance = createInputOtp(ref.current, { length, value: value ?? edited.current, mask, onChange: (n) => change.current?.(n), onComplete: (n) => complete.current?.(n) });
|
|
15
|
+
return () => { edited.current = instance.value; instance.destroy(); };
|
|
16
|
+
}, [length, value, mask]);
|
|
17
|
+
return <div {...props} ref={ref} className={['mk-input-otp', className].filter(Boolean).join(' ')}>
|
|
18
|
+
<span data-mk-otp-slots aria-hidden="true" />
|
|
19
|
+
<input data-mk-otp-input type="text" aria-label={label} name={name} defaultValue={value ?? defaultValue ?? ''} disabled={disabled} required={required} aria-invalid={invalid || undefined} />
|
|
20
|
+
</div>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# json-viewer
|
|
2
|
+
|
|
3
|
+
Visualizador de JSON con nodos expandibles, montado sobre `tree-view`. Muestra cada clave con su valor coloreado por tipo: textos en verde, números en azul, booleanos en violeta y `null` atenuado en cursiva; los colores (`"#7c5cff"`, `"rgb(…)"`) llevan su muestra. Los objetos y las listas se resumen («6 claves», «3 elementos») y se abren por niveles con el movimiento del árbol: la altura crece (.32 s, curva signature), los hijos salen de un blur y la flecha gira.
|
|
4
|
+
|
|
5
|
+
Cada fila tiene un botón de copiar que se vuelve una palomita con un pop; Ctrl/⌘ + C copia el valor de la fila enfocada. La búsqueda resalta claves y valores y abre lo que los contiene. Con `setData()` se conserva lo abierto: los valores que cambiaron destellan un momento en el acento y las claves nuevas entran saliendo de un blur, ideal para respuestas que llegan en vivo. La ruta de la fila seleccionada (`$.user.roles[0]`) aparece abajo, lista para copiar.
|
|
6
|
+
|
|
7
|
+
## HTML / Astro
|
|
8
|
+
|
|
9
|
+
```html
|
|
10
|
+
<mk-json-viewer class="mk-json-viewer" expand-depth="2" search
|
|
11
|
+
data='{"user":{"name":"Ana","roles":["admin","editor"],"color":"#7c5cff"},"total":1250.5}'></mk-json-viewer>
|
|
12
|
+
|
|
13
|
+
<!-- O el JSON escrito dentro: -->
|
|
14
|
+
<mk-json-viewer class="mk-json-viewer" root-name="respuesta">
|
|
15
|
+
<script type="application/json">{ "ok": true, "items": [1, 2, 3] }</script>
|
|
16
|
+
</mk-json-viewer>
|
|
17
|
+
|
|
18
|
+
<script>
|
|
19
|
+
const viewer = document.querySelector('mk-json-viewer');
|
|
20
|
+
viewer.addEventListener('mk:copy', (event) => console.log('Copiado', event.detail.path));
|
|
21
|
+
</script>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## React
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
<JsonViewer data={respuesta} expandDepth={2} search onSelect={(path, value) => console.log(path, value)} />
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Cambiar `data` conserva lo abierto y marca lo que cambió.
|
|
31
|
+
|
|
32
|
+
## Opciones
|
|
33
|
+
|
|
34
|
+
| Opción | Atributo | Por defecto | Qué hace |
|
|
35
|
+
|---|---|---|---|
|
|
36
|
+
| `data` | `data` (JSON) | el JSON escrito dentro | El valor a mostrar. |
|
|
37
|
+
| `expandDepth` | `expand-depth` | `1` | Niveles abiertos al empezar: `1` muestra las claves de arriba cerradas, `2` las abre… (`Infinity`, todo). |
|
|
38
|
+
| `rootName` | `root-name` | — | Una fila para el valor completo con este nombre; sin ella, las claves de arriba son las primeras filas. |
|
|
39
|
+
| `search` | `search` | `false` | Campo de búsqueda; un texto es su marcador. |
|
|
40
|
+
| `toolbar` | `toolbar` | `true` | Botones para expandir, contraer y copiar todo. |
|
|
41
|
+
| `sortKeys` | `sort-keys` | `false` | Claves en orden alfabético. |
|
|
42
|
+
| `label` | `label` | `'Datos JSON'` | Nombre accesible. |
|
|
43
|
+
| `onSelect(path, value)` | — | — | Se seleccionó una fila. |
|
|
44
|
+
| `onCopy(text, path)` | — | — | Se copió un valor. |
|
|
45
|
+
|
|
46
|
+
## API y eventos
|
|
47
|
+
|
|
48
|
+
`setData(data)`, `expandAll()`, `collapseAll()`, `reveal(path)`, `filter(texto)`, `copy(path = '$')` (promesa: `true` si se copió), `data`, `destroy()`. Eventos `mk:select` con `{ path, value }` y `mk:copy` con `{ text, path }`. El ayudante `jsonPath(padre, clave)` arma rutas como las del visor.
|
|
49
|
+
|
|
50
|
+
## Variables CSS
|
|
51
|
+
|
|
52
|
+
`--mk-jv-height` (alto máximo antes de desplazarse dentro), `--mk-jv-string`, `--mk-jv-number`, `--mk-jv-boolean` (colores de los valores; cambian solos en modo oscuro).
|
|
53
|
+
|
|
54
|
+
## Accesibilidad
|
|
55
|
+
|
|
56
|
+
Es un árbol de WAI-ARIA con todo su teclado (↑ ↓, → abre, ← cierra, `*`, Inicio, Fin, escribir para saltar), con Ctrl/⌘ + C para copiar sin buscar el botón. Los botones de copiar no son paradas de tabulación y dicen qué copian («Copiar $.user.name»). Un estado discreto anuncia cada copia, las coincidencias y lo que cambió con datos nuevos. Con movimiento reducido no hay destellos ni animaciones.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { MkElement, defineElement, type OptionType } from '../../elements/base';
|
|
2
|
+
import { createJsonViewer, type JsonViewerInstance } from './engine';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* <mk-json-viewer class="mk-json-viewer" expand-depth="2" search data='{"user":{"name":"Ana","roles":["admin"]}}'></mk-json-viewer>
|
|
6
|
+
* Or the JSON as the element's text. Emits mk:select ({path, value}) and mk:copy ({text, path}).
|
|
7
|
+
*/
|
|
8
|
+
export class MkJsonViewerElement extends MkElement<JsonViewerInstance> {
|
|
9
|
+
static options: Record<string, OptionType> = {
|
|
10
|
+
data: 'json',
|
|
11
|
+
expandDepth: 'number',
|
|
12
|
+
rootName: 'string',
|
|
13
|
+
search: 'string',
|
|
14
|
+
toolbar: 'boolean',
|
|
15
|
+
sortKeys: 'boolean',
|
|
16
|
+
label: 'string',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
protected create(options: Record<string, unknown>) {
|
|
20
|
+
// search="" (present without text) turns the field on with its default placeholder.
|
|
21
|
+
const search = this.hasAttribute('search') ? (this.getAttribute('search') || true) : undefined;
|
|
22
|
+
return createJsonViewer(this, { ...options, search });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
attributeChangedCallback(name: string, previous: string | null, next: string | null) {
|
|
26
|
+
if (previous === next || !this.instance) return;
|
|
27
|
+
if (name === 'data') {
|
|
28
|
+
try {
|
|
29
|
+
this.instance.setData(JSON.parse(next ?? 'null'));
|
|
30
|
+
} catch {
|
|
31
|
+
// Malformed JSON: keep the current data.
|
|
32
|
+
}
|
|
33
|
+
} else super.attributeChangedCallback(name, previous, next);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const defineJsonViewer = () => defineElement('mk-json-viewer', MkJsonViewerElement);
|