@livenetworks/ashlar 2.1.13 → 2.2.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 (101) hide show
  1. package/components/COMPONENTS.md +80 -80
  2. package/components/ln-api-connector/ln-api-connector.schema.json +105 -105
  3. package/components/ln-chart/ln-chart-dev.scss +0 -4
  4. package/components/ln-core/README.md +21 -21
  5. package/components/ln-core/ln-core.schema.json +120 -120
  6. package/components/ln-core/query.js +113 -113
  7. package/components/ln-data-coordinator/README.md +2 -0
  8. package/components/ln-data-coordinator/ln-data-coordinator.js +1 -1
  9. package/components/ln-data-coordinator/ln-data-coordinator.schema.json +196 -196
  10. package/components/ln-data-coordinator/src/ln-data-coordinator.js +457 -432
  11. package/components/ln-data-store/ln-data-store.schema.json +92 -92
  12. package/components/ln-date/ln-date.js +1 -1
  13. package/components/ln-date/src/ln-date.js +1 -1
  14. package/components/ln-debug/ln-debug.js +1 -1
  15. package/components/ln-debug/ln-debug.schema.json +28 -28
  16. package/components/ln-debug/src/generated-attributes.js +304 -302
  17. package/components/ln-dropdown/ln-dropdown.schema.json +90 -90
  18. package/components/ln-external-links/README.md +19 -19
  19. package/components/ln-external-links/ln-external-links.js +1 -1
  20. package/components/ln-external-links/ln-external-links.schema.json +9 -0
  21. package/components/ln-external-links/ln-external-links.scss +12 -0
  22. package/components/ln-external-links/src/ln-external-links.js +3 -2
  23. package/components/ln-filter/README.md +2 -1
  24. package/components/ln-filter/ln-filter.js +1 -1
  25. package/components/ln-filter/ln-filter.schema.json +157 -169
  26. package/components/ln-filter/src/ln-filter.js +1 -3
  27. package/components/ln-form/ln-form.schema.json +57 -57
  28. package/components/ln-key/ln-key.js +1 -1
  29. package/components/ln-key/ln-key.schema.json +8 -0
  30. package/components/ln-key/src/ln-key.js +8 -5
  31. package/components/ln-obfuscator/ln-obfuscator.js +1 -1
  32. package/components/ln-obfuscator/ln-obfuscator.schema.json +6 -0
  33. package/components/ln-obfuscator/src/ln-obfuscator.js +2 -2
  34. package/components/ln-options/ln-options.schema.json +47 -47
  35. package/components/ln-popover/ln-popover.schema.json +82 -82
  36. package/components/ln-progress/ln-progress.schema.json +0 -13
  37. package/components/ln-search/ln-search.schema.json +111 -111
  38. package/components/ln-sort/README.md +1 -0
  39. package/components/ln-sort/ln-sort.js +1 -1
  40. package/components/ln-sort/ln-sort.schema.json +100 -112
  41. package/components/ln-sort/src/sort-model.js +1 -6
  42. package/components/ln-sortable/ln-sortable.schema.json +38 -38
  43. package/components/ln-sortable/ln-sortable.scss +25 -25
  44. package/components/ln-table/README.md +8 -1
  45. package/components/ln-table/ln-table.js +1 -1
  46. package/components/ln-table/ln-table.schema.json +195 -195
  47. package/components/ln-table/src/ln-table.js +43 -7
  48. package/components/ln-table-coordinator/ln-table-coordinator.js +1 -1
  49. package/components/ln-table-coordinator/ln-table-coordinator.schema.json +18 -0
  50. package/components/ln-table-coordinator/src/ln-table-coordinator.js +104 -2
  51. package/components/ln-toast/README.md +1 -1
  52. package/components/ln-toast/ln-toast.js +1 -1
  53. package/components/ln-toast/ln-toast.schema.json +6 -0
  54. package/components/ln-toast/src/ln-toast.js +1 -1
  55. package/components/ln-validate/README.md +6 -6
  56. package/components/ln-validate/ln-validate-dev.scss +0 -5
  57. package/components/ln-validate/ln-validate.js +1 -1
  58. package/components/ln-validate/ln-validate.schema.json +0 -6
  59. package/components/ln-validate/src/ln-validate.js +48 -29
  60. package/ln-ashlar.html-data.json +1824 -1814
  61. package/package.json +95 -95
  62. package/theme/README.md +7 -6
  63. package/theme/base/_global.scss +2 -2
  64. package/theme/base/_reset.scss +11 -0
  65. package/theme/components/_app-shell.scss +0 -8
  66. package/theme/components/_form.scss +6 -6
  67. package/theme/components/_ln-table.scss +6 -3
  68. package/theme/components/_scrollbar.scss +5 -4
  69. package/theme/components/_sortable.scss +19 -19
  70. package/theme/components/_stat-card.scss +1 -0
  71. package/theme/components/_table.scss +10 -33
  72. package/theme/config/_density.scss +236 -104
  73. package/theme/config/_palette.scss +71 -49
  74. package/theme/config/_theme.scss +27 -31
  75. package/theme/config/_tokens.scss +28 -26
  76. package/theme/config/mixins/_app-shell.scss +17 -21
  77. package/theme/config/mixins/_btn.scss +4 -2
  78. package/theme/config/mixins/_card.scss +87 -67
  79. package/theme/config/mixins/_colors.scss +2 -1
  80. package/theme/config/mixins/_display.scss +12 -0
  81. package/theme/config/mixins/_footer.scss +3 -1
  82. package/theme/config/mixins/_form.scss +48 -16
  83. package/theme/config/mixins/_layout.scss +9 -0
  84. package/theme/config/mixins/_ln-table.scss +22 -15
  85. package/theme/config/mixins/_modal.scss +3 -0
  86. package/theme/config/mixins/_nav.scss +27 -4
  87. package/theme/config/mixins/_sidebar.scss +2 -1
  88. package/theme/config/mixins/_stat-card.scss +33 -2
  89. package/theme/config/mixins/_status-badge.scss +1 -0
  90. package/theme/config/mixins/_table.scss +81 -39
  91. package/theme/config/mixins/_tabs.scss +31 -0
  92. package/theme/config/mixins/_toast.scss +0 -1
  93. package/theme/designs/relaxed/_card.scss +12 -0
  94. package/theme/designs/relaxed/_layout.scss +24 -0
  95. package/theme/ln-ashlar-core.scss +1 -0
  96. package/theme/ln-ashlar-dev.scss +0 -1
  97. package/theme/ln-ashlar-relaxed.scss +67 -0
  98. package/theme/tailwind/components.css +561 -24
  99. package/theme/utilities/_utilities.scss +1 -11
  100. package/web-types.json +2351 -2337
  101. package/components/ln-progress/ln-progress-dev.scss +0 -8
@@ -147,6 +147,18 @@ body:has(.app-wrapper) {
147
147
  position: relative;
148
148
  }
149
149
 
150
+ .app-header .header-actions button:has(> .ln-icon:only-child),
151
+ .app-header .header-actions button:has(> .ln-icon):not(:has(span)),
152
+ .app-header .menu-toggle {
153
+ width: 2.25rem;
154
+ height: 2.25rem;
155
+ padding: 0;
156
+ display: inline-flex;
157
+ align-items: center;
158
+ justify-content: center;
159
+ border-radius: 0.5rem;
160
+ }
161
+
150
162
  /* Main inner viewport */
151
163
  .app-main {
152
164
  display: flex;
@@ -214,6 +226,7 @@ body:has(.app-wrapper) {
214
226
  padding: 1rem;
215
227
  gap: 1rem;
216
228
  overflow-y: auto;
229
+ transform: translateX(-100%);
217
230
  transition: transform 0.2s ease;
218
231
  }
219
232
 
@@ -223,18 +236,49 @@ body:has(.app-wrapper) {
223
236
  border-right-color: #1e293b;
224
237
  }
225
238
 
239
+ .app-sidebar[data-ln-toggle="open"],
240
+ aside.app-sidebar[data-ln-toggle="open"] {
241
+ transform: translateX(0);
242
+ }
243
+
244
+ .app-sidebar[data-ln-toggle="close"],
245
+ aside.app-sidebar[data-ln-toggle="close"] {
246
+ transform: translateX(-100%);
247
+ }
248
+
226
249
  @media (max-width: 767px) {
227
- .app-sidebar[data-ln-toggle="close"],
228
- aside.app-sidebar[data-ln-toggle="close"] {
229
- transform: translateX(-100%);
250
+ .app-sidebar,
251
+ aside.app-sidebar {
252
+ z-index: 45;
230
253
  }
231
- .app-sidebar[data-ln-toggle="open"],
232
- aside.app-sidebar[data-ln-toggle="open"] {
233
- transform: translateX(0);
254
+ }
255
+
256
+ /* Scrim overlay for mobile drawer */
257
+ .app-scrim {
258
+ position: fixed;
259
+ inset: 0;
260
+ background-color: rgba(0, 0, 0, 0.4);
261
+ z-index: 40;
262
+ opacity: 0;
263
+ pointer-events: none;
264
+ transition: opacity 0.2s ease;
265
+ cursor: pointer;
266
+ }
267
+
268
+ aside[data-ln-toggle="open"] ~ .app-scrim,
269
+ .app-sidebar[data-ln-toggle="open"] ~ .app-scrim {
270
+ opacity: 1;
271
+ pointer-events: auto;
272
+ }
273
+
274
+ @media (min-width: 768px) {
275
+ .app-scrim {
276
+ display: none;
234
277
  }
235
278
  }
236
279
 
237
280
  .app-sidebar header {
281
+ position: relative;
238
282
  display: flex;
239
283
  flex-direction: column;
240
284
  gap: 0.75rem;
@@ -242,6 +286,38 @@ body:has(.app-wrapper) {
242
286
  border-bottom: 1px solid #e2e8f0;
243
287
  }
244
288
 
289
+ .app-sidebar header [data-ln-toggle-action="close"] {
290
+ position: absolute;
291
+ top: 0;
292
+ right: 0;
293
+ width: 1.75rem;
294
+ height: 1.75rem;
295
+ padding: 0;
296
+ display: inline-flex;
297
+ align-items: center;
298
+ justify-content: center;
299
+ background: transparent;
300
+ border: none;
301
+ border-radius: 0.375rem;
302
+ color: #64748b;
303
+ cursor: pointer;
304
+ box-shadow: none;
305
+ }
306
+
307
+ .app-sidebar header [data-ln-toggle-action="close"]:hover {
308
+ background-color: #f1f5f9;
309
+ color: #0f172a;
310
+ }
311
+
312
+ [data-mode="dark"] .app-sidebar header [data-ln-toggle-action="close"] {
313
+ color: #94a3b8;
314
+ }
315
+
316
+ [data-mode="dark"] .app-sidebar header [data-ln-toggle-action="close"]:hover {
317
+ background-color: #1e293b;
318
+ color: #f8fafc;
319
+ }
320
+
245
321
  [data-mode="dark"] .app-sidebar header {
246
322
  border-bottom-color: #1e293b;
247
323
  }
@@ -272,12 +348,15 @@ body:has(.app-wrapper) {
272
348
  .app-sidebar header label.search {
273
349
  display: flex;
274
350
  align-items: center;
275
- gap: 0.5rem;
351
+ gap: 0.375rem;
276
352
  padding: 0.375rem 0.625rem;
277
353
  background-color: #f1f5f9; /* slate-100 */
278
354
  border: 1px solid #e2e8f0;
279
355
  border-radius: 0.5rem;
280
356
  color: #64748b;
357
+ width: 100%;
358
+ box-sizing: border-box;
359
+ transition: all 0.15s ease-in-out;
281
360
  }
282
361
 
283
362
  [data-mode="dark"] .app-sidebar header search,
@@ -287,13 +366,31 @@ body:has(.app-wrapper) {
287
366
  color: #94a3b8;
288
367
  }
289
368
 
369
+ .app-sidebar header search:focus-within,
370
+ .app-sidebar header label.search:focus-within {
371
+ border-color: #4f46e5;
372
+ background-color: #ffffff;
373
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.15);
374
+ }
375
+
376
+ [data-mode="dark"] .app-sidebar header search:focus-within,
377
+ [data-mode="dark"] .app-sidebar header label.search:focus-within {
378
+ border-color: #818cf8;
379
+ background-color: #0f172a;
380
+ box-shadow: 0 0 0 3px rgba(129, 140, 248, 0.2);
381
+ }
382
+
290
383
  .app-sidebar header search input {
291
- border: none;
292
- background: transparent;
293
- font-size: 0.8125rem;
294
- outline: none;
295
- width: 100%;
296
- color: inherit;
384
+ border: none !important;
385
+ background: transparent !important;
386
+ font-size: 0.8125rem !important;
387
+ outline: none !important;
388
+ box-shadow: none !important;
389
+ flex: 1 1 0% !important;
390
+ min-width: 0 !important;
391
+ width: 100% !important;
392
+ color: inherit !important;
393
+ padding: 0 !important;
297
394
  }
298
395
 
299
396
  .app-sidebar footer {
@@ -844,12 +941,15 @@ table thead, [data-ln-table] thead {
844
941
  }
845
942
 
846
943
  table th, [data-ln-table] th {
944
+ position: relative;
847
945
  padding: 0.75rem 1rem;
848
946
  font-size: 0.75rem;
849
947
  font-weight: 600;
850
948
  text-transform: uppercase;
851
949
  letter-spacing: 0.05em;
852
950
  color: #64748b;
951
+ vertical-align: middle;
952
+ white-space: nowrap;
853
953
  }
854
954
 
855
955
  [data-mode="dark"] table th,
@@ -857,6 +957,194 @@ table th, [data-ln-table] th {
857
957
  color: #94a3b8;
858
958
  }
859
959
 
960
+ /* Allocate header space when sort and/or filter controls are present */
961
+ table th:has(:is([data-ln-sort], [data-ln-table-col-filter])),
962
+ [data-ln-table] th:has(:is([data-ln-sort], [data-ln-table-col-filter])) {
963
+ min-width: 6.25rem;
964
+ padding-inline-end: 2.75rem;
965
+ }
966
+
967
+ table th:has([data-ln-sort]):has([data-ln-table-col-filter]),
968
+ [data-ln-table] th:has([data-ln-sort]):has([data-ln-table-col-filter]) {
969
+ min-width: 8.5rem;
970
+ padding-inline-end: 4.5rem;
971
+ }
972
+
973
+ /* Position action buttons inside th */
974
+ table th [data-ln-table-col-filter],
975
+ table th [data-ln-sort],
976
+ [data-ln-table] th [data-ln-table-col-filter],
977
+ [data-ln-table] th [data-ln-sort] {
978
+ position: absolute;
979
+ top: 50%;
980
+ transform: translateY(-50%);
981
+ right: 0.75rem;
982
+ margin: 0;
983
+ }
984
+
985
+ /* When both sort and filter exist: sort button sits to the left of the filter button */
986
+ table th:has([data-ln-table-col-filter]) [data-ln-sort],
987
+ [data-ln-table] th:has([data-ln-table-col-filter]) [data-ln-sort] {
988
+ right: 2.5rem;
989
+ }
990
+
991
+ /* --------------------------------------------------------------------------
992
+ Table Column Sort ([data-ln-sort])
993
+ -------------------------------------------------------------------------- */
994
+ [data-ln-sort] {
995
+ display: inline-flex;
996
+ align-items: center;
997
+ list-style: none !important;
998
+ list-style-type: none !important;
999
+ margin: 0;
1000
+ padding: 0;
1001
+ vertical-align: middle;
1002
+ }
1003
+
1004
+ [data-ln-sort] li {
1005
+ list-style: none !important;
1006
+ list-style-type: none !important;
1007
+ margin: 0;
1008
+ padding: 0;
1009
+ display: contents;
1010
+ }
1011
+
1012
+ /* Base sort button styling — hidden by default so only active trigger shows */
1013
+ [data-ln-sort] button {
1014
+ display: none;
1015
+ width: 1.75rem;
1016
+ height: 1.75rem;
1017
+ padding: 0;
1018
+ border: none;
1019
+ background: transparent;
1020
+ box-shadow: none;
1021
+ border-radius: 9999px;
1022
+ cursor: pointer;
1023
+ color: #64748b;
1024
+ opacity: 0.45;
1025
+ transition: all 0.15s ease-in-out;
1026
+ align-items: center;
1027
+ justify-content: center;
1028
+ }
1029
+
1030
+ [data-mode="dark"] [data-ln-sort] button {
1031
+ color: #94a3b8;
1032
+ }
1033
+
1034
+ /* Hover reveals sort trigger button clearly */
1035
+ th:hover [data-ln-sort] button,
1036
+ [data-ln-table] th:hover [data-ln-sort] button {
1037
+ opacity: 0.75;
1038
+ }
1039
+
1040
+ [data-ln-sort] button:hover {
1041
+ opacity: 1 !important;
1042
+ background-color: rgba(79, 70, 229, 0.1);
1043
+ color: #4f46e5;
1044
+ }
1045
+
1046
+ [data-mode="dark"] [data-ln-sort] button:hover {
1047
+ background-color: rgba(129, 140, 248, 0.15);
1048
+ color: #818cf8;
1049
+ }
1050
+
1051
+ /* Active 3-trigger cycle display rules (circular cycle: none -> asc -> desc -> none) */
1052
+ [data-ln-sort]:not([data-ln-sort-state]) [data-ln-sort-dir="asc"],
1053
+ [data-ln-sort][data-ln-sort-state="none"] [data-ln-sort-dir="asc"],
1054
+ [data-ln-sort][data-ln-sort-state="asc"] [data-ln-sort-dir="desc"],
1055
+ [data-ln-sort][data-ln-sort-state="desc"] [data-ln-sort-dir="none"] {
1056
+ display: inline-flex;
1057
+ }
1058
+
1059
+ /* When column is sorted (asc or desc), highlight the button */
1060
+ [data-ln-sort][data-ln-sort-state="asc"] button,
1061
+ [data-ln-sort][data-ln-sort-state="desc"] button {
1062
+ opacity: 1;
1063
+ color: #4f46e5;
1064
+ }
1065
+
1066
+ [data-mode="dark"] [data-ln-sort][data-ln-sort-state="asc"] button,
1067
+ [data-mode="dark"] [data-ln-sort][data-ln-sort-state="desc"] button {
1068
+ color: #818cf8;
1069
+ }
1070
+
1071
+ [data-ln-sort] .ln-icon {
1072
+ width: 1.125rem;
1073
+ height: 1.125rem;
1074
+ }
1075
+
1076
+ /* --------------------------------------------------------------------------
1077
+ Table Column Filter Button ([data-ln-table-col-filter])
1078
+ -------------------------------------------------------------------------- */
1079
+ [data-ln-table-col-filter] {
1080
+ width: 1.75rem;
1081
+ height: 1.75rem;
1082
+ display: inline-flex;
1083
+ align-items: center;
1084
+ justify-content: center;
1085
+ padding: 0;
1086
+ border: none;
1087
+ background: transparent;
1088
+ box-shadow: none;
1089
+ border-radius: 9999px;
1090
+ cursor: pointer;
1091
+ color: #64748b;
1092
+ opacity: 0.45;
1093
+ transition: all 0.15s ease-in-out;
1094
+ vertical-align: middle;
1095
+ position: relative;
1096
+ }
1097
+
1098
+ [data-mode="dark"] [data-ln-table-col-filter] {
1099
+ color: #94a3b8;
1100
+ }
1101
+
1102
+ th:hover [data-ln-table-col-filter],
1103
+ [data-ln-table] th:hover [data-ln-table-col-filter] {
1104
+ opacity: 0.75;
1105
+ }
1106
+
1107
+ [data-ln-table-col-filter]:hover {
1108
+ opacity: 1 !important;
1109
+ background-color: rgba(79, 70, 229, 0.1);
1110
+ color: #4f46e5;
1111
+ }
1112
+
1113
+ [data-mode="dark"] [data-ln-table-col-filter]:hover {
1114
+ background-color: rgba(129, 140, 248, 0.15);
1115
+ color: #818cf8;
1116
+ }
1117
+
1118
+ /* Active filter state indicator */
1119
+ [data-ln-table-col-filter].ln-filter-active {
1120
+ opacity: 1;
1121
+ color: #4f46e5;
1122
+ }
1123
+
1124
+ [data-mode="dark"] [data-ln-table-col-filter].ln-filter-active {
1125
+ color: #818cf8;
1126
+ }
1127
+
1128
+ [data-ln-table-col-filter].ln-filter-active::after {
1129
+ content: '';
1130
+ position: absolute;
1131
+ top: 0.125rem;
1132
+ right: 0.125rem;
1133
+ width: 0.375rem;
1134
+ height: 0.375rem;
1135
+ border-radius: 9999px;
1136
+ background-color: #4f46e5;
1137
+ }
1138
+
1139
+ [data-mode="dark"] [data-ln-table-col-filter].ln-filter-active::after {
1140
+ background-color: #818cf8;
1141
+ }
1142
+
1143
+ [data-ln-table-col-filter] .ln-icon {
1144
+ width: 1.125rem;
1145
+ height: 1.125rem;
1146
+ }
1147
+
860
1148
  table td, [data-ln-table] td {
861
1149
  padding: 0.875rem 1rem;
862
1150
  border-bottom: 1px solid #f1f5f9;
@@ -879,6 +1167,60 @@ table tbody tr:hover td,
879
1167
  background-color: rgba(30, 41, 59, 0.5);
880
1168
  }
881
1169
 
1170
+ /* Table Checkbox & Row Selection */
1171
+ table input[type="checkbox"],
1172
+ [data-ln-table] input[type="checkbox"] {
1173
+ accent-color: #4f46e5;
1174
+ cursor: pointer;
1175
+ width: 1rem;
1176
+ height: 1rem;
1177
+ border-radius: 0.25rem;
1178
+ vertical-align: middle;
1179
+ }
1180
+
1181
+ table tbody tr.selected td,
1182
+ table tbody tr.ln-row-selected td,
1183
+ table tbody tr:has(input[type="checkbox"]:checked) td,
1184
+ [data-ln-table] tbody tr.selected td,
1185
+ [data-ln-table] tbody tr.ln-row-selected td,
1186
+ [data-ln-table] tbody tr:has(input[type="checkbox"]:checked) td {
1187
+ background-color: rgba(79, 70, 229, 0.08);
1188
+ }
1189
+
1190
+ [data-mode="dark"] table tbody tr.selected td,
1191
+ [data-mode="dark"] table tbody tr.ln-row-selected td,
1192
+ [data-mode="dark"] table tbody tr:has(input[type="checkbox"]:checked) td,
1193
+ [data-mode="dark"] [data-ln-table] tbody tr.selected td,
1194
+ [data-mode="dark"] [data-ln-table] tbody tr.ln-row-selected td,
1195
+ [data-mode="dark"] [data-ln-table] tbody tr:has(input[type="checkbox"]:checked) td {
1196
+ background-color: rgba(129, 140, 248, 0.15);
1197
+ }
1198
+
1199
+ /* Table Row Actions */
1200
+ td:has(.table-row-actions) {
1201
+ position: relative;
1202
+ }
1203
+
1204
+ .table-row-actions {
1205
+ display: flex;
1206
+ align-items: center;
1207
+ gap: 0.5rem;
1208
+ position: absolute;
1209
+ right: 1rem;
1210
+ top: 50%;
1211
+ transform: translateY(-50%);
1212
+ opacity: 0;
1213
+ pointer-events: none;
1214
+ visibility: hidden;
1215
+ transition: opacity 0.15s ease-in-out, visibility 0.15s;
1216
+ }
1217
+
1218
+ tr:hover .table-row-actions {
1219
+ opacity: 1;
1220
+ pointer-events: auto;
1221
+ visibility: visible;
1222
+ }
1223
+
882
1224
  .ln-table__toolbar,
883
1225
  [data-ln-table] > header {
884
1226
  display: flex;
@@ -887,28 +1229,154 @@ table tbody tr:hover td,
887
1229
  gap: 0.75rem;
888
1230
  padding: 0.75rem 1rem;
889
1231
  border-bottom: 1px solid #e2e8f0;
1232
+ background-color: #ffffff;
890
1233
  }
891
1234
 
892
1235
  [data-mode="dark"] .ln-table__toolbar,
893
1236
  [data-mode="dark"] [data-ln-table] > header {
894
1237
  border-bottom-color: #334155;
1238
+ background-color: #0f172a;
895
1239
  }
896
1240
 
897
- .ln-table__toolbar :is(label, search),
898
- [data-ln-table] > header :is(label, search) {
1241
+ /* Unified search pill/box for search inputs in table toolbar */
1242
+ /* Unified search pill/box for search inputs in table toolbar */
1243
+ .ln-table__toolbar search,
1244
+ .ln-table__toolbar label:has(> input[type="search"]) {
899
1245
  display: inline-flex;
900
1246
  align-items: center;
901
- gap: 0.5rem;
902
- position: relative;
903
- width: auto;
1247
+ gap: 0.375rem;
1248
+ padding: 0.3125rem 0.625rem;
1249
+ background-color: #ffffff;
1250
+ border: 1px solid #cbd5e1;
1251
+ border-radius: 0.5rem;
1252
+ box-shadow: 0 1px 2px #0000000d;
1253
+ transition: all 0.15s ease-in-out;
1254
+ color: #64748b;
1255
+ width: 16rem;
1256
+ max-width: 24rem;
1257
+ box-sizing: border-box;
904
1258
  }
905
1259
 
906
- .ln-table__toolbar :is(label, search) > input,
907
- .ln-table__toolbar input[type="search"],
908
- [data-ln-table] > header :is(label, search) > input {
909
- display: inline-block;
910
- width: 10rem;
911
- max-width: 16rem;
1260
+ [data-mode="dark"] .ln-table__toolbar search,
1261
+ [data-mode="dark"] .ln-table__toolbar label:has(> input[type="search"]) {
1262
+ background-color: #0f172a;
1263
+ border-color: #334155;
1264
+ color: #94a3b8;
1265
+ }
1266
+
1267
+ .ln-table__toolbar search:focus-within {
1268
+ border-color: #4f46e5;
1269
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.15);
1270
+ }
1271
+
1272
+ [data-mode="dark"] .ln-table__toolbar search:focus-within {
1273
+ border-color: #818cf8;
1274
+ box-shadow: 0 0 0 3px rgba(129, 140, 248, 0.2);
1275
+ }
1276
+
1277
+ .ln-table__toolbar search > .ln-icon,
1278
+ search:has(> input[type="search"]) > .ln-icon {
1279
+ width: 1rem;
1280
+ height: 1rem;
1281
+ flex-shrink: 0;
1282
+ color: #64748b;
1283
+ }
1284
+
1285
+ [data-mode="dark"] .ln-table__toolbar search > .ln-icon,
1286
+ [data-mode="dark"] search:has(> input[type="search"]) > .ln-icon {
1287
+ color: #94a3b8;
1288
+ }
1289
+
1290
+ .ln-table__toolbar search > input,
1291
+ .ln-table__toolbar search input[type="search"],
1292
+ search:has(> input[type="search"]) > input {
1293
+ border: none !important;
1294
+ outline: none !important;
1295
+ background: transparent !important;
1296
+ box-shadow: none !important;
1297
+ padding: 0.125rem 0.25rem !important;
1298
+ font-size: 0.8125rem !important;
1299
+ color: #0f172a !important;
1300
+ flex: 1 1 0% !important;
1301
+ min-width: 0 !important;
1302
+ width: 100% !important;
1303
+ }
1304
+
1305
+ [data-mode="dark"] .ln-table__toolbar search > input,
1306
+ [data-mode="dark"] .ln-table__toolbar search input[type="search"],
1307
+ [data-mode="dark"] search:has(> input[type="search"]) > input {
1308
+ color: #f8fafc !important;
1309
+ }
1310
+
1311
+ /* Clear search button inside search */
1312
+ search button[data-ln-search-clear],
1313
+ .app-sidebar header search button[data-ln-search-clear],
1314
+ .ln-table__toolbar button[data-ln-search-clear] {
1315
+ display: inline-flex;
1316
+ align-items: center;
1317
+ justify-content: center;
1318
+ width: 1.25rem;
1319
+ height: 1.25rem;
1320
+ padding: 0;
1321
+ border: none;
1322
+ background: transparent;
1323
+ box-shadow: none;
1324
+ border-radius: 9999px;
1325
+ color: #94a3b8;
1326
+ cursor: pointer;
1327
+ flex-shrink: 0;
1328
+ margin-left: auto;
1329
+ transition: all 0.15s;
1330
+ }
1331
+
1332
+ search button[data-ln-search-clear]:hover,
1333
+ .app-sidebar header search button[data-ln-search-clear]:hover,
1334
+ .ln-table__toolbar button[data-ln-search-clear]:hover {
1335
+ color: #0f172a;
1336
+ background-color: #e2e8f0;
1337
+ }
1338
+
1339
+ [data-mode="dark"] search button[data-ln-search-clear]:hover,
1340
+ [data-mode="dark"] .app-sidebar header search button[data-ln-search-clear]:hover,
1341
+ [data-mode="dark"] .ln-table__toolbar button[data-ln-search-clear]:hover {
1342
+ color: #f8fafc;
1343
+ background-color: #334155;
1344
+ }
1345
+
1346
+ search button[data-ln-search-clear] .ln-icon,
1347
+ .app-sidebar header search button[data-ln-search-clear] .ln-icon,
1348
+ .ln-table__toolbar button[data-ln-search-clear] .ln-icon {
1349
+ width: 0.875rem;
1350
+ height: 0.875rem;
1351
+ }
1352
+
1353
+ /* Hide clear button when input is empty / placeholder is shown */
1354
+ search:has(> input:placeholder-shown) button[data-ln-search-clear],
1355
+ search > input:placeholder-shown ~ button[data-ln-search-clear],
1356
+ .app-sidebar header search > input:placeholder-shown ~ button[data-ln-search-clear] {
1357
+ visibility: hidden;
1358
+ opacity: 0;
1359
+ pointer-events: none;
1360
+ }
1361
+
1362
+ /* Table footer */
1363
+ .ln-table__footer,
1364
+ [data-ln-table] > footer {
1365
+ display: flex;
1366
+ align-items: center;
1367
+ justify-content: space-between;
1368
+ padding: 0.75rem 1rem;
1369
+ border-top: 1px solid #e2e8f0;
1370
+ background-color: #f8fafc;
1371
+ font-size: 0.8125rem;
1372
+ color: #64748b;
1373
+ }
1374
+
1375
+ [data-mode="dark"] .ln-table__footer,
1376
+ [data-mode="dark"] [data-ln-table] > footer {
1377
+ border-top-color: #334155;
1378
+ background-color: #1e293b;
1379
+ color: #94a3b8;
912
1380
  }
913
1381
 
914
1382
  /* --------------------------------------------------------------------------
@@ -1310,6 +1778,75 @@ ul[data-ln-toast] li[data-ln-toast-item],
1310
1778
  background-color: #1e293b;
1311
1779
  }
1312
1780
 
1781
+ /* Popover Filter List Items & Labels */
1782
+ [data-ln-popover] ul[data-ln-filter],
1783
+ [data-ln-dropdown] ul[data-ln-filter] {
1784
+ min-width: 10rem;
1785
+ }
1786
+
1787
+ [data-ln-popover] ul[data-ln-filter] li,
1788
+ [data-ln-dropdown] ul[data-ln-filter] li {
1789
+ margin: 0;
1790
+ padding: 0;
1791
+ }
1792
+
1793
+ [data-ln-popover] label,
1794
+ [data-ln-dropdown] label {
1795
+ display: flex;
1796
+ align-items: center;
1797
+ gap: 0.5rem;
1798
+ padding: 0.375rem 0.625rem;
1799
+ border-radius: 0.375rem;
1800
+ font-size: 0.8125rem;
1801
+ font-weight: 500;
1802
+ color: #475569;
1803
+ cursor: pointer;
1804
+ margin-bottom: 0;
1805
+ transition: all 0.15s;
1806
+ user-select: none;
1807
+ }
1808
+
1809
+ [data-ln-popover] label:hover,
1810
+ [data-ln-dropdown] label:hover {
1811
+ background-color: #f1f5f9;
1812
+ color: #0f172a;
1813
+ }
1814
+
1815
+ [data-mode="dark"] [data-ln-popover] label,
1816
+ [data-mode="dark"] [data-ln-dropdown] label {
1817
+ color: #94a3b8;
1818
+ }
1819
+
1820
+ [data-mode="dark"] [data-ln-popover] label:hover,
1821
+ [data-mode="dark"] [data-ln-dropdown] label:hover {
1822
+ background-color: #1e293b;
1823
+ color: #f8fafc;
1824
+ }
1825
+
1826
+ [data-ln-popover] label:has(> input:checked),
1827
+ [data-ln-dropdown] label:has(> input:checked) {
1828
+ background-color: #eef2ff;
1829
+ color: #4f46e5;
1830
+ font-weight: 600;
1831
+ }
1832
+
1833
+ [data-mode="dark"] [data-ln-popover] label:has(> input:checked),
1834
+ [data-mode="dark"] [data-ln-dropdown] label:has(> input:checked) {
1835
+ background-color: rgba(79, 70, 229, 0.2);
1836
+ color: #818cf8;
1837
+ }
1838
+
1839
+ [data-ln-popover] input[type="checkbox"],
1840
+ [data-ln-dropdown] input[type="checkbox"] {
1841
+ accent-color: #4f46e5;
1842
+ width: 1rem;
1843
+ height: 1rem;
1844
+ border-radius: 0.25rem;
1845
+ cursor: pointer;
1846
+ vertical-align: middle;
1847
+ margin: 0;
1848
+ }
1849
+
1313
1850
  /* --------------------------------------------------------------------------
1314
1851
  13. Code Inspector Collapsible Panel
1315
1852
  -------------------------------------------------------------------------- */
@@ -1,17 +1,7 @@
1
1
  @use '../config/mixins' as *;
2
2
  @use '../config/breakpoints' as *;
3
3
 
4
- .sr-only {
5
- position: absolute;
6
- width: 1px;
7
- height: 1px;
8
- padding: 0;
9
- margin: -1px;
10
- overflow: hidden;
11
- clip: rect(0, 0, 0, 0);
12
- white-space: nowrap;
13
- border-width: 0;
14
- }
4
+ .sr-only { @include sr-only; }
15
5
 
16
6
  .hidden { @include hidden; }
17
7