@livenetworks/ashlar 1.6.1 → 2.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 (559) hide show
  1. package/LICENSE +641 -0
  2. package/README.md +202 -86
  3. package/{js → components}/COMPONENTS.md +1116 -1108
  4. package/{js → components}/index.js +81 -58
  5. package/{js → components}/ln-accordion/README.md +7 -6
  6. package/components/ln-accordion/ln-accordion-dev.scss +8 -0
  7. package/components/ln-accordion/ln-accordion.js +1 -0
  8. package/components/ln-accordion/ln-accordion.schema.json +30 -0
  9. package/components/ln-accordion/ln-accordion.scss +8 -0
  10. package/{js → components}/ln-accordion/src/ln-accordion.js +8 -2
  11. package/{js → components}/ln-ajax/README.md +171 -160
  12. package/components/ln-ajax/ln-ajax-dev.scss +8 -0
  13. package/components/ln-ajax/ln-ajax.js +1 -0
  14. package/components/ln-ajax/ln-ajax.schema.json +30 -0
  15. package/{js → components}/ln-ajax/src/ln-ajax.js +65 -30
  16. package/{js → components}/ln-api-connector/README.md +27 -5
  17. package/components/ln-api-connector/ln-api-connector.js +1 -0
  18. package/components/ln-api-connector/ln-api-connector.schema.json +96 -0
  19. package/components/ln-api-connector/src/connector-core.js +97 -0
  20. package/components/ln-api-connector/src/ln-api-connector.js +447 -0
  21. package/{js → components}/ln-api-queue/README.md +12 -9
  22. package/components/ln-api-queue/ln-api-queue.js +1 -0
  23. package/components/ln-api-queue/ln-api-queue.schema.json +34 -0
  24. package/{js → components}/ln-api-queue/src/ln-api-queue.js +33 -14
  25. package/{js → components}/ln-api-queue/src/queue-storage.js +7 -3
  26. package/{js → components}/ln-autoresize/README.md +129 -127
  27. package/components/ln-autoresize/ln-autoresize-dev.scss +8 -0
  28. package/components/ln-autoresize/ln-autoresize.js +1 -0
  29. package/components/ln-autoresize/ln-autoresize.schema.json +22 -0
  30. package/{js → components}/ln-autoresize/src/ln-autoresize.js +8 -1
  31. package/{js → components}/ln-autosave/README.md +127 -124
  32. package/components/ln-autosave/ln-autosave-dev.scss +13 -0
  33. package/components/ln-autosave/ln-autosave.js +1 -0
  34. package/components/ln-autosave/ln-autosave.schema.json +48 -0
  35. package/components/ln-autosave/src/autosave-model.js +34 -0
  36. package/{js → components}/ln-autosave/src/ln-autosave.js +65 -58
  37. package/components/ln-chart/README.md +145 -0
  38. package/components/ln-chart/ln-chart-dev.scss +20 -0
  39. package/components/ln-chart/ln-chart.js +1 -0
  40. package/components/ln-chart/ln-chart.schema.json +146 -0
  41. package/components/ln-chart/ln-chart.scss +8 -0
  42. package/components/ln-chart/src/chart-model.js +154 -0
  43. package/components/ln-chart/src/ln-chart.js +176 -0
  44. package/{js → components}/ln-circular-progress/README.md +15 -14
  45. package/components/ln-circular-progress/ln-circular-progress-dev.scss +8 -0
  46. package/components/ln-circular-progress/ln-circular-progress.js +1 -0
  47. package/components/ln-circular-progress/ln-circular-progress.schema.json +42 -0
  48. package/{js → components}/ln-circular-progress/src/ln-circular-progress.js +32 -50
  49. package/{js → components}/ln-confirm/README.md +69 -18
  50. package/components/ln-confirm/ln-confirm-dev.scss +24 -0
  51. package/components/ln-confirm/ln-confirm.js +1 -0
  52. package/components/ln-confirm/ln-confirm.schema.json +66 -0
  53. package/components/ln-confirm/ln-confirm.scss +24 -0
  54. package/{js → components}/ln-confirm/src/ln-confirm.js +180 -171
  55. package/{js → components}/ln-core/README.md +374 -149
  56. package/components/ln-core/attrs.js +273 -0
  57. package/components/ln-core/compare.js +40 -0
  58. package/components/ln-core/crypto.js +265 -0
  59. package/components/ln-core/date.js +50 -0
  60. package/components/ln-core/dom.js +115 -0
  61. package/components/ln-core/events.js +122 -0
  62. package/components/ln-core/form.js +136 -0
  63. package/{js → components}/ln-core/hash.js +149 -92
  64. package/components/ln-core/helpers.js +33 -0
  65. package/components/ln-core/http.js +48 -0
  66. package/components/ln-core/index.js +11 -0
  67. package/components/ln-core/lifecycle.js +403 -0
  68. package/components/ln-core/ln-core.schema.json +109 -0
  69. package/components/ln-core/locale.js +55 -0
  70. package/components/ln-core/matching.js +78 -0
  71. package/components/ln-core/number.js +125 -0
  72. package/components/ln-core/progress.js +30 -0
  73. package/components/ln-core/template.js +206 -0
  74. package/{js → components}/ln-core/window-cache.js +247 -213
  75. package/{js → components}/ln-couchdb-connector/README.md +7 -5
  76. package/components/ln-couchdb-connector/ln-couchdb-connector.js +1 -0
  77. package/components/ln-couchdb-connector/ln-couchdb-connector.schema.json +50 -0
  78. package/{js → components}/ln-couchdb-connector/src/ln-couchdb-connector.js +29 -43
  79. package/{js → components}/ln-data-coordinator/README.md +109 -73
  80. package/components/ln-data-coordinator/ln-data-coordinator-dev.scss +8 -0
  81. package/components/ln-data-coordinator/ln-data-coordinator.js +1 -0
  82. package/components/ln-data-coordinator/ln-data-coordinator.schema.json +196 -0
  83. package/components/ln-data-coordinator/src/data-read-policy.js +41 -0
  84. package/{js → components}/ln-data-coordinator/src/ln-data-coordinator.js +411 -154
  85. package/{js → components}/ln-data-coordinator/src/mutation-receipts.js +0 -5
  86. package/{js → components}/ln-data-store/README.md +42 -17
  87. package/components/ln-data-store/ln-data-store-dev.scss +13 -0
  88. package/components/ln-data-store/ln-data-store.js +1 -0
  89. package/components/ln-data-store/ln-data-store.schema.json +84 -0
  90. package/components/ln-data-store/src/data-store-model.js +155 -0
  91. package/{js → components}/ln-data-store/src/ln-data-store.js +407 -105
  92. package/components/ln-data-store/src/window-index.js +119 -0
  93. package/{js → components}/ln-date/README.md +17 -7
  94. package/{js → components}/ln-date/ln-date-dev.scss +14 -14
  95. package/components/ln-date/ln-date.js +1 -0
  96. package/components/ln-date/ln-date.schema.json +92 -0
  97. package/components/ln-date/src/date-model.js +186 -0
  98. package/components/ln-date/src/ln-date.js +486 -0
  99. package/components/ln-debug/README.md +132 -0
  100. package/components/ln-debug/ln-debug.js +1 -0
  101. package/components/ln-debug/ln-debug.schema.json +28 -0
  102. package/components/ln-debug/src/console-sink.js +19 -0
  103. package/components/ln-debug/src/debug-verifier.js +331 -0
  104. package/components/ln-debug/src/gate.js +95 -0
  105. package/components/ln-debug/src/generated-attributes.js +299 -0
  106. package/components/ln-debug/src/ln-debug.js +60 -0
  107. package/{js → components}/ln-dropdown/README.md +150 -140
  108. package/components/ln-dropdown/ln-dropdown-dev.scss +13 -0
  109. package/components/ln-dropdown/ln-dropdown.js +1 -0
  110. package/components/ln-dropdown/ln-dropdown.schema.json +90 -0
  111. package/components/ln-dropdown/ln-dropdown.scss +18 -0
  112. package/{js → components}/ln-dropdown/src/ln-dropdown.js +114 -11
  113. package/{js → components}/ln-editor/README.md +11 -9
  114. package/components/ln-editor/ln-editor-dev.scss +18 -0
  115. package/components/ln-editor/ln-editor.js +1 -0
  116. package/components/ln-editor/ln-editor.schema.json +58 -0
  117. package/components/ln-editor/ln-editor.scss +13 -0
  118. package/{js → components}/ln-editor/src/ln-editor.js +59 -11
  119. package/{js → components}/ln-external-links/README.md +10 -8
  120. package/components/ln-external-links/ln-external-links.js +1 -0
  121. package/components/ln-external-links/ln-external-links.schema.json +18 -0
  122. package/{js → components}/ln-external-links/src/ln-external-links.js +13 -11
  123. package/{js → components}/ln-fill/README.md +6 -8
  124. package/components/ln-fill/ln-fill.js +1 -0
  125. package/components/ln-fill/ln-fill.schema.json +23 -0
  126. package/{js → components}/ln-fill/src/ln-fill.js +7 -1
  127. package/components/ln-filter/README.md +131 -0
  128. package/components/ln-filter/ln-filter-dev.scss +13 -0
  129. package/components/ln-filter/ln-filter.js +1 -0
  130. package/components/ln-filter/ln-filter.schema.json +153 -0
  131. package/components/ln-filter/src/filter-model.js +185 -0
  132. package/components/ln-filter/src/ln-filter.js +435 -0
  133. package/{js → components}/ln-form/README.md +260 -264
  134. package/components/ln-form/ln-form-dev.scss +8 -0
  135. package/components/ln-form/ln-form.js +1 -0
  136. package/components/ln-form/ln-form.schema.json +45 -0
  137. package/{js → components}/ln-form/src/ln-form.js +107 -99
  138. package/{js → components}/ln-http/README.md +11 -6
  139. package/components/ln-http/ln-http.js +1 -0
  140. package/components/ln-http/ln-http.schema.json +6 -0
  141. package/components/ln-http/src/http-core.js +51 -0
  142. package/{js → components}/ln-http/src/ln-http.js +28 -33
  143. package/{js → components}/ln-icon/README.md +16 -9
  144. package/components/ln-icon/ln-icon.schema.json +6 -0
  145. package/components/ln-include/README.md +75 -0
  146. package/components/ln-include/ln-include-dev.scss +13 -0
  147. package/components/ln-include/ln-include.js +1 -0
  148. package/components/ln-include/ln-include.schema.json +23 -0
  149. package/components/ln-include/src/ln-include.js +111 -0
  150. package/components/ln-key/README.md +130 -0
  151. package/components/ln-key/ln-key-dev.scss +18 -0
  152. package/components/ln-key/ln-key.js +1 -0
  153. package/components/ln-key/ln-key.schema.json +56 -0
  154. package/components/ln-key/src/key-model.js +146 -0
  155. package/components/ln-key/src/ln-key.js +201 -0
  156. package/{js → components}/ln-link/README.md +7 -9
  157. package/components/ln-link/ln-link-dev.scss +8 -0
  158. package/components/ln-link/ln-link.js +1 -0
  159. package/components/ln-link/ln-link.schema.json +22 -0
  160. package/{js → components}/ln-link/src/ln-link.js +16 -11
  161. package/components/ln-list/README.md +152 -0
  162. package/components/ln-list/ln-list-dev.scss +8 -0
  163. package/components/ln-list/ln-list.js +1 -0
  164. package/components/ln-list/ln-list.schema.json +166 -0
  165. package/components/ln-list/ln-list.scss +25 -0
  166. package/{js → components}/ln-list/src/ln-list.js +1301 -1216
  167. package/{js → components}/ln-modal/README.md +13 -10
  168. package/components/ln-modal/ln-modal-dev.scss +18 -0
  169. package/components/ln-modal/ln-modal.js +1 -0
  170. package/components/ln-modal/ln-modal.schema.json +54 -0
  171. package/components/ln-modal/ln-modal.scss +51 -0
  172. package/{js → components}/ln-modal/src/ln-modal.js +164 -137
  173. package/{js → components}/ln-nav/README.md +11 -11
  174. package/components/ln-nav/ln-nav.js +1 -0
  175. package/components/ln-nav/ln-nav.schema.json +25 -0
  176. package/{js → components}/ln-nav/src/ln-nav.js +25 -14
  177. package/components/ln-number/README.md +205 -0
  178. package/{js → components}/ln-number/ln-number-dev.scss +13 -13
  179. package/components/ln-number/ln-number.js +1 -0
  180. package/components/ln-number/ln-number.schema.json +63 -0
  181. package/components/ln-number/src/ln-number.js +400 -0
  182. package/components/ln-number/src/number-model.js +31 -0
  183. package/components/ln-obfuscator/README.md +60 -0
  184. package/components/ln-obfuscator/ln-obfuscator.js +1 -0
  185. package/components/ln-obfuscator/ln-obfuscator.schema.json +49 -0
  186. package/components/ln-obfuscator/src/ln-obfuscator.js +159 -0
  187. package/components/ln-obfuscator/src/obfuscator-model.js +250 -0
  188. package/{js → components}/ln-options/README.md +3 -1
  189. package/components/ln-options/ln-options-dev.scss +13 -0
  190. package/components/ln-options/ln-options.js +1 -0
  191. package/components/ln-options/ln-options.schema.json +41 -0
  192. package/{js → components}/ln-options/src/ln-options.js +13 -5
  193. package/components/ln-persist/README.md +151 -0
  194. package/components/ln-persist/ln-persist.js +1 -0
  195. package/components/ln-persist/ln-persist.schema.json +28 -0
  196. package/components/ln-persist/src/ln-persist.js +83 -0
  197. package/components/ln-picklist/README.md +230 -0
  198. package/components/ln-picklist/ln-picklist-dev.scss +22 -0
  199. package/components/ln-picklist/ln-picklist.js +1 -0
  200. package/components/ln-picklist/ln-picklist.schema.json +49 -0
  201. package/components/ln-picklist/src/ln-picklist.js +228 -0
  202. package/{js → components}/ln-popover/README.md +164 -162
  203. package/components/ln-popover/ln-popover-dev.scss +13 -0
  204. package/components/ln-popover/ln-popover.js +1 -0
  205. package/components/ln-popover/ln-popover.schema.json +82 -0
  206. package/components/ln-popover/ln-popover.scss +18 -0
  207. package/{js → components}/ln-popover/src/ln-popover.js +42 -36
  208. package/{js → components}/ln-progress/README.md +410 -413
  209. package/components/ln-progress/ln-progress-dev.scss +8 -0
  210. package/components/ln-progress/ln-progress.js +1 -0
  211. package/components/ln-progress/ln-progress.schema.json +40 -0
  212. package/components/ln-progress/src/ln-progress.js +91 -0
  213. package/components/ln-progress/src/progress-model.js +20 -0
  214. package/{js → components}/ln-router/README.md +443 -432
  215. package/components/ln-router/ln-router-dev.scss +13 -0
  216. package/components/ln-router/ln-router.js +1 -0
  217. package/components/ln-router/ln-router.schema.json +68 -0
  218. package/{js → components}/ln-router/src/ln-router.js +585 -539
  219. package/components/ln-router/src/router-model.js +50 -0
  220. package/components/ln-scroll/README.md +45 -0
  221. package/components/ln-scroll/ln-scroll.js +1 -0
  222. package/components/ln-scroll/ln-scroll.schema.json +85 -0
  223. package/components/ln-scroll/src/ln-scroll.js +150 -0
  224. package/components/ln-search/README.md +188 -0
  225. package/components/ln-search/ln-search-dev.scss +13 -0
  226. package/components/ln-search/ln-search.js +1 -0
  227. package/components/ln-search/ln-search.schema.json +103 -0
  228. package/components/ln-search/src/ln-search.js +330 -0
  229. package/{js → components}/ln-slug/README.md +6 -3
  230. package/components/ln-slug/ln-slug-dev.scss +18 -0
  231. package/components/ln-slug/ln-slug.js +1 -0
  232. package/components/ln-slug/ln-slug.schema.json +23 -0
  233. package/{js → components}/ln-slug/src/ln-slug.js +20 -13
  234. package/components/ln-slug/src/slug-model.js +21 -0
  235. package/{js → components}/ln-sort/README.md +178 -170
  236. package/{js → components}/ln-sort/ln-sort-dev.scss +8 -8
  237. package/components/ln-sort/ln-sort.js +1 -0
  238. package/components/ln-sort/ln-sort.schema.json +104 -0
  239. package/components/ln-sort/src/ln-sort.js +321 -0
  240. package/components/ln-sort/src/sort-model.js +117 -0
  241. package/{js → components}/ln-sortable/README.md +7 -11
  242. package/components/ln-sortable/ln-sortable-dev.scss +13 -0
  243. package/components/ln-sortable/ln-sortable.js +1 -0
  244. package/components/ln-sortable/ln-sortable.schema.json +36 -0
  245. package/{js → components}/ln-sortable/src/ln-sortable.js +8 -13
  246. package/{js → components}/ln-stat/README.md +3 -1
  247. package/components/ln-stat/ln-stat-dev.scss +8 -0
  248. package/components/ln-stat/ln-stat.js +1 -0
  249. package/components/ln-stat/ln-stat.schema.json +32 -0
  250. package/{js → components}/ln-stat/src/ln-stat.js +14 -18
  251. package/components/ln-stat/src/stat-model.js +28 -0
  252. package/{js → components}/ln-table/README.md +37 -24
  253. package/{js → components}/ln-table/ln-table-dev.scss +17 -17
  254. package/components/ln-table/ln-table.js +1 -0
  255. package/components/ln-table/ln-table.schema.json +211 -0
  256. package/components/ln-table/ln-table.scss +15 -0
  257. package/{js → components}/ln-table/src/ln-table.js +1365 -1493
  258. package/components/ln-table/src/table-model.js +98 -0
  259. package/components/ln-table-coordinator/README.md +61 -0
  260. package/components/ln-table-coordinator/ln-table-coordinator.js +1 -0
  261. package/components/ln-table-coordinator/ln-table-coordinator.schema.json +93 -0
  262. package/components/ln-table-coordinator/src/ln-table-coordinator.js +193 -0
  263. package/{js → components}/ln-tabs/README.md +32 -14
  264. package/components/ln-tabs/ln-tabs-dev.scss +24 -0
  265. package/components/ln-tabs/ln-tabs.js +1 -0
  266. package/components/ln-tabs/ln-tabs.schema.json +75 -0
  267. package/components/ln-tabs/ln-tabs.scss +8 -0
  268. package/components/ln-tabs/src/ln-tabs.js +207 -0
  269. package/components/ln-tabs/src/tabs-model.js +82 -0
  270. package/{js → components}/ln-time/README.md +96 -95
  271. package/components/ln-time/ln-time-dev.scss +13 -0
  272. package/components/ln-time/ln-time.js +1 -0
  273. package/components/ln-time/ln-time.schema.json +38 -0
  274. package/{js → components}/ln-time/src/ln-time.js +206 -223
  275. package/components/ln-time/src/time-model.js +64 -0
  276. package/{js → components}/ln-toast/README.md +23 -5
  277. package/components/ln-toast/ln-toast-dev.scss +8 -0
  278. package/components/ln-toast/ln-toast.js +1 -0
  279. package/components/ln-toast/ln-toast.schema.json +65 -0
  280. package/components/ln-toast/ln-toast.scss +59 -0
  281. package/{js → components}/ln-toast/src/ln-toast.js +233 -232
  282. package/{js → components}/ln-toggle/README.md +198 -196
  283. package/{js → components}/ln-toggle/ln-toggle-dev.scss +13 -13
  284. package/components/ln-toggle/ln-toggle.js +1 -0
  285. package/components/ln-toggle/ln-toggle.schema.json +52 -0
  286. package/components/ln-toggle/ln-toggle.scss +37 -0
  287. package/{js → components}/ln-toggle/src/ln-toggle.js +61 -46
  288. package/{js → components}/ln-tooltip/README.md +6 -6
  289. package/{js → components}/ln-tooltip/ln-tooltip-dev.scss +9 -9
  290. package/components/ln-tooltip/ln-tooltip.js +1 -0
  291. package/components/ln-tooltip/ln-tooltip.schema.json +86 -0
  292. package/components/ln-tooltip/ln-tooltip.scss +9 -0
  293. package/{js → components}/ln-tooltip/src/ln-tooltip.js +14 -3
  294. package/{js → components}/ln-translations/README.md +3 -1
  295. package/components/ln-translations/ln-translations-dev.scss +13 -0
  296. package/components/ln-translations/ln-translations.js +1 -0
  297. package/components/ln-translations/ln-translations.schema.json +120 -0
  298. package/{js → components}/ln-translations/src/ln-translations.js +25 -10
  299. package/components/ln-ui-coordinator/README.md +101 -0
  300. package/components/ln-ui-coordinator/ln-ui-coordinator-dev.scss +8 -0
  301. package/components/ln-ui-coordinator/ln-ui-coordinator.js +1 -0
  302. package/components/ln-ui-coordinator/ln-ui-coordinator.schema.json +60 -0
  303. package/{js/ln-modal-coordinator/src/ln-modal-coordinator.js → components/ln-ui-coordinator/src/ln-ui-coordinator.js} +403 -345
  304. package/components/ln-upload/README.md +133 -0
  305. package/components/ln-upload/ln-upload-dev.scss +18 -0
  306. package/components/ln-upload/ln-upload.js +1 -0
  307. package/components/ln-upload/ln-upload.schema.json +193 -0
  308. package/components/ln-upload/ln-upload.scss +20 -0
  309. package/components/ln-upload/src/ln-upload.js +652 -0
  310. package/components/ln-upload/src/upload-model.js +78 -0
  311. package/{js → components}/ln-validate/README.md +182 -180
  312. package/{js → components}/ln-validate/ln-validate-dev.scss +15 -15
  313. package/components/ln-validate/ln-validate.js +1 -0
  314. package/components/ln-validate/ln-validate.schema.json +50 -0
  315. package/components/ln-validate/ln-validate.scss +7 -0
  316. package/{js → components}/ln-validate/src/ln-validate.js +23 -45
  317. package/components/ln-validate/src/validate-model.js +64 -0
  318. package/components/ln-websocket-connector/README.md +166 -0
  319. package/components/ln-websocket-connector/ln-websocket-connector.js +1 -0
  320. package/components/ln-websocket-connector/ln-websocket-connector.schema.json +29 -0
  321. package/components/ln-websocket-connector/src/ln-websocket-connector.js +279 -0
  322. package/ln-ashlar.html-data.json +1796 -0
  323. package/package.json +84 -61
  324. package/{scss → theme}/base/_global.scss +1 -2
  325. package/{scss → theme}/base/_reset.scss +1 -1
  326. package/{scss → theme}/base/_typography.scss +2 -0
  327. package/theme/brand.css +73 -0
  328. package/{scss → theme}/components/_app-shell.scss +8 -0
  329. package/theme/components/_button.scss +24 -0
  330. package/theme/components/_chart.scss +5 -0
  331. package/theme/components/_confirm.scss +6 -0
  332. package/{scss → theme}/components/_date.scss +30 -22
  333. package/{scss → theme}/components/_dropdown.scss +6 -1
  334. package/theme/components/_form.scss +140 -0
  335. package/{scss → theme}/components/_layout.scss +6 -0
  336. package/{scss → theme}/components/_ln-table.scss +1 -6
  337. package/theme/components/_picklist.scss +3 -0
  338. package/{scss → theme}/components/_sort.scss +10 -10
  339. package/theme/components/_status-badge.scss +6 -0
  340. package/{scss → theme}/components/_table.scss +16 -0
  341. package/{scss → theme}/components/_tabs.scss +0 -4
  342. package/theme/components/_toast.scss +48 -0
  343. package/{scss → theme}/components/_toggle.scss +1 -1
  344. package/theme/components/_upload.scss +45 -0
  345. package/{scss → theme}/config/_breakpoints.scss +1 -1
  346. package/theme/config/_contrast.scss +128 -0
  347. package/{scss → theme}/config/_density.scss +191 -205
  348. package/theme/config/_palette.scss +274 -0
  349. package/theme/config/_theme.scss +293 -0
  350. package/{scss → theme}/config/_tokens.scss +285 -441
  351. package/{scss → theme}/config/mixins/_accordion.scss +1 -1
  352. package/{scss → theme}/config/mixins/_alert.scss +1 -0
  353. package/{scss → theme}/config/mixins/_app-shell.scss +4 -2
  354. package/{scss → theme}/config/mixins/_borders.scss +2 -0
  355. package/theme/config/mixins/_btn.scss +175 -0
  356. package/{scss → theme}/config/mixins/_card.scss +55 -46
  357. package/theme/config/mixins/_chart.scss +82 -0
  358. package/{scss → theme}/config/mixins/_collapsible.scss +2 -1
  359. package/{scss → theme}/config/mixins/_colors.scss +8 -14
  360. package/{scss → theme}/config/mixins/_diagnostics.scss +48 -48
  361. package/theme/config/mixins/_dropdown.scss +169 -0
  362. package/{scss → theme}/config/mixins/_editor.scss +0 -7
  363. package/{scss → theme}/config/mixins/_filter.scss +47 -47
  364. package/{scss → theme}/config/mixins/_footer.scss +1 -1
  365. package/{scss → theme}/config/mixins/_form.scss +49 -18
  366. package/{scss → theme}/config/mixins/_index.scss +62 -61
  367. package/{scss → theme}/config/mixins/_layout.scss +6 -2
  368. package/{scss → theme}/config/mixins/_ln-table.scss +31 -10
  369. package/{scss → theme}/config/mixins/_loader.scss +1 -1
  370. package/{scss → theme}/config/mixins/_modal.scss +145 -149
  371. package/{scss → theme}/config/mixins/_motion.scss +13 -0
  372. package/{scss → theme}/config/mixins/_nav.scss +7 -7
  373. package/theme/config/mixins/_picklist.scss +66 -0
  374. package/theme/config/mixins/_popover.scss +96 -0
  375. package/{scss → theme}/config/mixins/_sidebar.scss +7 -4
  376. package/{scss → theme}/config/mixins/_sort.scss +43 -42
  377. package/{scss → theme}/config/mixins/_status-badge.scss +15 -2
  378. package/{scss → theme}/config/mixins/_table.scss +25 -14
  379. package/{scss → theme}/config/mixins/_tabs.scss +1 -1
  380. package/{scss → theme}/config/mixins/_toast.scss +174 -179
  381. package/{scss → theme}/config/mixins/_tooltip.scss +2 -2
  382. package/{scss → theme}/config/mixins/_typography.scss +16 -5
  383. package/{scss → theme}/config/mixins/_upload.scss +8 -6
  384. package/theme/ln-ashlar-core.scss +24 -0
  385. package/theme/ln-ashlar-dev.scss +66 -0
  386. package/theme/ln-ashlar-landing.scss +56 -0
  387. package/{scss/ln-ashlar.scss → theme/ln-ashlar-theme.scss} +63 -69
  388. package/theme/ln-ashlar.scss +8 -0
  389. package/theme/presentation/_bento.scss +151 -0
  390. package/theme/presentation/_cta.scss +111 -0
  391. package/theme/presentation/_effects.scss +216 -0
  392. package/theme/presentation/_features.scss +108 -0
  393. package/theme/presentation/_footer.scss +129 -0
  394. package/theme/presentation/_hero.scss +158 -0
  395. package/theme/presentation/_layout.scss +170 -0
  396. package/theme/presentation/_navbar.scss +140 -0
  397. package/theme/presentation/_pricing.scss +262 -0
  398. package/theme/presentation/_stats.scss +87 -0
  399. package/theme/presentation/_testimonials.scss +124 -0
  400. package/theme/presentation/_tokens.scss +39 -0
  401. package/theme/presentation/_typography.scss +163 -0
  402. package/{scss → theme}/utilities/_animations.scss +38 -0
  403. package/{scss → theme}/utilities/_utilities.scss +6 -0
  404. package/web-types.json +2312 -0
  405. package/js/ln-accordion/ln-accordion.js +0 -1
  406. package/js/ln-ajax/ln-ajax.js +0 -1
  407. package/js/ln-api-connector/ln-api-connector.js +0 -1
  408. package/js/ln-api-connector/src/ln-api-connector.js +0 -368
  409. package/js/ln-api-queue/ln-api-queue.js +0 -1
  410. package/js/ln-autoresize/ln-autoresize.js +0 -1
  411. package/js/ln-autosave/ln-autosave.js +0 -1
  412. package/js/ln-circular-progress/ln-circular-progress.js +0 -1
  413. package/js/ln-confirm/_ln-confirm.scss +0 -24
  414. package/js/ln-confirm/ln-confirm.js +0 -1
  415. package/js/ln-core/crypto.js +0 -83
  416. package/js/ln-core/helpers.js +0 -788
  417. package/js/ln-core/index.js +0 -7
  418. package/js/ln-core/persist.js +0 -97
  419. package/js/ln-couchdb-connector/ln-couchdb-connector.js +0 -1
  420. package/js/ln-data-coordinator/ln-data-coordinator.js +0 -1
  421. package/js/ln-data-coordinator/src/data-read-policy.js +0 -18
  422. package/js/ln-data-store/ln-data-store.js +0 -1
  423. package/js/ln-date/ln-date.js +0 -1
  424. package/js/ln-date/src/ln-date.js +0 -603
  425. package/js/ln-debug/README.md +0 -58
  426. package/js/ln-debug/ln-debug.js +0 -1
  427. package/js/ln-debug/src/ln-debug.js +0 -19
  428. package/js/ln-dropdown/ln-dropdown.js +0 -1
  429. package/js/ln-dropdown/ln-dropdown.scss +0 -15
  430. package/js/ln-editor/ln-editor.js +0 -1
  431. package/js/ln-editor/ln-editor.scss +0 -43
  432. package/js/ln-external-links/ln-external-links.js +0 -1
  433. package/js/ln-fill/ln-fill.js +0 -1
  434. package/js/ln-filter/README.md +0 -189
  435. package/js/ln-filter/ln-filter-dev.scss +0 -8
  436. package/js/ln-filter/ln-filter.js +0 -1
  437. package/js/ln-filter/src/ln-filter.js +0 -419
  438. package/js/ln-form/ln-form.js +0 -1
  439. package/js/ln-http/ln-http.js +0 -1
  440. package/js/ln-link/ln-link.js +0 -1
  441. package/js/ln-list/README.md +0 -129
  442. package/js/ln-list/ln-list.js +0 -1
  443. package/js/ln-list/ln-list.scss +0 -28
  444. package/js/ln-modal/ln-modal-dev.scss +0 -13
  445. package/js/ln-modal/ln-modal.js +0 -1
  446. package/js/ln-modal/ln-modal.scss +0 -35
  447. package/js/ln-modal-coordinator/README.md +0 -99
  448. package/js/ln-modal-coordinator/ln-modal-coordinator-dev.scss +0 -8
  449. package/js/ln-modal-coordinator/ln-modal-coordinator.js +0 -1
  450. package/js/ln-nav/ln-nav.js +0 -1
  451. package/js/ln-number/README.md +0 -149
  452. package/js/ln-number/ln-number.js +0 -1
  453. package/js/ln-number/src/ln-number.js +0 -443
  454. package/js/ln-options/ln-options.js +0 -1
  455. package/js/ln-popover/ln-popover.js +0 -1
  456. package/js/ln-progress/ln-progress.js +0 -1
  457. package/js/ln-progress/src/ln-progress.js +0 -98
  458. package/js/ln-router/ln-router.js +0 -1
  459. package/js/ln-search/README.md +0 -158
  460. package/js/ln-search/ln-search-dev.scss +0 -8
  461. package/js/ln-search/ln-search.js +0 -1
  462. package/js/ln-search/src/ln-search.js +0 -117
  463. package/js/ln-slug/ln-slug.js +0 -1
  464. package/js/ln-sort/ln-sort.js +0 -1
  465. package/js/ln-sort/src/ln-sort.js +0 -178
  466. package/js/ln-sortable/ln-sortable.js +0 -1
  467. package/js/ln-stat/ln-stat.js +0 -1
  468. package/js/ln-table/ln-table.js +0 -1
  469. package/js/ln-table/ln-table.scss +0 -11
  470. package/js/ln-table-coordinator/README.md +0 -73
  471. package/js/ln-table-coordinator/ln-table-coordinator.js +0 -1
  472. package/js/ln-table-coordinator/src/ln-table-coordinator.js +0 -160
  473. package/js/ln-tabs/ln-tabs-dev.scss +0 -18
  474. package/js/ln-tabs/ln-tabs.js +0 -1
  475. package/js/ln-tabs/src/ln-tabs.js +0 -188
  476. package/js/ln-time/ln-time.js +0 -1
  477. package/js/ln-toast/ln-toast.js +0 -1
  478. package/js/ln-toggle/ln-toggle.js +0 -1
  479. package/js/ln-tooltip/ln-tooltip.js +0 -1
  480. package/js/ln-tooltip/ln-tooltip.scss +0 -9
  481. package/js/ln-translations/ln-translations.js +0 -1
  482. package/js/ln-upload/README.md +0 -255
  483. package/js/ln-upload/ln-upload.js +0 -1
  484. package/js/ln-upload/ln-upload.scss +0 -20
  485. package/js/ln-upload/src/ln-upload.js +0 -423
  486. package/js/ln-validate/ln-validate.js +0 -1
  487. package/scss/components/_button.scss +0 -20
  488. package/scss/components/_confirm.scss +0 -5
  489. package/scss/components/_form.scss +0 -107
  490. package/scss/components/_status-badge.scss +0 -4
  491. package/scss/components/_toast.scss +0 -68
  492. package/scss/components/_upload.scss +0 -51
  493. package/scss/config/_theme.scss +0 -216
  494. package/scss/config/mixins/_btn.scss +0 -179
  495. package/scss/config/mixins/_confirm.scss +0 -31
  496. package/scss/config/mixins/_dropdown.scss +0 -141
  497. package/scss/config/mixins/_popover.scss +0 -64
  498. package/scss/ln-ashlar-dev.scss +0 -39
  499. /package/{js → components}/ln-core/positioning.js +0 -0
  500. /package/{js → components}/ln-core/reactive.js +0 -0
  501. /package/{js → components}/ln-filter/ln-filter.scss +0 -0
  502. /package/{js → components}/ln-icon/ln-icon.js +0 -0
  503. /package/{js → components}/ln-icon/src/ln-icon.js +0 -0
  504. /package/{js → components}/ln-search/ln-search.scss +0 -0
  505. /package/{js → components}/ln-toast/template.html +0 -0
  506. /package/{scss → theme}/components/_accordion.scss +0 -0
  507. /package/{scss → theme}/components/_ajax.scss +0 -0
  508. /package/{scss → theme}/components/_alert.scss +0 -0
  509. /package/{scss → theme}/components/_avatar.scss +0 -0
  510. /package/{scss → theme}/components/_breadcrumbs.scss +0 -0
  511. /package/{scss → theme}/components/_card.scss +0 -0
  512. /package/{scss → theme}/components/_chip.scss +0 -0
  513. /package/{scss → theme}/components/_circular-progress.scss +0 -0
  514. /package/{scss → theme}/components/_editor.scss +0 -0
  515. /package/{scss → theme}/components/_empty-state.scss +0 -0
  516. /package/{scss → theme}/components/_filter.scss +0 -0
  517. /package/{scss → theme}/components/_link.scss +0 -0
  518. /package/{scss → theme}/components/_loader.scss +0 -0
  519. /package/{scss → theme}/components/_modal.scss +0 -0
  520. /package/{scss → theme}/components/_nav.scss +0 -0
  521. /package/{scss → theme}/components/_page-header.scss +0 -0
  522. /package/{scss → theme}/components/_popover.scss +0 -0
  523. /package/{scss → theme}/components/_progress.scss +0 -0
  524. /package/{scss → theme}/components/_prose.scss +0 -0
  525. /package/{scss → theme}/components/_scrollbar.scss +0 -0
  526. /package/{scss → theme}/components/_sections.scss +0 -0
  527. /package/{scss → theme}/components/_sidebar.scss +0 -0
  528. /package/{scss → theme}/components/_stat-card.scss +0 -0
  529. /package/{scss → theme}/components/_stepper.scss +0 -0
  530. /package/{scss → theme}/components/_timeline.scss +0 -0
  531. /package/{scss → theme}/components/_tooltip.scss +0 -0
  532. /package/{scss → theme}/components/_translations.scss +0 -0
  533. /package/{scss → theme}/config/_icons.scss +0 -0
  534. /package/{scss → theme}/config/_mixins.scss +0 -0
  535. /package/{scss → theme}/config/mixins/_ajax.scss +0 -0
  536. /package/{scss → theme}/config/mixins/_avatar.scss +0 -0
  537. /package/{scss → theme}/config/mixins/_breadcrumbs.scss +0 -0
  538. /package/{scss → theme}/config/mixins/_breakpoints.scss +0 -0
  539. /package/{scss → theme}/config/mixins/_chip.scss +0 -0
  540. /package/{scss → theme}/config/mixins/_circular-progress.scss +0 -0
  541. /package/{scss → theme}/config/mixins/_display.scss +0 -0
  542. /package/{scss → theme}/config/mixins/_empty-state.scss +0 -0
  543. /package/{scss → theme}/config/mixins/_focus.scss +0 -0
  544. /package/{scss → theme}/config/mixins/_interaction.scss +0 -0
  545. /package/{scss → theme}/config/mixins/_kbd.scss +0 -0
  546. /package/{scss → theme}/config/mixins/_link.scss +0 -0
  547. /package/{scss → theme}/config/mixins/_page-header.scss +0 -0
  548. /package/{scss → theme}/config/mixins/_position.scss +0 -0
  549. /package/{scss → theme}/config/mixins/_progress.scss +0 -0
  550. /package/{scss → theme}/config/mixins/_prose.scss +0 -0
  551. /package/{scss → theme}/config/mixins/_shadows.scss +0 -0
  552. /package/{scss → theme}/config/mixins/_sizing.scss +0 -0
  553. /package/{scss → theme}/config/mixins/_spacing.scss +0 -0
  554. /package/{scss → theme}/config/mixins/_stat-card.scss +0 -0
  555. /package/{scss → theme}/config/mixins/_stepper.scss +0 -0
  556. /package/{scss → theme}/config/mixins/_timeline.scss +0 -0
  557. /package/{scss → theme}/config/mixins/_transitions.scss +0 -0
  558. /package/{scss → theme}/config/mixins/_translations.scss +0 -0
  559. /package/{scss → theme}/tabler-icons.txt +0 -0
package/package.json CHANGED
@@ -1,61 +1,84 @@
1
- {
2
- "name": "@livenetworks/ashlar",
3
- "version": "1.6.1",
4
- "description": "LiveNetworks unified frontend library - CSS framework and vanilla JS components",
5
- "license": "MIT",
6
- "author": "Live Networks",
7
- "type": "module",
8
- "publishConfig": {
9
- "access": "public"
10
- },
11
- "repository": {
12
- "type": "git",
13
- "url": "git+https://github.com/livenetworks/ln-ashlar.git"
14
- },
15
- "homepage": "https://github.com/livenetworks/ln-ashlar#readme",
16
- "bugs": "https://github.com/livenetworks/ln-ashlar/issues",
17
- "keywords": [
18
- "css",
19
- "scss",
20
- "design-system",
21
- "frontend",
22
- "components",
23
- "vanilla-js"
24
- ],
25
- "files": [
26
- "scss/",
27
- "js/"
28
- ],
29
- "exports": {
30
- "./scss/*": "./scss/*",
31
- "./js/*": "./js/*"
32
- },
33
- "scripts": {
34
- "test": "node --test \"tests/*.test.js\"",
35
- "test:p0": "node --test tests/p0-data-integrity.test.js",
36
- "dev": "node scripts/build.mjs --watch",
37
- "build": "node scripts/build.mjs && npm run build:dev-css && npm run build:demos",
38
- "build:demos": "npm run build:demo-index && npm run build:demo-admin && npm run build:demo-docuflow && npm run build:demo-spa",
39
- "build:dev-css": "sass scss/ln-ashlar-dev.scss demo/dist/ln-ashlar-dev.css --no-source-map --style=compressed",
40
- "build:demo-index": "sass demo/index.scss demo/index.css --no-source-map --style=compressed",
41
- "build:demo-admin": "sass demo/admin/src/admin.scss demo/admin/dist/admin.css --no-source-map --style=compressed && cp demo/admin/src/demo.js demo/admin/dist/demo.js && node demo/admin/src/build-pages.mjs",
42
- "build:demo-docuflow": "sass demo/docuflow/docuflow.scss demo/docuflow/dist/docuflow.css --no-source-map --style=compressed",
43
- "build:demo-spa": "node demo/spa/build.mjs"
44
- },
45
- "devDependencies": {
46
- "@tabler/icons": "^3.41.1",
47
- "fake-indexeddb": "^6.2.4",
48
- "flag-icons": "^7.5.0",
49
- "puppeteer-core": "^25.1.0",
50
- "sass-embedded": "^1.83.0",
51
- "vite": "^6.0.0"
52
- },
53
- "peerDependencies": {
54
- "tom-select": "^2.0.0"
55
- },
56
- "peerDependenciesMeta": {
57
- "tom-select": {
58
- "optional": true
59
- }
60
- }
61
- }
1
+ {
2
+ "name": "@livenetworks/ashlar",
3
+ "version": "2.0.0",
4
+ "description": "LiveNetworks unified frontend library - CSS framework and vanilla JS components",
5
+ "license": "GPL-3.0-or-later",
6
+ "author": "Live Networks",
7
+ "type": "module",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/livenetworks/ln-ashlar.git"
14
+ },
15
+ "homepage": "https://github.com/livenetworks/ln-ashlar#readme",
16
+ "bugs": "https://github.com/livenetworks/ln-ashlar/issues",
17
+ "keywords": [
18
+ "css",
19
+ "scss",
20
+ "design-system",
21
+ "frontend",
22
+ "components",
23
+ "vanilla-js"
24
+ ],
25
+ "main": "./dist/ln-ashlar.js",
26
+ "style": "./dist/ln-ashlar.css",
27
+ "web-types": "./web-types.json",
28
+ "files": [
29
+ "dist/",
30
+ "theme/",
31
+ "components/",
32
+ "ln-ashlar.html-data.json",
33
+ "web-types.json"
34
+ ],
35
+ "exports": {
36
+ ".": {
37
+ "import": "./dist/ln-ashlar.js",
38
+ "default": "./dist/ln-ashlar.js"
39
+ },
40
+ "./core.css": "./dist/ln-ashlar-core.css",
41
+ "./theme.css": "./dist/ln-ashlar-theme.css",
42
+ "./full.css": "./dist/ln-ashlar.css",
43
+ "./landing.css": "./dist/ln-ashlar-landing.css",
44
+ "./presentation.css": "./dist/ln-ashlar-landing.css",
45
+ "./dev.css": "./dist/ln-ashlar-dev.css",
46
+ "./dev.js": "./dist/ln-ashlar-dev.js",
47
+ "./theme/*": "./theme/*",
48
+ "./components/*": "./components/*"
49
+ },
50
+ "scripts": {
51
+ "test": "npm run sync:ln-schemas:check && npm run sync:ln-events:check && npm run sync:css-tokens:check && node --test \"tests/*.test.js\"",
52
+ "test:p0": "node --test tests/p0-data-integrity.test.js",
53
+ "dev": "node scripts/build.mjs --watch",
54
+ "build": "npm run sync:ln-schemas && npm run sync:ln-events && npm run sync:css-tokens && node scripts/build.mjs && npm run build:dev-css && npm run build:demos",
55
+ "build:demos": "npm run build:demo-index && npm run build:demo-admin && npm run build:demo-docuflow && npm run build:demo-spa && npm run build:demo-landing && npm run build:demo-corporate",
56
+ "build:dev-css": "sass theme/ln-ashlar-dev.scss demo/dist/ln-ashlar-dev.css --no-source-map --style=compressed",
57
+ "generate:brand-assets": "powershell -ExecutionPolicy Bypass -File scripts/generate-brand-assets.ps1 && node scripts/generate-svg-favicon.mjs",
58
+ "build:demo-index": "sass demo/index.scss demo/index.css --no-source-map --style=compressed",
59
+ "build:demo-admin": "sass demo/admin/src/admin.scss demo/admin/dist/admin.css --no-source-map --style=compressed && node -e \"const fs = require('fs'); fs.copyFileSync('demo/admin/src/demo.js', 'demo/admin/dist/demo.js')\" && node demo/admin/src/build-pages.mjs",
60
+ "build:demo-docuflow": "sass demo/docuflow/docuflow.scss demo/docuflow/dist/docuflow.css --no-source-map --style=compressed",
61
+ "build:demo-spa": "node demo/spa/build.mjs",
62
+ "build:demo-landing": "sass demo/landing/landing.scss demo/landing/landing.css --no-source-map --style=compressed",
63
+ "build:demo-corporate": "sass demo/corporate/corporate.scss demo/corporate/corporate.css --no-source-map --style=compressed",
64
+ "sync:ln-schemas": "node scripts/sync-ln-schemas.mjs",
65
+ "sync:ln-schemas:check": "node scripts/sync-ln-schemas.mjs --check",
66
+ "sync:ln-events": "node scripts/sync-ln-events.mjs",
67
+ "sync:ln-events:check": "node scripts/sync-ln-events.mjs --check",
68
+ "sync:ln-events:strict": "node scripts/sync-ln-events.mjs --strict",
69
+ "sync:css-tokens": "node scripts/sync-css-tokens.mjs",
70
+ "sync:css-tokens:check": "node scripts/sync-css-tokens.mjs --check",
71
+ "manifest": "node scripts/extract-manifest.mjs",
72
+ "manifest:file": "node scripts/extract-manifest.mjs --output=docs/manifest.txt",
73
+ "generate:llms": "node scripts/generate-llms.mjs",
74
+ "generate:llms:check": "node scripts/generate-llms.mjs --check"
75
+ },
76
+ "devDependencies": {
77
+ "@tabler/icons": "^3.41.1",
78
+ "fake-indexeddb": "^6.2.4",
79
+ "flag-icons": "^7.5.0",
80
+ "puppeteer-core": "^25.1.0",
81
+ "sass-embedded": "^1.83.0",
82
+ "vite": "^6.0.0"
83
+ }
84
+ }
@@ -3,8 +3,7 @@
3
3
  html,
4
4
  body {
5
5
  @include w-full;
6
- @include h-full;
7
- overflow: hidden;
6
+ min-height: 100%;
8
7
  background-color: var(--bg-recessed);
9
8
  @include font-sans;
10
9
  -webkit-tap-highlight-color: transparent;
@@ -8,7 +8,7 @@
8
8
  display: none !important;
9
9
  }
10
10
 
11
- ul, ol, ul li, ol li {
11
+ ul, ol {
12
12
  list-style: none;
13
13
  }
14
14
 
@@ -82,6 +82,7 @@ code {
82
82
  @include text-sm;
83
83
  --color-bg: var(--bg-recessed);
84
84
  background-color: var(--color-bg);
85
+ color: var(--color-fg);
85
86
  padding: var(--size-2xs) var(--size-xs);
86
87
  @include rounded-sm;
87
88
  }
@@ -91,6 +92,7 @@ pre {
91
92
  @include text-sm;
92
93
  --color-bg: var(--bg-recessed);
93
94
  background-color: var(--color-bg);
95
+ color: var(--color-fg);
94
96
  padding: var(--size-md);
95
97
  @include rounded-md;
96
98
  @include border;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * ============================================================================
3
+ * ln-ashlar — Brand Configuration Template (brand.css)
4
+ * ============================================================================
5
+ *
6
+ * This file allows client applications to override corporate brand colors
7
+ * and typography in a single place, without modifying or recompiling core
8
+ * library files. Brand is polarity-free by default: one :root declaration
9
+ * serves light and dark alike.
10
+ *
11
+ * HOW TO USE:
12
+ * 1. Copy this file into your project (e.g., as `assets/css/brand.css`).
13
+ * 2. Link this file in your HTML. Thanks to zero-specificity `:where()` selectors
14
+ * in ln-ashlar, your definitions here will ALWAYS win regardless of stylesheet
15
+ * loading order (even if loaded before `ln-ashlar.css`).
16
+ *
17
+ * IMPORTANT RULES:
18
+ * - Bare HSL Triplets: Values for `--brand-primary` and `--brand-secondary` MUST
19
+ * be specified as bare HSL triplets (e.g. `221 83% 48%`), NEVER wrapped in `hsl(...)`.
20
+ * The library internally composes alpha transparency over these values using CSS
21
+ * color slash syntax: `hsl(var(--color-primary) / 0.2)`. Wrapping them in `hsl()`
22
+ * would produce invalid syntax like `hsl(hsl(...) / 0.2)` and drop declarations.
23
+ *
24
+ * - Tint Overrides: By default, `--color-accent-tint` and `--color-accent-tint-strong`
25
+ * are automatically computed via `color-mix()` against local surface backgrounds.
26
+ * If your brand requires custom hand-tuned tint shades, uncomment and set
27
+ * `--brand-primary-tint` and `--brand-primary-tint-strong`.
28
+ *
29
+ * - Additional Overrides: You may also customize font families (`--font-sans`, `--font-mono`)
30
+ * or override any neutral color tokens (`--color-neutral-50` ... `--color-neutral-900`)
31
+ * within the respective theme blocks below.
32
+ * ============================================================================
33
+ */
34
+
35
+ /* -------------------------------------------------------------------------- */
36
+ /* Light Mode Brand Values */
37
+ /* -------------------------------------------------------------------------- */
38
+ :root {
39
+ /* Primary brand color (bare HSL triplet: hue saturation% lightness%) */
40
+ --brand-primary: 221 83% 43%;
41
+
42
+ /* Secondary brand accent color (bare HSL triplet) */
43
+ --brand-secondary: 160 84% 36%;
44
+
45
+ /* Typography font stacks (optional) */
46
+ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
47
+ --font-mono: 'JetBrains Mono', ui-monospace, 'Cascadia Code', monospace;
48
+
49
+ /* Optional manual accent tint overrides (defaults are computed via color-mix) */
50
+ /* --brand-primary-tint: hsl(221 83% 97%); */
51
+ /* --brand-primary-tint-strong: hsl(221 83% 94%); */
52
+ }
53
+
54
+ /* -------------------------------------------------------------------------- */
55
+ /* Dark Mode Brand Values — OPT-IN, commented out by default */
56
+ /* -------------------------------------------------------------------------- */
57
+ /*
58
+ * Uncomment ONLY if your brand genuinely needs a different primary on dark
59
+ * surfaces. Be aware of the cost: a per-polarity brand override re-declares
60
+ * the token on EVERY nested [data-mode="dark"] island, and a declaration beats
61
+ * inheritance at any specificity. So a dark island nested inside a scoped
62
+ * [data-theme] region will clobber that region's brand and snap back to the
63
+ * value below. Declaring brand at :root only — the default above — lets
64
+ * [data-theme] islands rebind it cleanly.
65
+ *
66
+ * [data-mode="dark"] {
67
+ * --brand-primary: 221 83% 48%;
68
+ * --brand-secondary: 160 84% 36%;
69
+ *
70
+ * --brand-primary-tint: hsl(232 50% 15%);
71
+ * --brand-primary-tint-strong: hsl(232 60% 22%);
72
+ * }
73
+ */
@@ -13,3 +13,11 @@
13
13
  .header-right { @include app-header-right; }
14
14
  .header-actions { @include app-header-actions; }
15
15
  .header-avatar { @include header-avatar; }
16
+
17
+ // Lock root scroll exclusively for administrative shells
18
+ html:has(.app-wrapper),
19
+ body:has(.app-wrapper),
20
+ .app-shell {
21
+ height: 100%;
22
+ overflow: hidden;
23
+ }
@@ -0,0 +1,24 @@
1
+ @use '../config/mixins' as *;
2
+
3
+ // Prototype-tier classes.
4
+ // These classes are provided for prototyping, inspector experimentation,
5
+ // and demo HTML only. In production, apply the corresponding mixin to a
6
+ // semantic selector:
7
+ //
8
+ // #add-user { @include btn; }
9
+ // #users-table ul { @include btn-group; }
10
+ //
11
+ // Prototype-tier and universal button classes.
12
+ // These classes apply to both <button> and <a> (link-buttons) ensuring
13
+ // full button geometry, padding, alignment, and theme variables:
14
+ .btn { @include button-base; @include btn; }
15
+ .btn-soft { @include button-base; @include btn-soft; }
16
+ .btn-ghost { @include button-base; @include btn-ghost; }
17
+ .btn-outline { @include button-base; @include btn-outline; }
18
+ .btn-link { @include button-base; @include btn-link; }
19
+ .btn-sm { @include btn-sm; }
20
+ .btn-lg { @include btn-lg; }
21
+
22
+ .btn-group {
23
+ @include btn-group;
24
+ }
@@ -0,0 +1,5 @@
1
+ @use '../config/mixins' as *;
2
+
3
+ .chart {
4
+ @include chart;
5
+ }
@@ -0,0 +1,6 @@
1
+ // Armed state — rebind the accent token so a button carrying @mixin btn turns
2
+ // red while confirming and theme overrides keep applying. See
3
+ // theme/base/_global.scss for this being the documented colour-variant hook.
4
+ [data-ln-confirm-state="confirming"] {
5
+ --color-primary: var(--color-error);
6
+ }
@@ -1,22 +1,30 @@
1
- @use '../config/mixins' as *;
2
-
3
- // ─── Date field — ln-date merged input ──────────────────────────
4
- // Applied to the wrapper <span> that ln-date generates around the
5
- // visible input, hidden submit input, native picker, and calendar button.
6
- // Uses the generic form-field-group mixin (bordered flex shell).
7
-
8
- [data-ln-date-field] {
9
- @include form-field-group;
10
- // The submit value input has no visual role — hide it entirely.
11
- > input[type="hidden"] {
12
- display: none;
13
- }
14
-
15
- // The native date picker stays rendered (position:absolute via inline style)
16
- // so showPicker() can anchor the calendar popup to this element's position.
17
- > input[type="date"] {
18
- position: absolute;
19
- pointer-events: none;
20
- }
21
- }
22
-
1
+ @use '../config/mixins' as *;
2
+
3
+ // ─── Date field — ln-date merged input ──────────────────────────
4
+ // Applied to the wrapper <span> that ln-date generates around the
5
+ // visible input, hidden submit input, native picker, and calendar button.
6
+ // Uses the generic form-field-group mixin (bordered flex shell).
7
+
8
+ [data-ln-date-field] {
9
+ @include form-field-group;
10
+ @include w-full;
11
+ display: flex;
12
+ // The submit value input has no visual role — hide it entirely.
13
+ > input[type="hidden"] {
14
+ display: none;
15
+ }
16
+
17
+ // The native date picker stays rendered (position:absolute via inline style)
18
+ // so showPicker() can anchor the calendar popup to this element's position.
19
+ > input[type="date"] {
20
+ position: absolute;
21
+ pointer-events: none;
22
+ }
23
+ }
24
+
25
+ time,
26
+ [data-ln-date],
27
+ [data-ln-time] {
28
+ @include font-tabular;
29
+ }
30
+
@@ -4,10 +4,15 @@
4
4
  @include dropdown;
5
5
  }
6
6
 
7
- [data-ln-dropdown-menu] {
7
+ [data-ln-dropdown-menu],
8
+ .menu-panel {
8
9
  @include dropdown-menu;
9
10
  }
10
11
 
12
+ .menu-items {
13
+ @include menu-items;
14
+ }
15
+
11
16
  @keyframes ln-dropdown-in {
12
17
  from {
13
18
  opacity: 0;
@@ -0,0 +1,140 @@
1
+ @use '../config/mixins' as *;
2
+
3
+ // ─── Inputs ─────────────────────────────────────────────────────
4
+
5
+ input,
6
+ textarea,
7
+ select {
8
+ @include form-input;
9
+ }
10
+
11
+ textarea {
12
+ @include form-textarea;
13
+ }
14
+
15
+ select {
16
+ @include form-select;
17
+ }
18
+
19
+ output {
20
+ @include form-slot;
21
+ color: var(--fg-muted);
22
+ font-family: var(--font-mono);
23
+ }
24
+
25
+ // ─── Checkbox & Radio ───────────────────────────────────────────
26
+
27
+ input[type="checkbox"] {
28
+ @include form-checkbox;
29
+ }
30
+
31
+ input[type="radio"] {
32
+ @include form-radio;
33
+ }
34
+
35
+ // ─── Icon input group ───────────────────────────────────────────
36
+ // Semantic trigger: any <label>, <div>, <span> or <search> that directly
37
+ // contains a <svg class="ln-icon"> AND a text-ish <input>. Excludes
38
+ // checkbox/radio/file/button types via the :is() allowlist.
39
+ //
40
+ // Emitted twice, on purpose:
41
+ //
42
+ // shell → :is(label,div,span,search):where(<structural test>) = (0,0,1)
43
+ // The wrapper's chrome is a BASE. The :has() test is a guard, not a
44
+ // claim to weight, so it goes inside :where(). Every consumer binding
45
+ // now outranks it with a plain selector: @mixin search (0,1,2),
46
+ // the sidebar header search (0,2,3), @mixin panel-search (0,2,2), the ln-table
47
+ // toolbar (0,2,3). The wrapper list stays OUTSIDE :where() so the shell
48
+ // is (0,0,1), not (0,0,0) — it must beat the (0,0,0) form-slot rule at
49
+ // the bottom of this file by specificity, not by source order.
50
+ //
51
+ // parts → :is(label,div,span,search):has(…):has(…) = (0,2,2)
52
+ // Child resets and state chrome keep full weight: input:disabled and
53
+ // input:focus-visible are (0,1,1) and both set a background.
54
+ //
55
+ // One selector source — the two emissions cannot drift apart.
56
+
57
+ $icon-group-wrapper: ':is(label, div, span, search)';
58
+ $icon-group-test: ':has(> .ln-icon):has(> :is(input[type="text"], input[type="search"], input[type="email"], input[type="url"], input[type="tel"], input[type="password"], input[type="number"]))';
59
+
60
+ #{$icon-group-wrapper}:where(#{$icon-group-test}) {
61
+ @include form-field-group-shell;
62
+ }
63
+
64
+ #{$icon-group-wrapper}#{$icon-group-test} {
65
+ @include form-input-icon-group-parts;
66
+ }
67
+
68
+ // ─── Label & Actions ────────────────────────────────────────────
69
+
70
+ // Non-wrapping labels only — the label sits above/beside its input, not
71
+ // around it. The icon-group pattern owns its full styling and must not
72
+ // inherit block + margin-bottom from here.
73
+ label:not(:has(> input)) {
74
+ @include form-label;
75
+ }
76
+
77
+ // ─── Pill groups — radio & checkbox lists ──────────────────────────
78
+ // Clean class-driven segmented controls and switch panels.
79
+ // No <fieldset> tag dependency to prevent layout collisions.
80
+
81
+ .pills {
82
+ @include pills;
83
+ }
84
+
85
+ .pills-outline {
86
+ @include pills-outline;
87
+ }
88
+
89
+ .pills-switch {
90
+ @include pills-switch;
91
+ }
92
+
93
+ .pills-segmented {
94
+ @include pills-segmented;
95
+ }
96
+
97
+ .pill {
98
+ @include pill;
99
+ }
100
+
101
+ .pill-outline {
102
+ @include pill-outline;
103
+ }
104
+
105
+ .pill-switch {
106
+ @include pill-switch;
107
+ }
108
+
109
+ // The <search> landmark used as a WIDGET: a search input as a DIRECT child.
110
+ // A <search> REGION wrapping a whole form does not match — its input is
111
+ // nested, not a direct child. Mirrors the binding shape already used by
112
+ // components/_ln-table.scss for the toolbar search.
113
+ search:has(> input[type="search"]) {
114
+ @include search;
115
+ }
116
+
117
+ .form-actions {
118
+ @include form-actions;
119
+ }
120
+
121
+ // ─── Validation states ─────────────────────────────────────────
122
+
123
+ .ln-validate-invalid {
124
+ @include form-validate-invalid;
125
+ }
126
+
127
+ .ln-validate-valid {
128
+ @include form-validate-valid;
129
+ }
130
+
131
+ [data-ln-validate-errors] {
132
+ @include form-validate-errors;
133
+ }
134
+
135
+ // Any trailing feedback/metadata element inside .form-element automatically gets slot treatment with zero-specificity base styling
136
+ :where(.form-element > :is(input, select, textarea, [data-ln-date-field], search, [class*="group"]) ~ :not(input)) {
137
+ @include form-slot;
138
+ color: var(--fg-muted);
139
+ }
140
+
@@ -6,3 +6,9 @@
6
6
  .flat-stack {
7
7
  @include flat-stack;
8
8
  }
9
+
10
+ .grid { @include grid; }
11
+ .grid-2 { @include grid-2; }
12
+ .grid-4 { @include grid-4; }
13
+ .stack { @include stack; }
14
+ .row { @include row; }
@@ -13,7 +13,7 @@
13
13
  @include ln-table-toolbar;
14
14
  }
15
15
 
16
- .ln-table__toolbar label:has(> input[type="search"]) {
16
+ .ln-table__toolbar :is(label, search):has(> input[type="search"]) {
17
17
  @include ln-table-toolbar-search;
18
18
  }
19
19
 
@@ -61,9 +61,4 @@
61
61
  @include ln-table-placeholder-row;
62
62
  }
63
63
 
64
- .ln-table--loading tbody {
65
- opacity: 0.5;
66
- pointer-events: none;
67
- }
68
-
69
64
 
@@ -0,0 +1,3 @@
1
+ @use '../config/mixins' as *;
2
+
3
+ [data-ln-picklist] { @include picklist; }
@@ -1,10 +1,10 @@
1
- @use '../config/mixins' as *;
2
-
3
- [data-ln-sort] { @include sort; }
4
-
5
- th:hover [data-ln-sort] { opacity: 0.7; }
6
-
7
- [data-ln-sort][data-ln-sort-state="asc"],
8
- [data-ln-sort][data-ln-sort-state="desc"] {
9
- @include sort-active;
10
- }
1
+ @use '../config/mixins' as *;
2
+
3
+ [data-ln-sort] { @include sort; }
4
+
5
+ th:hover [data-ln-sort] { opacity: 0.7; }
6
+
7
+ [data-ln-sort][data-ln-sort-state="asc"],
8
+ [data-ln-sort][data-ln-sort-state="desc"] {
9
+ @include sort-active;
10
+ }
@@ -0,0 +1,6 @@
1
+ @use '../config/mixins' as *;
2
+
3
+ .badge { @include badge; }
4
+ .badge.outline { @include badge-outline; }
5
+ .badge-outline { @include badge-outline; }
6
+ .badge.live { @include badge-live; }
@@ -6,6 +6,22 @@ table {
6
6
  tr.section-header td {
7
7
  @include table-section-header;
8
8
  }
9
+
10
+ td.numeric,
11
+ td.num,
12
+ td:has(time),
13
+ td:has([data-ln-number]) {
14
+ @include font-tabular;
15
+ }
16
+
17
+ input[type="checkbox"] {
18
+ accent-color: var(--color-accent);
19
+ cursor: pointer;
20
+ width: 1rem;
21
+ height: 1rem;
22
+ border-radius: var(--radius-xs, 3px);
23
+ vertical-align: middle;
24
+ }
9
25
  }
10
26
 
11
27
  .table-container {
@@ -15,7 +15,3 @@
15
15
  [data-ln-tabs] [data-ln-panel] {
16
16
  @include tabs-panel;
17
17
  }
18
-
19
- [data-ln-tabs] [data-ln-panel].hidden {
20
- @include hidden;
21
- }