@spinjs/components 0.0.0-stage → 0.1.0-preview.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +61 -2
- package/dist/angle-slider/angle-slider.events.d.ts +30 -0
- package/dist/angle-slider/angle-slider.events.js +1 -0
- package/dist/angle-slider/angle-slider.machine.d.ts +9 -0
- package/dist/angle-slider/angle-slider.machine.js +56 -0
- package/dist/angle-slider/angle-slider.presentation.d.ts +194 -0
- package/dist/angle-slider/angle-slider.presentation.js +277 -0
- package/dist/angle-slider/angle-slider.state.d.ts +38 -0
- package/dist/angle-slider/angle-slider.state.js +71 -0
- package/dist/angle-slider/angle-slider.transitions.d.ts +11 -0
- package/dist/angle-slider/angle-slider.transitions.js +18 -0
- package/dist/angle-slider/examples/basic.html +42 -0
- package/dist/angle-slider/examples/knob.html +34 -0
- package/dist/angle-slider/examples/labeled.html +63 -0
- package/dist/angle-slider/examples/marks.html +42 -0
- package/dist/async-list/async-list.events.d.ts +23 -0
- package/dist/async-list/async-list.events.js +1 -0
- package/dist/async-list/async-list.machine.d.ts +5 -0
- package/dist/async-list/async-list.machine.js +96 -0
- package/dist/async-list/async-list.presentation.d.ts +294 -0
- package/dist/async-list/async-list.presentation.js +380 -0
- package/dist/async-list/async-list.state.d.ts +27 -0
- package/dist/async-list/async-list.state.js +31 -0
- package/dist/async-list/async-list.transitions.d.ts +16 -0
- package/dist/async-list/async-list.transitions.js +17 -0
- package/dist/async-list/examples/basic.html +88 -0
- package/dist/avatar/avatar.events.d.ts +18 -0
- package/dist/avatar/avatar.events.js +1 -0
- package/dist/avatar/avatar.machine.d.ts +5 -0
- package/dist/avatar/avatar.machine.js +47 -0
- package/dist/avatar/avatar.presentation.d.ts +75 -0
- package/dist/avatar/avatar.presentation.js +68 -0
- package/dist/avatar/avatar.state.d.ts +28 -0
- package/dist/avatar/avatar.state.js +20 -0
- package/dist/avatar/avatar.transitions.d.ts +7 -0
- package/dist/avatar/avatar.transitions.js +5 -0
- package/dist/avatar/examples/badge.html +24 -0
- package/dist/avatar/examples/badgeminimal.html +16 -0
- package/dist/avatar/examples/basic.html +24 -0
- package/dist/avatar/examples/count.html +29 -0
- package/dist/avatar/examples/fallback.html +24 -0
- package/dist/avatar/examples/group.html +28 -0
- package/dist/avatar/examples/icon.html +15 -0
- package/dist/avatar/examples/multiples.html +48 -0
- package/dist/avatar/examples/pills.html +58 -0
- package/dist/avatar/examples/pillsolid.html +21 -0
- package/dist/avatar/examples/rounded.html +13 -0
- package/dist/avatar/examples/status.html +24 -0
- package/dist/avatar/examples/statusminimal.html +16 -0
- package/dist/avatar/examples/trusted.html +33 -0
- package/dist/avatar/examples/verification.html +18 -0
- package/dist/carousel/carousel.events.d.ts +50 -0
- package/dist/carousel/carousel.events.js +1 -0
- package/dist/carousel/carousel.machine.d.ts +6 -0
- package/dist/carousel/carousel.machine.js +70 -0
- package/dist/carousel/carousel.presentation.d.ts +379 -0
- package/dist/carousel/carousel.presentation.js +554 -0
- package/dist/carousel/carousel.state.d.ts +61 -0
- package/dist/carousel/carousel.state.js +93 -0
- package/dist/carousel/carousel.transitions.d.ts +20 -0
- package/dist/carousel/carousel.transitions.js +49 -0
- package/dist/carousel/examples/autoplay.html +69 -0
- package/dist/carousel/examples/basic.html +56 -0
- package/dist/carousel/examples/cards.html +71 -0
- package/dist/carousel/examples/hero.html +54 -0
- package/dist/carousel/examples/infinite.html +68 -0
- package/dist/carousel/examples/minimal.html +47 -0
- package/dist/carousel/examples/testimonials.html +78 -0
- package/dist/carousel/examples/thumbnails.html +67 -0
- package/dist/carousel/examples/vertical.html +67 -0
- package/dist/cascade-select/cascade.events.d.ts +42 -0
- package/dist/cascade-select/cascade.events.js +1 -0
- package/dist/cascade-select/cascade.machine.d.ts +7 -0
- package/dist/cascade-select/cascade.machine.js +118 -0
- package/dist/cascade-select/cascade.presentation.d.ts +415 -0
- package/dist/cascade-select/cascade.presentation.js +771 -0
- package/dist/cascade-select/cascade.state.d.ts +58 -0
- package/dist/cascade-select/cascade.state.js +97 -0
- package/dist/cascade-select/cascade.transitions.d.ts +21 -0
- package/dist/cascade-select/cascade.transitions.js +54 -0
- package/dist/cascade-select/examples/basic.html +77 -0
- package/dist/color-picker/color-picker.events.d.ts +83 -0
- package/dist/color-picker/color-picker.events.js +1 -0
- package/dist/color-picker/color-picker.machine.d.ts +5 -0
- package/dist/color-picker/color-picker.machine.js +130 -0
- package/dist/color-picker/color-picker.presentation.d.ts +402 -0
- package/dist/color-picker/color-picker.presentation.js +761 -0
- package/dist/color-picker/color-picker.state.d.ts +41 -0
- package/dist/color-picker/color-picker.state.js +71 -0
- package/dist/color-picker/color-picker.transitions.d.ts +21 -0
- package/dist/color-picker/color-picker.transitions.js +99 -0
- package/dist/color-picker/examples/basic.html +106 -0
- package/dist/color-picker/examples/hue-wheel.html +57 -0
- package/dist/color-picker/examples/inline.html +61 -0
- package/dist/color-picker/examples/with-presets.html +49 -0
- package/dist/combobox/combobox.events.d.ts +61 -0
- package/dist/combobox/combobox.events.js +1 -0
- package/dist/combobox/combobox.machine.d.ts +7 -0
- package/dist/combobox/combobox.machine.js +234 -0
- package/dist/combobox/combobox.presentation.d.ts +433 -0
- package/dist/combobox/combobox.presentation.js +746 -0
- package/dist/combobox/combobox.state.d.ts +80 -0
- package/dist/combobox/combobox.state.js +71 -0
- package/dist/combobox/combobox.transitions.d.ts +28 -0
- package/dist/combobox/combobox.transitions.js +91 -0
- package/dist/combobox/examples/basic.html +61 -0
- package/dist/combobox/examples/directory.html +71 -0
- package/dist/combobox/examples/grouping.html +36 -0
- package/dist/combobox/examples/multiple.html +37 -0
- package/dist/controller.d.ts +52 -0
- package/dist/controller.js +90 -0
- package/dist/date-input/date-input.events.d.ts +37 -0
- package/dist/date-input/date-input.events.js +1 -0
- package/dist/date-input/date-input.machine.d.ts +6 -0
- package/dist/date-input/date-input.machine.js +61 -0
- package/dist/date-input/date-input.presentation.d.ts +133 -0
- package/dist/date-input/date-input.presentation.js +328 -0
- package/dist/date-input/date-input.state.d.ts +77 -0
- package/dist/date-input/date-input.state.js +260 -0
- package/dist/date-input/date-input.transitions.d.ts +22 -0
- package/dist/date-input/date-input.transitions.js +166 -0
- package/dist/date-input/examples/basic.html +18 -0
- package/dist/date-picker/date-picker.events.d.ts +42 -0
- package/dist/date-picker/date-picker.events.js +1 -0
- package/dist/date-picker/date-picker.machine.d.ts +6 -0
- package/dist/date-picker/date-picker.machine.js +102 -0
- package/dist/date-picker/date-picker.presentation.d.ts +256 -0
- package/dist/date-picker/date-picker.presentation.js +549 -0
- package/dist/date-picker/date-picker.state.d.ts +66 -0
- package/dist/date-picker/date-picker.state.js +177 -0
- package/dist/date-picker/date-picker.transitions.d.ts +23 -0
- package/dist/date-picker/date-picker.transitions.js +94 -0
- package/dist/date-picker/examples/appointment.html +49 -0
- package/dist/date-picker/examples/basic.html +6 -0
- package/dist/date-picker/examples/multiple.html +6 -0
- package/dist/date-picker/examples/pricing.html +6 -0
- package/dist/date-picker/examples/range.html +6 -0
- package/dist/date-picker/examples/unavailable.html +6 -0
- package/dist/editable/editable.events.d.ts +29 -0
- package/dist/editable/editable.events.js +1 -0
- package/dist/editable/editable.machine.d.ts +5 -0
- package/dist/editable/editable.machine.js +82 -0
- package/dist/editable/editable.presentation.d.ts +278 -0
- package/dist/editable/editable.presentation.js +388 -0
- package/dist/editable/editable.state.d.ts +54 -0
- package/dist/editable/editable.state.js +32 -0
- package/dist/editable/editable.transitions.d.ts +11 -0
- package/dist/editable/editable.transitions.js +9 -0
- package/dist/editable/examples/basic.html +43 -0
- package/dist/editable/examples/doubleclick.html +19 -0
- package/dist/editable/examples/inline-edit.html +13 -0
- package/dist/editable/examples/profile-field.html +20 -0
- package/dist/editable/examples/resize.html +19 -0
- package/dist/editable/examples/task-item.html +19 -0
- package/dist/editable/examples/title-editor.html +13 -0
- package/dist/editable/examples/with-controls.html +20 -0
- package/dist/file-upload/examples/avatar.html +34 -0
- package/dist/file-upload/examples/basic.html +34 -0
- package/dist/file-upload/examples/directory.html +34 -0
- package/dist/file-upload/examples/dragdrop.html +31 -0
- package/dist/file-upload/examples/files.html +39 -0
- package/dist/file-upload/examples/images.html +40 -0
- package/dist/file-upload/examples/paste.html +30 -0
- package/dist/file-upload/examples/table.html +39 -0
- package/dist/file-upload/file-upload.events.d.ts +27 -0
- package/dist/file-upload/file-upload.events.js +1 -0
- package/dist/file-upload/file-upload.machine.d.ts +6 -0
- package/dist/file-upload/file-upload.machine.js +59 -0
- package/dist/file-upload/file-upload.presentation.d.ts +182 -0
- package/dist/file-upload/file-upload.presentation.js +256 -0
- package/dist/file-upload/file-upload.state.d.ts +52 -0
- package/dist/file-upload/file-upload.state.js +72 -0
- package/dist/file-upload/file-upload.transitions.d.ts +11 -0
- package/dist/file-upload/file-upload.transitions.js +32 -0
- package/dist/floating-panel/examples/basic.html +42 -0
- package/dist/floating-panel/examples/calculator.html +56 -0
- package/dist/floating-panel/examples/chat.html +45 -0
- package/dist/floating-panel/examples/media-player.html +54 -0
- package/dist/floating-panel/examples/notes.html +60 -0
- package/dist/floating-panel/examples/settings.html +73 -0
- package/dist/floating-panel/examples/task.html +79 -0
- package/dist/floating-panel/examples/video-call.html +47 -0
- package/dist/floating-panel/floating-panel.events.d.ts +45 -0
- package/dist/floating-panel/floating-panel.events.js +1 -0
- package/dist/floating-panel/floating-panel.machine.d.ts +6 -0
- package/dist/floating-panel/floating-panel.machine.js +70 -0
- package/dist/floating-panel/floating-panel.presentation.d.ts +239 -0
- package/dist/floating-panel/floating-panel.presentation.js +271 -0
- package/dist/floating-panel/floating-panel.state.d.ts +67 -0
- package/dist/floating-panel/floating-panel.state.js +76 -0
- package/dist/floating-panel/floating-panel.transitions.d.ts +22 -0
- package/dist/floating-panel/floating-panel.transitions.js +114 -0
- package/dist/hover-card/examples/basic.html +19 -0
- package/dist/hover-card/examples/controlled.html +32 -0
- package/dist/hover-card/examples/custom-positioning.html +29 -0
- package/dist/hover-card/examples/link.html +10 -0
- package/dist/hover-card/examples/product.html +33 -0
- package/dist/hover-card/examples/user.html +38 -0
- package/dist/hover-card/examples/with-arrow.html +29 -0
- package/dist/hover-card/hover-card.controller-def.d.ts +50 -0
- package/dist/hover-card/hover-card.controller-def.js +134 -0
- package/dist/image-cropper/crop-geometry.d.ts +133 -0
- package/dist/image-cropper/crop-geometry.js +453 -0
- package/dist/image-cropper/examples/basic.html +44 -0
- package/dist/image-cropper/examples/circle.html +44 -0
- package/dist/image-cropper/image-cropper.events.d.ts +108 -0
- package/dist/image-cropper/image-cropper.events.js +1 -0
- package/dist/image-cropper/image-cropper.machine.d.ts +5 -0
- package/dist/image-cropper/image-cropper.machine.js +231 -0
- package/dist/image-cropper/image-cropper.presentation.d.ts +295 -0
- package/dist/image-cropper/image-cropper.presentation.js +536 -0
- package/dist/image-cropper/image-cropper.state.d.ts +94 -0
- package/dist/image-cropper/image-cropper.state.js +134 -0
- package/dist/image-cropper/image-cropper.transitions.d.ts +13 -0
- package/dist/image-cropper/image-cropper.transitions.js +11 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.js +279 -0
- package/dist/listbox/examples/basic.html +50 -0
- package/dist/listbox/examples/controlled.html +54 -0
- package/dist/listbox/examples/countries.html +61 -0
- package/dist/listbox/examples/grouped.html +58 -0
- package/dist/listbox/examples/icons.html +56 -0
- package/dist/listbox/examples/multiple.html +56 -0
- package/dist/listbox/examples/priority.html +50 -0
- package/dist/listbox/examples/settings.html +64 -0
- package/dist/listbox/listbox.events.d.ts +42 -0
- package/dist/listbox/listbox.events.js +1 -0
- package/dist/listbox/listbox.machine.d.ts +6 -0
- package/dist/listbox/listbox.machine.js +51 -0
- package/dist/listbox/listbox.presentation.d.ts +294 -0
- package/dist/listbox/listbox.presentation.js +493 -0
- package/dist/listbox/listbox.state.d.ts +55 -0
- package/dist/listbox/listbox.state.js +59 -0
- package/dist/listbox/listbox.transitions.d.ts +20 -0
- package/dist/listbox/listbox.transitions.js +73 -0
- package/dist/menu/examples/basic.html +75 -0
- package/dist/menu/examples/context.html +74 -0
- package/dist/menu/examples/groups.html +88 -0
- package/dist/menu/examples/icons.html +80 -0
- package/dist/menu/examples/nested.html +83 -0
- package/dist/menu/examples/user.html +87 -0
- package/dist/menu/menu.events.d.ts +42 -0
- package/dist/menu/menu.events.js +1 -0
- package/dist/menu/menu.machine.d.ts +6 -0
- package/dist/menu/menu.machine.js +148 -0
- package/dist/menu/menu.presentation.d.ts +252 -0
- package/dist/menu/menu.presentation.js +709 -0
- package/dist/menu/menu.state.d.ts +54 -0
- package/dist/menu/menu.state.js +55 -0
- package/dist/mode-picker/examples/basic.html +17 -0
- package/dist/mode-picker/examples/minimal.html +17 -0
- package/dist/mode-picker/examples/pill.html +17 -0
- package/dist/mode-picker/mode-picker.events.d.ts +20 -0
- package/dist/mode-picker/mode-picker.events.js +1 -0
- package/dist/mode-picker/mode-picker.machine.d.ts +5 -0
- package/dist/mode-picker/mode-picker.machine.js +29 -0
- package/dist/mode-picker/mode-picker.presentation.d.ts +129 -0
- package/dist/mode-picker/mode-picker.presentation.js +175 -0
- package/dist/mode-picker/mode-picker.state.d.ts +27 -0
- package/dist/mode-picker/mode-picker.state.js +56 -0
- package/dist/mode-picker/mode-picker.transitions.d.ts +11 -0
- package/dist/mode-picker/mode-picker.transitions.js +32 -0
- package/dist/navigation-menu/examples/basic.html +72 -0
- package/dist/navigation-menu/examples/grouped.html +91 -0
- package/dist/navigation-menu/examples/minimal.html +49 -0
- package/dist/navigation-menu/navigation-menu.events.d.ts +20 -0
- package/dist/navigation-menu/navigation-menu.events.js +1 -0
- package/dist/navigation-menu/navigation-menu.machine.d.ts +6 -0
- package/dist/navigation-menu/navigation-menu.machine.js +51 -0
- package/dist/navigation-menu/navigation-menu.presentation.d.ts +132 -0
- package/dist/navigation-menu/navigation-menu.presentation.js +151 -0
- package/dist/navigation-menu/navigation-menu.state.d.ts +33 -0
- package/dist/navigation-menu/navigation-menu.state.js +49 -0
- package/dist/navigation-menu/navigation-menu.transitions.d.ts +11 -0
- package/dist/navigation-menu/navigation-menu.transitions.js +32 -0
- package/dist/number-input/examples/basic.html +49 -0
- package/dist/number-input/examples/currency.html +33 -0
- package/dist/number-input/examples/decimal.html +33 -0
- package/dist/number-input/examples/limits.html +42 -0
- package/dist/number-input/examples/percentage.html +38 -0
- package/dist/number-input/examples/quantity.html +35 -0
- package/dist/number-input/examples/scrubber.html +46 -0
- package/dist/number-input/examples/wheel.html +42 -0
- package/dist/number-input/number-input.events.d.ts +66 -0
- package/dist/number-input/number-input.events.js +1 -0
- package/dist/number-input/number-input.machine.d.ts +5 -0
- package/dist/number-input/number-input.machine.js +132 -0
- package/dist/number-input/number-input.presentation.d.ts +292 -0
- package/dist/number-input/number-input.presentation.js +449 -0
- package/dist/number-input/number-input.state.d.ts +71 -0
- package/dist/number-input/number-input.state.js +86 -0
- package/dist/number-input/number-input.transitions.d.ts +17 -0
- package/dist/number-input/number-input.transitions.js +40 -0
- package/dist/pagination/examples/basic.html +39 -0
- package/dist/pagination/examples/dropdown.html +37 -0
- package/dist/pagination/examples/info.html +41 -0
- package/dist/pagination/examples/jump.html +38 -0
- package/dist/pagination/examples/numbered.html +31 -0
- package/dist/pagination/examples/pagesize.html +46 -0
- package/dist/pagination/pagination.events.d.ts +36 -0
- package/dist/pagination/pagination.events.js +1 -0
- package/dist/pagination/pagination.machine.d.ts +6 -0
- package/dist/pagination/pagination.machine.js +45 -0
- package/dist/pagination/pagination.presentation.d.ts +161 -0
- package/dist/pagination/pagination.presentation.js +162 -0
- package/dist/pagination/pagination.state.d.ts +44 -0
- package/dist/pagination/pagination.state.js +115 -0
- package/dist/pagination/pagination.transitions.d.ts +17 -0
- package/dist/pagination/pagination.transitions.js +30 -0
- package/dist/pin-input/examples/basic.html +23 -0
- package/dist/pin-input/examples/field.html +25 -0
- package/dist/pin-input/examples/masked.html +23 -0
- package/dist/pin-input/examples/placeholder.html +24 -0
- package/dist/pin-input/examples/twofactor.html +25 -0
- package/dist/pin-input/examples/verification.html +32 -0
- package/dist/pin-input/pin-input.events.d.ts +48 -0
- package/dist/pin-input/pin-input.events.js +1 -0
- package/dist/pin-input/pin-input.machine.d.ts +5 -0
- package/dist/pin-input/pin-input.machine.js +99 -0
- package/dist/pin-input/pin-input.presentation.d.ts +204 -0
- package/dist/pin-input/pin-input.presentation.js +392 -0
- package/dist/pin-input/pin-input.state.d.ts +67 -0
- package/dist/pin-input/pin-input.state.js +63 -0
- package/dist/pin-input/pin-input.transitions.d.ts +10 -0
- package/dist/pin-input/pin-input.transitions.js +22 -0
- package/dist/popover/examples/basic.html +15 -0
- package/dist/popover/examples/feedback.html +17 -0
- package/dist/popover/examples/notifications.html +21 -0
- package/dist/popover/examples/settings.html +39 -0
- package/dist/popover/examples/share.html +18 -0
- package/dist/popover/examples/user.html +43 -0
- package/dist/popover/popover.controller-def.d.ts +39 -0
- package/dist/popover/popover.controller-def.js +74 -0
- package/dist/rating-group/examples/basic.html +39 -0
- package/dist/rating-group/examples/movie.html +45 -0
- package/dist/rating-group/examples/product-review.html +52 -0
- package/dist/rating-group/examples/service-evaluation.html +31 -0
- package/dist/rating-group/rating-group.events.d.ts +38 -0
- package/dist/rating-group/rating-group.events.js +1 -0
- package/dist/rating-group/rating-group.machine.d.ts +6 -0
- package/dist/rating-group/rating-group.machine.js +70 -0
- package/dist/rating-group/rating-group.presentation.d.ts +144 -0
- package/dist/rating-group/rating-group.presentation.js +208 -0
- package/dist/rating-group/rating-group.state.d.ts +36 -0
- package/dist/rating-group/rating-group.state.js +41 -0
- package/dist/rating-group/rating-group.transitions.d.ts +16 -0
- package/dist/rating-group/rating-group.transitions.js +15 -0
- package/dist/react/react.d.ts +29 -0
- package/dist/react/react.js +8 -0
- package/dist/select/examples/basic.html +72 -0
- package/dist/select/examples/category.html +67 -0
- package/dist/select/examples/country.html +65 -0
- package/dist/select/examples/language.html +19 -0
- package/dist/select/examples/multiple.html +20 -0
- package/dist/select/examples/profile.html +73 -0
- package/dist/select/examples/theme.html +11 -0
- package/dist/select/examples/with-overlapping-label.html +57 -0
- package/dist/select/select.events.d.ts +59 -0
- package/dist/select/select.events.js +1 -0
- package/dist/select/select.machine.d.ts +6 -0
- package/dist/select/select.machine.js +203 -0
- package/dist/select/select.presentation.d.ts +358 -0
- package/dist/select/select.presentation.js +509 -0
- package/dist/select/select.shared.d.ts +8 -0
- package/dist/select/select.shared.js +13 -0
- package/dist/select/select.state.d.ts +51 -0
- package/dist/select/select.state.js +69 -0
- package/dist/select/select.transitions.d.ts +15 -0
- package/dist/select/select.transitions.js +27 -0
- package/dist/shared/keyboard.d.ts +29 -0
- package/dist/shared/keyboard.js +13 -0
- package/dist/signature-pad/examples/basic.html +29 -0
- package/dist/signature-pad/examples/contract.html +36 -0
- package/dist/signature-pad/examples/receipt.html +40 -0
- package/dist/signature-pad/examples/with-preview.html +40 -0
- package/dist/signature-pad/signature-pad.events.d.ts +26 -0
- package/dist/signature-pad/signature-pad.events.js +1 -0
- package/dist/signature-pad/signature-pad.machine.d.ts +7 -0
- package/dist/signature-pad/signature-pad.machine.js +44 -0
- package/dist/signature-pad/signature-pad.presentation.d.ts +184 -0
- package/dist/signature-pad/signature-pad.presentation.js +236 -0
- package/dist/signature-pad/signature-pad.state.d.ts +40 -0
- package/dist/signature-pad/signature-pad.state.js +94 -0
- package/dist/signature-pad/signature-pad.transitions.d.ts +12 -0
- package/dist/signature-pad/signature-pad.transitions.js +40 -0
- package/dist/slider/examples/basic.html +32 -0
- package/dist/slider/examples/equalizer.html +119 -0
- package/dist/slider/examples/fractional.html +7 -0
- package/dist/slider/examples/marks.html +42 -0
- package/dist/slider/examples/range.html +31 -0
- package/dist/slider/examples/stepped.html +7 -0
- package/dist/slider/examples/ticks.html +72 -0
- package/dist/slider/examples/vertical.html +30 -0
- package/dist/slider/slider.events.d.ts +50 -0
- package/dist/slider/slider.events.js +1 -0
- package/dist/slider/slider.machine.d.ts +5 -0
- package/dist/slider/slider.machine.js +86 -0
- package/dist/slider/slider.presentation.d.ts +252 -0
- package/dist/slider/slider.presentation.js +322 -0
- package/dist/slider/slider.state.d.ts +72 -0
- package/dist/slider/slider.state.js +91 -0
- package/dist/slider/slider.transitions.d.ts +17 -0
- package/dist/slider/slider.transitions.js +62 -0
- package/dist/solid/solid.d.ts +36 -0
- package/dist/solid/solid.js +10 -0
- package/dist/spin-element.d.ts +13 -0
- package/dist/spin-element.js +38 -0
- package/dist/splitter/examples/basic.html +22 -0
- package/dist/splitter/examples/nested.html +41 -0
- package/dist/splitter/examples/threepanels.html +23 -0
- package/dist/splitter/examples/vertical.html +23 -0
- package/dist/splitter/splitter.events.d.ts +52 -0
- package/dist/splitter/splitter.events.js +1 -0
- package/dist/splitter/splitter.machine.d.ts +6 -0
- package/dist/splitter/splitter.machine.js +78 -0
- package/dist/splitter/splitter.presentation.d.ts +204 -0
- package/dist/splitter/splitter.presentation.js +443 -0
- package/dist/splitter/splitter.state.d.ts +48 -0
- package/dist/splitter/splitter.state.js +225 -0
- package/dist/splitter/splitter.transitions.d.ts +20 -0
- package/dist/splitter/splitter.transitions.js +132 -0
- package/dist/steps/examples/basic.html +57 -0
- package/dist/steps/examples/checkmarks.html +32 -0
- package/dist/steps/examples/content.html +45 -0
- package/dist/steps/examples/descriptions.html +26 -0
- package/dist/steps/examples/icons.html +26 -0
- package/dist/steps/examples/lines.html +26 -0
- package/dist/steps/examples/navigation.html +41 -0
- package/dist/steps/examples/onboarding.html +32 -0
- package/dist/steps/examples/progress.html +47 -0
- package/dist/steps/examples/segmented.html +40 -0
- package/dist/steps/examples/vertical.html +58 -0
- package/dist/steps/examples/verticallabels.html +27 -0
- package/dist/steps/examples/verticalnavigation.html +36 -0
- package/dist/steps/steps.events.d.ts +27 -0
- package/dist/steps/steps.events.js +1 -0
- package/dist/steps/steps.machine.d.ts +6 -0
- package/dist/steps/steps.machine.js +36 -0
- package/dist/steps/steps.presentation.d.ts +177 -0
- package/dist/steps/steps.presentation.js +248 -0
- package/dist/steps/steps.state.d.ts +39 -0
- package/dist/steps/steps.state.js +47 -0
- package/dist/steps/steps.transitions.d.ts +15 -0
- package/dist/steps/steps.transitions.js +39 -0
- package/dist/tabs/examples/basic.html +41 -0
- package/dist/tabs/examples/dashboard.html +116 -0
- package/dist/tabs/examples/ghost.html +28 -0
- package/dist/tabs/examples/icon-above.html +50 -0
- package/dist/tabs/examples/icon-only.html +37 -0
- package/dist/tabs/examples/outline-with-icons.html +50 -0
- package/dist/tabs/examples/outline.html +29 -0
- package/dist/tabs/examples/pills.html +40 -0
- package/dist/tabs/examples/project.html +87 -0
- package/dist/tabs/examples/settings.html +100 -0
- package/dist/tabs/examples/stack-with-icons.html +51 -0
- package/dist/tabs/examples/stack.html +28 -0
- package/dist/tabs/examples/underline.html +41 -0
- package/dist/tabs/examples/vertical-ghost.html +44 -0
- package/dist/tabs/examples/vertical-icons.html +44 -0
- package/dist/tabs/examples/vertical-underline.html +45 -0
- package/dist/tabs/examples/vertical-with-icons.html +53 -0
- package/dist/tabs/examples/vertical.html +42 -0
- package/dist/tabs/examples/with-badges.html +43 -0
- package/dist/tabs/examples/with-icons.html +42 -0
- package/dist/tabs/tabs.events.d.ts +19 -0
- package/dist/tabs/tabs.events.js +1 -0
- package/dist/tabs/tabs.machine.d.ts +5 -0
- package/dist/tabs/tabs.machine.js +54 -0
- package/dist/tabs/tabs.presentation.d.ts +83 -0
- package/dist/tabs/tabs.presentation.js +94 -0
- package/dist/tabs/tabs.state.d.ts +61 -0
- package/dist/tabs/tabs.state.js +53 -0
- package/dist/tabs/tabs.transitions.d.ts +8 -0
- package/dist/tabs/tabs.transitions.js +6 -0
- package/dist/tags-input/examples/basic.html +43 -0
- package/dist/tags-input/examples/with-combobox.html +64 -0
- package/dist/tags-input/tags.events.d.ts +77 -0
- package/dist/tags-input/tags.events.js +1 -0
- package/dist/tags-input/tags.machine.d.ts +6 -0
- package/dist/tags-input/tags.machine.js +311 -0
- package/dist/tags-input/tags.presentation.d.ts +376 -0
- package/dist/tags-input/tags.presentation.js +782 -0
- package/dist/tags-input/tags.state.d.ts +109 -0
- package/dist/tags-input/tags.state.js +111 -0
- package/dist/tags-input/tags.transitions.d.ts +23 -0
- package/dist/tags-input/tags.transitions.js +101 -0
- package/dist/theme-picker/examples/basic.html +52 -0
- package/dist/theme-picker/examples/cards.html +32 -0
- package/dist/theme-picker/examples/compact.html +42 -0
- package/dist/theme-picker/examples/swatches.html +31 -0
- package/dist/theme-picker/theme-picker.events.d.ts +32 -0
- package/dist/theme-picker/theme-picker.events.js +1 -0
- package/dist/theme-picker/theme-picker.machine.d.ts +5 -0
- package/dist/theme-picker/theme-picker.machine.js +65 -0
- package/dist/theme-picker/theme-picker.presentation.d.ts +198 -0
- package/dist/theme-picker/theme-picker.presentation.js +306 -0
- package/dist/theme-picker/theme-picker.state.d.ts +40 -0
- package/dist/theme-picker/theme-picker.state.js +108 -0
- package/dist/theme-picker/theme-picker.transitions.d.ts +17 -0
- package/dist/theme-picker/theme-picker.transitions.js +62 -0
- package/dist/timer/examples/basic.html +36 -0
- package/dist/timer/examples/card.html +45 -0
- package/dist/timer/examples/compact.html +32 -0
- package/dist/timer/examples/countdown.html +45 -0
- package/dist/timer/examples/labels.html +43 -0
- package/dist/timer/examples/large.html +38 -0
- package/dist/timer/examples/minimal.html +21 -0
- package/dist/timer/examples/pomodoro.html +45 -0
- package/dist/timer/examples/workout.html +47 -0
- package/dist/timer/timer.events.d.ts +18 -0
- package/dist/timer/timer.events.js +1 -0
- package/dist/timer/timer.machine.d.ts +5 -0
- package/dist/timer/timer.machine.js +50 -0
- package/dist/timer/timer.presentation.d.ts +248 -0
- package/dist/timer/timer.presentation.js +265 -0
- package/dist/timer/timer.state.d.ts +29 -0
- package/dist/timer/timer.state.js +64 -0
- package/dist/timer/timer.transitions.d.ts +11 -0
- package/dist/timer/timer.transitions.js +35 -0
- package/dist/toast/examples/action.html +40 -0
- package/dist/toast/examples/basic.html +37 -0
- package/dist/toast/examples/bottomcenter.html +37 -0
- package/dist/toast/examples/bottomleft.html +37 -0
- package/dist/toast/examples/bottomright.html +37 -0
- package/dist/toast/examples/duration.html +36 -0
- package/dist/toast/examples/promise.html +44 -0
- package/dist/toast/examples/topcenter.html +37 -0
- package/dist/toast/examples/topleft.html +37 -0
- package/dist/toast/examples/topright.html +37 -0
- package/dist/toast/examples/types.html +47 -0
- package/dist/toast/examples/updatable.html +8 -0
- package/dist/toast/toast.events.d.ts +60 -0
- package/dist/toast/toast.events.js +1 -0
- package/dist/toast/toast.machine.d.ts +6 -0
- package/dist/toast/toast.machine.js +97 -0
- package/dist/toast/toast.presentation.d.ts +284 -0
- package/dist/toast/toast.presentation.js +532 -0
- package/dist/toast/toast.state.d.ts +65 -0
- package/dist/toast/toast.state.js +88 -0
- package/dist/toast/toast.transitions.d.ts +24 -0
- package/dist/toast/toast.transitions.js +85 -0
- package/dist/toggle-group/examples/basic.html +25 -0
- package/dist/toggle-group/examples/ghost.html +22 -0
- package/dist/toggle-group/examples/icons.html +25 -0
- package/dist/toggle-group/examples/multiple.html +14 -0
- package/dist/toggle-group/examples/outline.html +25 -0
- package/dist/toggle-group/examples/toolbar.html +25 -0
- package/dist/toggle-group/toggle-group.events.d.ts +45 -0
- package/dist/toggle-group/toggle-group.events.js +1 -0
- package/dist/toggle-group/toggle-group.machine.d.ts +5 -0
- package/dist/toggle-group/toggle-group.machine.js +65 -0
- package/dist/toggle-group/toggle-group.presentation.d.ts +112 -0
- package/dist/toggle-group/toggle-group.presentation.js +217 -0
- package/dist/toggle-group/toggle-group.state.d.ts +45 -0
- package/dist/toggle-group/toggle-group.state.js +67 -0
- package/dist/toggle-group/toggle-group.transitions.d.ts +10 -0
- package/dist/toggle-group/toggle-group.transitions.js +9 -0
- package/dist/tooltip/examples/basic.html +13 -0
- package/dist/tooltip/examples/metrics.html +30 -0
- package/dist/tooltip/examples/positioning.html +26 -0
- package/dist/tooltip/examples/status.html +33 -0
- package/dist/tooltip/examples/video.html +22 -0
- package/dist/tooltip/examples/with-arrow.html +14 -0
- package/dist/tooltip/tooltip.controller-def.d.ts +42 -0
- package/dist/tooltip/tooltip.controller-def.js +110 -0
- package/dist/tour/examples/basic.html +67 -0
- package/dist/tour/tour.events.d.ts +32 -0
- package/dist/tour/tour.events.js +1 -0
- package/dist/tour/tour.machine.d.ts +5 -0
- package/dist/tour/tour.machine.js +77 -0
- package/dist/tour/tour.presentation.d.ts +260 -0
- package/dist/tour/tour.presentation.js +272 -0
- package/dist/tour/tour.state.d.ts +43 -0
- package/dist/tour/tour.state.js +60 -0
- package/dist/tour/tour.transitions.d.ts +16 -0
- package/dist/tour/tour.transitions.js +32 -0
- package/dist/tree-view/examples/basic.html +47 -0
- package/dist/tree-view/examples/loading.html +57 -0
- package/dist/tree-view/tree-view.events.d.ts +67 -0
- package/dist/tree-view/tree-view.events.js +1 -0
- package/dist/tree-view/tree-view.machine.d.ts +6 -0
- package/dist/tree-view/tree-view.machine.js +86 -0
- package/dist/tree-view/tree-view.presentation.d.ts +254 -0
- package/dist/tree-view/tree-view.presentation.js +515 -0
- package/dist/tree-view/tree-view.state.d.ts +54 -0
- package/dist/tree-view/tree-view.state.js +61 -0
- package/dist/tree-view/tree-view.transitions.d.ts +30 -0
- package/dist/tree-view/tree-view.transitions.js +107 -0
- package/package.json +245 -4
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { defaultTwin, isRecord } from "@spinjs/runtime";
|
|
2
|
+
// src/carousel/carousel.state.ts
|
|
3
|
+
const slidesOf = (raw) => {
|
|
4
|
+
if (!Array.isArray(raw)) return [];
|
|
5
|
+
const slides = [];
|
|
6
|
+
for (const entry of raw) {
|
|
7
|
+
if (!isRecord(entry)) continue;
|
|
8
|
+
const value = entry["value"];
|
|
9
|
+
if (typeof value !== "string") continue;
|
|
10
|
+
const label = entry["label"];
|
|
11
|
+
const content = entry["content"];
|
|
12
|
+
const image = entry["image"];
|
|
13
|
+
const avatar = entry["avatar"];
|
|
14
|
+
const tag = entry["tag"];
|
|
15
|
+
slides.push({
|
|
16
|
+
value,
|
|
17
|
+
label: typeof label === "string" ? label : "",
|
|
18
|
+
content: typeof content === "string" ? content : "",
|
|
19
|
+
...typeof image === "string" ? { image } : {},
|
|
20
|
+
...typeof avatar === "string" ? { avatar } : {},
|
|
21
|
+
...typeof tag === "string" ? { tag } : {}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return slides;
|
|
25
|
+
};
|
|
26
|
+
const lastPage = (pageCount) => Math.max(0, pageCount - 1);
|
|
27
|
+
const clampIndex = (index, pageCount) => {
|
|
28
|
+
const last = lastPage(pageCount);
|
|
29
|
+
return index < 0 ? 0 : index > last ? last : Math.trunc(index);
|
|
30
|
+
};
|
|
31
|
+
const asInt = (value, fallback) => typeof value === "number" && Number.isFinite(value) ? Math.trunc(value) : fallback;
|
|
32
|
+
const slidesPerPageOf = (raw) => Math.max(1, asInt(raw, 1));
|
|
33
|
+
const slidesPerMoveOf = (raw, perPage) => {
|
|
34
|
+
const parsed = typeof raw === "string" ? Number.parseInt(raw, 10) : NaN;
|
|
35
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : perPage;
|
|
36
|
+
};
|
|
37
|
+
function initial(args, authored) {
|
|
38
|
+
const written = (field) => authored(field) || authored(defaultTwin(field)) || args[defaultTwin(field)] !== void 0;
|
|
39
|
+
const slidesPerPage = slidesPerPageOf(args.slidesPerPage);
|
|
40
|
+
const perMove = slidesPerMoveOf(args.slidesPerMove, slidesPerPage);
|
|
41
|
+
const autoSize = args.autoSize === true;
|
|
42
|
+
const slideCount = slidesOf(args.items).length;
|
|
43
|
+
const pageCount = pageCountFor(slideCount, perMove, slidesPerPage, autoSize);
|
|
44
|
+
const last = Math.max(0, pageCount - 1);
|
|
45
|
+
const at = written("index") ? asInt(args.index, 0) : 0;
|
|
46
|
+
return {
|
|
47
|
+
index: Math.min(Math.max(0, at), last),
|
|
48
|
+
pageCount,
|
|
49
|
+
slidesInView: [],
|
|
50
|
+
focused: false,
|
|
51
|
+
focusedId: null,
|
|
52
|
+
dragStatus: "idle",
|
|
53
|
+
loop: written("loop") ? args.loop === true : false,
|
|
54
|
+
perMove,
|
|
55
|
+
slideParams: {
|
|
56
|
+
perMove,
|
|
57
|
+
slidesPerPage,
|
|
58
|
+
autoSize,
|
|
59
|
+
slideCount
|
|
60
|
+
},
|
|
61
|
+
slides: slidesOf(args.items),
|
|
62
|
+
orientation: args.orientation === "vertical" ? "vertical" : "horizontal",
|
|
63
|
+
allowMouseDrag: args.allowMouseDrag === true,
|
|
64
|
+
autoplayDelay: typeof args.autoplayDelay === "number" ? args.autoplayDelay : 4e3,
|
|
65
|
+
dir: typeof args.dir === "string" ? args.dir : "ltr",
|
|
66
|
+
inViewThreshold: typeof args.inViewThreshold === "number" ? args.inViewThreshold : 60,
|
|
67
|
+
autoSize,
|
|
68
|
+
slidesPerPage
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function pageCountFor(slideCount, perMove, slidesPerPage, autoSize) {
|
|
72
|
+
const total = Math.max(0, Math.trunc(slideCount));
|
|
73
|
+
if (autoSize) return total;
|
|
74
|
+
const step = Math.max(1, Math.trunc(perMove));
|
|
75
|
+
const per = Math.max(1, Math.trunc(slidesPerPage));
|
|
76
|
+
let count = 0;
|
|
77
|
+
for (let i = 0; i < total; i += step) {
|
|
78
|
+
if (i + per > total) break;
|
|
79
|
+
count += 1;
|
|
80
|
+
}
|
|
81
|
+
return count;
|
|
82
|
+
}
|
|
83
|
+
function cycleCount(pageCount) {
|
|
84
|
+
return Math.max(1, pageCount);
|
|
85
|
+
}
|
|
86
|
+
const lastPageOf = (pageCount) => Math.max(0, pageCount - 1);
|
|
87
|
+
const movesPer = (ctx) => Math.max(1, Math.trunc(ctx.perMove));
|
|
88
|
+
const pageOf = (ctx, slide) => clampIndex(Math.floor(slide / movesPer(ctx)), ctx.pageCount);
|
|
89
|
+
const restStatus = (ctx) => ctx.focused ? "focus" : "idle";
|
|
90
|
+
const midGesture = (status) => status === "dragging" || status === "settling";
|
|
91
|
+
export { clampIndex, cycleCount, initial, lastPageOf, midGesture, movesPer, pageCountFor, pageOf, restStatus, slidesOf, slidesPerMoveOf, slidesPerPageOf };
|
|
92
|
+
|
|
93
|
+
//# sourceMappingURL=carousel.state.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CarouselEvents } from "./carousel.events.js";
|
|
2
|
+
import { CarouselContext } from "./carousel.state.js";
|
|
3
|
+
import { AssignFor } from "@spinjs/runtime/fsm";
|
|
4
|
+
type CarouselAssign<K extends keyof CarouselEvents = keyof CarouselEvents> = AssignFor<CarouselContext, CarouselEvents, K>;
|
|
5
|
+
export declare const advance: CarouselAssign<"NEXT" | "AUTOPLAY.TICK">;
|
|
6
|
+
export declare const previous: CarouselAssign<"PREV">;
|
|
7
|
+
export declare const goTo: CarouselAssign<"GO_TO">;
|
|
8
|
+
export declare const pagesSet: CarouselAssign<"PAGES.SET">;
|
|
9
|
+
export declare const slideView: CarouselAssign<"SLIDE.VIEW">;
|
|
10
|
+
export declare const dragStart: CarouselAssign<"DRAG.START">;
|
|
11
|
+
export declare const dragEnd: CarouselAssign<"DRAG.END">;
|
|
12
|
+
export declare const scrollSettle: CarouselAssign<"SCROLL.SETTLE">;
|
|
13
|
+
export declare const viewportFocus: CarouselAssign<"VIEWPORT.FOCUS">;
|
|
14
|
+
export declare const viewportBlur: CarouselAssign<"VIEWPORT.BLUR">;
|
|
15
|
+
export declare const partFocus: CarouselAssign<"PART.FOCUS">;
|
|
16
|
+
export declare const partBlur: CarouselAssign<"PART.BLUR">;
|
|
17
|
+
export declare const autoplayStart: CarouselAssign<"AUTOPLAY.START">;
|
|
18
|
+
export declare const autoplayStop: CarouselAssign<"AUTOPLAY.STOP">;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=carousel.transitions.d.ts.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { clampIndex, cycleCount, lastPageOf, midGesture, pageOf, restStatus } from "./carousel.state.js";
|
|
2
|
+
// src/carousel/carousel.transitions.ts
|
|
3
|
+
const next = (ctx) => ({ index: ctx.loop ? (ctx.index + 1) % cycleCount(ctx.pageCount) : Math.min(ctx.index + 1, lastPageOf(ctx.pageCount)) });
|
|
4
|
+
const advance = (ctx) => next(ctx);
|
|
5
|
+
const previous = (ctx) => ({ index: ctx.loop ? (ctx.index - 1 + cycleCount(ctx.pageCount)) % cycleCount(ctx.pageCount) : Math.max(0, ctx.index - 1) });
|
|
6
|
+
const goTo = (ctx, e) => {
|
|
7
|
+
if (typeof e.index !== "number" || !Number.isFinite(e.index)) return {};
|
|
8
|
+
return { index: clampIndex(e.index, ctx.pageCount) };
|
|
9
|
+
};
|
|
10
|
+
const pagesSet = (ctx, e) => {
|
|
11
|
+
const pageCount = Math.max(0, Math.trunc(e.count));
|
|
12
|
+
return {
|
|
13
|
+
pageCount,
|
|
14
|
+
index: clampIndex(ctx.index, pageCount)
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
const slideView = (ctx, e) => {
|
|
18
|
+
const inView = e.inView === true;
|
|
19
|
+
const slides = inView ? ctx.slidesInView.includes(e.index) ? ctx.slidesInView : [...ctx.slidesInView, e.index].sort((a, b) => a - b) : ctx.slidesInView.filter((slide) => slide !== e.index);
|
|
20
|
+
if (!inView || ctx.dragStatus !== "settling") return { slidesInView: slides };
|
|
21
|
+
return {
|
|
22
|
+
slidesInView: slides,
|
|
23
|
+
index: pageOf(ctx, e.index),
|
|
24
|
+
dragStatus: restStatus(ctx)
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
const dragStart = () => ({ dragStatus: "dragging" });
|
|
28
|
+
const dragEnd = () => ({ dragStatus: "settling" });
|
|
29
|
+
const scrollSettle = (ctx, e) => {
|
|
30
|
+
return {
|
|
31
|
+
index: clampIndex(e.index, ctx.pageCount),
|
|
32
|
+
...ctx.dragStatus === "settling" ? { dragStatus: restStatus(ctx) } : {}
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
const viewportFocus = (ctx) => ({
|
|
36
|
+
focused: true,
|
|
37
|
+
...midGesture(ctx.dragStatus) ? {} : { dragStatus: "focus" }
|
|
38
|
+
});
|
|
39
|
+
const viewportBlur = (ctx) => ({
|
|
40
|
+
focused: false,
|
|
41
|
+
...midGesture(ctx.dragStatus) ? {} : { dragStatus: "idle" }
|
|
42
|
+
});
|
|
43
|
+
const partFocus = (_ctx, e) => ({ focusedId: e.id });
|
|
44
|
+
const partBlur = (ctx, e) => ctx.focusedId === e.id ? { focusedId: null } : {};
|
|
45
|
+
const autoplayStart = () => ({});
|
|
46
|
+
const autoplayStop = () => ({});
|
|
47
|
+
export { advance, autoplayStart, autoplayStop, dragEnd, dragStart, goTo, pagesSet, partBlur, partFocus, previous, scrollSettle, slideView, viewportBlur, viewportFocus };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=carousel.transitions.js.map
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { carousel } from "../carousel.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = carousel({
|
|
5
|
+
allowMouseDrag: true,
|
|
6
|
+
autoplay: true,
|
|
7
|
+
autoplayDelay: 2000,
|
|
8
|
+
items: [
|
|
9
|
+
{ value: "a", tag: "01 · Peak", label: "Alpine", content: "Thin air, steep lines." },
|
|
10
|
+
{ value: "b", tag: "02 · Coast", label: "Bay", content: "Salt, fog, gulls." },
|
|
11
|
+
{ value: "c", tag: "03 · Mesa", label: "Canyon", content: "Red rock, deep time." },
|
|
12
|
+
],
|
|
13
|
+
});
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<div
|
|
17
|
+
class="relative mx-auto w-full max-w-[32rem] rounded-lg border border-solid border-border bg-surface-raised p-4"
|
|
18
|
+
{...machine.getRootProps()}>
|
|
19
|
+
<div
|
|
20
|
+
class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
|
|
21
|
+
{...machine.getItemGroupProps()}
|
|
22
|
+
>
|
|
23
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
24
|
+
<div
|
|
25
|
+
class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
|
|
26
|
+
{...machine.getItemProps(row)}
|
|
27
|
+
>
|
|
28
|
+
<div
|
|
29
|
+
class="flex min-h-[8rem] flex-col items-center justify-center rounded-md border border-solid border-border bg-surface p-6 text-center">
|
|
30
|
+
<span class="font-mono text-xs text-primary">{row.tag}</span>
|
|
31
|
+
<div class="mt-1 text-md font-semibold text-text">{row.label}</div>
|
|
32
|
+
<div class="mt-1 text-xs text-text-muted">{row.content}</div>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</template>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div
|
|
39
|
+
class={["mt-2 h-1 overflow-hidden rounded-full bg-border opacity-0 transition-opacity duration-fast ease-standard pointer-events-none", { "opacity-100": machine.isPlaying }]}
|
|
40
|
+
{...machine.getAutoplayProgressProps()}>
|
|
41
|
+
<div
|
|
42
|
+
class={["h-full w-full rounded-full bg-primary origin-left scale-x-0 transition-transform duration-fast ease-standard", { "scale-x-100": machine.isPlaying }]}
|
|
43
|
+
{...machine.getAutoplayProgressFillProps()}></div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
|
|
47
|
+
<button
|
|
48
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
49
|
+
{...machine.getPrevTriggerProps()}>‹</button>
|
|
50
|
+
<div class="flex flex-1 items-center justify-center gap-1"
|
|
51
|
+
{...machine.getIndicatorGroupProps()}>
|
|
52
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
53
|
+
<button
|
|
54
|
+
class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
|
|
55
|
+
{...machine.getIndicatorProps(row)}></button>
|
|
56
|
+
</template>
|
|
57
|
+
</div>
|
|
58
|
+
<button
|
|
59
|
+
class={["ghost icon s-sm", { "text-primary": machine.isPlaying, "ring-2 ring-border-strong": machine.focused }]}
|
|
60
|
+
{...machine.getAutoplayTriggerProps()}>▶</button>
|
|
61
|
+
<template for={machine.getProgressRows()} as={row} key={row.value}>
|
|
62
|
+
<span class="text-xs text-text-muted"
|
|
63
|
+
{...machine.getProgressTextProps()}>{row.value}</span>
|
|
64
|
+
</template>
|
|
65
|
+
<button
|
|
66
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
67
|
+
{...machine.getNextTriggerProps()}>›</button>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { carousel } from "../carousel.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = carousel({
|
|
5
|
+
allowMouseDrag: true,
|
|
6
|
+
items: [
|
|
7
|
+
{ value: "a", tag: "01 · Peak", label: "Alpine", content: "Thin air, steep lines." },
|
|
8
|
+
{ value: "b", tag: "02 · Coast", label: "Bay", content: "Salt, fog, gulls." },
|
|
9
|
+
{ value: "c", tag: "03 · Mesa", label: "Canyon", content: "Red rock, deep time." },
|
|
10
|
+
],
|
|
11
|
+
});
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<div
|
|
15
|
+
class="relative mx-auto w-full max-w-[32rem] rounded-lg border border-solid border-border bg-surface-raised p-4"
|
|
16
|
+
{...machine.getRootProps()}>
|
|
17
|
+
<div
|
|
18
|
+
class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
|
|
19
|
+
{...machine.getItemGroupProps()}
|
|
20
|
+
>
|
|
21
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
22
|
+
<div
|
|
23
|
+
class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
|
|
24
|
+
{...machine.getItemProps(row)}
|
|
25
|
+
>
|
|
26
|
+
<div
|
|
27
|
+
class="flex min-h-[8rem] flex-col items-center justify-center rounded-md border border-solid border-border bg-surface p-6 text-center">
|
|
28
|
+
<span class="font-mono text-xs text-primary">{row.tag}</span>
|
|
29
|
+
<div class="mt-1 text-md font-semibold text-text">{row.label}</div>
|
|
30
|
+
<div class="mt-1 text-xs text-text-muted">{row.content}</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
</template>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
|
|
37
|
+
<button
|
|
38
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
39
|
+
{...machine.getPrevTriggerProps()}>‹</button>
|
|
40
|
+
<div class="flex flex-1 items-center justify-center gap-1"
|
|
41
|
+
{...machine.getIndicatorGroupProps()}>
|
|
42
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
43
|
+
<button
|
|
44
|
+
class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
|
|
45
|
+
{...machine.getIndicatorProps(row)}></button>
|
|
46
|
+
</template>
|
|
47
|
+
</div>
|
|
48
|
+
<template for={machine.getProgressRows()} as={row} key={row.value}>
|
|
49
|
+
<span class="text-xs text-text-muted"
|
|
50
|
+
{...machine.getProgressTextProps()}>{row.value}</span>
|
|
51
|
+
</template>
|
|
52
|
+
<button
|
|
53
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
54
|
+
{...machine.getNextTriggerProps()}>›</button>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { carousel } from "../carousel.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = carousel({
|
|
5
|
+
allowMouseDrag: true,
|
|
6
|
+
slidesPerPage: 2,
|
|
7
|
+
items: [
|
|
8
|
+
{ value: "mtn", tag: "Elevation", label: "Mountain Adventure", content: "Thin air, steep lines." },
|
|
9
|
+
{ value: "ocean", tag: "Pacific", label: "Ocean Views", content: "Salt, fog, gulls." },
|
|
10
|
+
{ value: "forest", tag: "Redwoods", label: "Forest Escape", content: "Tall trees, soft light." },
|
|
11
|
+
{ value: "urban", tag: "Downtown", label: "Urban Explorer", content: "Vibrant city culture." },
|
|
12
|
+
],
|
|
13
|
+
});
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<div
|
|
17
|
+
class="relative mx-auto w-full max-w-sm rounded-lg border border-solid border-border bg-surface-raised p-4"
|
|
18
|
+
{...machine.getRootProps()}>
|
|
19
|
+
<div
|
|
20
|
+
class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
|
|
21
|
+
{...machine.getItemGroupProps()}
|
|
22
|
+
>
|
|
23
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
24
|
+
<div
|
|
25
|
+
class={["w-[calc((100%_-_0.5rem)/2)] shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
|
|
26
|
+
{...machine.getItemProps(row)}
|
|
27
|
+
>
|
|
28
|
+
<div
|
|
29
|
+
class="flex min-h-[8rem] flex-col justify-between rounded-md border border-solid border-border bg-surface p-4">
|
|
30
|
+
<span class="font-mono text-xs text-primary">{row.tag}</span>
|
|
31
|
+
<div class="mt-3">
|
|
32
|
+
<div class="text-sm font-medium text-text">{row.label}</div>
|
|
33
|
+
<div class="mt-1 text-xs text-text-muted">{row.content}</div>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</template>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<div
|
|
41
|
+
class={["mt-2 h-1 overflow-hidden rounded-full bg-border opacity-0 transition-opacity duration-fast ease-standard pointer-events-none", { "opacity-100": machine.isPlaying }]}
|
|
42
|
+
{...machine.getAutoplayProgressProps()}>
|
|
43
|
+
<div
|
|
44
|
+
class={["h-full w-full rounded-full bg-primary origin-left scale-x-0 transition-transform duration-fast ease-standard", { "scale-x-100": machine.isPlaying }]}
|
|
45
|
+
{...machine.getAutoplayProgressFillProps()}></div>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
|
|
49
|
+
<button
|
|
50
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
51
|
+
{...machine.getPrevTriggerProps()}>‹</button>
|
|
52
|
+
<div class="flex flex-1 items-center justify-center gap-1"
|
|
53
|
+
{...machine.getIndicatorGroupProps()}>
|
|
54
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
55
|
+
<button
|
|
56
|
+
class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
|
|
57
|
+
{...machine.getIndicatorProps(row)}></button>
|
|
58
|
+
</template>
|
|
59
|
+
</div>
|
|
60
|
+
<button
|
|
61
|
+
class={["ghost icon s-sm", { "text-primary": machine.isPlaying, "ring-2 ring-border-strong": machine.focused }]}
|
|
62
|
+
{...machine.getAutoplayTriggerProps()}>▶</button>
|
|
63
|
+
<template for={machine.getProgressRows()} as={row} key={row.value}>
|
|
64
|
+
<span class="text-xs text-text-muted"
|
|
65
|
+
{...machine.getProgressTextProps()}>{row.value}</span>
|
|
66
|
+
</template>
|
|
67
|
+
<button
|
|
68
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
69
|
+
{...machine.getNextTriggerProps()}>›</button>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { carousel } from "../carousel.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = carousel({
|
|
5
|
+
allowMouseDrag: true,
|
|
6
|
+
items: [
|
|
7
|
+
{ value: "h1", tag: "Featured Release", label: "Discover Amazing Places", content: "Explore the world's most beautiful destinations." },
|
|
8
|
+
{ value: "h2", tag: "Expedition", label: "Adventure Awaits", content: "Peaks, trails, and thin air." },
|
|
9
|
+
{ value: "h3", tag: "Deep Time", label: "Journey Beyond", content: "Red rock canyons and quiet horizons." },
|
|
10
|
+
],
|
|
11
|
+
});
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<div
|
|
15
|
+
class="relative mx-auto w-full max-w-sm rounded-lg border border-solid border-border bg-surface-raised p-4"
|
|
16
|
+
{...machine.getRootProps()}>
|
|
17
|
+
<div
|
|
18
|
+
class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
|
|
19
|
+
{...machine.getItemGroupProps()}
|
|
20
|
+
>
|
|
21
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
22
|
+
<div
|
|
23
|
+
class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
|
|
24
|
+
{...machine.getItemProps(row)}
|
|
25
|
+
>
|
|
26
|
+
<div
|
|
27
|
+
class="relative flex min-h-[10rem] flex-col justify-between rounded-md border border-solid border-border bg-surface p-6">
|
|
28
|
+
<span class="w-fit rounded-full bg-surface-sunken px-2 py-1 font-mono text-xs text-primary">{row.tag}</span>
|
|
29
|
+
<div class="mt-4">
|
|
30
|
+
<div class="text-lg font-semibold text-text">{row.label}</div>
|
|
31
|
+
<div class="mt-1 text-sm text-text-muted">{row.content}</div>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</template>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
|
|
39
|
+
<button
|
|
40
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
41
|
+
{...machine.getPrevTriggerProps()}>‹</button>
|
|
42
|
+
<div class="flex flex-1 items-center justify-center gap-1"
|
|
43
|
+
{...machine.getIndicatorGroupProps()}>
|
|
44
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
45
|
+
<button
|
|
46
|
+
class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
|
|
47
|
+
{...machine.getIndicatorProps(row)}></button>
|
|
48
|
+
</template>
|
|
49
|
+
</div>
|
|
50
|
+
<button
|
|
51
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
52
|
+
{...machine.getNextTriggerProps()}>›</button>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { carousel } from "../carousel.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = carousel({
|
|
5
|
+
allowMouseDrag: true,
|
|
6
|
+
items: [
|
|
7
|
+
{ "value": "apple", "label": "Apple", "content": "Fresh picks." },
|
|
8
|
+
{ "value": "figma", "label": "Figma", "content": "Design together." },
|
|
9
|
+
{ "value": "linear", "label": "Linear", "content": "Ship faster." },
|
|
10
|
+
{ "value": "slack", "label": "Slack", "content": "Talk it over." },
|
|
11
|
+
],
|
|
12
|
+
loop: true,
|
|
13
|
+
});
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<div
|
|
17
|
+
class="relative mx-auto w-full max-w-[32rem] rounded-lg border border-solid border-border bg-surface-raised p-4"
|
|
18
|
+
{...machine.getRootProps()}>
|
|
19
|
+
<div
|
|
20
|
+
class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
|
|
21
|
+
{...machine.getItemGroupProps()}
|
|
22
|
+
>
|
|
23
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
24
|
+
<div
|
|
25
|
+
class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
|
|
26
|
+
{...machine.getItemProps(row)}
|
|
27
|
+
>
|
|
28
|
+
<div
|
|
29
|
+
class="flex min-h-[8rem] flex-col items-center justify-center rounded-md border border-solid border-border bg-surface p-4 text-center">
|
|
30
|
+
<div class="text-sm font-medium text-text">{row.label}</div>
|
|
31
|
+
<div class="text-xs text-text-muted mt-1">{row.content}</div>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</template>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div
|
|
38
|
+
class={["mt-2 h-1 overflow-hidden rounded-full bg-border opacity-0 transition-opacity duration-fast ease-standard pointer-events-none", { "opacity-100": machine.isPlaying }]}
|
|
39
|
+
{...machine.getAutoplayProgressProps()}>
|
|
40
|
+
<div
|
|
41
|
+
class={["h-full w-full rounded-full bg-primary origin-left scale-x-0 transition-transform duration-fast ease-standard", { "scale-x-100": machine.isPlaying }]}
|
|
42
|
+
{...machine.getAutoplayProgressFillProps()}></div>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
|
|
46
|
+
<button
|
|
47
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
48
|
+
{...machine.getPrevTriggerProps()}>‹</button>
|
|
49
|
+
<div class="flex flex-1 items-center justify-center gap-1"
|
|
50
|
+
{...machine.getIndicatorGroupProps()}>
|
|
51
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
52
|
+
<button
|
|
53
|
+
class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
|
|
54
|
+
{...machine.getIndicatorProps(row)}></button>
|
|
55
|
+
</template>
|
|
56
|
+
</div>
|
|
57
|
+
<button
|
|
58
|
+
class={["ghost icon s-sm", { "text-primary": machine.isPlaying, "ring-2 ring-border-strong": machine.focused }]}
|
|
59
|
+
{...machine.getAutoplayTriggerProps()}>▶</button>
|
|
60
|
+
<template for={machine.getProgressRows()} as={row} key={row.value}>
|
|
61
|
+
<span class="text-xs text-text-muted"
|
|
62
|
+
{...machine.getProgressTextProps()}>{row.value}</span>
|
|
63
|
+
</template>
|
|
64
|
+
<button
|
|
65
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
66
|
+
{...machine.getNextTriggerProps()}>›</button>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { carousel } from "../carousel.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = carousel({
|
|
5
|
+
allowMouseDrag: true,
|
|
6
|
+
items: [{ "value": "one", "label": "One", "content": "First." }, {
|
|
7
|
+
"value": "two",
|
|
8
|
+
"label": "Two",
|
|
9
|
+
"content": "Second.",
|
|
10
|
+
}],
|
|
11
|
+
});
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<div
|
|
15
|
+
class="relative mx-auto w-full max-w-[32rem] rounded-lg border border-solid border-border bg-surface-raised p-4"
|
|
16
|
+
{...machine.getRootProps()}>
|
|
17
|
+
<div
|
|
18
|
+
class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
|
|
19
|
+
{...machine.getItemGroupProps()}
|
|
20
|
+
>
|
|
21
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
22
|
+
<div
|
|
23
|
+
class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
|
|
24
|
+
{...machine.getItemProps(row)}
|
|
25
|
+
>
|
|
26
|
+
<div
|
|
27
|
+
class="flex min-h-[6rem] flex-col items-center justify-center rounded-md border border-solid border-border bg-surface p-4 text-center">
|
|
28
|
+
<div class="text-sm font-medium text-text">{row.label}</div>
|
|
29
|
+
<div class="text-xs text-text-muted mt-1">{row.content}</div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</template>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<div class="flex items-center justify-between gap-2 pt-3" {...machine.getControlProps()}>
|
|
36
|
+
<button
|
|
37
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
38
|
+
{...machine.getPrevTriggerProps()}>‹</button>
|
|
39
|
+
<template for={machine.getProgressRows()} as={row} key={row.value}>
|
|
40
|
+
<span class="text-xs text-text-muted"
|
|
41
|
+
{...machine.getProgressTextProps()}>{row.value}</span>
|
|
42
|
+
</template>
|
|
43
|
+
<button
|
|
44
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
45
|
+
{...machine.getNextTriggerProps()}>›</button>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { carousel } from "../carousel.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = carousel({
|
|
5
|
+
allowMouseDrag: true,
|
|
6
|
+
items: [
|
|
7
|
+
{ value: "sarah", initials: "SJ", role: "Marketing Director", label: "Sarah Johnson", content: "Ships on time with zero visual drift across themes." },
|
|
8
|
+
{ value: "michael", initials: "MC", role: "Engineering Lead", label: "Michael Chen", content: "Deterministic state machines and zero flaky selectors." },
|
|
9
|
+
{ value: "emily", initials: "ER", role: "Design Systems", label: "Emily Rodriguez", content: "Every token lands cleanly without one-off overrides." },
|
|
10
|
+
],
|
|
11
|
+
});
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<div
|
|
15
|
+
class="relative mx-auto w-full max-w-[32rem] rounded-lg border border-solid border-border bg-surface-raised p-4"
|
|
16
|
+
{...machine.getRootProps()}>
|
|
17
|
+
<div
|
|
18
|
+
class={["flex gap-2 py-1 snap-x snap-mandatory overflow-x-auto scroll-smooth cursor-grab select-none", { "cursor-grabbing snap-none scroll-auto": machine.isDragging }]}
|
|
19
|
+
{...machine.getItemGroupProps()}
|
|
20
|
+
>
|
|
21
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
22
|
+
<div
|
|
23
|
+
class={["w-full shrink-0 min-w-0 snap-start transition-opacity duration-base ease-standard opacity-50", { "opacity-100": machine.isInView(row.index) }]}
|
|
24
|
+
{...machine.getItemProps(row)}
|
|
25
|
+
>
|
|
26
|
+
<div
|
|
27
|
+
class="flex min-h-[8rem] flex-col items-center justify-center rounded-md border border-solid border-border bg-surface p-6 text-center">
|
|
28
|
+
<span class="i-lucide-quote icon-lg text-primary"
|
|
29
|
+
aria-hidden="true"></span>
|
|
30
|
+
<p class="text-sm italic text-text">"{row.content}"</p>
|
|
31
|
+
<div class="mt-3 flex items-center justify-center gap-1"
|
|
32
|
+
aria-hidden="true">
|
|
33
|
+
<span class="i-lucide-star text-sm text-semantic-warning"></span><span class="i-lucide-star text-sm text-semantic-warning"></span><span class="i-lucide-star text-sm text-semantic-warning"></span><span class="i-lucide-star text-sm text-semantic-warning"></span><span class="i-lucide-star text-sm text-semantic-warning"></span>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="mt-3 flex items-center gap-2">
|
|
36
|
+
<span class="grid h-10 w-10 shrink-0 place-items-center rounded-full bg-primary text-xs font-semibold text-on-primary">{row.initials}</span>
|
|
37
|
+
<div class="text-left">
|
|
38
|
+
<div class="text-sm font-medium text-text">{row.label}</div>
|
|
39
|
+
<div class="text-xs text-text-muted">{row.role}</div>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</template>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div
|
|
48
|
+
class={["mt-2 h-1 overflow-hidden rounded-full bg-border opacity-0 transition-opacity duration-fast ease-standard pointer-events-none", { "opacity-100": machine.isPlaying }]}
|
|
49
|
+
{...machine.getAutoplayProgressProps()}>
|
|
50
|
+
<div
|
|
51
|
+
class={["h-full w-full rounded-full bg-primary origin-left scale-x-0 transition-transform duration-fast ease-standard", { "scale-x-100": machine.isPlaying }]}
|
|
52
|
+
{...machine.getAutoplayProgressFillProps()}></div>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<div class="flex items-center gap-2 pt-4" {...machine.getControlProps()}>
|
|
56
|
+
<button
|
|
57
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
58
|
+
{...machine.getPrevTriggerProps()}>‹</button>
|
|
59
|
+
<div class="flex flex-1 items-center justify-center gap-1"
|
|
60
|
+
{...machine.getIndicatorGroupProps()}>
|
|
61
|
+
<template for={machine.getItemIndexes()} as={row} key={row.value}>
|
|
62
|
+
<button
|
|
63
|
+
class={["bare h-2 w-2 rounded-full p-0 border-border bg-surface transition-all duration-base ease-standard", { "w-4 border-transparent": machine.isInView(row.index), "ring-2 ring-border-strong": machine.focused }]}
|
|
64
|
+
{...machine.getIndicatorProps(row)}></button>
|
|
65
|
+
</template>
|
|
66
|
+
</div>
|
|
67
|
+
<button
|
|
68
|
+
class={["ghost icon s-sm", { "text-primary": machine.isPlaying, "ring-2 ring-border-strong": machine.focused }]}
|
|
69
|
+
{...machine.getAutoplayTriggerProps()}>▶</button>
|
|
70
|
+
<template for={machine.getProgressRows()} as={row} key={row.value}>
|
|
71
|
+
<span class="text-xs text-text-muted"
|
|
72
|
+
{...machine.getProgressTextProps()}>{row.value}</span>
|
|
73
|
+
</template>
|
|
74
|
+
<button
|
|
75
|
+
class={["ghost icon s-sm", { "ring-2 ring-border-strong": machine.focused }]}
|
|
76
|
+
{...machine.getNextTriggerProps()}>›</button>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|