@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
@@ -0,0 +1,169 @@
1
+ @use 'display' as *;
2
+ @use 'spacing' as *;
3
+ @use 'sizing' as *;
4
+ @use 'colors' as *;
5
+ @use 'borders' as *;
6
+ @use 'typography' as *;
7
+ @use 'position' as *;
8
+ @use 'interaction' as *;
9
+ @use 'motion' as *;
10
+ @use 'card' as *;
11
+
12
+ // Dropdown menu — floating panel with menu items.
13
+ //
14
+ // Usage:
15
+ // [data-ln-dropdown] { @include dropdown; }
16
+ // [data-ln-dropdown-menu] { @include dropdown-menu; }
17
+ //
18
+ // Open/close state (display:none ↔ display:block + .open) is JS-driven
19
+ // and lives in the co-located JS SCSS, not here.
20
+
21
+ @mixin dropdown {
22
+ @include relative;
23
+ }
24
+
25
+ // ─── Menu items — shared recipe ────────────────────────
26
+ // Compact interactive list recipe for floating overlays (dropdown, popover, pickers).
27
+
28
+ @mixin menu-items {
29
+ list-style: none;
30
+ margin: 0;
31
+ padding: 0;
32
+
33
+ :is(ul, ol) {
34
+ list-style: none;
35
+ margin: 0;
36
+ padding: 0;
37
+ }
38
+
39
+ li {
40
+ margin: 0;
41
+ padding: 0;
42
+ list-style: none;
43
+ }
44
+
45
+ li + li {
46
+ margin-top: var(--size-2xs);
47
+ }
48
+
49
+ form {
50
+ margin: 0;
51
+ padding: 0;
52
+ display: contents;
53
+ }
54
+
55
+ :is(li, form) > :is(a, button, input[type="submit"], input[type="reset"], input[type="button"]) {
56
+ width: 100%;
57
+ box-sizing: border-box;
58
+ display: flex;
59
+ align-items: center;
60
+ justify-content: flex-start;
61
+ gap: var(--gap);
62
+ padding: var(--padding-y) var(--padding-x);
63
+ border-radius: var(--radius);
64
+ background: transparent;
65
+ border: none;
66
+ outline: none;
67
+ box-shadow: none;
68
+ text-align: left;
69
+ text-decoration: none;
70
+ cursor: pointer;
71
+ font-family: inherit;
72
+ @include typography(body-sm);
73
+ color: var(--color-fg);
74
+ transition: background-color 120ms ease, color 120ms ease;
75
+
76
+ &:hover:not(:disabled) {
77
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-hover), transparent);
78
+ color: var(--color-fg);
79
+ }
80
+
81
+ &:active:not(:disabled) {
82
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-active), transparent);
83
+ color: var(--color-fg);
84
+ }
85
+
86
+ // Single-select active state (theme/language pickers)
87
+ &[aria-current="true"],
88
+ &.active {
89
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-selected), transparent);
90
+ color: var(--color-accent);
91
+ font-weight: var(--font-medium);
92
+ }
93
+ }
94
+
95
+ hr {
96
+ border: none;
97
+ border-top: var(--border-width) solid var(--color-border);
98
+ margin: var(--size-xs) 0;
99
+ }
100
+ }
101
+
102
+ // ─── Panel search — search field inside a floating panel ───────
103
+ // Shared by @mixin dropdown-menu and @mixin popover (which already @use's
104
+ // this file for menu-items). The <search> icon-group base makes the widget
105
+ // inline-flex and shrink-to-fit; in a block panel that leaves a baseline
106
+ // descender gap under the field and lets it under-fill the panel.
107
+ //
108
+ // :has(> input[type="search"]) is structural, not decorative — <search> is
109
+ // a REGION per spec, so a <search> wrapping a whole form must not match. It
110
+ // also carries the weight this rule needs: under a [data-*] panel the
111
+ // selector is (0,2,2) and outranks `search:has(> input[type="search"])`
112
+ // (0,1,2), whose `width: min(100%, 20rem)` would otherwise cap the field.
113
+ //
114
+ // box-sizing is not restated — base/_reset.scss sets border-box on *.
115
+
116
+ @mixin panel-search {
117
+ > search:has(> input[type="search"]) {
118
+ @include flex; // block-level — kills the inline-flex baseline gap
119
+ @include w-full;
120
+ margin-bottom: var(--size-xs);
121
+ }
122
+
123
+ // Bare input shape (no <search> wrapper) — form-input already gives w-full.
124
+ > input[type="search"] {
125
+ margin-bottom: var(--size-xs);
126
+ }
127
+
128
+ // Divider when the search precedes the option list. The margin-top here
129
+ // collapses with the margin-bottom above (both block-level, same BFC),
130
+ // so the border sits in a symmetric size-xs gap — not a doubled one.
131
+ > :is(search:has(> input[type="search"]), input[type="search"]) + :is(ul, nav) {
132
+ border-top: var(--border-width) solid var(--color-border);
133
+ padding-top: var(--size-xs);
134
+ margin-top: var(--size-xs);
135
+ }
136
+ }
137
+
138
+ // ─── Dropdown menu — floating panel + menu items ───────
139
+ @mixin dropdown-menu {
140
+ @include floating-panel;
141
+ @include fixed;
142
+ inset: auto;
143
+ margin: 0;
144
+ padding: var(--padding-y);
145
+ min-width: var(--dropdown-min-width, 14rem);
146
+ @include enter-scale-fade;
147
+
148
+ @include panel-search;
149
+
150
+ ul[data-ln-search] {
151
+ max-height: 15rem;
152
+ overflow-y: auto;
153
+ scrollbar-width: thin;
154
+ scrollbar-color: var(--border-subtle) transparent;
155
+
156
+ &::-webkit-scrollbar {
157
+ width: 4px;
158
+ }
159
+ &::-webkit-scrollbar-track {
160
+ background: transparent;
161
+ }
162
+ &::-webkit-scrollbar-thumb {
163
+ background-color: var(--border-subtle);
164
+ border-radius: var(--radius-sm);
165
+ }
166
+ }
167
+
168
+ @include menu-items;
169
+ }
@@ -96,13 +96,6 @@
96
96
  outline: none;
97
97
  cursor: text;
98
98
 
99
- // Counter the global reset (`ul li, ol li { list-style: none }`).
100
- // The reset kills markers on <li> directly; prose only sets
101
- // list-style on the <ul>/<ol> container. Restore inheritance
102
- // so the container's disc/decimal flows through to each item.
103
- ul li { list-style: disc; }
104
- ol li { list-style: decimal; }
105
-
106
99
  // Empty placeholder via CSS
107
100
  &:empty::before {
108
101
  content: attr(data-placeholder);
@@ -1,47 +1,47 @@
1
- @use 'spacing' as *;
2
- @use 'display' as *;
3
- @use 'interaction' as *;
4
- @use 'transitions' as *;
5
- @use 'form' as *;
6
-
7
- // ─── Filter dropdown — content chrome only ─────────────────────────
8
- // The floating shell (chrome, fixed positioning, min-width, show/hide)
9
- // comes from `@mixin popover` on the popover-driven path, OR from
10
- // `@mixin floating-panel` + scroll box on the ln-data-table dynamic
11
- // path (see components/_filter.scss). This mixin styles ONLY the inner
12
- // content: scrollable options box, search input, and the options list
13
- // (pills via check-list).
14
- //
15
- // NOTE: there is intentionally NO clear-button block. The redundant
16
- // "Clear Filter" button was removed library-wide — the `data-ln-filter-reset`
17
- // "All" sentinel checkbox already performs the reset. Do not re-introduce a
18
- // `[data-ln-filter-clear]` selector here.
19
- //
20
- // Tunables (consumer-overridable via --var with sane defaults):
21
- // --filter-dropdown-max-height (default 20rem)
22
- // --filter-dropdown-overflow-y (default auto)
23
- // --filter-dropdown-item-pad-y (default var(--size-3xs))
24
- //
25
- // Usage:
26
- // .column-filter-dropdown { @include filter-dropdown; }
27
-
28
- @mixin filter-dropdown {
29
- max-height: var(--filter-dropdown-max-height, 20rem);
30
- overflow-y: var(--filter-dropdown-overflow-y, auto);
31
- text-transform: none; // reset inherited header uppercase
32
-
33
- [data-ln-filter-search] {
34
- @include form-input;
35
- font-size: var(--filter-dropdown-text, var(--text-xs));
36
- --padding-y: var(--size-2xs);
37
- --padding-x: var(--size-sm);
38
- width: 100%;
39
- margin-bottom: var(--size-xs);
40
- }
41
-
42
- [data-ln-filter-options] {
43
- @include check-list-nav;
44
-
45
- li { padding: var(--filter-dropdown-item-pad-y, var(--size-3xs)) 0; }
46
- }
47
- }
1
+ @use 'spacing' as *;
2
+ @use 'display' as *;
3
+ @use 'interaction' as *;
4
+ @use 'transitions' as *;
5
+ @use 'form' as *;
6
+
7
+ // ─── Filter dropdown — content chrome only ─────────────────────────
8
+ // The floating shell (chrome, fixed positioning, min-width, show/hide)
9
+ // comes from `@mixin popover` on the popover-driven path, OR from
10
+ // `@mixin floating-panel` + scroll box on the ln-data-table dynamic
11
+ // path (see components/_filter.scss). This mixin styles ONLY the inner
12
+ // content: scrollable options box, search input, and the options list
13
+ // (pills via check-list).
14
+ //
15
+ // NOTE: there is intentionally NO clear-button block. The redundant
16
+ // "Clear Filter" button was removed library-wide — the `data-ln-filter-reset`
17
+ // "All" sentinel checkbox already performs the reset. Do not re-introduce a
18
+ // `[data-ln-filter-clear]` selector here.
19
+ //
20
+ // Tunables (consumer-overridable via --var with sane defaults):
21
+ // --filter-dropdown-max-height (default 20rem)
22
+ // --filter-dropdown-overflow-y (default auto)
23
+ // --filter-dropdown-item-pad-y (default var(--size-3xs))
24
+ //
25
+ // Usage:
26
+ // .column-filter-dropdown { @include filter-dropdown; }
27
+
28
+ @mixin filter-dropdown {
29
+ max-height: var(--filter-dropdown-max-height, 20rem);
30
+ overflow-y: var(--filter-dropdown-overflow-y, auto);
31
+ text-transform: none; // reset inherited header uppercase
32
+
33
+ [data-ln-filter-search] {
34
+ @include form-input;
35
+ font-size: var(--filter-dropdown-text, var(--text-xs));
36
+ --padding-y: var(--size-2xs);
37
+ --padding-x: var(--size-sm);
38
+ width: 100%;
39
+ margin-bottom: var(--size-xs);
40
+ }
41
+
42
+ [data-ln-filter-options] {
43
+ @include check-list-nav;
44
+
45
+ li { padding: var(--filter-dropdown-item-pad-y, var(--size-3xs)) 0; }
46
+ }
47
+ }
@@ -34,7 +34,7 @@
34
34
 
35
35
  > small,
36
36
  > span:last-child {
37
- --color-fg: var(--fg-subtle);
37
+ --color-fg: var(--fg-muted);
38
38
  color: var(--color-fg);
39
39
  font-size: inherit;
40
40
  }
@@ -18,10 +18,10 @@
18
18
  @mixin form-label {
19
19
  @include block;
20
20
  @include typography(label-sm);
21
- @include font-semibold;
21
+ @include font-medium;
22
22
  color: var(--color-fg);
23
23
  // Structural label-to-input gap (not shell rhythm).
24
- --margin-block: var(--size-xs);
24
+ --margin-block: 0.375rem;
25
25
  margin-bottom: var(--margin-block);
26
26
 
27
27
  // Required indicator — red * after label text.
@@ -96,8 +96,10 @@
96
96
  font-size: var(--font-size);
97
97
  line-height: var(--line-height);
98
98
  color: var(--color-fg);
99
- --color-bg: var(--input-bg, var(--bg-recessed));
99
+ --color-bg: var(--bg-sunken);
100
100
  background: var(--color-bg);
101
+ // Control boundary, not a divider — 1.4.11 wants 3:1 here.
102
+ --color-border: var(--border-ui);
101
103
  @include border;
102
104
  border-radius: var(--radius);
103
105
  @include transition;
@@ -162,10 +164,12 @@
162
164
  // shell via :focus-within; children suppress their own focus ring.
163
165
  //
164
166
  // Applied via semantic selectors (no class on the wrapper):
165
- // - components/_form.scss → label:has(.ln-icon):has(text input)
167
+ // - components/_form.scss → :is(label, div, span, search):has(.ln-icon):has(text input)
166
168
  // - components/_date.scss → [data-ln-date-field]
167
169
 
168
- @mixin form-field-group {
170
+ // Split shell/parts so the binding can emit the wrapper's own chrome at base
171
+ // weight while the child resets and state chrome keep full weight.
172
+ @mixin form-field-group-shell {
169
173
  @include form-input; // visual shell: border, bg, radius, transition, outline
170
174
  @include inline-flex; // override form-input's block display
171
175
  @include items-center;
@@ -174,7 +178,9 @@
174
178
  width: auto; // cancel form-input's w-full
175
179
  padding: 0; // shell owns NO padding; children manage their own
176
180
  margin-bottom: 0; // defensive: wrapping <label> carries form-label margin
181
+ }
177
182
 
183
+ @mixin form-field-group-parts {
178
184
  &:focus-within {
179
185
  @include _form-focus-style;
180
186
 
@@ -255,13 +261,18 @@
255
261
  }
256
262
  }
257
263
 
264
+ @mixin form-field-group {
265
+ @include form-field-group-shell;
266
+ @include form-field-group-parts;
267
+ }
268
+
258
269
  // ─── Icon input group — search/icon field (thin wrapper) ──────────
259
270
  //
260
271
  // form-field-group + the search-clear control, which is the only piece
261
272
  // unique to this binding.
262
273
 
263
- @mixin form-input-icon-group {
264
- @include form-field-group;
274
+ @mixin form-input-icon-group-parts {
275
+ @include form-field-group-parts;
265
276
 
266
277
  // Visually hide the clear button while the field is empty (visibility:hidden
267
278
  // preserves layout space so the input width stays stable).
@@ -320,16 +331,22 @@
320
331
  }
321
332
  }
322
333
 
334
+ @mixin form-input-icon-group {
335
+ @include form-field-group-shell;
336
+ @include form-input-icon-group-parts;
337
+ }
338
+
323
339
  // ─── Search field — compact icon-group variant (delta-only) ───────
324
340
  //
325
341
  // Opt-in refinements layered on top of the icon-group chrome that the
326
- // global auto-bind (components/_form.scss: label:has(> .ln-icon):has(>
327
- // search/text input)) already supplies. PREREQUISITE: the consumer is an
328
- // icon + search-input <label> so the auto-bind provides the base shell;
329
- // on a plain label this emits only the tweaks below, no chrome.
342
+ // global auto-bind (components/_form.scss: :is(label, div, span, search):has(>
343
+ // .ln-icon):has(> search/text input)) already supplies. PREREQUISITE: the
344
+ // consumer is an icon + search-input <search> (or <label>) so the auto-bind
345
+ // provides the base shell; on a plain wrapper this emits only the tweaks
346
+ // below, no chrome.
330
347
  //
331
348
  // Usage (project/demo SCSS):
332
- // label.search { @include search; }
349
+ // search:has(> input[type="search"]) { @include search; }
333
350
 
334
351
  @mixin search {
335
352
  width: min(100%, 20rem); // intrinsic capped field width
@@ -360,7 +377,7 @@
360
377
  padding: 0;
361
378
  @include flex-shrink-0;
362
379
  // Non-standard 1.5px stroke — optical weight at small checkbox size.
363
- border: 1.5px solid var(--color-border);
380
+ border: 1.5px solid var(--border-ui);
364
381
  background: var(--color-bg);
365
382
  @include cursor-pointer;
366
383
  @include transition;
@@ -370,8 +387,11 @@
370
387
  background-color: var(--color-accent);
371
388
  border-color: var(--color-accent);
372
389
  // Inline SVG: native <input type="checkbox"> cannot contain child elements,
373
- // so a data URI is the only way to embed a checkmark here.
374
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 13l4 4L19 7'/%3E%3C/svg%3E");
390
+ // so a data URI is the only way to embed a checkmark here. The stroke is
391
+ // baked in — data URIs can't read custom properties — so the mark ships as
392
+ // two variants and themes point --check-mark at the one matching their
393
+ // --color-accent-fg pole. Same pattern as --select-arrow above.
394
+ background-image: var(--check-mark);
375
395
  background-size: 0.75rem;
376
396
  background-position: center;
377
397
  background-repeat: no-repeat;
@@ -775,7 +795,7 @@
775
795
 
776
796
  // Hover (unchecked) — subtle accent wash (nav hover).
777
797
  &:hover:not(:has(> input:checked)) {
778
- background-color: color-mix(in srgb, var(--color-accent) 7%, transparent);
798
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-hover), transparent);
779
799
  }
780
800
 
781
801
  // Selected — nav active vocabulary (replaces solid-accent + white).
@@ -814,16 +834,27 @@
814
834
  }
815
835
  }
816
836
 
837
+ // ─── Field feedback slot (Reserved space for errors, output & hints) ──
838
+
839
+ @mixin form-slot {
840
+ @include block;
841
+ min-height: 1.25rem; // Reserves space to prevent form layout shifts
842
+ font-size: var(--text-xs);
843
+ line-height: 1.25rem;
844
+ --margin-block: var(--size-2xs);
845
+ margin-top: var(--margin-block);
846
+ margin-bottom: 0;
847
+ }
848
+
817
849
  @mixin form-validate-errors {
850
+ @include form-slot;
818
851
  // Structural error-list margin (not shell rhythm).
819
852
  --margin-block: var(--size-xs);
820
853
  margin-top: var(--margin-block);
821
854
  @include typography(caption);
822
855
  color: hsl(var(--color-error));
823
- min-height: 1.25rem; // Reserves space to prevent form layout shifts when errors appear
824
856
  list-style: none;
825
857
  padding: 0;
826
- margin-bottom: 0;
827
858
 
828
859
  li {
829
860
  margin: 0;
@@ -1,61 +1,62 @@
1
- // Mixins index — @forward all in correct order
2
- // Primitives first, composites after (they depend on primitives)
3
-
4
- // Primitives
5
- @forward 'spacing';
6
- @forward 'breakpoints';
7
- @forward 'display';
8
- @forward 'sizing';
9
- @forward 'typography';
10
- @forward 'colors';
11
- @forward 'borders';
12
- @forward 'shadows';
13
- @forward 'transitions';
14
- @forward 'motion';
15
- @forward 'position';
16
- @forward 'interaction';
17
- @forward 'focus';
18
-
19
- // Composites (depend on primitives)
20
- @forward 'layout';
21
- @forward 'collapsible';
22
- @forward 'accordion';
23
- @forward 'card';
24
- @forward 'chip';
25
- @forward 'nav';
26
- @forward 'btn';
27
- @forward 'form';
28
- @forward 'filter';
29
- @forward 'modal';
30
- @forward 'breadcrumbs';
31
- @forward 'loader';
32
- @forward 'tabs';
33
- @forward 'table';
34
- @forward 'sort';
35
- @forward 'avatar';
36
- @forward 'footer';
37
- @forward 'sidebar';
38
- @forward 'app-shell';
39
- @forward 'status-badge';
40
- @forward 'alert';
41
- @forward 'empty-state';
42
- @forward 'page-header';
43
- @forward 'stepper';
44
- @forward 'timeline';
45
- @forward 'stat-card';
46
- @forward 'prose';
47
- @forward 'editor';
48
- @forward 'kbd';
49
- @forward 'tooltip';
50
- @forward 'popover';
51
- @forward 'progress';
52
- @forward 'link';
53
- @forward 'confirm';
54
- @forward 'circular-progress';
55
- @forward 'dropdown';
56
- @forward 'toast';
57
- @forward 'upload';
58
- @forward 'translations';
59
- @forward 'ln-table';
60
- @forward 'ajax';
61
- @forward 'diagnostics';
1
+ // Mixins index — @forward all in correct order
2
+ // Primitives first, composites after (they depend on primitives)
3
+
4
+ // Primitives
5
+ @forward 'spacing';
6
+ @forward 'breakpoints';
7
+ @forward 'display';
8
+ @forward 'sizing';
9
+ @forward 'typography';
10
+ @forward 'colors';
11
+ @forward 'borders';
12
+ @forward 'shadows';
13
+ @forward 'transitions';
14
+ @forward 'motion';
15
+ @forward 'position';
16
+ @forward 'interaction';
17
+ @forward 'focus';
18
+
19
+ // Composites (depend on primitives)
20
+ @forward 'layout';
21
+ @forward 'collapsible';
22
+ @forward 'accordion';
23
+ @forward 'card';
24
+ @forward 'chip';
25
+ @forward 'nav';
26
+ @forward 'btn';
27
+ @forward 'form';
28
+ @forward 'filter';
29
+ @forward 'modal';
30
+ @forward 'breadcrumbs';
31
+ @forward 'loader';
32
+ @forward 'tabs';
33
+ @forward 'table';
34
+ @forward 'sort';
35
+ @forward 'avatar';
36
+ @forward 'footer';
37
+ @forward 'sidebar';
38
+ @forward 'app-shell';
39
+ @forward 'status-badge';
40
+ @forward 'alert';
41
+ @forward 'empty-state';
42
+ @forward 'page-header';
43
+ @forward 'stepper';
44
+ @forward 'timeline';
45
+ @forward 'stat-card';
46
+ @forward 'prose';
47
+ @forward 'editor';
48
+ @forward 'kbd';
49
+ @forward 'tooltip';
50
+ @forward 'popover';
51
+ @forward 'progress';
52
+ @forward 'link';
53
+ @forward 'circular-progress';
54
+ @forward 'dropdown';
55
+ @forward 'toast';
56
+ @forward 'upload';
57
+ @forward 'picklist';
58
+ @forward 'translations';
59
+ @forward 'ln-table';
60
+ @forward 'chart';
61
+ @forward 'ajax';
62
+ @forward 'diagnostics';
@@ -73,7 +73,7 @@
73
73
  // Breakpoints: 480px, 580px, 880px, 1120px
74
74
  @mixin container($name: null) {
75
75
  // Nameless form is intentional — models native anonymous @container queries.
76
- // See docs/css/layout.md ("Anonymous container") and demo/admin/mixins.html.
76
+ // See docs-mcp/css/layout.md ("Anonymous container") and demo/admin/mixins.html.
77
77
  container-type: inline-size;
78
78
  @if $name { container-name: $name; }
79
79
  }
@@ -92,7 +92,11 @@
92
92
  //
93
93
  // Cascade note: the --radius / --shadow re-binds cascade
94
94
  // into grandchildren. If a consumer nests a rounded card inside a
95
- // flat-stack panel, re-bind --radius on that nested element.
95
+ // flat-stack panel, re-bind --radius on that nested element. Exception: a
96
+ // grandchild carrying [data-mode] / [data-theme] / [data-skin] matches the
97
+ // four-axis base-defaults block in _palette.scss, which re-derives --radius
98
+ // and --shadow on it directly — no flat-stack rule reaches a grandchild to
99
+ // contest that, so it silently gets root radius/shadow back.
96
100
  //
97
101
  // Block-axis only. For horizontal joined controls use btn-group or
98
102
  // pill-group — they use border-radius tricks on first/last children
@@ -85,7 +85,16 @@
85
85
  position: sticky;
86
86
  top: 0;
87
87
  z-index: var(--z-sticky);
88
- border-radius: var(--radius-lg) var(--radius-lg) 0 0;
88
+ border-radius: 0;
89
+ background: var(--color-bg);
90
+ border-bottom: var(--border-width) solid var(--border-subtle);
91
+
92
+ h3 {
93
+ margin: 0;
94
+ font-size: 1rem;
95
+ font-weight: 600;
96
+ color: var(--color-fg);
97
+ }
89
98
  }
90
99
 
91
100
  // ─── In-thead toolbar (first thead row, single colspan th) ───────
@@ -117,12 +126,22 @@
117
126
  @include panel-header;
118
127
  justify-content: flex-start;
119
128
  gap: var(--size-md);
129
+ border-radius: 0;
130
+ background: var(--color-bg);
131
+ border-bottom: var(--border-width) solid var(--border-subtle);
132
+
133
+ h3 {
134
+ margin: 0;
135
+ font-size: 1rem;
136
+ font-weight: 600;
137
+ color: var(--color-fg);
138
+ }
120
139
  }
121
140
  }
122
141
 
123
142
  @mixin ln-table-toolbar-search {
124
- --padding-y: var(--size-2xs); // lowers panel-header min-height floor for this label
125
- width: auto; // hug the 10rem input; cancel .search's 20rem label cap inside toolbars
143
+ --padding-y: var(--size-2xs); // lowers panel-header min-height floor for this wrapper
144
+ width: auto; // hug the 10rem input
126
145
 
127
146
  > .ln-icon {
128
147
  padding-top: var(--size-2xs); // tighten leading icon vertical padding (was var(--size-xs))
@@ -138,7 +157,8 @@
138
157
  // ─── Count badge ──────────────────────────────────────────
139
158
 
140
159
  @mixin ln-table-count {
141
- @include text-sm;
160
+ font-size: var(--text-xs);
161
+ font-weight: 500;
142
162
  --color-fg: var(--fg-muted);
143
163
  color: var(--color-fg);
144
164
 
@@ -164,14 +184,15 @@
164
184
  @include flex;
165
185
  @include items-center;
166
186
  @include justify-between;
167
- --padding-y: var(--size-sm);
187
+ --padding-y: var(--size-xs-up);
168
188
  --padding-x: var(--size-md);
169
189
  padding: var(--padding-y) var(--padding-x);
170
- @include border-t;
190
+ border-top: var(--border-width) solid var(--border-subtle);
171
191
  --color-bg: var(--bg-sunken);
172
192
  background: var(--color-bg);
173
- border-radius: 0 0 var(--radius-lg) var(--radius-lg);
174
- @include text-sm;
193
+ border-radius: 0;
194
+ font-size: var(--text-xs);
195
+ font-weight: 500;
175
196
  --color-fg: var(--fg-muted);
176
197
  color: var(--color-fg);
177
198
  position: sticky;
@@ -243,13 +264,13 @@
243
264
  border: none;
244
265
 
245
266
  &:hover {
246
- --color-bg: var(--bg-sunken);
267
+ --color-bg: var(--bg-hover);
247
268
  background-color: var(--color-bg);
248
269
  color: var(--color-fg);
249
270
  }
250
271
 
251
272
  &[data-active] {
252
- background-color: color-mix(in srgb, var(--color-accent) 10%, transparent);
273
+ background-color: color-mix(in srgb, var(--color-accent) var(--tint-selected), transparent);
253
274
  color: var(--color-accent);
254
275
  }
255
276
  }