@collectivetrait/lineaui 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/LICENSE +21 -0
- package/README.md +113 -2
- package/config.json +3 -0
- package/dist/blocks.css +5042 -0
- package/dist/blocks.css.map +1 -0
- package/dist/bundle.js +873 -0
- package/dist/core.css +1641 -0
- package/dist/core.css.map +1 -0
- package/dist/icons-manifest.json +1 -0
- package/dist/icons.css +158 -0
- package/dist/styles.css +10546 -0
- package/dist/styles.css.map +1 -0
- package/dist/theme-init.js +8 -0
- package/dist/utilities.css +3865 -0
- package/dist/utilities.css.map +1 -0
- package/humans.txt +8 -0
- package/js/config.js +3 -0
- package/js/index.js +45 -0
- package/js/modules/copy.js +64 -0
- package/js/modules/dialog.js +55 -0
- package/js/modules/dismiss.js +43 -0
- package/js/modules/dropdown.js +108 -0
- package/js/modules/gallery.js +84 -0
- package/js/modules/highlight.js +89 -0
- package/js/modules/navigation.js +104 -0
- package/js/modules/quantity.js +63 -0
- package/js/modules/rhythm.js +21 -0
- package/js/modules/table.js +109 -0
- package/js/modules/tabs.js +112 -0
- package/js/modules/toast.js +97 -0
- package/js/modules/tooltip.js +106 -0
- package/js/theme-init.js +8 -0
- package/package.json +71 -4
- package/scss/_blocks-only.scss +4 -0
- package/scss/_core.scss +7 -0
- package/scss/_index.scss +12 -0
- package/scss/_layers.scss +2 -0
- package/scss/_utilities-only.scss +4 -0
- package/scss/base/_code.scss +50 -0
- package/scss/base/_forms.scss +110 -0
- package/scss/base/_index.scss +7 -0
- package/scss/base/_interactive.scss +25 -0
- package/scss/base/_media.scss +28 -0
- package/scss/base/_reset.scss +53 -0
- package/scss/base/_tables.scss +49 -0
- package/scss/base/_typography.scss +232 -0
- package/scss/blocks/_accordion.scss +88 -0
- package/scss/blocks/_alert.scss +101 -0
- package/scss/blocks/_avatar.scss +104 -0
- package/scss/blocks/_badge.scss +72 -0
- package/scss/blocks/_breadcrumb.scss +65 -0
- package/scss/blocks/_button-group.scss +73 -0
- package/scss/blocks/_button.scss +212 -0
- package/scss/blocks/_card.scss +146 -0
- package/scss/blocks/_choice.scss +163 -0
- package/scss/blocks/_code.scss +157 -0
- package/scss/blocks/_data-list.scss +92 -0
- package/scss/blocks/_divider.scss +54 -0
- package/scss/blocks/_drawer.scss +160 -0
- package/scss/blocks/_dropdown.scss +167 -0
- package/scss/blocks/_empty-state.scss +61 -0
- package/scss/blocks/_field.scss +146 -0
- package/scss/blocks/_form.scss +87 -0
- package/scss/blocks/_gallery.scss +120 -0
- package/scss/blocks/_index.scss +49 -0
- package/scss/blocks/_input-group.scss +95 -0
- package/scss/blocks/_line-item.scss +105 -0
- package/scss/blocks/_list.scss +117 -0
- package/scss/blocks/_media.scss +105 -0
- package/scss/blocks/_menu.scss +191 -0
- package/scss/blocks/_meta.scss +59 -0
- package/scss/blocks/_modal.scss +156 -0
- package/scss/blocks/_navbar.scss +227 -0
- package/scss/blocks/_order-summary.scss +92 -0
- package/scss/blocks/_page-header.scss +88 -0
- package/scss/blocks/_pagination.scss +110 -0
- package/scss/blocks/_price.scss +88 -0
- package/scss/blocks/_product-card.scss +138 -0
- package/scss/blocks/_progress.scss +68 -0
- package/scss/blocks/_prose.scss +165 -0
- package/scss/blocks/_quantity.scss +73 -0
- package/scss/blocks/_quote.scss +71 -0
- package/scss/blocks/_rating.scss +50 -0
- package/scss/blocks/_site-footer.scss +135 -0
- package/scss/blocks/_skeleton.scss +63 -0
- package/scss/blocks/_spinner.scss +44 -0
- package/scss/blocks/_stat.scss +111 -0
- package/scss/blocks/_steps.scss +147 -0
- package/scss/blocks/_swatch.scss +117 -0
- package/scss/blocks/_table.scss +242 -0
- package/scss/blocks/_tabs.scss +168 -0
- package/scss/blocks/_tag.scss +72 -0
- package/scss/blocks/_timeline.scss +84 -0
- package/scss/blocks/_toast.scss +146 -0
- package/scss/blocks/_toolbar.scss +67 -0
- package/scss/blocks/_tooltip.scss +63 -0
- package/scss/helpers/_index.scss +2 -0
- package/scss/helpers/_rhythm.scss +64 -0
- package/scss/helpers/_typography.scss +4 -0
- package/scss/layout/_cluster.scss +43 -0
- package/scss/layout/_container.scss +26 -0
- package/scss/layout/_grid.scss +90 -0
- package/scss/layout/_index.scss +5 -0
- package/scss/layout/_section.scss +78 -0
- package/scss/layout/_shell.scss +87 -0
- package/scss/settings/_blocks.scss +3 -0
- package/scss/settings/_breakpoints.scss +7 -0
- package/scss/settings/_fonts.scss +5 -0
- package/scss/settings/_index.scss +7 -0
- package/scss/settings/_layout.scss +5 -0
- package/scss/settings/_prefix.scss +1 -0
- package/scss/settings/_rhythm.scss +6 -0
- package/scss/settings/_utilities.scss +2 -0
- package/scss/tokens/_borders.scss +16 -0
- package/scss/tokens/_elevation.scss +37 -0
- package/scss/tokens/_index.scss +8 -0
- package/scss/tokens/_layout.scss +17 -0
- package/scss/tokens/_motion.scss +17 -0
- package/scss/tokens/_palette.scss +50 -0
- package/scss/tokens/_roles.scss +90 -0
- package/scss/tokens/_space.scss +9 -0
- package/scss/tokens/_type.scss +57 -0
- package/scss/tools/_bem.scss +22 -0
- package/scss/tools/_index.scss +4 -0
- package/scss/tools/_rhythm.scss +26 -0
- package/scss/tools/_role-engine.scss +16 -0
- package/scss/tools/_utility-generator.scss +74 -0
- package/scss/utilities/_index.scss +8 -0
- package/scss/utilities/_map.scss +321 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../scss/_layers.scss","../scss/utilities/_index.scss","../scss/tools/_utility-generator.scss"],"names":[],"mappings":"AACA;ACIA;ECUQ;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAuB/B;IACmC;IAAA;IAAA;IAAA;IAAA;IAAA;;EADnC;IACmC;IAAA;IAAA;IAAA;IAAA;IAAA;;EADnC;IACmC;IAAA;IAAA;IAAA;;EADnC;IACmC;IAAA;IAAA;IAAA;;EADnC;IACmC;IAAA;IAAA;IAAA;;EADnC;IACmC;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;;EADnC;IACmC;IAAA;IAAA;;EADnC;IACmC;IAAA;IAAA;;EAGnC;IACmC;IAAA;;EADnC;IACmC;IAAA;;EADnC;IACmC;IAAA;;EADnC;IACmC;IAAA;;EA5BnC;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAuB/B;IACmC;IAAA;;EAGnC;IACmC;;EADnC;IACmC;IAAA;;EADnC;IACmC;IAAA;;EA5BnC;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EAA/B;IAA+B;;EA2CnC;IA3CI;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAuB/B;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;;IAGnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IA5BnC;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;;EA2CnC;IA3CI;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAuB/B;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;;IAGnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IA5BnC;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;;EA2CnC;IA3CI;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAuB/B;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;;IAGnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IA5BnC;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;;EA2CnC;IA3CI;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAuB/B;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;;IAGnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IA5BnC;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;;EA2CnC;IA3CI;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAuB/B;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;;IADnC;MACmC;MAAA;MAAA;;IAGnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IADnC;MACmC;MAAA;;IA5BnC;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B;;IAA/B;MAA+B","file":"utilities.css"}
|
package/humans.txt
ADDED
package/js/config.js
ADDED
package/js/index.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { initRhythm } from './modules/rhythm.js';
|
|
2
|
+
import { initNavigation } from './modules/navigation.js';
|
|
3
|
+
import { initDialog } from './modules/dialog.js';
|
|
4
|
+
import { initDropdown } from './modules/dropdown.js';
|
|
5
|
+
import { initTooltip } from './modules/tooltip.js';
|
|
6
|
+
import { initTabs } from './modules/tabs.js';
|
|
7
|
+
import { initToast } from './modules/toast.js';
|
|
8
|
+
import { initDismiss } from './modules/dismiss.js';
|
|
9
|
+
import { initQuantity } from './modules/quantity.js';
|
|
10
|
+
import { initGallery } from './modules/gallery.js';
|
|
11
|
+
import { initCopy } from './modules/copy.js';
|
|
12
|
+
import { initTable } from './modules/table.js';
|
|
13
|
+
import { initHighlight } from './modules/highlight.js';
|
|
14
|
+
|
|
15
|
+
function init() {
|
|
16
|
+
initRhythm();
|
|
17
|
+
initNavigation();
|
|
18
|
+
initDialog();
|
|
19
|
+
initDropdown();
|
|
20
|
+
initTooltip();
|
|
21
|
+
initTabs();
|
|
22
|
+
initToast();
|
|
23
|
+
initDismiss();
|
|
24
|
+
initQuantity();
|
|
25
|
+
initGallery();
|
|
26
|
+
initCopy();
|
|
27
|
+
initTable();
|
|
28
|
+
initHighlight();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (document.readyState === 'loading') {
|
|
32
|
+
document.addEventListener('DOMContentLoaded', init);
|
|
33
|
+
} else {
|
|
34
|
+
init();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Auto-init for dynamically injected markup
|
|
38
|
+
let pending = false;
|
|
39
|
+
const observer = new MutationObserver(() => {
|
|
40
|
+
if (pending) return;
|
|
41
|
+
pending = true;
|
|
42
|
+
queueMicrotask(() => { pending = false; init(); });
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { prefix } from '../config.js';
|
|
2
|
+
|
|
3
|
+
const ATTR = `data-${prefix}copy`;
|
|
4
|
+
const TARGET_ATTR = `data-${prefix}copy-target`;
|
|
5
|
+
const VALUE_ATTR = `data-${prefix}copy-value`;
|
|
6
|
+
|
|
7
|
+
export function initCopy() {
|
|
8
|
+
document.querySelectorAll(`[${ATTR}]`).forEach((btn) => {
|
|
9
|
+
if (btn._lnCopy) return;
|
|
10
|
+
const c = new Copy(btn);
|
|
11
|
+
c.init();
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export class Copy {
|
|
16
|
+
constructor(trigger) {
|
|
17
|
+
this.trigger = trigger;
|
|
18
|
+
this.originalText = trigger.textContent;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
init() {
|
|
22
|
+
this.trigger._lnCopy = true;
|
|
23
|
+
this.trigger.addEventListener('click', () => this.copy());
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async copy() {
|
|
27
|
+
const value = this.getValue();
|
|
28
|
+
if (!value) return;
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
await navigator.clipboard.writeText(value);
|
|
32
|
+
this.showCopied();
|
|
33
|
+
this.trigger.dispatchEvent(
|
|
34
|
+
new CustomEvent(`${prefix}copy`, { bubbles: true, detail: { value } })
|
|
35
|
+
);
|
|
36
|
+
} catch {
|
|
37
|
+
// Clipboard access denied
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
getValue() {
|
|
42
|
+
const value = this.trigger.getAttribute(VALUE_ATTR);
|
|
43
|
+
if (value) return value;
|
|
44
|
+
|
|
45
|
+
const targetSelector = this.trigger.getAttribute(TARGET_ATTR);
|
|
46
|
+
if (targetSelector) {
|
|
47
|
+
const target = document.querySelector(targetSelector);
|
|
48
|
+
return target?.textContent ?? '';
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return '';
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
showCopied() {
|
|
55
|
+
this.trigger.setAttribute('data-copied', '');
|
|
56
|
+
const copiedText = this.trigger.getAttribute(`data-${prefix}copy-text`) || 'Copied!';
|
|
57
|
+
this.trigger.textContent = copiedText;
|
|
58
|
+
|
|
59
|
+
setTimeout(() => {
|
|
60
|
+
this.trigger.removeAttribute('data-copied');
|
|
61
|
+
this.trigger.textContent = this.originalText;
|
|
62
|
+
}, 2000);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { prefix } from '../config.js';
|
|
2
|
+
|
|
3
|
+
const ATTR = `data-${prefix}dialog`;
|
|
4
|
+
const CLOSE_ATTR = `data-${prefix}dialog-close`;
|
|
5
|
+
|
|
6
|
+
export function initDialog() {
|
|
7
|
+
document.querySelectorAll(`[${ATTR}]`).forEach((trigger) => {
|
|
8
|
+
if (trigger._lnDialog) return;
|
|
9
|
+
const d = new Dialog(trigger);
|
|
10
|
+
d.init();
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class Dialog {
|
|
15
|
+
constructor(trigger) {
|
|
16
|
+
this.trigger = trigger;
|
|
17
|
+
this.targetId = trigger.getAttribute(ATTR);
|
|
18
|
+
this.dialog = null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
init() {
|
|
22
|
+
this.trigger._lnDialog = true;
|
|
23
|
+
this.dialog = document.getElementById(this.targetId);
|
|
24
|
+
if (!this.dialog) return;
|
|
25
|
+
|
|
26
|
+
this.trigger.addEventListener('click', () => this.open());
|
|
27
|
+
|
|
28
|
+
this.dialog.addEventListener('click', (e) => {
|
|
29
|
+
if (e.target === this.dialog) this.close();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
this.dialog.querySelectorAll(`[${CLOSE_ATTR}]`).forEach((btn) => {
|
|
33
|
+
btn.addEventListener('click', () => this.close());
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
this.dialog.addEventListener('close', () => {
|
|
37
|
+
this.dialog.dispatchEvent(
|
|
38
|
+
new CustomEvent(`${prefix}dialog:close`, { bubbles: true })
|
|
39
|
+
);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
open() {
|
|
44
|
+
if (!this.dialog) return;
|
|
45
|
+
this.dialog.showModal();
|
|
46
|
+
this.dialog.dispatchEvent(
|
|
47
|
+
new CustomEvent(`${prefix}dialog:open`, { bubbles: true })
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
close() {
|
|
52
|
+
if (!this.dialog) return;
|
|
53
|
+
this.dialog.close();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { prefix } from '../config.js';
|
|
2
|
+
|
|
3
|
+
const ATTR = `data-${prefix}dismiss`;
|
|
4
|
+
const DISMISSIBLE = `data-${prefix}dismissible`;
|
|
5
|
+
|
|
6
|
+
export function initDismiss() {
|
|
7
|
+
document.querySelectorAll(`[${ATTR}]`).forEach((trigger) => {
|
|
8
|
+
if (trigger._lnDismiss) return;
|
|
9
|
+
const d = new Dismiss(trigger);
|
|
10
|
+
d.init();
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class Dismiss {
|
|
15
|
+
constructor(trigger) {
|
|
16
|
+
this.trigger = trigger;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
init() {
|
|
20
|
+
this.trigger._lnDismiss = true;
|
|
21
|
+
this.trigger.addEventListener('click', () => this.dismiss());
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
dismiss() {
|
|
25
|
+
const selector = this.trigger.getAttribute(ATTR);
|
|
26
|
+
let target;
|
|
27
|
+
|
|
28
|
+
if (selector) {
|
|
29
|
+
target = document.querySelector(selector);
|
|
30
|
+
} else {
|
|
31
|
+
target = this.trigger.closest(`[${DISMISSIBLE}]`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (!target) {
|
|
35
|
+
target = this.trigger.parentElement;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (target) {
|
|
39
|
+
target.hidden = true;
|
|
40
|
+
target.dispatchEvent(new CustomEvent(`${prefix}dismiss`, { bubbles: true }));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { prefix } from '../config.js';
|
|
2
|
+
|
|
3
|
+
const TOGGLE = `${prefix}dropdown__toggle`;
|
|
4
|
+
const MENU = `${prefix}dropdown__menu`;
|
|
5
|
+
const ITEM = `${prefix}dropdown__item`;
|
|
6
|
+
|
|
7
|
+
export function initDropdown() {
|
|
8
|
+
document.querySelectorAll(`[data-${prefix}dropdown]`).forEach((root) => {
|
|
9
|
+
if (root._lnDropdown) return;
|
|
10
|
+
root._lnDropdown = true;
|
|
11
|
+
const dd = new Dropdown(root);
|
|
12
|
+
dd.init();
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export class Dropdown {
|
|
17
|
+
constructor(root) {
|
|
18
|
+
this.root = root;
|
|
19
|
+
this.toggle = root.querySelector(`.${TOGGLE}`);
|
|
20
|
+
this.menu = root.querySelector(`.${MENU}`);
|
|
21
|
+
this.items = [];
|
|
22
|
+
this.activeIndex = -1;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
init() {
|
|
26
|
+
if (!this.toggle || !this.menu) return;
|
|
27
|
+
this.items = [...this.menu.querySelectorAll(`.${ITEM}:not([disabled])`)];
|
|
28
|
+
|
|
29
|
+
this.toggle.addEventListener('keydown', (e) => {
|
|
30
|
+
if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {
|
|
31
|
+
e.preventDefault();
|
|
32
|
+
this.open();
|
|
33
|
+
this.focusItem(0);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
this.menu.addEventListener('keydown', (e) => this.onMenuKeydown(e));
|
|
38
|
+
|
|
39
|
+
this.menu.addEventListener('toggle', (e) => {
|
|
40
|
+
if (e.newState === 'closed') {
|
|
41
|
+
this.activeIndex = -1;
|
|
42
|
+
this.clearActive();
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
open() {
|
|
48
|
+
if (this.menu.matches?.(':popover-open')) return;
|
|
49
|
+
this.menu.showPopover?.();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
close() {
|
|
53
|
+
this.menu.hidePopover?.();
|
|
54
|
+
this.toggle.focus();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
focusItem(index) {
|
|
58
|
+
this.activeIndex = Math.max(0, Math.min(index, this.items.length - 1));
|
|
59
|
+
this.items.forEach((item, i) => {
|
|
60
|
+
item.toggleAttribute('data-active', i === this.activeIndex);
|
|
61
|
+
});
|
|
62
|
+
this.items[this.activeIndex]?.focus();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
clearActive() {
|
|
66
|
+
this.items.forEach((item) => {
|
|
67
|
+
item.removeAttribute('data-active');
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
onMenuKeydown(e) {
|
|
72
|
+
switch (e.key) {
|
|
73
|
+
case 'ArrowDown':
|
|
74
|
+
e.preventDefault();
|
|
75
|
+
this.focusItem(this.activeIndex + 1);
|
|
76
|
+
break;
|
|
77
|
+
case 'ArrowUp':
|
|
78
|
+
e.preventDefault();
|
|
79
|
+
this.focusItem(this.activeIndex - 1);
|
|
80
|
+
break;
|
|
81
|
+
case 'Home':
|
|
82
|
+
e.preventDefault();
|
|
83
|
+
this.focusItem(0);
|
|
84
|
+
break;
|
|
85
|
+
case 'End':
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
this.focusItem(this.items.length - 1);
|
|
88
|
+
break;
|
|
89
|
+
case 'Escape':
|
|
90
|
+
e.preventDefault();
|
|
91
|
+
this.close();
|
|
92
|
+
break;
|
|
93
|
+
default:
|
|
94
|
+
if (e.key.length === 1) {
|
|
95
|
+
const char = e.key.toLowerCase();
|
|
96
|
+
const start = (this.activeIndex + 1) % this.items.length;
|
|
97
|
+
for (let i = 0; i < this.items.length; i++) {
|
|
98
|
+
const idx = (start + i) % this.items.length;
|
|
99
|
+
const text = this.items[idx].textContent.trim().toLowerCase();
|
|
100
|
+
if (text.startsWith(char)) {
|
|
101
|
+
this.focusItem(idx);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { prefix } from '../config.js';
|
|
2
|
+
|
|
3
|
+
const ATTR = `data-${prefix}gallery`;
|
|
4
|
+
const MAIN = `${prefix}gallery__main`;
|
|
5
|
+
const SLIDE = `${prefix}gallery__slide`;
|
|
6
|
+
const THUMB = `${prefix}gallery__thumb`;
|
|
7
|
+
const DOT = `${prefix}gallery__dot`;
|
|
8
|
+
|
|
9
|
+
export function initGallery() {
|
|
10
|
+
document.querySelectorAll(`[${ATTR}]`).forEach((root) => {
|
|
11
|
+
if (root._lnGallery) return;
|
|
12
|
+
const g = new Gallery(root);
|
|
13
|
+
g.init();
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class Gallery {
|
|
18
|
+
constructor(root) {
|
|
19
|
+
this.root = root;
|
|
20
|
+
this.main = root.querySelector(`.${MAIN}`);
|
|
21
|
+
this.slides = [...root.querySelectorAll(`.${SLIDE}`)];
|
|
22
|
+
this.thumbs = [...root.querySelectorAll(`.${THUMB}`)];
|
|
23
|
+
this.dots = [...root.querySelectorAll(`.${DOT}`)];
|
|
24
|
+
this.activeIndex = 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
init() {
|
|
28
|
+
if (!this.main || this.slides.length === 0) return;
|
|
29
|
+
this.root._lnGallery = true;
|
|
30
|
+
|
|
31
|
+
const observer = new IntersectionObserver(
|
|
32
|
+
(entries) => {
|
|
33
|
+
for (const entry of entries) {
|
|
34
|
+
if (entry.isIntersecting) {
|
|
35
|
+
const index = this.slides.indexOf(entry.target);
|
|
36
|
+
if (index !== -1) this.setActive(index);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{ root: this.main, threshold: 0.5 }
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
this.slides.forEach((slide) => observer.observe(slide));
|
|
44
|
+
|
|
45
|
+
this.thumbs.forEach((thumb, i) => {
|
|
46
|
+
thumb.addEventListener('click', () => this.goTo(i));
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
this.dots.forEach((dot, i) => {
|
|
50
|
+
dot.addEventListener('click', () => this.goTo(i));
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
this.main.addEventListener('keydown', (e) => {
|
|
54
|
+
if (e.key === 'ArrowRight') {
|
|
55
|
+
e.preventDefault();
|
|
56
|
+
this.goTo(this.activeIndex + 1);
|
|
57
|
+
} else if (e.key === 'ArrowLeft') {
|
|
58
|
+
e.preventDefault();
|
|
59
|
+
this.goTo(this.activeIndex - 1);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
this.setActive(0);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
goTo(index) {
|
|
67
|
+
index = Math.max(0, Math.min(index, this.slides.length - 1));
|
|
68
|
+
this.slides[index]?.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
setActive(index) {
|
|
72
|
+
this.activeIndex = index;
|
|
73
|
+
|
|
74
|
+
this.thumbs.forEach((thumb, i) => {
|
|
75
|
+
thumb.classList.toggle('is-active', i === index);
|
|
76
|
+
thumb.setAttribute('aria-selected', i === index ? 'true' : 'false');
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
this.dots.forEach((dot, i) => {
|
|
80
|
+
dot.classList.toggle('is-active', i === index);
|
|
81
|
+
dot.setAttribute('aria-selected', i === index ? 'true' : 'false');
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { prefix } from '../config.js';
|
|
2
|
+
|
|
3
|
+
const ATTR = `data-${prefix}highlight`;
|
|
4
|
+
|
|
5
|
+
export function initHighlight() {
|
|
6
|
+
document.querySelectorAll(`[${ATTR}]`).forEach((block) => {
|
|
7
|
+
if (block._lnHighlight) return;
|
|
8
|
+
const h = new Highlight(block);
|
|
9
|
+
h.init();
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class Highlight {
|
|
14
|
+
constructor(block) {
|
|
15
|
+
this.block = block;
|
|
16
|
+
this.code = block.querySelector('code') || block;
|
|
17
|
+
this.lang = block.getAttribute(ATTR) || this.detectLanguage();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
init() {
|
|
21
|
+
this.block._lnHighlight = true;
|
|
22
|
+
|
|
23
|
+
// Defer to external highlighter if available
|
|
24
|
+
if (typeof window.Prism !== 'undefined' && window.Prism.highlightElement) {
|
|
25
|
+
if (this.lang) this.code.classList.add(`language-${this.lang}`);
|
|
26
|
+
window.Prism.highlightElement(this.code);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (typeof window.hljs !== 'undefined' && window.hljs.highlightElement) {
|
|
31
|
+
if (this.lang) this.code.classList.add(this.lang);
|
|
32
|
+
window.hljs.highlightElement(this.code);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Minimal built-in tokenizer
|
|
37
|
+
const raw = this.code.textContent;
|
|
38
|
+
const highlighted = this.tokenize(raw, this.lang);
|
|
39
|
+
this.code.innerHTML = highlighted;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
detectLanguage() {
|
|
43
|
+
const cls = this.code.className;
|
|
44
|
+
const match = cls.match(/language-(\w+)/);
|
|
45
|
+
return match ? match[1] : null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
tokenize(src, lang) {
|
|
49
|
+
const esc = (s) => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
50
|
+
|
|
51
|
+
const rules = {
|
|
52
|
+
html: [
|
|
53
|
+
{ pattern: /<!--[\s\S]*?-->/g, cls: 'comment' },
|
|
54
|
+
{ pattern: /(<\/?)([\w-]+)/g, replace: (_, bracket, tag) => `${esc(bracket)}<span class="hl-tag">${esc(tag)}</span>` },
|
|
55
|
+
{ pattern: /([\w-]+)(=)(".*?")/g, replace: (_, attr, eq, val) => `<span class="hl-attr">${esc(attr)}</span>${esc(eq)}<span class="hl-string">${esc(val)}</span>` },
|
|
56
|
+
],
|
|
57
|
+
css: [
|
|
58
|
+
{ pattern: /\/\*[\s\S]*?\*\//g, cls: 'comment' },
|
|
59
|
+
{ pattern: /"[^"]*"|'[^']*'/g, cls: 'string' },
|
|
60
|
+
{ pattern: /[\w-]+(?=\s*:)/g, cls: 'attr' },
|
|
61
|
+
{ pattern: /#[0-9a-fA-F]{3,8}\b/g, cls: 'number' },
|
|
62
|
+
{ pattern: /\b\d+(\.\d+)?(px|em|rem|%|vh|vw|s|ms)?\b/g, cls: 'number' },
|
|
63
|
+
],
|
|
64
|
+
js: [
|
|
65
|
+
{ pattern: /\/\/.*$/gm, cls: 'comment' },
|
|
66
|
+
{ pattern: /\/\*[\s\S]*?\*\//g, cls: 'comment' },
|
|
67
|
+
{ pattern: /"[^"]*"|'[^']*'|`[^`]*`/g, cls: 'string' },
|
|
68
|
+
{ pattern: /\b(const|let|var|function|return|if|else|for|while|class|import|export|from|new|this|true|false|null|undefined|async|await)\b/g, cls: 'keyword' },
|
|
69
|
+
{ pattern: /\b\d+(\.\d+)?\b/g, cls: 'number' },
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const langRules = rules[lang];
|
|
74
|
+
if (!langRules) return esc(src);
|
|
75
|
+
|
|
76
|
+
let result = esc(src);
|
|
77
|
+
for (const rule of langRules) {
|
|
78
|
+
if (rule.replace) {
|
|
79
|
+
result = result.replace(rule.pattern, rule.replace);
|
|
80
|
+
} else {
|
|
81
|
+
result = result.replace(rule.pattern, (match) =>
|
|
82
|
+
`<span class="hl-${rule.cls}">${match}</span>`
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { prefix } from '../config.js';
|
|
2
|
+
|
|
3
|
+
const STORAGE_KEY = `${prefix}sidebar`;
|
|
4
|
+
let documentListenersAdded = false;
|
|
5
|
+
|
|
6
|
+
export function initNavigation() {
|
|
7
|
+
const shellClass = `${prefix}shell`;
|
|
8
|
+
const navbarPrefix = `${prefix}navbar`;
|
|
9
|
+
|
|
10
|
+
// Restore sidebar state from localStorage
|
|
11
|
+
const stored = localStorage.getItem(STORAGE_KEY);
|
|
12
|
+
if (stored === 'open') {
|
|
13
|
+
document.querySelectorAll(`.${shellClass}`).forEach((shell) => {
|
|
14
|
+
shell.dataset.sidebar = 'open';
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Wire up sidebar toggle buttons
|
|
19
|
+
document.querySelectorAll(`[data-${prefix}sidebar-toggle]`).forEach((btn) => {
|
|
20
|
+
if (btn._lnNav) return;
|
|
21
|
+
btn._lnNav = true;
|
|
22
|
+
btn.addEventListener('click', () => {
|
|
23
|
+
const shell = btn.closest(`.${shellClass}`);
|
|
24
|
+
if (!shell) return;
|
|
25
|
+
const isOpen = shell.dataset.sidebar === 'open';
|
|
26
|
+
if (isOpen) {
|
|
27
|
+
delete shell.dataset.sidebar;
|
|
28
|
+
localStorage.setItem(STORAGE_KEY, 'closed');
|
|
29
|
+
} else {
|
|
30
|
+
shell.dataset.sidebar = 'open';
|
|
31
|
+
localStorage.setItem(STORAGE_KEY, 'open');
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Navbar sticky detection for transparent bars
|
|
37
|
+
document.querySelectorAll(`.${navbarPrefix}--sticky.${navbarPrefix}--transparent`).forEach((navbar) => {
|
|
38
|
+
if (navbar._lnNav) return;
|
|
39
|
+
navbar._lnNav = true;
|
|
40
|
+
const sentinel = document.createElement('div');
|
|
41
|
+
sentinel.style.cssText = 'position:absolute;top:0;height:1px;width:1px;pointer-events:none;';
|
|
42
|
+
navbar.parentElement.insertBefore(sentinel, navbar);
|
|
43
|
+
|
|
44
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
45
|
+
navbar.classList.toggle('is-stuck', !entry.isIntersecting);
|
|
46
|
+
}, { threshold: 0 });
|
|
47
|
+
|
|
48
|
+
observer.observe(sentinel);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Navbar mobile panel toggle
|
|
52
|
+
function closeNavbarPanel(navbar) {
|
|
53
|
+
const toggle = navbar.querySelector(`[data-${prefix}navbar-toggle]`);
|
|
54
|
+
const panel = navbar.querySelector(`.${navbarPrefix}__panel`);
|
|
55
|
+
if (toggle) toggle.setAttribute('aria-expanded', 'false');
|
|
56
|
+
if (panel) panel.setAttribute('aria-hidden', 'true');
|
|
57
|
+
document.documentElement.classList.remove(`${prefix}navbar-open`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function openNavbarPanel(navbar) {
|
|
61
|
+
const toggle = navbar.querySelector(`[data-${prefix}navbar-toggle]`);
|
|
62
|
+
const panel = navbar.querySelector(`.${navbarPrefix}__panel`);
|
|
63
|
+
if (toggle) toggle.setAttribute('aria-expanded', 'true');
|
|
64
|
+
if (panel) panel.setAttribute('aria-hidden', 'false');
|
|
65
|
+
document.documentElement.classList.add(`${prefix}navbar-open`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
document.querySelectorAll(`[data-${prefix}navbar-toggle]`).forEach((btn) => {
|
|
69
|
+
if (btn._lnNav) return;
|
|
70
|
+
btn._lnNav = true;
|
|
71
|
+
btn.addEventListener('click', () => {
|
|
72
|
+
const navbar = btn.closest(`.${navbarPrefix}`);
|
|
73
|
+
if (!navbar) return;
|
|
74
|
+
const expanded = btn.getAttribute('aria-expanded') === 'true';
|
|
75
|
+
if (expanded) {
|
|
76
|
+
closeNavbarPanel(navbar);
|
|
77
|
+
} else {
|
|
78
|
+
openNavbarPanel(navbar);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
if (documentListenersAdded) return;
|
|
84
|
+
documentListenersAdded = true;
|
|
85
|
+
|
|
86
|
+
// Close navbar panel on outside click
|
|
87
|
+
document.addEventListener('click', (e) => {
|
|
88
|
+
document.querySelectorAll(`.${navbarPrefix}__panel[aria-hidden="false"]`).forEach((panel) => {
|
|
89
|
+
const navbar = panel.closest(`.${navbarPrefix}`);
|
|
90
|
+
if (navbar && !navbar.contains(e.target)) {
|
|
91
|
+
closeNavbarPanel(navbar);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Close navbar panel on Escape key
|
|
97
|
+
document.addEventListener('keydown', (e) => {
|
|
98
|
+
if (e.key !== 'Escape') return;
|
|
99
|
+
document.querySelectorAll(`.${navbarPrefix}__panel[aria-hidden="false"]`).forEach((panel) => {
|
|
100
|
+
const navbar = panel.closest(`.${navbarPrefix}`);
|
|
101
|
+
if (navbar) closeNavbarPanel(navbar);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|