@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.
Files changed (130) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE +21 -0
  3. package/README.md +113 -2
  4. package/config.json +3 -0
  5. package/dist/blocks.css +5042 -0
  6. package/dist/blocks.css.map +1 -0
  7. package/dist/bundle.js +873 -0
  8. package/dist/core.css +1641 -0
  9. package/dist/core.css.map +1 -0
  10. package/dist/icons-manifest.json +1 -0
  11. package/dist/icons.css +158 -0
  12. package/dist/styles.css +10546 -0
  13. package/dist/styles.css.map +1 -0
  14. package/dist/theme-init.js +8 -0
  15. package/dist/utilities.css +3865 -0
  16. package/dist/utilities.css.map +1 -0
  17. package/humans.txt +8 -0
  18. package/js/config.js +3 -0
  19. package/js/index.js +45 -0
  20. package/js/modules/copy.js +64 -0
  21. package/js/modules/dialog.js +55 -0
  22. package/js/modules/dismiss.js +43 -0
  23. package/js/modules/dropdown.js +108 -0
  24. package/js/modules/gallery.js +84 -0
  25. package/js/modules/highlight.js +89 -0
  26. package/js/modules/navigation.js +104 -0
  27. package/js/modules/quantity.js +63 -0
  28. package/js/modules/rhythm.js +21 -0
  29. package/js/modules/table.js +109 -0
  30. package/js/modules/tabs.js +112 -0
  31. package/js/modules/toast.js +97 -0
  32. package/js/modules/tooltip.js +106 -0
  33. package/js/theme-init.js +8 -0
  34. package/package.json +71 -4
  35. package/scss/_blocks-only.scss +4 -0
  36. package/scss/_core.scss +7 -0
  37. package/scss/_index.scss +12 -0
  38. package/scss/_layers.scss +2 -0
  39. package/scss/_utilities-only.scss +4 -0
  40. package/scss/base/_code.scss +50 -0
  41. package/scss/base/_forms.scss +110 -0
  42. package/scss/base/_index.scss +7 -0
  43. package/scss/base/_interactive.scss +25 -0
  44. package/scss/base/_media.scss +28 -0
  45. package/scss/base/_reset.scss +53 -0
  46. package/scss/base/_tables.scss +49 -0
  47. package/scss/base/_typography.scss +232 -0
  48. package/scss/blocks/_accordion.scss +88 -0
  49. package/scss/blocks/_alert.scss +101 -0
  50. package/scss/blocks/_avatar.scss +104 -0
  51. package/scss/blocks/_badge.scss +72 -0
  52. package/scss/blocks/_breadcrumb.scss +65 -0
  53. package/scss/blocks/_button-group.scss +73 -0
  54. package/scss/blocks/_button.scss +212 -0
  55. package/scss/blocks/_card.scss +146 -0
  56. package/scss/blocks/_choice.scss +163 -0
  57. package/scss/blocks/_code.scss +157 -0
  58. package/scss/blocks/_data-list.scss +92 -0
  59. package/scss/blocks/_divider.scss +54 -0
  60. package/scss/blocks/_drawer.scss +160 -0
  61. package/scss/blocks/_dropdown.scss +167 -0
  62. package/scss/blocks/_empty-state.scss +61 -0
  63. package/scss/blocks/_field.scss +146 -0
  64. package/scss/blocks/_form.scss +87 -0
  65. package/scss/blocks/_gallery.scss +120 -0
  66. package/scss/blocks/_index.scss +49 -0
  67. package/scss/blocks/_input-group.scss +95 -0
  68. package/scss/blocks/_line-item.scss +105 -0
  69. package/scss/blocks/_list.scss +117 -0
  70. package/scss/blocks/_media.scss +105 -0
  71. package/scss/blocks/_menu.scss +191 -0
  72. package/scss/blocks/_meta.scss +59 -0
  73. package/scss/blocks/_modal.scss +156 -0
  74. package/scss/blocks/_navbar.scss +227 -0
  75. package/scss/blocks/_order-summary.scss +92 -0
  76. package/scss/blocks/_page-header.scss +88 -0
  77. package/scss/blocks/_pagination.scss +110 -0
  78. package/scss/blocks/_price.scss +88 -0
  79. package/scss/blocks/_product-card.scss +138 -0
  80. package/scss/blocks/_progress.scss +68 -0
  81. package/scss/blocks/_prose.scss +165 -0
  82. package/scss/blocks/_quantity.scss +73 -0
  83. package/scss/blocks/_quote.scss +71 -0
  84. package/scss/blocks/_rating.scss +50 -0
  85. package/scss/blocks/_site-footer.scss +135 -0
  86. package/scss/blocks/_skeleton.scss +63 -0
  87. package/scss/blocks/_spinner.scss +44 -0
  88. package/scss/blocks/_stat.scss +111 -0
  89. package/scss/blocks/_steps.scss +147 -0
  90. package/scss/blocks/_swatch.scss +117 -0
  91. package/scss/blocks/_table.scss +242 -0
  92. package/scss/blocks/_tabs.scss +168 -0
  93. package/scss/blocks/_tag.scss +72 -0
  94. package/scss/blocks/_timeline.scss +84 -0
  95. package/scss/blocks/_toast.scss +146 -0
  96. package/scss/blocks/_toolbar.scss +67 -0
  97. package/scss/blocks/_tooltip.scss +63 -0
  98. package/scss/helpers/_index.scss +2 -0
  99. package/scss/helpers/_rhythm.scss +64 -0
  100. package/scss/helpers/_typography.scss +4 -0
  101. package/scss/layout/_cluster.scss +43 -0
  102. package/scss/layout/_container.scss +26 -0
  103. package/scss/layout/_grid.scss +90 -0
  104. package/scss/layout/_index.scss +5 -0
  105. package/scss/layout/_section.scss +78 -0
  106. package/scss/layout/_shell.scss +87 -0
  107. package/scss/settings/_blocks.scss +3 -0
  108. package/scss/settings/_breakpoints.scss +7 -0
  109. package/scss/settings/_fonts.scss +5 -0
  110. package/scss/settings/_index.scss +7 -0
  111. package/scss/settings/_layout.scss +5 -0
  112. package/scss/settings/_prefix.scss +1 -0
  113. package/scss/settings/_rhythm.scss +6 -0
  114. package/scss/settings/_utilities.scss +2 -0
  115. package/scss/tokens/_borders.scss +16 -0
  116. package/scss/tokens/_elevation.scss +37 -0
  117. package/scss/tokens/_index.scss +8 -0
  118. package/scss/tokens/_layout.scss +17 -0
  119. package/scss/tokens/_motion.scss +17 -0
  120. package/scss/tokens/_palette.scss +50 -0
  121. package/scss/tokens/_roles.scss +90 -0
  122. package/scss/tokens/_space.scss +9 -0
  123. package/scss/tokens/_type.scss +57 -0
  124. package/scss/tools/_bem.scss +22 -0
  125. package/scss/tools/_index.scss +4 -0
  126. package/scss/tools/_rhythm.scss +26 -0
  127. package/scss/tools/_role-engine.scss +16 -0
  128. package/scss/tools/_utility-generator.scss +74 -0
  129. package/scss/utilities/_index.scss +8 -0
  130. 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
@@ -0,0 +1,8 @@
1
+ /* TEAM */
2
+ Developer: Andrés Villarreal @ Collective Trait
3
+ Site: https://lineaui.com
4
+ GitHub: https://github.com/collectivetrait/lineaui
5
+
6
+ /* SITE */
7
+ Standards: BEM, CSS Cascade Layers
8
+ Software: SCSS, JavaScript, Node.js
package/js/config.js ADDED
@@ -0,0 +1,3 @@
1
+ import config from '../config.json';
2
+
3
+ export const prefix = config.prefix;
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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
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
+ }