kemet-ui 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +1588 -871
- package/dist/components/kemet-accordion/docs/stories.d.ts +12 -0
- package/dist/components/kemet-accordion/docs/stories.js +99 -0
- package/dist/components/kemet-accordion/docs/stories.js.map +1 -0
- package/dist/components/kemet-accordion/kemet-accordion-panel.d.ts +2 -2
- package/dist/components/kemet-accordion/kemet-accordion-panel.js +1 -1
- package/dist/components/kemet-accordion/kemet-accordion-panel.js.map +1 -1
- package/dist/components/kemet-accordion/kemet-accordion.d.ts +3 -3
- package/dist/components/kemet-accordion/kemet-accordion.js +2 -1
- package/dist/components/kemet-accordion/kemet-accordion.js.map +1 -1
- package/dist/components/kemet-accordion/spec.d.ts +2 -0
- package/dist/components/kemet-accordion/spec.js +132 -0
- package/dist/components/kemet-accordion/spec.js.map +1 -0
- package/dist/components/kemet-alert/docs/stories.d.ts +1 -1
- package/dist/components/kemet-alert/docs/stories.js +20 -19
- package/dist/components/kemet-alert/docs/stories.js.map +1 -1
- package/dist/components/kemet-alert/kemet-alert.d.ts +2 -2
- package/dist/components/kemet-alert/kemet-alert.js.map +1 -1
- package/dist/components/kemet-alert/spec.d.ts +1 -0
- package/dist/components/kemet-alert/spec.js +35 -0
- package/dist/components/kemet-alert/spec.js.map +1 -0
- package/dist/components/kemet-alert/types.d.ts +1 -1
- package/dist/components/kemet-avatar/docs/stories.d.ts +1 -1
- package/dist/components/kemet-avatar/docs/stories.js.map +1 -1
- package/dist/components/kemet-avatar/kemet-avatar.js.map +1 -1
- package/dist/components/kemet-avatar/kemet-avatars.js.map +1 -1
- package/dist/components/kemet-avatar/spec.d.ts +1 -0
- package/dist/components/kemet-avatar/spec.js +26 -0
- package/dist/components/kemet-avatar/spec.js.map +1 -0
- package/dist/components/kemet-badge/docs/stories.d.ts +1 -1
- package/dist/components/kemet-badge/kemet-badge.js.map +1 -1
- package/dist/components/kemet-badge/spec.d.ts +1 -0
- package/dist/components/kemet-badge/spec.js +21 -0
- package/dist/components/kemet-badge/spec.js.map +1 -0
- package/dist/components/kemet-badge/types.d.ts +1 -1
- package/dist/components/kemet-button/docs/stories.d.ts +1 -1
- package/dist/components/kemet-button/kemet-button.d.ts +2 -2
- package/dist/components/kemet-button/kemet-button.js +10 -8
- package/dist/components/kemet-button/kemet-button.js.map +1 -1
- package/dist/components/kemet-button/spec.d.ts +1 -0
- package/dist/components/kemet-button/spec.js +49 -0
- package/dist/components/kemet-button/spec.js.map +1 -0
- package/dist/components/kemet-button/types.d.ts +1 -1
- package/dist/components/kemet-card/docs/stories.d.ts +1 -1
- package/dist/components/kemet-card/docs/stories.js.map +1 -1
- package/dist/components/kemet-card/kemet-card.d.ts +1 -1
- package/dist/components/kemet-card/kemet-card.js +1 -1
- package/dist/components/kemet-card/kemet-card.js.map +1 -1
- package/dist/components/kemet-card/spec.d.ts +1 -0
- package/dist/components/kemet-card/spec.js +31 -0
- package/dist/components/kemet-card/spec.js.map +1 -0
- package/dist/components/kemet-carousel/docs/stories.d.ts +1 -1
- package/dist/components/kemet-carousel/docs/stories.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-current.d.ts +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-current.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-first.d.ts +1 -0
- package/dist/components/kemet-carousel/kemet-carousel-first.js +11 -4
- package/dist/components/kemet-carousel/kemet-carousel-first.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-last.d.ts +2 -1
- package/dist/components/kemet-carousel/kemet-carousel-last.js +12 -5
- package/dist/components/kemet-carousel/kemet-carousel-last.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-link.d.ts +1 -0
- package/dist/components/kemet-carousel/kemet-carousel-link.js +14 -4
- package/dist/components/kemet-carousel/kemet-carousel-link.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-next.d.ts +1 -0
- package/dist/components/kemet-carousel/kemet-carousel-next.js +11 -4
- package/dist/components/kemet-carousel/kemet-carousel-next.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-prev.d.ts +1 -0
- package/dist/components/kemet-carousel/kemet-carousel-prev.js +11 -4
- package/dist/components/kemet-carousel/kemet-carousel-prev.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-slide.js +5 -5
- package/dist/components/kemet-carousel/kemet-carousel-slide.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel-total.js.map +1 -1
- package/dist/components/kemet-carousel/kemet-carousel.d.ts +18 -14
- package/dist/components/kemet-carousel/kemet-carousel.js +32 -13
- package/dist/components/kemet-carousel/kemet-carousel.js.map +1 -1
- package/dist/components/kemet-carousel/spec.d.ts +10 -0
- package/dist/components/kemet-carousel/spec.js +168 -0
- package/dist/components/kemet-carousel/spec.js.map +1 -0
- package/dist/components/kemet-checkbox/docs/stories.d.ts +1 -1
- package/dist/components/kemet-checkbox/kemet-checkbox.d.ts +4 -4
- package/dist/components/kemet-checkbox/kemet-checkbox.js +4 -4
- package/dist/components/kemet-checkbox/kemet-checkbox.js.map +1 -1
- package/dist/components/kemet-checkbox/spec.d.ts +1 -0
- package/dist/components/kemet-checkbox/spec.js +33 -0
- package/dist/components/kemet-checkbox/spec.js.map +1 -0
- package/dist/components/kemet-checkbox/types.d.ts +1 -1
- package/dist/components/kemet-combo/docs/stories.d.ts +1 -1
- package/dist/components/kemet-combo/kemet-combo.d.ts +9 -8
- package/dist/components/kemet-combo/kemet-combo.js +18 -17
- package/dist/components/kemet-combo/kemet-combo.js.map +1 -1
- package/dist/components/kemet-combo/spec.d.ts +3 -0
- package/dist/components/kemet-combo/spec.js +46 -0
- package/dist/components/kemet-combo/spec.js.map +1 -0
- package/dist/components/kemet-count/docs/stories.d.ts +1 -1
- package/dist/components/kemet-count/kemet-count.d.ts +1 -1
- package/dist/components/kemet-count/kemet-count.js +1 -1
- package/dist/components/kemet-count/kemet-count.js.map +1 -1
- package/dist/components/kemet-count/spec.d.ts +4 -0
- package/dist/components/kemet-count/spec.js +45 -0
- package/dist/components/kemet-count/spec.js.map +1 -0
- package/dist/components/kemet-draggable/docs/stories.d.ts +1 -1
- package/dist/components/kemet-draggable/kemet-draggable.d.ts +3 -3
- package/dist/components/kemet-draggable/kemet-draggable.js +6 -5
- package/dist/components/kemet-draggable/kemet-draggable.js.map +1 -1
- package/dist/components/kemet-draggable/spec.d.ts +1 -0
- package/dist/components/kemet-draggable/spec.js +30 -0
- package/dist/components/kemet-draggable/spec.js.map +1 -0
- package/dist/components/kemet-drawer/docs/stories.d.ts +1 -1
- package/dist/components/kemet-drawer/kemet-drawer.d.ts +2 -2
- package/dist/components/kemet-drawer/kemet-drawer.js +2 -2
- package/dist/components/kemet-drawer/kemet-drawer.js.map +1 -1
- package/dist/components/kemet-drawer/spec.d.ts +1 -0
- package/dist/components/kemet-drawer/spec.js +21 -0
- package/dist/components/kemet-drawer/spec.js.map +1 -0
- package/dist/components/kemet-drawer/styles.js +1 -0
- package/dist/components/kemet-drawer/styles.js.map +1 -1
- package/dist/components/kemet-drawer/types.d.ts +2 -2
- package/dist/components/kemet-fab/docs/stories.d.ts +1 -1
- package/dist/components/kemet-fab/kemet-fab.d.ts +1 -1
- package/dist/components/kemet-fab/kemet-fab.js +4 -10
- package/dist/components/kemet-fab/kemet-fab.js.map +1 -1
- package/dist/components/kemet-fab/spec.d.ts +2 -0
- package/dist/components/kemet-fab/spec.js +43 -0
- package/dist/components/kemet-fab/spec.js.map +1 -0
- package/dist/components/kemet-field/docs/stories.d.ts +1 -1
- package/dist/components/kemet-field/kemet-field.d.ts +7 -7
- package/dist/components/kemet-field/kemet-field.js +9 -14
- package/dist/components/kemet-field/kemet-field.js.map +1 -1
- package/dist/components/kemet-field/spec.d.ts +2 -0
- package/dist/components/kemet-field/spec.js +38 -0
- package/dist/components/kemet-field/spec.js.map +1 -0
- package/dist/components/kemet-field/types.d.ts +1 -1
- package/dist/components/kemet-flipcard/docs/stories.d.ts +1 -1
- package/dist/components/kemet-flipcard/kemet-flipcard-trigger.d.ts +1 -1
- package/dist/components/kemet-flipcard/kemet-flipcard-trigger.js +2 -3
- package/dist/components/kemet-flipcard/kemet-flipcard-trigger.js.map +1 -1
- package/dist/components/kemet-flipcard/kemet-flipcard.d.ts +2 -2
- package/dist/components/kemet-flipcard/kemet-flipcard.js +3 -5
- package/dist/components/kemet-flipcard/kemet-flipcard.js.map +1 -1
- package/dist/components/kemet-flipcard/spec.d.ts +3 -0
- package/dist/components/kemet-flipcard/spec.js +38 -0
- package/dist/components/kemet-flipcard/spec.js.map +1 -0
- package/dist/components/kemet-icon/docs/stories.d.ts +1 -1
- package/dist/components/kemet-icon/kemet-icon.js +1 -1
- package/dist/components/kemet-icon/kemet-icon.js.map +1 -1
- package/dist/components/kemet-icon/spec.d.ts +1 -0
- package/dist/components/kemet-icon/spec.js +69 -0
- package/dist/components/kemet-icon/spec.js.map +1 -0
- package/dist/components/kemet-input/docs/stories.d.ts +1 -1
- package/dist/components/kemet-input/kemet-input.d.ts +3 -22
- package/dist/components/kemet-input/kemet-input.js +3 -23
- package/dist/components/kemet-input/kemet-input.js.map +1 -1
- package/dist/components/kemet-input/spec.d.ts +1 -0
- package/dist/components/kemet-input/spec.js +83 -0
- package/dist/components/kemet-input/spec.js.map +1 -0
- package/dist/components/kemet-input/types.d.ts +3 -3
- package/dist/components/kemet-modal/docs/stories.d.ts +1 -1
- package/dist/components/kemet-modal/docs/stories.js.map +1 -1
- package/dist/components/kemet-modal/kemet-modal-close.js.map +1 -1
- package/dist/components/kemet-modal/kemet-modal.d.ts +4 -4
- package/dist/components/kemet-modal/kemet-modal.js +3 -3
- package/dist/components/kemet-modal/kemet-modal.js.map +1 -1
- package/dist/components/kemet-modal/types.d.ts +1 -1
- package/dist/components/kemet-multi-input/docs/stories.d.ts +8 -0
- package/dist/components/kemet-multi-input/docs/stories.js +33 -0
- package/dist/components/kemet-multi-input/docs/stories.js.map +1 -0
- package/dist/components/kemet-multi-input/kemet-multi-input.d.ts +116 -0
- package/dist/components/kemet-multi-input/kemet-multi-input.js +193 -0
- package/dist/components/kemet-multi-input/kemet-multi-input.js.map +1 -0
- package/dist/components/kemet-multi-input/styles.d.ts +1 -0
- package/dist/components/kemet-multi-input/styles.js +87 -0
- package/dist/components/kemet-multi-input/styles.js.map +1 -0
- package/dist/components/kemet-multi-input/types.d.ts +5 -0
- package/dist/components/kemet-multi-input/types.js +2 -0
- package/dist/components/kemet-multi-input/types.js.map +1 -0
- package/dist/components/kemet-password/docs/stories.d.ts +1 -1
- package/dist/components/kemet-password/kemet-password.d.ts +14 -8
- package/dist/components/kemet-password/kemet-password.js +4 -33
- package/dist/components/kemet-password/kemet-password.js.map +1 -1
- package/dist/components/kemet-password/types.d.ts +1 -1
- package/dist/components/kemet-popper/docs/stories.d.ts +1 -1
- package/dist/components/kemet-popper/kemet-popper-close.d.ts +1 -1
- package/dist/components/kemet-popper/kemet-popper-close.js +2 -3
- package/dist/components/kemet-popper/kemet-popper-close.js.map +1 -1
- package/dist/components/kemet-popper/kemet-popper.d.ts +18 -7
- package/dist/components/kemet-popper/kemet-popper.js +21 -25
- package/dist/components/kemet-popper/kemet-popper.js.map +1 -1
- package/dist/components/kemet-popper/types.d.ts +3 -3
- package/dist/components/kemet-radio/docs/stories.d.ts +1 -1
- package/dist/components/kemet-radio/kemet-radio.js.map +1 -1
- package/dist/components/kemet-radio/kemet-radios.d.ts +5 -4
- package/dist/components/kemet-radio/kemet-radios.js +10 -4
- package/dist/components/kemet-radio/kemet-radios.js.map +1 -1
- package/dist/components/kemet-radio/spec.d.ts +3 -0
- package/dist/components/kemet-radio/spec.js +67 -0
- package/dist/components/kemet-radio/spec.js.map +1 -0
- package/dist/components/kemet-radio/types.d.ts +2 -2
- package/dist/components/kemet-rotator/docs/stories.d.ts +1 -1
- package/dist/components/kemet-rotator/kemet-rotator.d.ts +1 -1
- package/dist/components/kemet-rotator/kemet-rotator.js +1 -2
- package/dist/components/kemet-rotator/kemet-rotator.js.map +1 -1
- package/dist/components/kemet-rotator/types.d.ts +1 -1
- package/dist/components/kemet-scroll-link/docs/stories.d.ts +1 -1
- package/dist/components/kemet-scroll-link/kemet-scroll-link.d.ts +2 -2
- package/dist/components/kemet-scroll-link/kemet-scroll-link.js +11 -10
- package/dist/components/kemet-scroll-link/kemet-scroll-link.js.map +1 -1
- package/dist/components/kemet-scroll-nav/docs/stories.d.ts +1 -1
- package/dist/components/kemet-scroll-nav/kemet-scroll-nav.d.ts +2 -2
- package/dist/components/kemet-scroll-nav/kemet-scroll-nav.js +2 -7
- package/dist/components/kemet-scroll-nav/kemet-scroll-nav.js.map +1 -1
- package/dist/components/kemet-scroll-nav/types.d.ts +1 -1
- package/dist/components/kemet-scroll-snap/docs/stories.d.ts +1 -1
- package/dist/components/kemet-scroll-snap/docs/stories.js.map +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-paginator.d.ts +5 -4
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-paginator.js +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-paginator.js.map +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-slide.d.ts +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-slide.js +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap-slide.js.map +1 -1
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap.d.ts +3 -2
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap.js +2 -7
- package/dist/components/kemet-scroll-snap/kemet-scroll-snap.js.map +1 -1
- package/dist/components/kemet-scroll-snap/types.d.ts +2 -2
- package/dist/components/kemet-select/docs/stories.d.ts +1 -1
- package/dist/components/kemet-select/kemet-option.d.ts +1 -1
- package/dist/components/kemet-select/kemet-option.js +1 -1
- package/dist/components/kemet-select/kemet-option.js.map +1 -1
- package/dist/components/kemet-select/kemet-select.d.ts +19 -10
- package/dist/components/kemet-select/kemet-select.js +3 -44
- package/dist/components/kemet-select/kemet-select.js.map +1 -1
- package/dist/components/kemet-select/spec.d.ts +3 -0
- package/dist/components/kemet-select/spec.js +53 -0
- package/dist/components/kemet-select/spec.js.map +1 -0
- package/dist/components/kemet-sortable/docs/stories.d.ts +1 -1
- package/dist/components/kemet-sortable/docs/stories.js.map +1 -1
- package/dist/components/kemet-sortable/kemet-sortable-item.js.map +1 -1
- package/dist/components/kemet-sortable/kemet-sortable.d.ts +5 -5
- package/dist/components/kemet-sortable/kemet-sortable.js +5 -5
- package/dist/components/kemet-sortable/kemet-sortable.js.map +1 -1
- package/dist/components/kemet-svgs/docs/stories.d.ts +1 -1
- package/dist/components/kemet-svgs/docs/stories.js.map +1 -1
- package/dist/components/kemet-svgs/kemet-svg.js.map +1 -1
- package/dist/components/kemet-svgs/kemet-svgs.d.ts +1 -1
- package/dist/components/kemet-svgs/kemet-svgs.js +1 -1
- package/dist/components/kemet-svgs/kemet-svgs.js.map +1 -1
- package/dist/components/kemet-tabs/docs/stories.d.ts +1 -1
- package/dist/components/kemet-tabs/docs/stories.js.map +1 -1
- package/dist/components/kemet-tabs/kemet-tab-panel.d.ts +1 -0
- package/dist/components/kemet-tabs/kemet-tab-panel.js +3 -0
- package/dist/components/kemet-tabs/kemet-tab-panel.js.map +1 -1
- package/dist/components/kemet-tabs/kemet-tab.d.ts +1 -0
- package/dist/components/kemet-tabs/kemet-tab.js +4 -1
- package/dist/components/kemet-tabs/kemet-tab.js.map +1 -1
- package/dist/components/kemet-tabs/kemet-tabs.d.ts +23 -14
- package/dist/components/kemet-tabs/kemet-tabs.js +3 -47
- package/dist/components/kemet-tabs/kemet-tabs.js.map +1 -1
- package/dist/components/kemet-tabs/types.d.ts +3 -3
- package/dist/components/kemet-textarea/docs/stories.d.ts +1 -1
- package/dist/components/kemet-textarea/kemet-textarea.js.map +1 -1
- package/dist/components/kemet-textarea/spec.d.ts +3 -0
- package/dist/components/kemet-textarea/spec.js +69 -0
- package/dist/components/kemet-textarea/spec.js.map +1 -0
- package/dist/components/kemet-textarea/types.d.ts +1 -1
- package/dist/components/kemet-timer/docs/stories.d.ts +10 -0
- package/dist/components/kemet-timer/docs/stories.js +40 -0
- package/dist/components/kemet-timer/docs/stories.js.map +1 -0
- package/dist/components/kemet-timer/kemet-timer-display.d.ts +25 -0
- package/dist/components/kemet-timer/kemet-timer-display.js +65 -0
- package/dist/components/kemet-timer/kemet-timer-display.js.map +1 -0
- package/dist/components/kemet-timer/kemet-timer.d.ts +36 -0
- package/dist/components/kemet-timer/kemet-timer.js +103 -0
- package/dist/components/kemet-timer/kemet-timer.js.map +1 -0
- package/dist/components/kemet-timer/styles.d.ts +2 -0
- package/dist/components/kemet-timer/styles.js +12 -0
- package/dist/components/kemet-timer/styles.js.map +1 -0
- package/dist/components/kemet-timer/types.d.ts +1 -0
- package/dist/components/kemet-timer/types.js +2 -0
- package/dist/components/kemet-timer/types.js.map +1 -0
- package/dist/components/kemet-toggle/docs/stories.d.ts +1 -1
- package/dist/components/kemet-toggle/kemet-toggle.d.ts +3 -3
- package/dist/components/kemet-toggle/kemet-toggle.js +3 -3
- package/dist/components/kemet-toggle/kemet-toggle.js.map +1 -1
- package/dist/components/kemet-toggle/spec.d.ts +1 -0
- package/dist/components/kemet-toggle/spec.js +46 -0
- package/dist/components/kemet-toggle/spec.js.map +1 -0
- package/dist/components/kemet-tooltip/docs/stories.d.ts +1 -1
- package/dist/components/kemet-tooltip/kemet-tooltip.d.ts +2 -2
- package/dist/components/kemet-tooltip/kemet-tooltip.js +13 -12
- package/dist/components/kemet-tooltip/kemet-tooltip.js.map +1 -1
- package/dist/components/kemet-tooltip/types.d.ts +3 -3
- package/dist/components/kemet-tracker/docs/stories.d.ts +1 -1
- package/dist/components/kemet-tracker/docs/stories.js.map +1 -1
- package/dist/components/kemet-tracker/kemet-tracker-step.d.ts +2 -2
- package/dist/components/kemet-tracker/kemet-tracker-step.js +2 -2
- package/dist/components/kemet-tracker/kemet-tracker-step.js.map +1 -1
- package/dist/components/kemet-tracker/kemet-tracker.d.ts +2 -1
- package/dist/components/kemet-tracker/kemet-tracker.js.map +1 -1
- package/dist/components/kemet-upload/docs/stories.d.ts +1 -1
- package/dist/components/kemet-upload/kemet-upload-file.js +1 -2
- package/dist/components/kemet-upload/kemet-upload-file.js.map +1 -1
- package/dist/components/kemet-upload/kemet-upload.d.ts +3 -3
- package/dist/components/kemet-upload/kemet-upload.js +3 -8
- package/dist/components/kemet-upload/kemet-upload.js.map +1 -1
- package/dist/kemet-components.bundle.js +82 -86
- package/dist/kemet-components.bundle.js.map +1 -1
- package/dist/kemet-components.cjs +3320 -2985
- package/dist/kemet-components.js +3320 -2985
- package/dist/styles/kemet.base.css +24 -2
- package/dist/styles/kemet.base.css.map +1 -1
- package/dist/styles/kemet.core.css +266 -562
- package/dist/styles/kemet.core.css.map +1 -1
- package/dist/styles/shared/_config.scss +25 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/controllers/forms.js +16 -18
- package/dist/utilities/controllers/forms.js.map +1 -1
- package/dist/utilities/controllers/forms.spec.d.ts +2 -0
- package/dist/utilities/controllers/forms.spec.js +36 -0
- package/dist/utilities/controllers/forms.spec.js.map +1 -0
- package/dist/utilities/misc/drag.d.ts +6 -0
- package/dist/utilities/misc/drag.js +63 -0
- package/dist/utilities/misc/drag.js.map +1 -0
- package/package.json +50 -35
- package/dist/components/kemet-accordion/stories.d.ts +0 -12
- package/dist/components/kemet-accordion/stories.js +0 -47
- package/dist/components/kemet-accordion/stories.js.map +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { html, render } from 'lit';
|
|
2
|
+
import { expect } from '@wdio/globals';
|
|
3
|
+
import userEvent from '@testing-library/user-event';
|
|
4
|
+
import { fireEvent, waitFor } from '@testing-library/dom';
|
|
5
|
+
import './kemet-textarea';
|
|
6
|
+
import '../kemet-field/kemet-field';
|
|
7
|
+
import '../kemet-count/kemet-count';
|
|
8
|
+
describe('Textarea', () => {
|
|
9
|
+
const templates = {
|
|
10
|
+
default: html `
|
|
11
|
+
<kemet-field>
|
|
12
|
+
<kemet-textarea slot="input"></kemet-textarea>
|
|
13
|
+
</kemet-field>
|
|
14
|
+
`,
|
|
15
|
+
disabled: html `
|
|
16
|
+
<kemet-field>
|
|
17
|
+
<kemet-textarea disabled slot="input"></kemet-textarea>
|
|
18
|
+
</kemet-field>
|
|
19
|
+
`,
|
|
20
|
+
validateImmediately: html `
|
|
21
|
+
<kemet-field>
|
|
22
|
+
<kemet-textarea slot="input" required validate-on-blur></kemet-textarea>
|
|
23
|
+
<kemet-count slot="component" message="characters remaining." limit="6" validate-immediately></kemet-count>
|
|
24
|
+
</kemet-field>
|
|
25
|
+
`,
|
|
26
|
+
};
|
|
27
|
+
it('handles changes to the input properly', async () => {
|
|
28
|
+
render(templates.default, document.body);
|
|
29
|
+
const kemetTextarea = document.querySelector('kemet-textarea');
|
|
30
|
+
await waitFor(async () => {
|
|
31
|
+
const input = kemetTextarea.shadowRoot.querySelector('textarea');
|
|
32
|
+
// TODO figure out why useEvent is not generating code coverage
|
|
33
|
+
fireEvent.input(input, { target: { value: 'test' } });
|
|
34
|
+
fireEvent.change(input, { target: { value: 'test' } });
|
|
35
|
+
fireEvent.blur(input);
|
|
36
|
+
expect(kemetTextarea.status).toBe('standard');
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
it('focuses correctly', async () => {
|
|
40
|
+
render(templates.default, document.body);
|
|
41
|
+
const kemetTextarea = document.querySelector('kemet-textarea');
|
|
42
|
+
await waitFor(async () => {
|
|
43
|
+
kemetTextarea.focus();
|
|
44
|
+
fireEvent.focus(kemetTextarea.shadowRoot.querySelector('textarea'));
|
|
45
|
+
expect(kemetTextarea.hasFocus).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
it('should not set a value when user types into a disabled field', async () => {
|
|
49
|
+
render(templates.disabled, document.body);
|
|
50
|
+
const kemetTextarea = document.querySelector('kemet-textarea');
|
|
51
|
+
await waitFor(async () => {
|
|
52
|
+
await userEvent.type(kemetTextarea.shadowRoot.querySelector('textarea'), 'random text');
|
|
53
|
+
await userEvent.click(document.body);
|
|
54
|
+
expect(kemetTextarea.value).toBeFalsy();
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
it('should error on blur when validate-on-blur is set and invalid value is entered', async () => {
|
|
58
|
+
render(templates.validateImmediately, document.body);
|
|
59
|
+
const kemetTextarea = document.querySelector('kemet-textarea');
|
|
60
|
+
await waitFor(async () => {
|
|
61
|
+
const input = kemetTextarea.shadowRoot.querySelector('textarea');
|
|
62
|
+
kemetTextarea.focus();
|
|
63
|
+
fireEvent.blur(input);
|
|
64
|
+
kemetTextarea.checkValidity();
|
|
65
|
+
expect(kemetTextarea.status).toBe('error');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../src/components/kemet-textarea/spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, render } from 'lit';\nimport { expect } from '@wdio/globals';\nimport userEvent from '@testing-library/user-event';\nimport { fireEvent, waitFor } from '@testing-library/dom';\n\nimport './kemet-textarea';\nimport '../kemet-field/kemet-field';\nimport '../kemet-count/kemet-count';\n\ndescribe('Textarea', () => {\n const templates = {\n default: html`\n <kemet-field>\n <kemet-textarea slot=\"input\"></kemet-textarea>\n </kemet-field>\n `,\n disabled: html`\n <kemet-field>\n <kemet-textarea disabled slot=\"input\"></kemet-textarea>\n </kemet-field>\n `,\n validateImmediately: html`\n <kemet-field>\n <kemet-textarea slot=\"input\" required validate-on-blur></kemet-textarea>\n <kemet-count slot=\"component\" message=\"characters remaining.\" limit=\"6\" validate-immediately></kemet-count>\n </kemet-field>\n `,\n };\n\n it('handles changes to the input properly', async () => {\n render(templates.default, document.body);\n const kemetTextarea = document.querySelector('kemet-textarea');\n\n await waitFor(async () => {\n const input = kemetTextarea.shadowRoot.querySelector('textarea');\n // TODO figure out why useEvent is not generating code coverage\n fireEvent.input(input, { target: { value: 'test' } });\n fireEvent.change(input, { target: { value: 'test' } });\n fireEvent.blur(input);\n expect(kemetTextarea.status).toBe('standard');\n });\n });\n\n it('focuses correctly', async () => {\n render(templates.default, document.body);\n const kemetTextarea = document.querySelector('kemet-textarea');\n\n await waitFor(async () => {\n kemetTextarea.focus();\n fireEvent.focus(kemetTextarea.shadowRoot.querySelector('textarea'));\n expect(kemetTextarea.hasFocus).toBe(true);\n });\n });\n\n it('should not set a value when user types into a disabled field', async () => {\n render(templates.disabled, document.body);\n const kemetTextarea = document.querySelector('kemet-textarea');\n\n await waitFor(async () => {\n await userEvent.type(kemetTextarea.shadowRoot.querySelector('textarea'), 'random text');\n await userEvent.click(document.body);\n expect(kemetTextarea.value).toBeFalsy();\n });\n });\n\n it('should error on blur when validate-on-blur is set and invalid value is entered', async () => {\n render(templates.validateImmediately, document.body);\n const kemetTextarea = document.querySelector('kemet-textarea');\n\n await waitFor(async () => {\n const input = kemetTextarea.shadowRoot.querySelector('textarea');\n kemetTextarea.focus();\n fireEvent.blur(input);\n kemetTextarea.checkValidity();\n expect(kemetTextarea.status).toBe('error');\n });\n });\n});\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/web-components';
|
|
2
|
+
import '../kemet-timer';
|
|
3
|
+
import '../kemet-timer-display';
|
|
4
|
+
import '../../kemet-tabs/kemet-tabs';
|
|
5
|
+
import '../../kemet-tabs/kemet-tab';
|
|
6
|
+
import '../../kemet-tabs/kemet-tab-panel';
|
|
7
|
+
declare const meta: Meta;
|
|
8
|
+
export default meta;
|
|
9
|
+
type Story = StoryObj;
|
|
10
|
+
export declare const Standard: Story;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
3
|
+
import '../kemet-timer';
|
|
4
|
+
import '../kemet-timer-display';
|
|
5
|
+
import '../../kemet-tabs/kemet-tabs';
|
|
6
|
+
import '../../kemet-tabs/kemet-tab';
|
|
7
|
+
import '../../kemet-tabs/kemet-tab-panel';
|
|
8
|
+
const meta = {
|
|
9
|
+
title: 'Components / Timer',
|
|
10
|
+
component: 'kemet-timer',
|
|
11
|
+
argTypes: {
|
|
12
|
+
format: {
|
|
13
|
+
control: { type: 'select' },
|
|
14
|
+
options: ['seconds', 'minutes', 'hours', 'days'],
|
|
15
|
+
},
|
|
16
|
+
amount: {
|
|
17
|
+
control: { type: 'number' },
|
|
18
|
+
},
|
|
19
|
+
expires: {
|
|
20
|
+
control: { type: 'text' },
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
export default meta;
|
|
25
|
+
const Template = args => html `
|
|
26
|
+
<kemet-timer amount=${args.amount} format=${args.format} expires=${ifDefined(args.expires)}>
|
|
27
|
+
<kemet-timer-display format="seconds"></kemet-timer-display> Seconds :
|
|
28
|
+
<kemet-timer-display format="minutes"></kemet-timer-display> Minutes :
|
|
29
|
+
<kemet-timer-display format="hours"></kemet-timer-display> Hours :
|
|
30
|
+
<kemet-timer-display format="days"></kemet-timer-display> Days
|
|
31
|
+
</kemet-timer>
|
|
32
|
+
`;
|
|
33
|
+
export const Standard = {
|
|
34
|
+
render: args => Template(args),
|
|
35
|
+
args: {
|
|
36
|
+
amount: 2,
|
|
37
|
+
format: 'minutes',
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stories.js","sourceRoot":"","sources":["../../../../src/components/kemet-timer/docs/stories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAE3B,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,gBAAgB,CAAC;AACxB,OAAO,wBAAwB,CAAC;AAEhC,OAAO,6BAA6B,CAAC;AACrC,OAAO,4BAA4B,CAAC;AACpC,OAAO,kCAAkC,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,KAAK,EAAE,oBAAoB;IAC3B,SAAS,EAAE,aAAa;IACxB,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC;SACjD;QACD,MAAM,EAAE;YACN,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC5B;QACD,OAAO,EAAE;YACP,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SAC1B;KACF;CACF,CAAC;AACF,eAAe,IAAI,CAAC;AAIpB,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA;wBACL,IAAI,CAAC,MAAM,WAAW,IAAI,CAAC,MAAM,YAAY,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;CAM3F,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAU;IAC7B,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9B,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,SAAS;KAClB;CACF,CAAC","sourcesContent":["import { html } from 'lit';\nimport type { Meta, StoryObj } from '@storybook/web-components';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport '../kemet-timer';\nimport '../kemet-timer-display';\n\nimport '../../kemet-tabs/kemet-tabs';\nimport '../../kemet-tabs/kemet-tab';\nimport '../../kemet-tabs/kemet-tab-panel';\n\nconst meta: Meta = {\n title: 'Components / Timer',\n component: 'kemet-timer',\n argTypes: {\n format: {\n control: { type: 'select' },\n options: ['seconds', 'minutes', 'hours', 'days'],\n },\n amount: {\n control: { type: 'number' },\n },\n expires: {\n control: { type: 'text' },\n },\n },\n};\nexport default meta;\n\ntype Story = StoryObj;\n\nconst Template = args => html`\n <kemet-timer amount=${args.amount} format=${args.format} expires=${ifDefined(args.expires)}>\n <kemet-timer-display format=\"seconds\"></kemet-timer-display> Seconds :\n <kemet-timer-display format=\"minutes\"></kemet-timer-display> Minutes :\n <kemet-timer-display format=\"hours\"></kemet-timer-display> Hours :\n <kemet-timer-display format=\"days\"></kemet-timer-display> Days\n </kemet-timer>\n`;\n\nexport const Standard: Story = {\n render: args => Template(args),\n args: {\n amount: 2,\n format: 'minutes',\n },\n};\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import { TypeFormats } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* @since 3.1.0
|
|
5
|
+
* @status stable
|
|
6
|
+
*
|
|
7
|
+
* @tagname kemet-timer-display
|
|
8
|
+
* @summary Displays remaining time
|
|
9
|
+
*
|
|
10
|
+
* @prop {TypeFormats} format - The format to display the remaining time in
|
|
11
|
+
*/
|
|
12
|
+
export default class KemetTimerDisplay extends LitElement {
|
|
13
|
+
static styles: import("lit").CSSResult[];
|
|
14
|
+
format: TypeFormats;
|
|
15
|
+
displayTime: string;
|
|
16
|
+
constructor();
|
|
17
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
18
|
+
getTime(): void;
|
|
19
|
+
getTimeInSeconds(time: any): any;
|
|
20
|
+
}
|
|
21
|
+
declare global {
|
|
22
|
+
interface HTMLElementTagNameMap {
|
|
23
|
+
'kemet-timer-display': KemetTimerDisplay;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { html, LitElement } from 'lit';
|
|
3
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
4
|
+
import { stylesDisplay } from './styles';
|
|
5
|
+
/**
|
|
6
|
+
* @since 3.1.0
|
|
7
|
+
* @status stable
|
|
8
|
+
*
|
|
9
|
+
* @tagname kemet-timer-display
|
|
10
|
+
* @summary Displays remaining time
|
|
11
|
+
*
|
|
12
|
+
* @prop {TypeFormats} format - The format to display the remaining time in
|
|
13
|
+
*/
|
|
14
|
+
let KemetTimerDisplay = class KemetTimerDisplay extends LitElement {
|
|
15
|
+
constructor() {
|
|
16
|
+
super();
|
|
17
|
+
this.format = 'seconds';
|
|
18
|
+
this.getTime();
|
|
19
|
+
}
|
|
20
|
+
render() {
|
|
21
|
+
return html `${this.displayTime}`;
|
|
22
|
+
}
|
|
23
|
+
getTime() {
|
|
24
|
+
this.closest('kemet-timer').addEventListener('kemet-timer-increment', (event) => {
|
|
25
|
+
const secondsLeft = event.detail;
|
|
26
|
+
switch (this.format) {
|
|
27
|
+
case 'seconds':
|
|
28
|
+
this.displayTime = (secondsLeft % 60 < 10 ? `0${secondsLeft % 60}` : secondsLeft % 60).toString();
|
|
29
|
+
break;
|
|
30
|
+
case 'minutes':
|
|
31
|
+
// eslint-disable-next-line no-mixed-operators
|
|
32
|
+
this.displayTime = Math.floor((secondsLeft % 86400) % 3600 / 60).toString();
|
|
33
|
+
break;
|
|
34
|
+
case 'hours':
|
|
35
|
+
this.displayTime = Math.floor((secondsLeft % 86400) / 3600).toString();
|
|
36
|
+
break;
|
|
37
|
+
case 'days':
|
|
38
|
+
this.displayTime = Math.floor(secondsLeft / 86400).toString();
|
|
39
|
+
break;
|
|
40
|
+
default:
|
|
41
|
+
this.displayTime = (secondsLeft % 60 < 10 ? `0${secondsLeft % 60}` : secondsLeft % 60).toString();
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
getTimeInSeconds(time) {
|
|
46
|
+
switch (this.format) {
|
|
47
|
+
case 'minutes': return time * 60;
|
|
48
|
+
case 'hours': return time * 60 * 60;
|
|
49
|
+
case 'days': return time * 60 * 60 * 24;
|
|
50
|
+
default: return time;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
KemetTimerDisplay.styles = [stylesDisplay];
|
|
55
|
+
__decorate([
|
|
56
|
+
property({ type: String })
|
|
57
|
+
], KemetTimerDisplay.prototype, "format", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
state()
|
|
60
|
+
], KemetTimerDisplay.prototype, "displayTime", void 0);
|
|
61
|
+
KemetTimerDisplay = __decorate([
|
|
62
|
+
customElement('kemet-timer-display')
|
|
63
|
+
], KemetTimerDisplay);
|
|
64
|
+
export default KemetTimerDisplay;
|
|
65
|
+
//# sourceMappingURL=kemet-timer-display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kemet-timer-display.js","sourceRoot":"","sources":["../../../src/components/kemet-timer/kemet-timer-display.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC;;;;;;;;GAQG;AAGY,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,UAAU;IASvD;QACE,KAAK,EAAE,CAAC;QANV,WAAM,GAAgB,SAAS,CAAC;QAO9B,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,KAAkB,EAAE,EAAE;YAC3F,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;YACjC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpB,KAAK,SAAS;oBACZ,IAAI,CAAC,WAAW,GAAG,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAClG,MAAM;gBACR,KAAK,SAAS;oBACZ,8CAA8C;oBAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAC5E,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACvE,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAC9D,MAAM;gBACR;oBACE,IAAI,CAAC,WAAW,GAAG,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtG,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,IAAI;QACnB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;YACjC,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;YACpC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;;AA/CM,wBAAM,GAAG,CAAC,aAAa,CAAC,AAAlB,CAAmB;AAGhC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDACK;AAGhC;IADC,KAAK,EAAE;sDACY;AAPD,iBAAiB;IADrC,aAAa,CAAC,qBAAqB,CAAC;GAChB,iBAAiB,CAiDrC;eAjDoB,iBAAiB","sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { stylesDisplay } from './styles';\nimport { TypeFormats } from './types';\n\n/**\n * @since 3.1.0\n * @status stable\n *\n * @tagname kemet-timer-display\n * @summary Displays remaining time\n *\n * @prop {TypeFormats} format - The format to display the remaining time in\n */\n\n@customElement('kemet-timer-display')\nexport default class KemetTimerDisplay extends LitElement {\n static styles = [stylesDisplay];\n\n @property({ type: String })\n format: TypeFormats = 'seconds';\n\n @state()\n displayTime: string;\n\n constructor() {\n super();\n this.getTime();\n }\n\n render() {\n return html`${this.displayTime}`;\n }\n\n getTime() {\n this.closest('kemet-timer').addEventListener('kemet-timer-increment', (event: CustomEvent) => {\n const secondsLeft = event.detail;\n switch (this.format) {\n case 'seconds':\n this.displayTime = (secondsLeft % 60 < 10 ? `0${secondsLeft % 60}` : secondsLeft % 60).toString();\n break;\n case 'minutes':\n // eslint-disable-next-line no-mixed-operators\n this.displayTime = Math.floor((secondsLeft % 86400) % 3600 / 60).toString();\n break;\n case 'hours':\n this.displayTime = Math.floor((secondsLeft % 86400) / 3600).toString();\n break;\n case 'days':\n this.displayTime = Math.floor(secondsLeft / 86400).toString();\n break;\n default:\n this.displayTime = (secondsLeft % 60 < 10 ? `0${secondsLeft % 60}` : secondsLeft % 60).toString();\n }\n });\n }\n\n getTimeInSeconds(time) {\n switch (this.format) {\n case 'minutes': return time * 60;\n case 'hours': return time * 60 * 60;\n case 'days': return time * 60 * 60 * 24;\n default: return time;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-timer-display': KemetTimerDisplay\n }\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import { TypeFormats } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* @since 3.1.0
|
|
5
|
+
* @status stable
|
|
6
|
+
*
|
|
7
|
+
* @tagname kemet-timer
|
|
8
|
+
* @summary Counts down from a specified amount of time or date.
|
|
9
|
+
*
|
|
10
|
+
* @prop {string} format - The format of the amount property
|
|
11
|
+
* @prop {number} amount - The amount of time to set the timer
|
|
12
|
+
* @prop {string} expires - Begins a count down to a specified time, accepts a string that matches value given for a Date constructor
|
|
13
|
+
*
|
|
14
|
+
* @event kemet-timer-completed - Fires when the timer reaches 0
|
|
15
|
+
* @event kemet-timer-increment - Fires on tick of the timer
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
export default class KemetTimer extends LitElement {
|
|
19
|
+
static styles: import("lit").CSSResult[];
|
|
20
|
+
format: TypeFormats;
|
|
21
|
+
amount: number;
|
|
22
|
+
expires: string;
|
|
23
|
+
/** @internal */
|
|
24
|
+
interval: any;
|
|
25
|
+
firstUpdated(): void;
|
|
26
|
+
updated(prevProps: any): void;
|
|
27
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
28
|
+
getTimeInSeconds(time: any): any;
|
|
29
|
+
timer(seconds?: number): void;
|
|
30
|
+
countDown(): void;
|
|
31
|
+
}
|
|
32
|
+
declare global {
|
|
33
|
+
interface HTMLElementTagNameMap {
|
|
34
|
+
'kemet-timer': KemetTimer;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { html, LitElement } from 'lit';
|
|
3
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
4
|
+
import { stylesBase } from './styles';
|
|
5
|
+
import { emitEvent } from '../../utilities/misc/events';
|
|
6
|
+
/**
|
|
7
|
+
* @since 3.1.0
|
|
8
|
+
* @status stable
|
|
9
|
+
*
|
|
10
|
+
* @tagname kemet-timer
|
|
11
|
+
* @summary Counts down from a specified amount of time or date.
|
|
12
|
+
*
|
|
13
|
+
* @prop {string} format - The format of the amount property
|
|
14
|
+
* @prop {number} amount - The amount of time to set the timer
|
|
15
|
+
* @prop {string} expires - Begins a count down to a specified time, accepts a string that matches value given for a Date constructor
|
|
16
|
+
*
|
|
17
|
+
* @event kemet-timer-completed - Fires when the timer reaches 0
|
|
18
|
+
* @event kemet-timer-increment - Fires on tick of the timer
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
let KemetTimer = class KemetTimer extends LitElement {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(...arguments);
|
|
24
|
+
this.format = 'seconds';
|
|
25
|
+
this.amount = 10;
|
|
26
|
+
}
|
|
27
|
+
firstUpdated() {
|
|
28
|
+
if (this.expires) {
|
|
29
|
+
this.countDown();
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.timer(this.getTimeInSeconds(this.amount));
|
|
33
|
+
}
|
|
34
|
+
emitEvent(this, 'kemet-timer-started', true);
|
|
35
|
+
emitEvent(this, 'kemet-timer-increment', this.getTimeInSeconds(this.amount));
|
|
36
|
+
}
|
|
37
|
+
updated(prevProps) {
|
|
38
|
+
const hasFormatOrAmountChanged = prevProps.get('format') || prevProps.get('amount');
|
|
39
|
+
const hasExpiredChanged = prevProps.get('expires');
|
|
40
|
+
if (hasFormatOrAmountChanged) {
|
|
41
|
+
clearInterval(this.interval);
|
|
42
|
+
this.timer(this.getTimeInSeconds(this.amount));
|
|
43
|
+
}
|
|
44
|
+
if (hasExpiredChanged) {
|
|
45
|
+
clearInterval(this.interval);
|
|
46
|
+
this.countDown();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
render() {
|
|
50
|
+
return html `<slot></slot>`;
|
|
51
|
+
}
|
|
52
|
+
getTimeInSeconds(time) {
|
|
53
|
+
switch (this.format) {
|
|
54
|
+
case 'minutes': return time * 60;
|
|
55
|
+
case 'hours': return time * 60 * 60;
|
|
56
|
+
case 'days': return time * 60 * 60 * 24;
|
|
57
|
+
default: return time;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
timer(seconds = 0) {
|
|
61
|
+
const now = Date.now();
|
|
62
|
+
const then = now + seconds * 1000;
|
|
63
|
+
this.interval = setInterval(() => {
|
|
64
|
+
const secondsLeft = Math.round((then - Date.now()) / 1000);
|
|
65
|
+
if (secondsLeft < 0) {
|
|
66
|
+
clearInterval(this.interval);
|
|
67
|
+
emitEvent(this, 'kemet-timer-completed', true);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
emitEvent(this, 'kemet-timer-increment', secondsLeft);
|
|
71
|
+
}, 1000);
|
|
72
|
+
}
|
|
73
|
+
countDown() {
|
|
74
|
+
const expires = new Date(this.expires).getTime();
|
|
75
|
+
this.interval = setInterval(() => {
|
|
76
|
+
const secondsLeft = Math.round((expires - Date.now()) / 1000);
|
|
77
|
+
if (secondsLeft < 0) {
|
|
78
|
+
clearInterval(this.interval);
|
|
79
|
+
emitEvent(this, 'kemet-timer-completed', true);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
emitEvent(this, 'kemet-timer-increment', secondsLeft);
|
|
83
|
+
}, 1000);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
KemetTimer.styles = [stylesBase];
|
|
87
|
+
__decorate([
|
|
88
|
+
property({ type: String })
|
|
89
|
+
], KemetTimer.prototype, "format", void 0);
|
|
90
|
+
__decorate([
|
|
91
|
+
property({ type: Number })
|
|
92
|
+
], KemetTimer.prototype, "amount", void 0);
|
|
93
|
+
__decorate([
|
|
94
|
+
property({ type: String })
|
|
95
|
+
], KemetTimer.prototype, "expires", void 0);
|
|
96
|
+
__decorate([
|
|
97
|
+
state()
|
|
98
|
+
], KemetTimer.prototype, "interval", void 0);
|
|
99
|
+
KemetTimer = __decorate([
|
|
100
|
+
customElement('kemet-timer')
|
|
101
|
+
], KemetTimer);
|
|
102
|
+
export default KemetTimer;
|
|
103
|
+
//# sourceMappingURL=kemet-timer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kemet-timer.js","sourceRoot":"","sources":["../../../src/components/kemet-timer/kemet-timer.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { stylesBase } from './styles';\nimport { TypeFormats } from './types';\nimport { emitEvent } from '../../utilities/misc/events';\n\n/**\n * @since 3.1.0\n * @status stable\n *\n * @tagname kemet-timer\n * @summary Counts down from a specified amount of time or date.\n *\n * @prop {string} format - The format of the amount property\n * @prop {number} amount - The amount of time to set the timer\n * @prop {string} expires - Begins a count down to a specified time, accepts a string that matches value given for a Date constructor\n *\n * @event kemet-timer-completed - Fires when the timer reaches 0\n * @event kemet-timer-increment - Fires on tick of the timer\n *\n */\n\n@customElement('kemet-timer')\nexport default class KemetTimer extends LitElement {\n static styles = [stylesBase];\n\n @property({ type: String })\n format: TypeFormats = 'seconds';\n\n @property({ type: Number })\n amount: number = 10;\n\n @property({ type: String })\n expires: string;\n\n /** @internal */\n @state()\n interval;\n\n firstUpdated() {\n if (this.expires) {\n this.countDown();\n } else {\n this.timer(this.getTimeInSeconds(this.amount));\n }\n\n emitEvent(this, 'kemet-timer-started', true);\n emitEvent(this, 'kemet-timer-increment', this.getTimeInSeconds(this.amount));\n }\n\n updated(prevProps) {\n const hasFormatOrAmountChanged = prevProps.get('format') || prevProps.get('amount');\n const hasExpiredChanged = prevProps.get('expires');\n\n if (hasFormatOrAmountChanged) {\n clearInterval(this.interval);\n this.timer(this.getTimeInSeconds(this.amount));\n }\n\n if (hasExpiredChanged) {\n clearInterval(this.interval);\n this.countDown();\n }\n }\n\n render() {\n return html`<slot></slot>`;\n }\n\n getTimeInSeconds(time) {\n switch (this.format) {\n case 'minutes': return time * 60;\n case 'hours': return time * 60 * 60;\n case 'days': return time * 60 * 60 * 24;\n default: return time;\n }\n }\n\n timer(seconds: number = 0) {\n const now = Date.now();\n const then = now + seconds * 1000;\n\n this.interval = setInterval(() => {\n const secondsLeft = Math.round((then - Date.now()) / 1000);\n\n if (secondsLeft < 0) {\n clearInterval(this.interval);\n emitEvent(this, 'kemet-timer-completed', true);\n return;\n }\n\n emitEvent(this, 'kemet-timer-increment', secondsLeft);\n }, 1000);\n }\n\n countDown() {\n const expires = new Date(this.expires).getTime();\n\n this.interval = setInterval(() => {\n const secondsLeft = Math.round((expires - Date.now()) / 1000);\n\n if (secondsLeft < 0) {\n clearInterval(this.interval);\n emitEvent(this, 'kemet-timer-completed', true);\n return;\n }\n\n emitEvent(this, 'kemet-timer-increment', secondsLeft);\n }, 1000);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-timer': KemetTimer\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/components/kemet-timer/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAA;;;;CAI5B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;;;;CAI/B,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const stylesBase = css`\n :host {\n display: block;\n }\n`;\n\nexport const stylesDisplay = css`\n :host {\n display: inline-block;\n }\n`;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type TypeFormats = 'seconds' | 'minutes' | 'hours' | 'days';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/kemet-timer/types.ts"],"names":[],"mappings":"","sourcesContent":["export type TypeFormats = 'seconds' | 'minutes' | 'hours' | 'days';\n"]}
|
|
@@ -5,7 +5,7 @@ import '../../kemet-tabs/kemet-tab';
|
|
|
5
5
|
import '../../kemet-tabs/kemet-tab-panel';
|
|
6
6
|
declare const meta: Meta;
|
|
7
7
|
export default meta;
|
|
8
|
-
|
|
8
|
+
type Story = StoryObj;
|
|
9
9
|
export declare const Standard: Story;
|
|
10
10
|
export declare const Squared: Story;
|
|
11
11
|
export declare const ShowOptions: Story;
|
|
@@ -8,10 +8,10 @@ import { FormSubmitController } from '../../utilities/controllers/forms';
|
|
|
8
8
|
* @summary A toggle switch for forms.
|
|
9
9
|
*
|
|
10
10
|
* @prop {string} name - The name on the input field
|
|
11
|
-
* @prop {boolean} checked - Determines whether
|
|
12
|
-
* @prop {boolean} disabled - Determines whether
|
|
11
|
+
* @prop {boolean} checked - Determines whether the toggle is checked
|
|
12
|
+
* @prop {boolean} disabled - Determines whether the toggle is disabled
|
|
13
13
|
* @prop {string} label - A description of the toggle's purpose
|
|
14
|
-
* @prop {boolean} show - Determines whether
|
|
14
|
+
* @prop {boolean} show - Determines whether to show text options
|
|
15
15
|
* @prop {boolean} squared - Displays the toggle as squared instead of rounded
|
|
16
16
|
* @prop {string} optionChecked - The checked option text
|
|
17
17
|
* @prop {string} optionUnchecked - The unchecked option text
|
|
@@ -12,10 +12,10 @@ import { stylesToggle } from './styles';
|
|
|
12
12
|
* @summary A toggle switch for forms.
|
|
13
13
|
*
|
|
14
14
|
* @prop {string} name - The name on the input field
|
|
15
|
-
* @prop {boolean} checked - Determines whether
|
|
16
|
-
* @prop {boolean} disabled - Determines whether
|
|
15
|
+
* @prop {boolean} checked - Determines whether the toggle is checked
|
|
16
|
+
* @prop {boolean} disabled - Determines whether the toggle is disabled
|
|
17
17
|
* @prop {string} label - A description of the toggle's purpose
|
|
18
|
-
* @prop {boolean} show - Determines whether
|
|
18
|
+
* @prop {boolean} show - Determines whether to show text options
|
|
19
19
|
* @prop {boolean} squared - Displays the toggle as squared instead of rounded
|
|
20
20
|
* @prop {string} optionChecked - The checked option text
|
|
21
21
|
* @prop {string} optionUnchecked - The unchecked option text
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kemet-toggle.js","sourceRoot":"","sources":["../../../src/components/kemet-toggle/kemet-toggle.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"kemet-toggle.js","sourceRoot":"","sources":["../../../src/components/kemet-toggle/kemet-toggle.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { FormSubmitController } from '../../utilities/controllers/forms';\nimport { emitEvent } from '../../utilities/misc/events';\nimport { stylesToggle } from './styles';\n\n/**\n * @since 1.0.0\n * @status stable\n *\n * @tagname kemet-toggle\n * @summary A toggle switch for forms.\n *\n * @prop {string} name - The name on the input field\n * @prop {boolean} checked - Determines whether the toggle is checked\n * @prop {boolean} disabled - Determines whether the toggle is disabled\n * @prop {string} label - A description of the toggle's purpose\n * @prop {boolean} show - Determines whether to show text options\n * @prop {boolean} squared - Displays the toggle as squared instead of rounded\n * @prop {string} optionChecked - The checked option text\n * @prop {string} optionUnchecked - The unchecked option text\n *\n * @csspart label - The label element.\n * @csspart control - The control element.\n * @csspart text - The label text.\n * @csspart checked - The checked text.\n * @csspart unchecked - The unchecked text.\n *\n * @cssproperty --kemet-toggle-width - The width of the entire toggle.\n * @cssproperty --kemet-toggle-height - The height of the entire toggle.\n * @cssproperty --kemet-toggle-handle-diameter - The diameter of the handle.\n * @cssproperty --kemet-toggle-track-border - The border of the track.\n * @cssproperty --kemet-toggle-track-color - The color of the track.\n * @cssproperty --kemet-toggle-track-shadow - The shadow on the track.\n * @cssproperty --kemet-toggle-handle-border - The border on the handle.\n * @cssproperty --kemet-toggle-handle-color - The color of the handle.\n * @cssproperty --kemet-toggle-handle-shadow - The shadow on the handle.\n *\n * @event kemet-toggle-change - Fires when the toggle changes state\n *\n */\n\n@customElement('kemet-toggle')\nexport default class KemetToggle extends LitElement {\n formSubmitController: FormSubmitController;\n\n static styles = [stylesToggle];\n\n @property({ type: String })\n name: string = 'toggle-switch';\n\n @property({ type: Boolean, reflect: true })\n checked: boolean = false;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @property({ type: String })\n label: string = '';\n\n @property({ type: Boolean })\n show: boolean = false;\n\n @property({ type: Boolean })\n squared: boolean = false;\n\n @property({ type: String, attribute: 'option-checked' })\n optionChecked: string = 'on';\n\n @property({ type: String, attribute: 'option-unchecked' })\n optionUnchecked: string = 'off';\n\n @state()\n value: string | boolean = this.checked ? this.optionChecked : this.optionUnchecked;\n\n constructor() {\n super();\n\n /** @internal */\n this.formSubmitController = new FormSubmitController(this);\n }\n\n render() {\n return html`\n <label part=\"label\">\n ${this.makeUncheckedOption()}\n <span part=\"control\">\n <span part=\"track\"></span>\n <span part=\"handle\"></span>\n </span>\n <input\n role=\"switch\"\n type=\"checkbox\"\n name=\"${this.name}\"\n aria-label=\"${this.label}\"\n aria-checked=${this.checked ? 'true' : 'false'}\n ?disabled=${this.disabled}\n ?checked=${this.checked}\n @change=${this.handleChange}\n />\n ${this.makeCheckedOption()}\n <span part=\"text\">${this.label}</span>\n </label>\n `;\n }\n\n handleChange() {\n this.checked = !this.checked;\n this.value = this.checked ? this.optionChecked : this.optionUnchecked;\n emitEvent(this, 'kemet-toggle-change', true);\n }\n\n makeUncheckedOption() {\n if (this.show) {\n return html`<span class=\"option\" part=\"unchecked\">${this.optionUnchecked}</span>`;\n }\n\n return null;\n }\n\n makeCheckedOption() {\n if (this.show) {\n return html`<span class=\"option\" part=\"checked\">${this.optionChecked}</span>`;\n }\n\n return null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kemet-toggle': KemetToggle\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './kemet-toggle';
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { html, render } from 'lit';
|
|
2
|
+
import { expect } from '@wdio/globals';
|
|
3
|
+
import { userEvent } from '@testing-library/user-event';
|
|
4
|
+
import { fireEvent, getByText, waitFor } from '@testing-library/dom';
|
|
5
|
+
import './kemet-toggle';
|
|
6
|
+
const templates = {
|
|
7
|
+
default: html `<kemet-toggle label="Label"></kemet-toggle>`,
|
|
8
|
+
checked: html `<kemet-toggle checked label="Label"></kemet-toggle>`,
|
|
9
|
+
showOptions: html `<kemet-toggle label="Label" show option-unchecked="No" option-checked="Yes"></kemet-toggle>`,
|
|
10
|
+
};
|
|
11
|
+
describe('Toggle', () => {
|
|
12
|
+
it('should toggle the switch when clicked', async () => {
|
|
13
|
+
render(templates.default, document.body);
|
|
14
|
+
const toggle = document.querySelector('kemet-toggle');
|
|
15
|
+
await waitFor(async () => {
|
|
16
|
+
const label = toggle.shadowRoot.querySelector('label');
|
|
17
|
+
const input = toggle.shadowRoot.querySelector('input');
|
|
18
|
+
await userEvent.click(label);
|
|
19
|
+
expect(toggle.checked).toBe(true);
|
|
20
|
+
fireEvent.blur(input);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
it('should toggle the switch when clicked and initially checked', async () => {
|
|
24
|
+
render(templates.checked, document.body);
|
|
25
|
+
const toggle = document.querySelector('kemet-toggle');
|
|
26
|
+
await waitFor(async () => {
|
|
27
|
+
const label = toggle.shadowRoot.querySelector('label');
|
|
28
|
+
const input = toggle.shadowRoot.querySelector('input');
|
|
29
|
+
await userEvent.click(label);
|
|
30
|
+
expect(toggle.checked).toBe(false);
|
|
31
|
+
fireEvent.blur(input);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
it('should show option labels', async () => {
|
|
35
|
+
render(templates.showOptions, document.body);
|
|
36
|
+
const kemetToggle = document.querySelector('kemet-toggle');
|
|
37
|
+
await waitFor(() => {
|
|
38
|
+
const label = kemetToggle.shadowRoot.querySelector('label');
|
|
39
|
+
const checkedText = getByText(label, 'Yes');
|
|
40
|
+
const uncheckedText = getByText(label, 'No');
|
|
41
|
+
expect(checkedText).toBeTruthy();
|
|
42
|
+
expect(uncheckedText).toBeTruthy();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../src/components/kemet-toggle/spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,gBAAgB,CAAC;AAExB,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,IAAI,CAAA,6CAA6C;IAC1D,OAAO,EAAE,IAAI,CAAA,qDAAqD;IAClE,WAAW,EAAE,IAAI,CAAA,6FAA6F;CAC/G,CAAC;AAEF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAEtD,MAAM,OAAO,CAAC,KAAK,IAAI,EAAE;YACvB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAEtD,MAAM,OAAO,CAAC,KAAK,IAAI,EAAE;YACvB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAE3D,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { html, render } from 'lit';\nimport { expect } from '@wdio/globals';\nimport { userEvent } from '@testing-library/user-event';\nimport { fireEvent, getByText, waitFor } from '@testing-library/dom';\n\nimport './kemet-toggle';\n\nconst templates = {\n default: html`<kemet-toggle label=\"Label\"></kemet-toggle>`,\n checked: html`<kemet-toggle checked label=\"Label\"></kemet-toggle>`,\n showOptions: html`<kemet-toggle label=\"Label\" show option-unchecked=\"No\" option-checked=\"Yes\"></kemet-toggle>`,\n};\n\ndescribe('Toggle', () => {\n it('should toggle the switch when clicked', async () => {\n render(templates.default, document.body);\n const toggle = document.querySelector('kemet-toggle');\n\n await waitFor(async () => {\n const label = toggle.shadowRoot.querySelector('label');\n const input = toggle.shadowRoot.querySelector('input');\n await userEvent.click(label);\n expect(toggle.checked).toBe(true);\n fireEvent.blur(input);\n });\n });\n\n it('should toggle the switch when clicked and initially checked', async () => {\n render(templates.checked, document.body);\n const toggle = document.querySelector('kemet-toggle');\n\n await waitFor(async () => {\n const label = toggle.shadowRoot.querySelector('label');\n const input = toggle.shadowRoot.querySelector('input');\n await userEvent.click(label);\n expect(toggle.checked).toBe(false);\n fireEvent.blur(input);\n });\n });\n\n it('should show option labels', async () => {\n render(templates.showOptions, document.body);\n const kemetToggle = document.querySelector('kemet-toggle');\n\n await waitFor(() => {\n const label = kemetToggle.shadowRoot.querySelector('label');\n const checkedText = getByText(label, 'Yes');\n const uncheckedText = getByText(label, 'No');\n expect(checkedText).toBeTruthy();\n expect(uncheckedText).toBeTruthy();\n });\n });\n});\n"]}
|
|
@@ -6,7 +6,7 @@ import '../../kemet-tabs/kemet-tab';
|
|
|
6
6
|
import '../../kemet-tabs/kemet-tab-panel';
|
|
7
7
|
declare const meta: Meta;
|
|
8
8
|
export default meta;
|
|
9
|
-
|
|
9
|
+
type Story = StoryObj;
|
|
10
10
|
export declare const Standard: Story;
|
|
11
11
|
export declare const Right: Story;
|
|
12
12
|
export declare const Bottom: Story;
|
|
@@ -4,7 +4,7 @@ import KemetPopper from '../kemet-popper/kemet-popper';
|
|
|
4
4
|
* @status stable
|
|
5
5
|
*
|
|
6
6
|
* @tagname kemet-tooltip
|
|
7
|
-
* @summary A tooltip is a Popper component that displays
|
|
7
|
+
* @summary A tooltip is a Popper component that displays a dynamic arrow pointing to the trigger.
|
|
8
8
|
*
|
|
9
9
|
* @slot trigger - Controls opening and closing the tooltip.
|
|
10
10
|
* @slot content - The contents of the tooltip.
|
|
@@ -17,7 +17,7 @@ import KemetPopper from '../kemet-popper/kemet-popper';
|
|
|
17
17
|
* @cssproperty --kemet-tooltip-border-size - The border size of the arrow
|
|
18
18
|
* @cssproperty --kemet-tooltip-rounded-tip - How much rounding the tip of the arrow should be. Zero is pointy
|
|
19
19
|
* @cssproperty --kemet-tooltip-background-color - The background color of the arrow
|
|
20
|
-
* @cssproperty --kemet-tooltip-border-color - The border color of the
|
|
20
|
+
* @cssproperty --kemet-tooltip-border-color - The border color of the arrow
|
|
21
21
|
* @cssproperty --kemet-tooltip-placement-offset - The offset of the arrow from the trigger
|
|
22
22
|
*
|
|
23
23
|
*/
|