@spinjs/components 0.0.0-stage → 0.1.0-preview.1
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,63 @@
|
|
|
1
|
+
import { defaultTwin } from "@spinjs/runtime";
|
|
2
|
+
// src/pin-input/pin-input.state.ts
|
|
3
|
+
const DEFAULT_COUNT = 4;
|
|
4
|
+
const parseChars = (raw) => {
|
|
5
|
+
return (Array.isArray(raw) ? raw.filter((part) => typeof part === "string") : typeof raw === "string" ? raw.split(",").map((part) => part.trim()) : []).filter((part) => part.length === 1);
|
|
6
|
+
};
|
|
7
|
+
function initial(args, authored) {
|
|
8
|
+
const written = (field) => authored(field) || authored(defaultTwin(field)) || args[defaultTwin(field)] !== void 0;
|
|
9
|
+
const count = typeof args.count === "number" && Number.isFinite(args.count) ? Math.max(0, Math.trunc(args.count)) : DEFAULT_COUNT;
|
|
10
|
+
const chars = written("value") ? parseChars(args.value) : [];
|
|
11
|
+
const pinType = args.type;
|
|
12
|
+
return {
|
|
13
|
+
value: fill(chars, count),
|
|
14
|
+
focusedIndex: args.autoFocus === true ? 0 : -1,
|
|
15
|
+
count,
|
|
16
|
+
dir: args.dir === "rtl" ? "rtl" : "ltr",
|
|
17
|
+
disabled: args.disabled === true,
|
|
18
|
+
readOnly: args.readOnly === true,
|
|
19
|
+
invalid: authored("invalid") ? args.invalid === true : void 0,
|
|
20
|
+
required: args.required === true,
|
|
21
|
+
name: typeof args.name === "string" && args.name.length > 0 ? args.name : void 0,
|
|
22
|
+
form: typeof args.form === "string" && args.form.length > 0 ? args.form : void 0,
|
|
23
|
+
type: pinType === "alphabetic" || pinType === "alphanumeric" ? pinType : "numeric",
|
|
24
|
+
mask: args.mask === true,
|
|
25
|
+
otp: args.otp === true,
|
|
26
|
+
placeholder: typeof args.placeholder === "string" ? args.placeholder : "○",
|
|
27
|
+
pattern: typeof args.pattern === "string" ? args.pattern : "",
|
|
28
|
+
translations: args.translations,
|
|
29
|
+
sanitizeValue: args.sanitizeValue,
|
|
30
|
+
blurOnComplete: args.blurOnComplete === true,
|
|
31
|
+
autoSubmit: args.autoSubmit === true,
|
|
32
|
+
autoFocus: args.autoFocus === true
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The value padded (or truncated) to the cell count. A cell the value does
|
|
37
|
+
* not reach reads as the empty string.
|
|
38
|
+
*/
|
|
39
|
+
function fill(value, count) {
|
|
40
|
+
const length = count || value.length;
|
|
41
|
+
return Array.from({ length }).fill("").map((_char, index) => value[index] || "");
|
|
42
|
+
}
|
|
43
|
+
function pinView(value, count) {
|
|
44
|
+
const chars = fill(value, count);
|
|
45
|
+
const filled = chars.filter((char) => char.trim() !== "").length;
|
|
46
|
+
return {
|
|
47
|
+
chars,
|
|
48
|
+
length: chars.length,
|
|
49
|
+
filled,
|
|
50
|
+
complete: chars.length === filled,
|
|
51
|
+
asString: chars.join("")
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function getNextValue(current, next) {
|
|
55
|
+
let nextValue = next;
|
|
56
|
+
if (current[0] === next[0]) nextValue = next[1] ?? "";
|
|
57
|
+
else if (current[0] === next[1]) nextValue = next[0] ?? "";
|
|
58
|
+
const chars = nextValue.split("");
|
|
59
|
+
return chars[chars.length - 1] ?? "";
|
|
60
|
+
}
|
|
61
|
+
export { fill, getNextValue, initial, pinView };
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=pin-input.state.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PinInputContext } from "./pin-input.state.js";
|
|
2
|
+
export declare const clearFocusedValue: (ctx: PinInputContext) => Partial<PinInputContext>;
|
|
3
|
+
export declare const setFocusedIndex: (ctx: PinInputContext, event: {
|
|
4
|
+
index: number;
|
|
5
|
+
}) => Partial<PinInputContext>;
|
|
6
|
+
export declare const setFocusIndexToFirst: () => Partial<PinInputContext>;
|
|
7
|
+
export declare const advanceFocusedIndex: (ctx: PinInputContext) => Partial<PinInputContext>;
|
|
8
|
+
export declare const setPrevFocusedIndex: (ctx: PinInputContext) => Partial<PinInputContext>;
|
|
9
|
+
export declare const hasValue: (ctx: PinInputContext) => boolean;
|
|
10
|
+
//# sourceMappingURL=pin-input.transitions.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { pinView } from "./pin-input.state.js";
|
|
2
|
+
// src/pin-input/pin-input.transitions.ts
|
|
3
|
+
const viewOf = (ctx) => pinView(ctx.value, ctx.count);
|
|
4
|
+
const clearFocusedValue = (ctx) => {
|
|
5
|
+
if (ctx.focusedIndex === -1) return {};
|
|
6
|
+
const value = [...viewOf(ctx).chars];
|
|
7
|
+
value.splice(ctx.focusedIndex, 1);
|
|
8
|
+
value.push("");
|
|
9
|
+
return { value };
|
|
10
|
+
};
|
|
11
|
+
const setFocusedIndex = (ctx, event) => {
|
|
12
|
+
const view = viewOf(ctx);
|
|
13
|
+
const maxIndex = Math.min(view.filled, view.length - 1);
|
|
14
|
+
return { focusedIndex: Math.min(event.index, maxIndex) };
|
|
15
|
+
};
|
|
16
|
+
const setFocusIndexToFirst = () => ({ focusedIndex: 0 });
|
|
17
|
+
const advanceFocusedIndex = (ctx) => ({ focusedIndex: Math.min(ctx.focusedIndex + 1, viewOf(ctx).length - 1) });
|
|
18
|
+
const setPrevFocusedIndex = (ctx) => ({ focusedIndex: Math.max(ctx.focusedIndex - 1, 0) });
|
|
19
|
+
const hasValue = (ctx) => (viewOf(ctx).chars[ctx.focusedIndex] ?? "") !== "";
|
|
20
|
+
export { advanceFocusedIndex, clearFocusedValue, hasValue, setFocusIndexToFirst, setFocusedIndex, setPrevFocusedIndex };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=pin-input.transitions.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { popover } from "../popover.controller-def.js";
|
|
3
|
+
|
|
4
|
+
const ctl = popover();
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<button {...ctl.getTriggerProps()}
|
|
8
|
+
class="secondary s-sm transition-colors hover:bg-surface">Open popover</button>
|
|
9
|
+
|
|
10
|
+
<popover {...ctl.getContentProps()}
|
|
11
|
+
class="m-0 rounded-lg border border-solid border-border bg-surface-raised p-4 shadow-lg position-area-bottom-span-right">
|
|
12
|
+
<p class="text-sm font-medium text-text">Share this page</p>
|
|
13
|
+
<p
|
|
14
|
+
class="text-sm text-text-muted">Copy the link below to send it to a friend.</p>
|
|
15
|
+
</popover>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { popover } from "../popover.controller-def.js";
|
|
3
|
+
|
|
4
|
+
const ctl = popover();
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<button {...ctl.getTriggerProps()}
|
|
8
|
+
class="inline-flex items-center gap-2 secondary s-sm transition-colors hover:bg-surface">
|
|
9
|
+
<span class="i-lucide-message-square text-sm" aria-hidden="true"></span>
|
|
10
|
+
Feedback
|
|
11
|
+
</button>
|
|
12
|
+
|
|
13
|
+
<popover {...ctl.getContentProps()}
|
|
14
|
+
class="m-0 rounded-lg border border-solid border-border bg-surface-raised p-4 shadow-lg position-area-bottom-span-right max-w-[20rem]">
|
|
15
|
+
<p class="text-sm font-medium text-text">Send us feedback</p>
|
|
16
|
+
<p class="text-sm text-text-muted">Tell us what you think.</p>
|
|
17
|
+
</popover>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { popover } from "../popover.controller-def.js";
|
|
3
|
+
|
|
4
|
+
const ctl = popover();
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<button {...ctl.getTriggerProps()}
|
|
8
|
+
class="inline-flex items-center gap-2 secondary s-sm transition-colors hover:bg-surface">
|
|
9
|
+
<span class="i-lucide-bell text-sm" aria-hidden="true"></span>
|
|
10
|
+
Notifications
|
|
11
|
+
</button>
|
|
12
|
+
|
|
13
|
+
<popover {...ctl.getContentProps()}
|
|
14
|
+
class="m-0 rounded-lg border border-solid border-border bg-surface-raised p-4 shadow-lg position-area-bottom-span-right max-w-[20rem]">
|
|
15
|
+
<p class="text-sm font-medium text-text">Notifications</p>
|
|
16
|
+
<ul class="flow-list stack-xs text-sm text-text-muted">
|
|
17
|
+
<li>Maya liked your post</li>
|
|
18
|
+
<li>David started following you</li>
|
|
19
|
+
<li>Lisa invited you to a workspace</li>
|
|
20
|
+
</ul>
|
|
21
|
+
</popover>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { popover } from "../popover.controller-def.js";
|
|
3
|
+
|
|
4
|
+
const ctl = popover();
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<button {...ctl.getTriggerProps()}
|
|
8
|
+
class="inline-flex items-center justify-center ghost icon s-sm transition-colors hover:bg-surface">
|
|
9
|
+
<span class="i-lucide-settings text-sm" aria-hidden="true"></span>
|
|
10
|
+
<span class="sr-only">Settings</span>
|
|
11
|
+
</button>
|
|
12
|
+
|
|
13
|
+
<popover {...ctl.getContentProps()}
|
|
14
|
+
class="m-0 rounded-lg border border-solid border-border bg-surface-raised shadow-lg position-area-bottom-span-right w-64 max-w-[16rem]">
|
|
15
|
+
<div class="border-b border-solid border-border p-3">
|
|
16
|
+
<p class="font-medium text-sm text-text">Settings</p>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="stack-xs p-2">
|
|
19
|
+
<label
|
|
20
|
+
class="flex cursor-pointer items-center justify-between rounded-md px-3 py-2 hover:bg-surface">
|
|
21
|
+
<span
|
|
22
|
+
class="flex items-center gap-2 text-sm text-text"><span class="i-lucide-moon text-sm text-text-muted" aria-hidden="true"></span>Dark Mode</span>
|
|
23
|
+
<input type="checkbox" role="switch" data-setting="dark" />
|
|
24
|
+
</label>
|
|
25
|
+
<label
|
|
26
|
+
class="flex cursor-pointer items-center justify-between rounded-md px-3 py-2 hover:bg-surface">
|
|
27
|
+
<span
|
|
28
|
+
class="flex items-center gap-2 text-sm text-text"><span class="i-lucide-bell text-sm text-text-muted" aria-hidden="true"></span>Notifications</span>
|
|
29
|
+
<input type="checkbox" role="switch" checked
|
|
30
|
+
data-setting="notifications" />
|
|
31
|
+
</label>
|
|
32
|
+
<label
|
|
33
|
+
class="flex cursor-pointer items-center justify-between rounded-md px-3 py-2 hover:bg-surface">
|
|
34
|
+
<span
|
|
35
|
+
class="flex items-center gap-2 text-sm text-text"><span class="i-lucide-shield text-sm text-text-muted" aria-hidden="true"></span>Two-Factor Auth</span>
|
|
36
|
+
<input type="checkbox" role="switch" checked data-setting="twofactor" />
|
|
37
|
+
</label>
|
|
38
|
+
</div>
|
|
39
|
+
</popover>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { popover } from "../popover.controller-def.js";
|
|
3
|
+
|
|
4
|
+
const ctl = popover();
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<button {...ctl.getTriggerProps()}
|
|
8
|
+
class="inline-flex items-center gap-2 secondary s-sm transition-colors hover:bg-surface">
|
|
9
|
+
<span class="i-lucide-share text-sm" aria-hidden="true"></span>
|
|
10
|
+
Share
|
|
11
|
+
</button>
|
|
12
|
+
|
|
13
|
+
<popover {...ctl.getContentProps()}
|
|
14
|
+
class="m-0 rounded-lg border border-solid border-border bg-surface-raised p-4 shadow-lg position-area-bottom-span-right max-w-[20rem]">
|
|
15
|
+
<p class="text-sm font-medium text-text">Share this page</p>
|
|
16
|
+
<p
|
|
17
|
+
class="text-sm text-text-muted">Copy the link below to send it to a friend.</p>
|
|
18
|
+
</popover>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { popover } from "../popover.controller-def.js";
|
|
3
|
+
|
|
4
|
+
const ctl = popover();
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<button {...ctl.getTriggerProps()}
|
|
8
|
+
aria-label="Sarah Chen's profile"
|
|
9
|
+
class="bare relative inline-flex items-center justify-center rounded-full transition-colors hover:bg-surface">
|
|
10
|
+
<span
|
|
11
|
+
class="grid h-8 w-8 place-items-center rounded-full bg-primary text-xs font-semibold text-on-primary"
|
|
12
|
+
aria-hidden="true">SC</span>
|
|
13
|
+
<span
|
|
14
|
+
class="absolute bottom-0 right-0 h-3 w-3 rounded-full border-2 border-solid border-surface-raised bg-semantic-success"
|
|
15
|
+
aria-hidden="true"></span>
|
|
16
|
+
</button>
|
|
17
|
+
|
|
18
|
+
<popover {...ctl.getContentProps()}
|
|
19
|
+
class="m-0 rounded-lg border border-solid border-border bg-surface-raised shadow-lg position-area-bottom-span-right w-full max-w-[18rem]">
|
|
20
|
+
<div class="border-b border-solid border-border p-3">
|
|
21
|
+
<div class="flex items-center gap-3">
|
|
22
|
+
<span
|
|
23
|
+
class="relative grid h-10 w-10 shrink-0 place-items-center rounded-full bg-primary text-sm font-semibold text-on-primary"
|
|
24
|
+
aria-hidden="true">SC<span class="absolute -bottom-1 -right-1 h-3 w-3 rounded-full border-2 border-solid border-surface-raised bg-semantic-success"></span></span>
|
|
25
|
+
<div class="min-w-0 flex-1">
|
|
26
|
+
<strong class="text-sm text-text">Sarah Chen</strong>
|
|
27
|
+
<p class="text-xs text-text-muted">Product Designer</p>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="stack-sm p-3 text-sm text-text-muted">
|
|
32
|
+
<p
|
|
33
|
+
class="flex items-center gap-2"><span class="i-lucide-mail text-sm" aria-hidden="true"></span>sarah.chen@example.com</p>
|
|
34
|
+
<p
|
|
35
|
+
class="flex items-center gap-2"><span class="i-lucide-map-pin text-sm" aria-hidden="true"></span>San Francisco, CA</p>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="flex gap-2 border-t border-solid border-border p-3">
|
|
38
|
+
<button
|
|
39
|
+
class="flex-1 s-sm">Message</button>
|
|
40
|
+
<button
|
|
41
|
+
class="flex-1 secondary s-sm">View Profile</button>
|
|
42
|
+
</div>
|
|
43
|
+
</popover>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ControllerDef } from "@spinjs/runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Popover on the platform: the browser owns open/closed, the top layer,
|
|
4
|
+
* light-dismiss, and Escape. There is no machine here — the `attach`
|
|
5
|
+
* wires the native popover behavior to the declared commands and events.
|
|
6
|
+
*
|
|
7
|
+
* Positioning is platform-owned too: the panel's `position-area` places it
|
|
8
|
+
* against its invoker (the implicit anchor needs no names), and the
|
|
9
|
+
* recipe's utilities carry the surface. The popover never reports where it
|
|
10
|
+
* landed — a recipe that needs the resolved placement wants the measured
|
|
11
|
+
* controller, not this one.
|
|
12
|
+
*
|
|
13
|
+
* The api is what markup spreads and what the app-controller hook reaches:
|
|
14
|
+
* prop bags for the trigger and the panel, imperative commands that call
|
|
15
|
+
* the native methods, and `open` as a reactive read for hosts that render
|
|
16
|
+
* from state.
|
|
17
|
+
*/
|
|
18
|
+
export interface PopoverOpenChange {
|
|
19
|
+
readonly open: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare const popoverManifest: {
|
|
22
|
+
readonly parts: readonly [];
|
|
23
|
+
readonly slots: readonly [];
|
|
24
|
+
readonly readers: readonly ["open"];
|
|
25
|
+
readonly methods: readonly ["show", "hide", "toggle", "getTriggerProps", "getContentProps"];
|
|
26
|
+
};
|
|
27
|
+
export interface PopoverApi {
|
|
28
|
+
readonly open: boolean;
|
|
29
|
+
show(): void;
|
|
30
|
+
hide(): void;
|
|
31
|
+
toggle(): void;
|
|
32
|
+
getTriggerProps(): Record<string, unknown>;
|
|
33
|
+
getContentProps(): Record<string, unknown>;
|
|
34
|
+
}
|
|
35
|
+
export declare function attachPopover(el: Element): PopoverApi;
|
|
36
|
+
export declare const popover: ControllerDef & {
|
|
37
|
+
attach(el: Element): PopoverApi;
|
|
38
|
+
} & (() => PopoverApi);
|
|
39
|
+
//# sourceMappingURL=popover.controller-def.d.ts.map
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { defineController } from "@spinjs/runtime";
|
|
2
|
+
// src/popover/popover.controller-def.ts
|
|
3
|
+
const popoverManifest = {
|
|
4
|
+
parts: [],
|
|
5
|
+
slots: [],
|
|
6
|
+
readers: ["open"],
|
|
7
|
+
methods: [
|
|
8
|
+
"show",
|
|
9
|
+
"hide",
|
|
10
|
+
"toggle",
|
|
11
|
+
"getTriggerProps",
|
|
12
|
+
"getContentProps"
|
|
13
|
+
]
|
|
14
|
+
};
|
|
15
|
+
function panelOf(el) {
|
|
16
|
+
return el.querySelector("[popover]");
|
|
17
|
+
}
|
|
18
|
+
let instanceCounter = 0;
|
|
19
|
+
function attachPopover(el) {
|
|
20
|
+
const readOpen = () => panelOf(el)?.matches(":popover-open") ?? false;
|
|
21
|
+
const emit = (open) => {
|
|
22
|
+
el.dispatchEvent(new CustomEvent("open-change", {
|
|
23
|
+
detail: { open },
|
|
24
|
+
bubbles: true
|
|
25
|
+
}));
|
|
26
|
+
};
|
|
27
|
+
el.addEventListener("toggle", (event) => {
|
|
28
|
+
emit(event.newState === "open");
|
|
29
|
+
}, true);
|
|
30
|
+
const instance = el.id !== "" ? el.id : `popover-${++instanceCounter}`;
|
|
31
|
+
const triggerId = `${instance}:trigger`;
|
|
32
|
+
const panelId = `${instance}:panel`;
|
|
33
|
+
return {
|
|
34
|
+
get open() {
|
|
35
|
+
return readOpen();
|
|
36
|
+
},
|
|
37
|
+
show: () => panelOf(el)?.showPopover(),
|
|
38
|
+
hide: () => panelOf(el)?.hidePopover(),
|
|
39
|
+
toggle: () => panelOf(el)?.togglePopover(),
|
|
40
|
+
getTriggerProps: () => ({
|
|
41
|
+
id: triggerId,
|
|
42
|
+
"data-scope": "popover",
|
|
43
|
+
"data-part": "trigger",
|
|
44
|
+
popovertarget: panelId,
|
|
45
|
+
"aria-expanded": readOpen(),
|
|
46
|
+
"aria-details": panelId,
|
|
47
|
+
"aria-haspopup": "dialog",
|
|
48
|
+
"data-state": readOpen() ? "open" : "closed"
|
|
49
|
+
}),
|
|
50
|
+
getContentProps: () => ({
|
|
51
|
+
id: panelId,
|
|
52
|
+
"data-scope": "popover",
|
|
53
|
+
"data-part": "content",
|
|
54
|
+
popover: "",
|
|
55
|
+
role: "dialog",
|
|
56
|
+
"data-state": readOpen() ? "open" : "closed"
|
|
57
|
+
})
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const popover = defineController({
|
|
61
|
+
attach: attachPopover,
|
|
62
|
+
commands: [
|
|
63
|
+
"show",
|
|
64
|
+
"hide",
|
|
65
|
+
"toggle"
|
|
66
|
+
],
|
|
67
|
+
events: { "open-change": {
|
|
68
|
+
on: "onOpenChange",
|
|
69
|
+
detail: (change) => ({ open: change.open })
|
|
70
|
+
} }
|
|
71
|
+
});
|
|
72
|
+
export { attachPopover, popover, popoverManifest };
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=popover.controller-def.js.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { ratingGroup } from "../rating-group.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = ratingGroup({ value: "3.5", allowHalf: true });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="mx-auto w-full max-w-[20rem] text-center" {...machine.getRootProps()}>
|
|
8
|
+
<div class="mb-1 text-lg font-semibold text-text" {...machine.getLabelProps()}>Product Rating</div>
|
|
9
|
+
<div class="mb-4 text-sm text-text-muted">How would you rate this product?</div>
|
|
10
|
+
<div
|
|
11
|
+
class="inline-flex items-center gap-1"
|
|
12
|
+
{...machine.getControlProps()}
|
|
13
|
+
>
|
|
14
|
+
<template for={machine.getItems()} as={row} key={row}>
|
|
15
|
+
<span
|
|
16
|
+
class={["bare grid h-8 w-8 cursor-pointer place-items-center rounded-md text-2xl text-border-strong transition-all", { "scale-110 text-semantic-warning": machine.getItemState(row).highlighted, "cursor-not-allowed opacity-50": machine.disabled, "cursor-default": machine.readOnly }]}
|
|
17
|
+
{...machine.getItemProps(row)}
|
|
18
|
+
>
|
|
19
|
+
<span class="relative"
|
|
20
|
+
aria-hidden="true">★︎<span class="absolute inset-y-0 right-0 w-1/2 overflow-hidden" show={machine.getItemState(row).half}><span class="absolute top-0 right-0 text-border-strong">★︎</span></span></span>
|
|
21
|
+
</span>
|
|
22
|
+
</template>
|
|
23
|
+
</div>
|
|
24
|
+
<input {...machine.getHiddenInputProps()} />
|
|
25
|
+
<div class="pt-2" show={machine.value > 0}>
|
|
26
|
+
<div
|
|
27
|
+
class="text-sm font-medium text-text">You rated this {machine.value} star<span show={machine.value !== 1}>s</span></div>
|
|
28
|
+
<div class="text-xs text-text-muted"
|
|
29
|
+
show={machine.value - machine.value % 1 === 1}>Poor</div>
|
|
30
|
+
<div class="text-xs text-text-muted"
|
|
31
|
+
show={machine.value - machine.value % 1 === 2}>Fair</div>
|
|
32
|
+
<div class="text-xs text-text-muted"
|
|
33
|
+
show={machine.value - machine.value % 1 === 3}>Good</div>
|
|
34
|
+
<div class="text-xs text-text-muted"
|
|
35
|
+
show={machine.value - machine.value % 1 === 4}>Very Good</div>
|
|
36
|
+
<div class="text-xs text-text-muted"
|
|
37
|
+
show={machine.value - machine.value % 1 === 5}>Excellent</div>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { ratingGroup } from "../rating-group.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = ratingGroup({ value: "0", allowHalf: true });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div
|
|
8
|
+
class="mx-auto w-full max-w-sm rounded-lg border border-solid border-border bg-surface text-text"
|
|
9
|
+
{...machine.getRootProps()}>
|
|
10
|
+
<div class="flex items-center gap-3 border-b border-solid border-border p-4">
|
|
11
|
+
<div
|
|
12
|
+
class="grid h-14 w-10 place-items-center rounded-md bg-primary text-on-primary text-lg text-on-primary"
|
|
13
|
+
aria-hidden="true">▶</div>
|
|
14
|
+
<div>
|
|
15
|
+
<strong class="text-sm text-text">The Great Adventure</strong>
|
|
16
|
+
<p class="text-xs text-text-muted">Action • Adventure • 2024</p>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="stack p-4">
|
|
20
|
+
<div>
|
|
21
|
+
<div class="mb-2 block text-xs font-medium"
|
|
22
|
+
{...machine.getLabelProps()}>Rate this movie</div>
|
|
23
|
+
<div class="inline-flex" {...machine.getControlProps()}>
|
|
24
|
+
<template for={machine.getItems()} as={row} key={row}>
|
|
25
|
+
<span
|
|
26
|
+
class={["bare grid h-8 w-8 cursor-pointer place-items-center rounded-md text-2xl text-border-strong transition-all", { "scale-110 text-primary": machine.getItemState(row).highlighted, "cursor-not-allowed opacity-50": machine.disabled }]}
|
|
27
|
+
{...machine.getItemProps(row)}
|
|
28
|
+
>
|
|
29
|
+
<span class="relative"
|
|
30
|
+
aria-hidden="true">★︎<span class="absolute inset-y-0 right-0 w-1/2 overflow-hidden" show={machine.getItemState(row).half}><span class="absolute top-0 right-0 text-border-strong">★︎</span></span></span>
|
|
31
|
+
</span>
|
|
32
|
+
</template>
|
|
33
|
+
</div>
|
|
34
|
+
<input {...machine.getHiddenInputProps()} />
|
|
35
|
+
<p class="text-xs text-text-muted"
|
|
36
|
+
show={machine.value > 0}>You rated this {machine.value} out of 5 stars</p>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="flex gap-2">
|
|
39
|
+
<button type="button" variant="filled"
|
|
40
|
+
id="rt-trailer">Watch Trailer</button>
|
|
41
|
+
<button type="button" id="rt-list">Add to List</button>
|
|
42
|
+
</div>
|
|
43
|
+
<p class="text-xs text-text-muted" id="rt-note"></p>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { ratingGroup } from "../rating-group.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = ratingGroup({ value: "0", allowHalf: true });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div
|
|
8
|
+
class="mx-auto w-full max-w-sm rounded-lg border border-solid border-border bg-surface text-text"
|
|
9
|
+
{...machine.getRootProps()}>
|
|
10
|
+
<div class="border-b border-solid border-border p-4">
|
|
11
|
+
<strong class="text-sm text-text">Product Review</strong>
|
|
12
|
+
<p
|
|
13
|
+
class="text-xs text-text-muted">Share your experience with this product</p>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="stack p-4">
|
|
16
|
+
<div>
|
|
17
|
+
<div class="mb-2 block text-xs font-medium"
|
|
18
|
+
{...machine.getLabelProps()}>Overall Rating</div>
|
|
19
|
+
<div class="inline-flex" {...machine.getControlProps()}>
|
|
20
|
+
<template for={machine.getItems()} as={row} key={row}>
|
|
21
|
+
<span
|
|
22
|
+
class={["bare grid h-8 w-8 cursor-pointer place-items-center rounded-md text-2xl text-border-strong transition-all", { "scale-110 text-semantic-info": machine.getItemState(row).highlighted, "cursor-not-allowed opacity-50": machine.disabled }]}
|
|
23
|
+
{...machine.getItemProps(row)}
|
|
24
|
+
>
|
|
25
|
+
<span class="relative"
|
|
26
|
+
aria-hidden="true">★︎<span class="absolute inset-y-0 right-0 w-1/2 overflow-hidden" show={machine.getItemState(row).half}><span class="absolute top-0 right-0 text-border-strong">★︎</span></span></span>
|
|
27
|
+
</span>
|
|
28
|
+
</template>
|
|
29
|
+
</div>
|
|
30
|
+
<input {...machine.getHiddenInputProps()} />
|
|
31
|
+
<div class="text-xs text-text-muted" show={machine.value > 0}>
|
|
32
|
+
<span show={machine.value - machine.value % 1 === 1}>Poor</span>
|
|
33
|
+
<span show={machine.value - machine.value % 1 === 2}>Fair</span>
|
|
34
|
+
<span show={machine.value - machine.value % 1 === 3}>Good</span>
|
|
35
|
+
<span show={machine.value - machine.value % 1 === 4}>Very Good</span>
|
|
36
|
+
<span show={machine.value - machine.value % 1 === 5}>Excellent</span>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
<div>
|
|
40
|
+
<label class="mb-2 block text-xs font-medium"
|
|
41
|
+
for="rv-text">Your Review</label>
|
|
42
|
+
<textarea
|
|
43
|
+
class="w-full text-xs"
|
|
44
|
+
id="rv-text" rows="3"
|
|
45
|
+
placeholder="Share your thoughts about this product..."></textarea>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="border-t border-solid border-border p-4">
|
|
49
|
+
<button type="button" variant="filled" id="rv-submit">Submit Review</button>
|
|
50
|
+
<p class="text-xs text-text-muted" id="rv-note"></p>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { ratingGroup } from "../rating-group.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = ratingGroup({ value: "4", count: 5 });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div
|
|
8
|
+
class="mx-auto w-full max-w-sm rounded-lg border border-solid border-border bg-surface-raised p-4 text-text shadow-sm"
|
|
9
|
+
{...machine.getRootProps()}>
|
|
10
|
+
<div class="mb-3 flex items-center justify-between">
|
|
11
|
+
<div>
|
|
12
|
+
<strong class="text-sm text-text"
|
|
13
|
+
{...machine.getLabelProps()}>Support Quality</strong>
|
|
14
|
+
<p
|
|
15
|
+
class="text-xs text-text-muted">How was your recent support interaction?</p>
|
|
16
|
+
</div>
|
|
17
|
+
<span
|
|
18
|
+
class="rounded-full bg-surface px-3 py-1 font-mono text-xs font-medium text-text">{machine.value} / {machine.count}</span>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="inline-flex gap-1" {...machine.getControlProps()}>
|
|
21
|
+
<template for={machine.getItems()} as={row} key={row}>
|
|
22
|
+
<span
|
|
23
|
+
class={["bare grid h-8 w-8 cursor-pointer place-items-center rounded-md text-xl text-border-strong transition-all", { "scale-110 text-semantic-info": machine.getItemState(row).highlighted, "cursor-not-allowed opacity-50": machine.disabled }]}
|
|
24
|
+
{...machine.getItemProps(row)}
|
|
25
|
+
>
|
|
26
|
+
<span class="relative" aria-hidden="true">★︎</span>
|
|
27
|
+
</span>
|
|
28
|
+
</template>
|
|
29
|
+
</div>
|
|
30
|
+
<input {...machine.getHiddenInputProps()} />
|
|
31
|
+
</div>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { EventUnion } from "@spinjs/runtime/fsm";
|
|
2
|
+
export interface RatingGroupEvents {
|
|
3
|
+
"SET_VALUE": {
|
|
4
|
+
value: number;
|
|
5
|
+
};
|
|
6
|
+
"CLEAR_VALUE": {};
|
|
7
|
+
"GROUP_POINTER_OVER": {};
|
|
8
|
+
"GROUP_POINTER_LEAVE": {
|
|
9
|
+
radioFocused: boolean;
|
|
10
|
+
};
|
|
11
|
+
"POINTER_OVER": {
|
|
12
|
+
index: number;
|
|
13
|
+
isMidway: boolean;
|
|
14
|
+
};
|
|
15
|
+
"FOCUS": {};
|
|
16
|
+
"BLUR": {};
|
|
17
|
+
"SPACE": {
|
|
18
|
+
value: number;
|
|
19
|
+
};
|
|
20
|
+
"CLICK": {
|
|
21
|
+
value: number;
|
|
22
|
+
};
|
|
23
|
+
"ARROW_LEFT": {};
|
|
24
|
+
"ARROW_RIGHT": {};
|
|
25
|
+
"HOME": {};
|
|
26
|
+
"END": {};
|
|
27
|
+
"SET_COUNT": {
|
|
28
|
+
count: number;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export type RatingGroupEvent = EventUnion<RatingGroupEvents>;
|
|
32
|
+
export type RatingGroupValueChange = {
|
|
33
|
+
readonly value: number;
|
|
34
|
+
};
|
|
35
|
+
export type RatingGroupHoverChange = {
|
|
36
|
+
readonly hoveredValue: number;
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=rating-group.events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RatingGroupArgs, RatingGroupContext, RatingGroupState, isHovering, isInteractive, itemState, ratingValue, step } from "./rating-group.state.js";
|
|
2
|
+
import { RatingGroupEvents, RatingGroupHoverChange, RatingGroupValueChange } from "./rating-group.events.js";
|
|
3
|
+
import { Machine } from "@spinjs/runtime/fsm";
|
|
4
|
+
export declare function ratingGroup(args?: RatingGroupArgs, authored?: (name: string) => boolean): Machine<RatingGroupContext, RatingGroupEvents, RatingGroupState>;
|
|
5
|
+
export { type RatingGroupArgs, type RatingGroupContext, type RatingGroupEvents, type RatingGroupHoverChange, type RatingGroupState, type RatingGroupValueChange, isHovering, isInteractive, itemState, ratingValue, step };
|
|
6
|
+
//# sourceMappingURL=rating-group.machine.d.ts.map
|