@livenetworks/ashlar 1.6.1 → 2.0.1

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 +190 -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
@@ -1,51 +0,0 @@
1
- @use '../config/mixins' as *;
2
-
3
- .ln-upload {
4
- @include upload;
5
- }
6
-
7
- .ln-upload__zone {
8
- @include upload-zone;
9
- }
10
-
11
- .ln-upload__zone--dragover {
12
- @include upload-zone-dragover;
13
- }
14
-
15
- .ln-upload__list {
16
- @include upload-list;
17
- }
18
-
19
- .ln-upload__item {
20
- @include upload-item;
21
- }
22
-
23
- .ln-upload__name {
24
- @include upload-name;
25
- }
26
-
27
- .ln-upload__size {
28
- @include upload-size;
29
- }
30
-
31
- .ln-upload__progress {
32
- @include upload-progress;
33
- }
34
-
35
- .ln-upload__progress-bar {
36
- @include upload-progress-bar;
37
- }
38
-
39
- .ln-upload__item--error {
40
- @include upload-item-error;
41
- }
42
-
43
- .ln-upload__item--deleting::before {
44
- @include upload-item-deleting-spinner;
45
- }
46
-
47
- @keyframes ln-upload-spin {
48
- to {
49
- transform: rotate(360deg);
50
- }
51
- }
@@ -1,216 +0,0 @@
1
- // ==========================================================================
2
- // Theme — ln-ashlar
3
- // ==========================================================================
4
- // Dark-mode overrides. Inverts the neutral scale in place, re-tunes
5
- // shadows and primary tint layers.
6
- //
7
- // Activation (any of the three):
8
- // <html data-theme="dark"> ← explicit force
9
- // @media (prefers-color-scheme: dark) ← system preference
10
- // :root:not([data-theme="light"]) ← opt-out of auto
11
- //
12
- // See docs/css/theming.md for the full guide.
13
- // ==========================================================================
14
-
15
- // ---------------------------------------------------------------------------
16
- // Shared dark overrides — used by both activation paths.
17
- // ---------------------------------------------------------------------------
18
- @mixin ln-dark-tokens {
19
- // Neutral scale — inverted
20
- --color-neutral-50: 220 20% 8%;
21
- --color-neutral-100: 220 16% 12%;
22
- --color-neutral-150: 220 14% 18%;
23
- --color-neutral-200: 220 13% 24%;
24
- --color-neutral-300: 220 13% 36%;
25
- --color-neutral-400: 218 11% 52%;
26
- --color-neutral-500: 220 9% 60%;
27
- --color-neutral-600: 220 11% 72%;
28
- --color-neutral-700: 220 14% 82%;
29
- --color-neutral-800: 220 20% 90%;
30
- --color-neutral-900: 221 30% 97%;
31
-
32
- // Vocabulary — bg
33
- // Explicit ladder: body (darkest) < base < elevated < sunken (mid).
34
- // Dark UI convention keeps elevated = lighter; the neutral-scale
35
- // inversion alone would flip elevation direction, so we restate
36
- // the four vocabulary entries explicitly.
37
- --bg-base: hsl(220 16% 13%);
38
- --bg-elevated: hsl(220 16% 17%);
39
- --bg-sunken: hsl(220 16% 20%);
40
- --bg-recessed: hsl(220 16% 9%);
41
-
42
- // Vocabulary — fg
43
- --fg-default: hsl(0 0% 95%);
44
- --fg-muted: hsl(220 9% 60%);
45
- --fg-subtle: hsl(218 11% 52%);
46
-
47
- // Vocabulary — border (collapses old --color-border-light bump)
48
- --border-subtle: hsl(220 14% 20%);
49
- --border-strong: hsl(220 13% 36%);
50
- --border-strong-hover: hsl(218 11% 52%);
51
-
52
- // Scrim — keep dark overlay in dark mode (neutral-900 inverts to
53
- // near-white, which would produce a LIGHT scrim; explicit override
54
- // preserves conventional modal-darkening behavior).
55
- --color-scrim: hsl(0 0% 0% / 0.6);
56
-
57
- // Primary tint layers — re-tuned for dark surfaces
58
- --color-primary-light: 232 60% 22%;
59
- --color-primary-lighter: 232 50% 15%;
60
-
61
- // Status tint layers — re-tuned for dark surfaces (parallel to primary)
62
- --color-success-light: 142 50% 18%;
63
- --color-success-lighter: 142 40% 13%;
64
- --color-warning-light: 32 55% 20%;
65
- --color-warning-lighter: 32 45% 14%;
66
- --color-info-light: 217 55% 22%;
67
- --color-info-lighter: 217 45% 15%;
68
- --color-error-light: 0 50% 20%;
69
- --color-error-lighter: 0 40% 14%;
70
-
71
- // Secondary tint layers — re-tuned for dark surfaces
72
- --color-secondary-light: 160 55% 20%;
73
- --color-secondary-lighter: 160 45% 14%;
74
-
75
- // Shadows — solid black, boosted alpha, no hue (cool-tint
76
- // disappears on dark surfaces)
77
- --shadow-xs:
78
- 0 1px 2px 0 hsl(0 0% 0% / 0.32);
79
- --shadow-sm:
80
- 0 1px 3px 0 hsl(0 0% 0% / 0.40),
81
- 0 1px 2px -1px hsl(0 0% 0% / 0.30);
82
- --shadow-md:
83
- 0 4px 12px -2px hsl(0 0% 0% / 0.48),
84
- 0 2px 4px -2px hsl(0 0% 0% / 0.32);
85
- --shadow-lg:
86
- 0 12px 24px -6px hsl(0 0% 0% / 0.56),
87
- 0 8px 12px -4px hsl(0 0% 0% / 0.40);
88
- --shadow-xl:
89
- 0 24px 48px -12px hsl(0 0% 0% / 0.64),
90
- 0 12px 24px -6px hsl(0 0% 0% / 0.48);
91
- --shadow-2xl:
92
- 0 36px 72px -18px hsl(0 0% 0% / 0.72),
93
- 0 18px 36px -9px hsl(0 0% 0% / 0.56);
94
- --shadow-inner:
95
- inset 0 2px 4px 0 hsl(0 0% 0% / 0.32);
96
- }
97
-
98
- // ---------------------------------------------------------------------------
99
- // Explicit attribute activation
100
- // ---------------------------------------------------------------------------
101
- [data-theme="dark"] {
102
- @include ln-dark-tokens;
103
- }
104
-
105
- // ---------------------------------------------------------------------------
106
- // System preference activation (opt-out via data-theme="light")
107
- // ---------------------------------------------------------------------------
108
- @media (prefers-color-scheme: dark) {
109
- :root:not([data-theme="light"]) {
110
- @include ln-dark-tokens;
111
- }
112
- }
113
-
114
- // ---------------------------------------------------------------------------
115
- // Named presets — demo theme picker. Activation:
116
- // <html data-theme="ocean"> <html data-theme="sunset"> etc.
117
- // ---------------------------------------------------------------------------
118
-
119
- [data-theme="ocean"] {
120
- --color-primary: 190 80% 35%;
121
- --color-primary-light: 190 60% 90%;
122
- --color-primary-lighter: 190 50% 95%;
123
- }
124
-
125
- [data-theme="sunset"] {
126
- --color-primary: 10 80% 50%;
127
- --color-primary-light: 10 70% 92%;
128
- --color-primary-lighter: 10 60% 96%;
129
- }
130
-
131
- [data-theme="midnight"] {
132
- @include ln-dark-tokens;
133
- --color-primary: 265 70% 60%;
134
- --color-primary-light: 265 50% 22%;
135
- --color-primary-lighter: 265 40% 15%;
136
- }
137
-
138
- [data-theme="glass"] {
139
- @include ln-dark-tokens;
140
-
141
- // Electric blue accent — luminescent on dark navy glass
142
- --color-primary: 218 95% 62%;
143
- --color-primary-light: 218 55% 24%;
144
- --color-primary-lighter: 218 50% 16%;
145
-
146
- // Flat — zero radius everywhere
147
- --radius-sm: 0;
148
- --radius-md: 0;
149
- --radius-lg: 0;
150
- --radius-xl: 0;
151
- --radius-full: 0;
152
-
153
- // Flat — no elevation shadows. --shadow-inner kept for recessed
154
- // surfaces (code blocks, progress tracks) which read it as a depth
155
- // affordance rather than elevation.
156
- --shadow-xs: none;
157
- --shadow-sm: none;
158
- --shadow-md: none;
159
- --shadow-lg: none;
160
- --shadow-xl: none;
161
- --shadow-2xl: none;
162
-
163
- // ── Buttons — neutral chrome via --btn-* rebind, accent variant via
164
- // cross-cutting --color-accent-bg-* companion tokens. Theme rebinds
165
- // at :root only; library owns structure. See CLAUDE.md
166
- // ## Theme Architecture for the contract.
167
- --btn-bg: var(--bg-elevated);
168
- --btn-bg-hover: var(--bg-sunken);
169
- --btn-border: var(--color-accent);
170
- --btn-border-hover: var(--color-accent-hover);
171
-
172
- // ── Accent buttons — translucent fill via consumer-scope rebind
173
- // Rebind --btn-* on the button itself (not at theme :root) so
174
- // var(--color-primary) inside the values resolves on the button's
175
- // cascade — letting .success / .error / .warning / .info status
176
- // overrides reach the fill and text color. Token-only rebinds; no
177
- // background/color/border-color declarations, no &:hover blocks
178
- // (button-base already handles state via --btn-*-hover).
179
- button[type="submit"],
180
- .btn {
181
- --btn-bg: hsl(var(--color-primary) / 0.2);
182
- --btn-fg: hsl(var(--color-primary));
183
- --btn-bg-hover: hsl(var(--color-primary) / 0.3);
184
- --btn-fg-hover: hsl(var(--color-primary));
185
- }
186
-
187
- // ── Nav surface — palette-only rebind ──────────────────────────
188
- // @mixin nav reads --nav-link-border-color* via fallback (defaults:
189
- // transparent). Glass rebinds them so hover/active draw an accent
190
- // ring. --nav-list-bleed shifts the ul to the sidebar's vertical
191
- // borders so dividers reach edge-to-edge; @mixin nav reads it with
192
- // `0` fallback so default theme is unaffected.
193
- --nav-link-border-color-hover: var(--color-accent);
194
- --nav-link-border-color-active: var(--color-accent);
195
- --nav-list-bleed: calc(-1 * var(--padding-x));
196
-
197
- // Active-nav wash — Glass shifts --color-accent-tint one step
198
- // darker (var(--color-primary-light) instead of -lighter) for
199
- // stronger contrast on the deep dark surface. Replaces the
200
- // pre-refactor descendant override on a.active. Side-effect:
201
- // dropdown active items + upload drop-zone also pick up the
202
- // slightly darker tint — improvement, not regression.
203
- --color-accent-tint: hsl(var(--color-primary-light));
204
-
205
- // ── Dropdown / menu-items dividers ─────────────────────────────
206
- // @mixin menu-items reads SOFT --border-block-start on `li + li`
207
- // and `hr` with `none` fallback. Glass rebinds the slot in scope
208
- // so the divider appears for both. Scoped (not theme :root)
209
- // because --border-block-start is read by ~10 other mixins
210
- // (cards, tables, accordions) where the divider should NOT appear.
211
- [data-ln-dropdown-menu],
212
- .menu-items {
213
- --border-block-start: var(--border-width) solid var(--color-border);
214
- }
215
-
216
- }
@@ -1,179 +0,0 @@
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
-
11
- // Buttons
12
- // button-base — shared neutral chrome (global button + anchor-as-button)
13
- // btn — accent variant of button-base; rebinds --btn-* to accent colors
14
- // btn-sm — smaller size modifier
15
- // btn-lg — larger size modifier
16
- // btn-group — inline list of peer action buttons (ghost rebind)
17
-
18
- // ─── button-base ──────────────────────────────────────
19
- // Neutral chrome shared by <button>, <input type="submit|reset|button">,
20
- // and anchors used as buttons (e.g. inside form-actions). Reads the
21
- // six-token --btn-* surface: --btn-bg/fg/border (idle) and
22
- // --btn-bg-hover/fg-hover/border-hover (hover + active). Both the
23
- // neutral default and the accent variant are fully token-driven —
24
- // the difference is which values --btn-* resolves to.
25
- //
26
- // Neutral default: --btn-* read from :root, where they wire to
27
- // --color-bg / --color-fg / --border-strong (and --border-strong-hover
28
- // companions for the hover state). Theme overrides rebind --btn-*
29
- // (e.g. Glass rebinds --btn-bg to --bg-elevated, --btn-border
30
- // to --color-accent for an outlined neutral chrome).
31
- //
32
- // Accent variant (submit + @mixin btn): rebinds --btn-* on the
33
- // consumer element to accent values. Because the rebind happens on
34
- // the button itself (not at :root), and because @mixin btn first
35
- // re-declares --color-accent: hsl(var(--color-primary)) at the same
36
- // scope, .success/.error/.warning/.info classes that override
37
- // --color-primary cascade through --color-accent → --btn-* →
38
- // background/color/border-color cleanly. var() always resolves at
39
- // the declaration site, and the declaration site for both the
40
- // rebind and button-base's reads is the button element.
41
- //
42
- // Why cross-cutting --color-accent-bg-* companions, not per-component
43
- // --btn-accent-* tokens at :root: a per-component surface declared at
44
- // :root (--btn-accent-bg: var(--color-accent)) would freeze
45
- // --color-accent at :root scope and break the
46
- // .success/.error/.warning/.info cascade for descendant overrides.
47
- // Cross-cutting --color-accent-bg-* companions (read via fallback to
48
- // --color-accent / --color-accent-fg) sidestep that: the default
49
- // theme leaves them unset (mixin falls back to solid + white), Glass
50
- // rebinds them at theme :root to flip the accent button to
51
- // translucent. Solid-accent consumers (toast-icon, pill-checked,
52
- // stepper active/complete) read --color-accent / --color-accent-fg
53
- // directly and are unaffected by Glass's rebind because Glass leaves
54
- // --color-accent-fg alone. See CLAUDE.md ## Theme Architecture for
55
- // the full contract.
56
-
57
- @mixin button-base {
58
- @include inline-flex;
59
- @include items-center;
60
- @include justify-center;
61
- gap: var(--gap);
62
- padding: var(--padding-y) var(--padding-x);
63
- @include text-sm;
64
- @include font-medium;
65
- border-radius: var(--radius);
66
- white-space: nowrap;
67
- border: var(--border-width) solid var(--btn-border);
68
- outline: none;
69
- background: var(--btn-bg);
70
- color: var(--btn-fg);
71
- @include transition-colors;
72
-
73
- &:hover:not(:disabled) {
74
- background: var(--btn-bg-hover);
75
- color: var(--btn-fg-hover);
76
- border-color: var(--btn-border-hover);
77
- }
78
-
79
- &:active:not(:disabled) {
80
- background: var(--btn-bg-hover);
81
- border-color: var(--btn-border-hover);
82
- }
83
-
84
- &:focus-visible {
85
- @include focus-ring;
86
- }
87
-
88
- &:disabled {
89
- @include opacity-50;
90
- @include cursor-not-allowed;
91
- }
92
- }
93
-
94
- @mixin btn {
95
- // Accent variant — rebinds the --btn-* token surface to accent
96
- // values. button-base reads --btn-bg/fg/border (idle) and
97
- // --btn-bg-hover/fg-hover/border-hover (hover + active), so this
98
- // mixin only needs to set tokens. No direct background/color/
99
- // border-color, no &:hover/&:active blocks.
100
- //
101
- // Re-declares --color-accent on the consumer element so
102
- // var(--color-primary) re-resolves at this scope.
103
- // .success/.error/.warning/.info classes override --color-primary;
104
- // without these re-declarations, --color-accent stays frozen at
105
- // :root and semantic colors don't cascade.
106
- //
107
- // --color-accent-fg is NOT re-declared — the :root default
108
- // (hsl(var(--color-white))) already cascades, and re-declaring
109
- // here would shadow theme companion overrides on solid-only
110
- // surfaces (which there are none here, but the redundancy is
111
- // noise either way).
112
- --color-accent: hsl(var(--color-primary));
113
-
114
- // Hover state derived from --color-accent at THIS scope via CSS
115
- // relative color syntax — same hue + saturation, lightness reduced
116
- // by 8. Computing here (consumer scope) instead of reading a
117
- // separate :root token means a consumer override (e.g.
118
- // `style="--color-primary: var(--color-error)"` or a .error
119
- // ancestor via @mixin semantic-color) cascades to BOTH the idle
120
- // and hover surfaces — the whole state machine follows from a
121
- // single token change.
122
- //
123
- // IMPORTANT — `calc(l - 8)` not `calc(l - 8%)`. Inside
124
- // relative color syntax, channel keywords (h/s/l) evaluate to
125
- // <number> tokens, not <percentage>. `l - 8%` mixes types →
126
- // invalid color → browser falls back to `transparent` and the
127
- // hover bg vanishes. The number form is what the spec mandates;
128
- // hsl(216 95 34) without `%` is valid CSS Color 4 and reads as
129
- // "lightness 34%" exactly like the legacy hsl(216 95% 34%) form.
130
- //
131
- // Pattern shared with @mixin pill, @mixin data-table-row-focused,
132
- // the anchor hover in _global.scss, and @mixin semantic-color's
133
- // status-family cascade. -light / -lighter remain explicit tokens
134
- // (theme-controlled, not derivable from base).
135
- --color-accent-hover: hsl(from var(--color-accent) h s calc(l - 8));
136
-
137
- // --btn-bg / --btn-fg read translucent companions via fallback.
138
- // Default theme: companions unset → falls back to --color-accent
139
- // / --color-accent-fg (solid + white). Glass theme: companions
140
- // rebound at :root → translucent fill + accent-colored fg. The
141
- // var() fallback resolves at the consumer (this button), so the
142
- // .success/.error/.warning/.info cascade through --color-primary
143
- // still works in both themes.
144
- --btn-bg: var(--color-accent-bg, var(--color-accent));
145
- --btn-fg: var(--color-accent-bg-fg, var(--color-accent-fg));
146
- --btn-border: var(--color-accent);
147
- --btn-bg-hover: var(--color-accent-bg-hover, var(--color-accent-hover));
148
- --btn-fg-hover: var(--color-accent-bg-fg, var(--color-accent-fg));
149
- --btn-border-hover: var(--color-accent-hover);
150
- }
151
-
152
- @mixin btn-sm {
153
- --btn-padding-x: var(--size-sm-up);
154
- --gap: var(--size-xs);
155
- gap: var(--gap);
156
- @include text-xs;
157
- }
158
-
159
- @mixin btn-lg {
160
- --btn-padding-x: var(--size-lg);
161
- --btn-padding-y: var(--size-md);
162
- --gap: var(--size-sm-up);
163
- gap: var(--gap);
164
- @include text-base;
165
- }
166
-
167
- @mixin btn-group {
168
- --gap: var(--size-xs);
169
- @include inline-flex;
170
- @include items-center;
171
- gap: var(--gap);
172
-
173
- button {
174
- --btn-bg: transparent;
175
- --btn-border: transparent;
176
- color: var(--fg-subtle);
177
- }
178
- }
179
-
@@ -1,31 +0,0 @@
1
- @use 'spacing' as *;
2
- @use 'typography' as *;
3
- @use 'shadows' as *;
4
- @use 'tooltip' as *;
5
-
6
- // Confirm tooltip — visual tooltip for icon-only confirm buttons.
7
- //
8
- // Usage:
9
- // .ln-confirm-tooltip { @include confirm-tooltip; }
10
- //
11
- // JS adds .ln-confirm-tooltip class and data-tooltip-text attribute
12
- // to icon-only buttons entering confirm state.
13
-
14
- @mixin confirm-tooltip {
15
- position: relative;
16
- overflow: visible !important;
17
-
18
- // Confirm icon inherits this color
19
- color: hsl(var(--color-error)) !important;
20
-
21
- &::after {
22
- @include tooltip-bubble;
23
- content: attr(data-tooltip-text);
24
- position: absolute;
25
- bottom: 100%;
26
- left: 50%;
27
- transform: translateX(-50%);
28
- --margin-block: var(--size-sm);
29
- margin-bottom: var(--margin-block);
30
- }
31
- }
@@ -1,141 +0,0 @@
1
- @use 'display' as *;
2
- @use 'spacing' as *;
3
- @use 'colors' as *;
4
- @use 'borders' as *;
5
- @use 'shadows' as *;
6
- @use 'typography' as *;
7
- @use 'sizing' as *;
8
- @use 'position' as *;
9
- @use 'interaction' as *;
10
- @use 'transitions' as *;
11
- @use 'motion' as *;
12
- @use 'card' as *;
13
-
14
- // Dropdown menu — floating panel with menu items.
15
- //
16
- // Usage:
17
- // [data-ln-dropdown] { @include dropdown; }
18
- // [data-ln-dropdown-menu] { @include dropdown-menu; }
19
- //
20
- // Open/close state (display:none ↔ display:block + .open) is JS-driven
21
- // and lives in the co-located JS SCSS, not here.
22
-
23
- @mixin dropdown {
24
- @include relative;
25
- }
26
-
27
- // ─── Menu items — shared recipe ────────────────────────
28
- // The "list of interactive menu items" recipe, without container
29
- // chrome or positioning. Composes with any floating container
30
- // (dropdown, popover-with-menu, other future surfaces).
31
- //
32
- // Expected HTML:
33
- // <ul>
34
- // <li><a>…</a></li>
35
- // <li><button>…</button></li>
36
- // <li><button aria-current="true">Active item</button></li>
37
- // <li><hr></li>
38
- // <li><form><button type="submit">Logout</button></form></li>
39
- // </ul>
40
- //
41
- // Selection state — `aria-current="true"` (boolean flavor) marks the
42
- // active item in single-select pickers (theme, language). NOT the
43
- // `="page"` / `="step"` flavors — those belong to breadcrumbs /
44
- // stepper and have their own styling in those mixins.
45
-
46
- @mixin menu-items {
47
- // ─── Row resets ────────────────────────────────────
48
- li {
49
- margin: 0;
50
- padding: 0;
51
- }
52
-
53
- form {
54
- margin: 0;
55
- padding: 0;
56
- display: contents;
57
- }
58
-
59
- // ─── Interactive items ─────────────────────────────
60
- a,
61
- button,
62
- input[type="submit"],
63
- input[type="reset"],
64
- input[type="button"] {
65
- @include w-full;
66
- @include flex;
67
- @include items-center;
68
- justify-content: flex-start;
69
- gap: var(--gap);
70
- @include text-left;
71
- @include text-sm;
72
- @include cursor-pointer;
73
- @include transition-fast;
74
- background: none;
75
- border: none;
76
- border-radius: 0;
77
- color: var(--color-fg);
78
- text-decoration: none;
79
-
80
- &:hover:not(:disabled),
81
- &:active:not(:disabled) {
82
- --color-bg: var(--bg-sunken);
83
- background: var(--color-bg);
84
- color: var(--color-fg);
85
- }
86
-
87
- &:focus {
88
- box-shadow: none;
89
- }
90
-
91
- // Active item — single-select selection state.
92
- // Scoped to the boolean flavor so we don't collide with
93
- // breadcrumbs (`="page"`) or stepper (`="step"`).
94
- &[aria-current="true"] {
95
- background: var(--color-accent-tint);
96
- color: var(--color-accent);
97
- }
98
- }
99
-
100
- a {
101
- --padding-y: var(--size-xs);
102
- --padding-x: var(--size-sm);
103
- padding: var(--padding-y) var(--padding-x);
104
- }
105
-
106
- :is(button, input[type="submit"], input[type="reset"], input[type="button"]) {
107
- --btn-padding-y: var(--size-xs);
108
- --btn-padding-x: var(--size-sm);
109
- }
110
-
111
- // Inter-item divider — SOFT --border-block-start primitive read with
112
- // `none` fallback. Default theme: no divider. Themes that opt in
113
- // (Glass) rebind --border-block-start in scope.
114
- li + li {
115
- border-block-start: var(--border-block-start, none);
116
- }
117
-
118
- // ─── Separator ─────────────────────────────────────
119
- hr {
120
- border: none;
121
- border-block-start: var(--border-block-start, var(--border-width) solid var(--color-border));
122
- --margin-block: var(--size-xs);
123
- margin-block: var(--margin-block);
124
- }
125
- }
126
-
127
- // ─── Dropdown menu — floating panel + menu items ───────
128
- // Dropdown-specific chrome (anchor-positioned absolute panel) plus
129
- // the shared menu-items recipe.
130
-
131
- @mixin dropdown-menu {
132
- @include floating-panel;
133
- @include fixed;
134
- inset: auto;
135
- margin: 0;
136
- --padding-y: var(--size-xs);
137
- padding-block: var(--padding-y);
138
- min-width: 10rem;
139
-
140
- @include menu-items;
141
- }
@@ -1,64 +0,0 @@
1
- @use 'spacing' as *;
2
- @use 'borders' as *;
3
- @use 'motion' as *;
4
- @use 'card' as *;
5
- @use 'form' as *;
6
- @use 'focus' as *;
7
-
8
- @mixin popover {
9
- @include floating-panel;
10
- display: none;
11
- position: fixed;
12
- inset: auto;
13
- margin: 0;
14
- min-width: 14rem;
15
- max-width: 24rem;
16
- padding: var(--padding-y) var(--padding-x);
17
-
18
- &[data-ln-popover="open"] {
19
- display: block;
20
-
21
- @include motion-safe {
22
- animation: ln-popover-fade var(--transition-fast);
23
- }
24
- }
25
-
26
- &:focus {
27
- outline: none;
28
- }
29
-
30
- // Filter popover content: optional search + checkbox option list
31
- > input[type="search"] {
32
- width: 100%;
33
- margin-bottom: var(--size-xs);
34
- box-sizing: border-box;
35
- }
36
-
37
- > ul {
38
- list-style: none;
39
- padding: 0;
40
- margin: 0;
41
- max-height: var(--filter-options-max-height, 15rem);
42
- overflow-y: auto;
43
-
44
- // Nav-link treatment for filter options (accent-tint wash on checked).
45
- // Visually-hidden input (below) keeps the checkbox keyboard-focusable.
46
- @include check-list-nav;
47
-
48
- > li > label > input {
49
- // Override pill's display:none — keep in focus order for keyboard nav
50
- display: revert;
51
- position: absolute;
52
- width: 1px;
53
- height: 1px;
54
- overflow: hidden;
55
- clip-path: inset(50%);
56
- white-space: nowrap;
57
- }
58
-
59
- // Focus ring on label when the hidden input receives keyboard focus
60
- > li > label:has(> input:focus-visible) {
61
- @include focus-ring;
62
- }
63
- }
64
- }