@livenetworks/ashlar 1.6.0 → 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 (560) 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/components/ln-confirm/README.md +216 -0
  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 -167
  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/README.md +0 -162
  414. package/js/ln-confirm/_ln-confirm.scss +0 -24
  415. package/js/ln-confirm/ln-confirm.js +0 -1
  416. package/js/ln-core/crypto.js +0 -83
  417. package/js/ln-core/helpers.js +0 -788
  418. package/js/ln-core/index.js +0 -7
  419. package/js/ln-core/persist.js +0 -97
  420. package/js/ln-couchdb-connector/ln-couchdb-connector.js +0 -1
  421. package/js/ln-data-coordinator/ln-data-coordinator.js +0 -1
  422. package/js/ln-data-coordinator/src/data-read-policy.js +0 -18
  423. package/js/ln-data-store/ln-data-store.js +0 -1
  424. package/js/ln-date/ln-date.js +0 -1
  425. package/js/ln-date/src/ln-date.js +0 -603
  426. package/js/ln-debug/README.md +0 -58
  427. package/js/ln-debug/ln-debug.js +0 -1
  428. package/js/ln-debug/src/ln-debug.js +0 -19
  429. package/js/ln-dropdown/ln-dropdown.js +0 -1
  430. package/js/ln-dropdown/ln-dropdown.scss +0 -15
  431. package/js/ln-editor/ln-editor.js +0 -1
  432. package/js/ln-editor/ln-editor.scss +0 -43
  433. package/js/ln-external-links/ln-external-links.js +0 -1
  434. package/js/ln-fill/ln-fill.js +0 -1
  435. package/js/ln-filter/README.md +0 -189
  436. package/js/ln-filter/ln-filter-dev.scss +0 -8
  437. package/js/ln-filter/ln-filter.js +0 -1
  438. package/js/ln-filter/src/ln-filter.js +0 -419
  439. package/js/ln-form/ln-form.js +0 -1
  440. package/js/ln-http/ln-http.js +0 -1
  441. package/js/ln-link/ln-link.js +0 -1
  442. package/js/ln-list/README.md +0 -129
  443. package/js/ln-list/ln-list.js +0 -1
  444. package/js/ln-list/ln-list.scss +0 -28
  445. package/js/ln-modal/ln-modal-dev.scss +0 -13
  446. package/js/ln-modal/ln-modal.js +0 -1
  447. package/js/ln-modal/ln-modal.scss +0 -35
  448. package/js/ln-modal-coordinator/README.md +0 -99
  449. package/js/ln-modal-coordinator/ln-modal-coordinator-dev.scss +0 -8
  450. package/js/ln-modal-coordinator/ln-modal-coordinator.js +0 -1
  451. package/js/ln-nav/ln-nav.js +0 -1
  452. package/js/ln-number/README.md +0 -149
  453. package/js/ln-number/ln-number.js +0 -1
  454. package/js/ln-number/src/ln-number.js +0 -443
  455. package/js/ln-options/ln-options.js +0 -1
  456. package/js/ln-popover/ln-popover.js +0 -1
  457. package/js/ln-progress/ln-progress.js +0 -1
  458. package/js/ln-progress/src/ln-progress.js +0 -98
  459. package/js/ln-router/ln-router.js +0 -1
  460. package/js/ln-search/README.md +0 -158
  461. package/js/ln-search/ln-search-dev.scss +0 -8
  462. package/js/ln-search/ln-search.js +0 -1
  463. package/js/ln-search/src/ln-search.js +0 -117
  464. package/js/ln-slug/ln-slug.js +0 -1
  465. package/js/ln-sort/ln-sort.js +0 -1
  466. package/js/ln-sort/src/ln-sort.js +0 -178
  467. package/js/ln-sortable/ln-sortable.js +0 -1
  468. package/js/ln-stat/ln-stat.js +0 -1
  469. package/js/ln-table/ln-table.js +0 -1
  470. package/js/ln-table/ln-table.scss +0 -11
  471. package/js/ln-table-coordinator/README.md +0 -73
  472. package/js/ln-table-coordinator/ln-table-coordinator.js +0 -1
  473. package/js/ln-table-coordinator/src/ln-table-coordinator.js +0 -160
  474. package/js/ln-tabs/ln-tabs-dev.scss +0 -18
  475. package/js/ln-tabs/ln-tabs.js +0 -1
  476. package/js/ln-tabs/src/ln-tabs.js +0 -188
  477. package/js/ln-time/ln-time.js +0 -1
  478. package/js/ln-toast/ln-toast.js +0 -1
  479. package/js/ln-toggle/ln-toggle.js +0 -1
  480. package/js/ln-tooltip/ln-tooltip.js +0 -1
  481. package/js/ln-tooltip/ln-tooltip.scss +0 -9
  482. package/js/ln-translations/ln-translations.js +0 -1
  483. package/js/ln-upload/README.md +0 -255
  484. package/js/ln-upload/ln-upload.js +0 -1
  485. package/js/ln-upload/ln-upload.scss +0 -20
  486. package/js/ln-upload/src/ln-upload.js +0 -423
  487. package/js/ln-validate/ln-validate.js +0 -1
  488. package/scss/components/_button.scss +0 -20
  489. package/scss/components/_confirm.scss +0 -5
  490. package/scss/components/_form.scss +0 -107
  491. package/scss/components/_status-badge.scss +0 -4
  492. package/scss/components/_toast.scss +0 -68
  493. package/scss/components/_upload.scss +0 -51
  494. package/scss/config/_theme.scss +0 -216
  495. package/scss/config/mixins/_btn.scss +0 -179
  496. package/scss/config/mixins/_confirm.scss +0 -31
  497. package/scss/config/mixins/_dropdown.scss +0 -141
  498. package/scss/config/mixins/_popover.scss +0 -64
  499. package/scss/ln-ashlar-dev.scss +0 -39
  500. /package/{js → components}/ln-core/positioning.js +0 -0
  501. /package/{js → components}/ln-core/reactive.js +0 -0
  502. /package/{js → components}/ln-filter/ln-filter.scss +0 -0
  503. /package/{js → components}/ln-icon/ln-icon.js +0 -0
  504. /package/{js → components}/ln-icon/src/ln-icon.js +0 -0
  505. /package/{js → components}/ln-search/ln-search.scss +0 -0
  506. /package/{js → components}/ln-toast/template.html +0 -0
  507. /package/{scss → theme}/components/_accordion.scss +0 -0
  508. /package/{scss → theme}/components/_ajax.scss +0 -0
  509. /package/{scss → theme}/components/_alert.scss +0 -0
  510. /package/{scss → theme}/components/_avatar.scss +0 -0
  511. /package/{scss → theme}/components/_breadcrumbs.scss +0 -0
  512. /package/{scss → theme}/components/_card.scss +0 -0
  513. /package/{scss → theme}/components/_chip.scss +0 -0
  514. /package/{scss → theme}/components/_circular-progress.scss +0 -0
  515. /package/{scss → theme}/components/_editor.scss +0 -0
  516. /package/{scss → theme}/components/_empty-state.scss +0 -0
  517. /package/{scss → theme}/components/_filter.scss +0 -0
  518. /package/{scss → theme}/components/_link.scss +0 -0
  519. /package/{scss → theme}/components/_loader.scss +0 -0
  520. /package/{scss → theme}/components/_modal.scss +0 -0
  521. /package/{scss → theme}/components/_nav.scss +0 -0
  522. /package/{scss → theme}/components/_page-header.scss +0 -0
  523. /package/{scss → theme}/components/_popover.scss +0 -0
  524. /package/{scss → theme}/components/_progress.scss +0 -0
  525. /package/{scss → theme}/components/_prose.scss +0 -0
  526. /package/{scss → theme}/components/_scrollbar.scss +0 -0
  527. /package/{scss → theme}/components/_sections.scss +0 -0
  528. /package/{scss → theme}/components/_sidebar.scss +0 -0
  529. /package/{scss → theme}/components/_stat-card.scss +0 -0
  530. /package/{scss → theme}/components/_stepper.scss +0 -0
  531. /package/{scss → theme}/components/_timeline.scss +0 -0
  532. /package/{scss → theme}/components/_tooltip.scss +0 -0
  533. /package/{scss → theme}/components/_translations.scss +0 -0
  534. /package/{scss → theme}/config/_icons.scss +0 -0
  535. /package/{scss → theme}/config/_mixins.scss +0 -0
  536. /package/{scss → theme}/config/mixins/_ajax.scss +0 -0
  537. /package/{scss → theme}/config/mixins/_avatar.scss +0 -0
  538. /package/{scss → theme}/config/mixins/_breadcrumbs.scss +0 -0
  539. /package/{scss → theme}/config/mixins/_breakpoints.scss +0 -0
  540. /package/{scss → theme}/config/mixins/_chip.scss +0 -0
  541. /package/{scss → theme}/config/mixins/_circular-progress.scss +0 -0
  542. /package/{scss → theme}/config/mixins/_display.scss +0 -0
  543. /package/{scss → theme}/config/mixins/_empty-state.scss +0 -0
  544. /package/{scss → theme}/config/mixins/_focus.scss +0 -0
  545. /package/{scss → theme}/config/mixins/_interaction.scss +0 -0
  546. /package/{scss → theme}/config/mixins/_kbd.scss +0 -0
  547. /package/{scss → theme}/config/mixins/_link.scss +0 -0
  548. /package/{scss → theme}/config/mixins/_page-header.scss +0 -0
  549. /package/{scss → theme}/config/mixins/_position.scss +0 -0
  550. /package/{scss → theme}/config/mixins/_progress.scss +0 -0
  551. /package/{scss → theme}/config/mixins/_prose.scss +0 -0
  552. /package/{scss → theme}/config/mixins/_shadows.scss +0 -0
  553. /package/{scss → theme}/config/mixins/_sizing.scss +0 -0
  554. /package/{scss → theme}/config/mixins/_spacing.scss +0 -0
  555. /package/{scss → theme}/config/mixins/_stat-card.scss +0 -0
  556. /package/{scss → theme}/config/mixins/_stepper.scss +0 -0
  557. /package/{scss → theme}/config/mixins/_timeline.scss +0 -0
  558. /package/{scss → theme}/config/mixins/_transitions.scss +0 -0
  559. /package/{scss → theme}/config/mixins/_translations.scss +0 -0
  560. /package/{scss → theme}/tabler-icons.txt +0 -0
@@ -9,7 +9,7 @@
9
9
  color: var(--color-accent);
10
10
  // Spinner is drawn with em-based box-shadow; font-size is the intrinsic
11
11
  // size knob. Callers override per-use (e.g. font-size: 32px) — see
12
- // docs/css/loader.md. Page-level margin is a binding concern, not a
12
+ // docs-mcp/css/loader.md. Page-level margin is a binding concern, not a
13
13
  // mixin concern, and lives on the consumer selector.
14
14
  font-size: 90px;
15
15
  text-indent: -9999em;
@@ -1,149 +1,145 @@
1
- @use 'display' as *;
2
- @use 'spacing' as *;
3
- @use 'position' as *;
4
- @use 'motion' as *;
5
- @use 'card' as *;
6
- @use 'typography' as *;
7
-
8
- // Modal size mixins
9
- // Usage: #my-modal > form { @include modal-lg; }
10
-
11
- @mixin modal-sm { max-width: 28rem; }
12
- @mixin modal-md { max-width: 32rem; }
13
- @mixin modal-lg { max-width: 42rem; }
14
- @mixin modal-xl { max-width: 48rem; }
15
-
16
- // ─── Modal layout ──────────────────────────────────────
17
-
18
- // Overlay backdrop — covers viewport, darkened + blurred.
19
- // Default: hidden (display:none). JS sets [data-ln-modal="open"]
20
- // to show — that state rule lives in the co-located JS SCSS.
21
- @mixin modal-overlay {
22
- display: none;
23
- @include fixed;
24
- @include inset-0;
25
- z-index: var(--z-modal);
26
- @include items-center;
27
- @include justify-center;
28
-
29
- &::backdrop {
30
- background-color: var(--color-scrim);
31
- backdrop-filter: blur(4px);
32
- -webkit-backdrop-filter: blur(4px);
33
- opacity: 1;
34
-
35
- @include motion-safe {
36
- transition: opacity var(--transition);
37
- transition-behavior: allow-discrete;
38
- }
39
-
40
- @starting-style {
41
- opacity: 0;
42
- }
43
- }
44
- }
45
-
46
- // ─── Modal header ──────────────────────────────────────
47
- // Rich modal header recipe: optional tinted icon square + title/subtitle
48
- // hgroup + close-button reset. Applied by modal-panel to its > header.
49
- @mixin modal-header {
50
- // Modal-specific: white bg overrides section-card's gray panel-header.
51
- // Section-cards and cards are unaffected (this is modal-panel scope only).
52
- --color-bg: var(--bg-base);
53
- gap: var(--size-sm-up);
54
-
55
- :is(h1, h2, h3, h4, h5, h6) {
56
- @include typography(heading-sm);
57
- font-weight: var(--font-semibold);
58
- }
59
-
60
- button[data-ln-modal-close] {
61
- --btn-bg: transparent;
62
- --btn-border: transparent;
63
- }
64
-
65
- // Optional icon square — tinted rounded square with primary-colored icon.
66
- // Usage: <span class="icon"><svg class="ln-icon" aria-hidden="true">…</svg></span>
67
- .icon {
68
- flex-shrink: 0;
69
- display: inline-flex;
70
- align-items: center;
71
- justify-content: center;
72
- width: 2rem;
73
- height: 2rem;
74
- border-radius: var(--radius);
75
- background: var(--color-accent-tint);
76
-
77
- .ln-icon {
78
- color: var(--color-accent);
79
- }
80
- }
81
-
82
- // Optional title+subtitle group — <hgroup><h3>…</h3><p>…</p></hgroup>.
83
- hgroup {
84
- display: flex;
85
- flex-direction: column;
86
- gap: var(--size-xs);
87
- flex: 1;
88
- min-width: 0;
89
- margin: 0;
90
-
91
- p {
92
- margin: 0;
93
- @include typography(caption);
94
- color: var(--fg-muted);
95
- }
96
- }
97
- }
98
-
99
- // Content panel — the <form> inside .ln-modal.
100
- // Structurally IS a section-card: reuse its chrome and its nested
101
- // > header / > main / > footer recipes. Add only the modal-specific
102
- // behaviour on top: fixed size envelope, scrollable body, sticky
103
- // footer, slide-in animation, deeper shadow.
104
- @mixin modal-panel {
105
- @include section-card;
106
- margin-bottom: 0;
107
- // Explicit role-scale read — modals use max elevation (deeper than
108
- // the --shadow-floating default used by floating panels).
109
- box-shadow: var(--shadow-xl);
110
- display: grid;
111
- grid-template-rows: auto 1fr auto;
112
- max-width: 600px;
113
- width: 90%;
114
- max-height: 90vh;
115
- @include motion-safe {
116
- animation: ln-modal-slideIn var(--transition-slow);
117
- }
118
-
119
- > main {
120
- min-height: 0;
121
- overflow-y: auto;
122
- overflow-x: hidden;
123
- }
124
-
125
- > footer {
126
- position: sticky;
127
- bottom: 0;
128
-
129
- // Destructive footer split: add class="delete-action" to the first
130
- // button to push it left. The footer gap still applies between all buttons.
131
- // Color: --color-primary cascades through @mixin btn (same pattern as
132
- // .delete-action documented in _global.scss).
133
- .delete-action {
134
- margin-inline-end: auto;
135
- --btn-bg: hsl(var(--color-error) / 0.08);
136
- --btn-fg: hsl(var(--color-error));
137
- --btn-border: hsl(var(--color-error) / 0.4);
138
- --btn-bg-hover: hsl(var(--color-error) / 0.16);
139
- --btn-fg-hover: hsl(var(--color-error));
140
- --btn-border-hover: hsl(var(--color-error));
141
- backdrop-filter: blur(4px);
142
- -webkit-backdrop-filter: blur(4px);
143
- }
144
- }
145
-
146
- > header {
147
- @include modal-header;
148
- }
149
- }
1
+ @use 'display' as *;
2
+ @use 'spacing' as *;
3
+ @use 'position' as *;
4
+ @use 'motion' as *;
5
+ @use 'card' as *;
6
+ @use 'typography' as *;
7
+
8
+ // Modal size mixins
9
+ // Usage: #my-modal > form { @include modal-lg; }
10
+
11
+ @mixin modal-sm { max-width: 28rem; }
12
+ @mixin modal-md { max-width: 32rem; }
13
+ @mixin modal-lg { max-width: 42rem; }
14
+ @mixin modal-xl { max-width: 48rem; }
15
+
16
+ // ─── Modal layout ──────────────────────────────────────
17
+
18
+ // Overlay backdrop — covers viewport, darkened + blurred.
19
+ // Default: hidden (display:none). JS sets [data-ln-modal="open"]
20
+ // to show — that state rule lives in the co-located JS SCSS.
21
+ @mixin modal-overlay {
22
+ display: none;
23
+ @include fixed;
24
+ @include inset-0;
25
+ z-index: var(--z-modal);
26
+ @include items-center;
27
+ @include justify-center;
28
+
29
+ &::backdrop {
30
+ background-color: var(--color-scrim);
31
+ -webkit-backdrop-filter: blur(4px);
32
+ backdrop-filter: blur(4px);
33
+ opacity: 1;
34
+
35
+ @include motion-safe {
36
+ transition: opacity var(--transition);
37
+ transition-behavior: allow-discrete;
38
+ }
39
+
40
+ @starting-style {
41
+ opacity: 0;
42
+ }
43
+ }
44
+ }
45
+
46
+ // ─── Modal header ──────────────────────────────────────
47
+ // Rich modal header recipe: optional tinted icon square + title/subtitle
48
+ // hgroup + close-button reset. Applied by modal-panel to its > header.
49
+ @mixin modal-header {
50
+ // Modal-specific: white bg overrides section-card's gray panel-header.
51
+ // Section-cards and cards are unaffected (this is modal-panel scope only).
52
+ --color-bg: var(--bg-base);
53
+ gap: var(--size-sm-up);
54
+
55
+ button[data-ln-modal-close] {
56
+ --btn-bg: transparent;
57
+ --btn-border: transparent;
58
+ }
59
+
60
+ // Optional icon square — tinted rounded square with primary-colored icon.
61
+ // Usage: <span class="icon"><svg class="ln-icon" aria-hidden="true">…</svg></span>
62
+ .icon {
63
+ flex-shrink: 0;
64
+ display: inline-flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ width: 2rem;
68
+ height: 2rem;
69
+ border-radius: var(--radius);
70
+ background: var(--color-accent-tint);
71
+
72
+ .ln-icon {
73
+ color: var(--color-accent);
74
+ }
75
+ }
76
+
77
+ // Optional title+subtitle group — <hgroup><h3>…</h3><p>…</p></hgroup>.
78
+ hgroup {
79
+ display: flex;
80
+ flex-direction: column;
81
+ gap: var(--size-xs);
82
+ flex: 1;
83
+ min-width: 0;
84
+ margin: 0;
85
+
86
+ p {
87
+ margin: 0;
88
+ @include typography(caption);
89
+ color: var(--fg-muted);
90
+ }
91
+ }
92
+ }
93
+
94
+ // Content panel — the <form> inside .ln-modal.
95
+ // Structurally IS a section-card: reuse its chrome and its nested
96
+ // > header / > main / > footer recipes. Add only the modal-specific
97
+ // behaviour on top: fixed size envelope, scrollable body, sticky
98
+ // footer, slide-in animation, deeper shadow.
99
+ @mixin modal-panel {
100
+ @include section-card;
101
+ margin-bottom: 0;
102
+ // Explicit role-scale read — modals use max elevation (deeper than
103
+ // the --shadow-floating default used by floating panels).
104
+ box-shadow: var(--shadow-xl);
105
+ display: flex;
106
+ flex-direction: column;
107
+ max-width: 600px;
108
+ width: 90%;
109
+ max-height: 90vh;
110
+ @include motion-safe {
111
+ animation: ln-modal-slideIn var(--transition-slow);
112
+ }
113
+
114
+ > header {
115
+ @include modal-header;
116
+ flex-shrink: 0;
117
+ }
118
+
119
+ > main {
120
+ min-height: 0;
121
+ overflow-y: auto;
122
+ overflow-x: hidden;
123
+ flex: 1 1 auto;
124
+ }
125
+
126
+ > footer {
127
+ flex-shrink: 0;
128
+
129
+ // Destructive footer split: add class="delete-action" to the first
130
+ // button to push it left. The footer gap still applies between all buttons.
131
+ // Color: --color-primary cascades through @mixin btn (same pattern as
132
+ // .delete-action documented in _global.scss).
133
+ .delete-action {
134
+ margin-inline-end: auto;
135
+ --btn-bg: hsl(var(--color-error) / 0.08);
136
+ --btn-fg: hsl(var(--color-error));
137
+ --btn-border: hsl(var(--color-error) / 0.4);
138
+ --btn-bg-hover: hsl(var(--color-error) / 0.16);
139
+ --btn-fg-hover: hsl(var(--color-error));
140
+ --btn-border-hover: hsl(var(--color-error));
141
+ -webkit-backdrop-filter: blur(4px);
142
+ backdrop-filter: blur(4px);
143
+ }
144
+ }
145
+ }
@@ -17,3 +17,16 @@
17
17
  @content;
18
18
  }
19
19
  }
20
+
21
+ // Entrance transitions (dropdowns, popovers, tooltips, dialogs)
22
+ @mixin enter-scale-fade($duration: var(--transition-fast)) {
23
+ @include motion-safe {
24
+ animation: ln-scale-in $duration cubic-bezier(0.16, 1, 0.3, 1) both;
25
+ }
26
+ }
27
+
28
+ @mixin enter-slide-fade($duration: var(--transition-base)) {
29
+ @include motion-safe {
30
+ animation: ln-slide-in $duration cubic-bezier(0.16, 1, 0.3, 1) both;
31
+ }
32
+ }
@@ -33,7 +33,7 @@
33
33
  }
34
34
 
35
35
  a {
36
- --gap: var(--size-sm-up);
36
+ --gap: var(--size-sm);
37
37
  --color-fg: var(--fg-muted);
38
38
  @include flex;
39
39
  @include items-center;
@@ -61,7 +61,7 @@
61
61
  }
62
62
 
63
63
  .nav-section {
64
- --color-fg: var(--fg-subtle);
64
+ --color-fg: var(--fg-muted);
65
65
  --padding-y: var(--size-sm);
66
66
  padding-block: var(--padding-y);
67
67
  @include text-xs;
@@ -128,7 +128,7 @@
128
128
  border-color 150ms ease;
129
129
 
130
130
  &:hover {
131
- background-color: color-mix(in srgb, var(--color-accent) 7%, transparent);
131
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-hover), transparent);
132
132
  }
133
133
 
134
134
  &.active {
@@ -158,12 +158,12 @@
158
158
 
159
159
  &:hover {
160
160
  box-shadow: inset 2px 0 0 color-mix(in srgb, var(--color-accent) 30%, transparent);
161
- background-color: color-mix(in srgb, var(--color-accent) 4%, transparent);
161
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-hover), transparent);
162
162
  }
163
163
 
164
164
  &.active {
165
165
  box-shadow: inset 3px 0 0 var(--color-accent);
166
- background-color: color-mix(in srgb, var(--color-accent) 7%, transparent);
166
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-selected), transparent);
167
167
  }
168
168
  }
169
169
  }
@@ -214,11 +214,11 @@
214
214
  transition: background-color 150ms ease, color 150ms ease;
215
215
 
216
216
  &:hover {
217
- background-color: color-mix(in srgb, var(--color-accent) 4%, transparent);
217
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-hover), transparent);
218
218
  }
219
219
 
220
220
  &.active {
221
- background-color: color-mix(in srgb, var(--color-accent) 7%, transparent);
221
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-selected), transparent);
222
222
  }
223
223
  }
224
224
  }
@@ -0,0 +1,66 @@
1
+ @use 'layout' as *;
2
+ @use 'form' as *;
3
+ @use 'display' as *;
4
+ @use 'borders' as *;
5
+ @use 'focus' as *;
6
+ @use 'interaction' as *;
7
+
8
+ // ─── Picklist ──────────────────────────────────────────────────
9
+ // Two lists side by side: available on the left, selected on the
10
+ // right. Checking an item moves it across (ln-picklist), so both
11
+ // lists look the same — a vertical stack of checkbox pills.
12
+ //
13
+ // Structure:
14
+ // [data-ln-picklist]
15
+ // > * a pane (author's own markup)
16
+ // > ul[data-ln-picklist-list] the items
17
+ // > li > label > input one checkbox pill
18
+ //
19
+ // Deliberately `check-list-outline`, NOT `check-list`: @mixin pill
20
+ // hides the input with `display: none`, which drops the checkbox out
21
+ // of the tab order — and here the checkbox IS the control, not a
22
+ // decorative marker. `pill-outline` keeps it visible and focusable.
23
+ //
24
+ // Usage:
25
+ // [data-ln-picklist] { @include picklist; }
26
+
27
+ @mixin picklist {
28
+ @include grid-2;
29
+ --gap: var(--size-md);
30
+
31
+ [data-ln-picklist-list] {
32
+ @include check-list-outline;
33
+ @include flex-col;
34
+ @include border;
35
+
36
+ // pill-outline draws a border per item; this keeps them apart.
37
+ --row-gap: var(--size-2xs);
38
+ gap: var(--row-gap);
39
+
40
+ border-radius: var(--radius);
41
+ --padding-y: var(--size-xs);
42
+ --padding-x: var(--size-xs);
43
+ padding: var(--padding-y) var(--padding-x);
44
+
45
+ // A hundred items must not stretch the page.
46
+ --max-height: 20rem;
47
+ max-height: var(--max-height);
48
+ overflow-y: auto;
49
+ }
50
+
51
+ // The input stays visible (pill-outline reverts pill's display:none),
52
+ // so the ring belongs on the pill that surrounds it.
53
+ [data-ln-picklist-list] li label:has(> input:focus-visible) {
54
+ @include focus-ring;
55
+ }
56
+
57
+ // The component's own state, expressed as the attribute value it writes.
58
+ &[data-ln-picklist="disabled"] [data-ln-picklist-list] {
59
+ --color-fg: var(--fg-muted);
60
+ color: var(--color-fg);
61
+
62
+ li label {
63
+ @include cursor-not-allowed;
64
+ }
65
+ }
66
+ }
@@ -0,0 +1,96 @@
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
+ @use 'dropdown' as *;
8
+
9
+ @mixin popover {
10
+ @include floating-panel;
11
+ display: none;
12
+ position: fixed;
13
+ inset: auto;
14
+ margin: 0;
15
+ min-width: 14rem;
16
+ max-width: 24rem;
17
+ padding: var(--padding-y);
18
+
19
+ &[data-ln-popover="open"] {
20
+ display: block;
21
+
22
+ @include motion-safe {
23
+ animation: ln-popover-fade var(--transition-fast);
24
+ }
25
+ }
26
+
27
+ &:focus {
28
+ outline: none;
29
+ }
30
+
31
+ // Filter popover content: optional search + checkbox/radio option list
32
+ @include panel-search;
33
+
34
+ hr {
35
+ border: none;
36
+ border-top: var(--border-width) solid var(--color-border);
37
+ margin: var(--size-xs) 0;
38
+ }
39
+
40
+ > ul {
41
+ list-style: none;
42
+ padding: 0;
43
+ margin: 0;
44
+ max-height: var(--filter-options-max-height, 15rem);
45
+ overflow-y: auto;
46
+ scrollbar-width: thin;
47
+ scrollbar-color: var(--border-subtle) transparent;
48
+
49
+ &::-webkit-scrollbar {
50
+ width: 4px;
51
+ }
52
+ &::-webkit-scrollbar-track {
53
+ background: transparent;
54
+ }
55
+ &::-webkit-scrollbar-thumb {
56
+ background-color: var(--border-subtle);
57
+ border-radius: var(--radius-sm);
58
+ }
59
+
60
+ li {
61
+ margin: 0;
62
+ padding: 0;
63
+ list-style: none;
64
+ }
65
+
66
+ li + li {
67
+ margin-top: var(--size-2xs);
68
+ }
69
+
70
+ // When containing interactive actions/buttons (menus, pickers)
71
+ &:has(> li > :is(a, button, input[type="submit"], input[type="reset"], input[type="button"])) {
72
+ @include menu-items;
73
+ }
74
+
75
+ // When containing checkbox/radio filter options
76
+ &:has(> li > label) {
77
+ @include check-list-nav;
78
+
79
+ > li > label > input {
80
+ // Override pill's display:none — keep in focus order for keyboard nav
81
+ display: revert;
82
+ position: absolute;
83
+ width: 1px;
84
+ height: 1px;
85
+ overflow: hidden;
86
+ clip-path: inset(50%);
87
+ white-space: nowrap;
88
+ }
89
+
90
+ // Focus ring on label when the hidden input receives keyboard focus
91
+ > li > label:has(> input:focus-visible) {
92
+ @include focus-ring;
93
+ }
94
+ }
95
+ }
96
+ }
@@ -27,7 +27,7 @@
27
27
 
28
28
  @mixin sidebar {
29
29
  // Sidebar-wide horizontal rhythm. All direct children inherit this.
30
- --padding-x: var(--size-md);
30
+ --padding-x: var(--size-sm);
31
31
  @include flex-col;
32
32
  background: var(--color-bg);
33
33
  @include border-r;
@@ -38,13 +38,13 @@
38
38
  }
39
39
 
40
40
  > header {
41
- --gap: var(--size-sm-up);
41
+ --gap: var(--size-sm);
42
42
  @include relative;
43
43
  @include flex;
44
44
  @include items-center;
45
45
  @include flex-wrap;
46
46
  gap: var(--gap);
47
- --padding-y: var(--size-sm-up);
47
+ --padding-y: var(--size-sm);
48
48
  padding-block: var(--padding-y);
49
49
  @include border-b;
50
50
  @include shadow-b;
@@ -75,7 +75,10 @@
75
75
 
76
76
  // Search field drops to a full-width second row below the
77
77
  // brand triad (enabled by `flex-wrap` above).
78
- > .sidebar-search {
78
+ // :has() carries the weight — plain `> search` would tie with the
79
+ // widget base and fall to emission order. It also keeps a <search>
80
+ // region (input not a direct child) out of this rule.
81
+ > search:has(> input[type="search"]) {
79
82
  @include w-full;
80
83
  --margin-block: var(--size-xs);
81
84
  @include mt(var(--margin-block));
@@ -1,42 +1,43 @@
1
- @use 'display' as *;
2
- @use 'table' as *;
3
-
4
- // ─── Sort control — 3-trigger cycle (none → asc → desc → none) ─────────
5
- // Only one <button data-ln-sort-dir> is visible at a time; the circular
6
- // order lives HERE in CSS, not in JS (js/ln-sort/README.md "No cycle
7
- // logic in JS"). [data-ln-sort-state] on the root decides which trigger
8
- // shows — the visible button is always the NEXT action, but the icon it
9
- // carries reports the CURRENT state, not that action (icon-per-button
10
- // mapping: js/ln-sort/README.md "Icon convention").
11
-
12
- @mixin sort {
13
- @include inline-flex;
14
- list-style: none !important;
15
- list-style-type: none !important;
16
- margin: 0;
17
- padding: 0;
18
- vertical-align: middle;
19
-
20
- li {
21
- list-style: none !important;
22
- list-style-type: none !important;
23
- }
24
-
25
- button {
26
- @include table-header-btn-base;
27
- display: none;
28
- }
29
-
30
- &[data-ln-sort-state="none"] [data-ln-sort-dir="asc"],
31
- &[data-ln-sort-state="asc"] [data-ln-sort-dir="desc"],
32
- &[data-ln-sort-state="desc"] [data-ln-sort-dir="none"] {
33
- display: inline-flex;
34
- }
35
- }
36
-
37
- @mixin sort-active {
38
- [data-ln-sort-dir] {
39
- opacity: 1;
40
- color: var(--color-accent);
41
- }
42
- }
1
+ @use 'display' as *;
2
+ @use 'table' as *;
3
+
4
+ // ─── Sort control — 3-trigger cycle (none → asc → desc → none) ─────────
5
+ // Only one <button data-ln-sort-dir> is visible at a time; the circular
6
+ // order lives HERE in CSS, not in JS (js/ln-sort/README.md "No cycle
7
+ // logic in JS"). [data-ln-sort-state] on the root decides which trigger
8
+ // shows — the visible button is always the NEXT action, but the icon it
9
+ // carries reports the CURRENT state, not that action (icon-per-button
10
+ // mapping: js/ln-sort/README.md "Icon convention").
11
+
12
+ @mixin sort {
13
+ @include inline-flex;
14
+ list-style: none !important;
15
+ list-style-type: none !important;
16
+ margin: 0;
17
+ padding: 0;
18
+ vertical-align: middle;
19
+
20
+ li {
21
+ list-style: none !important;
22
+ list-style-type: none !important;
23
+ }
24
+
25
+ button {
26
+ @include table-header-btn-base;
27
+ display: none;
28
+ }
29
+
30
+ &:not([data-ln-sort-state]) [data-ln-sort-dir="asc"],
31
+ &[data-ln-sort-state="none"] [data-ln-sort-dir="asc"],
32
+ &[data-ln-sort-state="asc"] [data-ln-sort-dir="desc"],
33
+ &[data-ln-sort-state="desc"] [data-ln-sort-dir="none"] {
34
+ display: inline-flex;
35
+ }
36
+ }
37
+
38
+ @mixin sort-active {
39
+ [data-ln-sort-dir] {
40
+ opacity: 1;
41
+ color: var(--color-accent);
42
+ }
43
+ }