@nvidia-elements/core 2.20.1 → 2.20.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/CHANGELOG.md +16 -0
- package/dist/_virtual/{_@oxc-project_runtime@0.147.0 → _@oxc-project_runtime@0.155.0}/helpers/esm/decorate.js +1 -2
- package/dist/_virtual/_rolldown/runtime.js +1 -2
- package/dist/accordion/accordion-content.js +1 -2
- package/dist/accordion/accordion-content.js.map +1 -1
- package/dist/accordion/accordion-group.js +1 -2
- package/dist/accordion/accordion-group.js.map +1 -1
- package/dist/accordion/accordion-header.js +1 -2
- package/dist/accordion/accordion-header.js.map +1 -1
- package/dist/accordion/accordion.examples.js +1 -2
- package/dist/accordion/accordion.examples.js.map +1 -1
- package/dist/accordion/accordion.js +1 -2
- package/dist/accordion/accordion.js.map +1 -1
- package/dist/accordion/accordion2.js +7 -8
- package/dist/accordion/accordion2.js.map +1 -1
- package/dist/accordion/define.js +0 -1
- package/dist/accordion/define.js.map +1 -1
- package/dist/accordion/index.js +1 -2
- package/dist/alert/alert-group.js +1 -2
- package/dist/alert/alert-group.js.map +1 -1
- package/dist/alert/alert-group2.js +3 -4
- package/dist/alert/alert-group2.js.map +1 -1
- package/dist/alert/alert.examples.js +1 -2
- package/dist/alert/alert.examples.js.map +1 -1
- package/dist/alert/alert.global.js +1 -2
- package/dist/alert/alert.global.js.map +1 -1
- package/dist/alert/alert.js +1 -2
- package/dist/alert/alert.js.map +1 -1
- package/dist/alert/alert2.js +3 -4
- package/dist/alert/alert2.js.map +1 -1
- package/dist/alert/define.js +0 -1
- package/dist/alert/define.js.map +1 -1
- package/dist/avatar/avatar-group.js +1 -2
- package/dist/avatar/avatar-group.js.map +1 -1
- package/dist/avatar/avatar-group2.js +2 -3
- package/dist/avatar/avatar-group2.js.map +1 -1
- package/dist/avatar/avatar.examples.js +1 -2
- package/dist/avatar/avatar.examples.js.map +1 -1
- package/dist/avatar/avatar.js +1 -2
- package/dist/avatar/avatar.js.map +1 -1
- package/dist/avatar/avatar2.js +3 -4
- package/dist/avatar/avatar2.js.map +1 -1
- package/dist/avatar/define.js +0 -1
- package/dist/avatar/define.js.map +1 -1
- package/dist/badge/badge.examples.js +1 -2
- package/dist/badge/badge.examples.js.map +1 -1
- package/dist/badge/badge.js +1 -2
- package/dist/badge/badge.js.map +1 -1
- package/dist/badge/badge2.js +3 -4
- package/dist/badge/badge2.js.map +1 -1
- package/dist/badge/define.js +1 -2
- package/dist/badge/define.js.map +1 -1
- package/dist/badge/index.js +1 -2
- package/dist/breadcrumb/breadcrumb.examples.js +1 -2
- package/dist/breadcrumb/breadcrumb.examples.js.map +1 -1
- package/dist/breadcrumb/breadcrumb.js +1 -2
- package/dist/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/breadcrumb/breadcrumb2.js +3 -4
- package/dist/breadcrumb/breadcrumb2.js.map +1 -1
- package/dist/breadcrumb/define.js +1 -2
- package/dist/breadcrumb/define.js.map +1 -1
- package/dist/breadcrumb/index.js +1 -2
- package/dist/bundles/index.js +22 -10
- package/dist/button/button.examples.js +1 -2
- package/dist/button/button.examples.js.map +1 -1
- package/dist/button/button.js +1 -2
- package/dist/button/button.js.map +1 -1
- package/dist/button/button2.js +3 -4
- package/dist/button/button2.js.map +1 -1
- package/dist/button/define.js +1 -2
- package/dist/button/define.js.map +1 -1
- package/dist/button/index.js +1 -2
- package/dist/button-group/button-group.examples.js +1 -2
- package/dist/button-group/button-group.examples.js.map +1 -1
- package/dist/button-group/button-group.global.js +1 -2
- package/dist/button-group/button-group.global.js.map +1 -1
- package/dist/button-group/button-group.js +1 -2
- package/dist/button-group/button-group.js.map +1 -1
- package/dist/button-group/button-group2.js +3 -4
- package/dist/button-group/button-group2.js.map +1 -1
- package/dist/button-group/define.js +1 -2
- package/dist/button-group/define.js.map +1 -1
- package/dist/button-group/index.js +1 -2
- package/dist/card/card-content.js +1 -2
- package/dist/card/card-content.js.map +1 -1
- package/dist/card/card-footer.js +1 -2
- package/dist/card/card-footer.js.map +1 -1
- package/dist/card/card-header.js +1 -2
- package/dist/card/card-header.js.map +1 -1
- package/dist/card/card.examples.js +1 -2
- package/dist/card/card.examples.js.map +1 -1
- package/dist/card/card.js +1 -2
- package/dist/card/card.js.map +1 -1
- package/dist/card/card2.js +6 -7
- package/dist/card/card2.js.map +1 -1
- package/dist/card/define.js +0 -1
- package/dist/card/define.js.map +1 -1
- package/dist/card/index.js +1 -2
- package/dist/chat-message/chat-message.examples.js +1 -2
- package/dist/chat-message/chat-message.examples.js.map +1 -1
- package/dist/chat-message/chat-message.global.js +1 -2
- package/dist/chat-message/chat-message.global.js.map +1 -1
- package/dist/chat-message/chat-message.js +1 -2
- package/dist/chat-message/chat-message.js.map +1 -1
- package/dist/chat-message/chat-message2.js +3 -4
- package/dist/chat-message/chat-message2.js.map +1 -1
- package/dist/chat-message/define.js +1 -2
- package/dist/chat-message/define.js.map +1 -1
- package/dist/chat-message/index.js +1 -2
- package/dist/checkbox/checkbox-group.js +1 -2
- package/dist/checkbox/checkbox-group.js.map +1 -1
- package/dist/checkbox/checkbox-group2.js +3 -4
- package/dist/checkbox/checkbox-group2.js.map +1 -1
- package/dist/checkbox/checkbox.examples.js +1 -2
- package/dist/checkbox/checkbox.examples.js.map +1 -1
- package/dist/checkbox/checkbox.js +1 -2
- package/dist/checkbox/checkbox.js.map +1 -1
- package/dist/checkbox/checkbox2.js +3 -4
- package/dist/checkbox/checkbox2.js.map +1 -1
- package/dist/checkbox/define.js +0 -1
- package/dist/checkbox/define.js.map +1 -1
- package/dist/color/color.examples.js +1 -2
- package/dist/color/color.examples.js.map +1 -1
- package/dist/color/color.global.js +1 -2
- package/dist/color/color.global.js.map +1 -1
- package/dist/color/color.js +1 -2
- package/dist/color/color.js.map +1 -1
- package/dist/color/color2.js +3 -4
- package/dist/color/color2.js.map +1 -1
- package/dist/color/define.js +0 -1
- package/dist/color/define.js.map +1 -1
- package/dist/color/index.js +1 -2
- package/dist/combobox/combobox.examples.js +1 -2
- package/dist/combobox/combobox.examples.js.map +1 -1
- package/dist/combobox/combobox.js +1 -2
- package/dist/combobox/combobox.js.map +1 -1
- package/dist/combobox/combobox2.js +3 -4
- package/dist/combobox/combobox2.js.map +1 -1
- package/dist/combobox/define.js +0 -1
- package/dist/combobox/define.js.map +1 -1
- package/dist/combobox/index.js +1 -2
- package/dist/copy-button/copy-button.examples.js +1 -2
- package/dist/copy-button/copy-button.examples.js.map +1 -1
- package/dist/copy-button/copy-button.js +1 -2
- package/dist/copy-button/copy-button.js.map +1 -1
- package/dist/copy-button/copy-button2.js +3 -4
- package/dist/copy-button/copy-button2.js.map +1 -1
- package/dist/copy-button/define.js +1 -2
- package/dist/copy-button/define.js.map +1 -1
- package/dist/copy-button/index.js +1 -2
- package/dist/date/date.examples.js +1 -2
- package/dist/date/date.examples.js.map +1 -1
- package/dist/date/date.js +1 -2
- package/dist/date/date.js.map +1 -1
- package/dist/date/date2.js +3 -4
- package/dist/date/date2.js.map +1 -1
- package/dist/date/define.js +0 -1
- package/dist/date/define.js.map +1 -1
- package/dist/date/index.js +1 -2
- package/dist/datetime/datetime.examples.js +1 -2
- package/dist/datetime/datetime.examples.js.map +1 -1
- package/dist/datetime/datetime.js +1 -2
- package/dist/datetime/datetime.js.map +1 -1
- package/dist/datetime/datetime2.js +3 -4
- package/dist/datetime/datetime2.js.map +1 -1
- package/dist/datetime/define.js +0 -1
- package/dist/datetime/define.js.map +1 -1
- package/dist/datetime/index.js +1 -2
- package/dist/dialog/define.js +0 -1
- package/dist/dialog/define.js.map +1 -1
- package/dist/dialog/dialog-footer.js +1 -2
- package/dist/dialog/dialog-footer.js.map +1 -1
- package/dist/dialog/dialog-footer2.js +2 -3
- package/dist/dialog/dialog-footer2.js.map +1 -1
- package/dist/dialog/dialog-header.js +1 -2
- package/dist/dialog/dialog-header.js.map +1 -1
- package/dist/dialog/dialog-header2.js +2 -3
- package/dist/dialog/dialog-header2.js.map +1 -1
- package/dist/dialog/dialog.examples.js +1 -2
- package/dist/dialog/dialog.examples.js.map +1 -1
- package/dist/dialog/dialog.global.js +1 -2
- package/dist/dialog/dialog.global.js.map +1 -1
- package/dist/dialog/dialog.js +1 -2
- package/dist/dialog/dialog.js.map +1 -1
- package/dist/dialog/dialog2.js +3 -4
- package/dist/dialog/dialog2.js.map +1 -1
- package/dist/divider/define.js +1 -2
- package/dist/divider/define.js.map +1 -1
- package/dist/divider/divider.examples.js +1 -2
- package/dist/divider/divider.examples.js.map +1 -1
- package/dist/divider/divider.js +1 -2
- package/dist/divider/divider.js.map +1 -1
- package/dist/divider/divider2.js +3 -4
- package/dist/divider/divider2.js.map +1 -1
- package/dist/divider/index.js +1 -2
- package/dist/dot/define.js +1 -2
- package/dist/dot/define.js.map +1 -1
- package/dist/dot/dot.examples.js +1 -2
- package/dist/dot/dot.examples.js.map +1 -1
- package/dist/dot/dot.js +1 -2
- package/dist/dot/dot.js.map +1 -1
- package/dist/dot/dot2.js +3 -4
- package/dist/dot/dot2.js.map +1 -1
- package/dist/dot/index.js +1 -2
- package/dist/drag-handle/define.js +1 -2
- package/dist/drag-handle/define.js.map +1 -1
- package/dist/drag-handle/drag-handle.examples.js +1 -2
- package/dist/drag-handle/drag-handle.examples.js.map +1 -1
- package/dist/drag-handle/drag-handle.js +1 -2
- package/dist/drag-handle/drag-handle.js.map +1 -1
- package/dist/drag-handle/drag-handle2.js +3 -4
- package/dist/drag-handle/drag-handle2.js.map +1 -1
- package/dist/drag-handle/index.js +1 -2
- package/dist/drawer/define.js +0 -1
- package/dist/drawer/define.js.map +1 -1
- package/dist/drawer/drawer-content.js +1 -2
- package/dist/drawer/drawer-content.js.map +1 -1
- package/dist/drawer/drawer-content2.js +2 -3
- package/dist/drawer/drawer-content2.js.map +1 -1
- package/dist/drawer/drawer-footer.js +1 -2
- package/dist/drawer/drawer-footer.js.map +1 -1
- package/dist/drawer/drawer-footer2.js +2 -3
- package/dist/drawer/drawer-footer2.js.map +1 -1
- package/dist/drawer/drawer-header.js +1 -2
- package/dist/drawer/drawer-header.js.map +1 -1
- package/dist/drawer/drawer-header2.js +2 -3
- package/dist/drawer/drawer-header2.js.map +1 -1
- package/dist/drawer/drawer.examples.js +1 -2
- package/dist/drawer/drawer.examples.js.map +1 -1
- package/dist/drawer/drawer.js +1 -2
- package/dist/drawer/drawer.js.map +1 -1
- package/dist/drawer/drawer2.js +3 -4
- package/dist/drawer/drawer2.js.map +1 -1
- package/dist/dropdown/define.js +0 -1
- package/dist/dropdown/define.js.map +1 -1
- package/dist/dropdown/dropdown-footer.js +1 -2
- package/dist/dropdown/dropdown-footer.js.map +1 -1
- package/dist/dropdown/dropdown-footer2.js +2 -3
- package/dist/dropdown/dropdown-footer2.js.map +1 -1
- package/dist/dropdown/dropdown-header.js +1 -2
- package/dist/dropdown/dropdown-header.js.map +1 -1
- package/dist/dropdown/dropdown-header2.js +2 -3
- package/dist/dropdown/dropdown-header2.js.map +1 -1
- package/dist/dropdown/dropdown.examples.js +1 -2
- package/dist/dropdown/dropdown.examples.js.map +1 -1
- package/dist/dropdown/dropdown.js +1 -2
- package/dist/dropdown/dropdown.js.map +1 -1
- package/dist/dropdown/dropdown2.js +3 -4
- package/dist/dropdown/dropdown2.js.map +1 -1
- package/dist/dropdown-group/define.js +1 -2
- package/dist/dropdown-group/define.js.map +1 -1
- package/dist/dropdown-group/dropdown-group.examples.js +1 -2
- package/dist/dropdown-group/dropdown-group.examples.js.map +1 -1
- package/dist/dropdown-group/dropdown-group.global.js +1 -2
- package/dist/dropdown-group/dropdown-group.global.js.map +1 -1
- package/dist/dropdown-group/dropdown-group.js +3 -4
- package/dist/dropdown-group/dropdown-group.js.map +1 -1
- package/dist/dropdown-group/index.js +1 -2
- package/dist/dropzone/define.js +1 -2
- package/dist/dropzone/define.js.map +1 -1
- package/dist/dropzone/dropzone.examples.js +1 -2
- package/dist/dropzone/dropzone.examples.js.map +1 -1
- package/dist/dropzone/dropzone.js +1 -2
- package/dist/dropzone/dropzone.js.map +1 -1
- package/dist/dropzone/dropzone.util.js +1 -2
- package/dist/dropzone/dropzone.util.js.map +1 -1
- package/dist/dropzone/dropzone2.js +3 -4
- package/dist/dropzone/dropzone2.js.map +1 -1
- package/dist/dropzone/index.js +1 -2
- package/dist/file/define.js +0 -1
- package/dist/file/define.js.map +1 -1
- package/dist/file/file.examples.js +1 -2
- package/dist/file/file.examples.js.map +1 -1
- package/dist/file/file.global.js +1 -2
- package/dist/file/file.global.js.map +1 -1
- package/dist/file/file.js +1 -2
- package/dist/file/file.js.map +1 -1
- package/dist/file/file2.js +2 -3
- package/dist/file/file2.js.map +1 -1
- package/dist/file/index.js +1 -2
- package/dist/format-bytes/define.js +1 -2
- package/dist/format-bytes/define.js.map +1 -1
- package/dist/format-bytes/format-bytes.examples.js +1 -2
- package/dist/format-bytes/format-bytes.examples.js.map +1 -1
- package/dist/format-bytes/format-bytes.js +1 -2
- package/dist/format-bytes/format-bytes.js.map +1 -1
- package/dist/format-bytes/format-bytes2.js +3 -4
- package/dist/format-bytes/format-bytes2.js.map +1 -1
- package/dist/format-bytes/index.js +1 -2
- package/dist/format-datetime/define.js +1 -2
- package/dist/format-datetime/define.js.map +1 -1
- package/dist/format-datetime/format-datetime.examples.js +1 -2
- package/dist/format-datetime/format-datetime.examples.js.map +1 -1
- package/dist/format-datetime/format-datetime.js +1 -2
- package/dist/format-datetime/format-datetime.js.map +1 -1
- package/dist/format-datetime/format-datetime2.js +3 -4
- package/dist/format-datetime/format-datetime2.js.map +1 -1
- package/dist/format-datetime/index.js +1 -2
- package/dist/format-number/define.js +1 -2
- package/dist/format-number/define.js.map +1 -1
- package/dist/format-number/format-number.examples.js +1 -2
- package/dist/format-number/format-number.examples.js.map +1 -1
- package/dist/format-number/format-number.js +1 -2
- package/dist/format-number/format-number.js.map +1 -1
- package/dist/format-number/format-number2.js +3 -4
- package/dist/format-number/format-number2.js.map +1 -1
- package/dist/format-number/index.js +1 -2
- package/dist/format-relative-time/define.js +1 -2
- package/dist/format-relative-time/define.js.map +1 -1
- package/dist/format-relative-time/format-relative-time.examples.js +1 -2
- package/dist/format-relative-time/format-relative-time.examples.js.map +1 -1
- package/dist/format-relative-time/format-relative-time.js +1 -2
- package/dist/format-relative-time/format-relative-time.js.map +1 -1
- package/dist/format-relative-time/format-relative-time2.js +3 -4
- package/dist/format-relative-time/format-relative-time2.js.map +1 -1
- package/dist/format-relative-time/index.js +1 -2
- package/dist/format-truncate/define.js +1 -2
- package/dist/format-truncate/define.js.map +1 -1
- package/dist/format-truncate/format-truncate.examples.js +1 -2
- package/dist/format-truncate/format-truncate.examples.js.map +1 -1
- package/dist/format-truncate/format-truncate.js +1 -2
- package/dist/format-truncate/format-truncate.js.map +1 -1
- package/dist/format-truncate/format-truncate2.js +4 -5
- package/dist/format-truncate/format-truncate2.js.map +1 -1
- package/dist/format-truncate/index.js +1 -2
- package/dist/format-truncate/utils.js +0 -1
- package/dist/format-truncate/utils.js.map +1 -1
- package/dist/forms/actions.examples.js +1 -2
- package/dist/forms/actions.examples.js.map +1 -1
- package/dist/forms/control/control.examples.js +1 -2
- package/dist/forms/control/control.examples.js.map +1 -1
- package/dist/forms/control/control.global.js +1 -2
- package/dist/forms/control/control.global.js.map +1 -1
- package/dist/forms/control/control.js +1 -2
- package/dist/forms/control/control.js.map +1 -1
- package/dist/forms/control/control2.js +4 -13
- package/dist/forms/control/control2.js.map +1 -1
- package/dist/forms/control-group/control-group.js +1 -2
- package/dist/forms/control-group/control-group.js.map +1 -1
- package/dist/forms/control-group/control-group2.js +3 -4
- package/dist/forms/control-group/control-group2.js.map +1 -1
- package/dist/forms/control-message/control-message.js +1 -2
- package/dist/forms/control-message/control-message.js.map +1 -1
- package/dist/forms/control-message/control-message2.js +3 -4
- package/dist/forms/control-message/control-message2.js.map +1 -1
- package/dist/forms/define.js +0 -1
- package/dist/forms/define.js.map +1 -1
- package/dist/forms/forms.examples.js +1 -2
- package/dist/forms/forms.examples.js.map +1 -1
- package/dist/forms/utils/layout.js +1 -2
- package/dist/forms/utils/layout.js.map +1 -1
- package/dist/forms/utils/states.js +1 -2
- package/dist/forms/utils/states.js.map +1 -1
- package/dist/forms/validation.examples.js +1 -2
- package/dist/forms/validation.examples.js.map +1 -1
- package/dist/gauge/define.js +1 -2
- package/dist/gauge/define.js.map +1 -1
- package/dist/gauge/gauge.examples.js +1 -2
- package/dist/gauge/gauge.examples.js.map +1 -1
- package/dist/gauge/gauge.js +1 -2
- package/dist/gauge/gauge.js.map +1 -1
- package/dist/gauge/gauge2.js +3 -4
- package/dist/gauge/gauge2.js.map +1 -1
- package/dist/gauge/index.js +1 -2
- package/dist/grid/cell/cell.js +1 -2
- package/dist/grid/cell/cell.js.map +1 -1
- package/dist/grid/cell/cell2.js +2 -3
- package/dist/grid/cell/cell2.js.map +1 -1
- package/dist/grid/column/column.js +1 -2
- package/dist/grid/column/column.js.map +1 -1
- package/dist/grid/column/column2.js +3 -4
- package/dist/grid/column/column2.js.map +1 -1
- package/dist/grid/define.js +0 -1
- package/dist/grid/define.js.map +1 -1
- package/dist/grid/footer/footer.js +1 -2
- package/dist/grid/footer/footer.js.map +1 -1
- package/dist/grid/footer/footer2.js +3 -4
- package/dist/grid/footer/footer2.js.map +1 -1
- package/dist/grid/grid.examples.js +1 -2
- package/dist/grid/grid.examples.js.map +1 -1
- package/dist/grid/grid.global.js +1 -2
- package/dist/grid/grid.global.js.map +1 -1
- package/dist/grid/grid.js +1 -2
- package/dist/grid/grid.js.map +1 -1
- package/dist/grid/grid2.js +3 -4
- package/dist/grid/grid2.js.map +1 -1
- package/dist/grid/header/header.js +1 -2
- package/dist/grid/header/header.js.map +1 -1
- package/dist/grid/header/header2.js +3 -4
- package/dist/grid/header/header2.js.map +1 -1
- package/dist/grid/placeholder/placeholder.js +1 -2
- package/dist/grid/placeholder/placeholder.js.map +1 -1
- package/dist/grid/placeholder/placeholder2.js +2 -3
- package/dist/grid/placeholder/placeholder2.js.map +1 -1
- package/dist/grid/row/row.js +1 -2
- package/dist/grid/row/row.js.map +1 -1
- package/dist/grid/row/row2.js +3 -4
- package/dist/grid/row/row2.js.map +1 -1
- package/dist/icon/define.js +0 -1
- package/dist/icon/define.js.map +1 -1
- package/dist/icon/icon.examples.js +1 -2
- package/dist/icon/icon.examples.js.map +1 -1
- package/dist/icon/icon.js +1 -2
- package/dist/icon/icon.js.map +1 -1
- package/dist/icon/icon2.js +4 -5
- package/dist/icon/icon2.js.map +1 -1
- package/dist/icon/icons/academic-cap.js +1 -2
- package/dist/icon/icons/academic-cap.js.map +1 -1
- package/dist/icon/icons/add-asset.js +1 -2
- package/dist/icon/icons/add-asset.js.map +1 -1
- package/dist/icon/icons/add-comment.js +1 -2
- package/dist/icon/icons/add-comment.js.map +1 -1
- package/dist/icon/icons/add-grid.js +1 -2
- package/dist/icon/icons/add-grid.js.map +1 -1
- package/dist/icon/icons/add-user.js +1 -2
- package/dist/icon/icons/add-user.js.map +1 -1
- package/dist/icon/icons/add.js +1 -2
- package/dist/icon/icons/add.js.map +1 -1
- package/dist/icon/icons/ancestors.js +1 -2
- package/dist/icon/icons/ancestors.js.map +1 -1
- package/dist/icon/icons/archive.js +1 -2
- package/dist/icon/icons/archive.js.map +1 -1
- package/dist/icon/icons/arrow-angle.js +1 -2
- package/dist/icon/icons/arrow-angle.js.map +1 -1
- package/dist/icon/icons/arrow-both.js +1 -2
- package/dist/icon/icons/arrow-both.js.map +1 -1
- package/dist/icon/icons/arrow-cycle.js +1 -2
- package/dist/icon/icons/arrow-cycle.js.map +1 -1
- package/dist/icon/icons/arrow-path-rounded-square.js +1 -2
- package/dist/icon/icons/arrow-path-rounded-square.js.map +1 -1
- package/dist/icon/icons/arrow-stop.js +1 -2
- package/dist/icon/icons/arrow-stop.js.map +1 -1
- package/dist/icon/icons/arrow.js +1 -2
- package/dist/icon/icons/arrow.js.map +1 -1
- package/dist/icon/icons/at-symbol.js +1 -2
- package/dist/icon/icons/at-symbol.js.map +1 -1
- package/dist/icon/icons/backspace.js +1 -2
- package/dist/icon/icons/backspace.js.map +1 -1
- package/dist/icon/icons/bar-pill-stack.js +1 -2
- package/dist/icon/icons/bar-pill-stack.js.map +1 -1
- package/dist/icon/icons/bars-3-bottom-left.js +1 -2
- package/dist/icon/icons/bars-3-bottom-left.js.map +1 -1
- package/dist/icon/icons/bars-3-bottom-right.js +1 -2
- package/dist/icon/icons/bars-3-bottom-right.js.map +1 -1
- package/dist/icon/icons/bars-3-center-left.js +1 -2
- package/dist/icon/icons/bars-3-center-left.js.map +1 -1
- package/dist/icon/icons/bars-3.js +1 -2
- package/dist/icon/icons/bars-3.js.map +1 -1
- package/dist/icon/icons/bars-4.js +1 -2
- package/dist/icon/icons/bars-4.js.map +1 -1
- package/dist/icon/icons/beaker.js +1 -2
- package/dist/icon/icons/beaker.js.map +1 -1
- package/dist/icon/icons/bell-slash.js +1 -2
- package/dist/icon/icons/bell-slash.js.map +1 -1
- package/dist/icon/icons/bell-solid.js +1 -2
- package/dist/icon/icons/bell-solid.js.map +1 -1
- package/dist/icon/icons/bell.js +1 -2
- package/dist/icon/icons/bell.js.map +1 -1
- package/dist/icon/icons/bold.js +1 -2
- package/dist/icon/icons/bold.js.map +1 -1
- package/dist/icon/icons/book-solid.js +1 -2
- package/dist/icon/icons/book-solid.js.map +1 -1
- package/dist/icon/icons/book.js +1 -2
- package/dist/icon/icons/book.js.map +1 -1
- package/dist/icon/icons/bookmark-solid.js +1 -2
- package/dist/icon/icons/bookmark-solid.js.map +1 -1
- package/dist/icon/icons/bookmark.js +1 -2
- package/dist/icon/icons/bookmark.js.map +1 -1
- package/dist/icon/icons/bounding-box.js +1 -2
- package/dist/icon/icons/bounding-box.js.map +1 -1
- package/dist/icon/icons/branch.js +1 -2
- package/dist/icon/icons/branch.js.map +1 -1
- package/dist/icon/icons/briefcase.js +1 -2
- package/dist/icon/icons/briefcase.js.map +1 -1
- package/dist/icon/icons/broadcast.js +1 -2
- package/dist/icon/icons/broadcast.js.map +1 -1
- package/dist/icon/icons/browser.js +1 -2
- package/dist/icon/icons/browser.js.map +1 -1
- package/dist/icon/icons/bug.js +1 -2
- package/dist/icon/icons/bug.js.map +1 -1
- package/dist/icon/icons/calendar.js +1 -2
- package/dist/icon/icons/calendar.js.map +1 -1
- package/dist/icon/icons/camera.js +1 -2
- package/dist/icon/icons/camera.js.map +1 -1
- package/dist/icon/icons/cancel.js +1 -2
- package/dist/icon/icons/cancel.js.map +1 -1
- package/dist/icon/icons/caret.js +1 -2
- package/dist/icon/icons/caret.js.map +1 -1
- package/dist/icon/icons/carets-closed-square.js +1 -2
- package/dist/icon/icons/carets-closed-square.js.map +1 -1
- package/dist/icon/icons/carousel.js +1 -2
- package/dist/icon/icons/carousel.js.map +1 -1
- package/dist/icon/icons/category-list.js +1 -2
- package/dist/icon/icons/category-list.js.map +1 -1
- package/dist/icon/icons/chart-bar.js +1 -2
- package/dist/icon/icons/chart-bar.js.map +1 -1
- package/dist/icon/icons/chat-bubble-solid.js +1 -2
- package/dist/icon/icons/chat-bubble-solid.js.map +1 -1
- package/dist/icon/icons/chat-bubble.js +1 -2
- package/dist/icon/icons/chat-bubble.js.map +1 -1
- package/dist/icon/icons/chat-bubbles.js +1 -2
- package/dist/icon/icons/chat-bubbles.js.map +1 -1
- package/dist/icon/icons/check-badge-solid.js +1 -2
- package/dist/icon/icons/check-badge-solid.js.map +1 -1
- package/dist/icon/icons/check-badge.js +1 -2
- package/dist/icon/icons/check-badge.js.map +1 -1
- package/dist/icon/icons/check.js +1 -2
- package/dist/icon/icons/check.js.map +1 -1
- package/dist/icon/icons/checklist.js +1 -2
- package/dist/icon/icons/checklist.js.map +1 -1
- package/dist/icon/icons/checkmark-circle-solid.js +1 -2
- package/dist/icon/icons/checkmark-circle-solid.js.map +1 -1
- package/dist/icon/icons/checkmark-circle.js +1 -2
- package/dist/icon/icons/checkmark-circle.js.map +1 -1
- package/dist/icon/icons/chevron.js +1 -2
- package/dist/icon/icons/chevron.js.map +1 -1
- package/dist/icon/icons/chip.js +1 -2
- package/dist/icon/icons/chip.js.map +1 -1
- package/dist/icon/icons/circle-angled-line-solid.js +1 -2
- package/dist/icon/icons/circle-angled-line-solid.js.map +1 -1
- package/dist/icon/icons/circle-angled-line.js +1 -2
- package/dist/icon/icons/circle-angled-line.js.map +1 -1
- package/dist/icon/icons/circle-dash.js +1 -2
- package/dist/icon/icons/circle-dash.js.map +1 -1
- package/dist/icon/icons/circle-dot-arrows.js +1 -2
- package/dist/icon/icons/circle-dot-arrows.js.map +1 -1
- package/dist/icon/icons/circle-dot.js +1 -2
- package/dist/icon/icons/circle-dot.js.map +1 -1
- package/dist/icon/icons/circle-half.js +1 -2
- package/dist/icon/icons/circle-half.js.map +1 -1
- package/dist/icon/icons/circle-rule.js +1 -2
- package/dist/icon/icons/circle-rule.js.map +1 -1
- package/dist/icon/icons/circle-tick.js +1 -2
- package/dist/icon/icons/circle-tick.js.map +1 -1
- package/dist/icon/icons/circle.js +1 -2
- package/dist/icon/icons/circle.js.map +1 -1
- package/dist/icon/icons/clipboard.js +1 -2
- package/dist/icon/icons/clipboard.js.map +1 -1
- package/dist/icon/icons/clock-circle-arrow.js +1 -2
- package/dist/icon/icons/clock-circle-arrow.js.map +1 -1
- package/dist/icon/icons/clock.js +1 -2
- package/dist/icon/icons/clock.js.map +1 -1
- package/dist/icon/icons/cloud-download.js +1 -2
- package/dist/icon/icons/cloud-download.js.map +1 -1
- package/dist/icon/icons/cloud-upload.js +1 -2
- package/dist/icon/icons/cloud-upload.js.map +1 -1
- package/dist/icon/icons/cloud.js +1 -2
- package/dist/icon/icons/cloud.js.map +1 -1
- package/dist/icon/icons/code.js +1 -2
- package/dist/icon/icons/code.js.map +1 -1
- package/dist/icon/icons/collapse-all.js +1 -2
- package/dist/icon/icons/collapse-all.js.map +1 -1
- package/dist/icon/icons/collapse-details.js +1 -2
- package/dist/icon/icons/collapse-details.js.map +1 -1
- package/dist/icon/icons/color-palette.js +1 -2
- package/dist/icon/icons/color-palette.js.map +1 -1
- package/dist/icon/icons/columns.js +1 -2
- package/dist/icon/icons/columns.js.map +1 -1
- package/dist/icon/icons/compare.js +1 -2
- package/dist/icon/icons/compare.js.map +1 -1
- package/dist/icon/icons/computer.js +1 -2
- package/dist/icon/icons/computer.js.map +1 -1
- package/dist/icon/icons/connect-node.js +1 -2
- package/dist/icon/icons/connect-node.js.map +1 -1
- package/dist/icon/icons/connected-blocks.js +1 -2
- package/dist/icon/icons/connected-blocks.js.map +1 -1
- package/dist/icon/icons/copy.js +1 -2
- package/dist/icon/icons/copy.js.map +1 -1
- package/dist/icon/icons/cross-hairs.js +1 -2
- package/dist/icon/icons/cross-hairs.js.map +1 -1
- package/dist/icon/icons/cursor-rays.js +1 -2
- package/dist/icon/icons/cursor-rays.js.map +1 -1
- package/dist/icon/icons/cursor-ripples.js +1 -2
- package/dist/icon/icons/cursor-ripples.js.map +1 -1
- package/dist/icon/icons/data-management.js +1 -2
- package/dist/icon/icons/data-management.js.map +1 -1
- package/dist/icon/icons/delete-node.js +1 -2
- package/dist/icon/icons/delete-node.js.map +1 -1
- package/dist/icon/icons/delete-solid.js +1 -2
- package/dist/icon/icons/delete-solid.js.map +1 -1
- package/dist/icon/icons/delete.js +1 -2
- package/dist/icon/icons/delete.js.map +1 -1
- package/dist/icon/icons/doc-checkmark.js +1 -2
- package/dist/icon/icons/doc-checkmark.js.map +1 -1
- package/dist/icon/icons/dock-bottom.js +1 -2
- package/dist/icon/icons/dock-bottom.js.map +1 -1
- package/dist/icon/icons/dock-none.js +1 -2
- package/dist/icon/icons/dock-none.js.map +1 -1
- package/dist/icon/icons/dock-side.js +1 -2
- package/dist/icon/icons/dock-side.js.map +1 -1
- package/dist/icon/icons/document-clipboard.js +1 -2
- package/dist/icon/icons/document-clipboard.js.map +1 -1
- package/dist/icon/icons/document.js +1 -2
- package/dist/icon/icons/document.js.map +1 -1
- package/dist/icon/icons/dot-solid.js +1 -2
- package/dist/icon/icons/dot-solid.js.map +1 -1
- package/dist/icon/icons/dot.js +1 -2
- package/dist/icon/icons/dot.js.map +1 -1
- package/dist/icon/icons/double-chevron.js +1 -2
- package/dist/icon/icons/double-chevron.js.map +1 -1
- package/dist/icon/icons/download.js +1 -2
- package/dist/icon/icons/download.js.map +1 -1
- package/dist/icon/icons/drag.js +1 -2
- package/dist/icon/icons/drag.js.map +1 -1
- package/dist/icon/icons/dropper.js +1 -2
- package/dist/icon/icons/dropper.js.map +1 -1
- package/dist/icon/icons/duplicate.js +1 -2
- package/dist/icon/icons/duplicate.js.map +1 -1
- package/dist/icon/icons/edit.js +1 -2
- package/dist/icon/icons/edit.js.map +1 -1
- package/dist/icon/icons/ellipses.js +1 -2
- package/dist/icon/icons/ellipses.js.map +1 -1
- package/dist/icon/icons/envelope.js +1 -2
- package/dist/icon/icons/envelope.js.map +1 -1
- package/dist/icon/icons/exclamation-circle-solid.js +1 -2
- package/dist/icon/icons/exclamation-circle-solid.js.map +1 -1
- package/dist/icon/icons/exclamation-circle.js +1 -2
- package/dist/icon/icons/exclamation-circle.js.map +1 -1
- package/dist/icon/icons/exclamation-mark.js +1 -2
- package/dist/icon/icons/exclamation-mark.js.map +1 -1
- package/dist/icon/icons/exclamation-triangle-solid.js +1 -2
- package/dist/icon/icons/exclamation-triangle-solid.js.map +1 -1
- package/dist/icon/icons/exclamation-triangle.js +1 -2
- package/dist/icon/icons/exclamation-triangle.js.map +1 -1
- package/dist/icon/icons/expand-all.js +1 -2
- package/dist/icon/icons/expand-all.js.map +1 -1
- package/dist/icon/icons/expand-details.js +1 -2
- package/dist/icon/icons/expand-details.js.map +1 -1
- package/dist/icon/icons/expression.js +1 -2
- package/dist/icon/icons/expression.js.map +1 -1
- package/dist/icon/icons/eye-hidden.js +1 -2
- package/dist/icon/icons/eye-hidden.js.map +1 -1
- package/dist/icon/icons/eye.js +1 -2
- package/dist/icon/icons/eye.js.map +1 -1
- package/dist/icon/icons/face-frown.js +1 -2
- package/dist/icon/icons/face-frown.js.map +1 -1
- package/dist/icon/icons/face-smile-solid.js +1 -2
- package/dist/icon/icons/face-smile-solid.js.map +1 -1
- package/dist/icon/icons/face-smile.js +1 -2
- package/dist/icon/icons/face-smile.js.map +1 -1
- package/dist/icon/icons/fast-forward-10.js +1 -2
- package/dist/icon/icons/fast-forward-10.js.map +1 -1
- package/dist/icon/icons/fast-forward.js +1 -2
- package/dist/icon/icons/fast-forward.js.map +1 -1
- package/dist/icon/icons/film.js +1 -2
- package/dist/icon/icons/film.js.map +1 -1
- package/dist/icon/icons/filter-solid.js +1 -2
- package/dist/icon/icons/filter-solid.js.map +1 -1
- package/dist/icon/icons/filter.js +1 -2
- package/dist/icon/icons/filter.js.map +1 -1
- package/dist/icon/icons/flag-solid.js +1 -2
- package/dist/icon/icons/flag-solid.js.map +1 -1
- package/dist/icon/icons/flag.js +1 -2
- package/dist/icon/icons/flag.js.map +1 -1
- package/dist/icon/icons/fold.js +1 -2
- package/dist/icon/icons/fold.js.map +1 -1
- package/dist/icon/icons/folder.js +1 -2
- package/dist/icon/icons/folder.js.map +1 -1
- package/dist/icon/icons/fork.js +1 -2
- package/dist/icon/icons/fork.js.map +1 -1
- package/dist/icon/icons/gear-solid.js +1 -2
- package/dist/icon/icons/gear-solid.js.map +1 -1
- package/dist/icon/icons/gear.js +1 -2
- package/dist/icon/icons/gear.js.map +1 -1
- package/dist/icon/icons/globe-alt.js +1 -2
- package/dist/icon/icons/globe-alt.js.map +1 -1
- package/dist/icon/icons/globe.js +1 -2
- package/dist/icon/icons/globe.js.map +1 -1
- package/dist/icon/icons/group-boxes.js +1 -2
- package/dist/icon/icons/group-boxes.js.map +1 -1
- package/dist/icon/icons/group.js +1 -2
- package/dist/icon/icons/group.js.map +1 -1
- package/dist/icon/icons/hand.js +1 -2
- package/dist/icon/icons/hand.js.map +1 -1
- package/dist/icon/icons/hash.js +1 -2
- package/dist/icon/icons/hash.js.map +1 -1
- package/dist/icon/icons/heading.js +1 -2
- package/dist/icon/icons/heading.js.map +1 -1
- package/dist/icon/icons/home-solid.js +1 -2
- package/dist/icon/icons/home-solid.js.map +1 -1
- package/dist/icon/icons/home.js +1 -2
- package/dist/icon/icons/home.js.map +1 -1
- package/dist/icon/icons/horizontal-rule.js +1 -2
- package/dist/icon/icons/horizontal-rule.js.map +1 -1
- package/dist/icon/icons/hourglass-end.js +1 -2
- package/dist/icon/icons/hourglass-end.js.map +1 -1
- package/dist/icon/icons/hourglass-mid.js +1 -2
- package/dist/icon/icons/hourglass-mid.js.map +1 -1
- package/dist/icon/icons/hourglass-start.js +1 -2
- package/dist/icon/icons/hourglass-start.js.map +1 -1
- package/dist/icon/icons/hourglass.js +1 -2
- package/dist/icon/icons/hourglass.js.map +1 -1
- package/dist/icon/icons/identification.js +1 -2
- package/dist/icon/icons/identification.js.map +1 -1
- package/dist/icon/icons/image.js +1 -2
- package/dist/icon/icons/image.js.map +1 -1
- package/dist/icon/icons/inbox.js +1 -2
- package/dist/icon/icons/inbox.js.map +1 -1
- package/dist/icon/icons/infinity.js +1 -2
- package/dist/icon/icons/infinity.js.map +1 -1
- package/dist/icon/icons/information-circle-solid.js +1 -2
- package/dist/icon/icons/information-circle-solid.js.map +1 -1
- package/dist/icon/icons/information-circle.js +1 -2
- package/dist/icon/icons/information-circle.js.map +1 -1
- package/dist/icon/icons/inspect.js +1 -2
- package/dist/icon/icons/inspect.js.map +1 -1
- package/dist/icon/icons/italic.js +1 -2
- package/dist/icon/icons/italic.js.map +1 -1
- package/dist/icon/icons/key.js +1 -2
- package/dist/icon/icons/key.js.map +1 -1
- package/dist/icon/icons/keyboard.js +1 -2
- package/dist/icon/icons/keyboard.js.map +1 -1
- package/dist/icon/icons/laptop-phone.js +1 -2
- package/dist/icon/icons/laptop-phone.js.map +1 -1
- package/dist/icon/icons/layers.js +1 -2
- package/dist/icon/icons/layers.js.map +1 -1
- package/dist/icon/icons/lifebuoy.js +1 -2
- package/dist/icon/icons/lifebuoy.js.map +1 -1
- package/dist/icon/icons/lightbulb.js +1 -2
- package/dist/icon/icons/lightbulb.js.map +1 -1
- package/dist/icon/icons/lightning-bolt-solid.js +1 -2
- package/dist/icon/icons/lightning-bolt-solid.js.map +1 -1
- package/dist/icon/icons/lightning-bolt.js +1 -2
- package/dist/icon/icons/lightning-bolt.js.map +1 -1
- package/dist/icon/icons/link.js +1 -2
- package/dist/icon/icons/link.js.map +1 -1
- package/dist/icon/icons/list-ordered.js +1 -2
- package/dist/icon/icons/list-ordered.js.map +1 -1
- package/dist/icon/icons/list-unordered.js +1 -2
- package/dist/icon/icons/list-unordered.js.map +1 -1
- package/dist/icon/icons/lock-solid.js +1 -2
- package/dist/icon/icons/lock-solid.js.map +1 -1
- package/dist/icon/icons/lock.js +1 -2
- package/dist/icon/icons/lock.js.map +1 -1
- package/dist/icon/icons/login.js +1 -2
- package/dist/icon/icons/login.js.map +1 -1
- package/dist/icon/icons/logout.js +1 -2
- package/dist/icon/icons/logout.js.map +1 -1
- package/dist/icon/icons/looping-off.js +1 -2
- package/dist/icon/icons/looping-off.js.map +1 -1
- package/dist/icon/icons/looping.js +1 -2
- package/dist/icon/icons/looping.js.map +1 -1
- package/dist/icon/icons/map-drives.js +1 -2
- package/dist/icon/icons/map-drives.js.map +1 -1
- package/dist/icon/icons/map-pin.js +1 -2
- package/dist/icon/icons/map-pin.js.map +1 -1
- package/dist/icon/icons/map.js +1 -2
- package/dist/icon/icons/map.js.map +1 -1
- package/dist/icon/icons/markdown.js +1 -2
- package/dist/icon/icons/markdown.js.map +1 -1
- package/dist/icon/icons/maximize.js +1 -2
- package/dist/icon/icons/maximize.js.map +1 -1
- package/dist/icon/icons/megaphone.js +1 -2
- package/dist/icon/icons/megaphone.js.map +1 -1
- package/dist/icon/icons/menu.js +1 -2
- package/dist/icon/icons/menu.js.map +1 -1
- package/dist/icon/icons/merge.js +1 -2
- package/dist/icon/icons/merge.js.map +1 -1
- package/dist/icon/icons/meter.js +1 -2
- package/dist/icon/icons/meter.js.map +1 -1
- package/dist/icon/icons/minimize.js +1 -2
- package/dist/icon/icons/minimize.js.map +1 -1
- package/dist/icon/icons/minus-circle-solid.js +1 -2
- package/dist/icon/icons/minus-circle-solid.js.map +1 -1
- package/dist/icon/icons/minus-circle.js +1 -2
- package/dist/icon/icons/minus-circle.js.map +1 -1
- package/dist/icon/icons/minus.js +1 -2
- package/dist/icon/icons/minus.js.map +1 -1
- package/dist/icon/icons/moon.js +1 -2
- package/dist/icon/icons/moon.js.map +1 -1
- package/dist/icon/icons/more-actions.js +1 -2
- package/dist/icon/icons/more-actions.js.map +1 -1
- package/dist/icon/icons/multiselect.js +1 -2
- package/dist/icon/icons/multiselect.js.map +1 -1
- package/dist/icon/icons/music-note.js +1 -2
- package/dist/icon/icons/music-note.js.map +1 -1
- package/dist/icon/icons/newspaper.js +1 -2
- package/dist/icon/icons/newspaper.js.map +1 -1
- package/dist/icon/icons/not-allowed.js +1 -2
- package/dist/icon/icons/not-allowed.js.map +1 -1
- package/dist/icon/icons/numbers.js +1 -2
- package/dist/icon/icons/numbers.js.map +1 -1
- package/dist/icon/icons/office-building.js +1 -2
- package/dist/icon/icons/office-building.js.map +1 -1
- package/dist/icon/icons/outline.js +1 -2
- package/dist/icon/icons/outline.js.map +1 -1
- package/dist/icon/icons/paper-airplane.js +1 -2
- package/dist/icon/icons/paper-airplane.js.map +1 -1
- package/dist/icon/icons/paper-clip.js +1 -2
- package/dist/icon/icons/paper-clip.js.map +1 -1
- package/dist/icon/icons/pause.js +1 -2
- package/dist/icon/icons/pause.js.map +1 -1
- package/dist/icon/icons/pencil-square.js +1 -2
- package/dist/icon/icons/pencil-square.js.map +1 -1
- package/dist/icon/icons/person-2.js +1 -2
- package/dist/icon/icons/person-2.js.map +1 -1
- package/dist/icon/icons/person-3.js +1 -2
- package/dist/icon/icons/person-3.js.map +1 -1
- package/dist/icon/icons/person-circle.js +1 -2
- package/dist/icon/icons/person-circle.js.map +1 -1
- package/dist/icon/icons/person-solid.js +1 -2
- package/dist/icon/icons/person-solid.js.map +1 -1
- package/dist/icon/icons/person.js +1 -2
- package/dist/icon/icons/person.js.map +1 -1
- package/dist/icon/icons/phone.js +1 -2
- package/dist/icon/icons/phone.js.map +1 -1
- package/dist/icon/icons/picture-in-picture.js +1 -2
- package/dist/icon/icons/picture-in-picture.js.map +1 -1
- package/dist/icon/icons/pie-chart.js +1 -2
- package/dist/icon/icons/pie-chart.js.map +1 -1
- package/dist/icon/icons/pin-solid.js +1 -2
- package/dist/icon/icons/pin-solid.js.map +1 -1
- package/dist/icon/icons/pin.js +1 -2
- package/dist/icon/icons/pin.js.map +1 -1
- package/dist/icon/icons/pizza-slice.js +1 -2
- package/dist/icon/icons/pizza-slice.js.map +1 -1
- package/dist/icon/icons/placeholder.js +1 -2
- package/dist/icon/icons/placeholder.js.map +1 -1
- package/dist/icon/icons/play.js +1 -2
- package/dist/icon/icons/play.js.map +1 -1
- package/dist/icon/icons/plug.js +1 -2
- package/dist/icon/icons/plug.js.map +1 -1
- package/dist/icon/icons/plus-circle-solid.js +1 -2
- package/dist/icon/icons/plus-circle-solid.js.map +1 -1
- package/dist/icon/icons/plus-circle.js +1 -2
- package/dist/icon/icons/plus-circle.js.map +1 -1
- package/dist/icon/icons/plus-minus.js +1 -2
- package/dist/icon/icons/plus-minus.js.map +1 -1
- package/dist/icon/icons/pointer-solid.js +1 -2
- package/dist/icon/icons/pointer-solid.js.map +1 -1
- package/dist/icon/icons/pointer.js +1 -2
- package/dist/icon/icons/pointer.js.map +1 -1
- package/dist/icon/icons/priority-high.js +1 -2
- package/dist/icon/icons/priority-high.js.map +1 -1
- package/dist/icon/icons/priority-low.js +1 -2
- package/dist/icon/icons/priority-low.js.map +1 -1
- package/dist/icon/icons/priority-medium.js +1 -2
- package/dist/icon/icons/priority-medium.js.map +1 -1
- package/dist/icon/icons/projector.js +1 -2
- package/dist/icon/icons/projector.js.map +1 -1
- package/dist/icon/icons/pull-close.js +1 -2
- package/dist/icon/icons/pull-close.js.map +1 -1
- package/dist/icon/icons/pull-draft.js +1 -2
- package/dist/icon/icons/pull-draft.js.map +1 -1
- package/dist/icon/icons/pull-open.js +1 -2
- package/dist/icon/icons/pull-open.js.map +1 -1
- package/dist/icon/icons/pulse.js +1 -2
- package/dist/icon/icons/pulse.js.map +1 -1
- package/dist/icon/icons/puzzle-piece.js +1 -2
- package/dist/icon/icons/puzzle-piece.js.map +1 -1
- package/dist/icon/icons/question-mark-circle-solid.js +1 -2
- package/dist/icon/icons/question-mark-circle-solid.js.map +1 -1
- package/dist/icon/icons/question-mark-circle.js +1 -2
- package/dist/icon/icons/question-mark-circle.js.map +1 -1
- package/dist/icon/icons/rectangle-group.js +1 -2
- package/dist/icon/icons/rectangle-group.js.map +1 -1
- package/dist/icon/icons/rectangle-stack-horizontal.js +1 -2
- package/dist/icon/icons/rectangle-stack-horizontal.js.map +1 -1
- package/dist/icon/icons/rectangle-stack-vertical.js +1 -2
- package/dist/icon/icons/rectangle-stack-vertical.js.map +1 -1
- package/dist/icon/icons/redo.js +1 -2
- package/dist/icon/icons/redo.js.map +1 -1
- package/dist/icon/icons/refresh.js +1 -2
- package/dist/icon/icons/refresh.js.map +1 -1
- package/dist/icon/icons/reply.js +1 -2
- package/dist/icon/icons/reply.js.map +1 -1
- package/dist/icon/icons/rewind-10.js +1 -2
- package/dist/icon/icons/rewind-10.js.map +1 -1
- package/dist/icon/icons/rewind.js +1 -2
- package/dist/icon/icons/rewind.js.map +1 -1
- package/dist/icon/icons/rocketship.js +1 -2
- package/dist/icon/icons/rocketship.js.map +1 -1
- package/dist/icon/icons/running.js +1 -2
- package/dist/icon/icons/running.js.map +1 -1
- package/dist/icon/icons/scale.js +1 -2
- package/dist/icon/icons/scale.js.map +1 -1
- package/dist/icon/icons/scissors.js +1 -2
- package/dist/icon/icons/scissors.js.map +1 -1
- package/dist/icon/icons/search.js +1 -2
- package/dist/icon/icons/search.js.map +1 -1
- package/dist/icon/icons/sensor.js +1 -2
- package/dist/icon/icons/sensor.js.map +1 -1
- package/dist/icon/icons/server-stack.js +1 -2
- package/dist/icon/icons/server-stack.js.map +1 -1
- package/dist/icon/icons/server.js +1 -2
- package/dist/icon/icons/server.js.map +1 -1
- package/dist/icon/icons/shapes.js +1 -2
- package/dist/icon/icons/shapes.js.map +1 -1
- package/dist/icon/icons/share.js +1 -2
- package/dist/icon/icons/share.js.map +1 -1
- package/dist/icon/icons/signal-slash.js +1 -2
- package/dist/icon/icons/signal-slash.js.map +1 -1
- package/dist/icon/icons/signal.js +1 -2
- package/dist/icon/icons/signal.js.map +1 -1
- package/dist/icon/icons/signpost.js +1 -2
- package/dist/icon/icons/signpost.js.map +1 -1
- package/dist/icon/icons/sort-ascending.js +1 -2
- package/dist/icon/icons/sort-ascending.js.map +1 -1
- package/dist/icon/icons/sort-descending.js +1 -2
- package/dist/icon/icons/sort-descending.js.map +1 -1
- package/dist/icon/icons/soundwave.js +1 -2
- package/dist/icon/icons/soundwave.js.map +1 -1
- package/dist/icon/icons/sparkles-solid.js +1 -2
- package/dist/icon/icons/sparkles-solid.js.map +1 -1
- package/dist/icon/icons/sparkles.js +1 -2
- package/dist/icon/icons/sparkles.js.map +1 -1
- package/dist/icon/icons/split-horizontal.js +1 -2
- package/dist/icon/icons/split-horizontal.js.map +1 -1
- package/dist/icon/icons/split-none.js +1 -2
- package/dist/icon/icons/split-none.js.map +1 -1
- package/dist/icon/icons/split-vertical.js +1 -2
- package/dist/icon/icons/split-vertical.js.map +1 -1
- package/dist/icon/icons/star-half.js +1 -2
- package/dist/icon/icons/star-half.js.map +1 -1
- package/dist/icon/icons/star-stroke.js +1 -2
- package/dist/icon/icons/star-stroke.js.map +1 -1
- package/dist/icon/icons/star.js +1 -2
- package/dist/icon/icons/star.js.map +1 -1
- package/dist/icon/icons/start.js +1 -2
- package/dist/icon/icons/start.js.map +1 -1
- package/dist/icon/icons/status-offline.js +1 -2
- package/dist/icon/icons/status-offline.js.map +1 -1
- package/dist/icon/icons/status-online.js +1 -2
- package/dist/icon/icons/status-online.js.map +1 -1
- package/dist/icon/icons/stop-sign.js +1 -2
- package/dist/icon/icons/stop-sign.js.map +1 -1
- package/dist/icon/icons/stop.js +1 -2
- package/dist/icon/icons/stop.js.map +1 -1
- package/dist/icon/icons/stopwatch.js +1 -2
- package/dist/icon/icons/stopwatch.js.map +1 -1
- package/dist/icon/icons/strikethrough.js +1 -2
- package/dist/icon/icons/strikethrough.js.map +1 -1
- package/dist/icon/icons/sun.js +1 -2
- package/dist/icon/icons/sun.js.map +1 -1
- package/dist/icon/icons/swatch.js +1 -2
- package/dist/icon/icons/swatch.js.map +1 -1
- package/dist/icon/icons/switch-apps.js +1 -2
- package/dist/icon/icons/switch-apps.js.map +1 -1
- package/dist/icon/icons/switch.js +1 -2
- package/dist/icon/icons/switch.js.map +1 -1
- package/dist/icon/icons/table.js +1 -2
- package/dist/icon/icons/table.js.map +1 -1
- package/dist/icon/icons/tag.js +1 -2
- package/dist/icon/icons/tag.js.map +1 -1
- package/dist/icon/icons/task.js +1 -2
- package/dist/icon/icons/task.js.map +1 -1
- package/dist/icon/icons/telescope.js +1 -2
- package/dist/icon/icons/telescope.js.map +1 -1
- package/dist/icon/icons/template.js +1 -2
- package/dist/icon/icons/template.js.map +1 -1
- package/dist/icon/icons/terminal.js +1 -2
- package/dist/icon/icons/terminal.js.map +1 -1
- package/dist/icon/icons/thumb-solid.js +1 -2
- package/dist/icon/icons/thumb-solid.js.map +1 -1
- package/dist/icon/icons/thumb.js +1 -2
- package/dist/icon/icons/thumb.js.map +1 -1
- package/dist/icon/icons/traffic-cone.js +1 -2
- package/dist/icon/icons/traffic-cone.js.map +1 -1
- package/dist/icon/icons/transparent-box.js +1 -2
- package/dist/icon/icons/transparent-box.js.map +1 -1
- package/dist/icon/icons/trend-down.js +1 -2
- package/dist/icon/icons/trend-down.js.map +1 -1
- package/dist/icon/icons/trend-up.js +1 -2
- package/dist/icon/icons/trend-up.js.map +1 -1
- package/dist/icon/icons/trophy.js +1 -2
- package/dist/icon/icons/trophy.js.map +1 -1
- package/dist/icon/icons/truck.js +1 -2
- package/dist/icon/icons/truck.js.map +1 -1
- package/dist/icon/icons/typography.js +1 -2
- package/dist/icon/icons/typography.js.map +1 -1
- package/dist/icon/icons/undo.js +1 -2
- package/dist/icon/icons/undo.js.map +1 -1
- package/dist/icon/icons/unlock-solid.js +1 -2
- package/dist/icon/icons/unlock-solid.js.map +1 -1
- package/dist/icon/icons/unlock.js +1 -2
- package/dist/icon/icons/unlock.js.map +1 -1
- package/dist/icon/icons/upload.js +1 -2
- package/dist/icon/icons/upload.js.map +1 -1
- package/dist/icon/icons/video-camera.js +1 -2
- package/dist/icon/icons/video-camera.js.map +1 -1
- package/dist/icon/icons/view-as-grid.js +1 -2
- package/dist/icon/icons/view-as-grid.js.map +1 -1
- package/dist/icon/icons/volume-muted.js +1 -2
- package/dist/icon/icons/volume-muted.js.map +1 -1
- package/dist/icon/icons/volume-solid.js +1 -2
- package/dist/icon/icons/volume-solid.js.map +1 -1
- package/dist/icon/icons/volume.js +1 -2
- package/dist/icon/icons/volume.js.map +1 -1
- package/dist/icon/icons/wifi.js +1 -2
- package/dist/icon/icons/wifi.js.map +1 -1
- package/dist/icon/icons/wrench-solid.js +1 -2
- package/dist/icon/icons/wrench-solid.js.map +1 -1
- package/dist/icon/icons/wrench.js +1 -2
- package/dist/icon/icons/wrench.js.map +1 -1
- package/dist/icon/icons/x-circle-solid.js +1 -2
- package/dist/icon/icons/x-circle-solid.js.map +1 -1
- package/dist/icon/icons/x-circle.js +1 -2
- package/dist/icon/icons/x-circle.js.map +1 -1
- package/dist/icon/icons/zoom-in.js +1 -2
- package/dist/icon/icons/zoom-in.js.map +1 -1
- package/dist/icon/icons/zoom-out.js +1 -2
- package/dist/icon/icons/zoom-out.js.map +1 -1
- package/dist/icon/icons.js +1 -2
- package/dist/icon/icons.js.map +1 -1
- package/dist/icon/server.js +1 -2
- package/dist/icon/server.js.map +1 -1
- package/dist/icon-button/define.js +1 -2
- package/dist/icon-button/define.js.map +1 -1
- package/dist/icon-button/icon-button.examples.js +1 -2
- package/dist/icon-button/icon-button.examples.js.map +1 -1
- package/dist/icon-button/icon-button.js +1 -2
- package/dist/icon-button/icon-button.js.map +1 -1
- package/dist/icon-button/icon-button2.js +3 -4
- package/dist/icon-button/icon-button2.js.map +1 -1
- package/dist/icon-button/index.js +1 -2
- package/dist/iframe/define.js +1 -2
- package/dist/iframe/define.js.map +1 -1
- package/dist/iframe/iframe.examples.js +1 -2
- package/dist/iframe/iframe.examples.js.map +1 -1
- package/dist/iframe/iframe.js +1 -2
- package/dist/iframe/iframe.js.map +1 -1
- package/dist/iframe/iframe2.js +12 -27
- package/dist/iframe/iframe2.js.map +1 -1
- package/dist/iframe/index.js +1 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/input/define.js +0 -1
- package/dist/input/define.js.map +1 -1
- package/dist/input/input-group.examples.js +1 -2
- package/dist/input/input-group.examples.js.map +1 -1
- package/dist/input/input-group.global.js +1 -2
- package/dist/input/input-group.global.js.map +1 -1
- package/dist/input/input-group.js +1 -2
- package/dist/input/input-group.js.map +1 -1
- package/dist/input/input-group2.js +2 -3
- package/dist/input/input-group2.js.map +1 -1
- package/dist/input/input.examples.js +1 -2
- package/dist/input/input.examples.js.map +1 -1
- package/dist/input/input.js +1 -2
- package/dist/input/input.js.map +1 -1
- package/dist/input/input2.js +3 -4
- package/dist/input/input2.js.map +1 -1
- package/dist/internal/controllers/audit.controller.js +1 -2
- package/dist/internal/controllers/audit.controller.js.map +1 -1
- package/dist/internal/controllers/gesture.controller.examples.js +1 -2
- package/dist/internal/controllers/gesture.controller.examples.js.map +1 -1
- package/dist/internal/controllers/gesture.controller.js +14 -41
- package/dist/internal/controllers/gesture.controller.js.map +1 -1
- package/dist/internal/controllers/key-state.controller.js +1 -2
- package/dist/internal/controllers/key-state.controller.js.map +1 -1
- package/dist/internal/controllers/keynav-grid.controller.examples.js +1 -2
- package/dist/internal/controllers/keynav-grid.controller.examples.js.map +1 -1
- package/dist/internal/controllers/keynav-grid.controller.js +3 -7
- package/dist/internal/controllers/keynav-grid.controller.js.map +1 -1
- package/dist/internal/controllers/keynav-list.controller.examples.js +1 -2
- package/dist/internal/controllers/keynav-list.controller.examples.js.map +1 -1
- package/dist/internal/controllers/keynav-list.controller.js +2 -3
- package/dist/internal/controllers/keynav-list.controller.js.map +1 -1
- package/dist/internal/controllers/keynav-spatial.controller.js +1 -2
- package/dist/internal/controllers/keynav-spatial.controller.js.map +1 -1
- package/dist/internal/controllers/popover.examples.js +1 -2
- package/dist/internal/controllers/popover.examples.js.map +1 -1
- package/dist/internal/controllers/state-expanded.controller.js +1 -2
- package/dist/internal/controllers/state-expanded.controller.js.map +1 -1
- package/dist/internal/controllers/state-highlighted.controller.js +1 -2
- package/dist/internal/controllers/state-highlighted.controller.js.map +1 -1
- package/dist/internal/controllers/state-scroll.controller.js +1 -2
- package/dist/internal/controllers/state-scroll.controller.js.map +1 -1
- package/dist/internal/controllers/state-selected.controller.js +2 -11
- package/dist/internal/controllers/state-selected.controller.js.map +1 -1
- package/dist/internal/controllers/type-anchor.controller.js +1 -2
- package/dist/internal/controllers/type-anchor.controller.js.map +1 -1
- package/dist/internal/controllers/type-closable.controller.js +1 -2
- package/dist/internal/controllers/type-closable.controller.js.map +1 -1
- package/dist/internal/controllers/type-expandable.controller.js +1 -2
- package/dist/internal/controllers/type-expandable.controller.js.map +1 -1
- package/dist/internal/controllers/type-native-popover.controller.js +2 -7
- package/dist/internal/controllers/type-native-popover.controller.js.map +1 -1
- package/dist/internal/controllers/type-native-popover.utils.js +1 -2
- package/dist/internal/controllers/type-native-popover.utils.js.map +1 -1
- package/dist/internal/controllers/type-popover.controller.examples.js +1 -2
- package/dist/internal/controllers/type-popover.controller.examples.js.map +1 -1
- package/dist/internal/controllers/type-selectable.controller.js +1 -2
- package/dist/internal/controllers/type-selectable.controller.js.map +1 -1
- package/dist/internal/controllers/type-ssr.controller.js +1 -2
- package/dist/internal/controllers/type-ssr.controller.js.map +1 -1
- package/dist/internal/decorators/host-attr.js +1 -2
- package/dist/internal/decorators/host-attr.js.map +1 -1
- package/dist/internal/decorators/scoped-registry.js +1 -2
- package/dist/internal/decorators/scoped-registry.js.map +1 -1
- package/dist/internal/index.js +1 -2
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/services/log.service.js +1 -2
- package/dist/internal/services/log.service.js.map +1 -1
- package/dist/internal/services/transition.service.js +0 -1
- package/dist/internal/services/transition.service.js.map +1 -1
- package/dist/internal/styles/base.js +1 -2
- package/dist/internal/styles/base.js.map +1 -1
- package/dist/internal/styles/color.state.js +1 -2
- package/dist/internal/styles/color.state.js.map +1 -1
- package/dist/internal/styles/index.js +1 -2
- package/dist/internal/styles/index.js.map +1 -1
- package/dist/internal/styles/interaction-state.js +1 -2
- package/dist/internal/styles/interaction-state.js.map +1 -1
- package/dist/internal/styles/popover.js +1 -2
- package/dist/internal/styles/popover.js.map +1 -1
- package/dist/internal/styles/popover2.js +1 -2
- package/dist/internal/styles/popover2.js.map +1 -1
- package/dist/internal/styles/status.state.js +1 -2
- package/dist/internal/styles/status.state.js.map +1 -1
- package/dist/internal/styles/support.state.js +1 -2
- package/dist/internal/styles/support.state.js.map +1 -1
- package/dist/internal/types/index.js +1 -2
- package/dist/internal/types/index.js.map +1 -1
- package/dist/internal/utils/a11y.js +1 -2
- package/dist/internal/utils/a11y.js.map +1 -1
- package/dist/internal/utils/audit-logs.js +1 -2
- package/dist/internal/utils/audit-logs.js.map +1 -1
- package/dist/internal/utils/audit.js +1 -2
- package/dist/internal/utils/audit.js.map +1 -1
- package/dist/internal/utils/dom.js +2 -9
- package/dist/internal/utils/dom.js.map +1 -1
- package/dist/internal/utils/events.js +3 -8
- package/dist/internal/utils/events.js.map +1 -1
- package/dist/internal/utils/focus.js +3 -26
- package/dist/internal/utils/focus.js.map +1 -1
- package/dist/internal/utils/keynav.js +1 -2
- package/dist/internal/utils/keynav.js.map +1 -1
- package/dist/internal/utils/numeric.js +1 -2
- package/dist/internal/utils/numeric.js.map +1 -1
- package/dist/internal/utils/objects.js +1 -2
- package/dist/internal/utils/objects.js.map +1 -1
- package/dist/internal/utils/strings.js +1 -2
- package/dist/internal/utils/strings.js.map +1 -1
- package/dist/internal/utils/supports.js +1 -2
- package/dist/internal/utils/supports.js.map +1 -1
- package/dist/joystick/define.js +1 -2
- package/dist/joystick/define.js.map +1 -1
- package/dist/joystick/index.js +1 -2
- package/dist/joystick/joystick.examples.js +1 -2
- package/dist/joystick/joystick.examples.js.map +1 -1
- package/dist/joystick/joystick.js +1 -2
- package/dist/joystick/joystick.js.map +1 -1
- package/dist/joystick/joystick2.js +7 -8
- package/dist/joystick/joystick2.js.map +1 -1
- package/dist/logo/define.js +1 -2
- package/dist/logo/define.js.map +1 -1
- package/dist/logo/index.js +1 -2
- package/dist/logo/logo.examples.js +1 -2
- package/dist/logo/logo.examples.js.map +1 -1
- package/dist/logo/logo.js +1 -2
- package/dist/logo/logo.js.map +1 -1
- package/dist/logo/logo2.js +3 -4
- package/dist/logo/logo2.js.map +1 -1
- package/dist/menu/define.js +0 -1
- package/dist/menu/define.js.map +1 -1
- package/dist/menu/menu-group.js +1 -2
- package/dist/menu/menu-group.js.map +1 -1
- package/dist/menu/menu-group2.js +3 -4
- package/dist/menu/menu-group2.js.map +1 -1
- package/dist/menu/menu-item.js +1 -2
- package/dist/menu/menu-item.js.map +1 -1
- package/dist/menu/menu-item2.js +3 -4
- package/dist/menu/menu-item2.js.map +1 -1
- package/dist/menu/menu.examples.js +1 -2
- package/dist/menu/menu.examples.js.map +1 -1
- package/dist/menu/menu.global.js +1 -2
- package/dist/menu/menu.global.js.map +1 -1
- package/dist/menu/menu.js +1 -2
- package/dist/menu/menu.js.map +1 -1
- package/dist/menu/menu2.js +19 -15
- package/dist/menu/menu2.js.map +1 -1
- package/dist/month/define.js +0 -1
- package/dist/month/define.js.map +1 -1
- package/dist/month/index.js +1 -2
- package/dist/month/month.examples.js +1 -2
- package/dist/month/month.examples.js.map +1 -1
- package/dist/month/month.js +1 -2
- package/dist/month/month.js.map +1 -1
- package/dist/month/month2.js +3 -4
- package/dist/month/month2.js.map +1 -1
- package/dist/notification/define.js +0 -1
- package/dist/notification/define.js.map +1 -1
- package/dist/notification/notification-group.js +1 -2
- package/dist/notification/notification-group.js.map +1 -1
- package/dist/notification/notification-group2.js +3 -4
- package/dist/notification/notification-group2.js.map +1 -1
- package/dist/notification/notification.examples.js +1 -2
- package/dist/notification/notification.examples.js.map +1 -1
- package/dist/notification/notification.js +1 -2
- package/dist/notification/notification.js.map +1 -1
- package/dist/notification/notification2.js +3 -4
- package/dist/notification/notification2.js.map +1 -1
- package/dist/page/define.js +0 -1
- package/dist/page/define.js.map +1 -1
- package/dist/page/page-panel/page-panel-content.js +1 -2
- package/dist/page/page-panel/page-panel-content.js.map +1 -1
- package/dist/page/page-panel/page-panel-content2.js +2 -3
- package/dist/page/page-panel/page-panel-content2.js.map +1 -1
- package/dist/page/page-panel/page-panel-footer.js +1 -2
- package/dist/page/page-panel/page-panel-footer.js.map +1 -1
- package/dist/page/page-panel/page-panel-footer2.js +3 -4
- package/dist/page/page-panel/page-panel-footer2.js.map +1 -1
- package/dist/page/page-panel/page-panel-header.js +1 -2
- package/dist/page/page-panel/page-panel-header.js.map +1 -1
- package/dist/page/page-panel/page-panel-header2.js +3 -4
- package/dist/page/page-panel/page-panel-header2.js.map +1 -1
- package/dist/page/page-panel/page-panel.global.js +1 -2
- package/dist/page/page-panel/page-panel.global.js.map +1 -1
- package/dist/page/page-panel/page-panel.js +1 -2
- package/dist/page/page-panel/page-panel.js.map +1 -1
- package/dist/page/page-panel/page-panel2.js +3 -4
- package/dist/page/page-panel/page-panel2.js.map +1 -1
- package/dist/page/page.examples.js +1 -2
- package/dist/page/page.examples.js.map +1 -1
- package/dist/page/page.js +2 -3
- package/dist/page/page.js.map +1 -1
- package/dist/page/page2.js +3 -4
- package/dist/page/page2.js.map +1 -1
- package/dist/page-header/define.js +1 -2
- package/dist/page-header/define.js.map +1 -1
- package/dist/page-header/index.js +1 -2
- package/dist/page-header/page-header.examples.js +1 -2
- package/dist/page-header/page-header.examples.js.map +1 -1
- package/dist/page-header/page-header.global.js +1 -2
- package/dist/page-header/page-header.global.js.map +1 -1
- package/dist/page-header/page-header.js +1 -2
- package/dist/page-header/page-header.js.map +1 -1
- package/dist/page-header/page-header2.js +2 -3
- package/dist/page-header/page-header2.js.map +1 -1
- package/dist/page-loader/define.js +1 -2
- package/dist/page-loader/define.js.map +1 -1
- package/dist/page-loader/index.js +1 -2
- package/dist/page-loader/page-loader.examples.js +1 -2
- package/dist/page-loader/page-loader.examples.js.map +1 -1
- package/dist/page-loader/page-loader.js +1 -2
- package/dist/page-loader/page-loader.js.map +1 -1
- package/dist/page-loader/page-loader2.js +3 -4
- package/dist/page-loader/page-loader2.js.map +1 -1
- package/dist/pagination/define.js +1 -2
- package/dist/pagination/define.js.map +1 -1
- package/dist/pagination/index.js +1 -2
- package/dist/pagination/pagination.examples.js +1 -2
- package/dist/pagination/pagination.examples.js.map +1 -1
- package/dist/pagination/pagination.js +1 -2
- package/dist/pagination/pagination.js.map +1 -1
- package/dist/pagination/pagination2.js +3 -4
- package/dist/pagination/pagination2.js.map +1 -1
- package/dist/panel/define.js +0 -1
- package/dist/panel/define.js.map +1 -1
- package/dist/panel/index.js +1 -2
- package/dist/panel/panel-content.js +1 -2
- package/dist/panel/panel-content.js.map +1 -1
- package/dist/panel/panel-footer.js +1 -2
- package/dist/panel/panel-footer.js.map +1 -1
- package/dist/panel/panel-header.js +1 -2
- package/dist/panel/panel-header.js.map +1 -1
- package/dist/panel/panel.examples.js +1 -2
- package/dist/panel/panel.examples.js.map +1 -1
- package/dist/panel/panel.js +1 -2
- package/dist/panel/panel.js.map +1 -1
- package/dist/panel/panel2.js +6 -7
- package/dist/panel/panel2.js.map +1 -1
- package/dist/password/define.js +0 -1
- package/dist/password/define.js.map +1 -1
- package/dist/password/index.js +1 -2
- package/dist/password/password.examples.js +1 -2
- package/dist/password/password.examples.js.map +1 -1
- package/dist/password/password.js +1 -2
- package/dist/password/password.js.map +1 -1
- package/dist/password/password2.js +3 -4
- package/dist/password/password2.js.map +1 -1
- package/dist/polyfills/index.js +1 -2
- package/dist/polyfills/index.js.map +1 -1
- package/dist/preferences-input/define.js +1 -2
- package/dist/preferences-input/define.js.map +1 -1
- package/dist/preferences-input/index.js +1 -2
- package/dist/preferences-input/preferences-input.examples.js +1 -2
- package/dist/preferences-input/preferences-input.examples.js.map +1 -1
- package/dist/preferences-input/preferences-input.js +1 -2
- package/dist/preferences-input/preferences-input.js.map +1 -1
- package/dist/preferences-input/preferences-input2.js +3 -4
- package/dist/preferences-input/preferences-input2.js.map +1 -1
- package/dist/progress-bar/define.js +1 -2
- package/dist/progress-bar/define.js.map +1 -1
- package/dist/progress-bar/index.js +1 -2
- package/dist/progress-bar/progress-bar.examples.js +1 -2
- package/dist/progress-bar/progress-bar.examples.js.map +1 -1
- package/dist/progress-bar/progress-bar.js +1 -2
- package/dist/progress-bar/progress-bar.js.map +1 -1
- package/dist/progress-bar/progress-bar2.js +3 -4
- package/dist/progress-bar/progress-bar2.js.map +1 -1
- package/dist/progress-dot/define.js +1 -2
- package/dist/progress-dot/define.js.map +1 -1
- package/dist/progress-dot/index.js +1 -2
- package/dist/progress-dot/progress-dot.examples.js +1 -2
- package/dist/progress-dot/progress-dot.examples.js.map +1 -1
- package/dist/progress-dot/progress-dot.js +1 -2
- package/dist/progress-dot/progress-dot.js.map +1 -1
- package/dist/progress-dot/progress-dot2.js +3 -4
- package/dist/progress-dot/progress-dot2.js.map +1 -1
- package/dist/progress-ring/define.js +1 -2
- package/dist/progress-ring/define.js.map +1 -1
- package/dist/progress-ring/index.js +1 -2
- package/dist/progress-ring/progress-ring.examples.js +1 -2
- package/dist/progress-ring/progress-ring.examples.js.map +1 -1
- package/dist/progress-ring/progress-ring.js +1 -2
- package/dist/progress-ring/progress-ring.js.map +1 -1
- package/dist/progress-ring/progress-ring2.js +3 -4
- package/dist/progress-ring/progress-ring2.js.map +1 -1
- package/dist/progressive-filter-chip/define.js +1 -2
- package/dist/progressive-filter-chip/define.js.map +1 -1
- package/dist/progressive-filter-chip/index.js +1 -2
- package/dist/progressive-filter-chip/progressive-filter-chip.examples.js +1 -2
- package/dist/progressive-filter-chip/progressive-filter-chip.examples.js.map +1 -1
- package/dist/progressive-filter-chip/progressive-filter-chip.global.js +1 -2
- package/dist/progressive-filter-chip/progressive-filter-chip.global.js.map +1 -1
- package/dist/progressive-filter-chip/progressive-filter-chip.js +1 -2
- package/dist/progressive-filter-chip/progressive-filter-chip.js.map +1 -1
- package/dist/progressive-filter-chip/progressive-filter-chip2.js +3 -4
- package/dist/progressive-filter-chip/progressive-filter-chip2.js.map +1 -1
- package/dist/pulse/define.js +1 -2
- package/dist/pulse/define.js.map +1 -1
- package/dist/pulse/index.js +1 -2
- package/dist/pulse/pulse.examples.js +1 -2
- package/dist/pulse/pulse.examples.js.map +1 -1
- package/dist/pulse/pulse.js +1 -2
- package/dist/pulse/pulse.js.map +1 -1
- package/dist/pulse/pulse2.js +3 -4
- package/dist/pulse/pulse2.js.map +1 -1
- package/dist/radio/define.js +0 -1
- package/dist/radio/define.js.map +1 -1
- package/dist/radio/radio-group.js +1 -2
- package/dist/radio/radio-group.js.map +1 -1
- package/dist/radio/radio-group2.js +3 -4
- package/dist/radio/radio-group2.js.map +1 -1
- package/dist/radio/radio.examples.js +1 -2
- package/dist/radio/radio.examples.js.map +1 -1
- package/dist/radio/radio.js +1 -2
- package/dist/radio/radio.js.map +1 -1
- package/dist/radio/radio2.js +3 -4
- package/dist/radio/radio2.js.map +1 -1
- package/dist/range/define.js +0 -1
- package/dist/range/define.js.map +1 -1
- package/dist/range/index.js +1 -2
- package/dist/range/range.examples.js +1 -2
- package/dist/range/range.examples.js.map +1 -1
- package/dist/range/range.global.js +1 -2
- package/dist/range/range.global.js.map +1 -1
- package/dist/range/range.js +1 -2
- package/dist/range/range.js.map +1 -1
- package/dist/range/range2.js +3 -4
- package/dist/range/range2.js.map +1 -1
- package/dist/resize-handle/define.js +1 -2
- package/dist/resize-handle/define.js.map +1 -1
- package/dist/resize-handle/index.js +1 -2
- package/dist/resize-handle/resize-handle.examples.js +1 -2
- package/dist/resize-handle/resize-handle.examples.js.map +1 -1
- package/dist/resize-handle/resize-handle.js +1 -2
- package/dist/resize-handle/resize-handle.js.map +1 -1
- package/dist/resize-handle/resize-handle2.js +5 -6
- package/dist/resize-handle/resize-handle2.js.map +1 -1
- package/dist/search/define.js +0 -1
- package/dist/search/define.js.map +1 -1
- package/dist/search/index.js +1 -2
- package/dist/search/search.examples.js +1 -2
- package/dist/search/search.examples.js.map +1 -1
- package/dist/search/search.js +1 -2
- package/dist/search/search.js.map +1 -1
- package/dist/search/search2.js +3 -4
- package/dist/search/search2.js.map +1 -1
- package/dist/select/define.js +0 -1
- package/dist/select/define.js.map +1 -1
- package/dist/select/index.js +1 -2
- package/dist/select/select.examples.js +1 -2
- package/dist/select/select.examples.js.map +1 -1
- package/dist/select/select.global.js +1 -2
- package/dist/select/select.global.js.map +1 -1
- package/dist/select/select.js +1 -2
- package/dist/select/select.js.map +1 -1
- package/dist/select/select2.js +3 -4
- package/dist/select/select2.js.map +1 -1
- package/dist/skeleton/define.js +1 -2
- package/dist/skeleton/define.js.map +1 -1
- package/dist/skeleton/index.js +1 -2
- package/dist/skeleton/skeleton.examples.js +1 -2
- package/dist/skeleton/skeleton.examples.js.map +1 -1
- package/dist/skeleton/skeleton.js +1 -2
- package/dist/skeleton/skeleton.js.map +1 -1
- package/dist/skeleton/skeleton2.js +3 -4
- package/dist/skeleton/skeleton2.js.map +1 -1
- package/dist/sort-button/define.js +1 -2
- package/dist/sort-button/define.js.map +1 -1
- package/dist/sort-button/index.js +1 -2
- package/dist/sort-button/sort-button.examples.js +1 -2
- package/dist/sort-button/sort-button.examples.js.map +1 -1
- package/dist/sort-button/sort-button.js +1 -2
- package/dist/sort-button/sort-button.js.map +1 -1
- package/dist/sort-button/sort-button2.js +3 -4
- package/dist/sort-button/sort-button2.js.map +1 -1
- package/dist/sparkline/define.js +1 -2
- package/dist/sparkline/define.js.map +1 -1
- package/dist/sparkline/index.js +1 -2
- package/dist/sparkline/sparkline.examples.js +1 -2
- package/dist/sparkline/sparkline.examples.js.map +1 -1
- package/dist/sparkline/sparkline.js +1 -2
- package/dist/sparkline/sparkline.js.map +1 -1
- package/dist/sparkline/sparkline.utils.js +0 -1
- package/dist/sparkline/sparkline.utils.js.map +1 -1
- package/dist/sparkline/sparkline2.js +3 -4
- package/dist/sparkline/sparkline2.js.map +1 -1
- package/dist/star-rating/define.js +0 -1
- package/dist/star-rating/define.js.map +1 -1
- package/dist/star-rating/index.js +1 -2
- package/dist/star-rating/star-rating.examples.js +1 -2
- package/dist/star-rating/star-rating.examples.js.map +1 -1
- package/dist/star-rating/star-rating.js +1 -2
- package/dist/star-rating/star-rating.js.map +1 -1
- package/dist/star-rating/star-rating2.js +3 -4
- package/dist/star-rating/star-rating2.js.map +1 -1
- package/dist/steps/define.js +0 -1
- package/dist/steps/define.js.map +1 -1
- package/dist/steps/index.js +1 -2
- package/dist/steps/steps-item.js +1 -2
- package/dist/steps/steps-item.js.map +1 -1
- package/dist/steps/steps.examples.js +1 -2
- package/dist/steps/steps.examples.js.map +1 -1
- package/dist/steps/steps.js +1 -2
- package/dist/steps/steps.js.map +1 -1
- package/dist/steps/steps2.js +5 -6
- package/dist/steps/steps2.js.map +1 -1
- package/dist/switch/define.js +0 -1
- package/dist/switch/define.js.map +1 -1
- package/dist/switch/switch-group.js +1 -2
- package/dist/switch/switch-group.js.map +1 -1
- package/dist/switch/switch-group2.js +3 -4
- package/dist/switch/switch-group2.js.map +1 -1
- package/dist/switch/switch.examples.js +1 -2
- package/dist/switch/switch.examples.js.map +1 -1
- package/dist/switch/switch.js +1 -2
- package/dist/switch/switch.js.map +1 -1
- package/dist/switch/switch2.js +3 -4
- package/dist/switch/switch2.js.map +1 -1
- package/dist/tabs/define.js +0 -1
- package/dist/tabs/define.js.map +1 -1
- package/dist/tabs/tabs-group.js +1 -2
- package/dist/tabs/tabs-group.js.map +1 -1
- package/dist/tabs/tabs-group2.js +8 -17
- package/dist/tabs/tabs-group2.js.map +1 -1
- package/dist/tabs/tabs-item-group.js +1 -2
- package/dist/tabs/tabs-item-group.js.map +1 -1
- package/dist/tabs/tabs-item-group2.js +3 -4
- package/dist/tabs/tabs-item-group2.js.map +1 -1
- package/dist/tabs/tabs-item.js +1 -2
- package/dist/tabs/tabs-item.js.map +1 -1
- package/dist/tabs/tabs.examples.js +1 -2
- package/dist/tabs/tabs.examples.js.map +1 -1
- package/dist/tabs/tabs.global.js +1 -2
- package/dist/tabs/tabs.global.js.map +1 -1
- package/dist/tabs/tabs.js +1 -2
- package/dist/tabs/tabs.js.map +1 -1
- package/dist/tabs/tabs2.js +5 -6
- package/dist/tabs/tabs2.js.map +1 -1
- package/dist/tabs/utils.js +1 -2
- package/dist/tabs/utils.js.map +1 -1
- package/dist/tag/define.js +1 -2
- package/dist/tag/define.js.map +1 -1
- package/dist/tag/index.js +1 -2
- package/dist/tag/tag.examples.js +1 -2
- package/dist/tag/tag.examples.js.map +1 -1
- package/dist/tag/tag.js +1 -2
- package/dist/tag/tag.js.map +1 -1
- package/dist/tag/tag2.js +3 -4
- package/dist/tag/tag2.js.map +1 -1
- package/dist/textarea/define.js +0 -1
- package/dist/textarea/define.js.map +1 -1
- package/dist/textarea/index.js +1 -2
- package/dist/textarea/textarea.examples.js +1 -2
- package/dist/textarea/textarea.examples.js.map +1 -1
- package/dist/textarea/textarea.js +1 -2
- package/dist/textarea/textarea.js.map +1 -1
- package/dist/textarea/textarea2.js +2 -3
- package/dist/textarea/textarea2.js.map +1 -1
- package/dist/time/define.js +0 -1
- package/dist/time/define.js.map +1 -1
- package/dist/time/index.js +1 -2
- package/dist/time/time.examples.js +1 -2
- package/dist/time/time.examples.js.map +1 -1
- package/dist/time/time.js +1 -2
- package/dist/time/time.js.map +1 -1
- package/dist/time/time2.js +3 -4
- package/dist/time/time2.js.map +1 -1
- package/dist/toast/define.js +1 -2
- package/dist/toast/define.js.map +1 -1
- package/dist/toast/index.js +1 -2
- package/dist/toast/toast.examples.js +1 -2
- package/dist/toast/toast.examples.js.map +1 -1
- package/dist/toast/toast.js +1 -2
- package/dist/toast/toast.js.map +1 -1
- package/dist/toast/toast2.js +3 -4
- package/dist/toast/toast2.js.map +1 -1
- package/dist/toggletip/define.js +0 -1
- package/dist/toggletip/define.js.map +1 -1
- package/dist/toggletip/toggletip-footer.js +1 -2
- package/dist/toggletip/toggletip-footer.js.map +1 -1
- package/dist/toggletip/toggletip-footer2.js +2 -3
- package/dist/toggletip/toggletip-footer2.js.map +1 -1
- package/dist/toggletip/toggletip-header.js +1 -2
- package/dist/toggletip/toggletip-header.js.map +1 -1
- package/dist/toggletip/toggletip-header2.js +2 -3
- package/dist/toggletip/toggletip-header2.js.map +1 -1
- package/dist/toggletip/toggletip.examples.js +1 -2
- package/dist/toggletip/toggletip.examples.js.map +1 -1
- package/dist/toggletip/toggletip.global.js +1 -2
- package/dist/toggletip/toggletip.global.js.map +1 -1
- package/dist/toggletip/toggletip.js +1 -2
- package/dist/toggletip/toggletip.js.map +1 -1
- package/dist/toggletip/toggletip2.js +3 -4
- package/dist/toggletip/toggletip2.js.map +1 -1
- package/dist/toolbar/define.js +1 -2
- package/dist/toolbar/define.js.map +1 -1
- package/dist/toolbar/index.js +1 -2
- package/dist/toolbar/toolbar.examples.js +1 -2
- package/dist/toolbar/toolbar.examples.js.map +1 -1
- package/dist/toolbar/toolbar.js +1 -2
- package/dist/toolbar/toolbar.js.map +1 -1
- package/dist/toolbar/toolbar2.js +3 -4
- package/dist/toolbar/toolbar2.js.map +1 -1
- package/dist/tooltip/define.js +1 -2
- package/dist/tooltip/define.js.map +1 -1
- package/dist/tooltip/index.js +1 -2
- package/dist/tooltip/tooltip.examples.js +1 -2
- package/dist/tooltip/tooltip.examples.js.map +1 -1
- package/dist/tooltip/tooltip.js +1 -2
- package/dist/tooltip/tooltip.js.map +1 -1
- package/dist/tooltip/tooltip2.js +3 -4
- package/dist/tooltip/tooltip2.js.map +1 -1
- package/dist/tree/define.js +0 -1
- package/dist/tree/define.js.map +1 -1
- package/dist/tree/tree-node.js +1 -2
- package/dist/tree/tree-node.js.map +1 -1
- package/dist/tree/tree-node2.js +3 -4
- package/dist/tree/tree-node2.js.map +1 -1
- package/dist/tree/tree.examples.js +1 -2
- package/dist/tree/tree.examples.js.map +1 -1
- package/dist/tree/tree.global.js +1 -2
- package/dist/tree/tree.global.js.map +1 -1
- package/dist/tree/tree.js +1 -2
- package/dist/tree/tree.js.map +1 -1
- package/dist/tree/tree2.js +3 -4
- package/dist/tree/tree2.js.map +1 -1
- package/dist/tree/utils.js +1 -2
- package/dist/tree/utils.js.map +1 -1
- package/dist/week/define.js +0 -1
- package/dist/week/define.js.map +1 -1
- package/dist/week/index.js +1 -2
- package/dist/week/week.examples.js +1 -2
- package/dist/week/week.examples.js.map +1 -1
- package/dist/week/week.js +1 -2
- package/dist/week/week.js.map +1 -1
- package/dist/week/week2.js +3 -4
- package/dist/week/week2.js.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keynav-grid.controller.js","names":[],"sources":["../../../src/internal/controllers/keynav-grid.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { throttle } from '../utils/events.js';\nimport { GlobalStateService } from '@nvidia-elements/foundations/internal/state';\nimport { LogService } from '../services/log.service.js';\nimport {\n validKeyNavigationCode,\n isContextMenuClick,\n getFlattenedDOMTree,\n getFlattenedFocusableItems,\n KeynavCode,\n hasInvalidDOMGrid\n} from '../utils/dom.js';\nimport { focusElement, getActiveElement, setActiveKeyListItem, isSimpleFocusable } from '../utils/focus.js';\n\nexport interface KeynavGridConfig {\n grid?: HTMLElement;\n columnRow?: HTMLElement;\n columns?: NodeListOf<HTMLElement> | HTMLElement[];\n rows: NodeListOf<HTMLElement> | HTMLElement[];\n cells: NodeListOf<HTMLElement> | HTMLElement[];\n}\n\nexport interface KeynavGridElement {\n keynavGridConfig: KeynavGridConfig;\n}\n\n/**\n * https://w3c.github.io/aria-practices/#gridNav_focus\n */\nexport function keyNavigationGrid<T extends ReactiveElement & KeynavGridElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationGridController(instance));\n}\n\nexport class KeyNavigationGridController<T extends ReactiveElement & KeynavGridElement> implements ReactiveController {\n #observer?: MutationObserver;\n #grid?: HTMLElement;\n #activeCell?: HTMLElement;\n #cells = new WeakSet<HTMLElement>();\n #updateCells = throttle(() => this.#initializeCells(), 500, { trailing: true });\n\n get #config() {\n return {\n grid: this.host,\n ...this.host.keynavGridConfig\n };\n }\n\n get #hostRows() {\n const rows = Array.from(this.#config.rows);\n\n if (this.#config.columnRow) {\n rows.unshift(this.#config.columnRow);\n }\n\n return rows;\n }\n\n get #hostCells() {\n const { columns, cells } = this.#config;\n return [...Array.from(columns ?? []), ...Array.from(cells)];\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n if (!this.host.isConnected) return;\n\n this.#grid = this.#config.grid;\n this.#initializeCells();\n this.#grid.addEventListener('keyup', this.#onKeyUp);\n this.#grid.addEventListener('keydown', this.#onKeyDown);\n this.#grid.addEventListener('mouseup', this.#onMouseUp);\n this.#observer?.disconnect();\n this.#observer = new MutationObserver(this.#onMutations);\n this.#observer.observe(this.#grid, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['tabindex']\n });\n }\n\n hostDisconnected() {\n this.#observer?.disconnect();\n this.#observer = undefined;\n this.#updateCells.cancel();\n this.#grid?.removeEventListener('keyup', this.#onKeyUp);\n this.#grid?.removeEventListener('keydown', this.#onKeyDown);\n this.#grid?.removeEventListener('mouseup', this.#onMouseUp);\n this.#grid = undefined;\n this.#activeCell = undefined;\n }\n\n #initializeCells() {\n const cells = this.#hostCells;\n const activeCell =\n cells.find(cell => cell.tabIndex === 0) ??\n (this.#activeCell && cells.includes(this.#activeCell) ? this.#activeCell : cells[0]);\n this.#activeCell = activeCell;\n this.#cells = new WeakSet(cells);\n for (const cell of cells) {\n const tabIndex = cell === activeCell ? '0' : '-1';\n // Avoid observing our own unchanged writes after a DOM morph or key change.\n if (cell.getAttribute('tabindex') !== tabIndex) {\n cell.setAttribute('tabindex', tabIndex);\n }\n }\n }\n\n #onMutations = (mutations: MutationRecord[]) => {\n const changed = mutations.some(mutation => {\n if (mutation.type === 'attributes') {\n const cell = mutation.target;\n // Ignore nested controls and our own tabindex writes.\n return (\n cell instanceof HTMLElement &&\n this.#cells.has(cell) &&\n cell.getAttribute('tabindex') !== (cell === this.#activeCell ? '0' : '-1')\n );\n }\n return [...mutation.addedNodes, ...mutation.removedNodes].some(node => node.nodeType === Node.ELEMENT_NODE);\n });\n if (changed) this.#updateCells();\n };\n\n #flushCellUpdates() {\n // A key event can arrive before the observer delivers a synchronous DOM update.\n this.#onMutations(this.#observer?.takeRecords() ?? []);\n this.#updateCells.flush();\n }\n\n #onMouseUp = (e: MouseEvent) => {\n if (!isContextMenuClick(e)) {\n this.#flushCellUpdates();\n const focusedElement = e.composedPath()[0] as HTMLElement;\n const activeCell = this.#hostCells.find(i => i === focusedElement) ? focusedElement : null;\n if (activeCell) {\n this.#setActiveCell(e, activeCell);\n }\n }\n };\n\n #onKeyDown = (e: KeyboardEvent) => {\n if (!validKeyNavigationCode(e)) return;\n this.#flushCellUpdates();\n const rows = Array.from(this.#hostRows);\n const cells = Array.from(this.#hostCells);\n\n if (GlobalStateService.state.env !== 'production' && hasInvalidDOMGrid(rows)) {\n LogService.warn('Invalid grid structure, all rows must have the same number of cells');\n return;\n }\n\n if (isSimpleFocusable(getActiveElement() as Element)) {\n const { x, y } = getNextKeyGridItem(cells, rows, {\n code: e.code,\n ctrlKey: e.ctrlKey,\n dir: this.host.dir\n });\n\n const nextCell = Array.from(getFlattenedDOMTree(rows[y]!)).filter(c => !!cells.find(i => i === c))[\n x\n ] as HTMLElement;\n this.#setActiveCell(e, nextCell);\n e.preventDefault();\n }\n };\n\n #setActiveCell(e: KeyboardEvent | MouseEvent, activeCell: HTMLElement) {\n this.#activeCell = activeCell;\n setActiveKeyListItem(this.#hostCells, activeCell);\n\n const items = getFlattenedFocusableItems(activeCell);\n const simpleItems = items.filter(i => isSimpleFocusable(i));\n\n if (simpleItems.length === 1 && items.length === 1) {\n focusElement(simpleItems[0]!);\n } else {\n focusElement(activeCell);\n }\n\n const detail = { code: e instanceof KeyboardEvent ? e.code : null, shiftKey: e.shiftKey, activeItem: activeCell };\n activeCell.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n\n #onKeyUp = (e: KeyboardEvent) => {\n if (e.code !== 'Enter' && e.code !== 'Escape') return;\n this.#flushCellUpdates();\n const activeCell = Array.from(this.#hostCells).find(i => i.tabIndex === 0) as HTMLElement;\n if (e.code === 'Escape') {\n activeCell?.focus();\n }\n\n if (e.code === 'Enter' && activeCell === e.composedPath()[0]) {\n getFlattenedFocusableItems(activeCell)[0]?.focus();\n }\n };\n}\n\nfunction getGridDelta(code: KeynavCode | string, dir: string): { dx: number; dy: number } | null {\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (code === KeynavCode.ArrowUp) return { dx: 0, dy: -1 };\n if (code === KeynavCode.ArrowDown) return { dx: 0, dy: 1 };\n if (code === start) return { dx: -1, dy: 0 };\n if (code === end) return { dx: 1, dy: 0 };\n if (code === KeynavCode.PageUp) return { dx: 0, dy: -4 };\n if (code === KeynavCode.PageDown) return { dx: 0, dy: 4 };\n return null;\n}\n\nfunction applyGridHomeEnd(\n code: KeynavCode | string,\n position: { x: number; y: number },\n bounds: { columnCount: number; rowCount: number; ctrlKey: boolean }\n) {\n const { x, y } = position;\n const { columnCount, rowCount, ctrlKey } = bounds;\n if (code === KeynavCode.End) {\n return { x: columnCount, y: ctrlKey ? rowCount : y };\n }\n\n if (code === KeynavCode.Home) {\n return { x: 0, y: ctrlKey ? 0 : y };\n }\n\n return { x, y };\n}\n\nexport function getNextKeyGridItem(\n cells: HTMLElement[],\n rows: HTMLElement[],\n config: { code: KeynavCode | string; ctrlKey: boolean; dir: string }\n) {\n const currentCell = cells.find(i => i.tabIndex === 0) as HTMLElement;\n const currentRow = rows.find(r => getFlattenedDOMTree(r).find(c => c === currentCell)) as HTMLElement;\n const currentRowCells = Array.from(getFlattenedDOMTree(currentRow)).filter(c => !!cells.find(i => i === c));\n const rowCount = rows.length - 1;\n const columnCount = currentRowCells.length - 1;\n\n let x = currentRowCells.indexOf(currentCell);\n let y = rows.indexOf(currentRow);\n\n const delta = getGridDelta(config.code, config.dir);\n if (delta) {\n x = Math.max(0, Math.min(columnCount, x + delta.dx));\n y = Math.max(0, Math.min(rowCount, y + delta.dy));\n } else {\n ({ x, y } = applyGridHomeEnd(config.code, { x, y }, { columnCount, rowCount, ctrlKey: config.ctrlKey }));\n }\n\n return { x, y };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keynav-grid.controller.js","names":["keyNavigationGrid","target","KeyNavigationGridController","instance","throttle","#initializeCells","#config","#hostRows","rows","#hostCells","columns","cells","host","#grid","#onKeyUp","#onKeyDown","#onMouseUp","#observer","#onMutations","#updateCells","#activeCell","activeCell","cell","#cells","tabIndex","mutations","mutation","node","isContextMenuClick","#flushCellUpdates","focusedElement","i","#setActiveCell","validKeyNavigationCode","e","GlobalStateService","hasInvalidDOMGrid","isSimpleFocusable","getActiveElement","getNextKeyGridItem","nextCell","getFlattenedDOMTree","y","c","x","setActiveKeyListItem","items","getFlattenedFocusableItems","simpleItems","focusElement","detail","getGridDelta","start","dir","KeynavCode","end","code","applyGridHomeEnd","position","bounds","columnCount","ctrlKey","rowCount","currentCell","currentRow","r","currentRowCells","delta","config"],"sources":["../../../src/internal/controllers/keynav-grid.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { throttle } from '../utils/events.js';\nimport { GlobalStateService } from '@nvidia-elements/foundations/internal/state';\nimport { LogService } from '../services/log.service.js';\nimport {\n validKeyNavigationCode,\n isContextMenuClick,\n getFlattenedDOMTree,\n getFlattenedFocusableItems,\n KeynavCode,\n hasInvalidDOMGrid\n} from '../utils/dom.js';\nimport { focusElement, getActiveElement, setActiveKeyListItem, isSimpleFocusable } from '../utils/focus.js';\n\nexport interface KeynavGridConfig {\n grid?: HTMLElement;\n columnRow?: HTMLElement;\n columns?: NodeListOf<HTMLElement> | HTMLElement[];\n rows: NodeListOf<HTMLElement> | HTMLElement[];\n cells: NodeListOf<HTMLElement> | HTMLElement[];\n}\n\nexport interface KeynavGridElement {\n keynavGridConfig: KeynavGridConfig;\n}\n\n/**\n * https://w3c.github.io/aria-practices/#gridNav_focus\n */\nexport function keyNavigationGrid<T extends ReactiveElement & KeynavGridElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationGridController(instance));\n}\n\nexport class KeyNavigationGridController<T extends ReactiveElement & KeynavGridElement> implements ReactiveController {\n #observer?: MutationObserver;\n #grid?: HTMLElement;\n #activeCell?: HTMLElement;\n #cells = new WeakSet<HTMLElement>();\n #updateCells = throttle(() => this.#initializeCells(), 500, { trailing: true });\n\n get #config() {\n return {\n grid: this.host,\n ...this.host.keynavGridConfig\n };\n }\n\n get #hostRows() {\n const rows = Array.from(this.#config.rows);\n\n if (this.#config.columnRow) {\n rows.unshift(this.#config.columnRow);\n }\n\n return rows;\n }\n\n get #hostCells() {\n const { columns, cells } = this.#config;\n return [...Array.from(columns ?? []), ...Array.from(cells)];\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n if (!this.host.isConnected) return;\n\n this.#grid = this.#config.grid;\n this.#initializeCells();\n this.#grid.addEventListener('keyup', this.#onKeyUp);\n this.#grid.addEventListener('keydown', this.#onKeyDown);\n this.#grid.addEventListener('mouseup', this.#onMouseUp);\n this.#observer?.disconnect();\n this.#observer = new MutationObserver(this.#onMutations);\n this.#observer.observe(this.#grid, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['tabindex']\n });\n }\n\n hostDisconnected() {\n this.#observer?.disconnect();\n this.#observer = undefined;\n this.#updateCells.cancel();\n this.#grid?.removeEventListener('keyup', this.#onKeyUp);\n this.#grid?.removeEventListener('keydown', this.#onKeyDown);\n this.#grid?.removeEventListener('mouseup', this.#onMouseUp);\n this.#grid = undefined;\n this.#activeCell = undefined;\n }\n\n #initializeCells() {\n const cells = this.#hostCells;\n const activeCell =\n cells.find(cell => cell.tabIndex === 0) ??\n (this.#activeCell && cells.includes(this.#activeCell) ? this.#activeCell : cells[0]);\n this.#activeCell = activeCell;\n this.#cells = new WeakSet(cells);\n for (const cell of cells) {\n const tabIndex = cell === activeCell ? '0' : '-1';\n // Avoid observing our own unchanged writes after a DOM morph or key change.\n if (cell.getAttribute('tabindex') !== tabIndex) {\n cell.setAttribute('tabindex', tabIndex);\n }\n }\n }\n\n #onMutations = (mutations: MutationRecord[]) => {\n const changed = mutations.some(mutation => {\n if (mutation.type === 'attributes') {\n const cell = mutation.target;\n // Ignore nested controls and our own tabindex writes.\n return (\n cell instanceof HTMLElement &&\n this.#cells.has(cell) &&\n cell.getAttribute('tabindex') !== (cell === this.#activeCell ? '0' : '-1')\n );\n }\n return [...mutation.addedNodes, ...mutation.removedNodes].some(node => node.nodeType === Node.ELEMENT_NODE);\n });\n if (changed) this.#updateCells();\n };\n\n #flushCellUpdates() {\n // A key event can arrive before the observer delivers a synchronous DOM update.\n this.#onMutations(this.#observer?.takeRecords() ?? []);\n this.#updateCells.flush();\n }\n\n #onMouseUp = (e: MouseEvent) => {\n if (!isContextMenuClick(e)) {\n this.#flushCellUpdates();\n const focusedElement = e.composedPath()[0] as HTMLElement;\n const activeCell = this.#hostCells.find(i => i === focusedElement) ? focusedElement : null;\n if (activeCell) {\n this.#setActiveCell(e, activeCell);\n }\n }\n };\n\n #onKeyDown = (e: KeyboardEvent) => {\n if (!validKeyNavigationCode(e)) return;\n this.#flushCellUpdates();\n const rows = Array.from(this.#hostRows);\n const cells = Array.from(this.#hostCells);\n\n if (GlobalStateService.state.env !== 'production' && hasInvalidDOMGrid(rows)) {\n LogService.warn('Invalid grid structure, all rows must have the same number of cells');\n return;\n }\n\n if (isSimpleFocusable(getActiveElement() as Element)) {\n const { x, y } = getNextKeyGridItem(cells, rows, {\n code: e.code,\n ctrlKey: e.ctrlKey,\n dir: this.host.dir\n });\n\n const nextCell = Array.from(getFlattenedDOMTree(rows[y]!)).filter(c => !!cells.find(i => i === c))[\n x\n ] as HTMLElement;\n this.#setActiveCell(e, nextCell);\n e.preventDefault();\n }\n };\n\n #setActiveCell(e: KeyboardEvent | MouseEvent, activeCell: HTMLElement) {\n this.#activeCell = activeCell;\n setActiveKeyListItem(this.#hostCells, activeCell);\n\n const items = getFlattenedFocusableItems(activeCell);\n const simpleItems = items.filter(i => isSimpleFocusable(i));\n\n if (simpleItems.length === 1 && items.length === 1) {\n focusElement(simpleItems[0]!);\n } else {\n focusElement(activeCell);\n }\n\n const detail = { code: e instanceof KeyboardEvent ? e.code : null, shiftKey: e.shiftKey, activeItem: activeCell };\n activeCell.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n\n #onKeyUp = (e: KeyboardEvent) => {\n if (e.code !== 'Enter' && e.code !== 'Escape') return;\n this.#flushCellUpdates();\n const activeCell = Array.from(this.#hostCells).find(i => i.tabIndex === 0) as HTMLElement;\n if (e.code === 'Escape') {\n activeCell?.focus();\n }\n\n if (e.code === 'Enter' && activeCell === e.composedPath()[0]) {\n getFlattenedFocusableItems(activeCell)[0]?.focus();\n }\n };\n}\n\nfunction getGridDelta(code: KeynavCode | string, dir: string): { dx: number; dy: number } | null {\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (code === KeynavCode.ArrowUp) return { dx: 0, dy: -1 };\n if (code === KeynavCode.ArrowDown) return { dx: 0, dy: 1 };\n if (code === start) return { dx: -1, dy: 0 };\n if (code === end) return { dx: 1, dy: 0 };\n if (code === KeynavCode.PageUp) return { dx: 0, dy: -4 };\n if (code === KeynavCode.PageDown) return { dx: 0, dy: 4 };\n return null;\n}\n\nfunction applyGridHomeEnd(\n code: KeynavCode | string,\n position: { x: number; y: number },\n bounds: { columnCount: number; rowCount: number; ctrlKey: boolean }\n) {\n const { x, y } = position;\n const { columnCount, rowCount, ctrlKey } = bounds;\n if (code === KeynavCode.End) {\n return { x: columnCount, y: ctrlKey ? rowCount : y };\n }\n\n if (code === KeynavCode.Home) {\n return { x: 0, y: ctrlKey ? 0 : y };\n }\n\n return { x, y };\n}\n\nexport function getNextKeyGridItem(\n cells: HTMLElement[],\n rows: HTMLElement[],\n config: { code: KeynavCode | string; ctrlKey: boolean; dir: string }\n) {\n const currentCell = cells.find(i => i.tabIndex === 0) as HTMLElement;\n const currentRow = rows.find(r => getFlattenedDOMTree(r).find(c => c === currentCell)) as HTMLElement;\n const currentRowCells = Array.from(getFlattenedDOMTree(currentRow)).filter(c => !!cells.find(i => i === c));\n const rowCount = rows.length - 1;\n const columnCount = currentRowCells.length - 1;\n\n let x = currentRowCells.indexOf(currentCell);\n let y = rows.indexOf(currentRow);\n\n const delta = getGridDelta(config.code, config.dir);\n if (delta) {\n x = Math.max(0, Math.min(columnCount, x + delta.dx));\n y = Math.max(0, Math.min(rowCount, y + delta.dy));\n } else {\n ({ x, y } = applyGridHomeEnd(config.code, { x, y }, { columnCount, rowCount, ctrlKey: config.ctrlKey }));\n }\n\n return { x, y };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keynav-list.controller.examples.js","names":[],"sources":["../../../src/internal/controllers/keynav-list.controller.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement } from 'lit';\nimport { state } from 'lit/decorators/state.js';\nimport type { KeynavListConfig } from '@nvidia-elements/core/internal';\nimport { keyNavigationList } from '@nvidia-elements/core/internal';\n\nexport default {\n title: 'Internal/Controllers'\n}\n\nconst styles = css`\n section {\n display: grid;\n gap: 4px;\n grid-template-columns: repeat(10, 50px);\n }\n\n .vertical {\n grid-template-rows: repeat(10, 1fr);\n grid-template-columns: 50px;\n }\n\n .row {\n display: contents;\n }\n\n button {\n width: 100%;\n height: 30px;\n min-width: 30px;\n display: block;\n }\n\n button[selected] {\n background: green;\n color: white;\n }\n`;\n\n@keyNavigationList<DemoKeyNavigationList>()\nclass DemoKeyNavigationList extends LitElement {\n get keynavListConfig() {\n return {\n items: this.shadowRoot.querySelectorAll<HTMLElement>('button')\n }\n }\n\n @state() private selected = '0';\n @state() private active = '';\n\n static styles = [styles];\n\n render() {\n return html`\n <p nve-text=\"body\">Selected: ${this.selected}</p>\n <p nve-text=\"body\">Active: ${this.active}</p>\n <section @nve-key-change=${e => (this.active = e.detail.activeItem.textContent)}>\n ${Array.from(Array(10).keys()).map(i => html`<div>\n <button ?selected=${this.selected === `${i}`} @click=${e => (this.selected = e.target.innerText)}>${i}</button>\n </div>`)}\n </section>`;\n }\n}\ncustomElements.get('demo-key-navigation-list') || customElements.define('demo-key-navigation-list', DemoKeyNavigationList);\n\n/**\n * @summary Horizontal list keyboard navigation controller with arrow key support.\n * @tags test-case\n */\nexport const ListDemo = {\n render: () => html`<demo-key-navigation-list></demo-key-navigation-list>`\n};\n\n@keyNavigationList<DemoKeyNavigationListVertical>()\nclass DemoKeyNavigationListVertical extends LitElement {\n get keynavListConfig(): KeynavListConfig {\n return {\n layout: 'vertical',\n items: this.shadowRoot.querySelectorAll<HTMLElement>('button')\n }\n }\n\n @state() private selected = '0';\n @state() private active = '';\n\n static styles = [styles];\n\n render() {\n return html`\n <p nve-text=\"body\">Selected: ${this.selected}</p>\n <p nve-text=\"body\">Active: ${this.active}</p>\n <section class=\"vertical\" @nve-key-change=${e => (this.active = e.detail.activeItem.textContent)}>\n ${Array.from(Array(10).keys()).map(i => html`<div>\n <button ?selected=${this.selected === `${i}`} @click=${e => (this.selected = e.target.innerText)}>${i}</button>\n </div>`)}\n </section>\n `;\n }\n}\ncustomElements.get('demo-key-navigation-list-vertical') || customElements.define('demo-key-navigation-list-vertical', DemoKeyNavigationListVertical);\n\n/**\n * @summary Vertical list keyboard navigation controller with up and down arrow key support.\n * @tags test-case\n */\nexport const VerticalDemo = {\n render: () => html`<demo-key-navigation-list-vertical></demo-key-navigation-list-vertical>`\n};\n\n@keyNavigationList<DemoKeyNavigationListLoop>()\nclass DemoKeyNavigationListLoop extends LitElement {\n get keynavListConfig(): KeynavListConfig {\n return {\n loop: true,\n layout: 'vertical',\n items: this.shadowRoot.querySelectorAll<HTMLElement>('button')\n }\n }\n\n @state() private selected = '0';\n @state() private active = '';\n\n static styles = [styles];\n\n render() {\n return html`\n <p nve-text=\"body\">Selected: ${this.selected}</p>\n <p nve-text=\"body\">Active: ${this.active}</p>\n <section class=\"vertical\" @nve-key-change=${e => (this.active = e.detail.activeItem.textContent)}>\n ${Array.from(Array(10).keys()).map(i => html`<div>\n <button ?selected=${this.selected === `${i}`} @click=${e => (this.selected = e.target.innerText)}>${i}</button>\n </div>`)}\n </section>`;\n }\n}\ncustomElements.get('demo-key-navigation-list-loop') || customElements.define('demo-key-navigation-list-loop', DemoKeyNavigationListLoop);\n\n/**\n * @summary Vertical list keyboard navigation with looping enabled to wrap from last item to first.\n * @tags test-case\n */\nexport const LoopDemo = {\n render: () => html`<demo-key-navigation-list-loop></demo-key-navigation-list-loop>`\n};\n"],"mappings":";AAGA,
|
|
1
|
+
{"version":3,"file":"keynav-list.controller.examples.js","names":["keynav_list_controller_examples_default"],"sources":["../../../src/internal/controllers/keynav-list.controller.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { css, html, LitElement } from 'lit';\nimport { state } from 'lit/decorators/state.js';\nimport type { KeynavListConfig } from '@nvidia-elements/core/internal';\nimport { keyNavigationList } from '@nvidia-elements/core/internal';\n\nexport default {\n title: 'Internal/Controllers'\n}\n\nconst styles = css`\n section {\n display: grid;\n gap: 4px;\n grid-template-columns: repeat(10, 50px);\n }\n\n .vertical {\n grid-template-rows: repeat(10, 1fr);\n grid-template-columns: 50px;\n }\n\n .row {\n display: contents;\n }\n\n button {\n width: 100%;\n height: 30px;\n min-width: 30px;\n display: block;\n }\n\n button[selected] {\n background: green;\n color: white;\n }\n`;\n\n@keyNavigationList<DemoKeyNavigationList>()\nclass DemoKeyNavigationList extends LitElement {\n get keynavListConfig() {\n return {\n items: this.shadowRoot.querySelectorAll<HTMLElement>('button')\n }\n }\n\n @state() private selected = '0';\n @state() private active = '';\n\n static styles = [styles];\n\n render() {\n return html`\n <p nve-text=\"body\">Selected: ${this.selected}</p>\n <p nve-text=\"body\">Active: ${this.active}</p>\n <section @nve-key-change=${e => (this.active = e.detail.activeItem.textContent)}>\n ${Array.from(Array(10).keys()).map(i => html`<div>\n <button ?selected=${this.selected === `${i}`} @click=${e => (this.selected = e.target.innerText)}>${i}</button>\n </div>`)}\n </section>`;\n }\n}\ncustomElements.get('demo-key-navigation-list') || customElements.define('demo-key-navigation-list', DemoKeyNavigationList);\n\n/**\n * @summary Horizontal list keyboard navigation controller with arrow key support.\n * @tags test-case\n */\nexport const ListDemo = {\n render: () => html`<demo-key-navigation-list></demo-key-navigation-list>`\n};\n\n@keyNavigationList<DemoKeyNavigationListVertical>()\nclass DemoKeyNavigationListVertical extends LitElement {\n get keynavListConfig(): KeynavListConfig {\n return {\n layout: 'vertical',\n items: this.shadowRoot.querySelectorAll<HTMLElement>('button')\n }\n }\n\n @state() private selected = '0';\n @state() private active = '';\n\n static styles = [styles];\n\n render() {\n return html`\n <p nve-text=\"body\">Selected: ${this.selected}</p>\n <p nve-text=\"body\">Active: ${this.active}</p>\n <section class=\"vertical\" @nve-key-change=${e => (this.active = e.detail.activeItem.textContent)}>\n ${Array.from(Array(10).keys()).map(i => html`<div>\n <button ?selected=${this.selected === `${i}`} @click=${e => (this.selected = e.target.innerText)}>${i}</button>\n </div>`)}\n </section>\n `;\n }\n}\ncustomElements.get('demo-key-navigation-list-vertical') || customElements.define('demo-key-navigation-list-vertical', DemoKeyNavigationListVertical);\n\n/**\n * @summary Vertical list keyboard navigation controller with up and down arrow key support.\n * @tags test-case\n */\nexport const VerticalDemo = {\n render: () => html`<demo-key-navigation-list-vertical></demo-key-navigation-list-vertical>`\n};\n\n@keyNavigationList<DemoKeyNavigationListLoop>()\nclass DemoKeyNavigationListLoop extends LitElement {\n get keynavListConfig(): KeynavListConfig {\n return {\n loop: true,\n layout: 'vertical',\n items: this.shadowRoot.querySelectorAll<HTMLElement>('button')\n }\n }\n\n @state() private selected = '0';\n @state() private active = '';\n\n static styles = [styles];\n\n render() {\n return html`\n <p nve-text=\"body\">Selected: ${this.selected}</p>\n <p nve-text=\"body\">Active: ${this.active}</p>\n <section class=\"vertical\" @nve-key-change=${e => (this.active = e.detail.activeItem.textContent)}>\n ${Array.from(Array(10).keys()).map(i => html`<div>\n <button ?selected=${this.selected === `${i}`} @click=${e => (this.selected = e.target.innerText)}>${i}</button>\n </div>`)}\n </section>`;\n }\n}\ncustomElements.get('demo-key-navigation-list-loop') || customElements.define('demo-key-navigation-list-loop', DemoKeyNavigationListLoop);\n\n/**\n * @summary Vertical list keyboard navigation with looping enabled to wrap from last item to first.\n * @tags test-case\n */\nexport const LoopDemo = {\n render: () => html`<demo-key-navigation-list-loop></demo-key-navigation-list-loop>`\n};\n"],"mappings":";AAGA,IAAAA,IAAc"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { focusElement as e, initializeKeyListItems as t, isFocusable as n, setActiveKeyListItem as r } from "../utils/focus.js";
|
|
2
2
|
import { KeynavCode as i, validKeyNavigationCode as a } from "../utils/dom.js";
|
|
3
|
-
|
|
3
|
+
// src/internal/controllers/keynav-list.controller.ts
|
|
4
4
|
function o() {
|
|
5
5
|
return (e) => e.addInitializer((e) => new s(e));
|
|
6
6
|
}
|
|
@@ -31,7 +31,7 @@ var s = class {
|
|
|
31
31
|
refreshItems(e) {
|
|
32
32
|
let { manageFocus: t, manageTabindex: n, items: r, initialItem: i } = this.#e;
|
|
33
33
|
if (!t || !n || this.#t) return;
|
|
34
|
-
let a = r.find((t) => e.includes(t) && t.tabIndex === 0) ?? (i && r.includes(i) ? i : r[0]);
|
|
34
|
+
let a = r.find((e) => e.matches(":focus-within")) ?? r.find((t) => e.includes(t) && t.tabIndex === 0) ?? (i && r.includes(i) ? i : r[0]);
|
|
35
35
|
Array.from(this.host.keynavListConfig.items).forEach((e) => {
|
|
36
36
|
e.tabIndex = e === a ? 0 : -1;
|
|
37
37
|
});
|
|
@@ -135,7 +135,6 @@ function d(e, t, n) {
|
|
|
135
135
|
previous: i
|
|
136
136
|
};
|
|
137
137
|
}
|
|
138
|
-
//#endregion
|
|
139
138
|
export { s as KeyNavigationListController, d as getNextKeyListItem, o as keyNavigationList };
|
|
140
139
|
|
|
141
140
|
//# sourceMappingURL=keynav-list.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keynav-list.controller.js","names":[],"sources":["../../../src/internal/controllers/keynav-list.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { focusElement, initializeKeyListItems, isFocusable, setActiveKeyListItem } from '../utils/focus.js';\nimport { KeynavCode, validKeyNavigationCode } from '../utils/dom.js';\n\nexport interface KeynavListConfig {\n items: NodeListOf<HTMLElement> | HTMLElement[];\n initialItem?: HTMLElement;\n layout?: 'both' | 'horizontal' | 'vertical';\n manageFocus?: boolean;\n manageTabindex?: boolean;\n loop?: boolean;\n dir?: string | null;\n}\n\nexport interface KeynavListElement {\n keynavListConfig: KeynavListConfig;\n}\n\n/** https://webaim.org/techniques/keyboard/ */\nexport function keyNavigationList<T extends ReactiveElement & KeynavListElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationListController(instance));\n}\n\nexport class KeyNavigationListController<T extends ReactiveElement & KeynavListElement> implements ReactiveController {\n get #config(): KeynavListConfig & { items: HTMLElement[] } {\n return {\n layout: 'horizontal',\n manageFocus: true,\n manageTabindex: true,\n loop: false,\n dir: this.host.getAttribute('rtl'),\n ...this.host.keynavListConfig,\n items: Array.from(this.host.keynavListConfig.items).filter(\n (i: HTMLElement & { disabled?: boolean }) => !i.disabled\n )\n };\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n /** @private attr nve-keynav-disabled is an internal API for advanced use cases only */\n get #keynavDisabled() {\n return this.host.hasAttribute('nve-keynav-disabled');\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n if (!this.host.isConnected) return;\n this.#initializeTabIndex();\n this.host.addEventListener('pointerup', this.#onPointerUp);\n this.host.addEventListener('keydown', this.#onKeyDown);\n }\n\n hostDisconnected() {\n this.host.removeEventListener('pointerup', this.#onPointerUp);\n this.host.removeEventListener('keydown', this.#onKeyDown);\n }\n\n /** Updates the focus order after configured items change without moving focus. */\n refreshItems(previousItems: readonly HTMLElement[]) {\n const { manageFocus, manageTabindex, items, initialItem } = this.#config;\n if (!manageFocus || !manageTabindex || this.#keynavDisabled) return;\n\n const activeItem =\n items.find(item => previousItems.includes(item) && item.tabIndex === 0) ??\n (initialItem && items.includes(initialItem) ? initialItem : items[0]);\n Array.from(this.host.keynavListConfig.items).forEach(item => {\n item.tabIndex = item === activeItem ? 0 : -1;\n });\n }\n\n #initializeTabIndex() {\n const { manageFocus, manageTabindex, items, initialItem } = this.#config;\n if (manageFocus && manageTabindex && !this.#keynavDisabled) {\n initializeKeyListItems(items);\n if (initialItem && items.includes(initialItem)) {\n setActiveKeyListItem(items, initialItem);\n }\n }\n }\n\n #clickItem(e: PointerEvent) {\n const item = this.#getPointerActiveItem(e, this.#config.items);\n if (item) {\n this.#setActiveItem(e, item);\n }\n }\n\n #focusItem(e: KeyboardEvent) {\n if (validKeyNavigationCode(e) && !this.#keynavDisabled) {\n const { loop, layout, dir, items } = this.#config;\n const activeItem = this.#getKeyboardActiveItem(e, items);\n if (activeItem) {\n const { next, previous } = getNextKeyListItem(activeItem, Array.from(items), {\n loop,\n layout,\n dir,\n code: e.code\n });\n\n if (next !== previous) {\n this.#setActiveItem(e, items[next]!, items[previous]);\n }\n }\n }\n }\n\n #getKeyboardActiveItem(e: KeyboardEvent, items: HTMLElement[]) {\n const target = e.composedPath()[0];\n return target instanceof HTMLElement && items.includes(target) ? target : null;\n }\n\n #getPointerActiveItem(e: PointerEvent, items: HTMLElement[]) {\n const path = e.composedPath();\n const itemIndex = path.findIndex(item => item instanceof HTMLElement && items.includes(item));\n const item = path[itemIndex];\n\n if (!(item instanceof HTMLElement)) return null;\n\n const hasFocusableDescendant = path\n .slice(0, itemIndex)\n .some(descendant => descendant instanceof Element && isFocusable(descendant));\n return hasFocusableDescendant ? null : item;\n }\n\n #setActiveItem(e: KeyboardEvent | PointerEvent, activeItem: HTMLElement, previousItem?: HTMLElement) {\n const { manageFocus, manageTabindex, items } = this.#config;\n if (manageFocus) {\n if (manageTabindex) {\n setActiveKeyListItem(items, activeItem);\n }\n\n focusElement(activeItem);\n e.preventDefault();\n }\n\n const detail = {\n activeItem,\n previousItem,\n code: e instanceof KeyboardEvent ? e.code : null,\n metaKey: e.ctrlKey || e.metaKey,\n items\n };\n activeItem.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n\n #onPointerUp = (e: PointerEvent) => this.#clickItem(e);\n\n #onKeyDown = (e: KeyboardEvent) => this.#focusItem(e);\n}\n\ninterface KeyListConfig {\n code: KeynavCode;\n loop?: boolean;\n layout?: 'horizontal' | 'vertical' | 'both';\n dir: string | null | undefined;\n}\n\nfunction resolveArrowDirection(config: KeyListConfig): 'backward' | 'forward' | null {\n const { code, layout, dir } = config;\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (layout !== 'horizontal') {\n if (code === KeynavCode.ArrowUp) return 'backward';\n if (code === KeynavCode.ArrowDown) return 'forward';\n }\n\n if (layout !== 'vertical') {\n if (code === start) return 'backward';\n if (code === end) return 'forward';\n }\n\n return null;\n}\n\nfunction resolveSpecialKey(code: KeynavCode): 'home' | 'end' | 'pageup' | 'pagedown' | null {\n if (code === KeynavCode.End) return 'end';\n if (code === KeynavCode.Home) return 'home';\n if (code === KeynavCode.PageUp) return 'pageup';\n if (code === KeynavCode.PageDown) return 'pagedown';\n return null;\n}\n\nfunction navigateWithLoop(current: number, step: number, options: { limit: number; loop: boolean | undefined }) {\n const { limit, loop } = options;\n const next = current + step;\n if (next >= 0 && next <= limit) return next;\n return loop ? (step < 0 ? limit : 0) : current;\n}\n\nexport function getNextKeyListItem(item: HTMLElement, items: HTMLElement[], config: KeyListConfig) {\n let next = items.indexOf(item);\n const previous = next;\n const itemCount = items.length - 1;\n const direction = resolveArrowDirection(config);\n\n switch (direction ?? resolveSpecialKey(config.code)) {\n case 'backward':\n next = navigateWithLoop(next, -1, { limit: itemCount, loop: config.loop });\n break;\n case 'forward':\n next = navigateWithLoop(next, 1, { limit: itemCount, loop: config.loop });\n break;\n case 'end':\n next = itemCount;\n break;\n case 'home':\n next = 0;\n break;\n case 'pageup':\n next = Math.max(0, next - 4);\n break;\n case 'pagedown':\n next = Math.min(itemCount, next + 4);\n break;\n case null:\n break;\n }\n\n return { next, previous };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keynav-list.controller.js","names":["keyNavigationList","target","KeyNavigationListController","instance","#config","i","host","#keynavDisabled","#initializeTabIndex","#onPointerUp","#onKeyDown","manageFocus","manageTabindex","activeItem","items","item","previousItems","initialItem","initializeKeyListItems","setActiveKeyListItem","#getPointerActiveItem","#setActiveItem","validKeyNavigationCode","#getKeyboardActiveItem","getNextKeyListItem","next","previous","path","itemIndex","descendant","isFocusable","focusElement","e","detail","#clickItem","#focusItem","resolveArrowDirection","config","start","dir","KeynavCode","end","layout","code","resolveSpecialKey","navigateWithLoop","options","current","step","limit","loop","itemCount"],"sources":["../../../src/internal/controllers/keynav-list.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { focusElement, initializeKeyListItems, isFocusable, setActiveKeyListItem } from '../utils/focus.js';\nimport { KeynavCode, validKeyNavigationCode } from '../utils/dom.js';\n\nexport interface KeynavListConfig {\n items: NodeListOf<HTMLElement> | HTMLElement[];\n initialItem?: HTMLElement;\n layout?: 'both' | 'horizontal' | 'vertical';\n manageFocus?: boolean;\n manageTabindex?: boolean;\n loop?: boolean;\n dir?: string | null;\n}\n\nexport interface KeynavListElement {\n keynavListConfig: KeynavListConfig;\n}\n\n/** https://webaim.org/techniques/keyboard/ */\nexport function keyNavigationList<T extends ReactiveElement & KeynavListElement>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new KeyNavigationListController(instance));\n}\n\nexport class KeyNavigationListController<T extends ReactiveElement & KeynavListElement> implements ReactiveController {\n get #config(): KeynavListConfig & { items: HTMLElement[] } {\n return {\n layout: 'horizontal',\n manageFocus: true,\n manageTabindex: true,\n loop: false,\n dir: this.host.getAttribute('rtl'),\n ...this.host.keynavListConfig,\n items: Array.from(this.host.keynavListConfig.items).filter(\n (i: HTMLElement & { disabled?: boolean }) => !i.disabled\n )\n };\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n /** @private attr nve-keynav-disabled is an internal API for advanced use cases only */\n get #keynavDisabled() {\n return this.host.hasAttribute('nve-keynav-disabled');\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n if (!this.host.isConnected) return;\n this.#initializeTabIndex();\n this.host.addEventListener('pointerup', this.#onPointerUp);\n this.host.addEventListener('keydown', this.#onKeyDown);\n }\n\n hostDisconnected() {\n this.host.removeEventListener('pointerup', this.#onPointerUp);\n this.host.removeEventListener('keydown', this.#onKeyDown);\n }\n\n /** Updates the focus order after configured items change without moving focus. */\n refreshItems(previousItems: readonly HTMLElement[]) {\n const { manageFocus, manageTabindex, items, initialItem } = this.#config;\n if (!manageFocus || !manageTabindex || this.#keynavDisabled) return;\n\n const activeItem =\n items.find(item => item.matches(':focus-within')) ??\n items.find(item => previousItems.includes(item) && item.tabIndex === 0) ??\n (initialItem && items.includes(initialItem) ? initialItem : items[0]);\n Array.from(this.host.keynavListConfig.items).forEach(item => {\n item.tabIndex = item === activeItem ? 0 : -1;\n });\n }\n\n #initializeTabIndex() {\n const { manageFocus, manageTabindex, items, initialItem } = this.#config;\n if (manageFocus && manageTabindex && !this.#keynavDisabled) {\n initializeKeyListItems(items);\n if (initialItem && items.includes(initialItem)) {\n setActiveKeyListItem(items, initialItem);\n }\n }\n }\n\n #clickItem(e: PointerEvent) {\n const item = this.#getPointerActiveItem(e, this.#config.items);\n if (item) {\n this.#setActiveItem(e, item);\n }\n }\n\n #focusItem(e: KeyboardEvent) {\n if (validKeyNavigationCode(e) && !this.#keynavDisabled) {\n const { loop, layout, dir, items } = this.#config;\n const activeItem = this.#getKeyboardActiveItem(e, items);\n if (activeItem) {\n const { next, previous } = getNextKeyListItem(activeItem, Array.from(items), {\n loop,\n layout,\n dir,\n code: e.code\n });\n\n if (next !== previous) {\n this.#setActiveItem(e, items[next]!, items[previous]);\n }\n }\n }\n }\n\n #getKeyboardActiveItem(e: KeyboardEvent, items: HTMLElement[]) {\n const target = e.composedPath()[0];\n return target instanceof HTMLElement && items.includes(target) ? target : null;\n }\n\n #getPointerActiveItem(e: PointerEvent, items: HTMLElement[]) {\n const path = e.composedPath();\n const itemIndex = path.findIndex(item => item instanceof HTMLElement && items.includes(item));\n const item = path[itemIndex];\n\n if (!(item instanceof HTMLElement)) return null;\n\n const hasFocusableDescendant = path\n .slice(0, itemIndex)\n .some(descendant => descendant instanceof Element && isFocusable(descendant));\n return hasFocusableDescendant ? null : item;\n }\n\n #setActiveItem(e: KeyboardEvent | PointerEvent, activeItem: HTMLElement, previousItem?: HTMLElement) {\n const { manageFocus, manageTabindex, items } = this.#config;\n if (manageFocus) {\n if (manageTabindex) {\n setActiveKeyListItem(items, activeItem);\n }\n\n focusElement(activeItem);\n e.preventDefault();\n }\n\n const detail = {\n activeItem,\n previousItem,\n code: e instanceof KeyboardEvent ? e.code : null,\n metaKey: e.ctrlKey || e.metaKey,\n items\n };\n activeItem.dispatchEvent(new CustomEvent('nve-key-change', { bubbles: true, composed: true, detail }));\n }\n\n #onPointerUp = (e: PointerEvent) => this.#clickItem(e);\n\n #onKeyDown = (e: KeyboardEvent) => this.#focusItem(e);\n}\n\ninterface KeyListConfig {\n code: KeynavCode;\n loop?: boolean;\n layout?: 'horizontal' | 'vertical' | 'both';\n dir: string | null | undefined;\n}\n\nfunction resolveArrowDirection(config: KeyListConfig): 'backward' | 'forward' | null {\n const { code, layout, dir } = config;\n const start = dir === 'rtl' ? KeynavCode.ArrowRight : KeynavCode.ArrowLeft;\n const end = dir === 'rtl' ? KeynavCode.ArrowLeft : KeynavCode.ArrowRight;\n\n if (layout !== 'horizontal') {\n if (code === KeynavCode.ArrowUp) return 'backward';\n if (code === KeynavCode.ArrowDown) return 'forward';\n }\n\n if (layout !== 'vertical') {\n if (code === start) return 'backward';\n if (code === end) return 'forward';\n }\n\n return null;\n}\n\nfunction resolveSpecialKey(code: KeynavCode): 'home' | 'end' | 'pageup' | 'pagedown' | null {\n if (code === KeynavCode.End) return 'end';\n if (code === KeynavCode.Home) return 'home';\n if (code === KeynavCode.PageUp) return 'pageup';\n if (code === KeynavCode.PageDown) return 'pagedown';\n return null;\n}\n\nfunction navigateWithLoop(current: number, step: number, options: { limit: number; loop: boolean | undefined }) {\n const { limit, loop } = options;\n const next = current + step;\n if (next >= 0 && next <= limit) return next;\n return loop ? (step < 0 ? limit : 0) : current;\n}\n\nexport function getNextKeyListItem(item: HTMLElement, items: HTMLElement[], config: KeyListConfig) {\n let next = items.indexOf(item);\n const previous = next;\n const itemCount = items.length - 1;\n const direction = resolveArrowDirection(config);\n\n switch (direction ?? resolveSpecialKey(config.code)) {\n case 'backward':\n next = navigateWithLoop(next, -1, { limit: itemCount, loop: config.loop });\n break;\n case 'forward':\n next = navigateWithLoop(next, 1, { limit: itemCount, loop: config.loop });\n break;\n case 'end':\n next = itemCount;\n break;\n case 'home':\n next = 0;\n break;\n case 'pageup':\n next = Math.max(0, next - 4);\n break;\n case 'pagedown':\n next = Math.min(itemCount, next + 4);\n break;\n case null:\n break;\n }\n\n return { next, previous };\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/internal/controllers/keynav-spatial.controller.ts
|
|
2
2
|
var e = class {
|
|
3
3
|
#e;
|
|
4
4
|
#t;
|
|
@@ -70,7 +70,6 @@ function t(e) {
|
|
|
70
70
|
default: return;
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
-
//#endregion
|
|
74
73
|
export { e as KeyNavigationSpatialController };
|
|
75
74
|
|
|
76
75
|
//# sourceMappingURL=keynav-spatial.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keynav-spatial.controller.js","names":[],"sources":["../../../src/internal/controllers/keynav-spatial.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveControllerHost } from 'lit';\n\ntype SpatialKeyHost = ReactiveControllerHost & HTMLElement;\n\nexport type SpatialKeyHandling = 'handled' | 'ignored';\n\nexport interface KeyNavigationSpatialControllerOptions {\n readonly isEnabled?: () => boolean;\n}\n\nexport type SpatialKeyCommand =\n | {\n readonly ctrlKey: boolean;\n readonly event: KeyboardEvent;\n readonly kind: 'direction';\n readonly horizontal: -1 | 0 | 1;\n readonly key: 'ArrowDown' | 'ArrowLeft' | 'ArrowRight' | 'ArrowUp';\n readonly shiftKey: boolean;\n readonly vertical: -1 | 0 | 1;\n }\n | {\n readonly event: KeyboardEvent;\n readonly kind: 'zoom';\n readonly key: '+' | '-' | '=';\n };\n\n/** Converts direct-host keyboard input into spatial direction and zoom commands. */\nexport class KeyNavigationSpatialController implements ReactiveController {\n readonly #host: SpatialKeyHost;\n readonly #isEnabled: () => boolean;\n\n constructor(host: SpatialKeyHost, { isEnabled = () => true }: KeyNavigationSpatialControllerOptions = {}) {\n this.#host = host;\n this.#isEnabled = isEnabled;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.#host.addEventListener('keydown', this.#handleKeydown);\n }\n\n hostDisconnected(): void {\n this.#host.removeEventListener('keydown', this.#handleKeydown);\n }\n\n #handleKeydown = (event: KeyboardEvent): void => {\n if (!this.#isEnabled() || event.composedPath()[0] !== this.#host) return;\n const command = getSpatialKeyCommand(event);\n if (!command) return;\n this.#host.dispatchEvent(\n new CustomEvent<SpatialKeyCommand>('nve-key', {\n bubbles: false,\n cancelable: false,\n composed: false,\n detail: command\n })\n );\n };\n}\n\nfunction getSpatialKeyCommand(event: KeyboardEvent): SpatialKeyCommand | undefined {\n switch (event.key) {\n case 'ArrowDown':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 0,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: -1\n };\n case 'ArrowLeft':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: -1,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 0\n };\n case 'ArrowRight':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 1,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 0\n };\n case 'ArrowUp':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 0,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 1\n };\n case '+':\n case '-':\n case '=':\n return { event, key: event.key, kind: 'zoom' };\n default:\n return undefined;\n }\n}\n"],"mappings":";AA8BA,
|
|
1
|
+
{"version":3,"file":"keynav-spatial.controller.js","names":["KeyNavigationSpatialController","#host","host","#isEnabled","isEnabled","#handleKeydown","event","command","getSpatialKeyCommand"],"sources":["../../../src/internal/controllers/keynav-spatial.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveControllerHost } from 'lit';\n\ntype SpatialKeyHost = ReactiveControllerHost & HTMLElement;\n\nexport type SpatialKeyHandling = 'handled' | 'ignored';\n\nexport interface KeyNavigationSpatialControllerOptions {\n readonly isEnabled?: () => boolean;\n}\n\nexport type SpatialKeyCommand =\n | {\n readonly ctrlKey: boolean;\n readonly event: KeyboardEvent;\n readonly kind: 'direction';\n readonly horizontal: -1 | 0 | 1;\n readonly key: 'ArrowDown' | 'ArrowLeft' | 'ArrowRight' | 'ArrowUp';\n readonly shiftKey: boolean;\n readonly vertical: -1 | 0 | 1;\n }\n | {\n readonly event: KeyboardEvent;\n readonly kind: 'zoom';\n readonly key: '+' | '-' | '=';\n };\n\n/** Converts direct-host keyboard input into spatial direction and zoom commands. */\nexport class KeyNavigationSpatialController implements ReactiveController {\n readonly #host: SpatialKeyHost;\n readonly #isEnabled: () => boolean;\n\n constructor(host: SpatialKeyHost, { isEnabled = () => true }: KeyNavigationSpatialControllerOptions = {}) {\n this.#host = host;\n this.#isEnabled = isEnabled;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.#host.addEventListener('keydown', this.#handleKeydown);\n }\n\n hostDisconnected(): void {\n this.#host.removeEventListener('keydown', this.#handleKeydown);\n }\n\n #handleKeydown = (event: KeyboardEvent): void => {\n if (!this.#isEnabled() || event.composedPath()[0] !== this.#host) return;\n const command = getSpatialKeyCommand(event);\n if (!command) return;\n this.#host.dispatchEvent(\n new CustomEvent<SpatialKeyCommand>('nve-key', {\n bubbles: false,\n cancelable: false,\n composed: false,\n detail: command\n })\n );\n };\n}\n\nfunction getSpatialKeyCommand(event: KeyboardEvent): SpatialKeyCommand | undefined {\n switch (event.key) {\n case 'ArrowDown':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 0,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: -1\n };\n case 'ArrowLeft':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: -1,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 0\n };\n case 'ArrowRight':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 1,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 0\n };\n case 'ArrowUp':\n return {\n ctrlKey: event.ctrlKey,\n event,\n horizontal: 0,\n key: event.key,\n kind: 'direction',\n shiftKey: event.shiftKey,\n vertical: 1\n };\n case '+':\n case '-':\n case '=':\n return { event, key: event.key, kind: 'zoom' };\n default:\n return undefined;\n }\n}\n"],"mappings":";AA8BA,IAAaA,IAAb,MAA0E;CACxE;CACA;CAEA,YAAY,GAAsB,EAAE,qBAAkB,OAAgD,CAAC,GAAG;EAGxG,AAFA,KAAKC,KAAQC,GACb,KAAKC,KAAaC,GAClBF,EAAK,cAAc,IAAI;CACzB;CAEA,gBAAsB;EACpB,KAAKD,GAAM,iBAAiB,WAAW,KAAKI,EAAc;CAC5D;CAEA,mBAAyB;EACvB,KAAKJ,GAAM,oBAAoB,WAAW,KAAKI,EAAc;CAC/D;CAEA,MAAkB,MAA+B;EAC/C,IAAI,CAAC,KAAKF,GAAW,KAAKG,EAAM,aAAa,CAAC,CAAC,OAAO,KAAKL,IAAO;EAClE,IAAMM,IAAUC,EAAqBF,CAAK;EAC1C,AAAKC,KACL,KAAKN,GAAM,cACT,IAAI,YAA+B,WAAW;GAC5C,SAAS;GACT,YAAY;GACZ,UAAU;GACV,QAAQM;EACV,CAAC,CACH;CACF;AACF;AAEA,SAASC,EAAqB,GAAqD;CACjF,QAAQF,EAAM,KAAd;EACE,KAAK,aACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK,aACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK,cACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK,WACH,OAAO;GACL,SAASA,EAAM;GACf;GACA,YAAY;GACZ,KAAKA,EAAM;GACX,MAAM;GACN,UAAUA,EAAM;GAChB,UAAU;EACZ;EACF,KAAK;EACL,KAAK;EACL,KAAK,KACH,OAAO;GAAE;GAAO,KAAKA,EAAM;GAAK,MAAM;EAAO;EAC/C,SACE;CACJ;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.examples.js","names":[],"sources":["../../../src/internal/controllers/popover.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport '@nvidia-elements/core/forms/define.js';\nimport '@nvidia-elements/core/button/define.js';\nimport '@nvidia-elements/core/icon-button/define.js';\nimport '@nvidia-elements/core/search/define.js';\nimport '@nvidia-elements/core/dialog/define.js';\nimport '@nvidia-elements/core/tooltip/define.js';\nimport '@nvidia-elements/core/toast/define.js';\nimport '@nvidia-elements/core/drawer/define.js';\nimport '@nvidia-elements/core/dropdown/define.js';\nimport '@nvidia-elements/core/notification/define.js';\nimport '@nvidia-elements/core/toggletip/define.js';\n\nexport default {\n title: 'Elements/Popovers',\n parameters: {\n layout: 'centered'\n }\n}\n\n/* eslint-disable @nvidia-elements/lint/no-missing-popover-trigger */\n\n/**\n * @summary Anchor-based positioning where popovers anchor to specific elements rather than their triggers.\n * @tags test-case\n */\nexport const Anchor = {\n render: () => html`\n <nve-tooltip id=\"popover-1\" anchor=\"btn-2\">tooltip 1</nve-tooltip>\n <nve-tooltip id=\"popover-2\" anchor=\"btn-1\">tooltip 2</nve-tooltip>\n <div nve-layout=\"row gap:xs align:center\">\n <nve-button id=\"btn-1\" popovertarget=\"popover-1\">button 1</nve-button>\n <nve-button id=\"btn-2\" popovertarget=\"popover-2\">button 2</nve-button>\n </div>\n `\n}\n\n/**\n * @summary Nested popovers within dialogs and notifications, with proper layering and stacking order.\n * @tags test-case\n */\nexport const Nested = {\n render: () => html`\n<style>\n #root-inner { height: 2000px;}\n</style>\n<nve-dialog closable modal>\n <h3 nve-text=\"heading\">Dialog</h3>\n <p nve-text=\"body\" style=\"margin-bottom: 48px\">hello there</p>\n\n <nve-button id=\"dropdown-btn\">search</nve-button>\n <nve-dropdown anchor=\"dropdown-btn\" closable position=\"bottom\" alignment=\"start\">\n <nve-search rounded>\n <label>search dataset</label>\n <nve-icon-button id=\"tooltip-btn\" icon-name=\"information-circle\" container=\"flat\" aria-label=\"more details\" slot=\"label\"></nve-icon-button>\n <input type=\"search\" placeholder=\"search\" />\n </nve-search>\n <nve-tooltip anchor=\"tooltip-btn\" position=\"top\">hello there</nve-tooltip>\n </nve-dropdown>\n</nve-dialog>\n\n<nve-notification closable position=\"bottom\" alignment=\"end\">\n <h3 nve-text=\"label\">notification</h3>\n <p nve-text=\"body\">some text content in a notification</p> \n</nve-notification>\n `\n}\n\n/**\n * @summary Programmatic popover control with async operations before showing the popover.\n * @tags test-case\n */\nexport const ProgrammaticTrigger = {\n render: () => html`\n<nve-toast hidden close-timeout=\"3000\">hello there</nve-toast>\n<nve-button>open after 2s</nve-button>\n\n<script type=\"module\">\n const toast = document.querySelector('nve-toast');\n const button = document.querySelector('nve-button');\n\n button.addEventListener('click', async () => {\n await new Promise(r => setTimeout(r, 2000)); // do an async task then open the popover\n toast.showPopover();\n });\n</script>`\n}\n\n/**\n * @summary Interactive showcase of all popover types (tooltip, toast, drawer, dropdown, dialog, notification) using modern popovertarget API.\n */\nexport const Interactive = {\n render: () => html`\n <div nve-layout=\"row align:center gap:xl\" style=\"height: 300px\">\n <nve-tooltip id=\"tooltip\">hello there</nve-tooltip>\n <nve-button popovertarget=\"tooltip\">tooltip</nve-button>\n\n <nve-toast id=\"toast\" close-timeout=\"1500\">copied!</nve-toast>\n <nve-button popovertarget=\"toast\">toast</nve-button>\n\n <nve-drawer id=\"drawer\" closable modal>\n <nve-drawer-header>\n <h3 nve-text=\"heading semibold sm\">Title</h3>\n </nve-drawer-header>\n <p nve-text=\"body\">some text content in a drawer</p>\n </nve-drawer>\n <nve-button popovertarget=\"drawer\">drawer</nve-button>\n\n <nve-dropdown id=\"dropdown\" closable>\n <h3 nve-text=\"heading\">Title</h3>\n <p nve-text=\"body\">some text content in a dropdown</p>\n </nve-dropdown>\n <nve-button popovertarget=\"dropdown\">dropdown</nve-button>\n\n <nve-dialog id=\"dialog\" closable modal>\n <h3 nve-text=\"heading\">Title</h3>\n <p nve-text=\"body\">some text content in a closable dialog</p>\n </nve-dialog>\n <nve-button popovertarget=\"dialog\">dialog</nve-button>\n\n <nve-notification id=\"notification\" closable position=\"bottom\" alignment=\"end\" close-timeout=\"2000\">\n <h3 nve-text=\"label\">notification</h3>\n <p nve-text=\"body\">some text content in a notification</p> \n </nve-notification>\n <nve-button popovertarget=\"notification\">notification snackbar</nve-button>\n </div>\n `\n}\n\n/* eslint-disable @nvidia-elements/lint/no-deprecated-popover-attributes */\n\n/**\n * @deprecated\n * @summary Legacy implementation showing all popover types using the older trigger/behavior-trigger API for backward compatibility.\n * @tags test-case\n */\nexport const LegacyInteractive = {\n render: () => html`\n <div nve-layout=\"row align:center gap:xl\" style=\"height: 300px\">\n <nve-tooltip trigger=\"tooltip-btn\" behavior-trigger position=\"top\" hidden>hello there</nve-tooltip>\n <nve-button id=\"tooltip-btn\">tooltip</nve-button>\n\n <nve-button id=\"toast-btn\">toast</nve-button>\n <nve-toast trigger=\"toast-btn\" behavior-trigger position=\"top\" close-timeout=\"1500\" hidden>copied!</nve-toast>\n\n <nve-button id=\"drawer-btn\" size=\"sm\">drawer</nve-button>\n <nve-drawer trigger=\"drawer-btn\" behavior-trigger hidden closable modal>\n <nve-drawer-header>\n <h3 nve-text=\"heading semibold sm\">Title</h3>\n </nve-drawer-header>\n <p nve-text=\"body\">some text content in a drawer</p>\n </nve-drawer>\n\n <nve-button id=\"dropdown-btn\">dropdown</nve-button>\n <nve-dropdown trigger=\"dropdown-btn\" behavior-trigger closable hidden>\n <h3 nve-text=\"heading\">Title</h3>\n <p nve-text=\"body\">some text content in a dropdown</p>\n </nve-dropdown>\n\n <nve-button id=\"dialog-btn\">dialog</nve-button>\n <nve-dialog trigger=\"dialog-btn\" behavior-trigger closable modal hidden>\n <h3 nve-text=\"heading\">Title</h3>\n <p nve-text=\"body\">some text content in a closable dialog</p>\n </nve-dialog>\n\n <nve-button id=\"notification-btn\">notification snackbar</nve-button>\n <nve-notification trigger=\"notification-btn\" behavior-trigger hidden closable position=\"bottom\" alignment=\"end\" close-timeout=\"2000\">\n <h3 nve-text=\"label\">notification</h3>\n <p nve-text=\"body\">some text content in a notification</p> \n </nve-notification>\n </div>\n `\n}\n\n/**\n * @summary Simple modal dialog with keyboard accessibility, including escape key to close functionality.\n * @tags test-case\n */\nexport const Closable = {\n render: () => html`\n <nve-button popovertarget=\"popover\">open dialog</nve-button>\n <nve-dialog id=\"popover\" modal>\n <p nve-text=\"body\">Press \"escape\" key to close.</p>\n </nve-dialog>\n `\n}\n\n/**\n * @summary example of declarative popovers using the Invoker Commands API\n */\nexport const InvokerCommand = {\n render: () => html`\n <nve-button commandfor=\"popover\" command=\"toggle-popover\">toggle-popover</nve-button>\n <nve-button commandfor=\"popover\" command=\"show-popover\">show-popover</nve-button>\n <nve-toggletip id=\"popover\">\n toggletip\n <nve-button commandfor=\"popover\" command=\"hide-popover\">hide-popover</nve-button>\n </nve-toggletip>\n `\n};\n\n/**\n * @summary Custom events like many standard DOM events bubble. When listening\n * to larger DOM trees, check which element dispatched the source event.\n */\nexport const EventBubbling = {\n render: () => html`\n <div style=\"width: 100vw; height: 100vh;\">\n <p nve-text=\"body\" id=\"event-example\">event:</p>\n <nve-button popovertarget=\"event-example-dialog\">open</nve-button>\n\n <nve-dialog id=\"event-example-dialog\" closable modal (close)=\"close($event)\" (open)=\"open($event)\">\n <nve-dialog-header>Header</nve-dialog-header>\n <div>\n <nve-button popovertarget=\"event-example-dropdown\">show dropdown</nve-button>\n </div>\n <nve-dropdown id=\"event-example-dropdown\">\n dropdown content\n </nve-dropdown>\n </nve-dialog>\n </div>\n\n <script type=\"module\">\n const dialog = document.querySelector('#event-example-dialog');\n const eventLabel = document.querySelector('#event-example');\n\n // Custom events like many standard DOM events bubble. By listening to\n // larger DOM trees check which element dispatched the source event\n dialog.addEventListener('open', e => {\n eventLabel.innerText = 'open: ' + e.target.localName;\n });\n\n dialog.addEventListener('close', e => {\n eventLabel.innerText = 'close: ' + e.target.localName;\n });\n </script>\n `\n}\n"],"mappings":";AAGA,
|
|
1
|
+
{"version":3,"file":"popover.examples.js","names":["popover_examples_default"],"sources":["../../../src/internal/controllers/popover.examples.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { html } from 'lit';\nimport '@nvidia-elements/core/forms/define.js';\nimport '@nvidia-elements/core/button/define.js';\nimport '@nvidia-elements/core/icon-button/define.js';\nimport '@nvidia-elements/core/search/define.js';\nimport '@nvidia-elements/core/dialog/define.js';\nimport '@nvidia-elements/core/tooltip/define.js';\nimport '@nvidia-elements/core/toast/define.js';\nimport '@nvidia-elements/core/drawer/define.js';\nimport '@nvidia-elements/core/dropdown/define.js';\nimport '@nvidia-elements/core/notification/define.js';\nimport '@nvidia-elements/core/toggletip/define.js';\n\nexport default {\n title: 'Elements/Popovers',\n parameters: {\n layout: 'centered'\n }\n}\n\n/* eslint-disable @nvidia-elements/lint/no-missing-popover-trigger */\n\n/**\n * @summary Anchor-based positioning where popovers anchor to specific elements rather than their triggers.\n * @tags test-case\n */\nexport const Anchor = {\n render: () => html`\n <nve-tooltip id=\"popover-1\" anchor=\"btn-2\">tooltip 1</nve-tooltip>\n <nve-tooltip id=\"popover-2\" anchor=\"btn-1\">tooltip 2</nve-tooltip>\n <div nve-layout=\"row gap:xs align:center\">\n <nve-button id=\"btn-1\" popovertarget=\"popover-1\">button 1</nve-button>\n <nve-button id=\"btn-2\" popovertarget=\"popover-2\">button 2</nve-button>\n </div>\n `\n}\n\n/**\n * @summary Nested popovers within dialogs and notifications, with proper layering and stacking order.\n * @tags test-case\n */\nexport const Nested = {\n render: () => html`\n<style>\n #root-inner { height: 2000px;}\n</style>\n<nve-dialog closable modal>\n <h3 nve-text=\"heading\">Dialog</h3>\n <p nve-text=\"body\" style=\"margin-bottom: 48px\">hello there</p>\n\n <nve-button id=\"dropdown-btn\">search</nve-button>\n <nve-dropdown anchor=\"dropdown-btn\" closable position=\"bottom\" alignment=\"start\">\n <nve-search rounded>\n <label>search dataset</label>\n <nve-icon-button id=\"tooltip-btn\" icon-name=\"information-circle\" container=\"flat\" aria-label=\"more details\" slot=\"label\"></nve-icon-button>\n <input type=\"search\" placeholder=\"search\" />\n </nve-search>\n <nve-tooltip anchor=\"tooltip-btn\" position=\"top\">hello there</nve-tooltip>\n </nve-dropdown>\n</nve-dialog>\n\n<nve-notification closable position=\"bottom\" alignment=\"end\">\n <h3 nve-text=\"label\">notification</h3>\n <p nve-text=\"body\">some text content in a notification</p> \n</nve-notification>\n `\n}\n\n/**\n * @summary Programmatic popover control with async operations before showing the popover.\n * @tags test-case\n */\nexport const ProgrammaticTrigger = {\n render: () => html`\n<nve-toast hidden close-timeout=\"3000\">hello there</nve-toast>\n<nve-button>open after 2s</nve-button>\n\n<script type=\"module\">\n const toast = document.querySelector('nve-toast');\n const button = document.querySelector('nve-button');\n\n button.addEventListener('click', async () => {\n await new Promise(r => setTimeout(r, 2000)); // do an async task then open the popover\n toast.showPopover();\n });\n</script>`\n}\n\n/**\n * @summary Interactive showcase of all popover types (tooltip, toast, drawer, dropdown, dialog, notification) using modern popovertarget API.\n */\nexport const Interactive = {\n render: () => html`\n <div nve-layout=\"row align:center gap:xl\" style=\"height: 300px\">\n <nve-tooltip id=\"tooltip\">hello there</nve-tooltip>\n <nve-button popovertarget=\"tooltip\">tooltip</nve-button>\n\n <nve-toast id=\"toast\" close-timeout=\"1500\">copied!</nve-toast>\n <nve-button popovertarget=\"toast\">toast</nve-button>\n\n <nve-drawer id=\"drawer\" closable modal>\n <nve-drawer-header>\n <h3 nve-text=\"heading semibold sm\">Title</h3>\n </nve-drawer-header>\n <p nve-text=\"body\">some text content in a drawer</p>\n </nve-drawer>\n <nve-button popovertarget=\"drawer\">drawer</nve-button>\n\n <nve-dropdown id=\"dropdown\" closable>\n <h3 nve-text=\"heading\">Title</h3>\n <p nve-text=\"body\">some text content in a dropdown</p>\n </nve-dropdown>\n <nve-button popovertarget=\"dropdown\">dropdown</nve-button>\n\n <nve-dialog id=\"dialog\" closable modal>\n <h3 nve-text=\"heading\">Title</h3>\n <p nve-text=\"body\">some text content in a closable dialog</p>\n </nve-dialog>\n <nve-button popovertarget=\"dialog\">dialog</nve-button>\n\n <nve-notification id=\"notification\" closable position=\"bottom\" alignment=\"end\" close-timeout=\"2000\">\n <h3 nve-text=\"label\">notification</h3>\n <p nve-text=\"body\">some text content in a notification</p> \n </nve-notification>\n <nve-button popovertarget=\"notification\">notification snackbar</nve-button>\n </div>\n `\n}\n\n/* eslint-disable @nvidia-elements/lint/no-deprecated-popover-attributes */\n\n/**\n * @deprecated\n * @summary Legacy implementation showing all popover types using the older trigger/behavior-trigger API for backward compatibility.\n * @tags test-case\n */\nexport const LegacyInteractive = {\n render: () => html`\n <div nve-layout=\"row align:center gap:xl\" style=\"height: 300px\">\n <nve-tooltip trigger=\"tooltip-btn\" behavior-trigger position=\"top\" hidden>hello there</nve-tooltip>\n <nve-button id=\"tooltip-btn\">tooltip</nve-button>\n\n <nve-button id=\"toast-btn\">toast</nve-button>\n <nve-toast trigger=\"toast-btn\" behavior-trigger position=\"top\" close-timeout=\"1500\" hidden>copied!</nve-toast>\n\n <nve-button id=\"drawer-btn\" size=\"sm\">drawer</nve-button>\n <nve-drawer trigger=\"drawer-btn\" behavior-trigger hidden closable modal>\n <nve-drawer-header>\n <h3 nve-text=\"heading semibold sm\">Title</h3>\n </nve-drawer-header>\n <p nve-text=\"body\">some text content in a drawer</p>\n </nve-drawer>\n\n <nve-button id=\"dropdown-btn\">dropdown</nve-button>\n <nve-dropdown trigger=\"dropdown-btn\" behavior-trigger closable hidden>\n <h3 nve-text=\"heading\">Title</h3>\n <p nve-text=\"body\">some text content in a dropdown</p>\n </nve-dropdown>\n\n <nve-button id=\"dialog-btn\">dialog</nve-button>\n <nve-dialog trigger=\"dialog-btn\" behavior-trigger closable modal hidden>\n <h3 nve-text=\"heading\">Title</h3>\n <p nve-text=\"body\">some text content in a closable dialog</p>\n </nve-dialog>\n\n <nve-button id=\"notification-btn\">notification snackbar</nve-button>\n <nve-notification trigger=\"notification-btn\" behavior-trigger hidden closable position=\"bottom\" alignment=\"end\" close-timeout=\"2000\">\n <h3 nve-text=\"label\">notification</h3>\n <p nve-text=\"body\">some text content in a notification</p> \n </nve-notification>\n </div>\n `\n}\n\n/**\n * @summary Simple modal dialog with keyboard accessibility, including escape key to close functionality.\n * @tags test-case\n */\nexport const Closable = {\n render: () => html`\n <nve-button popovertarget=\"popover\">open dialog</nve-button>\n <nve-dialog id=\"popover\" modal>\n <p nve-text=\"body\">Press \"escape\" key to close.</p>\n </nve-dialog>\n `\n}\n\n/**\n * @summary example of declarative popovers using the Invoker Commands API\n */\nexport const InvokerCommand = {\n render: () => html`\n <nve-button commandfor=\"popover\" command=\"toggle-popover\">toggle-popover</nve-button>\n <nve-button commandfor=\"popover\" command=\"show-popover\">show-popover</nve-button>\n <nve-toggletip id=\"popover\">\n toggletip\n <nve-button commandfor=\"popover\" command=\"hide-popover\">hide-popover</nve-button>\n </nve-toggletip>\n `\n};\n\n/**\n * @summary Custom events like many standard DOM events bubble. When listening\n * to larger DOM trees, check which element dispatched the source event.\n */\nexport const EventBubbling = {\n render: () => html`\n <div style=\"width: 100vw; height: 100vh;\">\n <p nve-text=\"body\" id=\"event-example\">event:</p>\n <nve-button popovertarget=\"event-example-dialog\">open</nve-button>\n\n <nve-dialog id=\"event-example-dialog\" closable modal (close)=\"close($event)\" (open)=\"open($event)\">\n <nve-dialog-header>Header</nve-dialog-header>\n <div>\n <nve-button popovertarget=\"event-example-dropdown\">show dropdown</nve-button>\n </div>\n <nve-dropdown id=\"event-example-dropdown\">\n dropdown content\n </nve-dropdown>\n </nve-dialog>\n </div>\n\n <script type=\"module\">\n const dialog = document.querySelector('#event-example-dialog');\n const eventLabel = document.querySelector('#event-example');\n\n // Custom events like many standard DOM events bubble. By listening to\n // larger DOM trees check which element dispatched the source event\n dialog.addEventListener('open', e => {\n eventLabel.innerText = 'open: ' + e.target.localName;\n });\n\n dialog.addEventListener('close', e => {\n eventLabel.innerText = 'close: ' + e.target.localName;\n });\n </script>\n `\n}\n"],"mappings":";AAGA,IAAAA,IAAS"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { attachInternals as e } from "../utils/a11y.js";
|
|
2
|
-
|
|
2
|
+
// src/internal/controllers/state-expanded.controller.ts
|
|
3
3
|
function t() {
|
|
4
4
|
return (e) => e.addInitializer((e) => new n(e));
|
|
5
5
|
}
|
|
@@ -14,7 +14,6 @@ var n = class {
|
|
|
14
14
|
this.host.expanded !== null && this.host.expanded !== void 0 && (this.host._internals.ariaExpanded = `${this.host.expanded}`), this.host.expanded ? this.host._internals.states.add("expanded") : this.host._internals.states.delete("expanded"), this.host.readOnly && (this.host._internals.ariaExpanded = null, this.host._internals.states.delete("expanded"));
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
|
-
//#endregion
|
|
18
17
|
export { n as StateExpandedController, t as stateExpanded };
|
|
19
18
|
|
|
20
19
|
//# sourceMappingURL=state-expanded.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-expanded.controller.js","names":[],"sources":["../../../src/internal/controllers/state-expanded.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds expanded support for interactive custom elements including CSS State psuedo-selector :state(expanded) and aria-expanded.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded\n */\nexport function stateExpanded<T extends Expanded>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateExpandedController(instance));\n}\n\nexport type Expanded = ReactiveElement & { expanded: boolean; readOnly?: boolean; _internals?: ElementInternals };\n\nexport class StateExpandedController<T extends Expanded> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.expanded !== null && this.host.expanded !== undefined) {\n this.host._internals!.ariaExpanded = `${this.host.expanded}`;\n }\n\n if (this.host.expanded) {\n this.host._internals!.states.add('expanded');\n } else {\n this.host._internals!.states.delete('expanded');\n }\n\n if (this.host.readOnly) {\n this.host._internals!.ariaExpanded = null;\n this.host._internals!.states.delete('expanded');\n }\n }\n}\n"],"mappings":";;AAYA,
|
|
1
|
+
{"version":3,"file":"state-expanded.controller.js","names":["stateExpanded","target","StateExpandedController","instance","host"],"sources":["../../../src/internal/controllers/state-expanded.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds expanded support for interactive custom elements including CSS State psuedo-selector :state(expanded) and aria-expanded.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded\n */\nexport function stateExpanded<T extends Expanded>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateExpandedController(instance));\n}\n\nexport type Expanded = ReactiveElement & { expanded: boolean; readOnly?: boolean; _internals?: ElementInternals };\n\nexport class StateExpandedController<T extends Expanded> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.expanded !== null && this.host.expanded !== undefined) {\n this.host._internals!.ariaExpanded = `${this.host.expanded}`;\n }\n\n if (this.host.expanded) {\n this.host._internals!.states.add('expanded');\n } else {\n this.host._internals!.states.delete('expanded');\n }\n\n if (this.host.readOnly) {\n this.host._internals!.ariaExpanded = null;\n this.host._internals!.states.delete('expanded');\n }\n }\n}\n"],"mappings":";;AAYA,SAAgBA,IAAoD;CAClE,QAAQ,MACNC,EAAO,gBAAiB,MAAgB,IAAIC,EAAwBC,CAAQ,CAAC;AACjF;AAIA,IAAaD,IAAb,MAAuF;CACrF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAAE,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,EAAgB,KAAK,IAAI;CAC3B;CAEA,cAAc;EAWZ,AAVI,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,aAAa,KAAA,MACxD,KAAK,KAAK,WAAY,eAAe,GAAG,KAAK,KAAK,aAGhD,KAAK,KAAK,WACZ,KAAK,KAAK,WAAY,OAAO,IAAI,UAAU,IAE3C,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU,GAG5C,KAAK,KAAK,aACZ,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU;CAElD;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { attachInternals as e } from "../utils/a11y.js";
|
|
2
|
-
|
|
2
|
+
// src/internal/controllers/state-highlighted.controller.ts
|
|
3
3
|
function t() {
|
|
4
4
|
return (e) => e.addInitializer((e) => new n(e));
|
|
5
5
|
}
|
|
@@ -14,7 +14,6 @@ var n = class {
|
|
|
14
14
|
this.host.highlighted ? this.host._internals.states.add("highlighted") : this.host._internals.states.delete("highlighted");
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
|
-
//#endregion
|
|
18
17
|
export { n as StateHighlightedController, t as stateHighlighted };
|
|
19
18
|
|
|
20
19
|
//# sourceMappingURL=state-highlighted.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-highlighted.controller.js","names":[],"sources":["../../../src/internal/controllers/state-highlighted.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds highlighted support for interactive custom elements including CSS State psuedo-selector :state(highlighted).\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n */\nexport function stateHighlighted<T extends Highlighted>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateHighlightedController(instance));\n}\n\nexport type Highlighted = ReactiveElement & { highlighted: boolean; _internals?: ElementInternals };\n\nexport class StateHighlightedController<T extends Highlighted> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.highlighted) {\n this.host._internals!.states.add('highlighted');\n } else {\n this.host._internals!.states.delete('highlighted');\n }\n }\n}\n"],"mappings":";;AAWA,
|
|
1
|
+
{"version":3,"file":"state-highlighted.controller.js","names":["stateHighlighted","target","StateHighlightedController","instance","host"],"sources":["../../../src/internal/controllers/state-highlighted.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds highlighted support for interactive custom elements including CSS State psuedo-selector :state(highlighted).\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n */\nexport function stateHighlighted<T extends Highlighted>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateHighlightedController(instance));\n}\n\nexport type Highlighted = ReactiveElement & { highlighted: boolean; _internals?: ElementInternals };\n\nexport class StateHighlightedController<T extends Highlighted> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.highlighted) {\n this.host._internals!.states.add('highlighted');\n } else {\n this.host._internals!.states.delete('highlighted');\n }\n }\n}\n"],"mappings":";;AAWA,SAAgBA,IAA0D;CACxE,QAAQ,MACNC,EAAO,gBAAiB,MAAgB,IAAIC,EAA2BC,CAAQ,CAAC;AACpF;AAIA,IAAaD,IAAb,MAA6F;CAC3F,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAAE,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,EAAgB,KAAK,IAAI;CAC3B;CAEA,cAAc;EACZ,AAAI,KAAK,KAAK,cACZ,KAAK,KAAK,WAAY,OAAO,IAAI,aAAa,IAE9C,KAAK,KAAK,WAAY,OAAO,OAAO,aAAa;CAErD;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { endOfScrollBox as e } from "../utils/dom.js";
|
|
2
2
|
import { attachInternals as t } from "../utils/a11y.js";
|
|
3
|
-
|
|
3
|
+
// src/internal/controllers/state-scroll.controller.ts
|
|
4
4
|
function n() {
|
|
5
5
|
return (e) => e.addInitializer((e) => new r(e));
|
|
6
6
|
}
|
|
@@ -54,7 +54,6 @@ var r = class {
|
|
|
54
54
|
e?.has("scrolling") && e.delete("scrolling");
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
|
-
//#endregion
|
|
58
57
|
export { r as StateScrollController, n as stateScroll };
|
|
59
58
|
|
|
60
59
|
//# sourceMappingURL=state-scroll.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-scroll.controller.js","names":[],"sources":["../../../src/internal/controllers/state-scroll.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals, endOfScrollBox } from '@nvidia-elements/core/internal';\n\n/**\n * Adds active scroll state detection\n */\nexport function stateScroll<T extends Scroll>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateScrollController(instance));\n}\n\nexport interface StateScrollConfig {\n target?: HTMLElement;\n scrollOffset?: number;\n}\n\nexport type Scroll = ReactiveElement & {\n _internals?: ElementInternals;\n stateScrollConfig?: StateScrollConfig;\n};\n\nexport class StateScrollController<T extends Scroll> implements ReactiveController {\n #activeTarget?: HTMLElement;\n #scrollEndTimeout?: ReturnType<typeof setTimeout>;\n\n get #target(): HTMLElement {\n const target = this.host.stateScrollConfig?.target;\n return target ? target : this.host;\n }\n\n get #offset() {\n return this.host.stateScrollConfig?.scrollOffset ?? 0;\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n attachInternals(this.host);\n this.#syncTarget();\n }\n\n hostUpdated() {\n this.#syncTarget();\n }\n\n hostDisconnected() {\n this.#removeTargetListeners();\n }\n\n #syncTarget() {\n const target = this.#target;\n if (this.#activeTarget === target) return;\n\n this.#removeTargetListeners();\n this.#activeTarget = target;\n this.#activeTarget.addEventListener('scrollend', this.#onScrollEnd);\n this.#startScroll();\n }\n\n #onScrollEnd = () => {\n this.#cancelScrollEnd();\n // Keep brief scroll bursts in one state to reduce repeated style invalidation.\n if (this.host._internals!.states.has('scrolling')) {\n this.#scrollEndTimeout = setTimeout(() => {\n this.#scrollEndTimeout = undefined;\n this.host._internals!.states.delete('scrolling');\n }, 100);\n }\n this.#startScroll();\n\n if (this.#activeTarget && endOfScrollBox(this.#activeTarget, this.#offset)) {\n this.host.dispatchEvent(new CustomEvent('scrollboxend', { bubbles: true, composed: true }));\n }\n };\n\n #onScroll = () => {\n this.#cancelScrollEnd();\n const states = this.host._internals!.states;\n if (!states.has('scrolling')) states.add('scrolling');\n };\n\n #cancelScrollEnd() {\n if (this.#scrollEndTimeout !== undefined) {\n clearTimeout(this.#scrollEndTimeout);\n this.#scrollEndTimeout = undefined;\n }\n }\n\n #startScroll() {\n this.#activeTarget?.removeEventListener('scroll', this.#onScroll);\n this.#activeTarget?.addEventListener('scroll', this.#onScroll, { once: true });\n }\n\n #removeTargetListeners() {\n this.#cancelScrollEnd();\n this.#activeTarget?.removeEventListener('scroll', this.#onScroll);\n this.#activeTarget?.removeEventListener('scrollend', this.#onScrollEnd);\n this.#activeTarget = undefined;\n const states = this.host._internals?.states;\n if (states?.has('scrolling')) states.delete('scrolling');\n }\n}\n"],"mappings":";;;AAUA,
|
|
1
|
+
{"version":3,"file":"state-scroll.controller.js","names":["stateScroll","target","StateScrollController","instance","#target","#offset","host","attachInternals","#syncTarget","#removeTargetListeners","#activeTarget","#onScrollEnd","#startScroll","#cancelScrollEnd","#scrollEndTimeout","endOfScrollBox","states","#onScroll"],"sources":["../../../src/internal/controllers/state-scroll.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals, endOfScrollBox } from '@nvidia-elements/core/internal';\n\n/**\n * Adds active scroll state detection\n */\nexport function stateScroll<T extends Scroll>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateScrollController(instance));\n}\n\nexport interface StateScrollConfig {\n target?: HTMLElement;\n scrollOffset?: number;\n}\n\nexport type Scroll = ReactiveElement & {\n _internals?: ElementInternals;\n stateScrollConfig?: StateScrollConfig;\n};\n\nexport class StateScrollController<T extends Scroll> implements ReactiveController {\n #activeTarget?: HTMLElement;\n #scrollEndTimeout?: ReturnType<typeof setTimeout>;\n\n get #target(): HTMLElement {\n const target = this.host.stateScrollConfig?.target;\n return target ? target : this.host;\n }\n\n get #offset() {\n return this.host.stateScrollConfig?.scrollOffset ?? 0;\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n await this.host.updateComplete;\n attachInternals(this.host);\n this.#syncTarget();\n }\n\n hostUpdated() {\n this.#syncTarget();\n }\n\n hostDisconnected() {\n this.#removeTargetListeners();\n }\n\n #syncTarget() {\n const target = this.#target;\n if (this.#activeTarget === target) return;\n\n this.#removeTargetListeners();\n this.#activeTarget = target;\n this.#activeTarget.addEventListener('scrollend', this.#onScrollEnd);\n this.#startScroll();\n }\n\n #onScrollEnd = () => {\n this.#cancelScrollEnd();\n // Keep brief scroll bursts in one state to reduce repeated style invalidation.\n if (this.host._internals!.states.has('scrolling')) {\n this.#scrollEndTimeout = setTimeout(() => {\n this.#scrollEndTimeout = undefined;\n this.host._internals!.states.delete('scrolling');\n }, 100);\n }\n this.#startScroll();\n\n if (this.#activeTarget && endOfScrollBox(this.#activeTarget, this.#offset)) {\n this.host.dispatchEvent(new CustomEvent('scrollboxend', { bubbles: true, composed: true }));\n }\n };\n\n #onScroll = () => {\n this.#cancelScrollEnd();\n const states = this.host._internals!.states;\n if (!states.has('scrolling')) states.add('scrolling');\n };\n\n #cancelScrollEnd() {\n if (this.#scrollEndTimeout !== undefined) {\n clearTimeout(this.#scrollEndTimeout);\n this.#scrollEndTimeout = undefined;\n }\n }\n\n #startScroll() {\n this.#activeTarget?.removeEventListener('scroll', this.#onScroll);\n this.#activeTarget?.addEventListener('scroll', this.#onScroll, { once: true });\n }\n\n #removeTargetListeners() {\n this.#cancelScrollEnd();\n this.#activeTarget?.removeEventListener('scroll', this.#onScroll);\n this.#activeTarget?.removeEventListener('scrollend', this.#onScrollEnd);\n this.#activeTarget = undefined;\n const states = this.host._internals?.states;\n if (states?.has('scrolling')) states.delete('scrolling');\n }\n}\n"],"mappings":";;;AAUA,SAAgBA,IAAgD;CAC9D,QAAQ,MACNC,EAAO,gBAAiB,MAAgB,IAAIC,EAAsBC,CAAQ,CAAC;AAC/E;AAYA,IAAaD,IAAb,MAAmF;CACjF;CACA;CAEA,IAAIE,KAAuB;EAEzB,OADe,KAAK,KAAK,mBAAmB,UACnB,KAAK;CAChC;CAEA,IAAIC,KAAU;EACZ,OAAO,KAAK,KAAK,mBAAmB,gBAAgB;CACtD;CAEA,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAAC,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,MAAM,gBAAgB;EAGpB,AAFA,MAAM,KAAK,KAAK,gBAChBC,EAAgB,KAAK,IAAI,GACzB,KAAKC,GAAY;CACnB;CAEA,cAAc;EACZ,KAAKA,GAAY;CACnB;CAEA,mBAAmB;EACjB,KAAKC,GAAuB;CAC9B;CAEA,KAAc;EACZ,IAAMR,IAAS,KAAKG;EACpB,AAAI,KAAKM,OAAkBT,MAE3B,KAAKQ,GAAuB,GAC5B,KAAKC,KAAgBT,GACrB,KAAKS,GAAc,iBAAiB,aAAa,KAAKC,EAAY,GAClE,KAAKC,GAAa;CACpB;CAEA,WAAqB;EAWnB,AAVA,KAAKC,GAAiB,GAElB,KAAK,KAAK,WAAY,OAAO,IAAI,WAAW,MAC9C,KAAKC,KAAoB,iBAAiB;GAExC,AADA,KAAKA,KAAoB,KAAA,GACzB,KAAK,KAAK,WAAY,OAAO,OAAO,WAAW;EACjD,GAAG,GAAG,IAER,KAAKF,GAAa,GAEd,KAAKF,MAAiBK,EAAe,KAAKL,IAAe,KAAKL,EAAO,KACvE,KAAK,KAAK,cAAc,IAAI,YAAY,gBAAgB;GAAE,SAAS;GAAM,UAAU;EAAK,CAAC,CAAC;CAE9F;CAEA,WAAkB;EAChB,KAAKQ,GAAiB;EACtB,IAAMG,IAAS,KAAK,KAAK,WAAY;EACrC,AAAKA,EAAO,IAAI,WAAW,KAAGA,EAAO,IAAI,WAAW;CACtD;CAEA,KAAmB;EACjB,AAAI,KAAKF,OAAsB,KAAA,MAC7B,aAAa,KAAKA,EAAiB,GACnC,KAAKA,KAAoB,KAAA;CAE7B;CAEA,KAAe;EAEb,AADA,KAAKJ,IAAe,oBAAoB,UAAU,KAAKO,EAAS,GAChE,KAAKP,IAAe,iBAAiB,UAAU,KAAKO,IAAW,EAAE,MAAM,GAAK,CAAC;CAC/E;CAEA,KAAyB;EAIvB,AAHA,KAAKJ,GAAiB,GACtB,KAAKH,IAAe,oBAAoB,UAAU,KAAKO,EAAS,GAChE,KAAKP,IAAe,oBAAoB,aAAa,KAAKC,EAAY,GACtE,KAAKD,KAAgB,KAAA;EACrB,IAAMM,IAAS,KAAK,KAAK,YAAY;EACrC,AAAIA,GAAQ,IAAI,WAAW,KAAGA,EAAO,OAAO,WAAW;CACzD;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { attachInternals as e } from "../utils/a11y.js";
|
|
2
|
-
|
|
2
|
+
// src/internal/controllers/state-selected.controller.ts
|
|
3
3
|
function t() {
|
|
4
4
|
return (e) => e.addInitializer((e) => new n(e));
|
|
5
5
|
}
|
|
@@ -11,18 +11,9 @@ var n = class {
|
|
|
11
11
|
e(this.host);
|
|
12
12
|
}
|
|
13
13
|
hostUpdated() {
|
|
14
|
-
|
|
15
|
-
this.host._internals.ariaSelected = null, this.host._internals.states.delete("selected");
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
if (this.host._internals?.states.has("anchor") && this.host.selected) {
|
|
19
|
-
this.host._internals.ariaSelected = null, this.host._internals.states.add("selected"), this.host.querySelector("a")?.setAttribute("aria-current", "page");
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
this.host.selected !== null && this.host.selected !== void 0 && (this.host._internals.ariaSelected = `${this.host.selected}`), this.host.selected ? this.host._internals.states.add("selected") : this.host._internals.states.delete("selected");
|
|
14
|
+
this.host.readOnly ? (this.host._internals.ariaSelected = null, this.host._internals.states.delete("selected")) : this.host._internals?.states.has("anchor") && this.host.selected ? (this.host._internals.ariaSelected = null, this.host._internals.states.add("selected"), this.host.querySelector("a")?.setAttribute("aria-current", "page")) : (this.host.selected !== null && this.host.selected !== void 0 && (this.host._internals.ariaSelected = `${this.host.selected}`), this.host.selected ? this.host._internals.states.add("selected") : this.host._internals.states.delete("selected"));
|
|
23
15
|
}
|
|
24
16
|
};
|
|
25
|
-
//#endregion
|
|
26
17
|
export { n as StateSelectedController, t as stateSelected };
|
|
27
18
|
|
|
28
19
|
//# sourceMappingURL=state-selected.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-selected.controller.js","names":[],"sources":["../../../src/internal/controllers/state-selected.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds selected support for interactive custom elements including CSS State psuedo-selector :state(selected) and aria-selected.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-selected\n */\nexport function stateSelected<T extends Selected>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateSelectedController(instance));\n}\n\nexport type Selected = ReactiveElement & { selected: boolean; readOnly?: boolean; _internals?: ElementInternals };\n\nexport class StateSelectedController<T extends Selected> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.readOnly) {\n this.host._internals!.ariaSelected = null;\n this.host._internals!.states.delete('selected');\n return;\n }\n\n if (this.host._internals?.states.has('anchor') && this.host.selected) {\n this.host._internals!.ariaSelected = null;\n this.host._internals!.states.add('selected');\n this.host.querySelector('a')?.setAttribute('aria-current', 'page');\n return;\n }\n\n if (this.host.selected !== null && this.host.selected !== undefined) {\n this.host._internals!.ariaSelected = `${this.host.selected}`;\n }\n\n if (this.host.selected) {\n this.host._internals!.states.add('selected');\n } else {\n this.host._internals!.states.delete('selected');\n }\n }\n}\n"],"mappings":";;AAYA,
|
|
1
|
+
{"version":3,"file":"state-selected.controller.js","names":["stateSelected","target","StateSelectedController","instance","host"],"sources":["../../../src/internal/controllers/state-selected.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds selected support for interactive custom elements including CSS State psuedo-selector :state(selected) and aria-selected.\n * https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states\n * https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-selected\n */\nexport function stateSelected<T extends Selected>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) =>\n target.addInitializer!((instance: T) => new StateSelectedController(instance));\n}\n\nexport type Selected = ReactiveElement & { selected: boolean; readOnly?: boolean; _internals?: ElementInternals };\n\nexport class StateSelectedController<T extends Selected> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n }\n\n hostUpdated() {\n if (this.host.readOnly) {\n this.host._internals!.ariaSelected = null;\n this.host._internals!.states.delete('selected');\n return;\n }\n\n if (this.host._internals?.states.has('anchor') && this.host.selected) {\n this.host._internals!.ariaSelected = null;\n this.host._internals!.states.add('selected');\n this.host.querySelector('a')?.setAttribute('aria-current', 'page');\n return;\n }\n\n if (this.host.selected !== null && this.host.selected !== undefined) {\n this.host._internals!.ariaSelected = `${this.host.selected}`;\n }\n\n if (this.host.selected) {\n this.host._internals!.states.add('selected');\n } else {\n this.host._internals!.states.delete('selected');\n }\n }\n}\n"],"mappings":";;AAYA,SAAgBA,IAAoD;CAClE,QAAQ,MACNC,EAAO,gBAAiB,MAAgB,IAAIC,EAAwBC,CAAQ,CAAC;AACjF;AAIA,IAAaD,IAAb,MAAuF;CACrF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAAE,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EACd,EAAgB,KAAK,IAAI;CAC3B;CAEA,cAAc;EACZ,AAAI,KAAK,KAAK,YACZ,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU,KAI5C,KAAK,KAAK,YAAY,OAAO,IAAI,QAAQ,KAAK,KAAK,KAAK,YAC1D,KAAK,KAAK,WAAY,eAAe,MACrC,KAAK,KAAK,WAAY,OAAO,IAAI,UAAU,GAC3C,KAAK,KAAK,cAAc,GAAG,CAAC,EAAE,aAAa,gBAAgB,MAAM,MAI/D,KAAK,KAAK,aAAa,QAAQ,KAAK,KAAK,aAAa,KAAA,MACxD,KAAK,KAAK,WAAY,eAAe,GAAG,KAAK,KAAK,aAGhD,KAAK,KAAK,WACZ,KAAK,KAAK,WAAY,OAAO,IAAI,UAAU,IAE3C,KAAK,KAAK,WAAY,OAAO,OAAO,UAAU;CAElD;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { removeEmptyTextNode as e } from "../utils/dom.js";
|
|
2
2
|
import { attachInternals as t } from "../utils/a11y.js";
|
|
3
|
-
|
|
3
|
+
// src/internal/controllers/type-anchor.controller.ts
|
|
4
4
|
function n() {
|
|
5
5
|
return (e) => e.addInitializer((e) => new r(e));
|
|
6
6
|
}
|
|
@@ -32,7 +32,6 @@ var r = class {
|
|
|
32
32
|
this.#e && this.#i && (this.#e.slot = "anchor", this.#r?.assignedNodes().forEach((t) => e(t)));
|
|
33
33
|
}
|
|
34
34
|
};
|
|
35
|
-
//#endregion
|
|
36
35
|
export { r as TypeAnchorController, n as typeAnchor };
|
|
37
36
|
|
|
38
37
|
//# sourceMappingURL=type-anchor.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-anchor.controller.js","names":[],"sources":["../../../src/internal/controllers/type-anchor.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { removeEmptyTextNode } from '../utils/dom.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds anchor/link support for interactive custom elements.\n */\nexport function typeAnchor<T extends Anchor>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new TypeAnchorController(instance));\n}\n\nexport interface Anchor extends ReactiveElement {\n disabled: boolean;\n readOnly: boolean;\n _internals: ElementInternals;\n}\n\nexport class TypeAnchorController<T extends Anchor> implements ReactiveController {\n get #anchor() {\n return this.#slottedAnchor ? this.#slottedAnchor : this.#parentAnchor;\n }\n\n get #slottedAnchor() {\n // return elements that nest in a slot\n return this.host\n .shadowRoot!.querySelector<HTMLSlotElement>('slot, slot[name=anchor]')\n ?.assignedElements()\n ?.find(e => e?.tagName === 'A');\n }\n\n get #parentAnchor() {\n return this.host.parentElement?.tagName === 'A' ? (this.host.parentElement as HTMLAnchorElement) : null;\n }\n\n get #defaultSlot() {\n return this.host.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])');\n }\n\n get #anchorSlot() {\n return this.host.shadowRoot!.querySelector<HTMLSlotElement>('slot[name=anchor]');\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n attachInternals(this.host);\n await this.host.updateComplete;\n\n this.#updateAnchorSlotAssignment();\n\n if (this.#anchor) {\n this.host.readOnly = true;\n this.host._internals?.states.add('anchor');\n } else {\n this.host._internals?.states.delete('anchor');\n }\n\n if (this.#parentAnchor) {\n this.#parentAnchor.style.textDecoration = 'none';\n this.host.style.cursor = 'pointer';\n }\n\n this.#anchor?.addEventListener('click', e => {\n if (this.host.disabled) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n });\n }\n\n #updateAnchorSlotAssignment() {\n if (this.#anchor && this.#anchorSlot) {\n this.#anchor.slot = 'anchor';\n this.#defaultSlot?.assignedNodes().forEach(node => removeEmptyTextNode(node));\n }\n }\n}\n"],"mappings":";;;AAWA,
|
|
1
|
+
{"version":3,"file":"type-anchor.controller.js","names":["typeAnchor","target","TypeAnchorController","instance","#anchor","#slottedAnchor","#parentAnchor","#defaultSlot","#anchorSlot","host","attachInternals","#updateAnchorSlotAssignment","removeEmptyTextNode","node"],"sources":["../../../src/internal/controllers/type-anchor.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport type { LegacyDecoratorTarget } from '../types/index.js';\nimport { removeEmptyTextNode } from '../utils/dom.js';\nimport { attachInternals } from '../utils/a11y.js';\n\n/**\n * Adds anchor/link support for interactive custom elements.\n */\nexport function typeAnchor<T extends Anchor>(): ClassDecorator {\n return (target: LegacyDecoratorTarget) => target.addInitializer!((instance: T) => new TypeAnchorController(instance));\n}\n\nexport interface Anchor extends ReactiveElement {\n disabled: boolean;\n readOnly: boolean;\n _internals: ElementInternals;\n}\n\nexport class TypeAnchorController<T extends Anchor> implements ReactiveController {\n get #anchor() {\n return this.#slottedAnchor ? this.#slottedAnchor : this.#parentAnchor;\n }\n\n get #slottedAnchor() {\n // return elements that nest in a slot\n return this.host\n .shadowRoot!.querySelector<HTMLSlotElement>('slot, slot[name=anchor]')\n ?.assignedElements()\n ?.find(e => e?.tagName === 'A');\n }\n\n get #parentAnchor() {\n return this.host.parentElement?.tagName === 'A' ? (this.host.parentElement as HTMLAnchorElement) : null;\n }\n\n get #defaultSlot() {\n return this.host.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])');\n }\n\n get #anchorSlot() {\n return this.host.shadowRoot!.querySelector<HTMLSlotElement>('slot[name=anchor]');\n }\n\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n async hostConnected() {\n attachInternals(this.host);\n await this.host.updateComplete;\n\n this.#updateAnchorSlotAssignment();\n\n if (this.#anchor) {\n this.host.readOnly = true;\n this.host._internals?.states.add('anchor');\n } else {\n this.host._internals?.states.delete('anchor');\n }\n\n if (this.#parentAnchor) {\n this.#parentAnchor.style.textDecoration = 'none';\n this.host.style.cursor = 'pointer';\n }\n\n this.#anchor?.addEventListener('click', e => {\n if (this.host.disabled) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n });\n }\n\n #updateAnchorSlotAssignment() {\n if (this.#anchor && this.#anchorSlot) {\n this.#anchor.slot = 'anchor';\n this.#defaultSlot?.assignedNodes().forEach(node => removeEmptyTextNode(node));\n }\n }\n}\n"],"mappings":";;;AAWA,SAAgBA,IAA+C;CAC7D,QAAQ,MAAkCC,EAAO,gBAAiB,MAAgB,IAAIC,EAAqBC,CAAQ,CAAC;AACtH;AAQA,IAAaD,IAAb,MAAkF;CAChF,IAAIE,KAAU;EACZ,OAAO,KAAKC,KAAiB,KAAKA,KAAiB,KAAKC;CAC1D;CAEA,IAAID,KAAiB;EAEnB,OAAO,KAAK,KACT,WAAY,cAA+B,yBAAyB,CAAC,EACpE,iBAAiB,CAAC,EAClB,MAAK,MAAK,GAAG,YAAY,GAAG;CAClC;CAEA,IAAIC,KAAgB;EAClB,OAAO,KAAK,KAAK,eAAe,YAAY,MAAO,KAAK,KAAK,gBAAsC;CACrG;CAEA,IAAIC,KAAe;EACjB,OAAO,KAAK,KAAK,WAAY,cAA+B,kBAAkB;CAChF;CAEA,IAAIC,KAAc;EAChB,OAAO,KAAK,KAAK,WAAY,cAA+B,mBAAmB;CACjF;CAEA,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAAC,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,MAAM,gBAAgB;EAkBpB,AAjBAC,EAAgB,KAAK,IAAI,GACzB,MAAM,KAAK,KAAK,gBAEhB,KAAKC,GAA4B,GAE7B,KAAKP,MACP,KAAK,KAAK,WAAW,IACrB,KAAK,KAAK,YAAY,OAAO,IAAI,QAAQ,KAEzC,KAAK,KAAK,YAAY,OAAO,OAAO,QAAQ,GAG1C,KAAKE,OACP,KAAKA,GAAc,MAAM,iBAAiB,QAC1C,KAAK,KAAK,MAAM,SAAS,YAG3B,KAAKF,IAAS,iBAAiB,UAAS,MAAK;GAC3C,AAAI,KAAK,KAAK,aACZ,EAAE,eAAe,GACjB,EAAE,yBAAyB;EAE/B,CAAC;CACH;CAEA,KAA8B;EAC5B,AAAI,KAAKA,MAAW,KAAKI,OACvB,KAAKJ,GAAQ,OAAO,UACpB,KAAKG,IAAc,cAAc,CAAC,CAAC,SAAQ,MAAQK,EAAoBC,CAAI,CAAC;CAEhF;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { attachInternals as e } from "../utils/a11y.js";
|
|
2
|
-
|
|
2
|
+
// src/internal/controllers/type-closable.controller.ts
|
|
3
3
|
var t = class {
|
|
4
4
|
constructor(e) {
|
|
5
5
|
this.host = e, this.host.addController(this);
|
|
@@ -19,7 +19,6 @@ var t = class {
|
|
|
19
19
|
}));
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
-
//#endregion
|
|
23
22
|
export { t as TypeClosableController };
|
|
24
23
|
|
|
25
24
|
//# sourceMappingURL=type-closable.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-closable.controller.js","names":[],"sources":["../../../src/internal/controllers/type-closable.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport { attachInternals } from '../utils/a11y.js';\n\nexport type TypeClosable = ReactiveElement & { closable: boolean };\n\n/**\n * Controller for enabling closable behavior for elements.\n */\nexport class TypeClosableController<T extends TypeClosable> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n this.host.addEventListener('command', () => {\n this.host.hidden = true;\n this.#dispatchEvent();\n });\n }\n\n close() {\n if (this.host.closable) {\n this.#dispatchEvent();\n }\n }\n\n #dispatchEvent() {\n this.host.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n}\n"],"mappings":";;AAWA,
|
|
1
|
+
{"version":3,"file":"type-closable.controller.js","names":["TypeClosableController","host","attachInternals","#dispatchEvent"],"sources":["../../../src/internal/controllers/type-closable.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport { attachInternals } from '../utils/a11y.js';\n\nexport type TypeClosable = ReactiveElement & { closable: boolean };\n\n/**\n * Controller for enabling closable behavior for elements.\n */\nexport class TypeClosableController<T extends TypeClosable> implements ReactiveController {\n constructor(private host: T) {\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n this.host.addEventListener('command', () => {\n this.host.hidden = true;\n this.#dispatchEvent();\n });\n }\n\n close() {\n if (this.host.closable) {\n this.#dispatchEvent();\n }\n }\n\n #dispatchEvent() {\n this.host.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n}\n"],"mappings":";;AAWA,IAAaA,IAAb,MAA0F;CACxF,YAAY,GAAiB;EAC3B,AADkB,KAAA,OAAAC,GAClB,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EAGd,AAFAC,EAAgB,KAAK,IAAI,GAEzB,KAAK,KAAK,iBAAiB,iBAAiB;GAE1C,AADA,KAAK,KAAK,SAAS,IACnB,KAAKC,GAAe;EACtB,CAAC;CACH;CAEA,QAAQ;EACN,AAAI,KAAK,KAAK,YACZ,KAAKA,GAAe;CAExB;CAEA,KAAiB;EACf,KAAK,KAAK,cAAc,IAAI,YAAY,SAAS;GAAE,SAAS;GAAM,UAAU;EAAK,CAAC,CAAC;CACrF;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { attachInternals as e } from "../utils/a11y.js";
|
|
2
|
-
|
|
2
|
+
// src/internal/controllers/type-expandable.controller.ts
|
|
3
3
|
var t = class {
|
|
4
4
|
#e = !1;
|
|
5
5
|
#t = !1;
|
|
@@ -30,7 +30,6 @@ var t = class {
|
|
|
30
30
|
this.host.expanded || this.#t && !this.host.hidden ? this.close() : this.open();
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
|
-
//#endregion
|
|
34
33
|
export { t as TypeExpandableController };
|
|
35
34
|
|
|
36
35
|
//# sourceMappingURL=type-expandable.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-expandable.controller.js","names":[],"sources":["../../../src/internal/controllers/type-expandable.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport { attachInternals } from '../utils/a11y.js';\n\nexport type TypeExpandable = ReactiveElement & {\n expanded?: boolean;\n behaviorExpand?: boolean;\n expandable?: boolean;\n _internals?: ElementInternals;\n};\n\n/**\n * Controller for enabling expandable behavior for elements.\n * @event open - Dispatched when the expandable element opens.\n * @event close - Dispatched when the expandable element closes.\n * @property expanded - expanded state\n * @property behaviorExpand - determines if stateful auto behavior should enable\n */\nexport class TypeExpandableController<T extends TypeExpandable> implements ReactiveController {\n #commandTriggered = false;\n #useHidden = false;\n\n constructor(\n private host: T,\n config: { useHidden?: boolean } = {}\n ) {\n this.#useHidden = config.useHidden ?? false;\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n this.host.addEventListener('command', ((e: CommandEvent) => {\n this.#commandTriggered = true;\n if (e.command === '--toggle') {\n this.toggle();\n }\n\n if (e.command === '--open') {\n this.open();\n }\n\n if (e.command === '--close') {\n this.close();\n }\n this.#commandTriggered = false;\n }) as EventListener);\n }\n\n hostUpdated() {\n this.host.expandable\n ? this.host._internals!.states.add('expandable')\n : this.host._internals!.states.delete('expandable');\n }\n\n open() {\n if (this.host.behaviorExpand || this.#commandTriggered) {\n this.host.expanded = true;\n\n if (this.#useHidden) {\n this.host.hidden = false;\n }\n }\n\n this.host.dispatchEvent(new CustomEvent('open', { bubbles: true, composed: true }));\n }\n\n close() {\n if (this.host.behaviorExpand || this.#commandTriggered) {\n this.host.expanded = false;\n\n if (this.#useHidden) {\n this.host.hidden = true;\n }\n }\n\n this.host.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n\n toggle() {\n if (this.host.expanded || (this.#useHidden && !this.host.hidden)) {\n this.close();\n } else {\n this.open();\n }\n }\n}\n"],"mappings":";;AAoBA,
|
|
1
|
+
{"version":3,"file":"type-expandable.controller.js","names":["TypeExpandableController","host","#useHidden","config","attachInternals","#commandTriggered"],"sources":["../../../src/internal/controllers/type-expandable.controller.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ReactiveController, ReactiveElement } from 'lit';\nimport { attachInternals } from '../utils/a11y.js';\n\nexport type TypeExpandable = ReactiveElement & {\n expanded?: boolean;\n behaviorExpand?: boolean;\n expandable?: boolean;\n _internals?: ElementInternals;\n};\n\n/**\n * Controller for enabling expandable behavior for elements.\n * @event open - Dispatched when the expandable element opens.\n * @event close - Dispatched when the expandable element closes.\n * @property expanded - expanded state\n * @property behaviorExpand - determines if stateful auto behavior should enable\n */\nexport class TypeExpandableController<T extends TypeExpandable> implements ReactiveController {\n #commandTriggered = false;\n #useHidden = false;\n\n constructor(\n private host: T,\n config: { useHidden?: boolean } = {}\n ) {\n this.#useHidden = config.useHidden ?? false;\n this.host.addController(this);\n }\n\n hostConnected() {\n attachInternals(this.host);\n\n this.host.addEventListener('command', ((e: CommandEvent) => {\n this.#commandTriggered = true;\n if (e.command === '--toggle') {\n this.toggle();\n }\n\n if (e.command === '--open') {\n this.open();\n }\n\n if (e.command === '--close') {\n this.close();\n }\n this.#commandTriggered = false;\n }) as EventListener);\n }\n\n hostUpdated() {\n this.host.expandable\n ? this.host._internals!.states.add('expandable')\n : this.host._internals!.states.delete('expandable');\n }\n\n open() {\n if (this.host.behaviorExpand || this.#commandTriggered) {\n this.host.expanded = true;\n\n if (this.#useHidden) {\n this.host.hidden = false;\n }\n }\n\n this.host.dispatchEvent(new CustomEvent('open', { bubbles: true, composed: true }));\n }\n\n close() {\n if (this.host.behaviorExpand || this.#commandTriggered) {\n this.host.expanded = false;\n\n if (this.#useHidden) {\n this.host.hidden = true;\n }\n }\n\n this.host.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n\n toggle() {\n if (this.host.expanded || (this.#useHidden && !this.host.hidden)) {\n this.close();\n } else {\n this.open();\n }\n }\n}\n"],"mappings":";;AAoBA,IAAaA,IAAb,MAA8F;CAC5F,KAAoB;CACpB,KAAa;CAEb,YACE,GACA,IAAkC,CAAC,GACnC;EAEA,AAJQ,KAAA,OAAAC,GAGR,KAAKC,KAAaC,EAAO,aAAa,IACtC,KAAK,KAAK,cAAc,IAAI;CAC9B;CAEA,gBAAgB;EAGd,AAFAC,EAAgB,KAAK,IAAI,GAEzB,KAAK,KAAK,iBAAiB,aAAa,MAAoB;GAa1D,AAZA,KAAKC,KAAoB,IACrB,EAAE,YAAY,cAChB,KAAK,OAAO,GAGV,EAAE,YAAY,YAChB,KAAK,KAAK,GAGR,EAAE,YAAY,aAChB,KAAK,MAAM,GAEb,KAAKA,KAAoB;EAC3B,EAAmB;CACrB;CAEA,cAAc;EACZ,KAAK,KAAK,aACN,KAAK,KAAK,WAAY,OAAO,IAAI,YAAY,IAC7C,KAAK,KAAK,WAAY,OAAO,OAAO,YAAY;CACtD;CAEA,OAAO;EASL,CARI,KAAK,KAAK,kBAAkB,KAAKA,QACnC,KAAK,KAAK,WAAW,IAEjB,KAAKH,OACP,KAAK,KAAK,SAAS,MAIvB,KAAK,KAAK,cAAc,IAAI,YAAY,QAAQ;GAAE,SAAS;GAAM,UAAU;EAAK,CAAC,CAAC;CACpF;CAEA,QAAQ;EASN,CARI,KAAK,KAAK,kBAAkB,KAAKG,QACnC,KAAK,KAAK,WAAW,IAEjB,KAAKH,OACP,KAAK,KAAK,SAAS,MAIvB,KAAK,KAAK,cAAc,IAAI,YAAY,SAAS;GAAE,SAAS;GAAM,UAAU;EAAK,CAAC,CAAC;CACrF;CAEA,SAAS;EACP,AAAI,KAAK,KAAK,YAAa,KAAKA,MAAc,CAAC,KAAK,KAAK,SACvD,KAAK,MAAM,IAEX,KAAK,KAAK;CAEd;AACF"}
|