@aquera/nile-elements 0.0.118 → 0.0.120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -0
- package/demo/variables.css +2 -2
- package/demo/variables_v2.css +2 -2
- package/dist/nile-accordion/nile-accordion.cjs.js +1 -1
- package/dist/nile-accordion/nile-accordion.cjs.js.map +1 -1
- package/dist/nile-accordion/nile-accordion.esm.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.cjs.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.cjs.js.map +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.esm.js +15 -6
- package/dist/nile-avatar/nile-avatar.cjs.js +1 -1
- package/dist/nile-avatar/nile-avatar.cjs.js.map +1 -1
- package/dist/nile-avatar/nile-avatar.esm.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js.map +1 -1
- package/dist/nile-badge/nile-badge.esm.js +1 -1
- package/dist/nile-breadcrumb/nile-breadcrumb.cjs.js +1 -1
- package/dist/nile-breadcrumb/nile-breadcrumb.cjs.js.map +1 -1
- package/dist/nile-breadcrumb/nile-breadcrumb.esm.js +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js.map +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.esm.js +2 -2
- package/dist/nile-button/nile-button.cjs.js +1 -1
- package/dist/nile-button/nile-button.cjs.js.map +1 -1
- package/dist/nile-button/nile-button.esm.js +1 -1
- package/dist/nile-button-toggle/nile-button-toggle.cjs.js +1 -1
- package/dist/nile-button-toggle/nile-button-toggle.cjs.js.map +1 -1
- package/dist/nile-button-toggle/nile-button-toggle.esm.js +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.cjs.js +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.cjs.js.map +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.esm.js +1 -1
- package/dist/nile-calendar/nile-calendar.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.css.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.css.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.css.esm.js +11 -12
- package/dist/nile-calendar/nile-calendar.esm.js +12 -4
- package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.test.esm.js +5 -5
- package/dist/nile-card/nile-card.cjs.js +1 -1
- package/dist/nile-card/nile-card.cjs.js.map +1 -1
- package/dist/nile-card/nile-card.esm.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.cjs.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.cjs.js.map +1 -1
- package/dist/nile-checkbox/nile-checkbox.esm.js +1 -1
- package/dist/nile-chip/nile-chip.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.cjs.js.map +1 -1
- package/dist/nile-chip/nile-chip.esm.js +6 -2
- package/dist/nile-chip/nile-chip.test.cjs.js.map +1 -1
- package/dist/nile-code-editor/nile-code-editor.cjs.js +1 -1
- package/dist/nile-code-editor/nile-code-editor.cjs.js.map +1 -1
- package/dist/nile-code-editor/nile-code-editor.esm.js +1 -1
- package/dist/nile-content-editor/nile-content-editor.cjs.js +1 -1
- package/dist/nile-content-editor/nile-content-editor.cjs.js.map +1 -1
- package/dist/nile-content-editor/nile-content-editor.esm.js +5 -5
- package/dist/nile-date-picker/nile-date-picker.cjs.js +1 -1
- package/dist/nile-date-picker/nile-date-picker.cjs.js.map +1 -1
- package/dist/nile-date-picker/nile-date-picker.esm.js +17 -6
- package/dist/nile-dialog/nile-dialog.cjs.js +1 -1
- package/dist/nile-dialog/nile-dialog.cjs.js.map +1 -1
- package/dist/nile-dialog/nile-dialog.esm.js +1 -1
- package/dist/nile-drawer/nile-drawer.cjs.js +1 -1
- package/dist/nile-drawer/nile-drawer.cjs.js.map +1 -1
- package/dist/nile-drawer/nile-drawer.esm.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.cjs.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.cjs.js.map +1 -1
- package/dist/nile-empty-state/nile-empty-state.esm.js +1 -1
- package/dist/nile-icon-button/nile-icon-button.cjs.js +1 -1
- package/dist/nile-icon-button/nile-icon-button.cjs.js.map +1 -1
- package/dist/nile-icon-button/nile-icon-button.esm.js +1 -1
- package/dist/nile-input/nile-input.cjs.js +1 -1
- package/dist/nile-input/nile-input.cjs.js.map +1 -1
- package/dist/nile-input/nile-input.esm.js +5 -4
- package/dist/nile-link/index.cjs.js +1 -1
- package/dist/nile-link/index.esm.js +1 -1
- package/dist/nile-link/nile-link.cjs.js +1 -1
- package/dist/nile-link/nile-link.cjs.js.map +1 -1
- package/dist/nile-link/nile-link.css.cjs.js +1 -1
- package/dist/nile-link/nile-link.css.cjs.js.map +1 -1
- package/dist/nile-link/nile-link.css.esm.js +1 -0
- package/dist/nile-link/nile-link.esm.js +6 -5
- package/dist/nile-link/nile-link.test.cjs.js +1 -1
- package/dist/nile-link/nile-link.test.cjs.js.map +1 -1
- package/dist/nile-link/nile-link.test.esm.js +1 -1
- package/dist/nile-list/nile-list.cjs.js +1 -1
- package/dist/nile-list/nile-list.cjs.js.map +1 -1
- package/dist/nile-list/nile-list.esm.js +1 -1
- package/dist/nile-list-item/nile-list-item.cjs.js +1 -1
- package/dist/nile-list-item/nile-list-item.cjs.js.map +1 -1
- package/dist/nile-list-item/nile-list-item.esm.js +1 -1
- package/dist/nile-menu/nile-menu.cjs.js +1 -1
- package/dist/nile-menu/nile-menu.cjs.js.map +1 -1
- package/dist/nile-menu/nile-menu.esm.js +5 -2
- package/dist/nile-menu-item/nile-menu-item.cjs.js +1 -1
- package/dist/nile-menu-item/nile-menu-item.cjs.js.map +1 -1
- package/dist/nile-menu-item/nile-menu-item.esm.js +1 -1
- package/dist/nile-option/nile-option.cjs.js +1 -1
- package/dist/nile-option/nile-option.cjs.js.map +1 -1
- package/dist/nile-option/nile-option.esm.js +1 -1
- package/dist/nile-popover/nile-popover.cjs.js +1 -1
- package/dist/nile-popover/nile-popover.cjs.js.map +1 -1
- package/dist/nile-popover/nile-popover.esm.js +2 -2
- package/dist/nile-popup/nile-popup.cjs.js +1 -1
- package/dist/nile-popup/nile-popup.cjs.js.map +1 -1
- package/dist/nile-popup/nile-popup.esm.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.cjs.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.cjs.js.map +1 -1
- package/dist/nile-radio-group/nile-radio-group.esm.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.test.cjs.js +2 -0
- package/dist/nile-radio-group/nile-radio-group.test.cjs.js.map +1 -0
- package/dist/nile-radio-group/nile-radio-group.test.esm.js +57 -0
- package/dist/nile-select/nile-select.cjs.js +1 -1
- package/dist/nile-select/nile-select.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.css.cjs.js +1 -1
- package/dist/nile-select/nile-select.css.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.css.esm.js +2 -2
- package/dist/nile-select/nile-select.esm.js +6 -4
- package/dist/nile-select/nile-select.test.cjs.js +2 -0
- package/dist/nile-select/nile-select.test.cjs.js.map +1 -0
- package/dist/nile-select/nile-select.test.esm.js +55 -0
- package/dist/nile-slide-toggle/nile-slide-toggle.cjs.js +1 -1
- package/dist/nile-slide-toggle/nile-slide-toggle.cjs.js.map +1 -1
- package/dist/nile-slide-toggle/nile-slide-toggle.css.cjs.js +1 -1
- package/dist/nile-slide-toggle/nile-slide-toggle.css.cjs.js.map +1 -1
- package/dist/nile-slide-toggle/nile-slide-toggle.css.esm.js +26 -5
- package/dist/nile-slide-toggle/nile-slide-toggle.esm.js +8 -6
- package/dist/nile-split-panel/nile-split-panel.cjs.js +1 -1
- package/dist/nile-split-panel/nile-split-panel.cjs.js.map +1 -1
- package/dist/nile-split-panel/nile-split-panel.esm.js +1 -1
- package/dist/nile-split-panel/nile-split-panel.test.cjs.js +2 -0
- package/dist/nile-split-panel/nile-split-panel.test.cjs.js.map +1 -0
- package/dist/nile-split-panel/nile-split-panel.test.esm.js +1 -0
- package/dist/nile-stepper/nile-stepper.cjs.js +1 -1
- package/dist/nile-stepper/nile-stepper.cjs.js.map +1 -1
- package/dist/nile-stepper/nile-stepper.esm.js +1 -1
- package/dist/nile-stepper/nile-stepper.test.cjs.js +1 -1
- package/dist/nile-stepper/nile-stepper.test.cjs.js.map +1 -1
- package/dist/nile-stepper/nile-stepper.test.esm.js +1 -1
- package/dist/nile-tab/nile-tab.cjs.js +1 -1
- package/dist/nile-tab/nile-tab.cjs.js.map +1 -1
- package/dist/nile-tab/nile-tab.esm.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.cjs.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.cjs.js.map +1 -1
- package/dist/nile-tab-group/nile-tab-group.esm.js +1 -1
- package/dist/nile-table-body/nile-table-body.cjs.js +1 -1
- package/dist/nile-table-body/nile-table-body.cjs.js.map +1 -1
- package/dist/nile-table-body/nile-table-body.esm.js +1 -1
- package/dist/nile-tag/nile-tag.cjs.js +1 -1
- package/dist/nile-tag/nile-tag.cjs.js.map +1 -1
- package/dist/nile-tag/nile-tag.esm.js +1 -1
- package/dist/nile-textarea/nile-textarea.cjs.js +1 -1
- package/dist/nile-textarea/nile-textarea.cjs.js.map +1 -1
- package/dist/nile-textarea/nile-textarea.esm.js +1 -1
- package/dist/nile-textarea/nile-textarea.test.cjs.js.map +1 -1
- package/dist/nile-toast/nile-toast.cjs.js +1 -1
- package/dist/nile-toast/nile-toast.cjs.js.map +1 -1
- package/dist/nile-toast/nile-toast.esm.js +1 -1
- package/dist/nile-tooltip/nile-tooltip.cjs.js +1 -1
- package/dist/nile-tooltip/nile-tooltip.cjs.js.map +1 -1
- package/dist/nile-tooltip/nile-tooltip.esm.js +1 -1
- package/dist/nile-tree/nile-tree.cjs.js +1 -1
- package/dist/nile-tree/nile-tree.cjs.js.map +1 -1
- package/dist/nile-tree/nile-tree.esm.js +1 -1
- package/dist/nile-tree/nile-tree.test.cjs.js +2 -0
- package/dist/nile-tree/nile-tree.test.cjs.js.map +1 -0
- package/dist/nile-tree/nile-tree.test.esm.js +1 -0
- package/dist/src/nile-accordion/nile-accordion.d.ts +1 -0
- package/dist/src/nile-accordion/nile-accordion.js +1 -0
- package/dist/src/nile-accordion/nile-accordion.js.map +1 -1
- package/dist/src/nile-auto-complete/nile-auto-complete.d.ts +1 -0
- package/dist/src/nile-auto-complete/nile-auto-complete.js +12 -2
- package/dist/src/nile-auto-complete/nile-auto-complete.js.map +1 -1
- package/dist/src/nile-avatar/nile-avatar.d.ts +1 -0
- package/dist/src/nile-avatar/nile-avatar.js +1 -0
- package/dist/src/nile-avatar/nile-avatar.js.map +1 -1
- package/dist/src/nile-badge/nile-badge.d.ts +1 -0
- package/dist/src/nile-badge/nile-badge.js +1 -0
- package/dist/src/nile-badge/nile-badge.js.map +1 -1
- package/dist/src/nile-breadcrumb/nile-breadcrumb.d.ts +1 -0
- package/dist/src/nile-breadcrumb/nile-breadcrumb.js +5 -0
- package/dist/src/nile-breadcrumb/nile-breadcrumb.js.map +1 -1
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.d.ts +1 -0
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js +1 -0
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js.map +1 -1
- package/dist/src/nile-button/nile-button.d.ts +1 -0
- package/dist/src/nile-button/nile-button.js +1 -0
- package/dist/src/nile-button/nile-button.js.map +1 -1
- package/dist/src/nile-button-toggle/nile-button-toggle.d.ts +1 -0
- package/dist/src/nile-button-toggle/nile-button-toggle.js +1 -0
- package/dist/src/nile-button-toggle/nile-button-toggle.js.map +1 -1
- package/dist/src/nile-button-toggle-group/nile-button-toggle-group.d.ts +1 -0
- package/dist/src/nile-button-toggle-group/nile-button-toggle-group.js +1 -0
- package/dist/src/nile-button-toggle-group/nile-button-toggle-group.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.css.js +9 -10
- package/dist/src/nile-calendar/nile-calendar.css.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.d.ts +6 -2
- package/dist/src/nile-calendar/nile-calendar.js +44 -3
- package/dist/src/nile-calendar/nile-calendar.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.test.d.ts +6 -0
- package/dist/src/nile-calendar/nile-calendar.test.js +6 -0
- package/dist/src/nile-calendar/nile-calendar.test.js.map +1 -1
- package/dist/src/nile-card/nile-card.d.ts +1 -0
- package/dist/src/nile-card/nile-card.js +1 -0
- package/dist/src/nile-card/nile-card.js.map +1 -1
- package/dist/src/nile-checkbox/nile-checkbox.d.ts +1 -0
- package/dist/src/nile-checkbox/nile-checkbox.js +1 -0
- package/dist/src/nile-checkbox/nile-checkbox.js.map +1 -1
- package/dist/src/nile-chip/nile-chip.d.ts +1 -0
- package/dist/src/nile-chip/nile-chip.js +5 -0
- package/dist/src/nile-chip/nile-chip.js.map +1 -1
- package/dist/src/nile-chip/nile-chip.test.js.map +1 -1
- package/dist/src/nile-code-editor/nile-code-editor.d.ts +1 -0
- package/dist/src/nile-code-editor/nile-code-editor.js +1 -0
- package/dist/src/nile-code-editor/nile-code-editor.js.map +1 -1
- package/dist/src/nile-content-editor/nile-content-editor.d.ts +1 -0
- package/dist/src/nile-content-editor/nile-content-editor.js +1 -0
- package/dist/src/nile-content-editor/nile-content-editor.js.map +1 -1
- package/dist/src/nile-date-picker/nile-date-picker.d.ts +3 -0
- package/dist/src/nile-date-picker/nile-date-picker.js +24 -5
- package/dist/src/nile-date-picker/nile-date-picker.js.map +1 -1
- package/dist/src/nile-dialog/nile-dialog.d.ts +1 -0
- package/dist/src/nile-dialog/nile-dialog.js +1 -0
- package/dist/src/nile-dialog/nile-dialog.js.map +1 -1
- package/dist/src/nile-drawer/nile-drawer.d.ts +1 -0
- package/dist/src/nile-drawer/nile-drawer.js +1 -0
- package/dist/src/nile-drawer/nile-drawer.js.map +1 -1
- package/dist/src/nile-empty-state/nile-empty-state.d.ts +1 -0
- package/dist/src/nile-empty-state/nile-empty-state.js +1 -0
- package/dist/src/nile-empty-state/nile-empty-state.js.map +1 -1
- package/dist/src/nile-icon-button/nile-icon-button.d.ts +1 -0
- package/dist/src/nile-icon-button/nile-icon-button.js +1 -0
- package/dist/src/nile-icon-button/nile-icon-button.js.map +1 -1
- package/dist/src/nile-input/nile-input.d.ts +1 -0
- package/dist/src/nile-input/nile-input.js +5 -3
- package/dist/src/nile-input/nile-input.js.map +1 -1
- package/dist/src/nile-link/nile-link.css.js +1 -0
- package/dist/src/nile-link/nile-link.css.js.map +1 -1
- package/dist/src/nile-link/nile-link.d.ts +2 -0
- package/dist/src/nile-link/nile-link.js +8 -2
- package/dist/src/nile-link/nile-link.js.map +1 -1
- package/dist/src/nile-list/nile-list.d.ts +1 -0
- package/dist/src/nile-list/nile-list.js +5 -0
- package/dist/src/nile-list/nile-list.js.map +1 -1
- package/dist/src/nile-list-item/nile-list-item.d.ts +1 -0
- package/dist/src/nile-list-item/nile-list-item.js +1 -0
- package/dist/src/nile-list-item/nile-list-item.js.map +1 -1
- package/dist/src/nile-menu/nile-menu.d.ts +1 -0
- package/dist/src/nile-menu/nile-menu.js +4 -0
- package/dist/src/nile-menu/nile-menu.js.map +1 -1
- package/dist/src/nile-menu-item/nile-menu-item.d.ts +2 -0
- package/dist/src/nile-menu-item/nile-menu-item.js +2 -0
- package/dist/src/nile-menu-item/nile-menu-item.js.map +1 -1
- package/dist/src/nile-option/nile-option.d.ts +2 -0
- package/dist/src/nile-option/nile-option.js +2 -0
- package/dist/src/nile-option/nile-option.js.map +1 -1
- package/dist/src/nile-popover/nile-popover.d.ts +1 -0
- package/dist/src/nile-popover/nile-popover.js +1 -0
- package/dist/src/nile-popover/nile-popover.js.map +1 -1
- package/dist/src/nile-popup/nile-popup.d.ts +2 -0
- package/dist/src/nile-popup/nile-popup.js +2 -0
- package/dist/src/nile-popup/nile-popup.js.map +1 -1
- package/dist/src/nile-radio-group/nile-radio-group.d.ts +1 -0
- package/dist/src/nile-radio-group/nile-radio-group.js +1 -0
- package/dist/src/nile-radio-group/nile-radio-group.js.map +1 -1
- package/dist/src/nile-radio-group/nile-radio-group.test.d.ts +2 -0
- package/dist/src/nile-radio-group/nile-radio-group.test.js +174 -0
- package/dist/src/nile-radio-group/nile-radio-group.test.js.map +1 -0
- package/dist/src/nile-select/nile-select.css.js +2 -2
- package/dist/src/nile-select/nile-select.css.js.map +1 -1
- package/dist/src/nile-select/nile-select.d.ts +1 -0
- package/dist/src/nile-select/nile-select.js +6 -37
- package/dist/src/nile-select/nile-select.js.map +1 -1
- package/dist/src/nile-select/nile-select.test.d.ts +6 -0
- package/dist/src/nile-select/nile-select.test.js +247 -0
- package/dist/src/nile-select/nile-select.test.js.map +1 -0
- package/dist/src/nile-slide-toggle/nile-slide-toggle.css.js +26 -5
- package/dist/src/nile-slide-toggle/nile-slide-toggle.css.js.map +1 -1
- package/dist/src/nile-slide-toggle/nile-slide-toggle.d.ts +3 -0
- package/dist/src/nile-slide-toggle/nile-slide-toggle.js +18 -1
- package/dist/src/nile-slide-toggle/nile-slide-toggle.js.map +1 -1
- package/dist/src/nile-split-panel/nile-split-panel.d.ts +1 -0
- package/dist/src/nile-split-panel/nile-split-panel.js +1 -0
- package/dist/src/nile-split-panel/nile-split-panel.js.map +1 -1
- package/dist/src/nile-split-panel/nile-split-panel.test.d.ts +1 -0
- package/dist/src/nile-split-panel/nile-split-panel.test.js +4 -0
- package/dist/src/nile-split-panel/nile-split-panel.test.js.map +1 -0
- package/dist/src/nile-stepper/nile-stepper.d.ts +1 -0
- package/dist/src/nile-stepper/nile-stepper.js +1 -0
- package/dist/src/nile-stepper/nile-stepper.js.map +1 -1
- package/dist/src/nile-stepper/nile-stepper.test.d.ts +4 -0
- package/dist/src/nile-stepper/nile-stepper.test.js +6 -164
- package/dist/src/nile-stepper/nile-stepper.test.js.map +1 -1
- package/dist/src/nile-tab/nile-tab.d.ts +1 -0
- package/dist/src/nile-tab/nile-tab.js +1 -0
- package/dist/src/nile-tab/nile-tab.js.map +1 -1
- package/dist/src/nile-tab-group/nile-tab-group.d.ts +1 -0
- package/dist/src/nile-tab-group/nile-tab-group.js +1 -0
- package/dist/src/nile-tab-group/nile-tab-group.js.map +1 -1
- package/dist/src/nile-table-body/nile-table-body.d.ts +1 -0
- package/dist/src/nile-table-body/nile-table-body.js +1 -0
- package/dist/src/nile-table-body/nile-table-body.js.map +1 -1
- package/dist/src/nile-tag/nile-tag.d.ts +1 -0
- package/dist/src/nile-tag/nile-tag.js +1 -0
- package/dist/src/nile-tag/nile-tag.js.map +1 -1
- package/dist/src/nile-textarea/nile-textarea.d.ts +1 -0
- package/dist/src/nile-textarea/nile-textarea.js +1 -0
- package/dist/src/nile-textarea/nile-textarea.js.map +1 -1
- package/dist/src/nile-textarea/nile-textarea.test.js.map +1 -1
- package/dist/src/nile-toast/nile-toast.d.ts +1 -0
- package/dist/src/nile-toast/nile-toast.js +1 -0
- package/dist/src/nile-toast/nile-toast.js.map +1 -1
- package/dist/src/nile-tooltip/nile-tooltip.d.ts +1 -0
- package/dist/src/nile-tooltip/nile-tooltip.js +1 -0
- package/dist/src/nile-tooltip/nile-tooltip.js.map +1 -1
- package/dist/src/nile-tree/nile-tree.d.ts +1 -0
- package/dist/src/nile-tree/nile-tree.js +1 -0
- package/dist/src/nile-tree/nile-tree.js.map +1 -1
- package/dist/src/nile-tree/nile-tree.test.d.ts +2 -0
- package/dist/src/nile-tree/nile-tree.test.js +5 -0
- package/dist/src/nile-tree/nile-tree.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-accordion/nile-accordion.ts +1 -0
- package/src/nile-auto-complete/nile-auto-complete.ts +13 -2
- package/src/nile-avatar/nile-avatar.ts +2 -0
- package/src/nile-badge/nile-badge.ts +2 -0
- package/src/nile-breadcrumb/nile-breadcrumb.ts +2 -0
- package/src/nile-breadcrumb-item/nile-breadcrumb-item.ts +2 -0
- package/src/nile-button/nile-button.ts +2 -0
- package/src/nile-button-toggle/nile-button-toggle.ts +2 -0
- package/src/nile-button-toggle-group/nile-button-toggle-group.ts +2 -0
- package/src/nile-calendar/nile-calendar.css.ts +9 -10
- package/src/nile-calendar/nile-calendar.test.ts +7 -0
- package/src/nile-calendar/nile-calendar.ts +43 -5
- package/src/nile-card/nile-card.ts +2 -0
- package/src/nile-checkbox/nile-checkbox.ts +2 -0
- package/src/nile-chip/nile-chip.test.ts +0 -1
- package/src/nile-chip/nile-chip.ts +6 -0
- package/src/nile-code-editor/nile-code-editor.ts +2 -0
- package/src/nile-content-editor/nile-content-editor.ts +2 -0
- package/src/nile-date-picker/nile-date-picker.ts +21 -5
- package/src/nile-dialog/nile-dialog.ts +2 -0
- package/src/nile-drawer/nile-drawer.ts +2 -0
- package/src/nile-empty-state/nile-empty-state.ts +2 -0
- package/src/nile-icon-button/nile-icon-button.ts +2 -0
- package/src/nile-input/nile-input.ts +7 -4
- package/src/nile-link/nile-link.css.ts +1 -0
- package/src/nile-link/nile-link.ts +7 -2
- package/src/nile-list/nile-list.ts +2 -0
- package/src/nile-list-item/nile-list-item.ts +2 -0
- package/src/nile-menu/nile-menu.ts +6 -0
- package/src/nile-menu-item/nile-menu-item.ts +3 -0
- package/src/nile-option/nile-option.ts +3 -0
- package/src/nile-popover/nile-popover.ts +2 -0
- package/src/nile-popup/nile-popup.ts +3 -0
- package/src/nile-radio-group/nile-radio-group.test.ts +215 -0
- package/src/nile-radio-group/nile-radio-group.ts +2 -0
- package/src/nile-select/nile-select.css.ts +2 -2
- package/src/nile-select/nile-select.test.ts +309 -0
- package/src/nile-select/nile-select.ts +7 -38
- package/src/nile-slide-toggle/nile-slide-toggle.css.ts +26 -5
- package/src/nile-slide-toggle/nile-slide-toggle.ts +17 -2
- package/src/nile-split-panel/nile-split-panel.test.ts +7 -0
- package/src/nile-split-panel/nile-split-panel.ts +2 -0
- package/src/nile-stepper/nile-stepper.test.ts +12 -174
- package/src/nile-stepper/nile-stepper.ts +2 -0
- package/src/nile-tab/nile-tab.ts +2 -0
- package/src/nile-tab-group/nile-tab-group.ts +2 -0
- package/src/nile-table-body/nile-table-body.ts +2 -0
- package/src/nile-tag/nile-tag.ts +2 -0
- package/src/nile-textarea/nile-textarea.test.ts +1 -1
- package/src/nile-textarea/nile-textarea.ts +2 -0
- package/src/nile-toast/nile-toast.ts +2 -0
- package/src/nile-tooltip/nile-tooltip.ts +2 -0
- package/src/nile-tree/nile-tree.test.ts +9 -0
- package/src/nile-tree/nile-tree.ts +2 -0
@@ -0,0 +1,247 @@
|
|
1
|
+
import { expect, fixture, html, oneEvent, elementUpdated } from '@open-wc/testing';
|
2
|
+
import './nile-select'; // Assuming the component is registered and imported
|
3
|
+
import '../nile-option/nile-option';
|
4
|
+
import '../nile-input/nile-input';
|
5
|
+
import '../nile-popup/nile-popup';
|
6
|
+
import '../nile-tag/nile-tag';
|
7
|
+
import '../nile-checkbox/nile-checkbox';
|
8
|
+
const wait = (ms = 50000) => new Promise(resolve => setTimeout(resolve, ms));
|
9
|
+
const keyboardEvent = new KeyboardEvent('keydown', {
|
10
|
+
code: 'Enter',
|
11
|
+
key: 'Enter',
|
12
|
+
charCode: 13,
|
13
|
+
keyCode: 13,
|
14
|
+
view: window,
|
15
|
+
bubbles: true
|
16
|
+
});
|
17
|
+
const mouseUpEvent = new MouseEvent("mouseup", {
|
18
|
+
bubbles: true,
|
19
|
+
cancelable: true,
|
20
|
+
view: window
|
21
|
+
});
|
22
|
+
describe('NileSelect Component', () => {
|
23
|
+
it('should render the placeholder when no value is selected', async () => {
|
24
|
+
const el = await fixture(html `<nile-select placeholder="Select an option..."></nile-select>`);
|
25
|
+
const displayInput = el.shadowRoot?.querySelector('.select__display-input');
|
26
|
+
expect(displayInput?.placeholder).to.equal('Select an option...');
|
27
|
+
});
|
28
|
+
it('should open the dropdown when clicked', async () => {
|
29
|
+
const el = await fixture(html `
|
30
|
+
<nile-select>
|
31
|
+
<nile-option value="option1">Option 1</nile-option>
|
32
|
+
</nile-select>
|
33
|
+
`);
|
34
|
+
const combobox = el.shadowRoot?.querySelector("div.select__combobox");
|
35
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
36
|
+
await elementUpdated(el);
|
37
|
+
const popup = el.shadowRoot?.querySelector('.select');
|
38
|
+
expect(popup?.classList.contains('select--open')).to.be.true;
|
39
|
+
});
|
40
|
+
it('should close the dropdown when clicked again', async () => {
|
41
|
+
const el = await fixture(html `
|
42
|
+
<nile-select>
|
43
|
+
<nile-option value="option1">Option 1</nile-option>
|
44
|
+
</nile-select>
|
45
|
+
`);
|
46
|
+
const combobox = el.shadowRoot?.querySelector("div.select__combobox");
|
47
|
+
// Open dropdown first
|
48
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
49
|
+
await elementUpdated(el);
|
50
|
+
expect(el.open).to.be.true;
|
51
|
+
// Click again to close dropdown
|
52
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
53
|
+
await elementUpdated(el);
|
54
|
+
expect(el.open).to.be.false;
|
55
|
+
});
|
56
|
+
it('should update the display label when an option is selected', async () => {
|
57
|
+
const el = await fixture(html `
|
58
|
+
<nile-select>
|
59
|
+
<nile-option value="option1">Option 1</nile-option>
|
60
|
+
<nile-option value="option2">Option 2</nile-option>
|
61
|
+
</nile-select>
|
62
|
+
`);
|
63
|
+
const combobox = el.shadowRoot?.querySelector("div.select__combobox");
|
64
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
65
|
+
await elementUpdated(el);
|
66
|
+
// Select the first option
|
67
|
+
const option1 = el.querySelector('nile-option[value="option1"]');
|
68
|
+
option1?.dispatchEvent(mouseUpEvent);
|
69
|
+
await elementUpdated(el);
|
70
|
+
const displayInput = el.shadowRoot?.querySelector('.select__display-input');
|
71
|
+
expect(displayInput?.value).to.equal('Option 1');
|
72
|
+
});
|
73
|
+
it('should handle multi-select and show selected tags', async () => {
|
74
|
+
const el = await fixture(html `
|
75
|
+
<nile-select multiple>
|
76
|
+
<nile-option value="option1">Option 1</nile-option>
|
77
|
+
<nile-option value="option2">Option 2</nile-option>
|
78
|
+
<nile-option value="option3">Option 3</nile-option>
|
79
|
+
</nile-select>
|
80
|
+
`);
|
81
|
+
const combobox = el.shadowRoot?.querySelector("div.select__combobox");
|
82
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
83
|
+
await elementUpdated(el);
|
84
|
+
// Select multiple options
|
85
|
+
const option1 = el.querySelector('nile-option[value="option1"]');
|
86
|
+
const option2 = el.querySelector('nile-option[value="option2"]');
|
87
|
+
option1?.dispatchEvent(mouseUpEvent);
|
88
|
+
option2?.dispatchEvent(mouseUpEvent);
|
89
|
+
await elementUpdated(el);
|
90
|
+
// Check if the tags are displayed
|
91
|
+
const tags = el.shadowRoot?.querySelectorAll('nile-tag');
|
92
|
+
expect(tags?.length).to.equal(2);
|
93
|
+
expect(tags?.[0].textContent?.trim()).to.equal('Option 1');
|
94
|
+
expect(tags?.[1].textContent?.trim()).to.equal('Option 2');
|
95
|
+
});
|
96
|
+
it('should clear selected value when clear button is clicked', async () => {
|
97
|
+
const el = await fixture(html `
|
98
|
+
<nile-select clearable>
|
99
|
+
<nile-option value="option1">Option 1</nile-option>
|
100
|
+
</nile-select>
|
101
|
+
`);
|
102
|
+
const combobox = el.shadowRoot?.querySelector("div.select__combobox");
|
103
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
104
|
+
await elementUpdated(el);
|
105
|
+
// Select an option
|
106
|
+
const option1 = el.querySelector('nile-option[value="option1"]');
|
107
|
+
option1?.click();
|
108
|
+
await elementUpdated(el);
|
109
|
+
// Clear the selected value
|
110
|
+
const clearButton = el.shadowRoot?.querySelector('.select__clear');
|
111
|
+
clearButton?.click();
|
112
|
+
await elementUpdated(el);
|
113
|
+
const displayInput = el.shadowRoot?.querySelector('.select__display-input');
|
114
|
+
expect(displayInput?.value).to.be.empty;
|
115
|
+
});
|
116
|
+
it('should emit nile-change event when value changes', async () => {
|
117
|
+
const el = await fixture(html `
|
118
|
+
<nile-select>
|
119
|
+
<nile-option value="option1">Option 1</nile-option>
|
120
|
+
<nile-option value="option2">Option 2</nile-option>
|
121
|
+
</nile-select>
|
122
|
+
`);
|
123
|
+
const listener = oneEvent(el, 'nile-change');
|
124
|
+
const combobox = el.shadowRoot?.querySelector("div.select__combobox");
|
125
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
126
|
+
await elementUpdated(el);
|
127
|
+
const option1 = el.querySelector('nile-option[value="option1"]');
|
128
|
+
option1?.dispatchEvent(mouseUpEvent);
|
129
|
+
const event = await listener;
|
130
|
+
expect(event.detail.value).to.equal('option1');
|
131
|
+
});
|
132
|
+
it('should not open when disabled', async () => {
|
133
|
+
const el = await fixture(html `
|
134
|
+
<nile-select disabled>
|
135
|
+
<nile-option value="option1">Option 1</nile-option>
|
136
|
+
</nile-select>
|
137
|
+
`);
|
138
|
+
const combobox = el.shadowRoot?.querySelector("div.select__combobox");
|
139
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
140
|
+
await elementUpdated(el);
|
141
|
+
const popup = el.shadowRoot?.querySelector('.select');
|
142
|
+
expect(popup?.classList.contains('select--open')).to.be.false;
|
143
|
+
});
|
144
|
+
it('should display the search bar if searchEnabled is true', async () => {
|
145
|
+
const el = await fixture(html `
|
146
|
+
<nile-select searchEnabled>
|
147
|
+
<nile-option value="option1">Option 1</nile-option>
|
148
|
+
<nile-option value="option2">Option 2</nile-option>
|
149
|
+
</nile-select>
|
150
|
+
`);
|
151
|
+
const combobox = el.shadowRoot?.querySelector("div.select__combobox");
|
152
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
153
|
+
await elementUpdated(el);
|
154
|
+
const searchBar = el.shadowRoot?.querySelector('.select__search');
|
155
|
+
expect(searchBar).to.exist;
|
156
|
+
});
|
157
|
+
it('should show "No results found" when searching for an invalid query', async () => {
|
158
|
+
const el = await fixture(html `
|
159
|
+
<nile-select searchEnabled>
|
160
|
+
<nile-option value="option1">Option 1</nile-option>
|
161
|
+
<nile-option value="option2">Option 2</nile-option>
|
162
|
+
</nile-select>
|
163
|
+
`);
|
164
|
+
const combobox = el.shadowRoot?.querySelector('.select__combobox');
|
165
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
166
|
+
await elementUpdated(el);
|
167
|
+
// Simulate typing an invalid search query
|
168
|
+
const searchInput = el.shadowRoot?.querySelector('.select__search nile-input');
|
169
|
+
if (searchInput) {
|
170
|
+
searchInput.value = 'invalid';
|
171
|
+
searchInput.dispatchEvent(new CustomEvent('nile-input', { detail: { value: 'invalid' } }));
|
172
|
+
}
|
173
|
+
await elementUpdated(el);
|
174
|
+
const noResultsMessage = el.shadowRoot?.querySelector('.select__no-results');
|
175
|
+
expect(noResultsMessage).to.exist;
|
176
|
+
expect(noResultsMessage?.textContent?.trim()).to.equal('No results found');
|
177
|
+
});
|
178
|
+
it('should allow selecting multiple options, display the selected count, and clear selections when clear button is clicked', async () => {
|
179
|
+
const el = await fixture(html `
|
180
|
+
<nile-select multiple clearable>
|
181
|
+
<nile-option value="1">Option 1</nile-option>
|
182
|
+
<nile-option value="2">Option 2</nile-option>
|
183
|
+
<nile-option value="3">Option 3</nile-option>
|
184
|
+
</nile-select>
|
185
|
+
`);
|
186
|
+
const combobox = el.shadowRoot?.querySelector('.select__combobox');
|
187
|
+
const options = el.querySelectorAll('nile-option');
|
188
|
+
const displayInput = el.shadowRoot?.querySelector('.select__display-input');
|
189
|
+
// Open the dropdown
|
190
|
+
combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
191
|
+
await el.updateComplete;
|
192
|
+
// Select the first two options
|
193
|
+
options[0].dispatchEvent(mouseUpEvent);
|
194
|
+
options[1].dispatchEvent(mouseUpEvent);
|
195
|
+
await el.updateComplete;
|
196
|
+
// Verify the display label reflects the number of selected options
|
197
|
+
expect(displayInput?.value).to.equal('2 selected');
|
198
|
+
// Check that the clearable button is visible
|
199
|
+
const clearButton = el.shadowRoot?.querySelector('.select__clear');
|
200
|
+
console.log(clearButton);
|
201
|
+
expect(clearButton).to.exist;
|
202
|
+
// Click the clear button
|
203
|
+
clearButton?.click();
|
204
|
+
await el.updateComplete;
|
205
|
+
// Verify the display label is cleared and placeholder is shown
|
206
|
+
expect(displayInput?.value).to.equal('');
|
207
|
+
// Verify that no options are selected
|
208
|
+
expect(Array.from(options).every(option => !option.selected)).to.be.true;
|
209
|
+
});
|
210
|
+
it('should allow selecting multiple options, clearing selections, and handling backspace to deselect the last selected option', async () => {
|
211
|
+
const el = await fixture(html `
|
212
|
+
<nile-select multiple clearable>
|
213
|
+
<nile-option value="option1">Option 1</nile-option>
|
214
|
+
<nile-option value="option2">Option 2</nile-option>
|
215
|
+
<nile-option value="option3">Option 3</nile-option>
|
216
|
+
</nile-select>
|
217
|
+
`);
|
218
|
+
const combobox = el.shadowRoot?.querySelector('div.select__combobox');
|
219
|
+
const options = el.querySelectorAll('nile-option');
|
220
|
+
const displayInput = el.shadowRoot?.querySelector('.select__display-input');
|
221
|
+
const clearButton = el.shadowRoot?.querySelector('.select__clear');
|
222
|
+
// Open the dropdown and select three options
|
223
|
+
combobox?.click();
|
224
|
+
await el.updateComplete;
|
225
|
+
options[0].dispatchEvent(mouseUpEvent);
|
226
|
+
options[1].dispatchEvent(mouseUpEvent);
|
227
|
+
options[2].dispatchEvent(mouseUpEvent);
|
228
|
+
await el.updateComplete;
|
229
|
+
// Verify that three options are selected
|
230
|
+
expect(displayInput?.value).to.equal('3 selected');
|
231
|
+
expect(Array.from(options).every(option => option.selected)).to.be.true;
|
232
|
+
// // Reopen dropdown, select three options again
|
233
|
+
// combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown
|
234
|
+
// await el.updateComplete;
|
235
|
+
// options[0].dispatchEvent(mouseUpEvent);
|
236
|
+
// options[1].dispatchEvent(mouseUpEvent);
|
237
|
+
options[2].dispatchEvent(mouseUpEvent);
|
238
|
+
await el.updateComplete;
|
239
|
+
// Verify only the first two options are selected
|
240
|
+
expect(options[0].selected).to.be.true;
|
241
|
+
expect(options[1].selected).to.be.true;
|
242
|
+
expect(options[2].selected).to.be.false;
|
243
|
+
// Verify display label reflects two selected options
|
244
|
+
expect(displayInput?.value).to.equal('2 selected');
|
245
|
+
});
|
246
|
+
});
|
247
|
+
//# sourceMappingURL=nile-select.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"nile-select.test.js","sourceRoot":"","sources":["../../../src/nile-select/nile-select.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture, html, oneEvent, elementUpdated } from '@open-wc/testing';\nimport './nile-select'; // Assuming the component is registered and imported\nimport NileSelect from './nile-select';\nimport { NileOption } from '../nile-option';\nimport { NileInput } from '../nile-input';\nimport '../nile-option/nile-option';\nimport '../nile-input/nile-input';\nimport '../nile-popup/nile-popup';\nimport '../nile-tag/nile-tag';\nimport '../nile-checkbox/nile-checkbox';\n\nconst wait=(ms:number=50000)=>new Promise(resolve => setTimeout(resolve, ms))\n\nconst keyboardEvent = new KeyboardEvent('keydown', {\n code: 'Enter',\n key: 'Enter',\n charCode: 13,\n keyCode: 13,\n view: window,\n bubbles: true\n});\n\nconst mouseUpEvent = new MouseEvent(\"mouseup\", {\n bubbles: true,\n cancelable: true,\n view: window\n});\n\ndescribe('NileSelect Component', () => {\n \n it('should render the placeholder when no value is selected', async () => {\n const el = await fixture<NileSelect>(html`<nile-select placeholder=\"Select an option...\"></nile-select>`);\n const displayInput = el.shadowRoot?.querySelector<HTMLInputElement>('.select__display-input');\n expect(displayInput?.placeholder).to.equal('Select an option...');\n });\n\n it('should open the dropdown when clicked', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select>\n <nile-option value=\"option1\">Option 1</nile-option>\n </nile-select>\n `);\n\n const combobox = el.shadowRoot?.querySelector<HTMLElement>(\"div.select__combobox\");\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await elementUpdated(el);\n\n const popup = el.shadowRoot?.querySelector('.select');\n expect(popup?.classList.contains('select--open')).to.be.true;\n });\n\n it('should close the dropdown when clicked again', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select>\n <nile-option value=\"option1\">Option 1</nile-option>\n </nile-select>\n `);\n\n const combobox = el.shadowRoot?.querySelector<HTMLElement>(\"div.select__combobox\");\n\n // Open dropdown first\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await elementUpdated(el);\n expect(el.open).to.be.true;\n\n // Click again to close dropdown\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await elementUpdated(el);\n expect(el.open).to.be.false;\n });\n\n it('should update the display label when an option is selected', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select>\n <nile-option value=\"option1\">Option 1</nile-option>\n <nile-option value=\"option2\">Option 2</nile-option>\n </nile-select>\n `);\n\n const combobox = el.shadowRoot?.querySelector<HTMLElement>(\"div.select__combobox\");\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await elementUpdated(el);\n\n // Select the first option\n const option1 = el.querySelector<NileOption>('nile-option[value=\"option1\"]');\n option1?.dispatchEvent(mouseUpEvent);\n await elementUpdated(el);\n\n const displayInput = el.shadowRoot?.querySelector<HTMLInputElement>('.select__display-input');\n expect(displayInput?.value).to.equal('Option 1');\n });\n\n it('should handle multi-select and show selected tags', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select multiple>\n <nile-option value=\"option1\">Option 1</nile-option>\n <nile-option value=\"option2\">Option 2</nile-option>\n <nile-option value=\"option3\">Option 3</nile-option>\n </nile-select>\n `);\n\n const combobox = el.shadowRoot?.querySelector<HTMLElement>(\"div.select__combobox\");\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await elementUpdated(el);\n\n // Select multiple options\n const option1 = el.querySelector<NileOption>('nile-option[value=\"option1\"]');\n const option2 = el.querySelector<NileOption>('nile-option[value=\"option2\"]');\n \n option1?.dispatchEvent(mouseUpEvent);\n option2?.dispatchEvent(mouseUpEvent);\n await elementUpdated(el);\n\n // Check if the tags are displayed\n const tags = el.shadowRoot?.querySelectorAll('nile-tag');\n expect(tags?.length).to.equal(2);\n expect(tags?.[0].textContent?.trim()).to.equal('Option 1');\n expect(tags?.[1].textContent?.trim()).to.equal('Option 2');\n });\n\n it('should clear selected value when clear button is clicked', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select clearable>\n <nile-option value=\"option1\">Option 1</nile-option>\n </nile-select>\n `);\n\n const combobox = el.shadowRoot?.querySelector<HTMLElement>(\"div.select__combobox\");\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await elementUpdated(el);\n\n // Select an option\n const option1 = el.querySelector<NileOption>('nile-option[value=\"option1\"]');\n option1?.click();\n await elementUpdated(el);\n\n // Clear the selected value\n const clearButton = el.shadowRoot?.querySelector<HTMLButtonElement>('.select__clear');\n clearButton?.click();\n await elementUpdated(el);\n\n const displayInput = el.shadowRoot?.querySelector<HTMLInputElement>('.select__display-input');\n expect(displayInput?.value).to.be.empty;\n });\n\n it('should emit nile-change event when value changes', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select>\n <nile-option value=\"option1\">Option 1</nile-option>\n <nile-option value=\"option2\">Option 2</nile-option>\n </nile-select>\n `);\n\n const listener = oneEvent(el, 'nile-change');\n const combobox = el.shadowRoot?.querySelector<HTMLElement>(\"div.select__combobox\");\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await elementUpdated(el);\n\n const option1 = el.querySelector<NileOption>('nile-option[value=\"option1\"]');\n option1?.dispatchEvent(mouseUpEvent);\n \n const event = await listener;\n expect(event.detail.value).to.equal('option1');\n });\n\n it('should not open when disabled', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select disabled>\n <nile-option value=\"option1\">Option 1</nile-option>\n </nile-select>\n `);\n\n const combobox = el.shadowRoot?.querySelector<HTMLElement>(\"div.select__combobox\");\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await elementUpdated(el);\n\n const popup = el.shadowRoot?.querySelector('.select');\n expect(popup?.classList.contains('select--open')).to.be.false;\n });\n\n it('should display the search bar if searchEnabled is true', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select searchEnabled>\n <nile-option value=\"option1\">Option 1</nile-option>\n <nile-option value=\"option2\">Option 2</nile-option>\n </nile-select>\n `);\n\n const combobox = el.shadowRoot?.querySelector<HTMLElement>(\"div.select__combobox\");\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await elementUpdated(el);\n\n const searchBar = el.shadowRoot?.querySelector('.select__search');\n expect(searchBar).to.exist;\n });\n\n it('should show \"No results found\" when searching for an invalid query', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select searchEnabled>\n <nile-option value=\"option1\">Option 1</nile-option>\n <nile-option value=\"option2\">Option 2</nile-option>\n </nile-select>\n `);\n\n const combobox = el.shadowRoot?.querySelector<HTMLElement>('.select__combobox');\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await elementUpdated(el);\n\n // Simulate typing an invalid search query\n const searchInput = el.shadowRoot?.querySelector<NileInput>('.select__search nile-input');\n if (searchInput) {\n searchInput.value = 'invalid';\n searchInput.dispatchEvent(new CustomEvent('nile-input',{detail:{value:'invalid'}}));\n }\n await elementUpdated(el);\n\n const noResultsMessage = el.shadowRoot?.querySelector('.select__no-results');\n expect(noResultsMessage).to.exist;\n expect(noResultsMessage?.textContent?.trim()).to.equal('No results found');\n });\n\n\n it('should allow selecting multiple options, display the selected count, and clear selections when clear button is clicked', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select multiple clearable>\n <nile-option value=\"1\">Option 1</nile-option>\n <nile-option value=\"2\">Option 2</nile-option>\n <nile-option value=\"3\">Option 3</nile-option>\n </nile-select>\n `);\n\n const combobox = el.shadowRoot?.querySelector<HTMLElement>('.select__combobox');\n const options = el.querySelectorAll('nile-option');\n const displayInput = el.shadowRoot?.querySelector<NileInput>('.select__display-input');\n\n // Open the dropdown\n combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n await el.updateComplete;\n\n // Select the first two options\n options[0].dispatchEvent(mouseUpEvent);\n options[1].dispatchEvent(mouseUpEvent);\n await el.updateComplete;\n\n // Verify the display label reflects the number of selected options\n expect(displayInput?.value).to.equal('2 selected');\n\n // Check that the clearable button is visible\n const clearButton = el.shadowRoot?.querySelector<HTMLElement>('.select__clear');\n console.log(clearButton)\n expect(clearButton).to.exist;\n\n // Click the clear button\n clearButton?.click();\n await el.updateComplete;\n\n // Verify the display label is cleared and placeholder is shown\n expect(displayInput?.value).to.equal('');\n\n // Verify that no options are selected\n expect(Array.from(options).every(option => !option.selected)).to.be.true;\n });\n\n it('should allow selecting multiple options, clearing selections, and handling backspace to deselect the last selected option', async () => {\n const el = await fixture<NileSelect>(html`\n <nile-select multiple clearable>\n <nile-option value=\"option1\">Option 1</nile-option>\n <nile-option value=\"option2\">Option 2</nile-option>\n <nile-option value=\"option3\">Option 3</nile-option>\n </nile-select>\n `);\n\n const combobox = el.shadowRoot?.querySelector<HTMLElement>('div.select__combobox');\n const options = el.querySelectorAll('nile-option');\n const displayInput = el.shadowRoot?.querySelector<NileInput>('.select__display-input');\n const clearButton = el.shadowRoot?.querySelector<HTMLButtonElement>('.select__clear');\n\n // Open the dropdown and select three options\n combobox?.click();\n await el.updateComplete;\n \n options[0].dispatchEvent(mouseUpEvent);\n options[1].dispatchEvent(mouseUpEvent);\n options[2].dispatchEvent(mouseUpEvent);\n await el.updateComplete;\n\n // Verify that three options are selected\n expect(displayInput?.value).to.equal('3 selected');\n expect(Array.from(options).every(option => option.selected)).to.be.true;\n\n // // Reopen dropdown, select three options again\n // combobox?.dispatchEvent(keyboardEvent); // Simulate click to open the dropdown\n // await el.updateComplete;\n\n // options[0].dispatchEvent(mouseUpEvent);\n // options[1].dispatchEvent(mouseUpEvent);\n options[2].dispatchEvent(mouseUpEvent);\n await el.updateComplete;\n\n // Verify only the first two options are selected\n expect(options[0].selected).to.be.true;\n expect(options[1].selected).to.be.true;\n expect(options[2].selected).to.be.false;\n\n // Verify display label reflects two selected options\n expect(displayInput?.value).to.equal('2 selected');\n });\n\n});\n"]}
|
@@ -1,8 +1,20 @@
|
|
1
1
|
import { css } from 'lit';
|
2
2
|
export default css `
|
3
|
+
:host{
|
4
|
+
--slide-toggle-width:auto;
|
5
|
+
display:inline-block;
|
6
|
+
width:var(--slide-toggle-width);
|
7
|
+
}
|
8
|
+
|
3
9
|
.nile-slide-toggle {
|
4
10
|
display: inline-flex;
|
5
11
|
align-items: baseline;
|
12
|
+
justify-content:space-between;
|
13
|
+
width:100%;
|
14
|
+
}
|
15
|
+
|
16
|
+
.nile-slide-toggle--reverse{
|
17
|
+
flex-direction:row-reverse;
|
6
18
|
}
|
7
19
|
|
8
20
|
.nile-slide-toggle__switch {
|
@@ -12,24 +24,33 @@ export default css `
|
|
12
24
|
width: 36px;
|
13
25
|
height: 20px;
|
14
26
|
line-height: 22px;
|
27
|
+
}
|
28
|
+
|
29
|
+
.nile-slide-toggle__switch--left{
|
15
30
|
margin-right: 8px;
|
16
31
|
}
|
17
32
|
|
33
|
+
.nile-slide-toggle__switch--right{
|
34
|
+
margin-left: 8px;
|
35
|
+
}
|
36
|
+
|
18
37
|
.nile-slide-toggle__label {
|
19
38
|
display: flex;
|
20
39
|
flex-direction: column;
|
21
|
-
|
22
|
-
color: var(--nile-colors-gray-light-mode-700);
|
40
|
+
gap: 2px;
|
23
41
|
font-family: var(--nile-font-family-serif);
|
24
|
-
|
42
|
+
letter-spacing: 0.2px;
|
25
43
|
font-style: normal;
|
44
|
+
color: var(--nile-colors-dark-900);
|
45
|
+
font-size: 14px;
|
26
46
|
font-weight: 500;
|
27
47
|
line-height: 20px;
|
28
|
-
letter-spacing: 0.2px;
|
29
|
-
gap: 2px;
|
30
48
|
}
|
31
49
|
|
32
50
|
.nile-slide-toggle__sublabel {
|
51
|
+
font-family: var(--nile-font-family-serif);
|
52
|
+
letter-spacing: 0.2px;
|
53
|
+
font-style: normal;
|
33
54
|
color: var(--nile-colors-gray-light-mode-600);
|
34
55
|
font-size: 12px;
|
35
56
|
font-weight: 400;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"nile-slide-toggle.css.js","sourceRoot":"","sources":["../../../src/nile-slide-toggle/nile-slide-toggle.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA
|
1
|
+
{"version":3,"file":"nile-slide-toggle.css.js","sourceRoot":"","sources":["../../../src/nile-slide-toggle/nile-slide-toggle.css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmIjB,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport default css`\n :host{\n --slide-toggle-width:auto;\n display:inline-block;\n width:var(--slide-toggle-width);\n }\n\n .nile-slide-toggle {\n display: inline-flex;\n align-items: baseline;\n justify-content:space-between;\n width:100%;\n }\n\n .nile-slide-toggle--reverse{\n flex-direction:row-reverse;\n }\n\n .nile-slide-toggle__switch {\n flex: 0 0 auto;\n position: relative;\n display: inline-block;\n width: 36px;\n height: 20px;\n line-height: 22px;\n }\n\n .nile-slide-toggle__switch--left{\n margin-right: 8px;\n }\n\n .nile-slide-toggle__switch--right{\n margin-left: 8px;\n }\n\n .nile-slide-toggle__label {\n display: flex;\n flex-direction: column;\n gap: 2px;\n font-family: var(--nile-font-family-serif);\n letter-spacing: 0.2px;\n font-style: normal;\n color: var(--nile-colors-dark-900);\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n }\n\n .nile-slide-toggle__sublabel {\n font-family: var(--nile-font-family-serif);\n letter-spacing: 0.2px;\n font-style: normal;\n color: var(--nile-colors-gray-light-mode-600);\n font-size: 12px;\n font-weight: 400;\n line-height: 18px;\n }\n\n .nile-slide-toggle__switch input {\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .nile-slide-toggle__slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: var(--nile-slide-toggle-color-background-inactive);\n transition: 0.4s;\n border-radius: 34px;\n }\n\n .nile-slide-toggle__slider:active {\n box-shadow: 0px 0px 0px 1px rgba(133, 170, 209, 0.54);\n }\n\n .nile-slide-toggle__slider:focus {\n box-shadow: 0px 0px 0px 1px rgba(133, 170, 209, 0.54);\n }\n\n .nile-slide-toggle__slider:before {\n position: absolute;\n content: '';\n height: 16px;\n width: 16px;\n bottom: 2px;\n left: 2px;\n background-color: var(--nile-slide-toggle-color-indicator);\n transition: 0.4s;\n border-radius: 50%;\n }\n\n .nile-slide-toggle__switch input:checked + .nile-slide-toggle__slider {\n background-color: var(--nile-slide-toggle-color-background-active);\n }\n\n .nile-slide-toggle__switch input:focus + .nile-slide-toggle__slider {\n box-shadow: 0 0 1px var(--nile-slide-toggle-color-background-active);\n }\n\n .nile-slide-toggle__switch input:checked + .nile-slide-toggle__slider:before {\n transform: translateX(16px);\n }\n\n .nile-slide-toggle__slider.round {\n border-radius: 20px;\n }\n\n .nile-slide-toggle__slider.round:before {\n border-radius: 50%;\n }\n\n .nile-slide--disabled .nile-slide-toggle__slider {\n background-color: #f2f4f7;\n }\n\n .nile-slide--disabled .nile-slide-toggle__switch {\n pointer-events: none;\n cursor: not-allowed;\n }\n\n .nile-slide--disabled\n .nile-slide-toggle__switch\n input:checked\n + .nile-slide-toggle__slider {\n background-color: #f2f4f7;\n }\n`;\n"]}
|
@@ -2,9 +2,12 @@ import { CSSResultGroup } from 'lit';
|
|
2
2
|
import NileElement from '../internal/nile-element';
|
3
3
|
export declare class NileSlideToggle extends NileElement {
|
4
4
|
static styles: CSSResultGroup;
|
5
|
+
protected BUBBLES: boolean;
|
5
6
|
label: string;
|
6
7
|
sublabel: string;
|
8
|
+
textPosition: 'left' | 'right';
|
7
9
|
isChecked: boolean;
|
10
|
+
fullWidth: boolean;
|
8
11
|
disabled: boolean;
|
9
12
|
helpText: string;
|
10
13
|
errorMessage: string;
|
@@ -6,9 +6,12 @@ import { classMap } from 'lit/directives/class-map.js';
|
|
6
6
|
let NileSlideToggle = class NileSlideToggle extends NileElement {
|
7
7
|
constructor() {
|
8
8
|
super(...arguments);
|
9
|
+
this.BUBBLES = false;
|
9
10
|
this.label = '';
|
10
11
|
this.sublabel = '';
|
12
|
+
this.textPosition = 'right';
|
11
13
|
this.isChecked = false;
|
14
|
+
this.fullWidth = false;
|
12
15
|
this.disabled = false;
|
13
16
|
this.helpText = '';
|
14
17
|
this.errorMessage = '';
|
@@ -16,6 +19,7 @@ let NileSlideToggle = class NileSlideToggle extends NileElement {
|
|
16
19
|
connectedCallback() {
|
17
20
|
super.connectedCallback();
|
18
21
|
this.emit('nile-init');
|
22
|
+
this.style.setProperty('--slide-toggle-width', this.fullWidth ? '100%' : 'auto');
|
19
23
|
}
|
20
24
|
disconnectedCallback() {
|
21
25
|
super.disconnectedCallback();
|
@@ -34,9 +38,16 @@ let NileSlideToggle = class NileSlideToggle extends NileElement {
|
|
34
38
|
class=${classMap({
|
35
39
|
'nile-slide-toggle': true,
|
36
40
|
'nile-slide--disabled': this.disabled,
|
41
|
+
'nile-slide-toggle--reverse': this.textPosition == 'left'
|
37
42
|
})}
|
38
43
|
>
|
39
|
-
<label
|
44
|
+
<label
|
45
|
+
class="${classMap({
|
46
|
+
'nile-slide-toggle__switch': true,
|
47
|
+
'nile-slide-toggle__switch--left': this.textPosition == 'right',
|
48
|
+
'nile-slide-toggle__switch--right': this.textPosition == 'left',
|
49
|
+
})}"
|
50
|
+
class="nile-slide-toggle__switch">
|
40
51
|
<input
|
41
52
|
type="checkbox"
|
42
53
|
.checked=${this.isChecked}
|
@@ -69,9 +80,15 @@ __decorate([
|
|
69
80
|
__decorate([
|
70
81
|
property({ type: String })
|
71
82
|
], NileSlideToggle.prototype, "sublabel", void 0);
|
83
|
+
__decorate([
|
84
|
+
property({ type: String, })
|
85
|
+
], NileSlideToggle.prototype, "textPosition", void 0);
|
72
86
|
__decorate([
|
73
87
|
property({ type: Boolean, reflect: true })
|
74
88
|
], NileSlideToggle.prototype, "isChecked", void 0);
|
89
|
+
__decorate([
|
90
|
+
property({ type: Boolean, reflect: true })
|
91
|
+
], NileSlideToggle.prototype, "fullWidth", void 0);
|
75
92
|
__decorate([
|
76
93
|
property({ type: Boolean, reflect: true })
|
77
94
|
], NileSlideToggle.prototype, "disabled", void 0);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"nile-slide-toggle.js","sourceRoot":"","sources":["../../../src/nile-slide-toggle/nile-slide-toggle.ts"],"names":[],"mappings":";AACA,OAAO,EAAc,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAGhD,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,WAAW;IAAzC;;
|
1
|
+
{"version":3,"file":"nile-slide-toggle.js","sourceRoot":"","sources":["../../../src/nile-slide-toggle/nile-slide-toggle.ts"],"names":[],"mappings":"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","sourcesContent":["import { CSSResultGroup, PropertyValues } from 'lit';\nimport { LitElement, html, property, customElement } from 'lit-element';\nimport styles from './nile-slide-toggle.css';\nimport NileElement from '../internal/nile-element';\nimport { classMap } from 'lit/directives/class-map.js';\n\n@customElement('nile-slide-toggle')\nexport class NileSlideToggle extends NileElement {\n public static styles: CSSResultGroup = styles;\n\n protected override BUBBLES: boolean=false;\n\n @property({ type: String }) label = '';\n\n @property({ type: String }) sublabel = '';\n\n @property({ type: String, }) textPosition:'left' | 'right' = 'right';\n\n @property({ type: Boolean, reflect: true }) isChecked = false;\n\n @property({ type: Boolean, reflect: true }) fullWidth = false;\n\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @property({ attribute: 'help-text', reflect: true }) helpText = '';\n\n @property({ attribute: 'error-message', reflect: true }) errorMessage = '';\n\n connectedCallback() {\n super.connectedCallback();\n this.emit('nile-init');\n this.style.setProperty('--slide-toggle-width',this.fullWidth?'100%':'auto')\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.emit('nile-destroy');\n }\n\n toggleValue() {\n this.isChecked = !this.isChecked;\n this.emit('change',{ checked: this.isChecked });\n this.emit('nile-change',{ checked: this.isChecked });\n }\n\n public render() {\n const hasHelpText = this.helpText ? true : false;\n const hasErrorMessage = this.errorMessage ? true : false;\n\n return html`\n <div\n class=${classMap({\n 'nile-slide-toggle': true,\n 'nile-slide--disabled': this.disabled,\n 'nile-slide-toggle--reverse':this.textPosition=='left'\n })}\n >\n <label \n class=\"${classMap({\n 'nile-slide-toggle__switch':true,\n 'nile-slide-toggle__switch--left':this.textPosition=='right',\n 'nile-slide-toggle__switch--right':this.textPosition=='left',\n })}\"\n class=\"nile-slide-toggle__switch\">\n <input\n type=\"checkbox\"\n .checked=${this.isChecked}\n @change=${this.toggleValue}\n />\n <span class=\"nile-slide-toggle__slider\"></span>\n </label>\n <span class=\"nile-slide-toggle__label\">\n <span>${this.label}</span>\n <span class=\"nile-slide-toggle__sublabel\">${this.sublabel}</span>\n </span>\n </div>\n ${hasHelpText\n ? html` <nile-form-help-text>${this.helpText}</nile-form-help-text> `\n : ``}\n ${hasErrorMessage\n ? html`\n <nile-form-error-message\n >${this.errorMessage}</nile-form-error-message\n >\n `\n : ``}\n `;\n }\n}\n"]}
|
@@ -36,6 +36,7 @@ import { watch } from '../internal/watch';
|
|
36
36
|
let NileSplitPanel = class NileSplitPanel extends NileElement {
|
37
37
|
constructor() {
|
38
38
|
super(...arguments);
|
39
|
+
this.BUBBLES = false;
|
39
40
|
/**
|
40
41
|
* The current position of the divider from the primary panel's edge as a percentage 0-100. Defaults to 50% of the
|
41
42
|
* container's initial size.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"nile-split-panel.js","sourceRoot":"","sources":["../../../src/nile-split-panel/nile-split-panel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {LitElement, CSSResultArray, TemplateResult} from 'lit-element';\nimport {styles} from './nile-split-panel.css';\nimport NileElement from '../internal/nile-element';\n\n\nimport { clamp } from '../internal/math';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { drag } from '../internal/drag';\nimport { html } from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { watch } from '../internal/watch';\nimport type { CSSResultGroup } from 'lit';\n\n/**\n * @summary Split panels display two adjacent panels, allowing the user to reposition them.\n *\n * @event nile-reposition - Emitted when the divider's position changes.\n *\n * @slot start - Content to place in the start panel.\n * @slot end - Content to place in the end panel.\n * @slot divider - The divider. Useful for slotting in a custom icon that renders as a handle.\n *\n * @csspart start - The start panel.\n * @csspart end - The end panel.\n * @csspart panel - Targets both the start and end panels.\n * @csspart divider - The divider that separates the start and end panels.\n *\n * @cssproperty [--divider-width=4px] - The width of the visible divider.\n * @cssproperty [--divider-hit-area=12px] - The invisible region around the divider where dragging can occur. This is\n * usually wider than the divider to facilitate easier dragging.\n * @cssproperty [--min=0] - The minimum allowed size of the primary panel.\n * @cssproperty [--max=100%] - The maximum allowed size of the primary panel.\n */\n@customElement('nile-split-panel')\nexport class NileSplitPanel extends NileElement {\n\n\tstatic styles: CSSResultGroup = styles;\n\n private cachedPositionInPixels: number;\n private resizeObserver: ResizeObserver;\n private size: number;\n\n @query('.divider') divider: HTMLElement;\n\n /**\n * The current position of the divider from the primary panel's edge as a percentage 0-100. Defaults to 50% of the\n * container's initial size.\n */\n @property({ type: Number, reflect: true }) position = 50;\n\n /** The current position of the divider from the primary panel's edge in pixels. */\n @property({ attribute: 'position-in-pixels', type: Number }) positionInPixels: number;\n\n /** Draws the split panel in a vertical orientation with the start and end panels stacked. */\n @property({ type: Boolean, reflect: true }) vertical = false;\n\n /** Disables resizing. Note that the position may still change as a result of resizing the host element. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /**\n * If no primary panel is designated, both panels will resize proportionally when the host element is resized. If a\n * primary panel is designated, it will maintain its size and the other panel will grow or shrink as needed when the\n * host element is resized.\n */\n @property() primary?: 'start' | 'end';\n\n /**\n * One or more space-separated values at which the divider should snap. Values can be in pixels or percentages, e.g.\n * `\"100px 50%\"`.\n */\n @property() snap?: string;\n\n /** How close the divider must be to a snap point until snapping occurs. */\n @property({ type: Number, attribute: 'snap-threshold' }) snapThreshold = 12;\n\n connectedCallback() {\n super.connectedCallback();\n this.resizeObserver = new ResizeObserver(entries => this.handleResize(entries));\n this.updateComplete.then(() => this.resizeObserver.observe(this));\n\n this.detectSize();\n this.cachedPositionInPixels = this.percentageToPixels(this.position);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.resizeObserver.unobserve(this);\n }\n\n private detectSize() {\n const { width, height } = this.getBoundingClientRect();\n this.size = this.vertical ? height : width;\n }\n\n private percentageToPixels(value: number) {\n return this.size * (value / 100);\n }\n\n private pixelsToPercentage(value: number) {\n return (value / this.size) * 100;\n }\n\n private handleDrag(event: PointerEvent) {\n const isRtl = false;\n\n if (this.disabled) {\n return;\n }\n\n // Prevent text selection when dragging\n if (event.cancelable) {\n event.preventDefault();\n }\n\n drag(this, {\n onMove: (x, y) => {\n let newPositionInPixels = this.vertical ? y : x;\n\n // Flip for end panels\n if (this.primary === 'end') {\n newPositionInPixels = this.size - newPositionInPixels;\n }\n\n // Check snap points\n if (this.snap) {\n const snaps = this.snap.split(' ');\n\n snaps.forEach(value => {\n let snapPoint: number;\n\n if (value.endsWith('%')) {\n snapPoint = this.size * (parseFloat(value) / 100);\n } else {\n snapPoint = parseFloat(value);\n }\n\n if (isRtl && !this.vertical) {\n snapPoint = this.size - snapPoint;\n }\n\n if (\n newPositionInPixels >= snapPoint - this.snapThreshold &&\n newPositionInPixels <= snapPoint + this.snapThreshold\n ) {\n newPositionInPixels = snapPoint;\n }\n });\n }\n\n this.position = clamp(this.pixelsToPercentage(newPositionInPixels), 0, 100);\n },\n initialEvent: event\n });\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n if (this.disabled) {\n return;\n }\n\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n let newPosition = this.position;\n const incr = (event.shiftKey ? 10 : 1) * (this.primary === 'end' ? -1 : 1);\n\n event.preventDefault();\n\n if ((event.key === 'ArrowLeft' && !this.vertical) || (event.key === 'ArrowUp' && this.vertical)) {\n newPosition -= incr;\n }\n\n if ((event.key === 'ArrowRight' && !this.vertical) || (event.key === 'ArrowDown' && this.vertical)) {\n newPosition += incr;\n }\n\n if (event.key === 'Home') {\n newPosition = this.primary === 'end' ? 100 : 0;\n }\n\n if (event.key === 'End') {\n newPosition = this.primary === 'end' ? 0 : 100;\n }\n\n this.position = clamp(newPosition, 0, 100);\n }\n }\n\n private handleResize(entries: ResizeObserverEntry[]) {\n const { width, height } = entries[0].contentRect;\n this.size = this.vertical ? height : width;\n\n // Resize when a primary panel is set\n if (this.primary) {\n this.position = this.pixelsToPercentage(this.cachedPositionInPixels);\n }\n }\n\n @watch('position')\n handlePositionChange() {\n this.cachedPositionInPixels = this.percentageToPixels(this.position);\n this.positionInPixels = this.percentageToPixels(this.position);\n this.emit('nile-reposition');\n }\n\n @watch('positionInPixels')\n handlePositionInPixelsChange() {\n this.position = this.pixelsToPercentage(this.positionInPixels);\n }\n\n @watch('vertical')\n handleVerticalChange() {\n this.detectSize();\n }\n\n render() {\n const gridTemplate = this.vertical ? 'gridTemplateRows' : 'gridTemplateColumns';\n const gridTemplateAlt = this.vertical ? 'gridTemplateColumns' : 'gridTemplateRows';\n const isRtl = false;\n const primary = `\n clamp(\n 0%,\n clamp(\n var(--min),\n ${this.position}% - var(--divider-width) / 2,\n var(--max)\n ),\n calc(100% - var(--divider-width))\n )\n `;\n const secondary = 'auto';\n\n if (this.primary === 'end') {\n if (isRtl && !this.vertical) {\n this.style[gridTemplate] = `${primary} var(--divider-width) ${secondary}`;\n } else {\n this.style[gridTemplate] = `${secondary} var(--divider-width) ${primary}`;\n }\n } else {\n if (isRtl && !this.vertical) {\n this.style[gridTemplate] = `${secondary} var(--divider-width) ${primary}`;\n } else {\n this.style[gridTemplate] = `${primary} var(--divider-width) ${secondary}`;\n }\n }\n\n // Unset the alt grid template property\n this.style[gridTemplateAlt] = '';\n\n return html`\n <slot name=\"start\" part=\"panel start\" class=\"start\"></slot>\n\n <div\n part=\"divider\"\n class=\"divider\"\n tabindex=${ifDefined(this.disabled ? undefined : '0')}\n role=\"separator\"\n aria-valuenow=${this.position}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-label=\"resize\"\n @keydown=${this.handleKeyDown}\n @mousedown=${this.handleDrag}\n @touchstart=${this.handleDrag}\n >\n <slot name=\"divider\"></slot>\n </div>\n\n <slot name=\"end\" part=\"panel end\" class=\"end\"></slot>\n `;\n }\n}\n\nexport default NileSplitPanel;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-split-panel': NileSplitPanel;\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"nile-split-panel.js","sourceRoot":"","sources":["../../../src/nile-split-panel/nile-split-panel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {LitElement, CSSResultArray, TemplateResult} from 'lit-element';\nimport {styles} from './nile-split-panel.css';\nimport NileElement from '../internal/nile-element';\n\n\nimport { clamp } from '../internal/math';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { drag } from '../internal/drag';\nimport { html } from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { watch } from '../internal/watch';\nimport type { CSSResultGroup } from 'lit';\n\n/**\n * @summary Split panels display two adjacent panels, allowing the user to reposition them.\n *\n * @event nile-reposition - Emitted when the divider's position changes.\n *\n * @slot start - Content to place in the start panel.\n * @slot end - Content to place in the end panel.\n * @slot divider - The divider. Useful for slotting in a custom icon that renders as a handle.\n *\n * @csspart start - The start panel.\n * @csspart end - The end panel.\n * @csspart panel - Targets both the start and end panels.\n * @csspart divider - The divider that separates the start and end panels.\n *\n * @cssproperty [--divider-width=4px] - The width of the visible divider.\n * @cssproperty [--divider-hit-area=12px] - The invisible region around the divider where dragging can occur. This is\n * usually wider than the divider to facilitate easier dragging.\n * @cssproperty [--min=0] - The minimum allowed size of the primary panel.\n * @cssproperty [--max=100%] - The maximum allowed size of the primary panel.\n */\n@customElement('nile-split-panel')\nexport class NileSplitPanel extends NileElement {\n\n\tstatic styles: CSSResultGroup = styles;\n\n protected override BUBBLES: boolean=false;\n\n private cachedPositionInPixels: number;\n private resizeObserver: ResizeObserver;\n private size: number;\n\n @query('.divider') divider: HTMLElement;\n\n /**\n * The current position of the divider from the primary panel's edge as a percentage 0-100. Defaults to 50% of the\n * container's initial size.\n */\n @property({ type: Number, reflect: true }) position = 50;\n\n /** The current position of the divider from the primary panel's edge in pixels. */\n @property({ attribute: 'position-in-pixels', type: Number }) positionInPixels: number;\n\n /** Draws the split panel in a vertical orientation with the start and end panels stacked. */\n @property({ type: Boolean, reflect: true }) vertical = false;\n\n /** Disables resizing. Note that the position may still change as a result of resizing the host element. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /**\n * If no primary panel is designated, both panels will resize proportionally when the host element is resized. If a\n * primary panel is designated, it will maintain its size and the other panel will grow or shrink as needed when the\n * host element is resized.\n */\n @property() primary?: 'start' | 'end';\n\n /**\n * One or more space-separated values at which the divider should snap. Values can be in pixels or percentages, e.g.\n * `\"100px 50%\"`.\n */\n @property() snap?: string;\n\n /** How close the divider must be to a snap point until snapping occurs. */\n @property({ type: Number, attribute: 'snap-threshold' }) snapThreshold = 12;\n\n connectedCallback() {\n super.connectedCallback();\n this.resizeObserver = new ResizeObserver(entries => this.handleResize(entries));\n this.updateComplete.then(() => this.resizeObserver.observe(this));\n\n this.detectSize();\n this.cachedPositionInPixels = this.percentageToPixels(this.position);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.resizeObserver.unobserve(this);\n }\n\n private detectSize() {\n const { width, height } = this.getBoundingClientRect();\n this.size = this.vertical ? height : width;\n }\n\n private percentageToPixels(value: number) {\n return this.size * (value / 100);\n }\n\n private pixelsToPercentage(value: number) {\n return (value / this.size) * 100;\n }\n\n private handleDrag(event: PointerEvent) {\n const isRtl = false;\n\n if (this.disabled) {\n return;\n }\n\n // Prevent text selection when dragging\n if (event.cancelable) {\n event.preventDefault();\n }\n\n drag(this, {\n onMove: (x, y) => {\n let newPositionInPixels = this.vertical ? y : x;\n\n // Flip for end panels\n if (this.primary === 'end') {\n newPositionInPixels = this.size - newPositionInPixels;\n }\n\n // Check snap points\n if (this.snap) {\n const snaps = this.snap.split(' ');\n\n snaps.forEach(value => {\n let snapPoint: number;\n\n if (value.endsWith('%')) {\n snapPoint = this.size * (parseFloat(value) / 100);\n } else {\n snapPoint = parseFloat(value);\n }\n\n if (isRtl && !this.vertical) {\n snapPoint = this.size - snapPoint;\n }\n\n if (\n newPositionInPixels >= snapPoint - this.snapThreshold &&\n newPositionInPixels <= snapPoint + this.snapThreshold\n ) {\n newPositionInPixels = snapPoint;\n }\n });\n }\n\n this.position = clamp(this.pixelsToPercentage(newPositionInPixels), 0, 100);\n },\n initialEvent: event\n });\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n if (this.disabled) {\n return;\n }\n\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n let newPosition = this.position;\n const incr = (event.shiftKey ? 10 : 1) * (this.primary === 'end' ? -1 : 1);\n\n event.preventDefault();\n\n if ((event.key === 'ArrowLeft' && !this.vertical) || (event.key === 'ArrowUp' && this.vertical)) {\n newPosition -= incr;\n }\n\n if ((event.key === 'ArrowRight' && !this.vertical) || (event.key === 'ArrowDown' && this.vertical)) {\n newPosition += incr;\n }\n\n if (event.key === 'Home') {\n newPosition = this.primary === 'end' ? 100 : 0;\n }\n\n if (event.key === 'End') {\n newPosition = this.primary === 'end' ? 0 : 100;\n }\n\n this.position = clamp(newPosition, 0, 100);\n }\n }\n\n private handleResize(entries: ResizeObserverEntry[]) {\n const { width, height } = entries[0].contentRect;\n this.size = this.vertical ? height : width;\n\n // Resize when a primary panel is set\n if (this.primary) {\n this.position = this.pixelsToPercentage(this.cachedPositionInPixels);\n }\n }\n\n @watch('position')\n handlePositionChange() {\n this.cachedPositionInPixels = this.percentageToPixels(this.position);\n this.positionInPixels = this.percentageToPixels(this.position);\n this.emit('nile-reposition');\n }\n\n @watch('positionInPixels')\n handlePositionInPixelsChange() {\n this.position = this.pixelsToPercentage(this.positionInPixels);\n }\n\n @watch('vertical')\n handleVerticalChange() {\n this.detectSize();\n }\n\n render() {\n const gridTemplate = this.vertical ? 'gridTemplateRows' : 'gridTemplateColumns';\n const gridTemplateAlt = this.vertical ? 'gridTemplateColumns' : 'gridTemplateRows';\n const isRtl = false;\n const primary = `\n clamp(\n 0%,\n clamp(\n var(--min),\n ${this.position}% - var(--divider-width) / 2,\n var(--max)\n ),\n calc(100% - var(--divider-width))\n )\n `;\n const secondary = 'auto';\n\n if (this.primary === 'end') {\n if (isRtl && !this.vertical) {\n this.style[gridTemplate] = `${primary} var(--divider-width) ${secondary}`;\n } else {\n this.style[gridTemplate] = `${secondary} var(--divider-width) ${primary}`;\n }\n } else {\n if (isRtl && !this.vertical) {\n this.style[gridTemplate] = `${secondary} var(--divider-width) ${primary}`;\n } else {\n this.style[gridTemplate] = `${primary} var(--divider-width) ${secondary}`;\n }\n }\n\n // Unset the alt grid template property\n this.style[gridTemplateAlt] = '';\n\n return html`\n <slot name=\"start\" part=\"panel start\" class=\"start\"></slot>\n\n <div\n part=\"divider\"\n class=\"divider\"\n tabindex=${ifDefined(this.disabled ? undefined : '0')}\n role=\"separator\"\n aria-valuenow=${this.position}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-label=\"resize\"\n @keydown=${this.handleKeyDown}\n @mousedown=${this.handleDrag}\n @touchstart=${this.handleDrag}\n >\n <slot name=\"divider\"></slot>\n </div>\n\n <slot name=\"end\" part=\"panel end\" class=\"end\"></slot>\n `;\n }\n}\n\nexport default NileSplitPanel;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-split-panel': NileSplitPanel;\n }\n}\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
import './nile-split-panel';
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"nile-split-panel.test.js","sourceRoot":"","sources":["../../../src/nile-split-panel/nile-split-panel.test.ts"],"names":[],"mappings":"AACA,OAAO,oBAAoB,CAAA;AAG3B,QAAQ,CAAC,gBAAgB,EAAC,GAAE,EAAE;AAE9B,CAAC,CAAC,CAAA","sourcesContent":["import { expect, fixture, html, oneEvent } from '@open-wc/testing';\nimport './nile-split-panel'\nimport NileSplitPanel from './nile-split-panel';\n\ndescribe('NileSplitPanel',()=>{\n\t\n})"]}
|
@@ -20,6 +20,7 @@ import { classMap } from 'lit/directives/class-map.js';
|
|
20
20
|
let NileStepper = class NileStepper extends NileElement {
|
21
21
|
constructor() {
|
22
22
|
super(...arguments);
|
23
|
+
this.BUBBLES = false;
|
23
24
|
this.isVertical = false;
|
24
25
|
this.contentBelow = false;
|
25
26
|
this.currentStep = 0;
|