@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
@@ -4,7 +4,7 @@
4
4
  // [data-ln-accordion] { @include accordion; } // library default
5
5
  // #my-list { @include accordion; } // custom selector
6
6
  //
7
- // Expected DOM (see docs/css/mixins.md §accordion):
7
+ // Expected DOM (see docs-mcp/css/mixins.md §accordion):
8
8
  // <ul data-ln-accordion>
9
9
  // <li>
10
10
  // <header data-ln-toggle-for="p1">Title</header>
@@ -31,6 +31,7 @@
31
31
  padding: var(--padding-y) var(--padding-x);
32
32
  border-radius: var(--radius);
33
33
  @include text-sm;
34
+ border: var(--border-width) solid color-mix(in srgb, var(--color-accent) 22%, transparent);
34
35
  border-left: 3px solid var(--color-accent);
35
36
  @include tinted-surface(0.08);
36
37
  color: var(--color-fg);
@@ -11,6 +11,7 @@
11
11
  @use 'transitions' as *;
12
12
  @use 'interaction' as *;
13
13
  @use 'sidebar' as *;
14
+ @use 'card' as *;
14
15
 
15
16
  // ─── App Shell ──────────────────────────────────────────────────────────────
16
17
  // Mobile-ready application shell: fixed header, sidebar drawer, scrim overlay.
@@ -63,6 +64,7 @@
63
64
  background: var(--color-bg);
64
65
  border-block-end: var(--border-block-end, var(--border-width) solid var(--color-border));
65
66
  box-shadow: var(--shadow);
67
+ @include frosted-glass(0.88, 12px);
66
68
  @include flex;
67
69
  @include items-center;
68
70
  @include justify-between;
@@ -97,7 +99,7 @@
97
99
  .menu-toggle {
98
100
  @include flex-center;
99
101
  @include size(2rem);
100
- @include rounded-sm;
102
+ border-radius: var(--radius);
101
103
  }
102
104
 
103
105
  h1 {
@@ -141,7 +143,7 @@
141
143
  --btn-padding-x: var(--size-sm-up);
142
144
  @include text-xs;
143
145
  font-weight: var(--font-medium);
144
- border-radius: var(--radius-sm);
146
+ border-radius: var(--radius);
145
147
 
146
148
  // Label visually-hidden on small viewports — icon remains.
147
149
  > span {
@@ -29,8 +29,10 @@
29
29
  }
30
30
  }
31
31
 
32
+ @mixin rounded-xs { border-radius: var(--radius-xs); }
32
33
  @mixin rounded-sm { border-radius: var(--radius-sm); }
33
34
  @mixin rounded-md { border-radius: var(--radius-md); }
34
35
  @mixin rounded-lg { border-radius: var(--radius-lg); }
35
36
  @mixin rounded-xl { border-radius: var(--radius-xl); }
37
+ @mixin rounded-2xl { border-radius: var(--radius-2xl); }
36
38
  @mixin rounded-full { border-radius: var(--radius-full); }
@@ -0,0 +1,175 @@
1
+ @use 'spacing' as *;
2
+ @use 'display' as *;
3
+ @use 'sizing' as *;
4
+ @use 'typography' as *;
5
+ @use 'colors' as *;
6
+ @use 'borders' as *;
7
+ @use 'transitions' as *;
8
+ @use 'interaction' as *;
9
+ @use 'focus' as *;
10
+ @use 'motion' as *;
11
+
12
+ // Buttons
13
+ // button-base — shared neutral chrome (global button + anchor-as-button)
14
+ // btn — accent variant of button-base; rebinds --btn-* to accent colors
15
+ // btn-soft — pastel accent fill with saturated accent text
16
+ // btn-ghost — transparent background, subtle hover surface, zero border
17
+ // btn-outline — transparent background with crisp border and subtle hover
18
+ // btn-link — inline text action with hover underline
19
+ // btn-sm — smaller size modifier
20
+ // btn-lg — larger size modifier
21
+ // btn-group — inline list of peer action buttons (ghost rebind)
22
+
23
+ // ─── button-base ──────────────────────────────────────
24
+ // Neutral chrome shared by <button>, <input type="submit|reset|button">,
25
+ // and anchors used as buttons (e.g. inside form-actions). Reads the
26
+ // six-token --btn-* surface: --btn-bg/fg/border (idle) and
27
+ // --btn-bg-hover/fg-hover/border-hover (hover + active). Both the
28
+ // neutral default and the accent variant are fully token-driven —
29
+ // the difference is which values --btn-* resolves to.
30
+
31
+ @mixin button-base {
32
+ @include inline-flex;
33
+ @include items-center;
34
+ @include justify-center;
35
+ gap: var(--gap, var(--size-xs-up));
36
+ --padding-y: var(--btn-padding-y, var(--size-sm));
37
+ --padding-x: var(--btn-padding-x, var(--size-md));
38
+ padding: var(--padding-y) var(--padding-x);
39
+ @include text-sm;
40
+ @include font-medium;
41
+ border-radius: var(--radius);
42
+ white-space: nowrap;
43
+ border: var(--border-width) solid var(--btn-border);
44
+ outline: none;
45
+ background: var(--btn-bg);
46
+ color: var(--btn-fg);
47
+ text-decoration: none;
48
+ cursor: pointer;
49
+ @include transition-colors;
50
+
51
+ &:hover:not(:disabled),
52
+ &:active:not(:disabled) {
53
+ background: var(--btn-bg-hover);
54
+ color: var(--btn-fg-hover);
55
+ border-color: var(--btn-border-hover);
56
+ text-decoration: none;
57
+ }
58
+
59
+ &:focus-visible {
60
+ @include focus-ring;
61
+ }
62
+
63
+ &:disabled {
64
+ @include opacity-50;
65
+ @include cursor-not-allowed;
66
+ }
67
+ }
68
+
69
+ @mixin btn {
70
+ // Accent variant — rebinds the --btn-* token surface to accent values.
71
+ --color-accent: hsl(var(--color-primary));
72
+ --color-accent-hover: hsl(from var(--color-accent) h s calc(l - 6));
73
+
74
+ --btn-bg: var(--color-accent-bg, var(--color-accent));
75
+ --btn-fg: var(--color-accent-bg-fg, var(--color-accent-fg));
76
+ --btn-border: hsl(from var(--color-accent) h s calc(l - 4));
77
+ --btn-bg-hover: var(--color-accent-bg-hover, var(--color-accent-hover));
78
+ --btn-fg-hover: var(--color-accent-bg-fg, var(--color-accent-fg));
79
+ --btn-border-hover: hsl(from var(--color-accent) h s calc(l - 6));
80
+ }
81
+
82
+ @mixin btn-soft {
83
+ // Soft/Subtle variant — pastel accent surface with saturated text.
84
+ --color-accent: hsl(var(--color-primary));
85
+
86
+ --btn-bg: color-mix(in srgb, var(--color-accent) 10%, transparent);
87
+ --btn-fg: var(--color-accent);
88
+ --btn-border: color-mix(in srgb, var(--color-accent) 20%, transparent);
89
+ --btn-bg-hover: color-mix(in srgb, var(--color-accent) 18%, transparent);
90
+ --btn-fg-hover: var(--color-accent);
91
+ --btn-border-hover: color-mix(in srgb, var(--color-accent) 25%, transparent);
92
+ }
93
+
94
+ @mixin btn-ghost {
95
+ // Ghost variant — transparent idle, subtle sunken hover surface.
96
+ --btn-bg: transparent;
97
+ --btn-fg: var(--color-fg);
98
+ --btn-border: transparent;
99
+ --btn-bg-hover: var(--bg-hover);
100
+ --btn-fg-hover: var(--color-fg);
101
+ --btn-border-hover: transparent;
102
+
103
+ &:is(.success, .error, .warning, .info) {
104
+ --color-accent: hsl(var(--color-primary));
105
+ --btn-fg: var(--color-accent);
106
+ --btn-bg-hover: color-mix(in srgb, var(--color-accent) 10%, transparent);
107
+ --btn-fg-hover: var(--color-accent);
108
+ }
109
+ }
110
+
111
+ @mixin btn-outline {
112
+ // Outline variant — transparent idle with crisp border.
113
+ --btn-bg: transparent;
114
+ --btn-fg: var(--color-fg);
115
+ --btn-border: var(--border-strong);
116
+ --btn-bg-hover: var(--bg-hover);
117
+ --btn-fg-hover: var(--color-fg);
118
+ --btn-border-hover: var(--border-strong);
119
+
120
+ &:is(.success, .error, .warning, .info) {
121
+ --color-accent: hsl(var(--color-primary));
122
+ --btn-fg: var(--color-accent);
123
+ --btn-border: color-mix(in srgb, var(--color-accent) 30%, transparent);
124
+ --btn-bg-hover: color-mix(in srgb, var(--color-accent) 10%, transparent);
125
+ --btn-fg-hover: var(--color-accent);
126
+ --btn-border-hover: color-mix(in srgb, var(--color-accent) 30%, transparent);
127
+ }
128
+ }
129
+
130
+ @mixin btn-link {
131
+ // Link variant — text button with hover underline.
132
+ --btn-bg: transparent;
133
+ --btn-fg: var(--color-accent, hsl(var(--color-primary)));
134
+ --btn-border: transparent;
135
+ --btn-bg-hover: transparent;
136
+ --btn-fg-hover: hsl(from var(--btn-fg) h s calc(l - 10));
137
+ --btn-border-hover: transparent;
138
+ --padding-x: 0;
139
+ --padding-y: 0;
140
+ padding: 0;
141
+ text-decoration: none;
142
+
143
+ &:hover:not(:disabled) {
144
+ text-decoration: underline;
145
+ }
146
+ }
147
+
148
+ @mixin btn-sm {
149
+ --btn-padding-x: var(--size-sm-up);
150
+ --gap: var(--size-xs);
151
+ gap: var(--gap);
152
+ @include text-xs;
153
+ }
154
+
155
+ @mixin btn-lg {
156
+ --btn-padding-x: var(--size-lg);
157
+ --btn-padding-y: var(--size-md);
158
+ --gap: var(--size-sm-up);
159
+ gap: var(--gap);
160
+ @include text-base;
161
+ }
162
+
163
+ @mixin btn-group {
164
+ --gap: var(--size-xs);
165
+ @include inline-flex;
166
+ @include items-center;
167
+ gap: var(--gap);
168
+
169
+ button {
170
+ --btn-bg: transparent;
171
+ --btn-border: transparent;
172
+ color: var(--fg-subtle);
173
+ }
174
+ }
175
+
@@ -21,7 +21,7 @@
21
21
  border-radius: var(--radius);
22
22
  @include overflow-hidden;
23
23
  @include transition;
24
- box-shadow: var(--shadow);
24
+ box-shadow: var(--shadow), var(--surface-highlight, inset 0 0 0 0 transparent);
25
25
 
26
26
  &:hover {
27
27
  --color-border: color-mix(in srgb, var(--color-accent) 35%, transparent);
@@ -92,7 +92,8 @@
92
92
  @include flex;
93
93
  @include items-center;
94
94
  @include justify-between;
95
- padding: var(--card-padding-y) var(--card-padding-x);
95
+ padding: var(--size-xs-up) var(--padding-x);
96
+ min-height: 2.5rem;
96
97
  @include border-b;
97
98
  --color-bg: var(--bg-sunken);
98
99
  background: var(--color-bg);
@@ -106,25 +107,47 @@
106
107
  margin: 0;
107
108
  }
108
109
 
109
- // Equalize control chrome inside the header. Geometric height lock
110
- // matching @mixin app-header-actions: icon-content (1.25rem) + 2 ×
111
- // rebound --padding-y + 2 × border-width. Buttons inherit --padding-y
112
- // from this rebind; search-icon labels read it from
113
- // @mixin form-input-icon-group (same var(--size-xs) value), so the
114
- // formula resolves identically for both. Descendant selector — these
115
- // controls are commonly wrapped in <aside>/<nav>/<div> inside the
116
- // header. panel-header is chrome (no body labels), so descendant
117
- // `label` here is always a search-icon-group, never a field label.
118
110
  label {
119
111
  --padding-y: var(--size-xs);
120
112
  }
121
113
 
122
- button {
123
- --btn-padding-y: var(--size-xs);
124
- }
125
-
126
- :is(button, label) {
127
- min-height: calc(1.25rem + 2 * var(--padding-y) + 2 * var(--border-width));
114
+ // Header actions compact to a 28px button. This is a DESCENDANT selector,
115
+ // so it also reaches a button that belongs to a nested field — that button
116
+ // is the field's own chrome, not a header action, and form-field-group
117
+ // stretches it to the field's full height. An explicit height beats
118
+ // `align-self: stretch`, so such a button has to be excluded here; it
119
+ // cannot defend itself by out-weighing this rule.
120
+ //
121
+ // Only ln-date needs the exclusion. Every other composite field clears
122
+ // (0,1,2) on its own, because its binding carries a :has() guard and :has()
123
+ // adopts its argument's specificity:
124
+ // icon-group auto-bind :is(label,div,span,search):has(>.ln-icon):has(>…) > button (0,1,4)
125
+ // search clear search:has(> input[type="search"]) > button (0,1,3)
126
+ // this rule .card > header button (0,1,2)
127
+ // ln-date [data-ln-date-field] > button (0,1,1)
128
+ // ln-date builds its own wrapper in JS, so it has nothing to guard against
129
+ // and its binding is a bare attribute — the one that falls below the line.
130
+ // A new composite field whose wrapper needs no :has() belongs in this list.
131
+ //
132
+ // Both :where()s are load-bearing:
133
+ // inner — keeps the wrapper from lending ITS weight to the exclusion.
134
+ // outer — :not() adopts its argument's specificity, which would lift this
135
+ // rule to (0,1,3) and silently outrank consumers that override it
136
+ // at equal weight by source order.
137
+ // Wrapped, the rule stays exactly (0,1,2); only its match set narrows.
138
+ //
139
+ // NOT written as [class*="group"]: that spelling means "field group" in
140
+ // components/_form.scss only because it is scoped under .form-element there.
141
+ // Unscoped it would also catch .btn-group and stop compacting a segmented
142
+ // group in a header — a regression, and those buttons already outrank this.
143
+ button:where(:not(:where([data-ln-date-field]) > button)) {
144
+ --btn-padding-y: var(--size-2xs);
145
+ --btn-padding-x: var(--size-xs);
146
+ font-size: var(--text-xs);
147
+ height: 1.75rem;
148
+ display: inline-flex;
149
+ align-items: center;
150
+ justify-content: center;
128
151
  }
129
152
 
130
153
  // Close/dismiss and toggle buttons inside the header should be tight and flat.
@@ -134,34 +157,13 @@
134
157
  --btn-padding-y: var(--size-2xs);
135
158
  --btn-padding-x: var(--size-2xs);
136
159
  --shadow: none;
160
+ height: 1.75rem;
161
+ width: 1.75rem;
137
162
  }
138
163
  }
139
164
 
140
165
  @mixin panel-body {
141
- padding: var(--card-padding-y) var(--card-padding-x);
142
-
143
- ul, ol {
144
- padding-left: 1.5em;
145
- margin-bottom: var(--size-md);
146
-
147
- li {
148
- margin-bottom: var(--size-xs);
149
- line-height: 1.7;
150
- list-style: inherit;
151
-
152
- &:last-child {
153
- margin-bottom: 0;
154
- }
155
- }
156
- }
157
-
158
- ul {
159
- list-style-type: disc;
160
- }
161
-
162
- ol {
163
- list-style-type: decimal;
164
- }
166
+ padding: var(--padding-y) var(--padding-x);
165
167
 
166
168
  &:has(> table),
167
169
  &:has(> .table-container) {
@@ -206,7 +208,7 @@
206
208
  }
207
209
 
208
210
  @mixin panel-footer {
209
- padding: var(--card-padding-y) var(--card-padding-x);
211
+ padding: var(--padding-y) var(--padding-x);
210
212
  @include border-t;
211
213
  --color-bg: var(--bg-sunken);
212
214
  background: var(--color-bg);
@@ -248,13 +250,12 @@
248
250
  }
249
251
 
250
252
  // ─── Card accents (Tabler-inspired colored lines) ──────
251
- // Accent reads --color-accent (solid) for borders, --color-primary
252
- // (raw triplet) for alpha hover tints — see plan §0.3.
253
+ // Accent reads --color-accent for borders and hover wash tint (--tint-hover).
253
254
  // Usage: #my-card { @include card; @include card-accent-top; }
254
255
 
255
256
  @mixin _card-accent-base {
256
257
  &:hover {
257
- background-color: color-mix(in srgb, var(--color-accent) 4%, transparent);
258
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-hover), transparent);
258
259
  }
259
260
  }
260
261
 
@@ -334,6 +335,13 @@
334
335
  > footer { @include panel-footer; }
335
336
  }
336
337
 
338
+ // ─── Frosted Glass ──────────────────────────────────────
339
+ @mixin frosted-glass($opacity: 0.85, $blur: 12px) {
340
+ background-color: color-mix(in srgb, var(--color-bg) calc(#{$opacity} * 100%), transparent);
341
+ -webkit-backdrop-filter: blur(#{$blur});
342
+ backdrop-filter: blur(#{$blur});
343
+ }
344
+
337
345
  // ─── Floating panel ────────────────────────────────────
338
346
  // Chrome recipe for floating overlays (popover, dropdown menu, toast).
339
347
  // Rebinds --color-bg to elevated surface and --shadow to floating
@@ -349,7 +357,8 @@
349
357
  border-inline-start: var(--border-inline-start, var(--border-width) solid var(--color-border));
350
358
  border-inline-end: var(--border-inline-end, var(--border-width) solid var(--color-border));
351
359
  border-radius: var(--radius);
352
- box-shadow: var(--shadow);
360
+ box-shadow: var(--shadow), var(--surface-highlight, inset 0 0 0 0 transparent);
361
+ @include frosted-glass(0.92, 10px);
353
362
  // z-index is the caller's responsibility: top-layer consumers (dropdown,
354
363
  // popover, tooltip portal) don't need one; standalone consumers do —
355
364
  // see [data-ln-table] .column-filter-dropdown in components/_filter.scss.
@@ -0,0 +1,82 @@
1
+ // Responsive SVG dataset chart. Geometry belongs to ln-chart; every visual
2
+ // decision is exposed as a re-bindable CSS custom property.
3
+ //
4
+ // Usage:
5
+ // .chart { @include chart; }
6
+
7
+ @mixin chart {
8
+ --chart-height: 20rem;
9
+ --chart-gap: 0.75rem;
10
+ --chart-radius: var(--radius-md);
11
+ --chart-line-color: hsl(var(--color-primary));
12
+ --chart-line-width: 2px;
13
+ --chart-area-color: hsl(var(--color-primary) / 0.16);
14
+ --chart-grid-color: var(--border-subtle);
15
+ --chart-grid-column-size: 12.5%;
16
+ --chart-grid-row-size: 25%;
17
+ --chart-label-color: var(--fg-muted);
18
+
19
+ display: grid;
20
+ gap: var(--chart-gap);
21
+ min-inline-size: 0;
22
+
23
+ .chart__plot {
24
+ display: block;
25
+ inline-size: 100%;
26
+ block-size: var(--chart-height);
27
+ border-radius: var(--chart-radius);
28
+ background-image:
29
+ linear-gradient(to right, var(--chart-grid-color) 1px, transparent 1px),
30
+ linear-gradient(to bottom, var(--chart-grid-color) 1px, transparent 1px);
31
+ background-size: var(--chart-grid-column-size) 100%, 100% var(--chart-grid-row-size);
32
+ overflow: visible;
33
+ }
34
+
35
+ .chart__line {
36
+ fill: none;
37
+ stroke: var(--chart-line-color);
38
+ stroke-width: var(--chart-line-width);
39
+ stroke-linecap: round;
40
+ stroke-linejoin: round;
41
+ vector-effect: non-scaling-stroke;
42
+ }
43
+
44
+ .chart__area {
45
+ fill: var(--chart-area-color);
46
+ stroke: none;
47
+ }
48
+
49
+ .chart__labels {
50
+ display: grid;
51
+ grid-auto-flow: column;
52
+ grid-auto-columns: minmax(4rem, 1fr);
53
+ gap: var(--chart-gap);
54
+ margin: 0;
55
+ padding: 0;
56
+ list-style: none;
57
+ color: var(--chart-label-color);
58
+ font-size: 0.75rem;
59
+ line-height: 1.25;
60
+ overflow-x: auto;
61
+ scrollbar-width: thin;
62
+ }
63
+
64
+ .chart__label {
65
+ min-inline-size: 0;
66
+ text-align: center;
67
+ }
68
+
69
+ .chart__summary {
70
+ display: flex;
71
+ flex-wrap: wrap;
72
+ gap: var(--chart-gap);
73
+ color: var(--chart-label-color);
74
+ font-size: 0.875rem;
75
+ }
76
+
77
+ .chart__empty {
78
+ margin: 0;
79
+ color: var(--chart-label-color);
80
+ text-align: center;
81
+ }
82
+ }
@@ -14,7 +14,8 @@
14
14
  transition: grid-template-rows var(--transition-base);
15
15
  }
16
16
 
17
- &.open {
17
+ &.open,
18
+ &[data-ln-toggle="open"] {
18
19
  grid-template-rows: 1fr;
19
20
  }
20
21
  }
@@ -23,24 +23,18 @@
23
23
  // alert, badge, etc.) picks up the status color through inherited
24
24
  // custom-property values — no per-mixin redeclare required.
25
25
  @mixin semantic-color($family) {
26
- // Re-bind the base color and the theme-controlled tint companions.
26
+ // Re-bind the base color.
27
27
  // --color-primary-hover / -focus are NOT rebound — consumers derive
28
28
  // hover/focus from --color-accent locally via CSS relative color
29
29
  // syntax. See _btn.scss / _form.scss / _data-table.scss / _global.scss
30
- // for the derivation pattern. --color-primary-light / -lighter ARE
31
- // rebound because their values are theme-controlled (light themes
32
- // use near-white tints, dark themes use subtle dark surfaces) and
33
- // cannot be derived from the base.
34
- --color-primary: var(--color-#{$family});
35
- --color-primary-light: var(--color-#{$family}-light);
36
- --color-primary-lighter: var(--color-#{$family}-lighter);
30
+ // for the derivation pattern.
31
+ --color-primary: var(--color-#{$family});
37
32
 
38
33
  // Re-declare accent vocabulary at this scope so var() resolves
39
- // here instead of staying frozen at :root. Without this, descendants
40
- // reading --color-accent get :root's primary blue regardless of the
41
- // semantic class. --color-accent-fg stays at :root (white) — text on
42
- // any colored accent surface should stay white.
34
+ // here instead of staying frozen at an ancestor scope. Without this, descendants
35
+ // reading --color-accent get the ancestor's primary blue regardless of the
36
+ // semantic class. --color-accent-fg resolves to white from the derivation chain.
43
37
  --color-accent: hsl(var(--color-primary));
44
- --color-accent-tint: hsl(var(--color-primary-lighter));
45
- --color-accent-tint-strong: hsl(var(--color-primary-light));
38
+ --color-accent-tint: hsl(var(--color-#{$family}-lighter));
39
+ --color-accent-tint-strong: hsl(var(--color-#{$family}-light));
46
40
  }
@@ -1,48 +1,48 @@
1
- @use 'colors' as *;
2
- @use 'spacing' as *;
3
- @use 'position' as *;
4
-
5
- // ─── DOM Diagnostics & Linter Mixins ───────────────────────────
6
- // These mixins are for developer-only diagnostic overlays and validations.
7
- // They should be completely isolated from production bundles.
8
-
9
- // Generic block element DOM diagnostic error
10
- // Applies a red dashed border and a prominent warning banner at the top.
11
- @mixin dev-dom-error($message) {
12
- outline: 2px dashed hsl(var(--color-error));
13
- @include relative;
14
-
15
- &::before {
16
- content: " ⚠ #{$message}";
17
- display: block;
18
- background: color-mix(in srgb, hsl(var(--color-error)) 15%, transparent);
19
- color: hsl(var(--color-error));
20
- padding: var(--size-xs) var(--size-sm);
21
- font-size: var(--text-xs, 0.75rem);
22
- font-weight: bold;
23
- border-bottom: 1px solid hsl(var(--color-strong));
24
- }
25
- }
26
-
27
- // Generic inline/element-level DOM diagnostic warning
28
- // Appends a red inline text warning adjacent to the targeted element.
29
- @mixin dev-inline-error($message) {
30
- &::after {
31
- content: " ⚠ #{$message}";
32
- color: hsl(var(--color-error));
33
- font-weight: normal;
34
- white-space: nowrap;
35
- margin-inline-start: var(--size-xs, 0.5rem);
36
- }
37
- }
38
-
39
- // Replaced-element DOM diagnostic error (img, video, iframe, etc.)
40
- // Replaced elements do NOT render ::before/::after generated content, so this
41
- // mixin uses a visible outline + translucent wash instead of a text label.
42
- // The human-readable reason is carried by surrounding copy (e.g. a demo
43
- // section header), not by a pseudo-element.
44
- @mixin dev-replaced-error {
45
- outline: 2px dashed hsl(var(--color-error));
46
- outline-offset: var(--size-xs);
47
- background: color-mix(in srgb, hsl(var(--color-error)) 15%, transparent);
48
- }
1
+ @use 'colors' as *;
2
+ @use 'spacing' as *;
3
+ @use 'position' as *;
4
+
5
+ // ─── DOM Diagnostics & Linter Mixins ───────────────────────────
6
+ // These mixins are for developer-only diagnostic overlays and validations.
7
+ // They should be completely isolated from production bundles.
8
+
9
+ // Generic block element DOM diagnostic error
10
+ // Applies a red dashed border and a prominent warning banner at the top.
11
+ @mixin dev-dom-error($message) {
12
+ outline: 2px dashed hsl(var(--color-error));
13
+ @include relative;
14
+
15
+ &::before {
16
+ content: " ⚠ #{$message}";
17
+ display: block;
18
+ background: color-mix(in srgb, hsl(var(--color-error)) 15%, transparent);
19
+ color: hsl(var(--color-error));
20
+ padding: var(--size-xs) var(--size-sm);
21
+ font-size: var(--text-xs, 0.75rem);
22
+ font-weight: bold;
23
+ border-bottom: 1px solid hsl(var(--color-strong));
24
+ }
25
+ }
26
+
27
+ // Generic inline/element-level DOM diagnostic warning
28
+ // Appends a red inline text warning adjacent to the targeted element.
29
+ @mixin dev-inline-error($message) {
30
+ &::after {
31
+ content: " ⚠ #{$message}";
32
+ color: hsl(var(--color-error));
33
+ font-weight: normal;
34
+ white-space: nowrap;
35
+ margin-inline-start: var(--size-xs, 0.5rem);
36
+ }
37
+ }
38
+
39
+ // Replaced-element DOM diagnostic error (img, video, iframe, etc.)
40
+ // Replaced elements do NOT render ::before/::after generated content, so this
41
+ // mixin uses a visible outline + translucent wash instead of a text label.
42
+ // The human-readable reason is carried by surrounding copy (e.g. a demo
43
+ // section header), not by a pseudo-element.
44
+ @mixin dev-replaced-error {
45
+ outline: 2px dashed hsl(var(--color-error));
46
+ outline-offset: var(--size-xs);
47
+ background: color-mix(in srgb, hsl(var(--color-error)) 15%, transparent);
48
+ }