@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,54 @@
|
|
|
1
|
+
export type EditableState = "preview" | "edit";
|
|
2
|
+
export interface EditableContext {
|
|
3
|
+
value: string;
|
|
4
|
+
previousValue: string;
|
|
5
|
+
maxLength: number | null;
|
|
6
|
+
editControlled: boolean;
|
|
7
|
+
lastEvent: string;
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
readOnly: boolean;
|
|
10
|
+
invalid: boolean | undefined;
|
|
11
|
+
required: boolean;
|
|
12
|
+
placeholder: string | {
|
|
13
|
+
readonly edit?: string;
|
|
14
|
+
readonly preview?: string;
|
|
15
|
+
};
|
|
16
|
+
autoResize: boolean;
|
|
17
|
+
dir: "ltr" | "rtl";
|
|
18
|
+
name: string | undefined;
|
|
19
|
+
form: string | undefined;
|
|
20
|
+
submitMode: string;
|
|
21
|
+
activationMode: string;
|
|
22
|
+
selectOnFocus: boolean;
|
|
23
|
+
onInteractOutside?: unknown;
|
|
24
|
+
onPointerDownOutside?: unknown;
|
|
25
|
+
onFocusOutside?: unknown;
|
|
26
|
+
}
|
|
27
|
+
export interface EditableArgs {
|
|
28
|
+
value?: string;
|
|
29
|
+
maxLength?: number;
|
|
30
|
+
defaultMaxLength?: number;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
readOnly?: boolean;
|
|
33
|
+
invalid?: boolean;
|
|
34
|
+
required?: boolean;
|
|
35
|
+
placeholder?: string | {
|
|
36
|
+
readonly edit?: string;
|
|
37
|
+
readonly preview?: string;
|
|
38
|
+
};
|
|
39
|
+
autoResize?: boolean;
|
|
40
|
+
dir?: "ltr" | "rtl";
|
|
41
|
+
name?: string;
|
|
42
|
+
form?: string;
|
|
43
|
+
submitMode?: string;
|
|
44
|
+
activationMode?: string;
|
|
45
|
+
selectOnFocus?: boolean;
|
|
46
|
+
editing?: boolean;
|
|
47
|
+
defaultEdit?: boolean;
|
|
48
|
+
onInteractOutside?: unknown;
|
|
49
|
+
onPointerDownOutside?: unknown;
|
|
50
|
+
onFocusOutside?: unknown;
|
|
51
|
+
onEditChange?: unknown;
|
|
52
|
+
}
|
|
53
|
+
export declare function initial(args: EditableArgs | undefined, authored: (name: string) => boolean): EditableContext;
|
|
54
|
+
//# sourceMappingURL=editable.state.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { defaultTwin } from "@spinjs/runtime";
|
|
2
|
+
// src/editable/editable.state.ts
|
|
3
|
+
function initial(args = {}, authored) {
|
|
4
|
+
const written = (field) => authored(field) || authored(defaultTwin(field)) || args[defaultTwin(field)] !== void 0;
|
|
5
|
+
const value = written("value") && typeof args.value === "string" ? args.value : "";
|
|
6
|
+
const cap = args.maxLength;
|
|
7
|
+
return {
|
|
8
|
+
value,
|
|
9
|
+
previousValue: value,
|
|
10
|
+
maxLength: written("maxLength") && typeof cap === "number" && Number.isFinite(cap) && cap > 0 ? Math.trunc(cap) : null,
|
|
11
|
+
editControlled: false,
|
|
12
|
+
lastEvent: "",
|
|
13
|
+
disabled: args.disabled === true,
|
|
14
|
+
readOnly: args.readOnly === true,
|
|
15
|
+
invalid: authored("invalid") ? args.invalid === true : void 0,
|
|
16
|
+
required: args.required === true,
|
|
17
|
+
placeholder: typeof args.placeholder === "string" || typeof args.placeholder === "object" && args.placeholder !== null ? args.placeholder : "",
|
|
18
|
+
autoResize: args.autoResize === true,
|
|
19
|
+
dir: args.dir === "rtl" ? "rtl" : "ltr",
|
|
20
|
+
name: typeof args.name === "string" && args.name.length > 0 ? args.name : void 0,
|
|
21
|
+
form: typeof args.form === "string" && args.form.length > 0 ? args.form : void 0,
|
|
22
|
+
submitMode: typeof args.submitMode === "string" ? args.submitMode : "both",
|
|
23
|
+
activationMode: typeof args.activationMode === "string" ? args.activationMode : "focus",
|
|
24
|
+
selectOnFocus: args.selectOnFocus !== false,
|
|
25
|
+
onInteractOutside: args.onInteractOutside,
|
|
26
|
+
onPointerDownOutside: args.onPointerDownOutside,
|
|
27
|
+
onFocusOutside: args.onFocusOutside
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export { initial };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=editable.state.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EditableEvents } from "./editable.events.js";
|
|
2
|
+
import { EditableContext } from "./editable.state.js";
|
|
3
|
+
import { AssignFor, GuardFor } from "@spinjs/runtime/fsm";
|
|
4
|
+
type EditableAssign<K extends keyof EditableEvents = keyof EditableEvents> = AssignFor<EditableContext, EditableEvents, K>;
|
|
5
|
+
export declare const setPreviousValue: EditableAssign;
|
|
6
|
+
export declare const setLastEvent: EditableAssign<"CANCEL" | "SUBMIT">;
|
|
7
|
+
export declare const revertValue: (ctx: EditableContext) => Partial<EditableContext>;
|
|
8
|
+
export declare const isEditControlled: GuardFor<EditableContext, EditableEvents>;
|
|
9
|
+
export declare const controlledPreviewIsSubmit: GuardFor<EditableContext, EditableEvents>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=editable.transitions.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// src/editable/editable.transitions.ts
|
|
2
|
+
const setPreviousValue = (ctx) => ({ previousValue: ctx.value });
|
|
3
|
+
const setLastEvent = (_ctx, e) => ({ lastEvent: e.type });
|
|
4
|
+
const revertValue = (ctx) => ctx.previousValue === "" ? {} : { value: ctx.previousValue };
|
|
5
|
+
const isEditControlled = (ctx) => ctx.editControlled;
|
|
6
|
+
const controlledPreviewIsSubmit = (_ctx, e) => e.type === "CONTROLLED.PREVIEW" && e.previousEvent === "SUBMIT";
|
|
7
|
+
export { controlledPreviewIsSubmit, isEditControlled, revertValue, setLastEvent, setPreviousValue };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=editable.transitions.js.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { editable } from "../editable.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = editable({ value: "Ada Lovelace" });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full" {...machine.getRootProps()}>
|
|
8
|
+
<div class="mb-1 flex items-center justify-between gap-2">
|
|
9
|
+
<label
|
|
10
|
+
class="text-sm font-medium text-text transition-colors duration-fast ease-decelerate"
|
|
11
|
+
{...machine.getLabelProps()}
|
|
12
|
+
>Display name</label>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<div
|
|
16
|
+
class="relative rounded-md border border-solid border-border bg-surface-raised transition-shadow duration-fast ease-decelerate"
|
|
17
|
+
{...machine.getAreaProps()}
|
|
18
|
+
>
|
|
19
|
+
<span show={!machine.editing}
|
|
20
|
+
class="block min-w-0 cursor-text px-2 py-1 text-sm text-text transition-colors duration-fast ease-decelerate hover:text-primary"
|
|
21
|
+
{...machine.getPreviewProps()}
|
|
22
|
+
>{machine.valueText}</span>
|
|
23
|
+
<input show={machine.editing}
|
|
24
|
+
class="w-full bg-transparent px-2 py-1 outline-none transition-colors duration-fast ease-decelerate placeholder:text-text-muted"
|
|
25
|
+
{...machine.getInputProps()}
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div class="mt-2 flex items-center gap-1" {...machine.getControlProps()}>
|
|
30
|
+
<button
|
|
31
|
+
class={["secondary icon s-sm", { "inline-flex": !machine.editing, "hidden": machine.editing }]}
|
|
32
|
+
{...machine.getEditTriggerProps()}
|
|
33
|
+
><span class="i-lucide-pencil text-xs" aria-hidden="true"></span></button>
|
|
34
|
+
<button
|
|
35
|
+
class={["secondary icon s-sm", { "inline-flex": machine.editing, "hidden": !machine.editing }]}
|
|
36
|
+
{...machine.getSubmitTriggerProps()}
|
|
37
|
+
><span class="i-lucide-check text-xs" aria-hidden="true"></span></button>
|
|
38
|
+
<button
|
|
39
|
+
class={["secondary icon s-sm", { "inline-flex": machine.editing, "hidden": !machine.editing }]}
|
|
40
|
+
{...machine.getCancelTriggerProps()}
|
|
41
|
+
><span class="i-lucide-x text-xs" aria-hidden="true"></span></button>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { editable } from "../editable.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = editable({ value: "Double-click me to edit", placeholder: "Double-click to edit…", activationMode: "dblclick" });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full" {...machine.getRootProps()}>
|
|
8
|
+
<div class="mb-1 flex items-center gap-2">
|
|
9
|
+
<span class="i-lucide-mouse-pointer-2 text-sm text-text-muted" aria-hidden="true"></span>
|
|
10
|
+
<label class="text-sm font-medium text-text transition-colors duration-fast ease-decelerate" {...machine.getLabelProps()}>Double-click me to edit</label>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div class="relative rounded-md border border-solid border-border bg-surface-raised transition-shadow duration-fast ease-decelerate" {...machine.getAreaProps()}>
|
|
14
|
+
<span show={!machine.editing} class="block min-w-0 cursor-text px-2 py-1 text-sm text-text transition-colors duration-fast ease-decelerate hover:text-primary" {...machine.getPreviewProps()}>{machine.valueText}</span>
|
|
15
|
+
<input show={machine.editing} class="w-full bg-transparent px-2 py-1 outline-none transition-colors duration-fast ease-decelerate placeholder:text-text-muted" {...machine.getInputProps()} />
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<p class="text-xs text-text-muted">Double-click the text above to start editing</p>
|
|
19
|
+
</div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { editable } from "../editable.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = editable({ value: "Click to edit inline note" });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full max-w-md" {...machine.getRootProps()}>
|
|
8
|
+
<label class="mb-1 block text-xs font-medium text-text-muted" {...machine.getLabelProps()}>Inline Note</label>
|
|
9
|
+
<div class="relative rounded-md border border-solid border-border bg-surface-raised" {...machine.getAreaProps()}>
|
|
10
|
+
<span show={!machine.editing} class="block min-w-0 cursor-text px-3 py-1 text-sm text-text hover:text-primary" {...machine.getPreviewProps()}>{machine.valueText}</span>
|
|
11
|
+
<input show={machine.editing} class="w-full bg-transparent px-3 py-1 outline-none" {...machine.getInputProps()} />
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { editable } from "../editable.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = editable({ value: "Principal Systems Architect" });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full max-w-md rounded-lg border border-solid border-border bg-surface-raised p-4" {...machine.getRootProps()}>
|
|
8
|
+
<div class="flex items-center justify-between gap-2">
|
|
9
|
+
<label class="text-xs font-semibold uppercase tracking-wide text-text-muted" {...machine.getLabelProps()}>Role Title</label>
|
|
10
|
+
<div class="flex items-center gap-1" {...machine.getControlProps()}>
|
|
11
|
+
<button class={["secondary icon s-sm", { "inline-flex": !machine.editing, "hidden": machine.editing }]} {...machine.getEditTriggerProps()}><span class="i-lucide-pencil text-xs" aria-hidden="true"></span></button>
|
|
12
|
+
<button class={["secondary icon s-sm", { "inline-flex": machine.editing, "hidden": !machine.editing }]} {...machine.getSubmitTriggerProps()}><span class="i-lucide-check text-xs" aria-hidden="true"></span></button>
|
|
13
|
+
<button class={["secondary icon s-sm", { "inline-flex": machine.editing, "hidden": !machine.editing }]} {...machine.getCancelTriggerProps()}><span class="i-lucide-x text-xs" aria-hidden="true"></span></button>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="mt-1 rounded-md border border-solid border-transparent" {...machine.getAreaProps()}>
|
|
17
|
+
<span show={!machine.editing} class="block cursor-text py-1 font-medium text-text" {...machine.getPreviewProps()}>{machine.valueText}</span>
|
|
18
|
+
<input show={machine.editing} class="w-full bg-transparent py-1 font-medium" {...machine.getInputProps()} />
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { editable } from "../editable.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = editable({ value: "Short text", placeholder: "Type a longer message…", autoResize: true });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-fit max-w-full" {...machine.getRootProps()}>
|
|
8
|
+
<div class="mb-1 flex items-center gap-2">
|
|
9
|
+
<span class="i-lucide-align-left text-sm text-text-muted" aria-hidden="true"></span>
|
|
10
|
+
<label class="text-sm font-medium text-text transition-colors duration-fast ease-decelerate" {...machine.getLabelProps()}>Short text</label>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<div class="relative grid rounded-md border border-solid border-border bg-surface-raised transition-shadow duration-fast ease-decelerate" {...machine.getAreaProps()}>
|
|
14
|
+
<span class={["col-start-1 row-start-1 block min-w-0 cursor-text px-2 py-1 text-sm text-text transition-colors duration-fast ease-decelerate hover:text-primary", { "invisible": machine.editing }]} {...machine.getPreviewProps()}>{machine.valueText}</span>
|
|
15
|
+
<input show={machine.editing} class="bare col-start-1 row-start-1 min-w-0 bg-transparent px-2 py-1 outline-none transition-colors duration-fast ease-decelerate placeholder:text-text-muted" {...machine.getInputProps()} />
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<p class="text-xs text-text-muted">Click to edit • The field grows as you type</p>
|
|
19
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { editable } from "../editable.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = editable({ value: "Finalize statechart transition audit" });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="flex w-full max-w-md items-center gap-3 rounded-lg border border-solid border-border bg-surface-raised px-3 py-2" {...machine.getRootProps()}>
|
|
8
|
+
<span class="i-lucide-check-circle-2 shrink-0 text-sm text-primary" aria-hidden="true"></span>
|
|
9
|
+
<span class="sr-only" {...machine.getLabelProps()}>Task</span>
|
|
10
|
+
<div class="min-w-0 flex-1" {...machine.getAreaProps()}>
|
|
11
|
+
<span show={!machine.editing} class="block truncate cursor-text text-sm text-text" {...machine.getPreviewProps()}>{machine.valueText}</span>
|
|
12
|
+
<input show={machine.editing} class="w-full bg-transparent outline-none" {...machine.getInputProps()} />
|
|
13
|
+
</div>
|
|
14
|
+
<div class="flex shrink-0 items-center gap-1" {...machine.getControlProps()}>
|
|
15
|
+
<button class={["secondary icon s-sm", { "inline-flex": !machine.editing, "hidden": machine.editing }]} {...machine.getEditTriggerProps()}><span class="i-lucide-pencil text-xs" aria-hidden="true"></span></button>
|
|
16
|
+
<button class={["secondary icon s-sm", { "inline-flex": machine.editing, "hidden": !machine.editing }]} {...machine.getSubmitTriggerProps()}><span class="i-lucide-check text-xs" aria-hidden="true"></span></button>
|
|
17
|
+
<button class={["secondary icon s-sm", { "inline-flex": machine.editing, "hidden": !machine.editing }]} {...machine.getCancelTriggerProps()}><span class="i-lucide-x text-xs" aria-hidden="true"></span></button>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { editable } from "../editable.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = editable({ value: "Q4 Architecture Roadmap" });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full max-w-md" {...machine.getRootProps()}>
|
|
8
|
+
<span class="sr-only" {...machine.getLabelProps()}>Document title</span>
|
|
9
|
+
<div class="rounded-lg border border-solid border-border bg-surface-raised px-3 py-2" {...machine.getAreaProps()}>
|
|
10
|
+
<span show={!machine.editing} class="block cursor-text text-lg font-semibold text-text hover:text-primary" {...machine.getPreviewProps()}>{machine.valueText}</span>
|
|
11
|
+
<input show={machine.editing} class="w-full bg-transparent text-lg font-semibold outline-none" {...machine.getInputProps()} />
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { editable } from "../editable.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = editable({ value: "Release v0.1.0 candidate" });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full max-w-md" {...machine.getRootProps()}>
|
|
8
|
+
<label class="block text-sm font-medium text-text" {...machine.getLabelProps()}>Release Tag</label>
|
|
9
|
+
<div class="flex items-center gap-2">
|
|
10
|
+
<div class="min-w-0 flex-1 rounded-md border border-solid border-border bg-surface-raised" {...machine.getAreaProps()}>
|
|
11
|
+
<span show={!machine.editing} class="block truncate cursor-text px-3 py-1 text-sm text-text" {...machine.getPreviewProps()}>{machine.valueText}</span>
|
|
12
|
+
<input show={machine.editing} class="w-full bg-transparent px-3 py-1 outline-none" {...machine.getInputProps()} />
|
|
13
|
+
</div>
|
|
14
|
+
<div class="flex shrink-0 items-center gap-1" {...machine.getControlProps()}>
|
|
15
|
+
<button class={["secondary s-sm", { "inline-flex": !machine.editing, "hidden": machine.editing }]} {...machine.getEditTriggerProps()}>Edit</button>
|
|
16
|
+
<button class={["s-sm", { "inline-flex": machine.editing, "hidden": !machine.editing }]} {...machine.getSubmitTriggerProps()}>Save</button>
|
|
17
|
+
<button class={["secondary s-sm", { "inline-flex": machine.editing, "hidden": !machine.editing }]} {...machine.getCancelTriggerProps()}>Cancel</button>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fileUpload } from "../file-upload.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = fileUpload({maxFiles: 1});
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full" {...machine.getRootProps()}>
|
|
8
|
+
<div
|
|
9
|
+
class={["flex cursor-pointer flex-col items-center justify-center gap-1 rounded-lg border border-dashed border-border bg-surface px-4 py-6 text-center transition-colors duration-fast ease-decelerate", { "border-primary bg-surface-raised": machine.dragging, "ring-2 ring-border-strong": machine.focused, "cursor-not-allowed opacity-50": machine.disabled }]}
|
|
10
|
+
{...machine.getDropzoneProps()}
|
|
11
|
+
>
|
|
12
|
+
<span class="i-lucide-upload text-lg text-text-muted" aria-hidden="true"></span>
|
|
13
|
+
<span class="text-sm text-text" {...machine.getLabelProps()}>Upload avatar</span>
|
|
14
|
+
<span class="text-xs text-text-muted">or click to browse</span>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<input {...machine.getHiddenInputProps()} />
|
|
18
|
+
|
|
19
|
+
<div class="mt-2 flex flex-col gap-1" {...machine.getItemGroupProps()}>
|
|
20
|
+
<template for={machine.getAcceptedRows()} as={row} key={row.value}>
|
|
21
|
+
<div class="flex items-center justify-between gap-2 rounded-md border border-solid border-border bg-surface-raised px-2 py-1" {...machine.getItemProps(row)}>
|
|
22
|
+
<span class="min-w-0 flex-1 truncate text-xs text-text" {...machine.getItemNameProps(row)}>{row.value}</span>
|
|
23
|
+
<span class="shrink-0 text-xs text-text-muted tabular-nums">{machine.getItemSizeText(row)}</span>
|
|
24
|
+
<button class="shrink-0 ghost icon s-sm" {...machine.getItemDeleteTriggerProps(row)}>
|
|
25
|
+
<span class="i-lucide-x text-xs" aria-hidden="true"></span>
|
|
26
|
+
</button>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<div class="mt-1 flex justify-end">
|
|
32
|
+
<button class="ghost s-sm" {...machine.getClearTriggerProps()}>Clear</button>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fileUpload } from "../file-upload.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = fileUpload({ multiple: true, maxFiles: 5 });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full" {...machine.getRootProps()}>
|
|
8
|
+
<div
|
|
9
|
+
class={["flex cursor-pointer flex-col items-center justify-center gap-1 rounded-lg border border-dashed border-border bg-surface px-4 py-6 text-center transition-colors duration-fast ease-decelerate", { "border-primary bg-surface-raised": machine.dragging, "ring-2 ring-border-strong": machine.focused, "cursor-not-allowed opacity-50": machine.disabled }]}
|
|
10
|
+
{...machine.getDropzoneProps()}
|
|
11
|
+
>
|
|
12
|
+
<span class="i-lucide-upload-cloud icon-lg text-text-muted" aria-hidden="true"></span>
|
|
13
|
+
<span class="text-sm font-medium text-text" {...machine.getLabelProps()}>Drop files here or click to browse</span>
|
|
14
|
+
<span class="text-xs text-text-muted">Up to 5 files supported</span>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<input {...machine.getHiddenInputProps()} />
|
|
18
|
+
|
|
19
|
+
<div class="mt-2 flex flex-col gap-1" {...machine.getItemGroupProps()}>
|
|
20
|
+
<template for={machine.getAcceptedRows()} as={row} key={row.value}>
|
|
21
|
+
<div class="flex items-center justify-between gap-2 rounded-md border border-solid border-border bg-surface-raised px-3 py-1" {...machine.getItemProps(row)}>
|
|
22
|
+
<span class="min-w-0 flex-1 truncate text-xs text-text" {...machine.getItemNameProps(row)}>{row.value}</span>
|
|
23
|
+
<span class="shrink-0 text-xs text-text-muted tabular-nums">{machine.getItemSizeText(row)}</span>
|
|
24
|
+
<button class="ghost icon s-sm" {...machine.getItemDeleteTriggerProps(row)}>
|
|
25
|
+
<span class="i-lucide-x text-xs" aria-hidden="true"></span>
|
|
26
|
+
</button>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<div class="mt-1 flex justify-end">
|
|
32
|
+
<button class="ghost s-sm" {...machine.getClearTriggerProps()}>Clear</button>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fileUpload } from "../file-upload.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = fileUpload({maxFiles: 100, directory: true});
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full" {...machine.getRootProps()}>
|
|
8
|
+
<div
|
|
9
|
+
class={["flex cursor-pointer flex-col items-center justify-center gap-1 rounded-lg border border-dashed border-border bg-surface px-4 py-6 text-center transition-colors duration-fast ease-decelerate", { "border-primary bg-surface-raised": machine.dragging, "ring-2 ring-border-strong": machine.focused, "cursor-not-allowed opacity-50": machine.disabled }]}
|
|
10
|
+
{...machine.getDropzoneProps()}
|
|
11
|
+
>
|
|
12
|
+
<span class="i-lucide-upload text-lg text-text-muted" aria-hidden="true"></span>
|
|
13
|
+
<span class="text-sm text-text" {...machine.getLabelProps()}>Upload directory</span>
|
|
14
|
+
<span class="text-xs text-text-muted">All files and subdirectories will be included</span>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<input {...machine.getHiddenInputProps()} />
|
|
18
|
+
|
|
19
|
+
<div class="mt-2 flex flex-col gap-1" {...machine.getItemGroupProps()}>
|
|
20
|
+
<template for={machine.getAcceptedRows()} as={row} key={row.value}>
|
|
21
|
+
<div class="flex items-center justify-between gap-2 rounded-md border border-solid border-border bg-surface-raised px-2 py-1" {...machine.getItemProps(row)}>
|
|
22
|
+
<span class="min-w-0 flex-1 truncate text-xs text-text" {...machine.getItemNameProps(row)}>{machine.getItemPathText(row) ?? row.value}</span>
|
|
23
|
+
<span class="shrink-0 text-xs text-text-muted tabular-nums">{machine.getItemSizeText(row)}</span>
|
|
24
|
+
<button class="shrink-0 ghost icon s-sm" {...machine.getItemDeleteTriggerProps(row)}>
|
|
25
|
+
<span class="i-lucide-x text-xs" aria-hidden="true"></span>
|
|
26
|
+
</button>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<div class="mt-1 flex justify-end">
|
|
32
|
+
<button class="ghost s-sm" {...machine.getClearTriggerProps()}>Clear</button>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fileUpload } from "../file-upload.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = fileUpload({ multiple: true, maxFiles: 10 });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full" {...machine.getRootProps()}>
|
|
8
|
+
<div
|
|
9
|
+
class={["flex cursor-pointer flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed border-border bg-surface-raised px-6 py-8 text-center transition-colors duration-fast ease-decelerate", { "border-primary bg-surface": machine.dragging, "ring-2 ring-border-strong": machine.focused, "cursor-not-allowed opacity-50": machine.disabled }]}
|
|
10
|
+
{...machine.getDropzoneProps()}
|
|
11
|
+
>
|
|
12
|
+
<span class="i-lucide-folder-up icon-lg text-primary" aria-hidden="true"></span>
|
|
13
|
+
<span class="text-sm font-semibold text-text" {...machine.getLabelProps()}>Drag and drop project archives</span>
|
|
14
|
+
<span class="text-xs text-text-muted">ZIP, TAR, or source bundles up to 10 files</span>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<input {...machine.getHiddenInputProps()} />
|
|
18
|
+
|
|
19
|
+
<div class="mt-3 flex flex-col gap-2" {...machine.getItemGroupProps()}>
|
|
20
|
+
<template for={machine.getAcceptedRows()} as={row} key={row.value}>
|
|
21
|
+
<div class="flex items-center justify-between gap-2 rounded-md border border-solid border-border bg-surface px-3 py-2" {...machine.getItemProps(row)}>
|
|
22
|
+
<span class="i-lucide-file-archive shrink-0 text-sm text-text-muted" aria-hidden="true"></span>
|
|
23
|
+
<span class="min-w-0 flex-1 truncate text-xs font-medium text-text" {...machine.getItemNameProps(row)}>{row.value}</span>
|
|
24
|
+
<span class="shrink-0 text-xs text-text-muted tabular-nums">{machine.getItemSizeText(row)}</span>
|
|
25
|
+
<button class="ghost icon s-sm" {...machine.getItemDeleteTriggerProps(row)}>
|
|
26
|
+
<span class="i-lucide-x text-xs" aria-hidden="true"></span>
|
|
27
|
+
</button>
|
|
28
|
+
</div>
|
|
29
|
+
</template>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fileUpload } from "../file-upload.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = fileUpload({
|
|
5
|
+
multiple: true,
|
|
6
|
+
value: [
|
|
7
|
+
{ name: "architecture-spec.pdf", size: 245760, type: "application/pdf" },
|
|
8
|
+
{ name: "tokens.json", size: 18432, type: "application/json" },
|
|
9
|
+
],
|
|
10
|
+
});
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<div class="w-full" {...machine.getRootProps()}>
|
|
14
|
+
<div
|
|
15
|
+
class={["flex cursor-pointer items-center justify-between gap-3 rounded-lg border border-dashed border-border bg-surface px-4 py-3 transition-colors duration-fast ease-decelerate", { "border-primary bg-surface-raised": machine.dragging }]}
|
|
16
|
+
{...machine.getDropzoneProps()}
|
|
17
|
+
>
|
|
18
|
+
<div class="flex items-center gap-2">
|
|
19
|
+
<span class="i-lucide-paperclip text-sm text-text-muted" aria-hidden="true"></span>
|
|
20
|
+
<span class="text-sm font-medium text-text" {...machine.getLabelProps()}>Attached Documents</span>
|
|
21
|
+
</div>
|
|
22
|
+
<span class="text-xs text-primary">Add files</span>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<input {...machine.getHiddenInputProps()} />
|
|
26
|
+
|
|
27
|
+
<div class="mt-2 flex flex-col gap-2" {...machine.getItemGroupProps()}>
|
|
28
|
+
<template for={machine.getAcceptedRows()} as={row} key={row.value}>
|
|
29
|
+
<div class="flex items-center justify-between gap-2 rounded-md border border-solid border-border bg-surface-raised px-3 py-2" {...machine.getItemProps(row)}>
|
|
30
|
+
<span class="i-lucide-file-text shrink-0 text-sm text-primary" aria-hidden="true"></span>
|
|
31
|
+
<span class="min-w-0 flex-1 truncate text-xs font-medium text-text" {...machine.getItemNameProps(row)}>{row.value}</span>
|
|
32
|
+
<span class="shrink-0 text-xs text-text-muted tabular-nums">{machine.getItemSizeText(row)}</span>
|
|
33
|
+
<button class="ghost icon s-sm" {...machine.getItemDeleteTriggerProps(row)}>
|
|
34
|
+
<span class="i-lucide-trash-2 text-xs" aria-hidden="true"></span>
|
|
35
|
+
</button>
|
|
36
|
+
</div>
|
|
37
|
+
</template>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fileUpload } from "../file-upload.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = fileUpload({
|
|
5
|
+
multiple: true,
|
|
6
|
+
accept: "image/*",
|
|
7
|
+
value: [
|
|
8
|
+
{ name: "hero-banner.png", size: 512000, type: "image/png" },
|
|
9
|
+
{ name: "avatar-preview.webp", size: 84200, type: "image/webp" },
|
|
10
|
+
],
|
|
11
|
+
});
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<div class="w-full" {...machine.getRootProps()}>
|
|
15
|
+
<div
|
|
16
|
+
class={["flex cursor-pointer flex-col items-center justify-center gap-1 rounded-lg border border-dashed border-border bg-surface px-4 py-5 text-center transition-colors duration-fast ease-decelerate", { "border-primary bg-surface-raised": machine.dragging }]}
|
|
17
|
+
{...machine.getDropzoneProps()}
|
|
18
|
+
>
|
|
19
|
+
<span class="i-lucide-image-plus icon-lg text-primary" aria-hidden="true"></span>
|
|
20
|
+
<span class="text-sm font-medium text-text" {...machine.getLabelProps()}>Upload gallery images</span>
|
|
21
|
+
<span class="text-xs text-text-muted">PNG, JPG, WEBP, or SVG</span>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<input {...machine.getHiddenInputProps()} />
|
|
25
|
+
|
|
26
|
+
<div class="mt-2 grid grid-cols-2 gap-2" {...machine.getItemGroupProps()}>
|
|
27
|
+
<template for={machine.getAcceptedRows()} as={row} key={row.value}>
|
|
28
|
+
<div class="flex items-center justify-between gap-2 rounded-lg border border-solid border-border bg-surface-raised p-2" {...machine.getItemProps(row)}>
|
|
29
|
+
<span class="i-lucide-image shrink-0 text-sm text-primary" aria-hidden="true"></span>
|
|
30
|
+
<div class="min-w-0 flex-1">
|
|
31
|
+
<span class="block truncate text-xs font-medium text-text" {...machine.getItemNameProps(row)}>{row.value}</span>
|
|
32
|
+
<span class="block text-xs text-text-muted tabular-nums">{machine.getItemSizeText(row)}</span>
|
|
33
|
+
</div>
|
|
34
|
+
<button class="ghost icon s-sm" {...machine.getItemDeleteTriggerProps(row)}>
|
|
35
|
+
<span class="i-lucide-x text-xs" aria-hidden="true"></span>
|
|
36
|
+
</button>
|
|
37
|
+
</div>
|
|
38
|
+
</template>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fileUpload } from "../file-upload.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = fileUpload({ multiple: true });
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<div class="w-full" {...machine.getRootProps()}>
|
|
8
|
+
<div
|
|
9
|
+
class={["flex cursor-pointer flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-border bg-surface px-4 py-6 text-center transition-colors duration-fast ease-decelerate", { "border-primary bg-surface-raised": machine.dragging, "ring-2 ring-border-strong": machine.focused }]}
|
|
10
|
+
{...machine.getDropzoneProps()}
|
|
11
|
+
>
|
|
12
|
+
<span class="i-lucide-clipboard-paste text-lg text-text-muted" aria-hidden="true"></span>
|
|
13
|
+
<span class="text-sm font-medium text-text" {...machine.getLabelProps()}>Click or paste clipboard files</span>
|
|
14
|
+
<span class="text-xs text-text-muted">Screenshots and copied attachments</span>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<input {...machine.getHiddenInputProps()} />
|
|
18
|
+
|
|
19
|
+
<div class="mt-2 flex flex-col gap-1" {...machine.getItemGroupProps()}>
|
|
20
|
+
<template for={machine.getAcceptedRows()} as={row} key={row.value}>
|
|
21
|
+
<div class="flex items-center justify-between gap-2 rounded-md border border-solid border-border bg-surface-raised px-3 py-1" {...machine.getItemProps(row)}>
|
|
22
|
+
<span class="min-w-0 flex-1 truncate text-xs text-text" {...machine.getItemNameProps(row)}>{row.value}</span>
|
|
23
|
+
<span class="shrink-0 text-xs text-text-muted tabular-nums">{machine.getItemSizeText(row)}</span>
|
|
24
|
+
<button class="ghost icon s-sm" {...machine.getItemDeleteTriggerProps(row)}>
|
|
25
|
+
<span class="i-lucide-x text-xs" aria-hidden="true"></span>
|
|
26
|
+
</button>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fileUpload } from "../file-upload.presentation.js";
|
|
3
|
+
|
|
4
|
+
const machine = fileUpload({
|
|
5
|
+
multiple: true,
|
|
6
|
+
value: [
|
|
7
|
+
{ name: "release-notes.md", size: 4200, type: "text/markdown" },
|
|
8
|
+
{ name: "bundle-stats.json", size: 128400, type: "application/json" },
|
|
9
|
+
{ name: "schema.sql", size: 15800, type: "application/sql" },
|
|
10
|
+
],
|
|
11
|
+
});
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<div class="w-full" {...machine.getRootProps()}>
|
|
15
|
+
<div class="mb-2 flex items-center justify-between">
|
|
16
|
+
<div
|
|
17
|
+
class={["inline-flex cursor-pointer items-center gap-2 rounded-md border border-solid border-border bg-surface-raised px-3 py-1 text-xs font-medium text-text hover:bg-surface", { "border-primary": machine.dragging }]}
|
|
18
|
+
{...machine.getDropzoneProps()}
|
|
19
|
+
>
|
|
20
|
+
<span class="i-lucide-plus text-xs" aria-hidden="true"></span>
|
|
21
|
+
<span {...machine.getLabelProps()}>Upload Artifacts</span>
|
|
22
|
+
</div>
|
|
23
|
+
<button class="secondary s-sm" {...machine.getClearTriggerProps()}>Clear all</button>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<input {...machine.getHiddenInputProps()} />
|
|
27
|
+
|
|
28
|
+
<div class="overflow-hidden rounded-lg border border-solid border-border bg-surface-raised" {...machine.getItemGroupProps()}>
|
|
29
|
+
<template for={machine.getAcceptedRows()} as={row} key={row.value}>
|
|
30
|
+
<div class="flex items-center justify-between gap-3 border-b border-solid border-border px-3 py-2 text-xs last:border-b-0" {...machine.getItemProps(row)}>
|
|
31
|
+
<span class="min-w-0 flex-1 truncate font-medium text-text" {...machine.getItemNameProps(row)}>{row.value}</span>
|
|
32
|
+
<span class="shrink-0 font-mono text-text-muted tabular-nums">{machine.getItemSizeText(row)}</span>
|
|
33
|
+
<button class="ghost icon s-sm" {...machine.getItemDeleteTriggerProps(row)}>
|
|
34
|
+
<span class="i-lucide-x text-xs" aria-hidden="true"></span>
|
|
35
|
+
</button>
|
|
36
|
+
</div>
|
|
37
|
+
</template>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FileRecord, FileRejection } from "./file-upload.state.js";
|
|
2
|
+
import { EventUnion } from "@spinjs/runtime/fsm";
|
|
3
|
+
export interface FileUploadEvents {
|
|
4
|
+
"INPUT.CHANGE": {
|
|
5
|
+
files: readonly FileRecord[];
|
|
6
|
+
};
|
|
7
|
+
"DROP": {
|
|
8
|
+
files: readonly FileRecord[];
|
|
9
|
+
};
|
|
10
|
+
"DROPZONE.FOCUS": {};
|
|
11
|
+
"DROPZONE.BLUR": {};
|
|
12
|
+
"DROPZONE.DRAG_OVER": {};
|
|
13
|
+
"DROPZONE.DRAG_LEAVE": {};
|
|
14
|
+
"FILE.REMOVE": {
|
|
15
|
+
name: string;
|
|
16
|
+
};
|
|
17
|
+
"VALUE.SET": {
|
|
18
|
+
value: readonly FileRecord[] | string;
|
|
19
|
+
};
|
|
20
|
+
"VALUE.CLEAR": {};
|
|
21
|
+
}
|
|
22
|
+
export type FileUploadEvent = EventUnion<FileUploadEvents>;
|
|
23
|
+
export type FileUploadValueChange = {
|
|
24
|
+
readonly acceptedFiles: readonly FileRecord[];
|
|
25
|
+
readonly rejectedFiles: readonly FileRejection[];
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=file-upload.events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FileRecord, FileRejection, FileUploadArgs, FileUploadContext, FileUploadState, filesOf, initial, matchesPattern, patterns, splitFiles } from "./file-upload.state.js";
|
|
2
|
+
import { FileUploadEvent, FileUploadEvents, FileUploadValueChange } from "./file-upload.events.js";
|
|
3
|
+
import { Machine } from "@spinjs/runtime/fsm";
|
|
4
|
+
export declare function fileUpload(args?: FileUploadArgs, authored?: (name: string) => boolean): Machine<FileUploadContext, FileUploadEvents, FileUploadState>;
|
|
5
|
+
export { type FileRecord, type FileRejection, type FileUploadArgs, type FileUploadContext, type FileUploadEvent, type FileUploadEvents, type FileUploadValueChange, filesOf, initial, matchesPattern, patterns, splitFiles };
|
|
6
|
+
//# sourceMappingURL=file-upload.machine.d.ts.map
|