@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
@@ -0,0 +1,274 @@
1
+ // ==========================================================================
2
+ // Palette & Color Derivation Mixins — ln-ashlar
3
+ // ==========================================================================
4
+ // Value mixins + the derivation chain, plus two zero-specificity CSS blocks
5
+ // at the bottom (brand, base defaults).
6
+ // Defines theme values (light and dark) and the unified color derivation chain.
7
+ // ==========================================================================
8
+
9
+ @mixin ln-values-light {
10
+ // Secondary tint layers
11
+ --color-secondary-light: 160 84% 94%;
12
+ --color-secondary-lighter: 160 84% 97%;
13
+
14
+ // Status colors
15
+ --color-success: 142 76% 36%;
16
+ --color-success-light: 142 71% 94%;
17
+ --color-success-lighter: 142 71% 97%;
18
+
19
+ --color-error: 0 84% 48%;
20
+ --color-error-light: 0 84% 94%;
21
+ --color-error-lighter: 0 84% 97%;
22
+
23
+ --color-warning: 32 95% 38%;
24
+ --color-warning-light: 38 92% 94%;
25
+ --color-warning-lighter: 38 92% 97%;
26
+
27
+ --color-info: 200 95% 38%;
28
+ --color-info-light: 199 89% 94%;
29
+ --color-info-lighter: 199 89% 97%;
30
+
31
+ // Neutral scale (canonical greys)
32
+ --color-neutral-50: 210 20% 98%;
33
+ --color-neutral-100: 220 14% 96%;
34
+ --color-neutral-150: 220 13% 93%;
35
+ --color-neutral-175: 220 13% 91%;
36
+ --color-neutral-200: 220 13% 90%;
37
+ --color-neutral-300: 216 12% 84%;
38
+ --color-neutral-400: 218 11% 58%;
39
+ --color-neutral-500: 220 10% 40%;
40
+ --color-neutral-600: 215 14% 34%;
41
+ --color-neutral-700: 217 19% 27%;
42
+ --color-neutral-800: 215 28% 17%;
43
+ --color-neutral-900: 222 47% 11%;
44
+
45
+ // Base canvas background
46
+ --color-white: 0 0% 100%;
47
+
48
+ // Shadows — cool-tinted, dual-layer (ambient + key light)
49
+ --shadow-none: none;
50
+
51
+ --shadow-xs:
52
+ 0 1px 2px 0 hsl(220 40% 10% / 0.05);
53
+
54
+ --shadow-sm:
55
+ 0 1px 3px 0 hsl(220 40% 10% / 0.07),
56
+ 0 1px 2px -1px hsl(220 40% 10% / 0.05);
57
+
58
+ --shadow-md:
59
+ 0 4px 6px -1px hsl(220 40% 10% / 0.08),
60
+ 0 2px 4px -2px hsl(220 40% 10% / 0.05);
61
+
62
+ --shadow-lg:
63
+ 0 10px 15px -3px hsl(220 40% 10% / 0.08),
64
+ 0 4px 6px -4px hsl(220 40% 10% / 0.04);
65
+
66
+ --shadow-xl:
67
+ 0 20px 25px -5px hsl(220 40% 10% / 0.09),
68
+ 0 8px 10px -6px hsl(220 40% 10% / 0.04);
69
+
70
+ --shadow-2xl:
71
+ 0 25px 50px -12px hsl(220 40% 10% / 0.18);
72
+
73
+ --shadow-inner:
74
+ inset 0 2px 4px 0 hsl(220 40% 15% / 0.06);
75
+
76
+ // Surface highlight — subtle top-edge bevel/illumination for elevated surfaces
77
+ --surface-highlight: inset 0 1px 0 0 hsl(0 0% 100% / 0.6);
78
+
79
+ // Value vocabulary — what bg/fg/border/shadow values exist
80
+ --bg-base: hsl(var(--color-white));
81
+ --bg-elevated: var(--bg-base);
82
+ --bg-sunken: hsl(var(--color-neutral-100));
83
+ --bg-recessed: hsl(var(--color-neutral-50));
84
+
85
+ --bg-hover: hsl(var(--color-neutral-100));
86
+ --bg-active: hsl(var(--color-neutral-150));
87
+
88
+ // Bound low on the ramp so every tier clears 7:1 against --bg-active,
89
+ // the lightest surface any of them lands on (8.02 / 11.52 / 14.11).
90
+ --fg-default: hsl(var(--color-neutral-900));
91
+ --fg-muted: hsl(var(--color-neutral-800));
92
+ --fg-subtle: hsl(var(--color-neutral-700));
93
+
94
+ --border-subtle: hsl(var(--color-neutral-200));
95
+ --border-strong: hsl(var(--color-neutral-300));
96
+
97
+ // Interactive boundaries only (input/select/checkbox). 1.4.11 wants 3:1
98
+ // for these; --border-subtle/-strong stay decorative and exempt.
99
+ --border-ui: hsl(var(--color-neutral-400));
100
+
101
+ --color-scrim: hsl(var(--color-neutral-900) / 0.5);
102
+
103
+ // Per-polarity, not derived in the chain: the chain re-evaluates at
104
+ // [data-mode], where neutral-900 inverts to near-white and the scrim would
105
+ // lighten the page instead of dimming it.
106
+ --app-scrim-bg: hsl(var(--color-neutral-900) / 0.4);
107
+ }
108
+
109
+ @mixin ln-values-dark {
110
+ // Neutral scale — inverted
111
+ --color-neutral-50: 220 20% 5%;
112
+ --color-neutral-100: 220 16% 7%;
113
+ --color-neutral-150: 220 14% 10%;
114
+ --color-neutral-175: 220 13% 12%;
115
+ --color-neutral-200: 220 13% 14%;
116
+ --color-neutral-300: 220 13% 36%;
117
+ --color-neutral-400: 218 11% 52%;
118
+ --color-neutral-500: 220 10% 68%;
119
+ --color-neutral-600: 220 11% 76%;
120
+ --color-neutral-700: 220 14% 84%;
121
+ --color-neutral-800: 220 20% 92%;
122
+ --color-neutral-900: 221 30% 97%;
123
+
124
+ // --color-white is deliberately not restated: :where(:root) still matches
125
+ // <html data-mode="dark"> and supplies it, and --color-accent-fg needs real
126
+ // white for text on a solid accent fill.
127
+
128
+ // Vocabulary — bg. Elevated is DARKER than sunken here; that inversion
129
+ // against light is intentional.
130
+ --bg-base: hsl(var(--color-neutral-100));
131
+ --bg-elevated: hsl(var(--color-neutral-150));
132
+ --bg-sunken: hsl(var(--color-neutral-175));
133
+ --bg-recessed: hsl(var(--color-neutral-50));
134
+ --bg-hover: hsl(var(--color-neutral-175));
135
+ --bg-active: hsl(var(--color-neutral-200));
136
+
137
+ // Vocabulary — fg
138
+ // Bound high on the ramp for the same reason as light: every tier clears
139
+ // 7:1 against --bg-active (8.68 / 10.74 / 14.78).
140
+ --fg-default: hsl(var(--color-neutral-900));
141
+ --fg-muted: hsl(var(--color-neutral-700));
142
+ --fg-subtle: hsl(var(--color-neutral-600));
143
+
144
+ --border-subtle: hsl(var(--color-neutral-175));
145
+ --border-strong: hsl(var(--color-neutral-300));
146
+
147
+ --border-ui: hsl(var(--color-neutral-400));
148
+
149
+ // Scrims — anchored to black, not the ramp: dark --color-neutral-900 is
150
+ // near-white, so binding either to it would need an index flip.
151
+ --color-scrim: hsl(0 0% 0% / 0.6);
152
+ --app-scrim-bg: hsl(0 0% 0% / 0.4);
153
+
154
+ // Status tint layers — re-tuned for dark surfaces
155
+ --color-success-light: 142 50% 18%;
156
+ --color-success-lighter: 142 40% 13%;
157
+ --color-warning-light: 32 55% 20%;
158
+ --color-warning-lighter: 32 45% 14%;
159
+ --color-info-light: 217 55% 22%;
160
+ --color-info-lighter: 217 45% 15%;
161
+
162
+ --color-error: 0 84% 65%; // Lighter red for text contrast in dark mode
163
+ --color-error-light: 0 50% 20%;
164
+ --color-error-lighter: 0 40% 14%;
165
+
166
+ // Secondary tint layers — re-tuned for dark surfaces
167
+ --color-secondary-light: 160 55% 20%;
168
+ --color-secondary-lighter: 160 45% 14%;
169
+
170
+ // Shadows — solid black, boosted alpha, dual-layer
171
+ --shadow-xs:
172
+ 0 1px 2px 0 hsl(0 0% 0% / 0.35);
173
+ --shadow-sm:
174
+ 0 1px 3px 0 hsl(0 0% 0% / 0.40),
175
+ 0 1px 2px -1px hsl(0 0% 0% / 0.25);
176
+ --shadow-md:
177
+ 0 4px 6px -1px hsl(0 0% 0% / 0.45),
178
+ 0 2px 4px -2px hsl(0 0% 0% / 0.30);
179
+ --shadow-lg:
180
+ 0 10px 15px -3px hsl(0 0% 0% / 0.50),
181
+ 0 4px 6px -4px hsl(0 0% 0% / 0.35);
182
+ --shadow-xl:
183
+ 0 20px 25px -5px hsl(0 0% 0% / 0.60),
184
+ 0 8px 10px -6px hsl(0 0% 0% / 0.40);
185
+ --shadow-2xl:
186
+ 0 25px 50px -12px hsl(0 0% 0% / 0.70);
187
+ --shadow-inner:
188
+ inset 0 2px 4px 0 hsl(0 0% 0% / 0.32);
189
+
190
+ // Surface highlight — crisp top-edge bevel on dark elevated surfaces
191
+ --surface-highlight: inset 0 1px 0 0 hsl(0 0% 100% / 0.08);
192
+ }
193
+
194
+ @mixin ln-color-chain {
195
+ // brand → semantic
196
+ --color-primary: var(--brand-primary);
197
+ --color-secondary: var(--brand-secondary);
198
+
199
+ // colour-aware shadows
200
+ --shadow-primary: 0 8px 24px -6px hsl(var(--color-primary) / 0.28);
201
+ --shadow-success: 0 8px 24px -6px hsl(var(--color-success) / 0.28);
202
+ --shadow-error: 0 8px 24px -6px hsl(var(--color-error) / 0.28);
203
+ }
204
+
205
+ // ---------------------------------------------------------------------------
206
+ // Brand — :where(:root) ONLY. Deliberately not in ln-values-light /
207
+ // ln-values-dark and deliberately not joined to the four-axis block below.
208
+ //
209
+ // Brand is a literal with no polarity opinion. Declared inside the value
210
+ // mixins it would be re-declared on every nested [data-mode] island, and a
211
+ // declaration beats inheritance at any specificity — so a light card inside
212
+ // <section data-theme="sunset" data-mode="dark"> would snap back to default
213
+ // blue. :root-only means no island re-declares it; [data-theme] at (0,1,0)
214
+ // rebinds it normally; a consumer's brand.css at (0,1,0) still wins at any
215
+ // stylesheet load order, which is brand.css's whole guarantee.
216
+ // ---------------------------------------------------------------------------
217
+ :where(:root) {
218
+ --brand-primary: 221 83% 43%;
219
+ --brand-secondary: 160 84% 36%;
220
+ }
221
+
222
+ // ---------------------------------------------------------------------------
223
+ // Base Defaults — Lazy-evaluated primitives and surfaces.
224
+ // These live in :where(:root) (0,0,0) so they can be overridden by [data-skin]
225
+ // or [data-theme] (0,1,0) without being clobbered by nested [data-mode] islands.
226
+ // ---------------------------------------------------------------------------
227
+ :where(:root),
228
+ :where([data-mode]),
229
+ :where([data-theme]),
230
+ :where([data-skin]) {
231
+ // shadow roles
232
+ --shadow-resting: var(--shadow-sm);
233
+ --shadow-floating: var(--shadow-md);
234
+ --shadow-overlay: var(--shadow-xl);
235
+
236
+ // primitives — what mixin bodies read
237
+ --color-bg: var(--bg-base);
238
+ --color-fg: var(--fg-default);
239
+ --color-border: var(--border-subtle);
240
+ --shadow: var(--shadow-resting);
241
+ --radius: var(--radius-md);
242
+
243
+ // accent — tints computed against the LOCAL --bg-base, so one
244
+ // formula serves both themes. The two override slots are
245
+ // undeclared by default; a client declares them to win.
246
+ --color-accent: hsl(var(--color-primary));
247
+ --color-accent-fg: hsl(var(--color-white));
248
+
249
+ // Dark foreground pole for fills too light to carry white at AAA.
250
+ // A literal, never var(--color-neutral-900) — that inverts to near-white
251
+ // in dark mode, which is exactly where the ink islands live. Mirrors
252
+ // $_ln-contrast-ink in _contrast.scss; keep the two in step.
253
+ --color-ink: 222 47% 11%;
254
+
255
+ // Checkmark stroke is baked into the data URI, so it ships in both poles
256
+ // and --check-mark selects one. An ink island must repoint this or its
257
+ // checkmark stays white on a light fill, well under the 3:1 that 1.4.11
258
+ // asks of a meaningful graphic.
259
+ --check-mark-on-light: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 13l4 4L19 7'/%3E%3C/svg%3E");
260
+ --check-mark-on-dark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230f1729' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 13l4 4L19 7'/%3E%3C/svg%3E");
261
+ --check-mark: var(--check-mark-on-light);
262
+ --color-accent-tint: var(--brand-primary-tint,
263
+ color-mix(in srgb, hsl(var(--color-primary)) 8%, var(--bg-base)));
264
+ --color-accent-tint-strong: var(--brand-primary-tint-strong,
265
+ color-mix(in srgb, hsl(var(--color-primary)) 16%, var(--bg-base)));
266
+
267
+ // button surface (neutral default)
268
+ --btn-bg: var(--color-bg);
269
+ --btn-fg: var(--color-fg);
270
+ --btn-border: var(--border-strong);
271
+ --btn-bg-hover: var(--bg-hover);
272
+ --btn-fg-hover: var(--color-fg);
273
+ --btn-border-hover: var(--border-strong);
274
+ }
@@ -0,0 +1,293 @@
1
+ @use 'palette' as *;
2
+
3
+ // ==========================================================================
4
+ // Theme — ln-ashlar
5
+ // ==========================================================================
6
+ // Three orthogonal activation axes:
7
+ // data-skin — structure/physics (radius, shadow, button chrome, nav/menu
8
+ // rebinds). Polarity-agnostic.
9
+ // data-mode — polarity only (bg/fg base values + native color-scheme).
10
+ // data-theme — brand palette only (color values).
11
+ //
12
+ // Activation paths:
13
+ // <html data-mode="dark"> ← explicit dark polarity
14
+ // <element data-mode="dark"> ← scoped dark polarity island
15
+ // @media (prefers-color-scheme: dark) ← system preference (auto)
16
+ // :root:not([data-mode="light"]) ← opt-out of auto
17
+ // <html data-skin="glass"> ← structural preset (flat, borderless)
18
+ // <html data-theme="ocean"> ← brand palette preset
19
+ //
20
+ // See docs-mcp/css/theming.md for the full guide.
21
+ // ==========================================================================
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // Activation — ashlar values at zero specificity, derivations at every scope
25
+ // ---------------------------------------------------------------------------
26
+
27
+ // Ashlar values — zero specificity, a client file always outranks them
28
+ :where(:root),
29
+ :where([data-mode="light"]) {
30
+ @include ln-values-light;
31
+ color-scheme: light;
32
+ }
33
+
34
+ :where([data-mode="dark"]) {
35
+ @include ln-values-dark;
36
+ color-scheme: dark;
37
+ }
38
+
39
+ @media (prefers-color-scheme: dark) {
40
+ :where(:root:not([data-mode="light"])) {
41
+ @include ln-values-dark;
42
+ color-scheme: dark;
43
+ }
44
+ }
45
+
46
+ // Derivations — library-owned, normal specificity, every colour-bearing scope.
47
+ // data-skin is deliberately absent: it declares no colour values, so the chain
48
+ // there could only reproduce the inherited result — while clobbering the
49
+ // preset --btn-* / tint overrides of any ancestor theme.
50
+ :root,
51
+ [data-theme],
52
+ [data-mode] {
53
+ @include ln-color-chain;
54
+ }
55
+
56
+ :where([data-mode]) {
57
+ color: var(--color-fg);
58
+ }
59
+
60
+ :where([data-mode]:not(html):not(body)) {
61
+ background-color: var(--color-bg);
62
+ }
63
+
64
+ // ---------------------------------------------------------------------------
65
+ // Named presets — demo theme picker. Brand palette only. Activation:
66
+ // <html data-theme="ocean"> <html data-theme="sunset"> etc.
67
+ // ---------------------------------------------------------------------------
68
+
69
+ // Lightness is solved, not authored: each fill sits at the AAA (7:1) limit
70
+ // for its hue against whichever foreground pole is nearer. Dark lifts cross
71
+ // the white/ink boundary, so they pair themselves — see --color-ink.
72
+ [data-theme="ocean"] {
73
+ --brand-primary: 190 80% 24%; // 7.40 on white
74
+
75
+ &[data-mode="dark"],
76
+ :where([data-mode="dark"]) & {
77
+ --brand-primary: 190 80% 46%; // 7.24 on ink
78
+ --color-accent-fg: hsl(var(--color-ink));
79
+ --check-mark: var(--check-mark-on-dark);
80
+ }
81
+ }
82
+
83
+ [data-theme="sunset"] {
84
+ --brand-primary: 10 80% 36%; // 7.10 on white
85
+
86
+ &[data-mode="dark"],
87
+ :where([data-mode="dark"]) & {
88
+ --brand-primary: 10 80% 69%; // 7.09 on ink
89
+ --color-accent-fg: hsl(var(--color-ink));
90
+ --check-mark: var(--check-mark-on-dark);
91
+ }
92
+ }
93
+
94
+ [data-theme="midnight"] {
95
+ // Pure palette — no polarity opinion, but both lightnesses are now solved,
96
+ // so the unpaired light case reads at AAA instead of being "accepted".
97
+ --brand-primary: 265 70% 50%; // 7.05 on white
98
+
99
+ &[data-mode="dark"],
100
+ :where([data-mode="dark"]) & {
101
+ --brand-primary: 265 70% 75%; // 7.15 on ink
102
+ --color-accent-fg: hsl(var(--color-ink));
103
+ --check-mark: var(--check-mark-on-dark);
104
+ }
105
+ }
106
+
107
+ [data-theme="glass"] {
108
+ // Electric blue accent — luminescent on dark navy glass
109
+ // No &[data-mode="dark"] lift block (unlike ocean/sunset/midnight): glass
110
+ // was authored dark-first, so it solves straight to the ink pole in both
111
+ // polarities — a lift here would blow out on dark.
112
+ --brand-primary: 218 95% 71%; // 7.04 on ink
113
+ --check-mark: var(--check-mark-on-dark);
114
+ --color-accent-fg: hsl(var(--color-ink));
115
+
116
+ // Active-nav wash — Glass computes a stronger 24% tint mix against
117
+ // local --bg-base for contrast on the deep dark surface.
118
+ // Side-effect: dropdown active items + upload drop-zone also pick up the
119
+ // slightly darker tint — improvement, not regression.
120
+ --color-accent-tint: color-mix(in srgb, hsl(var(--color-primary)) 24%, var(--bg-base));
121
+ }
122
+
123
+ [data-theme="aurora"] {
124
+ --brand-primary: 158 80% 30%;
125
+
126
+ &[data-mode="dark"],
127
+ :where([data-mode="dark"]) & {
128
+ --brand-primary: 158 80% 55%;
129
+ --color-accent-fg: hsl(var(--color-ink));
130
+ --check-mark: var(--check-mark-on-dark);
131
+ }
132
+ }
133
+
134
+ [data-theme="violet"] {
135
+ --brand-primary: 255 75% 48%;
136
+
137
+ &[data-mode="dark"],
138
+ :where([data-mode="dark"]) & {
139
+ --brand-primary: 255 85% 72%;
140
+ --color-accent-fg: hsl(var(--color-ink));
141
+ --check-mark: var(--check-mark-on-dark);
142
+ }
143
+ }
144
+
145
+ [data-theme="cyber"] {
146
+ --brand-primary: 198 95% 38%;
147
+
148
+ &[data-mode="dark"],
149
+ :where([data-mode="dark"]) & {
150
+ --brand-primary: 198 95% 58%;
151
+ --color-accent-fg: hsl(var(--color-ink));
152
+ --check-mark: var(--check-mark-on-dark);
153
+ }
154
+ }
155
+
156
+ // ---------------------------------------------------------------------------
157
+ // Named skins — structural/physics presets. Polarity-agnostic. Activation:
158
+ // <html data-skin="glass">
159
+ // ---------------------------------------------------------------------------
160
+
161
+ [data-skin="glass"] {
162
+ // Flat — zero radius everywhere
163
+ --radius-xs: 0;
164
+ --radius-sm: 0;
165
+ --radius-md: 0;
166
+ --radius-lg: 0;
167
+ --radius-xl: 0;
168
+ --radius-2xl: 0;
169
+ --radius-full: 0;
170
+
171
+ // Flat — no elevation shadows. --shadow-inner kept for recessed
172
+ // surfaces (code blocks, progress tracks) which read it as a depth
173
+ // affordance rather than elevation.
174
+ --shadow-xs: none;
175
+ --shadow-sm: none;
176
+ --shadow-md: none;
177
+ --shadow-lg: none;
178
+ --shadow-xl: none;
179
+ --shadow-2xl: none;
180
+
181
+ // ── Buttons — neutral chrome via --btn-* rebind, accent variant via
182
+ // cross-cutting --color-accent-bg-* companion tokens. Skin rebinds
183
+ // at :root only; library owns structure. (See docs/architecture/reference.md ## Theme Architecture for exact mechanics)
184
+ --btn-bg: var(--bg-elevated);
185
+ --btn-bg-hover: var(--bg-hover);
186
+ --btn-border: var(--color-accent);
187
+ // --color-accent-hover is declared only below <html> (a, mixin bodies);
188
+ // invalid at computed-value time here — derive locally. l - 6 matches
189
+ // @mixin btn's own accent-hover so neutral and accent buttons agree.
190
+ --btn-border-hover: hsl(from var(--color-accent) h s calc(l - 6));
191
+
192
+ // ── Accent buttons — translucent fill via consumer-scope rebind
193
+ // Rebind --btn-* on the button itself (not at skin :root) so
194
+ // var(--color-primary) inside the values resolves on the button's
195
+ // cascade — letting .success / .error / .warning / .info status
196
+ // overrides reach the fill and text color. Token-only rebinds; no
197
+ // background/color/border-color declarations, no &:hover blocks
198
+ // (button-base already handles state via --btn-*-hover).
199
+ button[type="submit"],
200
+ .btn {
201
+ --btn-bg: hsl(var(--color-primary) / 0.2);
202
+ --btn-fg: hsl(var(--color-primary));
203
+ --btn-bg-hover: hsl(var(--color-primary) / 0.3);
204
+ --btn-fg-hover: hsl(var(--color-primary));
205
+ }
206
+
207
+ // ── Nav surface — palette-only rebind ──────────────────────────
208
+ // @mixin nav reads --nav-link-border-color* via fallback (defaults:
209
+ // transparent). Glass rebinds them so hover/active draw an accent
210
+ // ring. --nav-list-bleed shifts the ul to the sidebar's vertical
211
+ // borders so dividers reach edge-to-edge; @mixin nav reads it with
212
+ // `0` fallback so default theme is unaffected.
213
+ --nav-link-border-color-hover: var(--color-accent);
214
+ --nav-link-border-color-active: var(--color-accent);
215
+ // Resolves against the ROOT --padding-x, not a sidebar-local one — valid
216
+ // today because nothing between :root and the nav rebinds it, but latent.
217
+ --nav-list-bleed: calc(-1 * var(--padding-x));
218
+
219
+ // ── Dropdown / menu-items dividers ─────────────────────────────
220
+ // @mixin menu-items reads SOFT --border-block-start on `li + li`
221
+ // and `hr` with `none` fallback. Glass rebinds the slot in scope
222
+ // so the divider appears for both. Scoped (not skin :root)
223
+ // because --border-block-start is read by ~10 other mixins
224
+ // (cards, tables, accordions) where the divider should NOT appear.
225
+ [data-ln-dropdown-menu],
226
+ .menu-items {
227
+ --border-block-start: var(--border-width) solid var(--color-border);
228
+ }
229
+ }
230
+
231
+ [data-skin="outline"] {
232
+ // Outline — no elevation shadows, structural borders only.
233
+ --shadow-xs: none;
234
+ --shadow-sm: none;
235
+ --shadow-md: none;
236
+ --shadow-lg: none;
237
+ --shadow-xl: none;
238
+ --shadow-2xl: none;
239
+
240
+ // Retain the inner shadow for recessed tracks.
241
+ --shadow-resting: none;
242
+ --shadow-floating: none;
243
+
244
+ // Make the borders stand out more since there are no shadows
245
+ // Resolves once at <html> against whichever polarity is active there —
246
+ // a nested [data-mode] island under this skin inherits root neutral-300.
247
+ --border-subtle: hsl(var(--color-neutral-300));
248
+
249
+ // ── Buttons — neutral chrome
250
+ --btn-bg: transparent;
251
+ --btn-bg-hover: var(--bg-hover);
252
+ // Give buttons a visible border instead of filling them
253
+ --btn-border: var(--border-strong);
254
+
255
+ // ── Accent buttons — transparent fill, colored border
256
+ button[type="submit"],
257
+ .btn {
258
+ --btn-bg: transparent;
259
+ --btn-fg: hsl(var(--color-primary));
260
+ --btn-border: hsl(var(--color-primary));
261
+ --btn-bg-hover: hsl(var(--color-primary) / 0.1);
262
+ --btn-fg-hover: hsl(var(--color-primary));
263
+ --btn-border-hover: hsl(var(--color-primary));
264
+ }
265
+ }
266
+
267
+ [data-skin="soft"] {
268
+ // Soft — playful, maximum radius, heavily shadow-based, no borders.
269
+ --radius-xs: 0.5rem;
270
+ --radius-sm: 0.75rem;
271
+ --radius-md: 1rem;
272
+ --radius-lg: 1.5rem;
273
+ --radius-xl: 2rem;
274
+ --radius-2xl: 2.5rem;
275
+
276
+ // Override shadows to be much larger and softer (volumetric look)
277
+ --shadow-sm: 0 8px 16px -2px rgba(0, 0, 0, 0.08);
278
+ --shadow-md: 0 12px 24px -4px rgba(0, 0, 0, 0.12);
279
+ --shadow-lg: 0 24px 48px -4px rgba(0, 0, 0, 0.16);
280
+
281
+ // Floating elements are more pronounced
282
+ --shadow-resting: var(--shadow-sm);
283
+ --shadow-floating: var(--shadow-lg);
284
+
285
+ // Remove default subtle borders (cards, panels) so they rely solely on shadows
286
+ --border-subtle: transparent;
287
+
288
+ // ── Buttons — pill shapes, floating, no borders
289
+ --btn-border: transparent;
290
+ --btn-border-hover: transparent;
291
+ --btn-bg: var(--bg-elevated);
292
+ --btn-bg-hover: var(--bg-hover);
293
+ }