@sylwellsoftware/fray 0.5.0 → 0.7.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 (75) hide show
  1. package/README.md +198 -30
  2. package/colors/README.md +28 -13
  3. package/colors/gray/colors.css +54 -26
  4. package/colors/green/colors.css +54 -26
  5. package/colors/iceblue/colors.css +54 -26
  6. package/colors/ocean/colors.css +54 -26
  7. package/colors/orange/colors.css +54 -26
  8. package/colors/purple/colors.css +54 -26
  9. package/colors/red/colors.css +54 -26
  10. package/colors/yellow/colors.css +54 -26
  11. package/dist/Components/component.d.ts.map +1 -1
  12. package/dist/Components/data/descriptionList.d.ts.map +1 -1
  13. package/dist/Components/data/listview/listview.d.ts.map +1 -1
  14. package/dist/Components/data/table/DataTable.d.ts.map +1 -1
  15. package/dist/Components/data/table/FilterPanel.d.ts.map +1 -1
  16. package/dist/Components/data/table/TableHeaderCell.d.ts.map +1 -1
  17. package/dist/Components/data/treeview/treeview.d.ts.map +1 -1
  18. package/dist/Components/dialog/dialog.d.ts.map +1 -1
  19. package/dist/Components/layout/panel.d.ts +0 -1
  20. package/dist/Components/layout/panel.d.ts.map +1 -1
  21. package/dist/Components/layout/sidebar.d.ts +0 -1
  22. package/dist/Components/layout/sidebar.d.ts.map +1 -1
  23. package/dist/Components/layout/tabpanel/tab.d.ts +2 -0
  24. package/dist/Components/layout/tabpanel/tab.d.ts.map +1 -1
  25. package/dist/Components/layout/tabpanel/tabline.d.ts.map +1 -1
  26. package/dist/Components/layout/tabpanel/tabpanel.d.ts +9 -1
  27. package/dist/Components/layout/tabpanel/tabpanel.d.ts.map +1 -1
  28. package/dist/Components/lineinputs/checkbox/Checkbox.d.ts +0 -1
  29. package/dist/Components/lineinputs/checkbox/Checkbox.d.ts.map +1 -1
  30. package/dist/Components/lineinputs/dropdown.d.ts.map +1 -1
  31. package/dist/Components/lineinputs/radio.d.ts +51 -0
  32. package/dist/Components/lineinputs/radio.d.ts.map +1 -0
  33. package/dist/Components/lineinputs/textbox.d.ts.map +1 -1
  34. package/dist/Components/lineinputs/toggle.d.ts.map +1 -1
  35. package/dist/Components/menu/toolbar.d.ts +0 -1
  36. package/dist/Components/menu/toolbar.d.ts.map +1 -1
  37. package/dist/Components/status/progressBar.d.ts.map +1 -1
  38. package/dist/Components/theme/stylesheetPicker.d.ts.map +1 -1
  39. package/dist/index.d.ts +8 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +2485 -1456
  42. package/dist/index.js.map +1 -1
  43. package/dist/{jsx-dev-runtime-pzseD2Sz.js → jsx-dev-runtime-Kf1Dhu-y.js} +412 -469
  44. package/dist/jsx-dev-runtime-Kf1Dhu-y.js.map +1 -0
  45. package/dist/jsx-dev-runtime.js +1 -1
  46. package/dist/jsx-runtime.js +1 -1
  47. package/dist/routing/RouteLink.d.ts +17 -0
  48. package/dist/routing/RouteLink.d.ts.map +1 -0
  49. package/dist/routing/RouteQuery.d.ts +18 -0
  50. package/dist/routing/RouteQuery.d.ts.map +1 -0
  51. package/dist/routing/RouteScope.d.ts +17 -0
  52. package/dist/routing/RouteScope.d.ts.map +1 -0
  53. package/dist/routing/RouteValue.d.ts +18 -0
  54. package/dist/routing/RouteValue.d.ts.map +1 -0
  55. package/dist/routing/navigationAdapter.d.ts +33 -0
  56. package/dist/routing/navigationAdapter.d.ts.map +1 -0
  57. package/dist/routing/route.d.ts +64 -0
  58. package/dist/routing/route.d.ts.map +1 -0
  59. package/dist/routing/router.d.ts +109 -0
  60. package/dist/routing/router.d.ts.map +1 -0
  61. package/dist/runtime.d.ts +5 -0
  62. package/dist/runtime.d.ts.map +1 -1
  63. package/dist/styling/baseStyleDefinitions.d.ts +0 -82
  64. package/dist/styling/baseStyleDefinitions.d.ts.map +1 -1
  65. package/dist/styling/theme.d.ts +3 -3
  66. package/dist/styling/theme.d.ts.map +1 -1
  67. package/package.json +3 -3
  68. package/styles/structural.css +220 -429
  69. package/themes/README.md +68 -66
  70. package/themes/dark.css +60 -1
  71. package/themes/java/theme.css +422 -135
  72. package/themes/light.css +60 -1
  73. package/themes/minimal/theme.css +420 -125
  74. package/themes/shiny/theme.css +492 -294
  75. package/dist/jsx-dev-runtime-pzseD2Sz.js.map +0 -1
@@ -21,179 +21,78 @@
21
21
  }
22
22
 
23
23
  /* uiline */
24
- button[data-fray-component="button"],
25
- th[data-fray-component="table-header-cell"] > [data-part="sort"],
26
- th[data-fray-component="table-header-cell"] > [data-part="filter-toggle"],
27
- fray-tab-line > [data-part="tab"],
28
- fieldset[data-fray-component="toggle"] > [data-part="options"],
29
- fieldset[data-fray-component="toggle"] [data-part="option"] {
24
+ button,
25
+ th[aria-sort] > [data-part="sort"],
26
+ th[aria-sort] > [data-part="filter-toggle"],
27
+ fray-tab-line > button[role="tab"],
28
+ fieldset:has(> [data-part="options"]) > [data-part="options"],
29
+ fieldset:has(> [data-part="options"]) [role="radio"] {
30
30
  box-sizing: border-box;
31
- line-height: var(--fray-line-height, 1.25);
32
- font-size: var(--fray-font-size, var(--ui-font-size));
33
- min-height: var(--fray-control-min-height, 2rem);
34
- color: var(--fray-ui-color, var(--ui-text-color));
35
- padding: var(--ui-padding-v, 0.25rem) var(--ui-padding-h, 0.5rem);
36
- border-radius: var(--fray-radius-md, var(--ui-border-radius));
31
+ min-height: var(--control-min-height, 2rem);
37
32
  cursor: pointer;
38
33
  user-select: none;
39
34
  }
40
35
 
41
36
  /* button */
42
- button[data-fray-component="button"],
43
- th[data-fray-component="table-header-cell"] > [data-part="sort"],
44
- th[data-fray-component="table-header-cell"] > [data-part="filter-toggle"],
45
- fray-tab-line > [data-part="tab"],
46
- fieldset[data-fray-component="toggle"] [data-part="option"] {
37
+ button,
38
+ th[aria-sort] > [data-part="sort"],
39
+ th[aria-sort] > [data-part="filter-toggle"],
40
+ fray-tab-line > button[role="tab"],
41
+ fieldset:has(> [data-part="options"]) [role="radio"] {
47
42
  box-sizing: border-box;
48
- background: var(--fray-button-background, var(--button-background));
49
- border: var(--fray-button-border, var(--button-border));
50
- box-shadow: var(--fray-button-shadow, var(--button-shadow));
51
- color: var(--fray-button-color, var(--button-color));
52
43
  cursor: default;
53
44
  user-select: none;
54
45
  }
55
46
 
56
- /* button:hover */
57
- button[data-fray-component="button"]:hover,
58
- th[data-fray-component="table-header-cell"] > [data-part="sort"]:hover,
59
- th[data-fray-component="table-header-cell"] > [data-part="filter-toggle"]:hover,
60
- fray-tab-line > [data-part="tab"]:hover,
61
- fieldset[data-fray-component="toggle"] [data-part="option"]:hover {
62
- background: var(--fray-button-background-hover, var(--button-background-hover));
63
- box-shadow: var(--fray-button-shadow, var(--button-shadow));
64
- }
65
-
66
- /* button:focus-visible */
67
- button[data-fray-component="button"]:focus-visible,
68
- th[data-fray-component="table-header-cell"] > [data-part="sort"]:focus-visible,
69
- th[data-fray-component="table-header-cell"] > [data-part="filter-toggle"]:focus-visible,
70
- fray-tab-line > [data-part="tab"]:focus-visible,
71
- fieldset[data-fray-component="toggle"] [data-part="option"]:focus-visible {
72
- outline: 2px solid transparent;
73
- outline-offset: 1px;
74
- border: 1px solid var(--fray-color-focus, var(--ui-accent-color));
75
- box-shadow: var(--fray-focus-ring, 0 0 0 2px var(--ui-accent-color-highlight));
76
- }
77
-
78
47
  /* button:disabled */
79
- button[data-fray-component="button"]:disabled,
80
- th[data-fray-component="table-header-cell"] > [data-part="sort"]:disabled,
81
- th[data-fray-component="table-header-cell"] > [data-part="filter-toggle"]:disabled,
82
- fray-tab-line > [data-part="tab"]:disabled,
83
- fieldset[data-fray-component="toggle"] [data-part="option"]:disabled {
84
- background: var(--fray-button-background-disabled, var(--button-background-disabled));
85
- border: var(--button-border-disabled, var(--fray-button-border));
86
- color: var(--fray-input-color-disabled, var(--ui-input-text-color-disabled));
48
+ button:disabled,
49
+ th[aria-sort] > [data-part="sort"]:disabled,
50
+ th[aria-sort] > [data-part="filter-toggle"]:disabled,
51
+ fray-tab-line > button[role="tab"]:disabled,
52
+ fieldset:has(> [data-part="options"]) [role="radio"]:disabled {
87
53
  cursor: not-allowed;
88
54
  pointer-events: none;
89
55
  }
90
56
 
57
+ /* labeledinput */
58
+ fray-color-picker,
59
+ fray-dropdown,
60
+ fray-textbox,
61
+ fray-theme-picker {
62
+ display: flex;
63
+ flex-flow: row nowrap;
64
+ align-items: center;
65
+ gap: .5em;
66
+ }
67
+
91
68
  /* inputline */
92
- fray-checkbox,
93
- fray-checkbox > [data-part="control"],
94
69
  fray-color-picker,
95
70
  fray-color-picker > select,
96
71
  fray-dropdown,
97
72
  fray-dropdown > select,
98
- fray-list-view > [data-part="list"] > [data-part="row"],
99
- fray-quad-checkbox,
100
- fray-quad-checkbox > [data-part="control"],
73
+ fray-list-view > [role="listbox"] > [role="option"],
101
74
  fray-textbox,
102
75
  fray-textbox > input,
103
76
  fray-theme-picker,
104
- fray-theme-picker > select,
105
- fray-tri-checkbox,
106
- fray-tri-checkbox > [data-part="control"] {
77
+ fray-theme-picker > select {
107
78
  display: flex;
108
79
  flex-flow: row nowrap;
109
80
  position: relative;
110
- line-height: var(--fray-line-height, 1.25);
111
- font-size: var(--fray-font-size, var(--ui-font-size));
112
- min-height: var(--fray-control-min-height, 2rem);
113
- color: var(--fray-ui-color, var(--ui-text-color));
114
- border-radius: var(--fray-radius-md, var(--ui-border-radius));
81
+ min-height: var(--control-min-height, 2rem);
115
82
  box-sizing: border-box;
116
83
  }
117
84
 
118
85
  /* input */
119
- fray-checkbox > [data-part="control"],
120
86
  fray-color-picker > select,
121
87
  fray-dropdown > select,
122
- fray-quad-checkbox > [data-part="control"],
123
88
  fray-textbox > input,
124
- fray-theme-picker > select,
125
- fray-tri-checkbox > [data-part="control"] {
126
- background: var(--fray-input-background, var(--ui-input-bg));
127
- color: var(--fray-input-color, var(--fray-ui-color, var(--ui-text-color)));
128
- padding: var(--ui-padding-v, 0.25rem) var(--ui-padding-h, 0.5rem);
89
+ fray-theme-picker > select {
129
90
  pointer-events: all;
130
- border: var(--fray-input-border, var(--ui-input-border));
131
91
  width: var(--input-width, 15rem);
132
- box-shadow: var(--fray-input-shadow, var(--input-shadow, none));
133
92
  box-sizing: border-box;
134
93
  white-space: nowrap;
135
94
  }
136
95
 
137
- /* input:focus-visible */
138
- fray-checkbox > [data-part="control"]:focus-visible,
139
- fray-color-picker > select:focus-visible,
140
- fray-dropdown > select:focus-visible,
141
- fray-quad-checkbox > [data-part="control"]:focus-visible,
142
- fray-textbox > input:focus-visible,
143
- fray-theme-picker > select:focus-visible,
144
- fray-tri-checkbox > [data-part="control"]:focus-visible {
145
- outline: 2px solid transparent;
146
- outline-offset: 1px;
147
- border-color: var(--fray-color-focus, var(--ui-accent-color));
148
- box-shadow: var(--fray-focus-ring, 0 0 0 2px var(--ui-accent-color-highlight));
149
- }
150
-
151
- /* input:disabled */
152
- fray-checkbox > [data-part="control"]:disabled,
153
- fray-color-picker > select:disabled,
154
- fray-dropdown > select:disabled,
155
- fray-quad-checkbox > [data-part="control"]:disabled,
156
- fray-textbox > input:disabled,
157
- fray-theme-picker > select:disabled,
158
- fray-tri-checkbox > [data-part="control"]:disabled {
159
- background: var(--fray-input-background-disabled, var(--ui-input-bg-disabled));
160
- border-color: var(--fray-color-border, var(--ui-input-border-disabled));
161
- color: var(--fray-input-color-disabled, var(--ui-input-text-color-disabled));
162
- cursor: not-allowed;
163
- }
164
-
165
- /* disabled */
166
- fray-checkbox[data-disabled],
167
- fray-color-picker[data-disabled],
168
- fray-dropdown[data-disabled],
169
- fray-quad-checkbox[data-disabled],
170
- fray-textbox[data-disabled],
171
- fray-theme-picker[data-disabled],
172
- fray-tri-checkbox[data-disabled] {
173
- border-color: var(--fray-color-border, var(--ui-input-border-disabled));
174
- color: var(--fray-input-color-disabled, var(--ui-input-text-color-disabled));
175
- }
176
-
177
- /* labeledinput */
178
- fray-color-picker,
179
- fray-dropdown,
180
- fray-textbox,
181
- fray-theme-picker {
182
- display: flex;
183
- flex-flow: row nowrap;
184
- align-items: center;
185
- gap: .5em;
186
- }
187
-
188
- /* label */
189
- fray-color-picker > label,
190
- fray-dropdown > label,
191
- fray-textbox > label,
192
- fray-theme-picker > label {
193
- color: var(--fray-ui-color, var(--ui-text-color));
194
- font-size: var(--fray-font-size, var(--ui-font-size));
195
- }
196
-
197
96
  /* after */
198
97
  fray-placeholder::after {
199
98
  content: "";
@@ -215,94 +114,90 @@ fray-placeholder::after {
215
114
  animation: fray-placeholder-progress 0.8s linear infinite;
216
115
  background-repeat: repeat;
217
116
  background-size: 2rem 2rem;
218
- background-image: var(--fray-working-background-image);
117
+ background-image: var(--working-background-image);
219
118
  border: 0 solid transparent;
220
119
  border-radius: inherit;
221
120
  box-sizing: border-box;
222
121
  }
223
122
 
224
123
  /* noselect */
225
- th[data-fray-component="table-header-cell"] {
124
+ th[aria-sort] {
226
125
  user-select: var(--noselect-user-select);
227
126
  cursor: var(--noselect-cursor);
228
127
  }
229
128
 
230
- /* error */
231
- fray-dropdown[data-error],
232
- fray-textbox[data-error] {
233
- color: var(--fray-color-error, var(--error-color));
234
- }
235
-
236
129
  /* inputlike */
237
130
  fray-list-view {
238
- background: var(--fray-input-background, var(--ui-input-bg));
239
- color: var(--fray-input-color, var(--fray-ui-color, var(--ui-text-color)));
240
- padding: var(--ui-padding-v, 0.25rem) var(--ui-padding-h, 0.5rem);
241
131
  pointer-events: all;
242
- border: var(--fray-input-border, var(--ui-input-border));
243
- box-shadow: var(--fray-input-shadow, var(--input-shadow, none));
244
132
  box-sizing: border-box;
245
133
  white-space: nowrap;
246
- border-radius: var(--fray-radius-md, var(--ui-border-radius));
247
- }
248
-
249
- /* panel */
250
- fray-panel,
251
- aside[data-fray-component="sidebar"] {
252
- background: var(--fray-panel-background, var(--panel-bg));
253
- border: var(--fray-panel-border, var(--panel-border));
254
- border-radius: var(--fray-panel-radius, var(--panel-radius));
255
- box-shadow: var(--fray-panel-shadow, var(--panel-shadow));
256
- color: var(--fray-panel-color, var(--panel-color));
257
- }
258
-
259
- /* sectionheader */
260
- fray-panel > [data-part="header"],
261
- aside[data-fray-component="sidebar"] > [data-part="header"] {
262
- box-shadow: var(--fray-section-header-shadow, var(--fray-header-shadow, var(--sectionheader-shadow)));
263
- background: var(--fray-section-header-background, var(--fray-header-background, var(--sectionheader-bg)));
264
- color: var(--fray-section-header-color, var(--fray-header-color, var(--sectionheader-color)));
265
- border: var(--fray-section-header-border, var(--fray-header-border, 0 solid transparent));
266
134
  }
267
135
 
268
- /* toolbar */
269
- fray-toolbar {
270
- background: var(--fray-toolbar-background, var(--toolbar-bg));
271
- border: var(--fray-toolbar-border, var(--toolbar-border));
272
- border-radius: var(--toolbar-radius, var(--fray-radius-md));
273
- box-shadow: var(--fray-toolbar-shadow, var(--toolbar-shadow));
274
- color: var(--fray-toolbar-color, var(--toolbar-color));
275
- }
276
-
277
- button[data-fray-component="button"] {
136
+ button {
278
137
  font-family: inherit;
279
138
  }
280
139
 
281
- fray-checkbox > [data-part="control"] {
140
+ fray-check-box {
141
+ display: inline-block;
142
+ }
143
+
144
+ fray-check-box > label {
282
145
  display: inline-flex;
283
146
  align-items: center;
284
147
  gap: 0.35em;
285
- width: auto;
286
- font-family: inherit;
148
+ cursor: pointer;
149
+ }
150
+
151
+ fray-check-box[data-disabled] > label {
152
+ cursor: not-allowed;
287
153
  }
288
154
 
289
- fray-checkbox [data-part="symbol"] {
155
+ fray-check-box input[type="checkbox"] {
156
+ position: absolute;
157
+ width: 1px;
158
+ height: 1px;
159
+ padding: 0;
160
+ margin: -1px;
161
+ overflow: hidden;
162
+ clip: rect(0 0 0 0);
163
+ white-space: nowrap;
164
+ border: 0;
165
+ font: inherit;
166
+ font-size: var(--ui-font-size, inherit);
167
+ }
168
+
169
+ fray-check-box input[type="checkbox"] + .checkboxshell {
170
+ position: relative;
290
171
  display: inline-grid;
291
172
  width: 1em;
292
173
  height: 1em;
174
+ flex: 0 0 1em;
175
+ overflow: hidden;
176
+ box-sizing: border-box;
293
177
  line-height: 1;
294
178
  place-items: center;
295
- color: var(--fray-checkbox-symbol-color, currentColor);
296
- background: var(--fray-checkbox-box-background, transparent);
297
- border: var(--fray-checkbox-box-border, var(--cbx-o-border));
298
- border-radius: var(--cbx-border-radius, var(--fray-radius-sm));
179
+ color: var(--input-color, var(--ui-text-color, currentColor));
180
+ background: var(--checkbox-box-background, var(--ui-input-bg, transparent));
181
+ border: var(--checkbox-box-border, var(--cbx-o-border, 1px solid currentColor));
182
+ border-radius: var(--cbx-border-radius, var(--radius-sm, 0.2rem));
183
+ font-family: inherit;
184
+ font-size: 1em;
185
+ user-select: none;
299
186
  }
300
187
 
301
- fray-checkbox [data-part="control"][aria-checked="true"] [data-part="symbol"] {
302
- background: var(
303
- --fray-checkbox-box-background-checked,
304
- var(--fray-selection-background)
305
- );
188
+ fray-check-box input[type="checkbox"]:checked + .checkboxshell {
189
+ color: var(--checkbox-symbol-color, var(--selection-color, currentColor));
190
+ background: var(--checkbox-box-background-checked,
191
+ var(--selection-background, var(--ui-accent-color, Highlight)));
192
+ }
193
+
194
+ fray-check-box input[type="checkbox"]:focus-visible + .checkboxshell {
195
+ outline: 2px solid var(--focus-color, var(--ui-accent-color, Highlight));
196
+ outline-offset: 1px;
197
+ }
198
+
199
+ fray-check-box input[type="checkbox"]:disabled + .checkboxshell {
200
+ opacity: 0.6;
306
201
  }
307
202
 
308
203
  fray-color-picker {
@@ -315,7 +210,6 @@ fray-color-picker {
315
210
 
316
211
  fray-data-table {
317
212
  overflow: auto;
318
- color: var(--ui-text-color);
319
213
  }
320
214
 
321
215
  fray-data-table > table {
@@ -323,7 +217,7 @@ fray-data-table {
323
217
  border-collapse: collapse;
324
218
  }
325
219
 
326
- fray-data-table thead:has([data-fray-component="filter-panel"]) {
220
+ fray-data-table thead:has([aria-expanded="true"]) {
327
221
  position: relative;
328
222
  z-index: 1100;
329
223
  }
@@ -339,32 +233,6 @@ fray-data-table {
339
233
  user-select: none;
340
234
  }
341
235
 
342
- fray-data-table tbody tr:nth-child(odd) {
343
- background: var(--fray-table-row-background, transparent);
344
- }
345
-
346
- fray-data-table tbody tr:nth-child(even) {
347
- background: var(--fray-table-row-alt-background, transparent);
348
- }
349
-
350
- fray-data-table tbody tr[data-fray-selectable-row]:hover {
351
- background: var(--fray-row-hover-background, var(--button-background-hover));
352
- }
353
-
354
- fray-data-table tbody tr[data-fray-selectable-row]:focus-visible {
355
- outline: 2px solid var(--fray-color-focus, var(--ui-accent-color));
356
- outline-offset: -2px;
357
- }
358
-
359
- fray-data-table tbody tr[data-fray-selectable-row][aria-selected="true"] {
360
- color: var(--fray-selection-color, var(--toggle-selected-text));
361
- background: var(--fray-selection-background, var(--toggle-selected-bg));
362
- }
363
-
364
- fray-data-table > [data-part="error"] {
365
- color: var(--error-color);
366
- }
367
-
368
236
  fray-placeholder {
369
237
  display: block;
370
238
  min-width: 3rem;
@@ -381,33 +249,18 @@ fray-placeholder {
381
249
  to { background-position: 2rem 0; }
382
250
  }
383
251
 
384
- th[data-fray-component="table-header-cell"] {
252
+ th[aria-sort] {
385
253
  position: relative;
386
254
  text-align: start;
387
- color: var(
388
- --fray-table-header-color,
389
- var(--fray-section-header-color, var(--fray-header-color))
390
- );
391
- background: var(
392
- --fray-table-header-background,
393
- var(--fray-section-header-background, var(--fray-header-background))
394
- );
395
- border-block-end: var(--fray-section-header-border, var(--fray-header-border));
396
- box-shadow: var(--fray-section-header-shadow, var(--fray-header-shadow));
397
- }
398
-
399
- th[data-fray-component="table-header-cell"] > [data-part="sort"],
400
- th[data-fray-component="table-header-cell"] > [data-part="filter-toggle"] {
255
+ }
256
+
257
+ th[aria-sort] > [data-part="sort"],
258
+ th[aria-sort] > [data-part="filter-toggle"] {
401
259
  width: auto;
402
260
  font-family: inherit;
403
- color: inherit;
404
- background: var(
405
- --fray-table-header-button-background,
406
- var(--fray-button-background)
407
- );
408
261
  }
409
262
 
410
- th[data-fray-component="table-header-cell"] > [data-part="filter-toggle"] {
263
+ th[aria-sort] > [data-part="filter-toggle"] {
411
264
  margin-inline-start: var(--ui-padding-h);
412
265
  font-size: 0.75em;
413
266
  }
@@ -422,109 +275,64 @@ fray-filter-panel {
422
275
  padding: var(--ui-padding);
423
276
  flex-flow: column nowrap;
424
277
  align-items: stretch;
425
- color: var(--panel-color);
426
- background: var(--panel-bg);
427
- border: var(--panel-border);
428
- border-radius: var(--panel-radius);
429
- box-shadow: var(--panel-shadow);
430
278
  overflow-y: auto;
431
279
  }
432
280
 
433
- div[data-fray-component="description-item"] {
281
+ div:has(> dt + dd) {
434
282
  display: grid;
435
283
  grid-template-columns: minmax(7rem, 0.7fr) minmax(0, 1.3fr);
436
284
  gap: var(--spacing-small, 0.5rem);
437
285
  padding-block: var(--spacing-small, 0.5rem);
438
- border-block-end: 1px solid var(--ui-border-color);
439
- }
440
-
441
- div[data-fray-component="description-item"] > dt {
442
- color: var(--ui-muted-text-color, var(--ui-text-color));
443
- font-weight: 600;
444
286
  }
445
287
 
446
- div[data-fray-component="description-item"] > dd {
288
+ div:has(> dt + dd) > dd {
447
289
  min-width: 0;
448
290
  margin: 0;
449
291
  overflow-wrap: anywhere;
450
292
  }
451
293
 
452
294
  @media (max-width: 36rem) {
453
- div[data-fray-component="description-item"] {
295
+ div:has(> dt + dd) {
454
296
  grid-template-columns: minmax(0, 1fr);
455
297
  gap: 0.15rem;
456
298
  }
457
299
  }
458
300
 
459
- dl[data-fray-component="description-list"] {
301
+ dl:has(> div > dt + dd) {
460
302
  display: grid;
461
303
  margin: 0;
462
304
  }
463
305
 
464
- dialog[data-fray-component="dialog"] {
306
+ dialog {
465
307
  width: min(38rem, calc(100vw - 2rem));
466
308
  max-height: min(42rem, calc(100dvh - 2rem));
467
309
  padding: 0;
468
- color: var(--fray-panel-color, var(--ui-text-color));
469
- background: var(--fray-panel-background, var(--panel-bg));
470
- border: var(--fray-panel-border, var(--panel-border));
471
- border-radius: var(--fray-panel-radius, var(--panel-radius));
472
- box-shadow: var(--fray-dialog-shadow, var(--fray-panel-shadow));
473
- }
474
-
475
- dialog[data-fray-component="dialog"]::backdrop {
476
- background: var(--fray-dialog-backdrop-background);
477
310
  }
478
311
 
479
- dialog[data-fray-component="dialog"] > [data-part] {
312
+ dialog > header,
313
+ dialog > p,
314
+ dialog > [data-part="content"],
315
+ dialog > footer {
480
316
  padding: var(--panel-padding, 0.75rem);
481
317
  }
482
318
 
483
- dialog[data-fray-component="dialog"] > [data-part="header"] {
484
- color: var(
485
- --fray-dialog-header-color,
486
- var(--fray-section-header-color, var(--fray-header-color))
487
- );
488
- background: var(
489
- --fray-dialog-header-background,
490
- var(--fray-section-header-background, var(--fray-header-background))
491
- );
492
- border-block-end: var(
493
- --fray-section-header-border,
494
- var(--fray-header-border)
495
- );
496
- }
497
-
498
- dialog[data-fray-component="dialog"] > [data-part="header"] h2,
499
- dialog[data-fray-component="dialog"] > [data-part="description"] {
319
+ dialog > header h2,
320
+ dialog > p {
500
321
  margin: 0;
501
322
  }
502
323
 
503
- dialog[data-fray-component="dialog"] > [data-part="content"] {
324
+ dialog > [data-part="content"] {
504
325
  overflow: auto;
505
326
  }
506
327
 
507
- dialog[data-fray-component="dialog"] > [data-part="actions"] {
328
+ dialog > footer {
508
329
  display: flex;
509
330
  justify-content: flex-end;
510
331
  gap: var(--spacing-small, 0.5rem);
511
- border-block-start: 1px solid var(--ui-border-color);
512
- }
513
-
514
- @media (prefers-reduced-motion: no-preference) {
515
- dialog[data-fray-component="dialog"][open] {
516
- animation: fray-dialog-enter 120ms ease-out;
517
- }
518
- }
519
-
520
- @keyframes fray-dialog-enter {
521
- from {
522
- transform: translateY(0.4rem);
523
- }
524
332
  }
525
333
 
526
334
  @media (forced-colors: active) {
527
- dialog[data-fray-component="dialog"] {
335
+ dialog {
528
336
  border: 2px solid CanvasText;
529
337
  }
530
338
  }
@@ -540,39 +348,23 @@ fray-list-view {
540
348
  min-height: 0;
541
349
  }
542
350
 
543
- fray-list-view > [data-part="list"],
351
+ fray-list-view > [role="listbox"],
544
352
  fray-list-view > [data-part="loading"] {
545
353
  display: flex;
546
354
  flex-direction: column;
547
355
  }
548
356
 
549
- fray-list-view > [data-part="list"] > [data-part="row"] {
357
+ fray-list-view > [role="listbox"] > [role="option"] {
550
358
  cursor: default;
551
359
  user-select: none;
552
360
  }
553
361
 
554
- fray-list-view > [data-part="list"] > [data-part="row"]:hover,
555
- fray-list-view > [data-part="list"] > [data-part="row"]:focus-visible {
556
- background: var(--button-background-hover);
557
- outline: 2px solid var(--ui-accent-color);
558
- outline-offset: -2px;
559
- }
560
-
561
- fray-list-view > [data-part="list"] > [data-part="row"][aria-selected="true"] {
562
- color: var(--toggle-selected-text);
563
- background: var(--toggle-selected-bg);
564
- }
565
-
566
- fray-list-view > [data-part="empty"],
567
- fray-list-view > [data-part="error"] {
362
+ fray-list-view > [role="status"],
363
+ fray-list-view > [role="alert"] {
568
364
  margin: 0;
569
365
  padding: var(--ui-padding);
570
366
  }
571
367
 
572
- fray-list-view > [data-part="error"] {
573
- color: var(--error-color);
574
- }
575
-
576
368
  fray-panel {
577
369
  display: flex;
578
370
  flex-direction: column;
@@ -580,24 +372,11 @@ fray-panel {
580
372
  flex: 0 0 auto;
581
373
  }
582
374
 
583
- fray-panel > [data-part="header"] h2 {
375
+ fray-panel > header h2 {
584
376
  margin: 0;
585
377
  font: inherit;
586
378
  }
587
379
 
588
- fray-panel > [data-part="header"] {
589
- background: var(
590
- --fray-panel-header-background,
591
- var(--fray-section-header-background, var(--fray-header-background))
592
- );
593
- color: var(
594
- --fray-panel-header-color,
595
- var(--fray-section-header-color, var(--fray-header-color))
596
- );
597
- border: var(--fray-section-header-border, var(--fray-header-border));
598
- box-shadow: var(--fray-section-header-shadow, var(--fray-header-shadow));
599
- }
600
-
601
380
  fray-panel > [data-part="content"] {
602
381
  display: flex;
603
382
  flex: 1;
@@ -625,16 +404,9 @@ fray-progress-bar {
625
404
  gap: var(--spacing-medium, 1rem);
626
405
  }
627
406
 
628
- fray-progress-bar > [data-part="label-line"] > label {
629
- font-weight: 600;
630
- }
631
-
632
407
  fray-progress-bar > progress {
633
408
  width: 100%;
634
409
  min-height: 0.8rem;
635
- color: var(--fray-progress-value-background, var(--ui-accent-color));
636
- background: var(--fray-progress-track-background, transparent);
637
- accent-color: var(--fray-color-primary, var(--ui-accent-color));
638
410
  }
639
411
 
640
412
  @media (forced-colors: active) {
@@ -643,34 +415,70 @@ fray-progress-bar {
643
415
  }
644
416
  }
645
417
 
646
- fray-quad-checkbox > [data-part="control"] {
418
+ fray-quad-checkbox {
419
+ display: inline-block;
420
+ }
421
+
422
+ fray-quad-checkbox > label {
647
423
  display: inline-flex;
648
424
  align-items: center;
649
425
  gap: 0.35em;
650
- width: auto;
651
- font-family: inherit;
426
+ cursor: pointer;
427
+ }
428
+
429
+ fray-quad-checkbox[data-disabled] > label {
430
+ cursor: not-allowed;
431
+ }
432
+
433
+ fray-quad-checkbox input[type="checkbox"] {
434
+ position: absolute;
435
+ width: 1px;
436
+ height: 1px;
437
+ padding: 0;
438
+ margin: -1px;
439
+ overflow: hidden;
440
+ clip: rect(0 0 0 0);
441
+ white-space: nowrap;
442
+ border: 0;
443
+ font: inherit;
444
+ font-size: var(--ui-font-size, inherit);
652
445
  }
653
446
 
654
- fray-quad-checkbox [data-part="symbol"] {
447
+ fray-quad-checkbox input[type="checkbox"] + .checkboxshell {
448
+ position: relative;
655
449
  display: inline-grid;
656
450
  width: 1em;
657
451
  height: 1em;
452
+ flex: 0 0 1em;
453
+ overflow: hidden;
454
+ box-sizing: border-box;
658
455
  line-height: 1;
659
456
  place-items: center;
660
- color: var(--fray-checkbox-symbol-color, currentColor);
661
- background: var(--fray-checkbox-box-background, transparent);
662
- border: var(--fray-checkbox-box-border, var(--cbx-o-border));
663
- border-radius: var(--cbx-border-radius, var(--fray-radius-sm));
457
+ color: var(--input-color, var(--ui-text-color, currentColor));
458
+ background: var(--checkbox-box-background, var(--ui-input-bg, transparent));
459
+ border: var(--checkbox-box-border, var(--cbx-o-border, 1px solid currentColor));
460
+ border-radius: var(--cbx-border-radius, var(--radius-sm, 0.2rem));
461
+ font-family: inherit;
462
+ font-size: 1em;
463
+ user-select: none;
664
464
  }
665
465
 
666
- fray-quad-checkbox [data-part="control"][aria-checked="true"] [data-part="symbol"] {
667
- background: var(
668
- --fray-checkbox-box-background-checked,
669
- var(--fray-selection-background)
670
- );
466
+ fray-quad-checkbox input[type="checkbox"]:checked + .checkboxshell {
467
+ color: var(--checkbox-symbol-color, var(--selection-color, currentColor));
468
+ background: var(--checkbox-box-background-checked,
469
+ var(--selection-background, var(--ui-accent-color, Highlight)));
671
470
  }
672
471
 
673
- aside[data-fray-component="sidebar"] {
472
+ fray-quad-checkbox input[type="checkbox"]:focus-visible + .checkboxshell {
473
+ outline: 2px solid var(--focus-color, var(--ui-accent-color, Highlight));
474
+ outline-offset: 1px;
475
+ }
476
+
477
+ fray-quad-checkbox input[type="checkbox"]:disabled + .checkboxshell {
478
+ opacity: 0.6;
479
+ }
480
+
481
+ aside {
674
482
  display: flex;
675
483
  flex-direction: column;
676
484
  min-width: 0;
@@ -678,17 +486,17 @@ aside[data-fray-component="sidebar"] {
678
486
  overflow: hidden;
679
487
  }
680
488
 
681
- aside[data-fray-component="sidebar"] > [data-part="header"],
682
- aside[data-fray-component="sidebar"] > [data-part="toolbar"] {
489
+ aside > header,
490
+ aside > [data-part="toolbar"] {
683
491
  flex: 0 0 auto;
684
492
  }
685
493
 
686
- aside[data-fray-component="sidebar"] > [data-part="header"] h2 {
494
+ aside > header h2 {
687
495
  margin: 0;
688
496
  font: inherit;
689
497
  }
690
498
 
691
- aside[data-fray-component="sidebar"] > [data-part="content"] {
499
+ aside > [data-part="content"] {
692
500
  flex: 1 1 auto;
693
501
  min-width: 0;
694
502
  min-height: 0;
@@ -734,19 +542,6 @@ fray-tab-line {
734
542
  display: flex;
735
543
  flex-flow: row wrap;
736
544
  padding-top: 3px;
737
- background: var(--fray-tabline-background, var(--tabline-bg));
738
- }
739
-
740
- fray-tab-line > [data-part="tab"] {
741
- background: var(--fray-tab-button-background, var(--fray-button-background));
742
- border-radius: var(--fray-radius-md, var(--ui-border-radius)) var(--fray-radius-md, var(--ui-border-radius)) 0 0;
743
- }
744
-
745
- fray-tab-line > [data-part="tab"][aria-selected="true"] {
746
- background: var(
747
- --fray-tab-button-background-active,
748
- var(--fray-tab-active-background, var(--tab-bg-active))
749
- );
750
545
  }
751
546
 
752
547
  fray-tab-panel {
@@ -755,9 +550,6 @@ fray-tab-panel {
755
550
  width: 100%;
756
551
  min-height: 0;
757
552
  overflow: hidden;
758
- background: var(--fray-panel-background, var(--panel-bg, transparent));
759
- border-radius: var(--fray-panel-radius, var(--panel-radius));
760
- box-shadow: var(--fray-panel-shadow, var(--panel-shadow, none));
761
553
  }
762
554
 
763
555
  fray-tab-panel > [data-part="content"] {
@@ -765,16 +557,14 @@ fray-tab-panel {
765
557
  flex-direction: column;
766
558
  flex: 1;
767
559
  overflow: auto;
768
- background: var(--fray-panel-background, var(--panel-bg, transparent));
769
560
  }
770
561
 
771
562
  fray-textbox input {
772
563
  cursor: text;
773
564
  }
774
565
 
775
- fray-textbox > [data-part="error"] {
566
+ fray-textbox > [role="alert"] {
776
567
  margin: 0;
777
- color: var(--fray-color-error, var(--error-color));
778
568
  }
779
569
 
780
570
  fray-theme-picker {
@@ -785,38 +575,17 @@ fray-theme-picker {
785
575
  min-width: 8rem;
786
576
  }
787
577
 
788
- fieldset[data-fray-component="toggle"] {
578
+ fieldset:has(> [data-part="options"]) {
789
579
  margin: 0;
790
580
  padding: 0;
791
581
  border: 0;
792
582
  }
793
583
 
794
- fieldset[data-fray-component="toggle"] > [data-part="options"] {
584
+ fieldset:has(> [data-part="options"]) > [data-part="options"] {
795
585
  display: flex;
796
586
  padding: 0;
797
587
  }
798
588
 
799
- fieldset[data-fray-component="toggle"] [data-part="option"] {
800
- background: var(--fray-toggle-button-background, var(--fray-button-background));
801
- border-radius: 0;
802
- }
803
-
804
- fieldset[data-fray-component="toggle"] [data-part="option"]:first-child {
805
- border-radius: var(--ui-border-radius) 0 0 var(--ui-border-radius);
806
- }
807
-
808
- fieldset[data-fray-component="toggle"] [data-part="option"]:last-child {
809
- border-radius: 0 var(--ui-border-radius) var(--ui-border-radius) 0;
810
- }
811
-
812
- fieldset[data-fray-component="toggle"] [data-part="option"][aria-checked="true"] {
813
- background: var(
814
- --fray-toggle-button-background-checked,
815
- var(--fray-selection-background, var(--toggle-selected-bg))
816
- );
817
- color: var(--fray-selection-color, var(--toggle-selected-text));
818
- }
819
-
820
589
  fray-toolbar {
821
590
  display: flex;
822
591
  flex-wrap: wrap;
@@ -838,12 +607,12 @@ fray-tree-view {
838
607
  overflow: auto;
839
608
  }
840
609
 
841
- fray-tree-view > [data-part="tree"] {
610
+ fray-tree-view > [role="tree"] {
842
611
  display: grid;
843
612
  align-content: start;
844
613
  }
845
614
 
846
- fray-tree-view [data-part="item"] {
615
+ fray-tree-view [role="treeitem"] {
847
616
  display: flex;
848
617
  align-items: flex-start;
849
618
  gap: 0.35rem;
@@ -854,20 +623,6 @@ fray-tree-view {
854
623
  user-select: none;
855
624
  }
856
625
 
857
- fray-tree-view [data-part="item"]:hover {
858
- background: var(--button-background-hover);
859
- }
860
-
861
- fray-tree-view [data-part="item"]:focus-visible {
862
- outline: 2px solid var(--ui-accent-color);
863
- outline-offset: -2px;
864
- }
865
-
866
- fray-tree-view [data-part="item"][aria-selected="true"] {
867
- color: var(--toggle-selected-text);
868
- background: var(--toggle-selected-bg);
869
- }
870
-
871
626
  fray-tree-view [data-part="expander"] {
872
627
  flex: 0 0 1rem;
873
628
  text-align: center;
@@ -882,41 +637,77 @@ fray-tree-view {
882
637
  overflow-wrap: anywhere;
883
638
  }
884
639
 
885
- fray-tree-view > [data-part="empty"] {
640
+ fray-tree-view > [role="status"] {
886
641
  margin: 0;
887
642
  padding: var(--ui-padding, 0.75rem);
888
643
  }
889
644
 
890
645
  @media (forced-colors: active) {
891
- fray-tree-view [data-part="item"][aria-selected="true"] {
646
+ fray-tree-view [role="treeitem"][aria-selected="true"] {
892
647
  outline: 2px solid Highlight;
893
648
  forced-color-adjust: auto;
894
649
  }
895
650
  }
896
651
 
897
- fray-tri-checkbox > [data-part="control"] {
652
+ fray-tri-checkbox {
653
+ display: inline-block;
654
+ }
655
+
656
+ fray-tri-checkbox > label {
898
657
  display: inline-flex;
899
658
  align-items: center;
900
659
  gap: 0.35em;
901
- width: auto;
902
- font-family: inherit;
660
+ cursor: pointer;
661
+ }
662
+
663
+ fray-tri-checkbox[data-disabled] > label {
664
+ cursor: not-allowed;
665
+ }
666
+
667
+ fray-tri-checkbox input[type="checkbox"] {
668
+ position: absolute;
669
+ width: 1px;
670
+ height: 1px;
671
+ padding: 0;
672
+ margin: -1px;
673
+ overflow: hidden;
674
+ clip: rect(0 0 0 0);
675
+ white-space: nowrap;
676
+ border: 0;
677
+ font: inherit;
678
+ font-size: var(--ui-font-size, inherit);
903
679
  }
904
680
 
905
- fray-tri-checkbox [data-part="symbol"] {
681
+ fray-tri-checkbox input[type="checkbox"] + .checkboxshell {
682
+ position: relative;
906
683
  display: inline-grid;
907
684
  width: 1em;
908
685
  height: 1em;
686
+ flex: 0 0 1em;
687
+ overflow: hidden;
688
+ box-sizing: border-box;
909
689
  line-height: 1;
910
690
  place-items: center;
911
- color: var(--fray-checkbox-symbol-color, currentColor);
912
- background: var(--fray-checkbox-box-background, transparent);
913
- border: var(--fray-checkbox-box-border, var(--cbx-o-border));
914
- border-radius: var(--cbx-border-radius, var(--fray-radius-sm));
691
+ color: var(--input-color, var(--ui-text-color, currentColor));
692
+ background: var(--checkbox-box-background, var(--ui-input-bg, transparent));
693
+ border: var(--checkbox-box-border, var(--cbx-o-border, 1px solid currentColor));
694
+ border-radius: var(--cbx-border-radius, var(--radius-sm, 0.2rem));
695
+ font-family: inherit;
696
+ font-size: 1em;
697
+ user-select: none;
698
+ }
699
+
700
+ fray-tri-checkbox input[type="checkbox"]:checked + .checkboxshell {
701
+ color: var(--checkbox-symbol-color, var(--selection-color, currentColor));
702
+ background: var(--checkbox-box-background-checked,
703
+ var(--selection-background, var(--ui-accent-color, Highlight)));
704
+ }
705
+
706
+ fray-tri-checkbox input[type="checkbox"]:focus-visible + .checkboxshell {
707
+ outline: 2px solid var(--focus-color, var(--ui-accent-color, Highlight));
708
+ outline-offset: 1px;
915
709
  }
916
710
 
917
- fray-tri-checkbox [data-part="control"][aria-checked="true"] [data-part="symbol"] {
918
- background: var(
919
- --fray-checkbox-box-background-checked,
920
- var(--fray-selection-background)
921
- );
711
+ fray-tri-checkbox input[type="checkbox"]:disabled + .checkboxshell {
712
+ opacity: 0.6;
922
713
  }