@sekiui/elements 0.0.59 → 0.0.61
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/dist/cdn/index.js +140 -4
- package/dist/cdn/p-BHbxurmj.js +33 -0
- package/dist/{components/p-BU1kuAZS.js → cdn/p-D31scOlb.js} +9 -386
- package/dist/{components/p-wQy1sEm6.js → cdn/p-DB0EE9zX.js} +3 -3
- package/dist/cdn/seki-badge.js +1 -1
- package/dist/cdn/seki-breadcrumb-ellipsis.d.ts +11 -0
- package/dist/cdn/seki-breadcrumb-ellipsis.js +36 -0
- package/dist/cdn/seki-breadcrumb-item.d.ts +11 -0
- package/dist/cdn/seki-breadcrumb-item.js +36 -0
- package/dist/cdn/seki-breadcrumb-link.d.ts +11 -0
- package/dist/cdn/seki-breadcrumb-link.js +39 -0
- package/dist/cdn/seki-breadcrumb-list.d.ts +11 -0
- package/dist/cdn/seki-breadcrumb-list.js +36 -0
- package/dist/cdn/seki-breadcrumb-page.d.ts +11 -0
- package/dist/cdn/seki-breadcrumb-page.js +36 -0
- package/dist/cdn/seki-breadcrumb-separator.d.ts +11 -0
- package/dist/cdn/seki-breadcrumb-separator.js +41 -0
- package/dist/cdn/seki-breadcrumb.d.ts +11 -0
- package/dist/cdn/seki-breadcrumb.js +43 -0
- package/dist/cdn/seki-button.js +3 -3
- package/dist/cdn/seki-card-action.js +3 -3
- package/dist/cdn/seki-card-content.js +3 -3
- package/dist/cdn/seki-card-description.js +3 -3
- package/dist/cdn/seki-card-footer.js +3 -3
- package/dist/cdn/seki-card-header.js +3 -3
- package/dist/cdn/seki-card-title.js +2 -2
- package/dist/cdn/seki-card.js +3 -3
- package/dist/cdn/seki-field-description.js +3 -3
- package/dist/cdn/seki-field-error.js +3 -3
- package/dist/cdn/seki-field-group.js +3 -3
- package/dist/cdn/seki-field-label.js +3 -3
- package/dist/cdn/seki-field-legend.js +3 -3
- package/dist/cdn/seki-field.js +3 -3
- package/dist/cdn/seki-fieldset.js +3 -3
- package/dist/cdn/seki-input.js +3 -3
- package/dist/cdn/seki-pagination-content.d.ts +11 -0
- package/dist/cdn/seki-pagination-content.js +36 -0
- package/dist/cdn/seki-pagination-ellipsis.d.ts +11 -0
- package/dist/cdn/seki-pagination-ellipsis.js +36 -0
- package/dist/cdn/seki-pagination-item.d.ts +11 -0
- package/dist/cdn/seki-pagination-item.js +36 -0
- package/dist/cdn/seki-pagination-link.d.ts +11 -0
- package/dist/cdn/seki-pagination-link.js +53 -0
- package/dist/cdn/seki-pagination-next.d.ts +11 -0
- package/dist/cdn/seki-pagination-next.js +48 -0
- package/dist/cdn/seki-pagination-previous.d.ts +11 -0
- package/dist/cdn/seki-pagination-previous.js +48 -0
- package/dist/cdn/seki-pagination.d.ts +11 -0
- package/dist/cdn/seki-pagination.js +36 -0
- package/dist/cdn/seki-select-content.js +2 -2
- package/dist/cdn/seki-select-group.js +3 -3
- package/dist/cdn/seki-select-option.js +3 -3
- package/dist/cdn/seki-select-trigger.js +2 -2
- package/dist/cdn/seki-select.js +3 -3
- package/dist/cdn/seki-separator.d.ts +11 -0
- package/dist/cdn/seki-separator.js +55 -0
- package/dist/cdn/seki-sheet-close.d.ts +11 -0
- package/dist/cdn/seki-sheet-close.js +40 -0
- package/dist/cdn/seki-sheet-content.d.ts +11 -0
- package/dist/cdn/seki-sheet-content.js +58 -0
- package/dist/cdn/seki-sheet-description.d.ts +11 -0
- package/dist/cdn/seki-sheet-description.js +36 -0
- package/dist/cdn/seki-sheet-footer.d.ts +11 -0
- package/dist/cdn/seki-sheet-footer.js +36 -0
- package/dist/cdn/seki-sheet-header.d.ts +11 -0
- package/dist/cdn/seki-sheet-header.js +36 -0
- package/dist/cdn/seki-sheet-title.d.ts +11 -0
- package/dist/cdn/seki-sheet-title.js +36 -0
- package/dist/cdn/seki-sheet-trigger.d.ts +11 -0
- package/dist/cdn/seki-sheet-trigger.js +40 -0
- package/dist/cdn/seki-sheet.d.ts +11 -0
- package/dist/cdn/seki-sheet.js +86 -0
- package/dist/cdn/seki-sidebar-content.js +5 -7
- package/dist/cdn/seki-sidebar-footer.js +21 -7
- package/dist/cdn/seki-sidebar-group-action.d.ts +11 -0
- package/dist/cdn/seki-sidebar-group-action.js +43 -0
- package/dist/cdn/seki-sidebar-group-content.d.ts +11 -0
- package/dist/cdn/seki-sidebar-group-content.js +36 -0
- package/dist/cdn/seki-sidebar-group-label.d.ts +11 -0
- package/dist/cdn/seki-sidebar-group-label.js +6 -0
- package/dist/cdn/seki-sidebar-group.js +13 -100
- package/dist/cdn/seki-sidebar-header.js +21 -7
- package/dist/cdn/seki-sidebar-inset.d.ts +11 -0
- package/dist/cdn/seki-sidebar-inset.js +36 -0
- package/dist/cdn/seki-sidebar-menu-action.d.ts +11 -0
- package/dist/cdn/seki-sidebar-menu-action.js +42 -0
- package/dist/cdn/seki-sidebar-menu-badge.d.ts +11 -0
- package/dist/cdn/seki-sidebar-menu-badge.js +36 -0
- package/dist/cdn/seki-sidebar-menu-button.d.ts +11 -0
- package/dist/cdn/seki-sidebar-menu-button.js +109 -0
- package/dist/cdn/seki-sidebar-menu-item.js +6 -170
- package/dist/cdn/seki-sidebar-menu-skeleton.d.ts +11 -0
- package/dist/cdn/seki-sidebar-menu-skeleton.js +42 -0
- package/dist/cdn/seki-sidebar-menu-sub-button.d.ts +11 -0
- package/dist/cdn/seki-sidebar-menu-sub-button.js +50 -0
- package/dist/cdn/seki-sidebar-menu-sub-item.d.ts +11 -0
- package/dist/cdn/seki-sidebar-menu-sub-item.js +36 -0
- package/dist/cdn/seki-sidebar-menu-sub.js +78 -82
- package/dist/cdn/seki-sidebar-menu.js +5 -7
- package/dist/cdn/seki-sidebar-provider.d.ts +11 -0
- package/dist/cdn/seki-sidebar-provider.js +189 -0
- package/dist/cdn/seki-sidebar-rail.d.ts +11 -0
- package/dist/cdn/seki-sidebar-rail.js +43 -0
- package/dist/cdn/seki-sidebar-separator.d.ts +11 -0
- package/dist/cdn/seki-sidebar-separator.js +36 -0
- package/dist/cdn/seki-sidebar-trigger.js +26 -67
- package/dist/cdn/seki-sidebar.js +40 -329
- package/dist/cdn/seki-skeleton.js +3 -3
- package/dist/cdn/seki-switch.js +1 -1
- package/dist/cdn/seki-tooltip.js +3 -3
- package/dist/cjs/{index-D4RM3EID.js → index-DzoHqiUq.js} +8 -385
- package/dist/cjs/index.cjs.js +141 -5
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/seki-badge.cjs.entry.js +1 -1
- package/dist/cjs/seki-breadcrumb-ellipsis.cjs.entry.js +17 -0
- package/dist/cjs/seki-breadcrumb-item.cjs.entry.js +17 -0
- package/dist/cjs/seki-breadcrumb-link.cjs.entry.js +17 -0
- package/dist/cjs/seki-breadcrumb-list.cjs.entry.js +17 -0
- package/dist/cjs/seki-breadcrumb-page.cjs.entry.js +17 -0
- package/dist/cjs/seki-breadcrumb-separator.cjs.entry.js +22 -0
- package/dist/cjs/seki-breadcrumb.cjs.entry.js +22 -0
- package/dist/cjs/seki-button.cjs.entry.js +3 -3
- package/dist/cjs/seki-card-action.cjs.entry.js +3 -3
- package/dist/cjs/seki-card-content.cjs.entry.js +3 -3
- package/dist/cjs/seki-card-description.cjs.entry.js +3 -3
- package/dist/cjs/seki-card-footer.cjs.entry.js +3 -3
- package/dist/cjs/seki-card-header.cjs.entry.js +3 -3
- package/dist/cjs/seki-card-title.cjs.entry.js +2 -2
- package/dist/cjs/seki-card.cjs.entry.js +3 -3
- package/dist/cjs/seki-field-description.cjs.entry.js +3 -3
- package/dist/cjs/seki-field-error.cjs.entry.js +3 -3
- package/dist/cjs/seki-field-group.cjs.entry.js +3 -3
- package/dist/cjs/seki-field-label.cjs.entry.js +3 -3
- package/dist/cjs/seki-field-legend.cjs.entry.js +3 -3
- package/dist/cjs/seki-field.cjs.entry.js +3 -3
- package/dist/cjs/seki-fieldset.cjs.entry.js +3 -3
- package/dist/cjs/seki-input.cjs.entry.js +3 -3
- package/dist/cjs/seki-pagination-content.cjs.entry.js +17 -0
- package/dist/cjs/seki-pagination-ellipsis.cjs.entry.js +17 -0
- package/dist/cjs/seki-pagination-item.cjs.entry.js +17 -0
- package/dist/cjs/seki-pagination-link.cjs.entry.js +30 -0
- package/dist/cjs/seki-pagination-next.cjs.entry.js +26 -0
- package/dist/cjs/seki-pagination-previous.cjs.entry.js +26 -0
- package/dist/cjs/seki-pagination.cjs.entry.js +17 -0
- package/dist/cjs/seki-select-content.cjs.entry.js +2 -2
- package/dist/cjs/seki-select-group.cjs.entry.js +3 -3
- package/dist/cjs/seki-select-option.cjs.entry.js +3 -3
- package/dist/cjs/seki-select-trigger.cjs.entry.js +2 -2
- package/dist/cjs/seki-select.cjs.entry.js +3 -3
- package/dist/cjs/seki-separator.cjs.entry.js +33 -0
- package/dist/cjs/seki-sheet-close.cjs.entry.js +21 -0
- package/dist/cjs/seki-sheet-content.cjs.entry.js +37 -0
- package/dist/cjs/seki-sheet-description.cjs.entry.js +17 -0
- package/dist/cjs/seki-sheet-footer.cjs.entry.js +17 -0
- package/dist/cjs/seki-sheet-header.cjs.entry.js +17 -0
- package/dist/cjs/seki-sheet-title.cjs.entry.js +17 -0
- package/dist/cjs/seki-sheet-trigger.cjs.entry.js +21 -0
- package/dist/cjs/seki-sheet.cjs.entry.js +62 -0
- package/dist/cjs/seki-sidebar-content.cjs.entry.js +3 -6
- package/dist/cjs/seki-sidebar-footer.cjs.entry.js +17 -6
- package/dist/cjs/seki-sidebar-group-action.cjs.entry.js +21 -0
- package/dist/cjs/seki-sidebar-group-content.cjs.entry.js +17 -0
- package/dist/cjs/seki-sidebar-group-label.cjs.entry.js +17 -0
- package/dist/cjs/seki-sidebar-group.cjs.entry.js +3 -91
- package/dist/cjs/seki-sidebar-header.cjs.entry.js +17 -6
- package/dist/cjs/seki-sidebar-inset.cjs.entry.js +17 -0
- package/dist/cjs/seki-sidebar-menu-action.cjs.entry.js +21 -0
- package/dist/cjs/seki-sidebar-menu-badge.cjs.entry.js +17 -0
- package/dist/cjs/seki-sidebar-menu-button.cjs.entry.js +81 -0
- package/dist/cjs/seki-sidebar-menu-item.cjs.entry.js +4 -161
- package/dist/cjs/seki-sidebar-menu-skeleton.cjs.entry.js +21 -0
- package/dist/cjs/seki-sidebar-menu-sub-button.cjs.entry.js +28 -0
- package/dist/cjs/seki-sidebar-menu-sub-item.cjs.entry.js +17 -0
- package/dist/cjs/seki-sidebar-menu-sub.cjs.entry.js +70 -76
- package/dist/cjs/seki-sidebar-menu.cjs.entry.js +3 -6
- package/dist/cjs/seki-sidebar-provider.cjs.entry.js +153 -0
- package/dist/cjs/seki-sidebar-rail.cjs.entry.js +24 -0
- package/dist/cjs/seki-sidebar-separator.cjs.entry.js +17 -0
- package/dist/cjs/seki-sidebar-trigger.cjs.entry.js +22 -63
- package/dist/cjs/seki-sidebar.cjs.entry.js +35 -312
- package/dist/cjs/seki-skeleton.cjs.entry.js +3 -3
- package/dist/cjs/seki-switch.cjs.entry.js +3 -3
- package/dist/cjs/seki-tooltip.cjs.entry.js +3 -3
- package/dist/cjs/sekiui.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +36 -0
- package/dist/collection/components/breadcrumb/seki-breadcrumb-ellipsis.js +23 -0
- package/dist/collection/components/breadcrumb/seki-breadcrumb-item.js +23 -0
- package/dist/collection/components/breadcrumb/seki-breadcrumb-link.js +65 -0
- package/dist/collection/components/breadcrumb/seki-breadcrumb-list.js +23 -0
- package/dist/collection/components/breadcrumb/seki-breadcrumb-page.js +23 -0
- package/dist/collection/components/breadcrumb/seki-breadcrumb-separator.js +28 -0
- package/dist/collection/components/breadcrumb/seki-breadcrumb.css +125 -0
- package/dist/collection/components/breadcrumb/seki-breadcrumb.js +69 -0
- package/dist/collection/components/button/seki-button.css +74 -0
- package/dist/collection/components/button/seki-button.js +1 -1
- package/dist/collection/components/card/seki-card-action.js +1 -1
- package/dist/collection/components/card/seki-card-content.js +1 -1
- package/dist/collection/components/card/seki-card-description.js +1 -1
- package/dist/collection/components/card/seki-card-footer.js +1 -1
- package/dist/collection/components/card/seki-card-header.js +1 -1
- package/dist/collection/components/card/seki-card.css +74 -0
- package/dist/collection/components/card/seki-card.js +1 -1
- package/dist/collection/components/field/seki-field.css +74 -0
- package/dist/collection/components/field/seki-field.js +1 -1
- package/dist/collection/components/field-description/seki-field-description.css +74 -0
- package/dist/collection/components/field-description/seki-field-description.js +1 -1
- package/dist/collection/components/field-error/seki-field-error.css +74 -0
- package/dist/collection/components/field-error/seki-field-error.js +1 -1
- package/dist/collection/components/field-group/seki-field-group.css +74 -0
- package/dist/collection/components/field-group/seki-field-group.js +1 -1
- package/dist/collection/components/field-label/seki-field-label.css +74 -0
- package/dist/collection/components/field-label/seki-field-label.js +1 -1
- package/dist/collection/components/field-legend/seki-field-legend.css +74 -0
- package/dist/collection/components/field-legend/seki-field-legend.js +1 -1
- package/dist/collection/components/fieldset/seki-fieldset.css +74 -0
- package/dist/collection/components/fieldset/seki-fieldset.js +1 -1
- package/dist/collection/components/input/seki-input.css +74 -0
- package/dist/collection/components/input/seki-input.js +1 -1
- package/dist/collection/components/pagination/seki-pagination-content.js +23 -0
- package/dist/collection/components/pagination/seki-pagination-ellipsis.js +23 -0
- package/dist/collection/components/pagination/seki-pagination-item.js +23 -0
- package/dist/collection/components/pagination/seki-pagination-link.js +101 -0
- package/dist/collection/components/pagination/seki-pagination-next.js +77 -0
- package/dist/collection/components/pagination/seki-pagination-previous.js +77 -0
- package/dist/collection/components/pagination/seki-pagination.css +151 -0
- package/dist/collection/components/pagination/seki-pagination.js +37 -0
- package/dist/collection/components/select/seki-select.css +74 -0
- package/dist/collection/components/select/seki-select.js +1 -1
- package/dist/collection/components/select-content/seki-select-content.css +74 -0
- package/dist/collection/components/select-group/seki-select-group.css +74 -0
- package/dist/collection/components/select-group/seki-select-group.js +1 -1
- package/dist/collection/components/select-option/seki-select-option.css +74 -0
- package/dist/collection/components/select-option/seki-select-option.js +1 -1
- package/dist/collection/components/select-trigger/seki-select-trigger.css +74 -0
- package/dist/collection/components/separator/seki-separator.css +48 -0
- package/dist/collection/components/separator/seki-separator.interface.js +1 -0
- package/dist/collection/components/separator/seki-separator.js +100 -0
- package/dist/collection/components/sheet/seki-sheet-close.js +46 -0
- package/dist/collection/components/sheet/seki-sheet-content.js +95 -0
- package/dist/collection/components/sheet/seki-sheet-description.js +23 -0
- package/dist/collection/components/sheet/seki-sheet-footer.js +23 -0
- package/dist/collection/components/sheet/seki-sheet-header.js +23 -0
- package/dist/collection/components/sheet/seki-sheet-title.js +23 -0
- package/dist/collection/components/sheet/seki-sheet-trigger.js +46 -0
- package/dist/collection/components/sheet/seki-sheet.css +244 -0
- package/dist/collection/components/sheet/seki-sheet.js +195 -0
- package/dist/collection/components/sidebar/seki-sidebar-content.css +470 -54
- package/dist/collection/components/sidebar/seki-sidebar-content.js +3 -18
- package/dist/collection/components/sidebar/seki-sidebar-footer.css +475 -30
- package/dist/collection/components/sidebar/seki-sidebar-footer.js +32 -15
- package/dist/collection/components/sidebar/seki-sidebar-group-action.css +509 -0
- package/dist/collection/components/sidebar/seki-sidebar-group-action.js +67 -0
- package/dist/collection/components/sidebar/seki-sidebar-group-content.js +18 -0
- package/dist/collection/components/sidebar/seki-sidebar-group-label.js +18 -0
- package/dist/collection/components/sidebar/seki-sidebar-group.css +455 -120
- package/dist/collection/components/sidebar/seki-sidebar-group.js +9 -268
- package/dist/collection/components/sidebar/seki-sidebar-header.css +474 -30
- package/dist/collection/components/sidebar/seki-sidebar-header.js +32 -16
- package/dist/collection/components/sidebar/seki-sidebar-inset.js +18 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-action.js +48 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-badge.js +18 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-button.js +240 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-item.js +5 -390
- package/dist/collection/components/sidebar/seki-sidebar-menu-skeleton.js +48 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-sub-button.js +75 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-sub-item.js +18 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-sub.css +520 -290
- package/dist/collection/components/sidebar/seki-sidebar-menu-sub.js +85 -194
- package/dist/collection/components/sidebar/seki-sidebar-menu.css +720 -9
- package/dist/collection/components/sidebar/seki-sidebar-menu.js +3 -17
- package/dist/collection/components/sidebar/seki-sidebar-provider.css +514 -0
- package/dist/collection/components/sidebar/seki-sidebar-provider.js +399 -0
- package/dist/collection/components/sidebar/seki-sidebar-rail.css +530 -0
- package/dist/collection/components/sidebar/seki-sidebar-rail.js +27 -0
- package/dist/collection/components/sidebar/seki-sidebar-separator.js +18 -0
- package/dist/collection/components/sidebar/seki-sidebar-trigger.css +492 -41
- package/dist/collection/components/sidebar/seki-sidebar-trigger.js +34 -122
- package/dist/collection/components/sidebar/seki-sidebar.css +554 -276
- package/dist/collection/components/sidebar/seki-sidebar.js +57 -721
- package/dist/collection/components/skeleton/seki-skeleton.css +74 -0
- package/dist/collection/components/skeleton/seki-skeleton.js +1 -1
- package/dist/collection/components/switch/seki-switch.css +74 -0
- package/dist/collection/components/switch/seki-switch.js +1 -1
- package/dist/collection/components/tooltip/seki-tooltip.css +74 -0
- package/dist/collection/components/tooltip/seki-tooltip.js +1 -1
- package/dist/components/index.js +140 -4
- package/dist/{cdn/p-Cpa2leXN.js → components/p-BwXR4cDh.js} +3 -3
- package/dist/components/p-COLDALVZ.js +33 -0
- package/dist/{cdn/p-DxUZSKfL.js → components/p-D2lrrniN.js} +9 -386
- package/dist/components/seki-badge.js +1 -1
- package/dist/components/seki-breadcrumb-ellipsis.d.ts +11 -0
- package/dist/components/seki-breadcrumb-ellipsis.js +36 -0
- package/dist/components/seki-breadcrumb-item.d.ts +11 -0
- package/dist/components/seki-breadcrumb-item.js +36 -0
- package/dist/components/seki-breadcrumb-link.d.ts +11 -0
- package/dist/components/seki-breadcrumb-link.js +39 -0
- package/dist/components/seki-breadcrumb-list.d.ts +11 -0
- package/dist/components/seki-breadcrumb-list.js +36 -0
- package/dist/components/seki-breadcrumb-page.d.ts +11 -0
- package/dist/components/seki-breadcrumb-page.js +36 -0
- package/dist/components/seki-breadcrumb-separator.d.ts +11 -0
- package/dist/components/seki-breadcrumb-separator.js +41 -0
- package/dist/components/seki-breadcrumb.d.ts +11 -0
- package/dist/components/seki-breadcrumb.js +43 -0
- package/dist/components/seki-button.js +3 -3
- package/dist/components/seki-card-action.js +3 -3
- package/dist/components/seki-card-content.js +3 -3
- package/dist/components/seki-card-description.js +3 -3
- package/dist/components/seki-card-footer.js +3 -3
- package/dist/components/seki-card-header.js +3 -3
- package/dist/components/seki-card-title.js +2 -2
- package/dist/components/seki-card.js +3 -3
- package/dist/components/seki-field-description.js +3 -3
- package/dist/components/seki-field-error.js +3 -3
- package/dist/components/seki-field-group.js +3 -3
- package/dist/components/seki-field-label.js +3 -3
- package/dist/components/seki-field-legend.js +3 -3
- package/dist/components/seki-field.js +3 -3
- package/dist/components/seki-fieldset.js +3 -3
- package/dist/components/seki-input.js +3 -3
- package/dist/components/seki-pagination-content.d.ts +11 -0
- package/dist/components/seki-pagination-content.js +36 -0
- package/dist/components/seki-pagination-ellipsis.d.ts +11 -0
- package/dist/components/seki-pagination-ellipsis.js +36 -0
- package/dist/components/seki-pagination-item.d.ts +11 -0
- package/dist/components/seki-pagination-item.js +36 -0
- package/dist/components/seki-pagination-link.d.ts +11 -0
- package/dist/components/seki-pagination-link.js +53 -0
- package/dist/components/seki-pagination-next.d.ts +11 -0
- package/dist/components/seki-pagination-next.js +48 -0
- package/dist/components/seki-pagination-previous.d.ts +11 -0
- package/dist/components/seki-pagination-previous.js +48 -0
- package/dist/components/seki-pagination.d.ts +11 -0
- package/dist/components/seki-pagination.js +36 -0
- package/dist/components/seki-select-content.js +2 -2
- package/dist/components/seki-select-group.js +3 -3
- package/dist/components/seki-select-option.js +3 -3
- package/dist/components/seki-select-trigger.js +2 -2
- package/dist/components/seki-select.js +3 -3
- package/dist/components/seki-separator.d.ts +11 -0
- package/dist/components/seki-separator.js +55 -0
- package/dist/components/seki-sheet-close.d.ts +11 -0
- package/dist/components/seki-sheet-close.js +40 -0
- package/dist/components/seki-sheet-content.d.ts +11 -0
- package/dist/components/seki-sheet-content.js +58 -0
- package/dist/components/seki-sheet-description.d.ts +11 -0
- package/dist/components/seki-sheet-description.js +36 -0
- package/dist/components/seki-sheet-footer.d.ts +11 -0
- package/dist/components/seki-sheet-footer.js +36 -0
- package/dist/components/seki-sheet-header.d.ts +11 -0
- package/dist/components/seki-sheet-header.js +36 -0
- package/dist/components/seki-sheet-title.d.ts +11 -0
- package/dist/components/seki-sheet-title.js +36 -0
- package/dist/components/seki-sheet-trigger.d.ts +11 -0
- package/dist/components/seki-sheet-trigger.js +40 -0
- package/dist/components/seki-sheet.d.ts +11 -0
- package/dist/components/seki-sheet.js +86 -0
- package/dist/components/seki-sidebar-content.js +5 -7
- package/dist/components/seki-sidebar-footer.js +21 -7
- package/dist/components/seki-sidebar-group-action.d.ts +11 -0
- package/dist/components/seki-sidebar-group-action.js +43 -0
- package/dist/components/seki-sidebar-group-content.d.ts +11 -0
- package/dist/components/seki-sidebar-group-content.js +36 -0
- package/dist/components/seki-sidebar-group-label.d.ts +11 -0
- package/dist/components/seki-sidebar-group-label.js +6 -0
- package/dist/components/seki-sidebar-group.js +13 -100
- package/dist/components/seki-sidebar-header.js +21 -7
- package/dist/components/seki-sidebar-inset.d.ts +11 -0
- package/dist/components/seki-sidebar-inset.js +36 -0
- package/dist/components/seki-sidebar-menu-action.d.ts +11 -0
- package/dist/components/seki-sidebar-menu-action.js +42 -0
- package/dist/components/seki-sidebar-menu-badge.d.ts +11 -0
- package/dist/components/seki-sidebar-menu-badge.js +36 -0
- package/dist/components/seki-sidebar-menu-button.d.ts +11 -0
- package/dist/components/seki-sidebar-menu-button.js +109 -0
- package/dist/components/seki-sidebar-menu-item.js +6 -170
- package/dist/components/seki-sidebar-menu-skeleton.d.ts +11 -0
- package/dist/components/seki-sidebar-menu-skeleton.js +42 -0
- package/dist/components/seki-sidebar-menu-sub-button.d.ts +11 -0
- package/dist/components/seki-sidebar-menu-sub-button.js +50 -0
- package/dist/components/seki-sidebar-menu-sub-item.d.ts +11 -0
- package/dist/components/seki-sidebar-menu-sub-item.js +36 -0
- package/dist/components/seki-sidebar-menu-sub.js +78 -82
- package/dist/components/seki-sidebar-menu.js +5 -7
- package/dist/components/seki-sidebar-provider.d.ts +11 -0
- package/dist/components/seki-sidebar-provider.js +189 -0
- package/dist/components/seki-sidebar-rail.d.ts +11 -0
- package/dist/components/seki-sidebar-rail.js +43 -0
- package/dist/components/seki-sidebar-separator.d.ts +11 -0
- package/dist/components/seki-sidebar-separator.js +36 -0
- package/dist/components/seki-sidebar-trigger.js +26 -67
- package/dist/components/seki-sidebar.js +40 -329
- package/dist/components/seki-skeleton.js +3 -3
- package/dist/components/seki-switch.js +1 -1
- package/dist/components/seki-tooltip.js +3 -3
- package/dist/esm/{index-DI_YjzRi.js → index-BGmDiTq4.js} +8 -385
- package/dist/esm/index.js +139 -3
- package/dist/esm/loader.js +3 -3
- package/dist/esm/seki-badge.entry.js +1 -1
- package/dist/esm/seki-breadcrumb-ellipsis.entry.js +15 -0
- package/dist/esm/seki-breadcrumb-item.entry.js +15 -0
- package/dist/esm/seki-breadcrumb-link.entry.js +15 -0
- package/dist/esm/seki-breadcrumb-list.entry.js +15 -0
- package/dist/esm/seki-breadcrumb-page.entry.js +15 -0
- package/dist/esm/seki-breadcrumb-separator.entry.js +20 -0
- package/dist/esm/seki-breadcrumb.entry.js +20 -0
- package/dist/esm/seki-button.entry.js +3 -3
- package/dist/esm/seki-card-action.entry.js +3 -3
- package/dist/esm/seki-card-content.entry.js +3 -3
- package/dist/esm/seki-card-description.entry.js +3 -3
- package/dist/esm/seki-card-footer.entry.js +3 -3
- package/dist/esm/seki-card-header.entry.js +3 -3
- package/dist/esm/seki-card-title.entry.js +2 -2
- package/dist/esm/seki-card.entry.js +3 -3
- package/dist/esm/seki-field-description.entry.js +3 -3
- package/dist/esm/seki-field-error.entry.js +3 -3
- package/dist/esm/seki-field-group.entry.js +3 -3
- package/dist/esm/seki-field-label.entry.js +3 -3
- package/dist/esm/seki-field-legend.entry.js +3 -3
- package/dist/esm/seki-field.entry.js +3 -3
- package/dist/esm/seki-fieldset.entry.js +3 -3
- package/dist/esm/seki-input.entry.js +3 -3
- package/dist/esm/seki-pagination-content.entry.js +15 -0
- package/dist/esm/seki-pagination-ellipsis.entry.js +15 -0
- package/dist/esm/seki-pagination-item.entry.js +15 -0
- package/dist/esm/seki-pagination-link.entry.js +28 -0
- package/dist/esm/seki-pagination-next.entry.js +24 -0
- package/dist/esm/seki-pagination-previous.entry.js +24 -0
- package/dist/esm/seki-pagination.entry.js +15 -0
- package/dist/esm/seki-select-content.entry.js +2 -2
- package/dist/esm/seki-select-group.entry.js +3 -3
- package/dist/esm/seki-select-option.entry.js +3 -3
- package/dist/esm/seki-select-trigger.entry.js +2 -2
- package/dist/esm/seki-select.entry.js +3 -3
- package/dist/esm/seki-separator.entry.js +31 -0
- package/dist/esm/seki-sheet-close.entry.js +19 -0
- package/dist/esm/seki-sheet-content.entry.js +35 -0
- package/dist/esm/seki-sheet-description.entry.js +15 -0
- package/dist/esm/seki-sheet-footer.entry.js +15 -0
- package/dist/esm/seki-sheet-header.entry.js +15 -0
- package/dist/esm/seki-sheet-title.entry.js +15 -0
- package/dist/esm/seki-sheet-trigger.entry.js +19 -0
- package/dist/esm/seki-sheet.entry.js +60 -0
- package/dist/esm/seki-sidebar-content.entry.js +3 -6
- package/dist/esm/seki-sidebar-footer.entry.js +17 -6
- package/dist/esm/seki-sidebar-group-action.entry.js +19 -0
- package/dist/esm/seki-sidebar-group-content.entry.js +15 -0
- package/dist/esm/seki-sidebar-group-label.entry.js +15 -0
- package/dist/esm/seki-sidebar-group.entry.js +3 -91
- package/dist/esm/seki-sidebar-header.entry.js +17 -6
- package/dist/esm/seki-sidebar-inset.entry.js +15 -0
- package/dist/esm/seki-sidebar-menu-action.entry.js +19 -0
- package/dist/esm/seki-sidebar-menu-badge.entry.js +15 -0
- package/dist/esm/seki-sidebar-menu-button.entry.js +79 -0
- package/dist/esm/seki-sidebar-menu-item.entry.js +4 -161
- package/dist/esm/seki-sidebar-menu-skeleton.entry.js +19 -0
- package/dist/esm/seki-sidebar-menu-sub-button.entry.js +26 -0
- package/dist/{sekiui/p-6f5bf5af.entry.js → esm/seki-sidebar-menu-sub-item.entry.js} +15 -1
- package/dist/esm/seki-sidebar-menu-sub.entry.js +70 -76
- package/dist/esm/seki-sidebar-menu.entry.js +3 -6
- package/dist/esm/seki-sidebar-provider.entry.js +151 -0
- package/dist/esm/seki-sidebar-rail.entry.js +22 -0
- package/dist/esm/seki-sidebar-separator.entry.js +15 -0
- package/dist/esm/seki-sidebar-trigger.entry.js +22 -63
- package/dist/esm/seki-sidebar.entry.js +35 -312
- package/dist/esm/seki-skeleton.entry.js +3 -3
- package/dist/esm/seki-switch.entry.js +3 -3
- package/dist/esm/seki-tooltip.entry.js +3 -3
- package/dist/esm/sekiui.js +3 -3
- package/dist/sekiui/index.esm.js +1 -1
- package/dist/sekiui/{p-b7f2b568.entry.js → p-04352a21.entry.js} +1 -1
- package/dist/sekiui/p-05d32c2b.entry.js +1 -0
- package/dist/sekiui/p-07c068ab.entry.js +1 -0
- package/dist/sekiui/p-0a2eeae8.entry.js +1 -0
- package/dist/sekiui/p-10964d26.entry.js +1 -0
- package/dist/sekiui/p-11986f7b.entry.js +1 -0
- package/dist/sekiui/{p-40ba3ad6.entry.js → p-11fb8623.entry.js} +1 -1
- package/dist/sekiui/{p-4867d02d.entry.js → p-18f4b5ac.entry.js} +1 -1
- package/dist/sekiui/p-1bab20f5.entry.js +1 -0
- package/dist/sekiui/p-1d130353.entry.js +1 -0
- package/dist/sekiui/{p-68b1fa1a.entry.js → p-243d94e7.entry.js} +1 -1
- package/dist/sekiui/p-246f7350.entry.js +1 -0
- package/dist/sekiui/p-24c190b3.entry.js +1 -0
- package/dist/sekiui/{p-6a922121.entry.js → p-25d33102.entry.js} +1 -1
- package/dist/sekiui/p-28d88915.entry.js +1 -0
- package/dist/sekiui/p-33d00106.entry.js +1 -0
- package/dist/sekiui/p-3faad89c.entry.js +1 -0
- package/dist/sekiui/p-443bc85e.entry.js +1 -0
- package/dist/sekiui/p-4e0d1d81.entry.js +1 -0
- package/dist/sekiui/p-50802600.entry.js +1 -0
- package/dist/sekiui/{p-f863f36b.entry.js → p-581ada61.entry.js} +1 -1
- package/dist/sekiui/p-5a06dd77.entry.js +1 -0
- package/dist/sekiui/p-610ee94a.entry.js +1 -0
- package/dist/sekiui/p-638802c3.entry.js +1 -0
- package/dist/sekiui/{p-b64e7007.entry.js → p-64586664.entry.js} +1 -1
- package/dist/sekiui/{p-c74bd925.entry.js → p-69abaa3d.entry.js} +1 -1
- package/dist/sekiui/p-6cbd155d.entry.js +1 -0
- package/dist/sekiui/{p-f1ffc3fa.entry.js → p-7605bbc2.entry.js} +1 -1
- package/dist/sekiui/p-791aa8d4.entry.js +1 -0
- package/dist/sekiui/p-7b1e1352.entry.js +1 -0
- package/dist/sekiui/p-83a7d43a.entry.js +1 -0
- package/dist/sekiui/{p-587fd313.entry.js → p-885cd0b6.entry.js} +1 -1
- package/dist/sekiui/p-89caba18.entry.js +1 -0
- package/dist/sekiui/{p-84d47cab.entry.js → p-8c7b00ef.entry.js} +1 -1
- package/dist/sekiui/p-8fb5d3ee.entry.js +1 -0
- package/dist/sekiui/{p-cf552ff9.entry.js → p-962db19e.entry.js} +1 -1
- package/dist/sekiui/{p-58ab95eb.entry.js → p-96b0b777.entry.js} +1 -1
- package/dist/sekiui/p-997def36.entry.js +1 -0
- package/dist/sekiui/p-BGmDiTq4.js +2 -0
- package/dist/sekiui/{p-d194caf1.entry.js → p-a72e57e7.entry.js} +1 -1
- package/dist/sekiui/p-a9c3a1eb.entry.js +1 -0
- package/dist/sekiui/{p-402a5db6.entry.js → p-ac1d1faa.entry.js} +1 -1
- package/dist/sekiui/p-ac32edd9.entry.js +1 -0
- package/dist/sekiui/{p-e6d5f56e.entry.js → p-b0fa7367.entry.js} +1 -1
- package/dist/sekiui/{p-dfa2f8cd.entry.js → p-b2886975.entry.js} +1 -1
- package/dist/sekiui/{p-1685e673.entry.js → p-b4aae4b5.entry.js} +1 -1
- package/dist/sekiui/{p-27deb555.entry.js → p-bdf13ed4.entry.js} +1 -1
- package/dist/sekiui/p-c42e6264.entry.js +1 -0
- package/dist/sekiui/p-c5cc3f3e.entry.js +1 -0
- package/dist/sekiui/{p-c642ab55.entry.js → p-c91f9078.entry.js} +1 -1
- package/dist/sekiui/{p-1480b41a.entry.js → p-cec52ed7.entry.js} +1 -1
- package/dist/sekiui/p-cf84e1fe.entry.js +1 -0
- package/dist/sekiui/p-d12b6412.entry.js +1 -0
- package/dist/sekiui/{p-ab9d1ba5.entry.js → p-d7a568dc.entry.js} +1 -1
- package/dist/sekiui/p-dd4eb7a1.entry.js +1 -0
- package/dist/sekiui/p-ddb1d6bb.entry.js +1 -0
- package/dist/sekiui/p-e14fd923.entry.js +1 -0
- package/dist/sekiui/p-e15ad7b9.entry.js +1 -0
- package/dist/sekiui/{p-ce1bbe04.entry.js → p-e3945122.entry.js} +1 -1
- package/dist/sekiui/p-e4d3d274.entry.js +1 -0
- package/dist/sekiui/p-e825d1ef.entry.js +1 -0
- package/dist/sekiui/{p-161be4d4.entry.js → p-e91724f5.entry.js} +1 -1
- package/dist/sekiui/p-edddd260.entry.js +1 -0
- package/dist/sekiui/p-ee507a57.entry.js +1 -0
- package/dist/sekiui/p-ee85d935.entry.js +1 -0
- package/dist/sekiui/p-f015db9f.entry.js +1 -0
- package/dist/sekiui/p-f10ca04d.entry.js +1 -0
- package/dist/sekiui/p-f5f61b67.entry.js +1 -0
- package/dist/sekiui/p-f78f3bd1.entry.js +1 -0
- package/dist/sekiui/p-fc221992.entry.js +1 -0
- package/dist/sekiui/p-fe18f971.entry.js +1 -0
- package/dist/sekiui/sekiui.css +1 -1
- package/dist/sekiui/sekiui.esm.js +1 -1
- package/dist/types/components/breadcrumb/seki-breadcrumb-ellipsis.d.ts +8 -0
- package/dist/types/components/breadcrumb/seki-breadcrumb-item.d.ts +8 -0
- package/dist/types/components/breadcrumb/seki-breadcrumb-link.d.ts +16 -0
- package/dist/types/components/breadcrumb/seki-breadcrumb-list.d.ts +8 -0
- package/dist/types/components/breadcrumb/seki-breadcrumb-page.d.ts +8 -0
- package/dist/types/components/breadcrumb/seki-breadcrumb-separator.d.ts +10 -0
- package/dist/types/components/breadcrumb/seki-breadcrumb.d.ts +25 -0
- package/dist/types/components/pagination/seki-pagination-content.d.ts +8 -0
- package/dist/types/components/pagination/seki-pagination-ellipsis.d.ts +8 -0
- package/dist/types/components/pagination/seki-pagination-item.d.ts +8 -0
- package/dist/types/components/pagination/seki-pagination-link.d.ts +20 -0
- package/dist/types/components/pagination/seki-pagination-next.d.ts +16 -0
- package/dist/types/components/pagination/seki-pagination-previous.d.ts +16 -0
- package/dist/types/components/pagination/seki-pagination.d.ts +22 -0
- package/dist/types/components/separator/seki-separator.d.ts +23 -0
- package/dist/types/components/separator/seki-separator.interface.d.ts +9 -0
- package/dist/types/components/sheet/seki-sheet-close.d.ts +14 -0
- package/dist/types/components/sheet/seki-sheet-content.d.ts +22 -0
- package/dist/types/components/sheet/seki-sheet-description.d.ts +8 -0
- package/dist/types/components/sheet/seki-sheet-footer.d.ts +8 -0
- package/dist/types/components/sheet/seki-sheet-header.d.ts +8 -0
- package/dist/types/components/sheet/seki-sheet-title.d.ts +8 -0
- package/dist/types/components/sheet/seki-sheet-trigger.d.ts +14 -0
- package/dist/types/components/sheet/seki-sheet.d.ts +49 -0
- package/dist/types/components/sidebar/seki-sidebar-content.d.ts +0 -15
- package/dist/types/components/sidebar/seki-sidebar-footer.d.ts +5 -13
- package/dist/types/components/sidebar/seki-sidebar-group-action.d.ts +11 -0
- package/dist/types/components/sidebar/seki-sidebar-group-content.d.ts +3 -0
- package/dist/types/components/sidebar/seki-sidebar-group-label.d.ts +3 -0
- package/dist/types/components/sidebar/seki-sidebar-group.d.ts +2 -76
- package/dist/types/components/sidebar/seki-sidebar-header.d.ts +5 -14
- package/dist/types/components/sidebar/seki-sidebar-inset.d.ts +3 -0
- package/dist/types/components/sidebar/seki-sidebar-menu-action.d.ts +7 -0
- package/dist/types/components/sidebar/seki-sidebar-menu-badge.d.ts +3 -0
- package/dist/types/components/sidebar/seki-sidebar-menu-button.d.ts +37 -0
- package/dist/types/components/sidebar/seki-sidebar-menu-item.d.ts +0 -101
- package/dist/types/components/sidebar/seki-sidebar-menu-skeleton.d.ts +7 -0
- package/dist/types/components/sidebar/seki-sidebar-menu-sub-button.d.ts +11 -0
- package/dist/types/components/sidebar/seki-sidebar-menu-sub-item.d.ts +3 -0
- package/dist/types/components/sidebar/seki-sidebar-menu-sub.d.ts +12 -71
- package/dist/types/components/sidebar/seki-sidebar-menu.d.ts +0 -14
- package/dist/types/components/sidebar/seki-sidebar-provider.d.ts +59 -0
- package/dist/types/components/sidebar/seki-sidebar-rail.d.ts +5 -0
- package/dist/types/components/sidebar/seki-sidebar-separator.d.ts +3 -0
- package/dist/types/components/sidebar/seki-sidebar-trigger.d.ts +9 -46
- package/dist/types/components/sidebar/seki-sidebar.d.ts +13 -174
- package/dist/types/components.d.ts +1353 -260
- package/package.json +1 -1
- package/dist/cdn/p-BJCq8m2o.js +0 -138
- package/dist/cjs/keyboard-Cjl5HYES.js +0 -142
- package/dist/collection/components/sidebar/seki-sidebar-menu-item.css +0 -196
- package/dist/collection/components/sidebar/types.js +0 -18
- package/dist/components/p-BJCq8m2o.js +0 -138
- package/dist/esm/keyboard-BJCq8m2o.js +0 -138
- package/dist/sekiui/p-0af1b81a.entry.js +0 -1
- package/dist/sekiui/p-0ca6b9f0.entry.js +0 -1
- package/dist/sekiui/p-26b629bc.entry.js +0 -1
- package/dist/sekiui/p-37fa684c.entry.js +0 -1
- package/dist/sekiui/p-4b29dbda.entry.js +0 -1
- package/dist/sekiui/p-60ff3543.entry.js +0 -1
- package/dist/sekiui/p-9dcd07b2.entry.js +0 -1
- package/dist/sekiui/p-BJCq8m2o.js +0 -1
- package/dist/sekiui/p-DI_YjzRi.js +0 -2
- package/dist/sekiui/p-b525d85a.entry.js +0 -1
- package/dist/sekiui/p-c83d94c4.entry.js +0 -1
- package/dist/types/components/sidebar/types.d.ts +0 -245
package/package.json
CHANGED
package/dist/cdn/p-BJCq8m2o.js
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Keyboard Service
|
|
3
|
-
* Provides normalized keyboard event handling and shortcut management
|
|
4
|
-
* Handles cross-platform shortcuts (Ctrl/Cmd combinations)
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* KeyboardService - Centralized keyboard event management
|
|
8
|
-
* Provides:
|
|
9
|
-
* - Normalized keyboard shortcuts (handles Ctrl vs Cmd on Mac)
|
|
10
|
-
* - Cross-platform shortcut registration
|
|
11
|
-
* - Event cleanup and teardown
|
|
12
|
-
*/
|
|
13
|
-
class KeyboardService {
|
|
14
|
-
constructor() {
|
|
15
|
-
this.shortcuts = new Map();
|
|
16
|
-
this.listeners = new Map();
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Register a keyboard shortcut
|
|
20
|
-
* @param id - Unique identifier for this shortcut
|
|
21
|
-
* @param options - Shortcut configuration
|
|
22
|
-
*/
|
|
23
|
-
registerShortcut(id, options) {
|
|
24
|
-
if (typeof window === 'undefined')
|
|
25
|
-
return;
|
|
26
|
-
const { key, ctrl = false, shift = false, alt = false, meta = false, handler, preventDefault = true } = options;
|
|
27
|
-
const handleKeyDown = (event) => {
|
|
28
|
-
const keyboardEvent = event;
|
|
29
|
-
const keyMatches = keyboardEvent.key.toLowerCase() === key.toLowerCase();
|
|
30
|
-
const ctrlMatches = ctrl ? keyboardEvent.ctrlKey : true;
|
|
31
|
-
const shiftMatches = shift ? keyboardEvent.shiftKey : !keyboardEvent.shiftKey;
|
|
32
|
-
const altMatches = alt ? keyboardEvent.altKey : !keyboardEvent.altKey;
|
|
33
|
-
// metaKey matches both metaKey (Mac Cmd) and ctrlKey (Windows/Linux) for cross-platform support
|
|
34
|
-
const metaMatches = meta ? keyboardEvent.metaKey || keyboardEvent.ctrlKey : !keyboardEvent.metaKey && !keyboardEvent.ctrlKey;
|
|
35
|
-
if (keyMatches && ctrlMatches && shiftMatches && altMatches && metaMatches) {
|
|
36
|
-
if (preventDefault) {
|
|
37
|
-
keyboardEvent.preventDefault();
|
|
38
|
-
}
|
|
39
|
-
handler(keyboardEvent);
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
this.shortcuts.set(id, {
|
|
43
|
-
key,
|
|
44
|
-
ctrlKey: ctrl,
|
|
45
|
-
shiftKey: shift,
|
|
46
|
-
altKey: alt,
|
|
47
|
-
metaKey: meta,
|
|
48
|
-
handler: handleKeyDown,
|
|
49
|
-
});
|
|
50
|
-
this.listeners.set(id, handleKeyDown);
|
|
51
|
-
window.addEventListener('keydown', handleKeyDown);
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Register a shortcut that works with Ctrl on Windows/Linux and Cmd on Mac
|
|
55
|
-
* @param id - Unique identifier for this shortcut
|
|
56
|
-
* @param key - The key to listen for
|
|
57
|
-
* @param handler - Callback when shortcut is triggered
|
|
58
|
-
* @param preventDefault - Whether to prevent default browser behavior
|
|
59
|
-
*/
|
|
60
|
-
registerCtrlOrCmdShortcut(id, key, handler, preventDefault = true) {
|
|
61
|
-
if (typeof window === 'undefined')
|
|
62
|
-
return;
|
|
63
|
-
const handleKeyDown = (event) => {
|
|
64
|
-
const keyboardEvent = event;
|
|
65
|
-
const keyMatches = keyboardEvent.key.toLowerCase() === key.toLowerCase();
|
|
66
|
-
const modifierMatches = keyboardEvent.ctrlKey || keyboardEvent.metaKey;
|
|
67
|
-
if (keyMatches && modifierMatches && !keyboardEvent.shiftKey && !keyboardEvent.altKey) {
|
|
68
|
-
if (preventDefault) {
|
|
69
|
-
keyboardEvent.preventDefault();
|
|
70
|
-
}
|
|
71
|
-
handler(keyboardEvent);
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
this.listeners.set(id, handleKeyDown);
|
|
75
|
-
window.addEventListener('keydown', handleKeyDown);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Unregister a keyboard shortcut
|
|
79
|
-
* @param id - The identifier of the shortcut to remove
|
|
80
|
-
*/
|
|
81
|
-
unregisterShortcut(id) {
|
|
82
|
-
if (typeof window === 'undefined')
|
|
83
|
-
return;
|
|
84
|
-
const listener = this.listeners.get(id);
|
|
85
|
-
if (listener) {
|
|
86
|
-
window.removeEventListener('keydown', listener);
|
|
87
|
-
this.listeners.delete(id);
|
|
88
|
-
}
|
|
89
|
-
this.shortcuts.delete(id);
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Unregister all shortcuts and clean up
|
|
93
|
-
*/
|
|
94
|
-
cleanup() {
|
|
95
|
-
if (typeof window === 'undefined')
|
|
96
|
-
return;
|
|
97
|
-
this.listeners.forEach((listener) => {
|
|
98
|
-
window.removeEventListener('keydown', listener);
|
|
99
|
-
});
|
|
100
|
-
this.listeners.clear();
|
|
101
|
-
this.shortcuts.clear();
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Check if a keyboard event matches a specific key combination
|
|
105
|
-
* @param event - The keyboard event to check
|
|
106
|
-
* @param key - The key to match
|
|
107
|
-
* @param ctrl - Whether Ctrl/Cmd should be pressed
|
|
108
|
-
* @param shift - Whether Shift should be pressed
|
|
109
|
-
* @param alt - Whether Alt should be pressed
|
|
110
|
-
*/
|
|
111
|
-
matchesShortcut(event, key, ctrl = false, shift = false, alt = false) {
|
|
112
|
-
const keyMatches = event.key.toLowerCase() === key.toLowerCase();
|
|
113
|
-
const ctrlMatches = ctrl ? event.ctrlKey || event.metaKey : !event.ctrlKey && !event.metaKey;
|
|
114
|
-
const shiftMatches = shift ? event.shiftKey : !event.shiftKey;
|
|
115
|
-
const altMatches = alt ? event.altKey : !event.altKey;
|
|
116
|
-
return keyMatches && ctrlMatches && shiftMatches && altMatches;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// Singleton instance
|
|
120
|
-
let keyboardServiceInstance = null;
|
|
121
|
-
/**
|
|
122
|
-
* Get the singleton KeyboardService instance
|
|
123
|
-
*/
|
|
124
|
-
function getKeyboardService() {
|
|
125
|
-
if (!keyboardServiceInstance) {
|
|
126
|
-
keyboardServiceInstance = new KeyboardService();
|
|
127
|
-
}
|
|
128
|
-
return keyboardServiceInstance;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Create a new isolated KeyboardService instance
|
|
132
|
-
* Useful for testing or when you need independent event handling
|
|
133
|
-
*/
|
|
134
|
-
function createKeyboardService() {
|
|
135
|
-
return new KeyboardService();
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export { KeyboardService as K, createKeyboardService as c, getKeyboardService as g };
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Keyboard Service
|
|
5
|
-
* Provides normalized keyboard event handling and shortcut management
|
|
6
|
-
* Handles cross-platform shortcuts (Ctrl/Cmd combinations)
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* KeyboardService - Centralized keyboard event management
|
|
10
|
-
* Provides:
|
|
11
|
-
* - Normalized keyboard shortcuts (handles Ctrl vs Cmd on Mac)
|
|
12
|
-
* - Cross-platform shortcut registration
|
|
13
|
-
* - Event cleanup and teardown
|
|
14
|
-
*/
|
|
15
|
-
class KeyboardService {
|
|
16
|
-
constructor() {
|
|
17
|
-
this.shortcuts = new Map();
|
|
18
|
-
this.listeners = new Map();
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Register a keyboard shortcut
|
|
22
|
-
* @param id - Unique identifier for this shortcut
|
|
23
|
-
* @param options - Shortcut configuration
|
|
24
|
-
*/
|
|
25
|
-
registerShortcut(id, options) {
|
|
26
|
-
if (typeof window === 'undefined')
|
|
27
|
-
return;
|
|
28
|
-
const { key, ctrl = false, shift = false, alt = false, meta = false, handler, preventDefault = true } = options;
|
|
29
|
-
const handleKeyDown = (event) => {
|
|
30
|
-
const keyboardEvent = event;
|
|
31
|
-
const keyMatches = keyboardEvent.key.toLowerCase() === key.toLowerCase();
|
|
32
|
-
const ctrlMatches = ctrl ? keyboardEvent.ctrlKey : true;
|
|
33
|
-
const shiftMatches = shift ? keyboardEvent.shiftKey : !keyboardEvent.shiftKey;
|
|
34
|
-
const altMatches = alt ? keyboardEvent.altKey : !keyboardEvent.altKey;
|
|
35
|
-
// metaKey matches both metaKey (Mac Cmd) and ctrlKey (Windows/Linux) for cross-platform support
|
|
36
|
-
const metaMatches = meta ? keyboardEvent.metaKey || keyboardEvent.ctrlKey : !keyboardEvent.metaKey && !keyboardEvent.ctrlKey;
|
|
37
|
-
if (keyMatches && ctrlMatches && shiftMatches && altMatches && metaMatches) {
|
|
38
|
-
if (preventDefault) {
|
|
39
|
-
keyboardEvent.preventDefault();
|
|
40
|
-
}
|
|
41
|
-
handler(keyboardEvent);
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
this.shortcuts.set(id, {
|
|
45
|
-
key,
|
|
46
|
-
ctrlKey: ctrl,
|
|
47
|
-
shiftKey: shift,
|
|
48
|
-
altKey: alt,
|
|
49
|
-
metaKey: meta,
|
|
50
|
-
handler: handleKeyDown,
|
|
51
|
-
});
|
|
52
|
-
this.listeners.set(id, handleKeyDown);
|
|
53
|
-
window.addEventListener('keydown', handleKeyDown);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Register a shortcut that works with Ctrl on Windows/Linux and Cmd on Mac
|
|
57
|
-
* @param id - Unique identifier for this shortcut
|
|
58
|
-
* @param key - The key to listen for
|
|
59
|
-
* @param handler - Callback when shortcut is triggered
|
|
60
|
-
* @param preventDefault - Whether to prevent default browser behavior
|
|
61
|
-
*/
|
|
62
|
-
registerCtrlOrCmdShortcut(id, key, handler, preventDefault = true) {
|
|
63
|
-
if (typeof window === 'undefined')
|
|
64
|
-
return;
|
|
65
|
-
const handleKeyDown = (event) => {
|
|
66
|
-
const keyboardEvent = event;
|
|
67
|
-
const keyMatches = keyboardEvent.key.toLowerCase() === key.toLowerCase();
|
|
68
|
-
const modifierMatches = keyboardEvent.ctrlKey || keyboardEvent.metaKey;
|
|
69
|
-
if (keyMatches && modifierMatches && !keyboardEvent.shiftKey && !keyboardEvent.altKey) {
|
|
70
|
-
if (preventDefault) {
|
|
71
|
-
keyboardEvent.preventDefault();
|
|
72
|
-
}
|
|
73
|
-
handler(keyboardEvent);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
this.listeners.set(id, handleKeyDown);
|
|
77
|
-
window.addEventListener('keydown', handleKeyDown);
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Unregister a keyboard shortcut
|
|
81
|
-
* @param id - The identifier of the shortcut to remove
|
|
82
|
-
*/
|
|
83
|
-
unregisterShortcut(id) {
|
|
84
|
-
if (typeof window === 'undefined')
|
|
85
|
-
return;
|
|
86
|
-
const listener = this.listeners.get(id);
|
|
87
|
-
if (listener) {
|
|
88
|
-
window.removeEventListener('keydown', listener);
|
|
89
|
-
this.listeners.delete(id);
|
|
90
|
-
}
|
|
91
|
-
this.shortcuts.delete(id);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Unregister all shortcuts and clean up
|
|
95
|
-
*/
|
|
96
|
-
cleanup() {
|
|
97
|
-
if (typeof window === 'undefined')
|
|
98
|
-
return;
|
|
99
|
-
this.listeners.forEach((listener) => {
|
|
100
|
-
window.removeEventListener('keydown', listener);
|
|
101
|
-
});
|
|
102
|
-
this.listeners.clear();
|
|
103
|
-
this.shortcuts.clear();
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Check if a keyboard event matches a specific key combination
|
|
107
|
-
* @param event - The keyboard event to check
|
|
108
|
-
* @param key - The key to match
|
|
109
|
-
* @param ctrl - Whether Ctrl/Cmd should be pressed
|
|
110
|
-
* @param shift - Whether Shift should be pressed
|
|
111
|
-
* @param alt - Whether Alt should be pressed
|
|
112
|
-
*/
|
|
113
|
-
matchesShortcut(event, key, ctrl = false, shift = false, alt = false) {
|
|
114
|
-
const keyMatches = event.key.toLowerCase() === key.toLowerCase();
|
|
115
|
-
const ctrlMatches = ctrl ? event.ctrlKey || event.metaKey : !event.ctrlKey && !event.metaKey;
|
|
116
|
-
const shiftMatches = shift ? event.shiftKey : !event.shiftKey;
|
|
117
|
-
const altMatches = alt ? event.altKey : !event.altKey;
|
|
118
|
-
return keyMatches && ctrlMatches && shiftMatches && altMatches;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
// Singleton instance
|
|
122
|
-
let keyboardServiceInstance = null;
|
|
123
|
-
/**
|
|
124
|
-
* Get the singleton KeyboardService instance
|
|
125
|
-
*/
|
|
126
|
-
function getKeyboardService() {
|
|
127
|
-
if (!keyboardServiceInstance) {
|
|
128
|
-
keyboardServiceInstance = new KeyboardService();
|
|
129
|
-
}
|
|
130
|
-
return keyboardServiceInstance;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Create a new isolated KeyboardService instance
|
|
134
|
-
* Useful for testing or when you need independent event handling
|
|
135
|
-
*/
|
|
136
|
-
function createKeyboardService() {
|
|
137
|
-
return new KeyboardService();
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
exports.KeyboardService = KeyboardService;
|
|
141
|
-
exports.createKeyboardService = createKeyboardService;
|
|
142
|
-
exports.getKeyboardService = getKeyboardService;
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SekiSidebarMenuItem CSS
|
|
3
|
-
* Styling for individual menu items in the sidebar
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
:host {
|
|
7
|
-
display: block;
|
|
8
|
-
width: 100%;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.item-wrapper {
|
|
12
|
-
display: flex;
|
|
13
|
-
list-style: none;
|
|
14
|
-
margin: 0;
|
|
15
|
-
padding: 0;
|
|
16
|
-
width: 100%;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.item-content {
|
|
20
|
-
display: flex;
|
|
21
|
-
align-items: center;
|
|
22
|
-
justify-content: flex-start;
|
|
23
|
-
gap: var(--sidebar-gap, 0.5rem);
|
|
24
|
-
width: 100%;
|
|
25
|
-
padding: var(--sidebar-item-padding, 0.5rem 0.75rem);
|
|
26
|
-
text-decoration: none;
|
|
27
|
-
color: var(--sidebar-item-foreground, var(--seki-color-text));
|
|
28
|
-
background-color: transparent;
|
|
29
|
-
border: none;
|
|
30
|
-
border-radius: var(--sidebar-radius-sm, 0.25rem);
|
|
31
|
-
cursor: pointer;
|
|
32
|
-
transition: width 200ms ease-linear, height 200ms ease-linear, padding 200ms ease-linear;
|
|
33
|
-
white-space: nowrap;
|
|
34
|
-
overflow: hidden;
|
|
35
|
-
text-overflow: ellipsis;
|
|
36
|
-
/* Use built-in typography */
|
|
37
|
-
font-size: var(--seki-font-size-sm);
|
|
38
|
-
font-weight: var(--seki-font-weight-medium);
|
|
39
|
-
font-family: var(--seki-font-sans);
|
|
40
|
-
line-height: 1.25rem;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
:host([data-theme="dark"]) .item-content {
|
|
44
|
-
color: var(--sidebar-item-foreground-dark, #f1f5f9);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.item-content:hover:not([aria-disabled="true"]) {
|
|
48
|
-
background-color: var(--sidebar-item-hover-bg, #f3f4f6);
|
|
49
|
-
color: var(--sidebar-item-hover-foreground, #111827);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
:host([data-theme="dark"]) .item-content:hover:not([aria-disabled="true"]) {
|
|
53
|
-
background-color: var(--sidebar-item-hover-bg-dark, #27272a);
|
|
54
|
-
color: var(--sidebar-item-hover-foreground-dark, #fafafa);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.item-content:focus-visible {
|
|
58
|
-
outline: 2px solid var(--sidebar-primary, #3b82f6);
|
|
59
|
-
outline-offset: -2px;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
:host([data-active="true"]) .item-content {
|
|
63
|
-
background-color: var(--sidebar-item-active-bg, #e0e7ff);
|
|
64
|
-
color: var(--sidebar-item-active-foreground, #1e40af);
|
|
65
|
-
font-weight: 600;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
:host([data-theme="dark"][data-active="true"]) .item-content {
|
|
69
|
-
background-color: var(--sidebar-item-active-bg-dark, #312e81);
|
|
70
|
-
color: var(--sidebar-item-active-foreground-dark, #c7d2fe);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
:host([data-disabled="true"]) .item-content {
|
|
74
|
-
opacity: 0.5;
|
|
75
|
-
cursor: not-allowed;
|
|
76
|
-
pointer-events: none;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.item-icon {
|
|
80
|
-
display: flex;
|
|
81
|
-
align-items: center;
|
|
82
|
-
justify-content: center;
|
|
83
|
-
width: 1rem;
|
|
84
|
-
height: 1rem;
|
|
85
|
-
flex-shrink: 0;
|
|
86
|
-
font-size: 1rem;
|
|
87
|
-
color: inherit;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.item-label {
|
|
91
|
-
flex: 1;
|
|
92
|
-
overflow: hidden;
|
|
93
|
-
text-overflow: ellipsis;
|
|
94
|
-
white-space: nowrap;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.item-badge {
|
|
98
|
-
display: inline-flex;
|
|
99
|
-
align-items: center;
|
|
100
|
-
justify-content: center;
|
|
101
|
-
padding: 0.125rem 0.375rem;
|
|
102
|
-
border-radius: var(--sidebar-radius-sm, 0.25rem);
|
|
103
|
-
flex-shrink: 0;
|
|
104
|
-
margin-left: auto;
|
|
105
|
-
/* Use built-in typography */
|
|
106
|
-
font-size: var(--seki-font-size-xs);
|
|
107
|
-
font-weight: var(--seki-font-weight-semibold);
|
|
108
|
-
font-family: var(--seki-font-sans);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.badge-default {
|
|
112
|
-
background-color: var(--sidebar-badge-bg, #dbeafe);
|
|
113
|
-
color: var(--sidebar-badge-foreground, #1e40af);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
.badge-secondary {
|
|
117
|
-
background-color: var(--sidebar-badge-secondary-bg, #e5e7eb);
|
|
118
|
-
color: var(--sidebar-badge-secondary-foreground, #374151);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
.badge-destructive {
|
|
122
|
-
background-color: var(--sidebar-badge-destructive-bg, #fee2e2);
|
|
123
|
-
color: var(--sidebar-badge-destructive-foreground, #991b1b);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
:host([data-theme="dark"]) .badge-default {
|
|
127
|
-
background-color: var(--sidebar-badge-bg-dark, #1e3a8a);
|
|
128
|
-
color: var(--sidebar-badge-foreground-dark, #93c5fd);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
:host([data-theme="dark"]) .badge-secondary {
|
|
132
|
-
background-color: var(--sidebar-badge-secondary-bg-dark, #3f3f46);
|
|
133
|
-
color: var(--sidebar-badge-secondary-foreground-dark, #d4d4d8);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
:host([data-theme="dark"]) .badge-destructive {
|
|
137
|
-
background-color: var(--sidebar-badge-destructive-bg-dark, #7f1d1d);
|
|
138
|
-
color: var(--sidebar-badge-destructive-foreground-dark, #fca5a5);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/* Print styles */
|
|
142
|
-
@media print {
|
|
143
|
-
:host([data-active="true"]) .item-content {
|
|
144
|
-
text-decoration: underline;
|
|
145
|
-
font-weight: bold;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/* High contrast mode support */
|
|
150
|
-
@media (prefers-contrast: more) {
|
|
151
|
-
.item-content {
|
|
152
|
-
border: 1px solid transparent;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.item-content:focus-visible {
|
|
156
|
-
border-color: var(--sidebar-primary, #3b82f6);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/* Reduced motion support */
|
|
161
|
-
@media (prefers-reduced-motion: reduce) {
|
|
162
|
-
.item-content {
|
|
163
|
-
transition: none;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/* Collapsed icon mode - hide labels, show only icons with smooth transitions */
|
|
168
|
-
:host-context(seki-sidebar[data-state="closed"][data-collapse-mode="icon"]) .item-label {
|
|
169
|
-
margin-left: -0.5rem;
|
|
170
|
-
opacity: 0;
|
|
171
|
-
transition: margin-left 200ms ease-linear, opacity 200ms ease-linear;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
:host-context(seki-sidebar[data-state="closed"][data-collapse-mode="icon"]) .item-badge {
|
|
175
|
-
margin-left: -0.5rem;
|
|
176
|
-
opacity: 0;
|
|
177
|
-
transition: margin-left 200ms ease-linear, opacity 200ms ease-linear;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
:host-context(seki-sidebar[data-state="closed"][data-collapse-mode="icon"]) .item-content {
|
|
181
|
-
justify-content: center;
|
|
182
|
-
padding: 0.5rem;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
:host-context(seki-sidebar[data-state="closed"][data-collapse-mode="icon"]) .item-icon {
|
|
186
|
-
width: 1rem;
|
|
187
|
-
height: 1rem;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/* Expanded - show labels */
|
|
191
|
-
:host-context(seki-sidebar[data-state="open"]) .item-label,
|
|
192
|
-
:host-context(seki-sidebar:not([data-state="closed"])) .item-label {
|
|
193
|
-
margin-left: 0;
|
|
194
|
-
opacity: 1;
|
|
195
|
-
transition: margin-left 200ms ease-linear, opacity 200ms ease-linear;
|
|
196
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sidebar Component Type Definitions
|
|
3
|
-
* @module sidebar/types
|
|
4
|
-
*
|
|
5
|
-
* Complete TypeScript interfaces and types for the sidebar component system.
|
|
6
|
-
* These types are used throughout the component implementation, tests, and exported
|
|
7
|
-
* to the npm package for consumer IDE autocomplete support.
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Default sidebar state values
|
|
11
|
-
*/
|
|
12
|
-
export const DEFAULT_SIDEBAR_STATE = {
|
|
13
|
-
isOpen: true,
|
|
14
|
-
collapseMode: 'offcanvas',
|
|
15
|
-
variant: 'sidebar',
|
|
16
|
-
isMobile: typeof window !== 'undefined' ? window.innerWidth < 768 : false,
|
|
17
|
-
persistenceKey: 'seki-sidebar-state',
|
|
18
|
-
};
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Keyboard Service
|
|
3
|
-
* Provides normalized keyboard event handling and shortcut management
|
|
4
|
-
* Handles cross-platform shortcuts (Ctrl/Cmd combinations)
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* KeyboardService - Centralized keyboard event management
|
|
8
|
-
* Provides:
|
|
9
|
-
* - Normalized keyboard shortcuts (handles Ctrl vs Cmd on Mac)
|
|
10
|
-
* - Cross-platform shortcut registration
|
|
11
|
-
* - Event cleanup and teardown
|
|
12
|
-
*/
|
|
13
|
-
class KeyboardService {
|
|
14
|
-
constructor() {
|
|
15
|
-
this.shortcuts = new Map();
|
|
16
|
-
this.listeners = new Map();
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Register a keyboard shortcut
|
|
20
|
-
* @param id - Unique identifier for this shortcut
|
|
21
|
-
* @param options - Shortcut configuration
|
|
22
|
-
*/
|
|
23
|
-
registerShortcut(id, options) {
|
|
24
|
-
if (typeof window === 'undefined')
|
|
25
|
-
return;
|
|
26
|
-
const { key, ctrl = false, shift = false, alt = false, meta = false, handler, preventDefault = true } = options;
|
|
27
|
-
const handleKeyDown = (event) => {
|
|
28
|
-
const keyboardEvent = event;
|
|
29
|
-
const keyMatches = keyboardEvent.key.toLowerCase() === key.toLowerCase();
|
|
30
|
-
const ctrlMatches = ctrl ? keyboardEvent.ctrlKey : true;
|
|
31
|
-
const shiftMatches = shift ? keyboardEvent.shiftKey : !keyboardEvent.shiftKey;
|
|
32
|
-
const altMatches = alt ? keyboardEvent.altKey : !keyboardEvent.altKey;
|
|
33
|
-
// metaKey matches both metaKey (Mac Cmd) and ctrlKey (Windows/Linux) for cross-platform support
|
|
34
|
-
const metaMatches = meta ? keyboardEvent.metaKey || keyboardEvent.ctrlKey : !keyboardEvent.metaKey && !keyboardEvent.ctrlKey;
|
|
35
|
-
if (keyMatches && ctrlMatches && shiftMatches && altMatches && metaMatches) {
|
|
36
|
-
if (preventDefault) {
|
|
37
|
-
keyboardEvent.preventDefault();
|
|
38
|
-
}
|
|
39
|
-
handler(keyboardEvent);
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
this.shortcuts.set(id, {
|
|
43
|
-
key,
|
|
44
|
-
ctrlKey: ctrl,
|
|
45
|
-
shiftKey: shift,
|
|
46
|
-
altKey: alt,
|
|
47
|
-
metaKey: meta,
|
|
48
|
-
handler: handleKeyDown,
|
|
49
|
-
});
|
|
50
|
-
this.listeners.set(id, handleKeyDown);
|
|
51
|
-
window.addEventListener('keydown', handleKeyDown);
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Register a shortcut that works with Ctrl on Windows/Linux and Cmd on Mac
|
|
55
|
-
* @param id - Unique identifier for this shortcut
|
|
56
|
-
* @param key - The key to listen for
|
|
57
|
-
* @param handler - Callback when shortcut is triggered
|
|
58
|
-
* @param preventDefault - Whether to prevent default browser behavior
|
|
59
|
-
*/
|
|
60
|
-
registerCtrlOrCmdShortcut(id, key, handler, preventDefault = true) {
|
|
61
|
-
if (typeof window === 'undefined')
|
|
62
|
-
return;
|
|
63
|
-
const handleKeyDown = (event) => {
|
|
64
|
-
const keyboardEvent = event;
|
|
65
|
-
const keyMatches = keyboardEvent.key.toLowerCase() === key.toLowerCase();
|
|
66
|
-
const modifierMatches = keyboardEvent.ctrlKey || keyboardEvent.metaKey;
|
|
67
|
-
if (keyMatches && modifierMatches && !keyboardEvent.shiftKey && !keyboardEvent.altKey) {
|
|
68
|
-
if (preventDefault) {
|
|
69
|
-
keyboardEvent.preventDefault();
|
|
70
|
-
}
|
|
71
|
-
handler(keyboardEvent);
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
this.listeners.set(id, handleKeyDown);
|
|
75
|
-
window.addEventListener('keydown', handleKeyDown);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Unregister a keyboard shortcut
|
|
79
|
-
* @param id - The identifier of the shortcut to remove
|
|
80
|
-
*/
|
|
81
|
-
unregisterShortcut(id) {
|
|
82
|
-
if (typeof window === 'undefined')
|
|
83
|
-
return;
|
|
84
|
-
const listener = this.listeners.get(id);
|
|
85
|
-
if (listener) {
|
|
86
|
-
window.removeEventListener('keydown', listener);
|
|
87
|
-
this.listeners.delete(id);
|
|
88
|
-
}
|
|
89
|
-
this.shortcuts.delete(id);
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Unregister all shortcuts and clean up
|
|
93
|
-
*/
|
|
94
|
-
cleanup() {
|
|
95
|
-
if (typeof window === 'undefined')
|
|
96
|
-
return;
|
|
97
|
-
this.listeners.forEach((listener) => {
|
|
98
|
-
window.removeEventListener('keydown', listener);
|
|
99
|
-
});
|
|
100
|
-
this.listeners.clear();
|
|
101
|
-
this.shortcuts.clear();
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Check if a keyboard event matches a specific key combination
|
|
105
|
-
* @param event - The keyboard event to check
|
|
106
|
-
* @param key - The key to match
|
|
107
|
-
* @param ctrl - Whether Ctrl/Cmd should be pressed
|
|
108
|
-
* @param shift - Whether Shift should be pressed
|
|
109
|
-
* @param alt - Whether Alt should be pressed
|
|
110
|
-
*/
|
|
111
|
-
matchesShortcut(event, key, ctrl = false, shift = false, alt = false) {
|
|
112
|
-
const keyMatches = event.key.toLowerCase() === key.toLowerCase();
|
|
113
|
-
const ctrlMatches = ctrl ? event.ctrlKey || event.metaKey : !event.ctrlKey && !event.metaKey;
|
|
114
|
-
const shiftMatches = shift ? event.shiftKey : !event.shiftKey;
|
|
115
|
-
const altMatches = alt ? event.altKey : !event.altKey;
|
|
116
|
-
return keyMatches && ctrlMatches && shiftMatches && altMatches;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// Singleton instance
|
|
120
|
-
let keyboardServiceInstance = null;
|
|
121
|
-
/**
|
|
122
|
-
* Get the singleton KeyboardService instance
|
|
123
|
-
*/
|
|
124
|
-
function getKeyboardService() {
|
|
125
|
-
if (!keyboardServiceInstance) {
|
|
126
|
-
keyboardServiceInstance = new KeyboardService();
|
|
127
|
-
}
|
|
128
|
-
return keyboardServiceInstance;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Create a new isolated KeyboardService instance
|
|
132
|
-
* Useful for testing or when you need independent event handling
|
|
133
|
-
*/
|
|
134
|
-
function createKeyboardService() {
|
|
135
|
-
return new KeyboardService();
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export { KeyboardService as K, createKeyboardService as c, getKeyboardService as g };
|