@aquera/nile-elements 1.6.1 → 1.6.3
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 +14 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1150 -624
- package/dist/internal/accessibility/a11y.custom-value.enum.cjs.js +2 -0
- package/dist/internal/accessibility/a11y.custom-value.enum.cjs.js.map +1 -0
- package/dist/internal/accessibility/a11y.custom-value.enum.esm.js +1 -0
- package/dist/internal/accessibility/a11y.property.enum.cjs.js +2 -0
- package/dist/internal/accessibility/a11y.property.enum.cjs.js.map +1 -0
- package/dist/internal/accessibility/a11y.property.enum.esm.js +1 -0
- package/dist/internal/accessibility/a11y.role.enum.cjs.js +2 -0
- package/dist/internal/accessibility/a11y.role.enum.cjs.js.map +1 -0
- package/dist/internal/accessibility/a11y.role.enum.esm.js +1 -0
- package/dist/internal/accessibility/a11y.state.enum.cjs.js +2 -0
- package/dist/internal/accessibility/a11y.state.enum.cjs.js.map +1 -0
- package/dist/internal/accessibility/a11y.state.enum.esm.js +1 -0
- package/dist/internal/accessibility/accessibility.const.cjs.js +2 -0
- package/dist/internal/accessibility/accessibility.const.cjs.js.map +1 -0
- package/dist/internal/accessibility/accessibility.const.esm.js +1 -0
- package/dist/internal/accessibility/role.enum.cjs.js +2 -0
- package/dist/internal/accessibility/role.enum.cjs.js.map +1 -0
- package/dist/internal/accessibility/role.enum.esm.js +1 -0
- package/dist/internal/enum.cjs.js +1 -1
- package/dist/internal/enum.cjs.js.map +1 -1
- package/dist/internal/enum.esm.js +1 -1
- package/dist/internal/nile-element.cjs.js +1 -1
- package/dist/internal/nile-element.cjs.js.map +1 -1
- package/dist/internal/nile-element.esm.js +1 -1
- package/dist/nile-accordion/index.cjs.js +1 -1
- package/dist/nile-accordion/index.esm.js +1 -1
- 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 +2 -2
- package/dist/nile-auto-complete/index.cjs.js +1 -1
- package/dist/nile-auto-complete/index.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 +1 -1
- package/dist/nile-avatar/index.cjs.js +1 -1
- package/dist/nile-avatar/index.esm.js +1 -1
- 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 +3 -1
- package/dist/nile-badge/index.cjs.js +1 -1
- package/dist/nile-badge/index.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 +2 -2
- package/dist/nile-breadcrumb/index.cjs.js +1 -1
- package/dist/nile-breadcrumb/index.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/index.cjs.js +1 -1
- package/dist/nile-breadcrumb-item/index.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 +4 -4
- package/dist/nile-button/index.cjs.js +1 -1
- package/dist/nile-button/index.esm.js +1 -1
- 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-filter/index.cjs.js +1 -1
- package/dist/nile-button-filter/index.esm.js +1 -1
- package/dist/nile-button-filter/nile-button-filter.cjs.js +1 -1
- package/dist/nile-button-filter/nile-button-filter.cjs.js.map +1 -1
- package/dist/nile-button-filter/nile-button-filter.esm.js +7 -7
- package/dist/nile-button-toggle/index.cjs.js +1 -1
- package/dist/nile-button-toggle/index.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 +2 -2
- package/dist/nile-button-toggle-group/index.cjs.js +1 -1
- package/dist/nile-button-toggle-group/index.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/index.cjs.js +1 -1
- package/dist/nile-calendar/index.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.esm.js +4 -4
- package/dist/nile-card/index.cjs.js +1 -1
- package/dist/nile-card/index.esm.js +1 -1
- 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 +2 -2
- package/dist/nile-carousel/index.cjs.js +1 -1
- package/dist/nile-carousel/index.esm.js +1 -1
- package/dist/nile-carousel/nile-carousel-item/index.cjs.js +1 -1
- package/dist/nile-carousel/nile-carousel-item/index.esm.js +1 -1
- package/dist/nile-carousel/nile-carousel-item/nile-carousel-item.cjs.js +1 -1
- package/dist/nile-carousel/nile-carousel-item/nile-carousel-item.cjs.js.map +1 -1
- package/dist/nile-carousel/nile-carousel-item/nile-carousel-item.esm.js +2 -2
- package/dist/nile-carousel/nile-carousel.cjs.js +1 -1
- package/dist/nile-carousel/nile-carousel.cjs.js.map +1 -1
- package/dist/nile-carousel/nile-carousel.esm.js +1 -1
- package/dist/nile-checkbox/index.cjs.js +1 -1
- package/dist/nile-checkbox/index.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.css.cjs.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.css.cjs.js.map +1 -1
- package/dist/nile-checkbox/nile-checkbox.css.esm.js +4 -0
- package/dist/nile-checkbox/nile-checkbox.esm.js +3 -3
- package/dist/nile-checkbox-group/index.cjs.js +2 -0
- package/dist/nile-checkbox-group/index.cjs.js.map +1 -0
- package/dist/nile-checkbox-group/index.esm.js +1 -0
- package/dist/nile-checkbox-group/nile-checkbox-group.cjs.js +2 -0
- package/dist/nile-checkbox-group/nile-checkbox-group.cjs.js.map +1 -0
- package/dist/nile-checkbox-group/nile-checkbox-group.css.cjs.js +2 -0
- package/dist/nile-checkbox-group/nile-checkbox-group.css.cjs.js.map +1 -0
- package/dist/nile-checkbox-group/nile-checkbox-group.css.esm.js +68 -0
- package/dist/nile-checkbox-group/nile-checkbox-group.esm.js +56 -0
- package/dist/nile-chip/index.cjs.js +1 -1
- package/dist/nile-chip/index.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 +2 -2
- package/dist/nile-circular-progressbar/index.cjs.js +1 -1
- package/dist/nile-circular-progressbar/index.esm.js +1 -1
- package/dist/nile-circular-progressbar/nile-circular-progressbar.cjs.js +1 -1
- package/dist/nile-circular-progressbar/nile-circular-progressbar.cjs.js.map +1 -1
- package/dist/nile-circular-progressbar/nile-circular-progressbar.esm.js +2 -2
- package/dist/nile-code-editor/index.cjs.js +1 -1
- package/dist/nile-code-editor/index.esm.js +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/index.cjs.js +1 -1
- package/dist/nile-content-editor/index.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/index.cjs.js +1 -1
- package/dist/nile-date-picker/index.esm.js +1 -1
- 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 +1 -1
- package/dist/nile-detail/index.cjs.js +1 -1
- package/dist/nile-detail/index.esm.js +1 -1
- package/dist/nile-detail/nile-detail.cjs.js +1 -1
- package/dist/nile-detail/nile-detail.cjs.js.map +1 -1
- package/dist/nile-detail/nile-detail.esm.js +2 -2
- package/dist/nile-dialog/index.cjs.js +1 -1
- package/dist/nile-dialog/index.esm.js +1 -1
- 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 +2 -2
- package/dist/nile-divider/index.cjs.js +1 -1
- package/dist/nile-divider/index.esm.js +1 -1
- package/dist/nile-divider/nile-divider.cjs.js +1 -1
- package/dist/nile-divider/nile-divider.cjs.js.map +1 -1
- package/dist/nile-divider/nile-divider.esm.js +2 -2
- package/dist/nile-drawer/index.cjs.js +1 -1
- package/dist/nile-drawer/index.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-dropdown/index.cjs.js +1 -1
- package/dist/nile-dropdown/index.esm.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.cjs.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.cjs.js.map +1 -1
- package/dist/nile-dropdown/nile-dropdown.esm.js +1 -1
- package/dist/nile-empty-state/index.cjs.js +1 -1
- package/dist/nile-empty-state/index.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 +2 -2
- package/dist/nile-file-preview/index.cjs.js +1 -1
- package/dist/nile-file-preview/index.esm.js +1 -1
- package/dist/nile-file-preview/nile-file-preview.cjs.js +1 -1
- package/dist/nile-file-preview/nile-file-preview.cjs.js.map +1 -1
- package/dist/nile-file-preview/nile-file-preview.esm.js +1 -1
- package/dist/nile-file-upload/index.cjs.js +1 -1
- package/dist/nile-file-upload/index.esm.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.cjs.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.cjs.js.map +1 -1
- package/dist/nile-file-upload/nile-file-upload.esm.js +2 -2
- package/dist/nile-filter-chip/index.cjs.js +1 -1
- package/dist/nile-filter-chip/index.esm.js +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.cjs.js +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.cjs.js.map +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.esm.js +2 -2
- package/dist/nile-floating-panel/index.cjs.js +1 -1
- package/dist/nile-floating-panel/index.esm.js +1 -1
- package/dist/nile-floating-panel/nile-floating-panel.cjs.js +1 -1
- package/dist/nile-floating-panel/nile-floating-panel.cjs.js.map +1 -1
- package/dist/nile-floating-panel/nile-floating-panel.esm.js +1 -1
- package/dist/nile-form-group/index.cjs.js +1 -1
- package/dist/nile-form-group/index.esm.js +1 -1
- package/dist/nile-form-group/nile-form-group.cjs.js +1 -1
- package/dist/nile-form-group/nile-form-group.cjs.js.map +1 -1
- package/dist/nile-form-group/nile-form-group.esm.js +2 -2
- package/dist/nile-format-date/index.cjs.js +1 -1
- package/dist/nile-format-date/index.esm.js +1 -1
- package/dist/nile-format-date/nile-format-date.cjs.js +1 -1
- package/dist/nile-format-date/nile-format-date.cjs.js.map +1 -1
- package/dist/nile-format-date/nile-format-date.esm.js +1 -1
- package/dist/nile-grid/index.cjs.js +1 -1
- package/dist/nile-grid/index.esm.js +1 -1
- package/dist/nile-grid/nile-grid-body/index.cjs.js +1 -1
- package/dist/nile-grid/nile-grid-body/index.esm.js +1 -1
- package/dist/nile-grid/nile-grid-body/nile-grid-body.cjs.js +1 -1
- package/dist/nile-grid/nile-grid-body/nile-grid-body.cjs.js.map +1 -1
- package/dist/nile-grid/nile-grid-body/nile-grid-body.esm.js +2 -2
- package/dist/nile-grid/nile-grid-cell-item/index.cjs.js +1 -1
- package/dist/nile-grid/nile-grid-cell-item/index.esm.js +1 -1
- package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.cjs.js +1 -1
- package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.cjs.js.map +1 -1
- package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.esm.js +2 -2
- package/dist/nile-grid/nile-grid-head/index.cjs.js +1 -1
- package/dist/nile-grid/nile-grid-head/index.esm.js +1 -1
- package/dist/nile-grid/nile-grid-head/nile-grid-head.cjs.js +1 -1
- package/dist/nile-grid/nile-grid-head/nile-grid-head.cjs.js.map +1 -1
- package/dist/nile-grid/nile-grid-head/nile-grid-head.esm.js +2 -2
- package/dist/nile-grid/nile-grid-head-item/index.cjs.js +1 -1
- package/dist/nile-grid/nile-grid-head-item/index.esm.js +1 -1
- package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.cjs.js +1 -1
- package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.cjs.js.map +1 -1
- package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.esm.js +3 -3
- package/dist/nile-grid/nile-grid-row/index.cjs.js +1 -1
- package/dist/nile-grid/nile-grid-row/index.esm.js +1 -1
- package/dist/nile-grid/nile-grid-row/nile-grid-row.cjs.js +1 -1
- package/dist/nile-grid/nile-grid-row/nile-grid-row.cjs.js.map +1 -1
- package/dist/nile-grid/nile-grid-row/nile-grid-row.esm.js +2 -2
- package/dist/nile-grid/nile-grid.cjs.js +1 -1
- package/dist/nile-grid/nile-grid.cjs.js.map +1 -1
- package/dist/nile-grid/nile-grid.esm.js +2 -2
- package/dist/nile-hero/index.cjs.js +1 -1
- package/dist/nile-hero/index.esm.js +1 -1
- package/dist/nile-hero/nile-hero.cjs.js +1 -1
- package/dist/nile-hero/nile-hero.cjs.js.map +1 -1
- package/dist/nile-hero/nile-hero.esm.js +2 -2
- package/dist/nile-hero-header/index.cjs.js +1 -1
- package/dist/nile-hero-header/index.esm.js +1 -1
- package/dist/nile-hero-header/nile-hero-header.cjs.js +1 -1
- package/dist/nile-hero-header/nile-hero-header.cjs.js.map +1 -1
- package/dist/nile-hero-header/nile-hero-header.esm.js +2 -2
- package/dist/nile-icon/icons/svg/folder_delete.cjs.js +2 -0
- package/dist/nile-icon/icons/svg/folder_delete.cjs.js.map +1 -0
- package/dist/nile-icon/icons/svg/folder_delete.esm.js +1 -0
- package/dist/nile-icon/icons/svg/index.cjs.js +1 -1
- package/dist/nile-icon/icons/svg/index.esm.js +1 -1
- package/dist/nile-icon/icons/svg/layers-three-02.cjs.js +1 -1
- package/dist/nile-icon/icons/svg/layers-three-02.cjs.js.map +1 -1
- package/dist/nile-icon/icons/svg/layers-three-02.esm.js +1 -1
- package/dist/nile-icon/index.cjs.js +1 -1
- package/dist/nile-icon/index.cjs.js.map +1 -1
- package/dist/nile-icon/index.esm.js +1 -1
- package/dist/nile-icon-button/index.cjs.js +1 -1
- package/dist/nile-icon-button/index.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-inline-edit/index.cjs.js +1 -1
- package/dist/nile-inline-edit/index.esm.js +1 -1
- package/dist/nile-inline-edit/nile-inline-edit.cjs.js +1 -1
- package/dist/nile-inline-edit/nile-inline-edit.cjs.js.map +1 -1
- package/dist/nile-inline-edit/nile-inline-edit.esm.js +2 -2
- package/dist/nile-inline-sidebar/index.cjs.js +1 -1
- package/dist/nile-inline-sidebar/index.esm.js +1 -1
- package/dist/nile-inline-sidebar/nile-inline-sidebar.cjs.js +1 -1
- package/dist/nile-inline-sidebar/nile-inline-sidebar.cjs.js.map +1 -1
- package/dist/nile-inline-sidebar/nile-inline-sidebar.esm.js +3 -3
- package/dist/nile-inline-sidebar-group/index.cjs.js +1 -1
- package/dist/nile-inline-sidebar-group/index.esm.js +1 -1
- package/dist/nile-inline-sidebar-group/nile-inline-sidebar-group.cjs.js +1 -1
- package/dist/nile-inline-sidebar-group/nile-inline-sidebar-group.cjs.js.map +1 -1
- package/dist/nile-inline-sidebar-group/nile-inline-sidebar-group.esm.js +3 -3
- package/dist/nile-inline-sidebar-item/index.cjs.js +1 -1
- package/dist/nile-inline-sidebar-item/index.esm.js +1 -1
- package/dist/nile-inline-sidebar-item/nile-inline-sidebar-item.cjs.js +1 -1
- package/dist/nile-inline-sidebar-item/nile-inline-sidebar-item.cjs.js.map +1 -1
- package/dist/nile-inline-sidebar-item/nile-inline-sidebar-item.esm.js +3 -3
- package/dist/nile-input/index.cjs.js +1 -1
- package/dist/nile-input/index.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 +1 -1
- 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.esm.js +3 -3
- package/dist/nile-list/index.cjs.js +1 -1
- package/dist/nile-list/index.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/index.cjs.js +1 -1
- package/dist/nile-list-item/index.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 +2 -2
- package/dist/nile-lite-tooltip/index.cjs.js +1 -1
- package/dist/nile-lite-tooltip/index.esm.js +1 -1
- package/dist/nile-lite-tooltip/nile-lite-tooltip.cjs.js +1 -1
- package/dist/nile-lite-tooltip/nile-lite-tooltip.cjs.js.map +1 -1
- package/dist/nile-lite-tooltip/nile-lite-tooltip.esm.js +1 -1
- package/dist/nile-menu/index.cjs.js +1 -1
- package/dist/nile-menu/index.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 +2 -2
- package/dist/nile-menu-item/index.cjs.js +1 -1
- package/dist/nile-menu-item/index.esm.js +1 -1
- 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/index.cjs.js +1 -1
- package/dist/nile-option/index.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 +5 -5
- package/dist/nile-option-group/index.cjs.js +1 -1
- package/dist/nile-option-group/index.esm.js +1 -1
- package/dist/nile-option-group/nile-option-group.cjs.js +1 -1
- package/dist/nile-option-group/nile-option-group.cjs.js.map +1 -1
- package/dist/nile-option-group/nile-option-group.esm.js +2 -2
- package/dist/nile-otp-input/index.cjs.js +2 -0
- package/dist/nile-otp-input/index.cjs.js.map +1 -0
- package/dist/nile-otp-input/index.esm.js +1 -0
- package/dist/nile-otp-input/nile-otp-input.cjs.js +2 -0
- package/dist/nile-otp-input/nile-otp-input.cjs.js.map +1 -0
- package/dist/nile-otp-input/nile-otp-input.css.cjs.js +2 -0
- package/dist/nile-otp-input/nile-otp-input.css.cjs.js.map +1 -0
- package/dist/nile-otp-input/nile-otp-input.css.esm.js +257 -0
- package/dist/nile-otp-input/nile-otp-input.enum.cjs.js +2 -0
- package/dist/nile-otp-input/nile-otp-input.enum.cjs.js.map +1 -0
- package/dist/nile-otp-input/nile-otp-input.enum.esm.js +1 -0
- package/dist/nile-otp-input/nile-otp-input.esm.js +103 -0
- package/dist/nile-page-header/index.cjs.js +1 -1
- package/dist/nile-page-header/index.esm.js +1 -1
- package/dist/nile-page-header/nile-page-header.cjs.js +1 -1
- package/dist/nile-page-header/nile-page-header.cjs.js.map +1 -1
- package/dist/nile-page-header/nile-page-header.esm.js +2 -2
- package/dist/nile-pagination/index.cjs.js +1 -1
- package/dist/nile-pagination/index.esm.js +1 -1
- package/dist/nile-pagination/nile-pagination.cjs.js +1 -1
- package/dist/nile-pagination/nile-pagination.cjs.js.map +1 -1
- package/dist/nile-pagination/nile-pagination.css.cjs.js +1 -1
- package/dist/nile-pagination/nile-pagination.css.cjs.js.map +1 -1
- package/dist/nile-pagination/nile-pagination.css.esm.js +7 -0
- package/dist/nile-pagination/nile-pagination.esm.js +1 -1
- package/dist/nile-popover/index.cjs.js +1 -1
- package/dist/nile-popover/index.esm.js +1 -1
- package/dist/nile-popover/nile-popover.cjs.js +2 -2
- package/dist/nile-popover/nile-popover.cjs.js.map +1 -1
- package/dist/nile-popover/nile-popover.esm.js +3 -3
- package/dist/nile-popup/index.cjs.js +1 -1
- package/dist/nile-popup/index.esm.js +1 -1
- 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 +2 -2
- package/dist/nile-progress-bar/index.cjs.js +1 -1
- package/dist/nile-progress-bar/index.esm.js +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.cjs.js +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.cjs.js.map +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.esm.js +2 -2
- package/dist/nile-qr-code/index.cjs.js +1 -1
- package/dist/nile-qr-code/index.esm.js +1 -1
- package/dist/nile-qr-code/nile-qr-code.cjs.js +1 -1
- package/dist/nile-qr-code/nile-qr-code.cjs.js.map +1 -1
- package/dist/nile-qr-code/nile-qr-code.esm.js +2 -2
- package/dist/nile-radio/index.cjs.js +1 -1
- package/dist/nile-radio/index.esm.js +1 -1
- package/dist/nile-radio/nile-radio.cjs.js +1 -1
- package/dist/nile-radio/nile-radio.cjs.js.map +1 -1
- package/dist/nile-radio/nile-radio.css.cjs.js +1 -1
- package/dist/nile-radio/nile-radio.css.cjs.js.map +1 -1
- package/dist/nile-radio/nile-radio.css.esm.js +4 -0
- package/dist/nile-radio/nile-radio.esm.js +2 -2
- package/dist/nile-radio-group/index.cjs.js +1 -1
- package/dist/nile-radio-group/index.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 +2 -2
- package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.esm.js +8 -6
- package/dist/nile-rich-text-editor/nile-rich-text-editor.esm.js +1 -1
- package/dist/nile-section-message/index.cjs.js +1 -1
- package/dist/nile-section-message/index.esm.js +1 -1
- package/dist/nile-section-message/nile-section-message.cjs.js +1 -1
- package/dist/nile-section-message/nile-section-message.cjs.js.map +1 -1
- package/dist/nile-section-message/nile-section-message.esm.js +2 -2
- package/dist/nile-select/index.cjs.js +1 -1
- package/dist/nile-select/index.esm.js +1 -1
- 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 +21 -2
- package/dist/nile-select/nile-select.esm.js +33 -25
- package/dist/nile-select/portal-utils.cjs.js +1 -1
- package/dist/nile-select/portal-utils.cjs.js.map +1 -1
- package/dist/nile-select/portal-utils.esm.js +1 -1
- package/dist/nile-side-bar/index.cjs.js +1 -1
- package/dist/nile-side-bar/index.esm.js +1 -1
- package/dist/nile-side-bar/nile-side-bar.cjs.js +1 -1
- package/dist/nile-side-bar/nile-side-bar.cjs.js.map +1 -1
- package/dist/nile-side-bar/nile-side-bar.esm.js +2 -2
- package/dist/nile-side-bar-action/index.cjs.js +1 -1
- package/dist/nile-side-bar-action/index.esm.js +1 -1
- package/dist/nile-side-bar-action/nile-side-bar-action.cjs.js +1 -1
- package/dist/nile-side-bar-action/nile-side-bar-action.cjs.js.map +1 -1
- package/dist/nile-side-bar-action/nile-side-bar-action.esm.js +3 -3
- package/dist/nile-side-bar-action-menu/index.cjs.js +1 -1
- package/dist/nile-side-bar-action-menu/index.esm.js +1 -1
- package/dist/nile-side-bar-action-menu/nile-side-bar-action-menu.cjs.js +1 -1
- package/dist/nile-side-bar-action-menu/nile-side-bar-action-menu.cjs.js.map +1 -1
- package/dist/nile-side-bar-action-menu/nile-side-bar-action-menu.esm.js +2 -2
- package/dist/nile-side-bar-action-menu-item/index.cjs.js +1 -1
- package/dist/nile-side-bar-action-menu-item/index.esm.js +1 -1
- package/dist/nile-side-bar-action-menu-item/nile-side-bar-action-menu-item.cjs.js +1 -1
- package/dist/nile-side-bar-action-menu-item/nile-side-bar-action-menu-item.cjs.js.map +1 -1
- package/dist/nile-side-bar-action-menu-item/nile-side-bar-action-menu-item.esm.js +1 -1
- package/dist/nile-side-bar-expand/index.cjs.js +1 -1
- package/dist/nile-side-bar-expand/index.esm.js +1 -1
- package/dist/nile-side-bar-expand/nile-side-bar-expand.cjs.js +1 -1
- package/dist/nile-side-bar-expand/nile-side-bar-expand.cjs.js.map +1 -1
- package/dist/nile-side-bar-expand/nile-side-bar-expand.esm.js +2 -2
- package/dist/nile-side-bar-footer/index.cjs.js +1 -1
- package/dist/nile-side-bar-footer/index.esm.js +1 -1
- package/dist/nile-side-bar-footer/nile-side-bar-footer.cjs.js +1 -1
- package/dist/nile-side-bar-footer/nile-side-bar-footer.cjs.js.map +1 -1
- package/dist/nile-side-bar-footer/nile-side-bar-footer.esm.js +2 -2
- package/dist/nile-side-bar-footer-item/index.cjs.js +1 -1
- package/dist/nile-side-bar-footer-item/index.esm.js +1 -1
- package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.cjs.js +1 -1
- package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.cjs.js.map +1 -1
- package/dist/nile-side-bar-footer-item/nile-side-bar-footer-item.esm.js +1 -1
- package/dist/nile-side-bar-footer-text/index.cjs.js +1 -1
- package/dist/nile-side-bar-footer-text/index.esm.js +1 -1
- package/dist/nile-side-bar-footer-text/nile-side-bar-footer-text.cjs.js +1 -1
- package/dist/nile-side-bar-footer-text/nile-side-bar-footer-text.cjs.js.map +1 -1
- package/dist/nile-side-bar-footer-text/nile-side-bar-footer-text.esm.js +3 -3
- package/dist/nile-side-bar-group/index.cjs.js +1 -1
- package/dist/nile-side-bar-group/index.esm.js +1 -1
- package/dist/nile-side-bar-group/nile-side-bar-group.cjs.js +1 -1
- package/dist/nile-side-bar-group/nile-side-bar-group.cjs.js.map +1 -1
- package/dist/nile-side-bar-group/nile-side-bar-group.esm.js +2 -2
- package/dist/nile-side-bar-group-item/index.cjs.js +1 -1
- package/dist/nile-side-bar-group-item/index.esm.js +1 -1
- package/dist/nile-side-bar-group-item/nile-side-bar-group-item.cjs.js +1 -1
- package/dist/nile-side-bar-group-item/nile-side-bar-group-item.cjs.js.map +1 -1
- package/dist/nile-side-bar-group-item/nile-side-bar-group-item.esm.js +2 -2
- package/dist/nile-side-bar-group-item-icon/index.cjs.js +1 -1
- package/dist/nile-side-bar-group-item-icon/index.esm.js +1 -1
- package/dist/nile-side-bar-group-item-icon/nile-side-bar-group-item-icon.cjs.js +1 -1
- package/dist/nile-side-bar-group-item-icon/nile-side-bar-group-item-icon.cjs.js.map +1 -1
- package/dist/nile-side-bar-group-item-icon/nile-side-bar-group-item-icon.esm.js +2 -2
- package/dist/nile-side-bar-group-item-text/index.cjs.js +1 -1
- package/dist/nile-side-bar-group-item-text/index.esm.js +1 -1
- package/dist/nile-side-bar-group-item-text/nile-side-bar-group-item-text.cjs.js +1 -1
- package/dist/nile-side-bar-group-item-text/nile-side-bar-group-item-text.cjs.js.map +1 -1
- package/dist/nile-side-bar-group-item-text/nile-side-bar-group-item-text.esm.js +1 -1
- package/dist/nile-side-bar-header/index.cjs.js +1 -1
- package/dist/nile-side-bar-header/index.esm.js +1 -1
- package/dist/nile-side-bar-header/nile-side-bar-header.cjs.js +1 -1
- package/dist/nile-side-bar-header/nile-side-bar-header.cjs.js.map +1 -1
- package/dist/nile-side-bar-header/nile-side-bar-header.esm.js +2 -2
- package/dist/nile-side-bar-logo/index.cjs.js +1 -1
- package/dist/nile-side-bar-logo/index.esm.js +1 -1
- package/dist/nile-side-bar-logo/nile-side-bar-logo.cjs.js +1 -1
- package/dist/nile-side-bar-logo/nile-side-bar-logo.cjs.js.map +1 -1
- package/dist/nile-side-bar-logo/nile-side-bar-logo.esm.js +2 -2
- package/dist/nile-side-bar-panel/index.cjs.js +1 -1
- package/dist/nile-side-bar-panel/index.esm.js +1 -1
- package/dist/nile-side-bar-panel/nile-side-bar-panel.cjs.js +1 -1
- package/dist/nile-side-bar-panel/nile-side-bar-panel.cjs.js.map +1 -1
- package/dist/nile-side-bar-panel/nile-side-bar-panel.esm.js +2 -2
- package/dist/nile-skeleton-loader/index.cjs.js +1 -1
- package/dist/nile-skeleton-loader/index.esm.js +1 -1
- package/dist/nile-skeleton-loader/nile-skeleton-loader.cjs.js +1 -1
- package/dist/nile-skeleton-loader/nile-skeleton-loader.cjs.js.map +1 -1
- package/dist/nile-skeleton-loader/nile-skeleton-loader.esm.js +2 -2
- package/dist/nile-slide-toggle/index.cjs.js +1 -1
- package/dist/nile-slide-toggle/index.esm.js +1 -1
- 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.esm.js +2 -2
- package/dist/nile-slider/index.cjs.js +1 -1
- package/dist/nile-slider/index.esm.js +1 -1
- package/dist/nile-slider/nile-slider.cjs.js +1 -1
- package/dist/nile-slider/nile-slider.cjs.js.map +1 -1
- package/dist/nile-slider/nile-slider.esm.js +3 -3
- package/dist/nile-split-panel/index.cjs.js +1 -1
- package/dist/nile-split-panel/index.esm.js +1 -1
- 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 +2 -2
- package/dist/nile-stepper/index.cjs.js +1 -1
- package/dist/nile-stepper/index.esm.js +1 -1
- 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 +3 -3
- package/dist/nile-stepper-item/index.cjs.js +1 -1
- package/dist/nile-stepper-item/index.esm.js +1 -1
- package/dist/nile-stepper-item/nile-stepper-item.cjs.js +1 -1
- package/dist/nile-stepper-item/nile-stepper-item.cjs.js.map +1 -1
- package/dist/nile-stepper-item/nile-stepper-item.esm.js +1 -1
- package/dist/nile-switcher/index.cjs.js +1 -1
- package/dist/nile-switcher/index.esm.js +1 -1
- package/dist/nile-switcher/nile-switcher.cjs.js +1 -1
- package/dist/nile-switcher/nile-switcher.cjs.js.map +1 -1
- package/dist/nile-switcher/nile-switcher.esm.js +23 -23
- package/dist/nile-tab/index.cjs.js +1 -1
- package/dist/nile-tab/index.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/index.cjs.js +1 -1
- package/dist/nile-tab-group/index.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-tab-panel/index.cjs.js +1 -1
- package/dist/nile-tab-panel/index.esm.js +1 -1
- package/dist/nile-tab-panel/nile-tab-panel.cjs.js +1 -1
- package/dist/nile-tab-panel/nile-tab-panel.cjs.js.map +1 -1
- package/dist/nile-tab-panel/nile-tab-panel.esm.js +3 -3
- package/dist/nile-table/index.cjs.js +1 -1
- package/dist/nile-table/index.esm.js +1 -1
- package/dist/nile-table/nile-table.cjs.js +1 -1
- package/dist/nile-table/nile-table.cjs.js.map +1 -1
- package/dist/nile-table/nile-table.esm.js +1 -1
- package/dist/nile-table-body/index.cjs.js +1 -1
- package/dist/nile-table-body/index.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 +3 -3
- package/dist/nile-table-cell-item/index.cjs.js +1 -1
- package/dist/nile-table-cell-item/index.esm.js +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.cjs.js +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.cjs.js.map +1 -1
- package/dist/nile-table-cell-item/nile-table-cell-item.esm.js +5 -5
- package/dist/nile-table-header-item/index.cjs.js +1 -1
- package/dist/nile-table-header-item/index.esm.js +1 -1
- package/dist/nile-table-header-item/nile-table-header-item.cjs.js +1 -1
- package/dist/nile-table-header-item/nile-table-header-item.cjs.js.map +1 -1
- package/dist/nile-table-header-item/nile-table-header-item.esm.js +1 -1
- package/dist/nile-table-row/index.cjs.js +1 -1
- package/dist/nile-table-row/index.esm.js +1 -1
- package/dist/nile-table-row/nile-table-row.cjs.js +1 -1
- package/dist/nile-table-row/nile-table-row.cjs.js.map +1 -1
- package/dist/nile-table-row/nile-table-row.esm.js +2 -2
- package/dist/nile-tag/index.cjs.js +1 -1
- package/dist/nile-tag/index.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/index.cjs.js +1 -1
- package/dist/nile-textarea/index.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 +2 -2
- package/dist/nile-title/index.cjs.js +1 -1
- package/dist/nile-title/index.esm.js +1 -1
- package/dist/nile-title/nile-title.cjs.js +1 -1
- package/dist/nile-title/nile-title.cjs.js.map +1 -1
- package/dist/nile-title/nile-title.esm.js +1 -1
- package/dist/nile-toast/index.cjs.js +1 -1
- package/dist/nile-toast/index.esm.js +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 +2 -2
- package/dist/nile-toolbar/index.cjs.js +1 -1
- package/dist/nile-toolbar/index.esm.js +1 -1
- package/dist/nile-toolbar/nile-toolbar.cjs.js +1 -1
- package/dist/nile-toolbar/nile-toolbar.cjs.js.map +1 -1
- package/dist/nile-toolbar/nile-toolbar.esm.js +2 -2
- package/dist/nile-tooltip/index.cjs.js +1 -1
- package/dist/nile-tooltip/index.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 +2 -2
- package/dist/nile-tree/index.cjs.js +1 -1
- package/dist/nile-tree/index.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-item/index.cjs.js +1 -1
- package/dist/nile-tree-item/index.esm.js +1 -1
- package/dist/nile-tree-item/nile-tree-item.cjs.js +1 -1
- package/dist/nile-tree-item/nile-tree-item.cjs.js.map +1 -1
- package/dist/nile-tree-item/nile-tree-item.esm.js +1 -1
- package/dist/nile-vertical-stepper-item/index.cjs.js +1 -1
- package/dist/nile-vertical-stepper-item/index.esm.js +1 -1
- package/dist/nile-vertical-stepper-item/nile-vertical-stepper-item.cjs.js +1 -1
- package/dist/nile-vertical-stepper-item/nile-vertical-stepper-item.cjs.js.map +1 -1
- package/dist/nile-vertical-stepper-item/nile-vertical-stepper-item.esm.js +7 -7
- package/dist/nile-virtual-select/index.cjs.js +1 -1
- package/dist/nile-virtual-select/index.esm.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js +3 -3
- package/dist/nile-virtual-select/nile-virtual-select.esm.js +3 -3
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal/accessibility/a11y.custom-value.enum.d.ts +69 -0
- package/dist/src/internal/accessibility/a11y.custom-value.enum.js +71 -0
- package/dist/src/internal/accessibility/a11y.custom-value.enum.js.map +1 -0
- package/dist/src/internal/accessibility/a11y.property.enum.d.ts +33 -0
- package/dist/src/internal/accessibility/a11y.property.enum.js +35 -0
- package/dist/src/internal/accessibility/a11y.property.enum.js.map +1 -0
- package/dist/src/internal/accessibility/a11y.role.enum.d.ts +50 -0
- package/dist/src/internal/accessibility/a11y.role.enum.js +52 -0
- package/dist/src/internal/accessibility/a11y.role.enum.js.map +1 -0
- package/dist/src/internal/accessibility/a11y.state.enum.d.ts +17 -0
- package/dist/src/internal/accessibility/a11y.state.enum.js +19 -0
- package/dist/src/internal/accessibility/a11y.state.enum.js.map +1 -0
- package/dist/src/internal/accessibility/accessibility.const.d.ts +8 -0
- package/dist/src/internal/accessibility/accessibility.const.js +9 -0
- package/dist/src/internal/accessibility/accessibility.const.js.map +1 -0
- package/dist/src/internal/accessibility/role.enum.d.ts +3 -0
- package/dist/src/internal/accessibility/role.enum.js +5 -0
- package/dist/src/internal/accessibility/role.enum.js.map +1 -0
- package/dist/src/internal/enum.d.ts +21 -0
- package/dist/src/internal/enum.js +23 -1
- package/dist/src/internal/enum.js.map +1 -1
- package/dist/src/internal/nile-element.d.ts +52 -0
- package/dist/src/internal/nile-element.js +45 -0
- package/dist/src/internal/nile-element.js.map +1 -1
- package/dist/src/nile-avatar/nile-avatar.js +2 -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 +12 -1
- package/dist/src/nile-badge/nile-badge.js.map +1 -1
- package/dist/src/nile-checkbox/nile-checkbox.css.js +4 -0
- package/dist/src/nile-checkbox/nile-checkbox.css.js.map +1 -1
- package/dist/src/nile-checkbox/nile-checkbox.d.ts +2 -0
- package/dist/src/nile-checkbox/nile-checkbox.js +5 -0
- package/dist/src/nile-checkbox/nile-checkbox.js.map +1 -1
- package/dist/src/nile-checkbox-group/index.d.ts +1 -0
- package/dist/src/nile-checkbox-group/index.js +2 -0
- package/dist/src/nile-checkbox-group/index.js.map +1 -0
- package/dist/src/nile-checkbox-group/nile-checkbox-group.css.d.ts +1 -0
- package/dist/src/nile-checkbox-group/nile-checkbox-group.css.js +70 -0
- package/dist/src/nile-checkbox-group/nile-checkbox-group.css.js.map +1 -0
- package/dist/src/nile-checkbox-group/nile-checkbox-group.d.ts +84 -0
- package/dist/src/nile-checkbox-group/nile-checkbox-group.js +355 -0
- package/dist/src/nile-checkbox-group/nile-checkbox-group.js.map +1 -0
- package/dist/src/nile-checkbox-group/nile-checkbox-group.test.d.ts +2 -0
- package/dist/src/nile-checkbox-group/nile-checkbox-group.test.js +671 -0
- package/dist/src/nile-checkbox-group/nile-checkbox-group.test.js.map +1 -0
- package/dist/src/nile-floating-panel/nile-floating-panel.d.ts +2 -0
- package/dist/src/nile-floating-panel/nile-floating-panel.js +12 -1
- package/dist/src/nile-floating-panel/nile-floating-panel.js.map +1 -1
- package/dist/src/nile-icon/icons/svg/folder_delete.d.ts +5 -0
- package/dist/src/nile-icon/icons/svg/folder_delete.js +5 -0
- package/dist/src/nile-icon/icons/svg/folder_delete.js.map +1 -0
- package/dist/src/nile-icon/icons/svg/index.d.ts +1 -0
- package/dist/src/nile-icon/icons/svg/index.js +1 -0
- package/dist/src/nile-icon/icons/svg/index.js.map +1 -1
- package/dist/src/nile-icon/icons/svg/layers-three-02.d.ts +1 -1
- package/dist/src/nile-icon/icons/svg/layers-three-02.js +1 -1
- package/dist/src/nile-icon/icons/svg/layers-three-02.js.map +1 -1
- package/dist/src/nile-link/nile-link.d.ts +2 -1
- package/dist/src/nile-link/nile-link.js +18 -1
- package/dist/src/nile-link/nile-link.js.map +1 -1
- package/dist/src/nile-otp-input/index.d.ts +1 -0
- package/dist/src/nile-otp-input/index.js +2 -0
- package/dist/src/nile-otp-input/index.js.map +1 -0
- package/dist/src/nile-otp-input/nile-otp-input.css.d.ts +12 -0
- package/dist/src/nile-otp-input/nile-otp-input.css.js +269 -0
- package/dist/src/nile-otp-input/nile-otp-input.css.js.map +1 -0
- package/dist/src/nile-otp-input/nile-otp-input.d.ts +156 -0
- package/dist/src/nile-otp-input/nile-otp-input.enum.d.ts +26 -0
- package/dist/src/nile-otp-input/nile-otp-input.enum.js +32 -0
- package/dist/src/nile-otp-input/nile-otp-input.enum.js.map +1 -0
- package/dist/src/nile-otp-input/nile-otp-input.js +762 -0
- package/dist/src/nile-otp-input/nile-otp-input.js.map +1 -0
- package/dist/src/nile-otp-input/nile-otp-input.test.d.ts +1 -0
- package/dist/src/nile-otp-input/nile-otp-input.test.js +493 -0
- package/dist/src/nile-otp-input/nile-otp-input.test.js.map +1 -0
- package/dist/src/nile-pagination/nile-pagination.css.js +7 -0
- package/dist/src/nile-pagination/nile-pagination.css.js.map +1 -1
- package/dist/src/nile-radio/nile-radio.css.js +4 -0
- package/dist/src/nile-radio/nile-radio.css.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js +8 -6
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.d.ts +2 -0
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js +43 -0
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rte-link.test.js +6 -5
- package/dist/src/nile-rich-text-editor/nile-rte-link.test.js.map +1 -1
- package/dist/src/nile-select/nile-select.css.js +21 -2
- package/dist/src/nile-select/nile-select.css.js.map +1 -1
- package/dist/src/nile-select/nile-select.d.ts +4 -0
- package/dist/src/nile-select/nile-select.js +42 -24
- package/dist/src/nile-select/nile-select.js.map +1 -1
- package/dist/src/nile-select/portal-utils.d.ts +2 -0
- package/dist/src/nile-select/portal-utils.js +36 -3
- package/dist/src/nile-select/portal-utils.js.map +1 -1
- package/dist/src/version.js +2 -2
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -2
- package/plop-templates/lit/index.ts.hbs +1 -1
- package/plop-templates/lit/lit.css.ts.hbs +1 -1
- package/plop-templates/lit/lit.ts.hbs +1 -1
- package/src/index.ts +3 -1
- package/src/internal/accessibility/a11y.custom-value.enum.ts +69 -0
- package/src/internal/accessibility/a11y.property.enum.ts +33 -0
- package/src/internal/accessibility/a11y.role.enum.ts +50 -0
- package/src/internal/accessibility/a11y.state.enum.ts +17 -0
- package/src/internal/accessibility/accessibility.const.ts +9 -0
- package/src/internal/accessibility/role.enum.ts +3 -0
- package/src/internal/enum.ts +23 -1
- package/src/internal/nile-element.ts +99 -0
- package/src/nile-avatar/nile-avatar.ts +2 -0
- package/src/nile-badge/nile-badge.ts +13 -1
- package/src/nile-checkbox/nile-checkbox.css.ts +4 -0
- package/src/nile-checkbox/nile-checkbox.ts +3 -0
- package/src/nile-checkbox-group/index.ts +1 -0
- package/src/nile-checkbox-group/nile-checkbox-group.css.ts +70 -0
- package/src/nile-checkbox-group/nile-checkbox-group.test.ts +769 -0
- package/src/nile-checkbox-group/nile-checkbox-group.ts +351 -0
- package/src/nile-floating-panel/nile-floating-panel.ts +10 -1
- package/src/nile-icon/icons/svg/folder_delete.ts +5 -0
- package/src/nile-icon/icons/svg/index.ts +1 -0
- package/src/nile-icon/icons/svg/layers-three-02.ts +1 -1
- package/src/nile-link/nile-link.ts +21 -2
- package/src/nile-otp-input/index.ts +1 -0
- package/src/nile-otp-input/nile-otp-input.css.ts +271 -0
- package/src/nile-otp-input/nile-otp-input.enum.ts +30 -0
- package/src/nile-otp-input/nile-otp-input.test.ts +732 -0
- package/src/nile-otp-input/nile-otp-input.ts +835 -0
- package/src/nile-pagination/nile-pagination.css.ts +7 -0
- package/src/nile-radio/nile-radio.css.ts +4 -0
- package/src/nile-rich-text-editor/nile-rich-text-editor.css.ts +8 -6
- package/src/nile-rich-text-editor/nile-rich-text-editor.ts +43 -0
- package/src/nile-rich-text-editor/nile-rte-link.test.ts +6 -5
- package/src/nile-select/nile-select.css.ts +21 -2
- package/src/nile-select/nile-select.ts +44 -24
- package/src/nile-select/portal-utils.ts +46 -3
- package/vscode-html-custom-data.json +281 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-rich-text-editor.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport './nile-rte-toolbar';\nimport './nile-rte-toolbar-item';\nimport './nile-rte-select';\nimport './nile-rte-color';\nimport './nile-rte-divider';\nimport './nile-rte-preview';\nimport './nile-rte-mentions';\nimport './nile-rte-link';\n\nimport {\n closestBlock,\n nearestElement,\n rgbToHex,\n toggleInlineTag,\n setBlockTag,\n setAlignment,\n setFontFamily,\n setForeColor,\n setBackColor,\n toggleList,\n} from './utils/index';\n\nimport { styles } from './nile-rich-text-editor.css';\n\ntype MentionsConfig = Record<string, { key: string; label: string }[]>;\n\nconst DEFAULT_ICONS: Record<string, string> = {\n bold: 'format_bold',\n italic: 'format_italic',\n underline: 'format_underline',\n link: 'link_2',\n left: 'format_align_left',\n center: 'format_align_middle',\n right: 'format_align_right',\n justify: 'format_align_justify',\n ul: 'format_list_bulleted',\n ol: 'format_list_numbered',\n clear: 'format_clear'\n};\n\nconst DEFAULT_IMPORTANT_PROPS = [\n 'font-weight',\n 'font-style',\n 'text-decoration',\n 'color',\n 'background-color',\n 'font-size',\n 'font-family',\n 'text-align',\n 'line-height',\n 'letter-spacing',\n 'white-space',\n 'vertical-align',\n 'list-style-position',\n 'padding-inline-start',\n];\n\n@customElement('nile-rich-text-editor')\nexport class NileRichTextEditor extends LitElement {\n protected createRenderRoot() {\n return this;\n }\n\n @property({ type: String, attribute: true, reflect: true }) value = '';\n @property({ type: Boolean, attribute: true, reflect: true }) noStyles = false;\n @property({ type: Boolean, attribute: true, reflect: true }) disabled = false; \n @property({ type: Boolean, attribute: 'singlelineeditor', reflect: true }) singleLineEditor =\n false;\n @property({ type: String }) placeholder = '';\n\n\n @property({\n attribute: 'mentions',\n reflect: true,\n converter: {\n fromAttribute: (value: string): MentionsConfig => {\n try {\n const parsed = JSON.parse(value);\n const out: MentionsConfig = {};\n for (const trig of Object.keys(parsed)) {\n const arr = parsed[trig];\n if (Array.isArray(arr)) {\n out[trig] = arr\n .filter(\n i =>\n i &&\n typeof i.key === 'string' &&\n typeof i.label === 'string'\n )\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch {\n return {};\n }\n },\n toAttribute: (v: MentionsConfig) => JSON.stringify(v),\n },\n })\n mentions: MentionsConfig = {};\n\n @property({\n attribute: 'whitelist',\n reflect: false,\n converter: {\n fromAttribute: (value: string): string[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed.filter(v => typeof v === 'string') : [];\n } catch {\n return [];\n }\n },\n },\n })\n whitelist: string[] = [];\n\n @state() private content = '';\n private editorEl!: HTMLElement;\n private previewEl: HTMLElement | null = null;\n private toolbarEl: HTMLElement | null = null;\n\n private lastRange: Range | null = null;\n\n private buttonMap = new Map<string, HTMLElement[]>();\n private headingSelect: HTMLSelectElement | null = null;\n private fontSelect: HTMLSelectElement | null = null;\n private colorInput: HTMLInputElement | null = null;\n private bgColorInput: HTMLInputElement | null = null;\n private colorSwatchEl: HTMLElement | null = null;\n private bgSwatchEl: HTMLElement | null = null;\n private containerEl: HTMLElement | null = null;\n private linkEl: HTMLElement | null = null;\n\n private mentionsEl: HTMLElement | null = null;\n\n private injectCss(cssText: string) {\n if (this.querySelector('style[data-rte-style]')) return;\n const style = document.createElement('style');\n style.setAttribute('data-rte-style', 'true');\n style.textContent = cssText;\n this.insertBefore(style, this.firstChild);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.injectCss(styles.cssText);\n this.ensureStructure();\n if (this.placeholder && this.editorEl) {\n this.editorEl.dataset.placeholder = this.placeholder;\n }\n\n\n if (this.value && !this.editorEl.innerHTML.trim()) {\n this.editorEl.innerHTML = this.value;\n }\n this.content = this.editorEl.innerHTML;\n\n if (this.toolbarEl) this.wireAuthoredToolbar(this.toolbarEl);\n this.mentionsEl = this.querySelector('nile-rte-mentions');\n if (this.mentionsEl) {\n (this.mentionsEl as any).attach?.(this.editorEl, this as HTMLElement);\n (this.mentionsEl as any).setExternalConfig?.(this.mentions);\n }\n\n this.wireEditor();\n document.addEventListener('selectionchange', this.onSelectionChange, {\n passive: true,\n });\n this.updateToolbarState();\n this.syncPreview();\n }\n\n private ensureStructure() {\n this.toolbarEl = this.querySelector('nile-rte-toolbar');\n this.previewEl = this.querySelector('nile-rte-preview');\n\n // container for toolbar + editor\n this.containerEl = this.querySelector('.rte-container') as HTMLElement;\n if (!this.containerEl) {\n this.containerEl = document.createElement('div');\n this.containerEl.className = 'rte-container';\n this.appendChild(this.containerEl);\n }\n\n // ensure editor\n this.ensureEditor();\n\n // put toolbar + editor inside container\n if (this.toolbarEl && this.toolbarEl.parentElement !== this.containerEl) {\n this.containerEl.appendChild(this.toolbarEl);\n }\n if (this.editorEl.parentElement !== this.containerEl) {\n this.containerEl.appendChild(this.editorEl);\n }\n\n if (this.previewEl) {\n if (this.previewEl.parentElement !== this) {\n this.appendChild(this.previewEl);\n }\n\n if (this.previewEl.previousElementSibling !== this.containerEl) {\n this.insertBefore(this.previewEl, this.containerEl.nextSibling);\n }\n }\n }\n\n private updateContentWithMention(mentionDetail: any) {\n this.updateContent();\n this.dispatchEvent(\n new CustomEvent('nile-change', {\n detail: {\n content: this.content,\n mention: mentionDetail,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n disconnectedCallback(): void {\n this.unwireEditor();\n document.removeEventListener('selectionchange', this.onSelectionChange);\n\n if (this.mentionsEl && (this.mentionsEl as any).detach) {\n (this.mentionsEl as any).detach();\n }\n super.disconnectedCallback();\n }\n protected updated(changed: Map<string, any>) {\n if (changed.has('value')) {\n if (this.editorEl && this.value !== this.editorEl.innerHTML) {\n this.editorEl.innerHTML = this.value || '<p><br></p>';\n this.content = this.editorEl.innerHTML;\n this.syncPreview();\n }\n }\n if (changed.has('singleLineEditor')) {\n if (this.editorEl) {\n this.editorEl.classList.toggle('single-line', this.singleLineEditor);\n }\n if (this.previewEl) {\n this.previewEl.classList.toggle('single-line', this.singleLineEditor);\n }\n }\n if (changed.has('disabled') && this.editorEl) {\n this.editorEl.setAttribute('contenteditable', this.disabled ? 'false' : 'true');\n this.editorEl.tabIndex = this.disabled ? -1 : 0;\n if (this.linkEl) {\n (this.linkEl as any).disabled = this.disabled;\n }\n }\n if (changed.has('placeholder') && this.editorEl) {\n if (this.placeholder) {\n this.editorEl.dataset.placeholder = this.placeholder;\n } else {\n delete this.editorEl.dataset.placeholder;\n }\n }\n \n }\n\n private ensureEditor() {\n this.editorEl = this.querySelector('.editor') as HTMLElement;\n if (!this.editorEl) {\n const editor = document.createElement('article');\n editor.className = 'editor';\n editor.setAttribute('contenteditable', this.disabled ? 'false' : 'true');\n editor.tabIndex = this.disabled ? -1 : 0;\n this.editorEl = editor;\n }\n if (this.placeholder) {\n this.editorEl.dataset.placeholder = this.placeholder;\n }\n \n if (!this.editorEl.innerHTML.trim()) {\n this.editorEl.innerHTML = '<p><br></p>';\n }\n }\n\n private unwrapMention(span: HTMLElement, preserveText = true) {\n const parent = span.parentNode;\n if (!parent) return;\n\n const txt = preserveText\n ? (span.textContent ?? '').replace(/\\u200B/g, '')\n : '';\n const textNode = document.createTextNode(txt);\n parent.insertBefore(textNode, span);\n parent.removeChild(span);\n const r = document.createRange();\n r.setStartAfter(textNode);\n r.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(r);\n }\n\n private scrubBrokenMentions() {\n if (!this.editorEl) return;\n const mentions = this.editorEl.querySelectorAll('span.mention');\n\n mentions.forEach(m => {\n const span = m as HTMLElement;\n const key = span.getAttribute('data-mention-key');\n const label = span.getAttribute('data-mention-label');\n const trigger = span.getAttribute('data-mention-trigger') || '';\n const text = (span.textContent ?? '').replace(/\\u200B/g, '').trim();\n\n const looksValid =\n !!key &&\n !!label &&\n text.length > 0 &&\n text.startsWith(trigger) &&\n text.includes(label);\n\n if (!text || !looksValid) {\n this.unwrapMention(span, true);\n return;\n }\n });\n }\n\n private onEditorClick = (e: MouseEvent) => {\n const anchor = (e.target as HTMLElement).closest?.('a');\n if (anchor) e.preventDefault();\n };\n\n private onEditorInput = () => {\n this.ensureAtLeastOneParagraph();\n this.scrubBrokenMentions();\n this.updateContent();\n this.updateToolbarState();\n };\n\n private onEditorMouseup = () => {\n this.saveSelection();\n this.updateToolbarState();\n };\n\n private onEditorKeyup = (e: KeyboardEvent) => {\n this.saveSelection();\n\n if (\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n ].includes(e.key)\n ) {\n this.updateToolbarState();\n }\n };\n\n private wireEditor() {\n this.editorEl.addEventListener('click', this.onEditorClick);\n this.editorEl.addEventListener('input', this.onEditorInput);\n this.editorEl.addEventListener('mouseup', this.onEditorMouseup);\n this.editorEl.addEventListener('keyup', this.onEditorKeyup);\n this.editorEl.addEventListener('keydown', this.onEditorKeydown);\n }\n\n private unwireEditor() {\n if (!this.editorEl) return;\n this.editorEl.removeEventListener('click', this.onEditorClick);\n this.editorEl.removeEventListener('input', this.onEditorInput);\n this.editorEl.removeEventListener('mouseup', this.onEditorMouseup);\n this.editorEl.removeEventListener('keyup', this.onEditorKeyup);\n this.editorEl.removeEventListener('keydown', this.onEditorKeydown);\n }\n\n private onEditorKeydown = (e: KeyboardEvent) => {\n if (this.singleLineEditor && e.key === 'Enter' && e.shiftKey) {\n e.preventDefault();\n return;\n }\n if (e.ctrlKey && e.key.toLowerCase() === 'i') {\n e.preventDefault();\n toggleInlineTag(this.editorEl, 'em');\n this.updateContent();\n this.updateToolbarState();\n }\n\n if (this.singleLineEditor && e.key === 'Enter') {\n e.preventDefault();\n return;\n }\n if (e.key !== 'Tab') return;\n\n e.preventDefault();\n this.focusAndRestore();\n\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n\n if (e.shiftKey) {\n if (range.collapsed && range.startContainer.nodeType === Node.TEXT_NODE) {\n const t = range.startContainer as Text;\n const off = range.startOffset;\n const before = t.data.slice(0, off);\n\n const removed = before.replace(/(\\t|[ \\u00a0]{2})$/, '');\n if (removed.length !== before.length) {\n t.data = removed + t.data.slice(off);\n const r = document.createRange();\n r.setStart(t, removed.length);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n this.updateContent();\n this.updateToolbarState();\n }\n }\n return;\n }\n\n range.deleteContents();\n const tabNode = document.createTextNode('\\t');\n range.insertNode(tabNode);\n\n const r = document.createRange();\n r.setStartAfter(tabNode);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n\n this.updateContent();\n this.updateToolbarState();\n };\n\n private wireAuthoredToolbar(tb: HTMLElement) {\n this.buttonMap.clear();\n this.headingSelect = null;\n this.fontSelect = null;\n this.colorInput = null;\n\n Array.from(tb.children).forEach(child => {\n const tag = child.tagName.toLowerCase();\n\n if (tag === 'nile-rte-select' && child.getAttribute('type') === 'align') {\n (child as any).disabled = this.disabled;\n child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n const alignment = e.detail as 'left' | 'center' | 'right' | 'justify';\n setAlignment(this.editorEl, alignment);\n this.updateContent();\n this.updateToolbarState();\n });\n return;\n }\n if (tag === 'nile-rte-link') {\n (child as any).editorEl = this.editorEl;\n (child as any).disabled = this.disabled;\n this.linkEl = child as HTMLElement;\n child.addEventListener('nile-link-changed', () => {\n this.updateContent();\n this.updateToolbarState();\n });\n return;\n }\n\n if (tag === 'nile-rte-toolbar-item') {\n let btn = child.querySelector(\n ':scope > nile-button'\n ) as HTMLElement | null;\n\n const cmd = child.getAttribute('name') || '';\n const label = child.getAttribute('label') || cmd;\n const iconAttr = child.getAttribute('icon');\n const authoredHasContent = child.innerHTML.trim().length > 0;\n\n if (!btn) {\n btn = document.createElement('nile-button');\n (btn as any).variant = 'tertiary';\n (btn as any).size = 'small';\n }\n (btn as any).disabled = this.disabled;\n\n if (iconAttr) {\n btn.innerHTML = `<nile-icon name=\"${iconAttr}\" color=\"${this.disabled ? 'var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}\" ></nile-icon>`;\n child.innerHTML = '';\n } else if (!authoredHasContent) {\n const defaultIcon = DEFAULT_ICONS[cmd];\n if (defaultIcon) {\n btn.innerHTML = `<nile-icon name=\"${defaultIcon}\" size=\"20\" color=\"${this.disabled ? 'var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}\" ></nile-icon>`;\n } else {\n btn.textContent = label || cmd;\n }\n child.innerHTML = '';\n } else {\n btn.innerHTML = child.innerHTML;\n child.innerHTML = '';\n }\n\n if (!btn.isConnected) {\n if (this.disabled) {\n child.appendChild(btn);\n } else {\n const tooltip = document.createElement('nile-lite-tooltip');\n tooltip.setAttribute('content', label);\n tooltip.appendChild(btn);\n child.appendChild(tooltip);\n }\n }\n\n btn.setAttribute('aria-label', label);\n btn.addEventListener('mousedown', e => e.preventDefault());\n btn.addEventListener('click', () => this.onToolbarCommand(cmd));\n\n const arr = this.buttonMap.get(cmd) ?? [];\n arr.push(btn);\n this.buttonMap.set(cmd, arr);\n\n return;\n }\n if (tag === 'nile-rte-select') {\n const type = child.getAttribute('type') || '';\n\n child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n\n const val = e.detail as string;\n\n if (type === 'heading') {\n setBlockTag(this.editorEl, val as any);\n } else if (type === 'font') {\n setFontFamily(this.editorEl, val);\n }\n\n this.updateContent();\n this.updateToolbarState();\n });\n\n return;\n }\n\n if (tag === 'nile-rte-color') {\n child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n const { mode, value } = e.detail;\n\n if (mode === 'backColor') {\n setBackColor(this.editorEl, value);\n } else {\n setForeColor(this.editorEl, value);\n }\n\n this.updateContent();\n this.updateToolbarState();\n });\n return;\n }\n });\n }\n private onSelectionChange = () => {\n if (!this.editorEl) return;\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (this.editorEl.contains(range.commonAncestorContainer)) {\n this.lastRange = range.cloneRange();\n this.updateToolbarState();\n }\n };\n private saveSelection() {\n const sel = window.getSelection();\n if (sel && sel.rangeCount) this.lastRange = sel.getRangeAt(0).cloneRange();\n }\n private restoreSelection() {\n if (!this.lastRange) return;\n const sel = document.getSelection();\n if (!sel) return;\n sel.removeAllRanges();\n sel.addRange(this.lastRange);\n }\n private focusAndRestore() {\n this.editorEl?.focus();\n this.restoreSelection();\n }\n private getCleanContent(): string {\n const clone = this.editorEl.cloneNode(true) as HTMLElement;\n clone.querySelectorAll<HTMLElement>('*').forEach(el => {\n el.removeAttribute('style');\n });\n \n return clone.innerHTML;\n }\n \n private insertList(type: 'ul' | 'ol') {\n this.restoreSelection();\n if (!this.lastRange) return;\n\n const list = document.createElement(type);\n\n // grab the selected fragment\n const frag = this.lastRange.extractContents();\n const temp = document.createElement('div');\n temp.appendChild(frag);\n\n // wrap each top-level node in an <li>\n Array.from(temp.childNodes).forEach(n => {\n // skip empty whitespace text nodes\n if (n.nodeType === Node.TEXT_NODE && !n.textContent?.trim()) return;\n const li = document.createElement('li');\n li.appendChild(n);\n list.appendChild(li);\n });\n\n this.lastRange.insertNode(list);\n this.afterListEdit(list);\n }\n\n private afterListEdit(node: Node) {\n const range = document.createRange();\n range.setStartAfter(node);\n range.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n\n this.saveSelection();\n this.updateContent();\n this.updateToolbarState();\n }\n\n private ensureAtLeastOneParagraph() {\n const el = this.editorEl;\n if (!el) return;\n\n const onlyWhitespace =\n (el.textContent ?? '').replace(/\\u200B/g, '').trim() === '';\n if (el.childNodes.length === 0 || onlyWhitespace) {\n el.innerHTML = '<p><br></p>';\n return;\n }\n\n const hasBlock = el.querySelector(\n 'p,h1,h2,h3,h4,h5,h6,ul,ol,table,blockquote,pre'\n );\n if (!hasBlock) {\n const p = document.createElement('p');\n while (el.firstChild) p.appendChild(el.firstChild);\n if (!p.hasChildNodes()) p.appendChild(document.createElement('br'));\n el.appendChild(p);\n return;\n }\n\n el.querySelectorAll('p').forEach(p => {\n if ((p.textContent ?? '').replace(/\\u200B/g, '') === '') {\n if (!p.innerHTML.toLowerCase().includes('<br')) p.innerHTML = '<br>';\n }\n });\n }\n\n // ---------- Toolbar/commands ----------\n private onToolbarCommand(cmd: string) {\n this.focusAndRestore();\n switch (cmd) {\n case 'bold':\n toggleInlineTag(this.editorEl, 'strong');\n break;\n case 'italic':\n toggleInlineTag(this.editorEl, 'em');\n break;\n case 'underline':\n toggleInlineTag(this.editorEl, 'u');\n break;\n case 'left':\n setAlignment(this.editorEl, 'left');\n break;\n case 'center':\n setAlignment(this.editorEl, 'center');\n break;\n case 'right':\n setAlignment(this.editorEl, 'right');\n break;\n case 'justify':\n setAlignment(this.editorEl, 'justify');\n break;\n case 'ul':\n toggleList(this.editorEl, 'ul');\n this.updateContent();\n this.updateToolbarState();\n break;\n case 'ol':\n toggleList(this.editorEl, 'ol');\n this.updateContent();\n this.updateToolbarState();\n break;\n\n case 'link':\n break;\n case 'clear':\n const walker = document.createTreeWalker(\n this.editorEl,\n NodeFilter.SHOW_ELEMENT\n );\n const toUnwrap: HTMLElement[] = [];\n while (walker.nextNode()) {\n const el = walker.currentNode as HTMLElement;\n el.removeAttribute('style');\n if (\n ['B', 'STRONG', 'I', 'EM', 'U', 'SPAN', 'FONT'].includes(el.tagName)\n ) {\n toUnwrap.push(el);\n }\n }\n for (const el of toUnwrap) {\n while (el.firstChild) el.parentNode?.insertBefore(el.firstChild, el);\n el.remove();\n }\n this.ensureAtLeastOneParagraph();\n break;\n\n default:\n break;\n }\n this.updateContent();\n this.updateToolbarState();\n }\n\n private setBtnActive(cmd: string, active: boolean) {\n const arr = this.buttonMap.get(cmd);\n if (!arr) return;\n for (const btn of arr) btn.toggleAttribute('data-active', !!active);\n }\n\n private updateToolbarState() {\n if (!this.editorEl) return;\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (!this.editorEl.contains(range.commonAncestorContainer)) return;\n\n const startElm = nearestElement(range.startContainer) || this.editorEl;\n const comp = getComputedStyle(startElm);\n const block =\n closestBlock(range.startContainer, this.editorEl) || this.editorEl;\n\n const isBold = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const t = n.tagName.toLowerCase();\n if (t === 'strong' || t === 'b') return true;\n const w = getComputedStyle(n).fontWeight;\n if (parseInt(w, 10) >= 600) return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const isItalic = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const t = n.tagName.toLowerCase();\n if (t === 'em' || t === 'i') return true;\n if (getComputedStyle(n).fontStyle === 'italic') return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const isUnderline = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const tdl = getComputedStyle(n).textDecorationLine;\n if (tdl && tdl.includes('underline')) return true;\n if (n.tagName.toLowerCase() === 'u') return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const inLink = !!startElm.closest('a');\n\n const align = (block.style.textAlign ||\n getComputedStyle(block).textAlign ||\n 'start') as string;\n const alignNorm = align === 'start' ? 'left' : align;\n\n const inLi = !!startElm.closest('li');\n const listType = inLi\n ? startElm.closest('ul,ol')?.tagName.toLowerCase() || ''\n : '';\n\n this.setBtnActive('bold', isBold);\n this.setBtnActive('italic', isItalic);\n this.setBtnActive('underline', isUnderline);\n this.setBtnActive('link', inLink);\n\n if (this.linkEl) {\n const linkBtn = this.linkEl.querySelector('nile-button');\n if (linkBtn) linkBtn.toggleAttribute('data-active', inLink);\n }\n\n this.setBtnActive(\n 'left',\n alignNorm === 'left' &&\n !['center', 'right', 'justify'].includes(alignNorm)\n );\n this.setBtnActive('center', alignNorm === 'center');\n this.setBtnActive('right', alignNorm === 'right');\n this.setBtnActive('justify', alignNorm === 'justify');\n\n this.setBtnActive('ul', listType === 'ul');\n this.setBtnActive('ol', listType === 'ol');\n\n if (this.headingSelect) {\n const tag = block.tagName.toLowerCase();\n const v = ['h1', 'h2', 'h3'].includes(tag) ? tag : 'p';\n if (this.headingSelect.value !== v) this.headingSelect.value = v;\n }\n\n if (this.fontSelect) {\n const ff = (comp.fontFamily || '')\n .replace(/[\"']/g, '')\n .split(',')[0]\n .trim()\n .toLowerCase();\n if (ff) {\n for (const opt of Array.from(this.fontSelect.options)) {\n if (opt.value.toLowerCase() === ff) {\n this.fontSelect.value = opt.value;\n break;\n }\n }\n }\n }\n\n if (this.colorInput) {\n const hex = rgbToHex(comp.color);\n if (hex && this.colorInput.value.toLowerCase() !== hex.toLowerCase()) {\n this.colorInput.value = hex;\n }\n if (this.colorSwatchEl)\n this.colorSwatchEl.style.backgroundColor = this.colorInput.value;\n }\n\n if (this.bgColorInput) {\n const bg = getComputedStyle(startElm).backgroundColor;\n if (\n bg &&\n !/transparent|rgba\\(\\s*0\\s*,\\s*0\\s*,\\s*0\\s*,\\s*0\\s*\\)/i.test(bg)\n ) {\n const bgHex = rgbToHex(bg);\n if (\n bgHex &&\n this.bgColorInput.value.toLowerCase() !== bgHex.toLowerCase()\n ) {\n this.bgColorInput.value = bgHex;\n }\n }\n if (this.bgSwatchEl)\n this.bgSwatchEl.style.backgroundColor = this.bgColorInput.value;\n }\n }\n\n private syncPreview() {\n this.updateContent();\n }\n\n private getComputedImportantProps(): string[] {\n return Array.from(\n new Set([\n ...DEFAULT_IMPORTANT_PROPS,\n ...(this.whitelist ?? []),\n ])\n );\n }\n \n\n private updateContent() {\n if (!this.editorEl) return;\n this.ensureAtLeastOneParagraph();\n const isEmpty = (this.editorEl.textContent ?? '').trim() === '';\n this.editorEl.classList.toggle('empty', isEmpty);\n const clone = this.editorEl.cloneNode(true) as HTMLElement;\n \n if (!this.noStyles) {\n const origWalker = document.createTreeWalker(\n this.editorEl,\n NodeFilter.SHOW_ELEMENT\n );\n const cloneWalker = document.createTreeWalker(\n clone,\n NodeFilter.SHOW_ELEMENT\n );\n \n \n const importantProps = this.getComputedImportantProps();\n\n while (origWalker.nextNode() && cloneWalker.nextNode()) {\n const origEl = origWalker.currentNode as HTMLElement;\n const cloneEl = cloneWalker.currentNode as HTMLElement;\n const computed = window.getComputedStyle(origEl);\n \n const cssText = importantProps\n .map(prop => `${prop}:${computed.getPropertyValue(prop)}`)\n .join(';');\n \n if (cssText.trim()) {\n cloneEl.setAttribute('style', cssText);\n }\n }\n } else {\n clone.querySelectorAll<HTMLElement>('[style]').forEach(el =>\n el.removeAttribute('style')\n );\n }\n this.content = clone.innerHTML; \n if (this.previewEl) this.previewEl.innerHTML = this.content;\n \n this.dispatchEvent(\n new CustomEvent('nile-change', {\n detail: { content: this.content },\n bubbles: true,\n composed: true,\n })\n );\n }\n \n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rich-text-editor': NileRichTextEditor;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"nile-rich-text-editor.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport './nile-rte-toolbar';\nimport './nile-rte-toolbar-item';\nimport './nile-rte-select';\nimport './nile-rte-color';\nimport './nile-rte-divider';\nimport './nile-rte-preview';\nimport './nile-rte-mentions';\nimport './nile-rte-link';\n\nimport {\n closestBlock,\n nearestElement,\n rgbToHex,\n toggleInlineTag,\n setBlockTag,\n setAlignment,\n setFontFamily,\n setForeColor,\n setBackColor,\n toggleList,\n} from './utils/index';\n\nimport { styles } from './nile-rich-text-editor.css';\n\ntype MentionsConfig = Record<string, { key: string; label: string }[]>;\n\nconst DEFAULT_ICONS: Record<string, string> = {\n bold: 'format_bold',\n italic: 'format_italic',\n underline: 'format_underline',\n link: 'link_2',\n left: 'format_align_left',\n center: 'format_align_middle',\n right: 'format_align_right',\n justify: 'format_align_justify',\n ul: 'format_list_bulleted',\n ol: 'format_list_numbered',\n clear: 'format_clear'\n};\n\nconst DEFAULT_IMPORTANT_PROPS = [\n 'font-weight',\n 'font-style',\n 'text-decoration',\n 'color',\n 'background-color',\n 'font-size',\n 'font-family',\n 'text-align',\n 'line-height',\n 'letter-spacing',\n 'white-space',\n 'vertical-align',\n 'list-style-position',\n 'padding-inline-start',\n];\n\n@customElement('nile-rich-text-editor')\nexport class NileRichTextEditor extends LitElement {\n protected createRenderRoot() {\n return this;\n }\n\n @property({ type: String, attribute: true, reflect: true }) value = '';\n @property({ type: Boolean, attribute: true, reflect: true }) noStyles = false;\n @property({ type: Boolean, attribute: true, reflect: true }) disabled = false; \n @property({ type: Boolean, attribute: 'singlelineeditor', reflect: true }) singleLineEditor =\n false;\n @property({ type: String }) placeholder = '';\n\n\n @property({\n attribute: 'mentions',\n reflect: true,\n converter: {\n fromAttribute: (value: string): MentionsConfig => {\n try {\n const parsed = JSON.parse(value);\n const out: MentionsConfig = {};\n for (const trig of Object.keys(parsed)) {\n const arr = parsed[trig];\n if (Array.isArray(arr)) {\n out[trig] = arr\n .filter(\n i =>\n i &&\n typeof i.key === 'string' &&\n typeof i.label === 'string'\n )\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch {\n return {};\n }\n },\n toAttribute: (v: MentionsConfig) => JSON.stringify(v),\n },\n })\n mentions: MentionsConfig = {};\n\n @property({\n attribute: 'whitelist',\n reflect: false,\n converter: {\n fromAttribute: (value: string): string[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed.filter(v => typeof v === 'string') : [];\n } catch {\n return [];\n }\n },\n },\n })\n whitelist: string[] = [];\n\n @state() private content = '';\n private editorEl!: HTMLElement;\n private previewEl: HTMLElement | null = null;\n private toolbarEl: HTMLElement | null = null;\n\n private lastRange: Range | null = null;\n\n private buttonMap = new Map<string, HTMLElement[]>();\n private headingSelect: HTMLSelectElement | null = null;\n private fontSelect: HTMLSelectElement | null = null;\n private colorInput: HTMLInputElement | null = null;\n private bgColorInput: HTMLInputElement | null = null;\n private colorSwatchEl: HTMLElement | null = null;\n private bgSwatchEl: HTMLElement | null = null;\n private containerEl: HTMLElement | null = null;\n private linkEl: HTMLElement | null = null;\n\n private mentionsEl: HTMLElement | null = null;\n\n private injectCss(cssText: string) {\n if (this.querySelector('style[data-rte-style]')) return;\n const style = document.createElement('style');\n style.setAttribute('data-rte-style', 'true');\n style.textContent = cssText;\n this.insertBefore(style, this.firstChild);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.injectCss(styles.cssText);\n this.ensureStructure();\n if (this.placeholder && this.editorEl) {\n this.editorEl.dataset.placeholder = this.placeholder;\n }\n\n\n if (this.value && !this.editorEl.innerHTML.trim()) {\n this.editorEl.innerHTML = this.value;\n }\n this.content = this.editorEl.innerHTML;\n\n if (this.toolbarEl) this.wireAuthoredToolbar(this.toolbarEl);\n this.mentionsEl = this.querySelector('nile-rte-mentions');\n if (this.mentionsEl) {\n (this.mentionsEl as any).attach?.(this.editorEl, this as HTMLElement);\n (this.mentionsEl as any).setExternalConfig?.(this.mentions);\n }\n\n this.wireEditor();\n document.addEventListener('selectionchange', this.onSelectionChange, {\n passive: true,\n });\n this.updateToolbarState();\n this.syncPreview();\n }\n\n private ensureStructure() {\n this.toolbarEl = this.querySelector('nile-rte-toolbar');\n this.previewEl = this.querySelector('nile-rte-preview');\n\n // container for toolbar + editor\n this.containerEl = this.querySelector('.rte-container') as HTMLElement;\n if (!this.containerEl) {\n this.containerEl = document.createElement('div');\n this.containerEl.className = 'rte-container';\n this.appendChild(this.containerEl);\n }\n\n // ensure editor\n this.ensureEditor();\n\n // put toolbar + editor inside container\n if (this.toolbarEl && this.toolbarEl.parentElement !== this.containerEl) {\n this.containerEl.appendChild(this.toolbarEl);\n }\n if (this.editorEl.parentElement !== this.containerEl) {\n this.containerEl.appendChild(this.editorEl);\n }\n\n if (this.previewEl) {\n if (this.previewEl.parentElement !== this) {\n this.appendChild(this.previewEl);\n }\n\n if (this.previewEl.previousElementSibling !== this.containerEl) {\n this.insertBefore(this.previewEl, this.containerEl.nextSibling);\n }\n }\n }\n\n private updateContentWithMention(mentionDetail: any) {\n this.updateContent();\n this.dispatchEvent(\n new CustomEvent('nile-change', {\n detail: {\n content: this.content,\n mention: mentionDetail,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n disconnectedCallback(): void {\n this.unwireEditor();\n document.removeEventListener('selectionchange', this.onSelectionChange);\n\n if (this.mentionsEl && (this.mentionsEl as any).detach) {\n (this.mentionsEl as any).detach();\n }\n super.disconnectedCallback();\n }\n protected updated(changed: Map<string, any>) {\n if (changed.has('value')) {\n if (this.editorEl && this.value !== this.editorEl.innerHTML) {\n this.editorEl.innerHTML = this.value || '<p><br></p>';\n this.content = this.editorEl.innerHTML;\n this.syncPreview();\n }\n }\n if (changed.has('singleLineEditor')) {\n if (this.editorEl) {\n this.editorEl.classList.toggle('single-line', this.singleLineEditor);\n }\n if (this.previewEl) {\n this.previewEl.classList.toggle('single-line', this.singleLineEditor);\n }\n }\n if (changed.has('disabled') && this.editorEl) {\n this.editorEl.setAttribute('contenteditable', this.disabled ? 'false' : 'true');\n this.editorEl.tabIndex = this.disabled ? -1 : 0;\n if (this.linkEl) {\n (this.linkEl as any).disabled = this.disabled;\n }\n }\n if (changed.has('placeholder') && this.editorEl) {\n if (this.placeholder) {\n this.editorEl.dataset.placeholder = this.placeholder;\n } else {\n delete this.editorEl.dataset.placeholder;\n }\n }\n \n }\n\n private ensureEditor() {\n this.editorEl = this.querySelector('.editor') as HTMLElement;\n if (!this.editorEl) {\n const editor = document.createElement('article');\n editor.className = 'editor';\n editor.setAttribute('contenteditable', this.disabled ? 'false' : 'true');\n editor.tabIndex = this.disabled ? -1 : 0;\n this.editorEl = editor;\n }\n if (this.placeholder) {\n this.editorEl.dataset.placeholder = this.placeholder;\n }\n \n if (!this.editorEl.innerHTML.trim()) {\n this.editorEl.innerHTML = '<p><br></p>';\n }\n }\n\n private unwrapMention(span: HTMLElement, preserveText = true) {\n const parent = span.parentNode;\n if (!parent) return;\n\n const txt = preserveText\n ? (span.textContent ?? '').replace(/\\u200B/g, '')\n : '';\n const textNode = document.createTextNode(txt);\n parent.insertBefore(textNode, span);\n parent.removeChild(span);\n const r = document.createRange();\n r.setStartAfter(textNode);\n r.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(r);\n }\n\n private scrubBrokenMentions() {\n if (!this.editorEl) return;\n const mentions = this.editorEl.querySelectorAll('span.mention');\n\n mentions.forEach(m => {\n const span = m as HTMLElement;\n const key = span.getAttribute('data-mention-key');\n const label = span.getAttribute('data-mention-label');\n const trigger = span.getAttribute('data-mention-trigger') || '';\n const text = (span.textContent ?? '').replace(/\\u200B/g, '').trim();\n\n const looksValid =\n !!key &&\n !!label &&\n text.length > 0 &&\n text.startsWith(trigger) &&\n text.includes(label);\n\n if (!text || !looksValid) {\n this.unwrapMention(span, true);\n return;\n }\n });\n }\n\n private onEditorClick = (e: MouseEvent) => {\n if (this.disabled) { e.preventDefault(); return; }\n const anchor = (e.target as HTMLElement).closest?.('a');\n if (anchor) e.preventDefault();\n };\n\n private onEditorPaste = (e: ClipboardEvent) => {\n if (this.disabled) e.preventDefault();\n };\n\n private onEditorDrop = (e: DragEvent) => {\n if (this.disabled) e.preventDefault();\n };\n\n private onEditorInput = () => {\n if (this.disabled) return;\n this.ensureAtLeastOneParagraph();\n this.scrubBrokenMentions();\n this.updateContent();\n this.updateToolbarState();\n };\n\n private onEditorMouseup = () => {\n this.saveSelection();\n this.updateToolbarState();\n };\n\n private onEditorKeyup = (e: KeyboardEvent) => {\n this.saveSelection();\n\n if (\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n ].includes(e.key)\n ) {\n this.updateToolbarState();\n }\n };\n\n private wireEditor() {\n this.editorEl.addEventListener('click', this.onEditorClick);\n this.editorEl.addEventListener('input', this.onEditorInput);\n this.editorEl.addEventListener('mouseup', this.onEditorMouseup);\n this.editorEl.addEventListener('keyup', this.onEditorKeyup);\n this.editorEl.addEventListener('keydown', this.onEditorKeydown);\n this.editorEl.addEventListener('paste', this.onEditorPaste);\n this.editorEl.addEventListener('drop', this.onEditorDrop);\n }\n\n private unwireEditor() {\n if (!this.editorEl) return;\n this.editorEl.removeEventListener('click', this.onEditorClick);\n this.editorEl.removeEventListener('input', this.onEditorInput);\n this.editorEl.removeEventListener('mouseup', this.onEditorMouseup);\n this.editorEl.removeEventListener('keyup', this.onEditorKeyup);\n this.editorEl.removeEventListener('keydown', this.onEditorKeydown);\n this.editorEl.removeEventListener('paste', this.onEditorPaste);\n this.editorEl.removeEventListener('drop', this.onEditorDrop);\n }\n\n private onEditorKeydown = (e: KeyboardEvent) => {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n if (this.singleLineEditor && e.key === 'Enter' && e.shiftKey) {\n e.preventDefault();\n return;\n }\n if (e.ctrlKey && e.key.toLowerCase() === 'i') {\n e.preventDefault();\n toggleInlineTag(this.editorEl, 'em');\n this.updateContent();\n this.updateToolbarState();\n }\n\n if (this.singleLineEditor && e.key === 'Enter') {\n e.preventDefault();\n return;\n }\n if (e.key !== 'Tab') return;\n\n e.preventDefault();\n this.focusAndRestore();\n\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n\n if (e.shiftKey) {\n if (range.collapsed && range.startContainer.nodeType === Node.TEXT_NODE) {\n const t = range.startContainer as Text;\n const off = range.startOffset;\n const before = t.data.slice(0, off);\n\n const removed = before.replace(/(\\t|[ \\u00a0]{2})$/, '');\n if (removed.length !== before.length) {\n t.data = removed + t.data.slice(off);\n const r = document.createRange();\n r.setStart(t, removed.length);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n this.updateContent();\n this.updateToolbarState();\n }\n }\n return;\n }\n\n range.deleteContents();\n const tabNode = document.createTextNode('\\t');\n range.insertNode(tabNode);\n\n const r = document.createRange();\n r.setStartAfter(tabNode);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n\n this.updateContent();\n this.updateToolbarState();\n };\n\n private wireAuthoredToolbar(tb: HTMLElement) {\n this.buttonMap.clear();\n this.headingSelect = null;\n this.fontSelect = null;\n this.colorInput = null;\n\n Array.from(tb.children).forEach(child => {\n const tag = child.tagName.toLowerCase();\n\n if (tag === 'nile-rte-select' && child.getAttribute('type') === 'align') {\n (child as any).disabled = this.disabled;\n child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n const alignment = e.detail as 'left' | 'center' | 'right' | 'justify';\n setAlignment(this.editorEl, alignment);\n this.updateContent();\n this.updateToolbarState();\n });\n return;\n }\n if (tag === 'nile-rte-link') {\n (child as any).editorEl = this.editorEl;\n (child as any).disabled = this.disabled;\n this.linkEl = child as HTMLElement;\n child.addEventListener('nile-link-changed', () => {\n this.updateContent();\n this.updateToolbarState();\n });\n return;\n }\n\n if (tag === 'nile-rte-toolbar-item') {\n let btn = child.querySelector(\n ':scope > nile-button'\n ) as HTMLElement | null;\n\n const cmd = child.getAttribute('name') || '';\n const label = child.getAttribute('label') || cmd;\n const iconAttr = child.getAttribute('icon');\n const authoredHasContent = child.innerHTML.trim().length > 0;\n\n if (!btn) {\n btn = document.createElement('nile-button');\n (btn as any).variant = 'tertiary';\n (btn as any).size = 'small';\n }\n (btn as any).disabled = this.disabled;\n\n if (iconAttr) {\n btn.innerHTML = `<nile-icon name=\"${iconAttr}\" color=\"${this.disabled ? 'var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}\" ></nile-icon>`;\n child.innerHTML = '';\n } else if (!authoredHasContent) {\n const defaultIcon = DEFAULT_ICONS[cmd];\n if (defaultIcon) {\n btn.innerHTML = `<nile-icon name=\"${defaultIcon}\" size=\"20\" color=\"${this.disabled ? 'var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}\" ></nile-icon>`;\n } else {\n btn.textContent = label || cmd;\n }\n child.innerHTML = '';\n } else {\n btn.innerHTML = child.innerHTML;\n child.innerHTML = '';\n }\n\n if (!btn.isConnected) {\n if (this.disabled) {\n child.appendChild(btn);\n } else {\n const tooltip = document.createElement('nile-lite-tooltip');\n tooltip.setAttribute('content', label);\n tooltip.appendChild(btn);\n child.appendChild(tooltip);\n }\n }\n\n btn.setAttribute('aria-label', label);\n btn.addEventListener('mousedown', e => e.preventDefault());\n btn.addEventListener('click', () => this.onToolbarCommand(cmd));\n\n const arr = this.buttonMap.get(cmd) ?? [];\n arr.push(btn);\n this.buttonMap.set(cmd, arr);\n\n return;\n }\n if (tag === 'nile-rte-select') {\n const type = child.getAttribute('type') || '';\n\n child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n\n const val = e.detail as string;\n\n if (type === 'heading') {\n setBlockTag(this.editorEl, val as any);\n } else if (type === 'font') {\n setFontFamily(this.editorEl, val);\n }\n\n this.updateContent();\n this.updateToolbarState();\n });\n\n return;\n }\n\n if (tag === 'nile-rte-color') {\n child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n const { mode, value } = e.detail;\n\n if (mode === 'backColor') {\n setBackColor(this.editorEl, value);\n } else {\n setForeColor(this.editorEl, value);\n }\n\n this.updateContent();\n this.updateToolbarState();\n });\n return;\n }\n });\n }\n private onSelectionChange = () => {\n if (!this.editorEl) return;\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (this.editorEl.contains(range.commonAncestorContainer)) {\n this.lastRange = range.cloneRange();\n this.updateToolbarState();\n }\n };\n private saveSelection() {\n const sel = window.getSelection();\n if (sel && sel.rangeCount) this.lastRange = sel.getRangeAt(0).cloneRange();\n }\n private restoreSelection() {\n if (!this.lastRange) return;\n const sel = document.getSelection();\n if (!sel) return;\n sel.removeAllRanges();\n sel.addRange(this.lastRange);\n }\n private focusAndRestore() {\n this.editorEl?.focus();\n this.restoreSelection();\n }\n private getCleanContent(): string {\n const clone = this.editorEl.cloneNode(true) as HTMLElement;\n clone.querySelectorAll<HTMLElement>('*').forEach(el => {\n el.removeAttribute('style');\n });\n \n return clone.innerHTML;\n }\n \n private insertList(type: 'ul' | 'ol') {\n this.restoreSelection();\n if (!this.lastRange) return;\n\n const list = document.createElement(type);\n\n // grab the selected fragment\n const frag = this.lastRange.extractContents();\n const temp = document.createElement('div');\n temp.appendChild(frag);\n\n // wrap each top-level node in an <li>\n Array.from(temp.childNodes).forEach(n => {\n // skip empty whitespace text nodes\n if (n.nodeType === Node.TEXT_NODE && !n.textContent?.trim()) return;\n const li = document.createElement('li');\n li.appendChild(n);\n list.appendChild(li);\n });\n\n this.lastRange.insertNode(list);\n this.afterListEdit(list);\n }\n\n private afterListEdit(node: Node) {\n const range = document.createRange();\n range.setStartAfter(node);\n range.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n\n this.saveSelection();\n this.updateContent();\n this.updateToolbarState();\n }\n\n private ensureAtLeastOneParagraph() {\n const el = this.editorEl;\n if (!el) return;\n\n const onlyWhitespace =\n (el.textContent ?? '').replace(/\\u200B/g, '').trim() === '';\n if (el.childNodes.length === 0 || onlyWhitespace) {\n el.innerHTML = '<p><br></p>';\n const p = el.querySelector('p');\n if (p) {\n const range = document.createRange();\n range.setStart(p, 0);\n range.collapse(true);\n const sel = window.getSelection();\n if (sel) {\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n return;\n }\n\n const hasBlock = el.querySelector(\n 'p,h1,h2,h3,h4,h5,h6,ul,ol,table,blockquote,pre'\n );\n if (!hasBlock) {\n const p = document.createElement('p');\n while (el.firstChild) p.appendChild(el.firstChild);\n if (!p.hasChildNodes()) p.appendChild(document.createElement('br'));\n el.appendChild(p);\n return;\n }\n\n el.querySelectorAll('p').forEach(p => {\n if ((p.textContent ?? '').replace(/\\u200B/g, '') === '') {\n if (!p.innerHTML.toLowerCase().includes('<br')) p.innerHTML = '<br>';\n }\n });\n }\n\n // ---------- Toolbar/commands ----------\n private onToolbarCommand(cmd: string) {\n if (this.disabled) return;\n this.focusAndRestore();\n switch (cmd) {\n case 'bold':\n toggleInlineTag(this.editorEl, 'strong');\n break;\n case 'italic':\n toggleInlineTag(this.editorEl, 'em');\n break;\n case 'underline':\n toggleInlineTag(this.editorEl, 'u');\n break;\n case 'left':\n setAlignment(this.editorEl, 'left');\n break;\n case 'center':\n setAlignment(this.editorEl, 'center');\n break;\n case 'right':\n setAlignment(this.editorEl, 'right');\n break;\n case 'justify':\n setAlignment(this.editorEl, 'justify');\n break;\n case 'ul':\n toggleList(this.editorEl, 'ul');\n this.updateContent();\n this.updateToolbarState();\n break;\n case 'ol':\n toggleList(this.editorEl, 'ol');\n this.updateContent();\n this.updateToolbarState();\n break;\n\n case 'link':\n break;\n case 'clear':\n const walker = document.createTreeWalker(\n this.editorEl,\n NodeFilter.SHOW_ELEMENT\n );\n const toUnwrap: HTMLElement[] = [];\n while (walker.nextNode()) {\n const el = walker.currentNode as HTMLElement;\n el.removeAttribute('style');\n if (\n ['B', 'STRONG', 'I', 'EM', 'U', 'SPAN', 'FONT'].includes(el.tagName)\n ) {\n toUnwrap.push(el);\n }\n }\n for (const el of toUnwrap) {\n while (el.firstChild) el.parentNode?.insertBefore(el.firstChild, el);\n el.remove();\n }\n this.ensureAtLeastOneParagraph();\n break;\n\n default:\n break;\n }\n this.updateContent();\n this.updateToolbarState();\n }\n\n private setBtnActive(cmd: string, active: boolean) {\n const arr = this.buttonMap.get(cmd);\n if (!arr) return;\n for (const btn of arr) btn.toggleAttribute('data-active', !!active);\n }\n\n private updateToolbarState() {\n if (!this.editorEl) return;\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (!this.editorEl.contains(range.commonAncestorContainer)) return;\n\n const startElm = nearestElement(range.startContainer) || this.editorEl;\n const comp = getComputedStyle(startElm);\n const block =\n closestBlock(range.startContainer, this.editorEl) || this.editorEl;\n\n const isBold = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const t = n.tagName.toLowerCase();\n if (t === 'strong' || t === 'b') return true;\n const w = getComputedStyle(n).fontWeight;\n if (parseInt(w, 10) >= 600) return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const isItalic = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const t = n.tagName.toLowerCase();\n if (t === 'em' || t === 'i') return true;\n if (getComputedStyle(n).fontStyle === 'italic') return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const isUnderline = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const tdl = getComputedStyle(n).textDecorationLine;\n if (tdl && tdl.includes('underline')) return true;\n if (n.tagName.toLowerCase() === 'u') return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const inLink = !!startElm.closest('a');\n\n const align = (block.style.textAlign ||\n getComputedStyle(block).textAlign ||\n 'start') as string;\n const alignNorm = align === 'start' ? 'left' : align;\n\n const inLi = !!startElm.closest('li');\n const listType = inLi\n ? startElm.closest('ul,ol')?.tagName.toLowerCase() || ''\n : '';\n\n this.setBtnActive('bold', isBold);\n this.setBtnActive('italic', isItalic);\n this.setBtnActive('underline', isUnderline);\n this.setBtnActive('link', inLink);\n\n if (this.linkEl) {\n const linkBtn = this.linkEl.querySelector('nile-button');\n if (linkBtn) linkBtn.toggleAttribute('data-active', inLink);\n }\n\n this.setBtnActive(\n 'left',\n alignNorm === 'left' &&\n !['center', 'right', 'justify'].includes(alignNorm)\n );\n this.setBtnActive('center', alignNorm === 'center');\n this.setBtnActive('right', alignNorm === 'right');\n this.setBtnActive('justify', alignNorm === 'justify');\n\n this.setBtnActive('ul', listType === 'ul');\n this.setBtnActive('ol', listType === 'ol');\n\n if (this.headingSelect) {\n const tag = block.tagName.toLowerCase();\n const v = ['h1', 'h2', 'h3'].includes(tag) ? tag : 'p';\n if (this.headingSelect.value !== v) this.headingSelect.value = v;\n }\n\n if (this.fontSelect) {\n const ff = (comp.fontFamily || '')\n .replace(/[\"']/g, '')\n .split(',')[0]\n .trim()\n .toLowerCase();\n if (ff) {\n for (const opt of Array.from(this.fontSelect.options)) {\n if (opt.value.toLowerCase() === ff) {\n this.fontSelect.value = opt.value;\n break;\n }\n }\n }\n }\n\n if (this.colorInput) {\n const hex = rgbToHex(comp.color);\n if (hex && this.colorInput.value.toLowerCase() !== hex.toLowerCase()) {\n this.colorInput.value = hex;\n }\n if (this.colorSwatchEl)\n this.colorSwatchEl.style.backgroundColor = this.colorInput.value;\n }\n\n if (this.bgColorInput) {\n const bg = getComputedStyle(startElm).backgroundColor;\n if (\n bg &&\n !/transparent|rgba\\(\\s*0\\s*,\\s*0\\s*,\\s*0\\s*,\\s*0\\s*\\)/i.test(bg)\n ) {\n const bgHex = rgbToHex(bg);\n if (\n bgHex &&\n this.bgColorInput.value.toLowerCase() !== bgHex.toLowerCase()\n ) {\n this.bgColorInput.value = bgHex;\n }\n }\n if (this.bgSwatchEl)\n this.bgSwatchEl.style.backgroundColor = this.bgColorInput.value;\n }\n }\n\n private syncPreview() {\n this.updateContent();\n }\n\n private getComputedImportantProps(): string[] {\n return Array.from(\n new Set([\n ...DEFAULT_IMPORTANT_PROPS,\n ...(this.whitelist ?? []),\n ])\n );\n }\n \n\n private updateContent() {\n if (!this.editorEl) return;\n this.ensureAtLeastOneParagraph();\n const isEmpty = (this.editorEl.textContent ?? '').trim() === '';\n this.editorEl.classList.toggle('empty', isEmpty);\n\n const sel = window.getSelection();\n const caretRange =\n sel && sel.rangeCount > 0 && this.editorEl.contains(sel.getRangeAt(0).startContainer)\n ? sel.getRangeAt(0).cloneRange()\n : null;\n\n const clone = this.editorEl.cloneNode(true) as HTMLElement;\n \n if (!this.noStyles) {\n const origWalker = document.createTreeWalker(\n this.editorEl,\n NodeFilter.SHOW_ELEMENT\n );\n const cloneWalker = document.createTreeWalker(\n clone,\n NodeFilter.SHOW_ELEMENT\n );\n \n \n const importantProps = this.getComputedImportantProps();\n\n while (origWalker.nextNode() && cloneWalker.nextNode()) {\n const origEl = origWalker.currentNode as HTMLElement;\n const cloneEl = cloneWalker.currentNode as HTMLElement;\n const computed = window.getComputedStyle(origEl);\n \n const cssText = importantProps\n .map(prop => `${prop}:${computed.getPropertyValue(prop)}`)\n .join(';');\n \n if (cssText.trim()) {\n cloneEl.setAttribute('style', cssText);\n }\n }\n } else {\n clone.querySelectorAll<HTMLElement>('[style]').forEach(el =>\n el.removeAttribute('style')\n );\n }\n\n if (caretRange && sel && this.editorEl.contains(caretRange.startContainer)) {\n sel.removeAllRanges();\n sel.addRange(caretRange);\n }\n\n this.content = clone.innerHTML; \n if (this.previewEl) this.previewEl.innerHTML = this.content;\n \n this.dispatchEvent(\n new CustomEvent('nile-change', {\n detail: { content: this.content },\n bubbles: true,\n composed: true,\n })\n );\n }\n \n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rich-text-editor': NileRichTextEditor;\n }\n}\n"]}
|
|
@@ -131,12 +131,12 @@ describe('NileRteLink', () => {
|
|
|
131
131
|
const normalize = el.normalizeUrl.bind(el);
|
|
132
132
|
expect(normalize('tel:+123')).to.equal('tel:+123');
|
|
133
133
|
});
|
|
134
|
-
it('18. displayUrl
|
|
134
|
+
it('18. displayUrl returns URL as-is', async () => {
|
|
135
135
|
editor = createEditor();
|
|
136
136
|
const el = await fixture(html `<nile-rte-link .editorEl=${editor}></nile-rte-link>`);
|
|
137
137
|
const display = el.displayUrl.bind(el);
|
|
138
|
-
expect(display('https://example.com')).to.equal('example.com');
|
|
139
|
-
expect(display('http://example.com/path')).to.equal('example.com/path');
|
|
138
|
+
expect(display('https://example.com')).to.equal('https://example.com');
|
|
139
|
+
expect(display('http://example.com/path')).to.equal('http://example.com/path');
|
|
140
140
|
});
|
|
141
141
|
// ── Link Insertion (collapsed selection) ──
|
|
142
142
|
it('19. inserts a new <a> tag with URL as text when selection is collapsed', async () => {
|
|
@@ -213,14 +213,14 @@ describe('NileRteLink', () => {
|
|
|
213
213
|
expect(el.hasActiveLink).to.be.true;
|
|
214
214
|
expect(el.activeAnchor).to.equal(a);
|
|
215
215
|
});
|
|
216
|
-
it('25. pre-fills input with existing link URL
|
|
216
|
+
it('25. pre-fills input with existing link URL', async () => {
|
|
217
217
|
editor = createEditor('<p><a href="https://example.com">link</a></p>');
|
|
218
218
|
const el = await fixture(html `<nile-rte-link .editorEl=${editor}></nile-rte-link>`);
|
|
219
219
|
const a = editor.querySelector('a');
|
|
220
220
|
collapseAt(a, 2);
|
|
221
221
|
el.onOpen();
|
|
222
222
|
await elementUpdated(el);
|
|
223
|
-
expect(el.linkValue).to.equal(
|
|
223
|
+
expect(el.linkValue).to.equal(a.href);
|
|
224
224
|
});
|
|
225
225
|
it('26. updates existing anchor href on apply', async () => {
|
|
226
226
|
editor = createEditor('<p><a href="https://old.com">link</a></p>');
|
|
@@ -321,6 +321,7 @@ describe('NileRteLink', () => {
|
|
|
321
321
|
el.ignoreBlur = false;
|
|
322
322
|
el.isApplying = false;
|
|
323
323
|
el.onInputBlur();
|
|
324
|
+
await sleep(50);
|
|
324
325
|
expect(el.selectionRange).to.be.null;
|
|
325
326
|
});
|
|
326
327
|
it('35. does not close on blur when ignoreBlur is set', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-rte-link.test.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/nile-rte-link.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture, html, elementUpdated } from '@open-wc/testing';\nimport './nile-rte-link';\nimport type { NileRteLink } from './nile-rte-link';\n\nfunction createEditor(content = '<p>hello world</p>'): HTMLElement {\n const el = document.createElement('article');\n el.setAttribute('contenteditable', 'true');\n el.innerHTML = content;\n document.body.appendChild(el);\n return el;\n}\n\nfunction selectText(node: Node, start: number, end: number) {\n const sel = document.getSelection()!;\n sel.removeAllRanges();\n const range = document.createRange();\n const textNode = node.firstChild!;\n range.setStart(textNode, start);\n range.setEnd(textNode, end);\n sel.addRange(range);\n return range;\n}\n\nfunction collapseAt(node: Node, offset: number) {\n const sel = document.getSelection()!;\n sel.removeAllRanges();\n const range = document.createRange();\n const textNode = node.firstChild!;\n range.setStart(textNode, offset);\n range.collapse(true);\n sel.addRange(range);\n return range;\n}\n\nfunction sleep(ms: number) {\n return new Promise(r => setTimeout(r, ms));\n}\n\ndescribe('NileRteLink', () => {\n let editor: HTMLElement;\n\n afterEach(() => {\n editor?.remove();\n });\n\n // ── Rendering and Defaults ──\n\n it('1. renders the component', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el).to.exist;\n });\n\n it('2. tag name is nile-rte-link', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el.tagName.toLowerCase()).to.equal('nile-rte-link');\n });\n\n it('3. default newTab is false', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el.newTab).to.be.false;\n });\n\n it('4. default placeholder is \"Type or paste link here\"', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el.placeholder).to.equal('Type or paste link here');\n });\n\n it('5. default label is \"Link\"', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el.label).to.equal('Link');\n });\n\n it('6. renders a link icon button', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const btn = el.querySelector('nile-button');\n expect(btn).to.exist;\n const icon = el.querySelector('nile-icon');\n expect(icon).to.exist;\n expect(icon!.getAttribute('name')).to.equal('link_2');\n });\n\n it('7. renders a popover element', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const pop = el.querySelector('nile-popover');\n expect(pop).to.exist;\n });\n\n it('8. custom element is defined in registry', async () => {\n expect(customElements.get('nile-rte-link')).to.exist;\n });\n\n // ── Property Binding ──\n\n it('9. set newTab to true', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor} newTab></nile-rte-link>`\n );\n expect(el.newTab).to.be.true;\n });\n\n it('10. set custom placeholder', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor} placeholder=\"Enter URL\"></nile-rte-link>`\n );\n expect(el.placeholder).to.equal('Enter URL');\n });\n\n it('11. set custom label', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor} label=\"Add Link\"></nile-rte-link>`\n );\n expect(el.label).to.equal('Add Link');\n });\n\n it('12. set editorEl reference', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el.editorEl).to.equal(editor);\n });\n\n // ── URL Normalization ──\n\n it('13. plain domain gets https:// prepended', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const normalize = (el as any).normalizeUrl.bind(el);\n expect(normalize('example.com')).to.equal('https://example.com');\n });\n\n it('14. http:// URL stays unchanged', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const normalize = (el as any).normalizeUrl.bind(el);\n expect(normalize('http://example.com')).to.equal('http://example.com');\n });\n\n it('15. https:// URL stays unchanged', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const normalize = (el as any).normalizeUrl.bind(el);\n expect(normalize('https://example.com')).to.equal('https://example.com');\n });\n\n it('16. mailto: URL stays unchanged', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const normalize = (el as any).normalizeUrl.bind(el);\n expect(normalize('mailto:a@b.com')).to.equal('mailto:a@b.com');\n });\n\n it('17. tel: URL stays unchanged', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const normalize = (el as any).normalizeUrl.bind(el);\n expect(normalize('tel:+123')).to.equal('tel:+123');\n });\n\n it('18. displayUrl strips protocol for display', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const display = (el as any).displayUrl.bind(el);\n expect(display('https://example.com')).to.equal('example.com');\n expect(display('http://example.com/path')).to.equal('example.com/path');\n });\n\n // ── Link Insertion (collapsed selection) ──\n\n it('19. inserts a new <a> tag with URL as text when selection is collapsed', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n const a = editor.querySelector('a');\n expect(a).to.exist;\n expect(a!.href).to.include('example.com');\n expect(a!.textContent).to.include('example.com');\n });\n\n it('20. inserts link with target and rel when newTab is true', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor} newTab></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n const a = editor.querySelector('a');\n expect(a).to.exist;\n expect(a!.target).to.equal('_blank');\n expect(a!.rel).to.equal('noopener noreferrer');\n });\n\n it('21. does not set target/rel when newTab is false', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n const a = editor.querySelector('a');\n expect(a).to.exist;\n expect(a!.hasAttribute('target')).to.be.false;\n expect(a!.hasAttribute('rel')).to.be.false;\n });\n\n // ── Link Insertion (text selected) ──\n\n it('22. wraps selected text in an <a> tag', async () => {\n editor = createEditor('<p>hello world</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n selectText(p, 0, 5);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n const a = editor.querySelector('a');\n expect(a).to.exist;\n expect(a!.href).to.include('example.com');\n });\n\n it('23. preserves selected text content after wrapping', async () => {\n editor = createEditor('<p>hello world</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n selectText(p, 0, 5);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n const a = editor.querySelector('a');\n expect(a!.textContent).to.equal('hello');\n });\n\n // ── Link Editing ──\n\n it('24. detects existing anchor and shows edit/unlink buttons', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link text</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n expect((el as any).hasActiveLink).to.be.true;\n expect((el as any).activeAnchor).to.equal(a);\n });\n\n it('25. pre-fills input with existing link URL (protocol stripped)', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n expect((el as any).linkValue).to.equal('example.com');\n });\n\n it('26. updates existing anchor href on apply', async () => {\n editor = createEditor('<p><a href=\"https://old.com\">link</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n (el as any).linkValue = 'https://new.com';\n (el as any).applyLink();\n\n expect(a.href).to.include('new.com');\n });\n\n it('27. toggling newTab on edit updates target/rel attributes', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor} newTab></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n expect(a.target).to.equal('_blank');\n expect(a.rel).to.equal('noopener noreferrer');\n });\n\n // ── Link Removal ──\n\n it('28. unlink removes the <a> tag', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link text</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n (el as any).onRemove();\n\n expect(editor.querySelector('a')).to.be.null;\n });\n\n it('29. unlink preserves the text content', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link text</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n (el as any).onRemove();\n\n expect(editor.querySelector('p')!.textContent).to.equal('link text');\n });\n\n it('30. closes popover after unlink', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link text</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n (el as any).onRemove();\n\n expect((el as any).selectionRange).to.be.null;\n expect((el as any).hasActiveLink).to.be.false;\n });\n\n // ── Popover Behavior ──\n\n it('31. opens popover on button click', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 2);\n\n (el as any).onOpen();\n await sleep(50);\n\n const pop = el.querySelector('nile-popover') as any;\n expect(pop?.isShow).to.be.true;\n });\n\n it('32. closes popover on Escape key', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 2);\n\n (el as any).onOpen();\n await sleep(50);\n\n const event = new KeyboardEvent('keydown', { key: 'Escape', bubbles: true });\n (el as any).onInputKeydown(event);\n\n expect((el as any).selectionRange).to.be.null;\n });\n\n it('33. applies link on Enter key', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n\n const event = new KeyboardEvent('keydown', { key: 'Enter', bubbles: true });\n (el as any).onInputKeydown(event);\n\n const a = editor.querySelector('a');\n expect(a).to.exist;\n });\n\n it('34. closes popover on input blur', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 2);\n\n (el as any).onOpen();\n await sleep(50);\n\n (el as any).ignoreBlur = false;\n (el as any).isApplying = false;\n (el as any).onInputBlur();\n\n expect((el as any).selectionRange).to.be.null;\n });\n\n it('35. does not close on blur when ignoreBlur is set', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 2);\n\n (el as any).onOpen();\n await sleep(50);\n\n (el as any).ignoreBlur = true;\n (el as any).onInputBlur();\n\n expect((el as any).selectionRange).to.not.be.null;\n });\n\n // ── Event Dispatching ──\n\n it('36. fires nile-link-changed with href on link apply', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n let detail: any = null;\n el.addEventListener('nile-link-changed', ((e: CustomEvent) => {\n detail = e.detail;\n }) as EventListener);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n expect(detail).to.exist;\n expect(detail.href).to.include('example.com');\n });\n\n it('37. fires nile-link-changed with empty href on unlink', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n let detail: any = null;\n el.addEventListener('nile-link-changed', ((e: CustomEvent) => {\n detail = e.detail;\n }) as EventListener);\n\n (el as any).onOpen();\n await elementUpdated(el);\n (el as any).onRemove();\n\n expect(detail).to.exist;\n expect(detail.href).to.equal('');\n });\n\n it('38. event bubbles and is composed', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n let bubbles = false;\n let composed = false;\n el.addEventListener('nile-link-changed', ((e: CustomEvent) => {\n bubbles = e.bubbles;\n composed = e.composed;\n }) as EventListener);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n expect(bubbles).to.be.true;\n expect(composed).to.be.true;\n });\n\n // ── Validation ──\n\n it('39. does not apply empty URL', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = '';\n (el as any).applyLink();\n\n expect(editor.querySelector('a')).to.be.null;\n });\n\n it('40. rejects unsupported protocols', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'javascript:alert(1)';\n (el as any).applyLink();\n\n expect(editor.querySelector('a')).to.be.null;\n });\n\n // ── Integration with Parent RTE ──\n\n it('41. parent receives nile-link-changed event and updates content', async () => {\n editor = createEditor('<p>text</p>');\n const container = await fixture(html`\n <div>\n <nile-rte-link .editorEl=${editor}></nile-rte-link>\n </div>\n `);\n const el = container.querySelector('nile-rte-link')! as NileRteLink;\n\n let received = false;\n container.addEventListener('nile-link-changed', () => {\n received = true;\n });\n\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n expect(received).to.be.true;\n });\n\n it('42. toolbar link button shows active state when cursor is inside a link', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link text</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n expect((el as any).hasActiveLink).to.be.true;\n });\n\n it('43. toolbar link button loses active state when cursor moves outside a link', async () => {\n editor = createEditor('<p>normal <a href=\"https://example.com\">link</a> text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n\n const p = editor.querySelector('p')!;\n const textNode = p.firstChild!;\n const sel = document.getSelection()!;\n sel.removeAllRanges();\n const range = document.createRange();\n range.setStart(textNode, 2);\n range.collapse(true);\n sel.addRange(range);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n expect((el as any).hasActiveLink).to.be.false;\n expect((el as any).activeAnchor).to.be.null;\n });\n\n // ── CSS Injection ──\n\n it('44. injects style tag with data-rte-link-style attribute', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const styleTag = el.querySelector('style[data-rte-link-style]');\n expect(styleTag).to.exist;\n });\n\n it('45. does not inject duplicate styles on reconnect', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n\n const parent = el.parentElement!;\n parent.removeChild(el);\n parent.appendChild(el);\n await elementUpdated(el);\n\n const styleTags = el.querySelectorAll('style[data-rte-link-style]');\n expect(styleTags.length).to.equal(1);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"nile-rte-link.test.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/nile-rte-link.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture, html, elementUpdated } from '@open-wc/testing';\nimport './nile-rte-link';\nimport type { NileRteLink } from './nile-rte-link';\n\nfunction createEditor(content = '<p>hello world</p>'): HTMLElement {\n const el = document.createElement('article');\n el.setAttribute('contenteditable', 'true');\n el.innerHTML = content;\n document.body.appendChild(el);\n return el;\n}\n\nfunction selectText(node: Node, start: number, end: number) {\n const sel = document.getSelection()!;\n sel.removeAllRanges();\n const range = document.createRange();\n const textNode = node.firstChild!;\n range.setStart(textNode, start);\n range.setEnd(textNode, end);\n sel.addRange(range);\n return range;\n}\n\nfunction collapseAt(node: Node, offset: number) {\n const sel = document.getSelection()!;\n sel.removeAllRanges();\n const range = document.createRange();\n const textNode = node.firstChild!;\n range.setStart(textNode, offset);\n range.collapse(true);\n sel.addRange(range);\n return range;\n}\n\nfunction sleep(ms: number) {\n return new Promise(r => setTimeout(r, ms));\n}\n\ndescribe('NileRteLink', () => {\n let editor: HTMLElement;\n\n afterEach(() => {\n editor?.remove();\n });\n\n // ── Rendering and Defaults ──\n\n it('1. renders the component', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el).to.exist;\n });\n\n it('2. tag name is nile-rte-link', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el.tagName.toLowerCase()).to.equal('nile-rte-link');\n });\n\n it('3. default newTab is false', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el.newTab).to.be.false;\n });\n\n it('4. default placeholder is \"Type or paste link here\"', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el.placeholder).to.equal('Type or paste link here');\n });\n\n it('5. default label is \"Link\"', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el.label).to.equal('Link');\n });\n\n it('6. renders a link icon button', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const btn = el.querySelector('nile-button');\n expect(btn).to.exist;\n const icon = el.querySelector('nile-icon');\n expect(icon).to.exist;\n expect(icon!.getAttribute('name')).to.equal('link_2');\n });\n\n it('7. renders a popover element', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const pop = el.querySelector('nile-popover');\n expect(pop).to.exist;\n });\n\n it('8. custom element is defined in registry', async () => {\n expect(customElements.get('nile-rte-link')).to.exist;\n });\n\n // ── Property Binding ──\n\n it('9. set newTab to true', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor} newTab></nile-rte-link>`\n );\n expect(el.newTab).to.be.true;\n });\n\n it('10. set custom placeholder', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor} placeholder=\"Enter URL\"></nile-rte-link>`\n );\n expect(el.placeholder).to.equal('Enter URL');\n });\n\n it('11. set custom label', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor} label=\"Add Link\"></nile-rte-link>`\n );\n expect(el.label).to.equal('Add Link');\n });\n\n it('12. set editorEl reference', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n expect(el.editorEl).to.equal(editor);\n });\n\n // ── URL Normalization ──\n\n it('13. plain domain gets https:// prepended', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const normalize = (el as any).normalizeUrl.bind(el);\n expect(normalize('example.com')).to.equal('https://example.com');\n });\n\n it('14. http:// URL stays unchanged', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const normalize = (el as any).normalizeUrl.bind(el);\n expect(normalize('http://example.com')).to.equal('http://example.com');\n });\n\n it('15. https:// URL stays unchanged', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const normalize = (el as any).normalizeUrl.bind(el);\n expect(normalize('https://example.com')).to.equal('https://example.com');\n });\n\n it('16. mailto: URL stays unchanged', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const normalize = (el as any).normalizeUrl.bind(el);\n expect(normalize('mailto:a@b.com')).to.equal('mailto:a@b.com');\n });\n\n it('17. tel: URL stays unchanged', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const normalize = (el as any).normalizeUrl.bind(el);\n expect(normalize('tel:+123')).to.equal('tel:+123');\n });\n\n it('18. displayUrl returns URL as-is', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const display = (el as any).displayUrl.bind(el);\n expect(display('https://example.com')).to.equal('https://example.com');\n expect(display('http://example.com/path')).to.equal('http://example.com/path');\n });\n\n // ── Link Insertion (collapsed selection) ──\n\n it('19. inserts a new <a> tag with URL as text when selection is collapsed', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n const a = editor.querySelector('a');\n expect(a).to.exist;\n expect(a!.href).to.include('example.com');\n expect(a!.textContent).to.include('example.com');\n });\n\n it('20. inserts link with target and rel when newTab is true', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor} newTab></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n const a = editor.querySelector('a');\n expect(a).to.exist;\n expect(a!.target).to.equal('_blank');\n expect(a!.rel).to.equal('noopener noreferrer');\n });\n\n it('21. does not set target/rel when newTab is false', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n const a = editor.querySelector('a');\n expect(a).to.exist;\n expect(a!.hasAttribute('target')).to.be.false;\n expect(a!.hasAttribute('rel')).to.be.false;\n });\n\n // ── Link Insertion (text selected) ──\n\n it('22. wraps selected text in an <a> tag', async () => {\n editor = createEditor('<p>hello world</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n selectText(p, 0, 5);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n const a = editor.querySelector('a');\n expect(a).to.exist;\n expect(a!.href).to.include('example.com');\n });\n\n it('23. preserves selected text content after wrapping', async () => {\n editor = createEditor('<p>hello world</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n selectText(p, 0, 5);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n const a = editor.querySelector('a');\n expect(a!.textContent).to.equal('hello');\n });\n\n // ── Link Editing ──\n\n it('24. detects existing anchor and shows edit/unlink buttons', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link text</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n expect((el as any).hasActiveLink).to.be.true;\n expect((el as any).activeAnchor).to.equal(a);\n });\n\n it('25. pre-fills input with existing link URL', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n expect((el as any).linkValue).to.equal(a.href);\n });\n\n it('26. updates existing anchor href on apply', async () => {\n editor = createEditor('<p><a href=\"https://old.com\">link</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n (el as any).linkValue = 'https://new.com';\n (el as any).applyLink();\n\n expect(a.href).to.include('new.com');\n });\n\n it('27. toggling newTab on edit updates target/rel attributes', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor} newTab></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n expect(a.target).to.equal('_blank');\n expect(a.rel).to.equal('noopener noreferrer');\n });\n\n // ── Link Removal ──\n\n it('28. unlink removes the <a> tag', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link text</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n (el as any).onRemove();\n\n expect(editor.querySelector('a')).to.be.null;\n });\n\n it('29. unlink preserves the text content', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link text</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n (el as any).onRemove();\n\n expect(editor.querySelector('p')!.textContent).to.equal('link text');\n });\n\n it('30. closes popover after unlink', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link text</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n (el as any).onRemove();\n\n expect((el as any).selectionRange).to.be.null;\n expect((el as any).hasActiveLink).to.be.false;\n });\n\n // ── Popover Behavior ──\n\n it('31. opens popover on button click', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 2);\n\n (el as any).onOpen();\n await sleep(50);\n\n const pop = el.querySelector('nile-popover') as any;\n expect(pop?.isShow).to.be.true;\n });\n\n it('32. closes popover on Escape key', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 2);\n\n (el as any).onOpen();\n await sleep(50);\n\n const event = new KeyboardEvent('keydown', { key: 'Escape', bubbles: true });\n (el as any).onInputKeydown(event);\n\n expect((el as any).selectionRange).to.be.null;\n });\n\n it('33. applies link on Enter key', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n\n const event = new KeyboardEvent('keydown', { key: 'Enter', bubbles: true });\n (el as any).onInputKeydown(event);\n\n const a = editor.querySelector('a');\n expect(a).to.exist;\n });\n\n it('34. closes popover on input blur', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 2);\n\n (el as any).onOpen();\n await sleep(50);\n\n (el as any).ignoreBlur = false;\n (el as any).isApplying = false;\n (el as any).onInputBlur();\n await sleep(50);\n\n expect((el as any).selectionRange).to.be.null;\n });\n\n it('35. does not close on blur when ignoreBlur is set', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 2);\n\n (el as any).onOpen();\n await sleep(50);\n\n (el as any).ignoreBlur = true;\n (el as any).onInputBlur();\n\n expect((el as any).selectionRange).to.not.be.null;\n });\n\n // ── Event Dispatching ──\n\n it('36. fires nile-link-changed with href on link apply', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n let detail: any = null;\n el.addEventListener('nile-link-changed', ((e: CustomEvent) => {\n detail = e.detail;\n }) as EventListener);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n expect(detail).to.exist;\n expect(detail.href).to.include('example.com');\n });\n\n it('37. fires nile-link-changed with empty href on unlink', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n let detail: any = null;\n el.addEventListener('nile-link-changed', ((e: CustomEvent) => {\n detail = e.detail;\n }) as EventListener);\n\n (el as any).onOpen();\n await elementUpdated(el);\n (el as any).onRemove();\n\n expect(detail).to.exist;\n expect(detail.href).to.equal('');\n });\n\n it('38. event bubbles and is composed', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n let bubbles = false;\n let composed = false;\n el.addEventListener('nile-link-changed', ((e: CustomEvent) => {\n bubbles = e.bubbles;\n composed = e.composed;\n }) as EventListener);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n expect(bubbles).to.be.true;\n expect(composed).to.be.true;\n });\n\n // ── Validation ──\n\n it('39. does not apply empty URL', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = '';\n (el as any).applyLink();\n\n expect(editor.querySelector('a')).to.be.null;\n });\n\n it('40. rejects unsupported protocols', async () => {\n editor = createEditor('<p>text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'javascript:alert(1)';\n (el as any).applyLink();\n\n expect(editor.querySelector('a')).to.be.null;\n });\n\n // ── Integration with Parent RTE ──\n\n it('41. parent receives nile-link-changed event and updates content', async () => {\n editor = createEditor('<p>text</p>');\n const container = await fixture(html`\n <div>\n <nile-rte-link .editorEl=${editor}></nile-rte-link>\n </div>\n `);\n const el = container.querySelector('nile-rte-link')! as NileRteLink;\n\n let received = false;\n container.addEventListener('nile-link-changed', () => {\n received = true;\n });\n\n const p = editor.querySelector('p')!;\n collapseAt(p, 4);\n\n (el as any).selectionRange = document.getSelection()!.getRangeAt(0).cloneRange();\n (el as any).linkValue = 'https://example.com';\n (el as any).applyLink();\n\n expect(received).to.be.true;\n });\n\n it('42. toolbar link button shows active state when cursor is inside a link', async () => {\n editor = createEditor('<p><a href=\"https://example.com\">link text</a></p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const a = editor.querySelector('a')!;\n collapseAt(a, 2);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n expect((el as any).hasActiveLink).to.be.true;\n });\n\n it('43. toolbar link button loses active state when cursor moves outside a link', async () => {\n editor = createEditor('<p>normal <a href=\"https://example.com\">link</a> text</p>');\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n\n const p = editor.querySelector('p')!;\n const textNode = p.firstChild!;\n const sel = document.getSelection()!;\n sel.removeAllRanges();\n const range = document.createRange();\n range.setStart(textNode, 2);\n range.collapse(true);\n sel.addRange(range);\n\n (el as any).onOpen();\n await elementUpdated(el);\n\n expect((el as any).hasActiveLink).to.be.false;\n expect((el as any).activeAnchor).to.be.null;\n });\n\n // ── CSS Injection ──\n\n it('44. injects style tag with data-rte-link-style attribute', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n const styleTag = el.querySelector('style[data-rte-link-style]');\n expect(styleTag).to.exist;\n });\n\n it('45. does not inject duplicate styles on reconnect', async () => {\n editor = createEditor();\n const el = await fixture<NileRteLink>(\n html`<nile-rte-link .editorEl=${editor}></nile-rte-link>`\n );\n\n const parent = el.parentElement!;\n parent.removeChild(el);\n parent.appendChild(el);\n await elementUpdated(el);\n\n const styleTags = el.querySelectorAll('style[data-rte-link-style]');\n expect(styleTags.length).to.equal(1);\n });\n});\n"]}
|