@sylwellsoftware/fray 0.7.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +264 -204
  2. package/colors/README.md +26 -23
  3. package/colors/gray/colors.css +1 -42
  4. package/colors/green/colors.css +1 -42
  5. package/colors/iceblue/colors.css +5 -43
  6. package/colors/ocean/colors.css +1 -42
  7. package/colors/orange/colors.css +1 -42
  8. package/colors/purple/colors.css +1 -42
  9. package/colors/red/colors.css +1 -42
  10. package/colors/yellow/colors.css +1 -42
  11. package/dist/Components/Placeholder.d.ts +1 -2
  12. package/dist/Components/Placeholder.d.ts.map +1 -1
  13. package/dist/Components/component.d.ts +15 -7
  14. package/dist/Components/component.d.ts.map +1 -1
  15. package/dist/Components/data/descriptionList.d.ts +3 -1
  16. package/dist/Components/data/descriptionList.d.ts.map +1 -1
  17. package/dist/Components/data/listview/listview.d.ts +1 -2
  18. package/dist/Components/data/listview/listview.d.ts.map +1 -1
  19. package/dist/Components/data/table/DataTable.d.ts +1 -1
  20. package/dist/Components/data/table/DataTable.d.ts.map +1 -1
  21. package/dist/Components/data/table/FilterPanel.d.ts +2 -4
  22. package/dist/Components/data/table/FilterPanel.d.ts.map +1 -1
  23. package/dist/Components/data/table/TableHeader.d.ts +2 -0
  24. package/dist/Components/data/table/TableHeader.d.ts.map +1 -1
  25. package/dist/Components/data/table/TableHeaderCell.d.ts +1 -1
  26. package/dist/Components/data/table/TableHeaderCell.d.ts.map +1 -1
  27. package/dist/Components/data/treeview/treeitem.d.ts +1 -0
  28. package/dist/Components/data/treeview/treeitem.d.ts.map +1 -1
  29. package/dist/Components/data/treeview/treeview.d.ts +2 -1
  30. package/dist/Components/data/treeview/treeview.d.ts.map +1 -1
  31. package/dist/Components/dialog/dialog.d.ts +6 -2
  32. package/dist/Components/dialog/dialog.d.ts.map +1 -1
  33. package/dist/Components/layout/header.d.ts +19 -0
  34. package/dist/Components/layout/header.d.ts.map +1 -0
  35. package/dist/Components/layout/panel.d.ts +7 -3
  36. package/dist/Components/layout/panel.d.ts.map +1 -1
  37. package/dist/Components/layout/sidebar.d.ts +4 -0
  38. package/dist/Components/layout/sidebar.d.ts.map +1 -1
  39. package/dist/Components/layout/splitView.d.ts +1 -1
  40. package/dist/Components/layout/splitView.d.ts.map +1 -1
  41. package/dist/Components/layout/tabpanel/tab.d.ts +1 -0
  42. package/dist/Components/layout/tabpanel/tab.d.ts.map +1 -1
  43. package/dist/Components/layout/tabpanel/tabline.d.ts +1 -2
  44. package/dist/Components/layout/tabpanel/tabline.d.ts.map +1 -1
  45. package/dist/Components/layout/tabpanel/tabpanel.d.ts +1 -1
  46. package/dist/Components/layout/tabpanel/tabpanel.d.ts.map +1 -1
  47. package/dist/Components/lineinputs/CheckableControl.d.ts +7 -0
  48. package/dist/Components/lineinputs/CheckableControl.d.ts.map +1 -0
  49. package/dist/Components/lineinputs/LabeledInputControl.d.ts +7 -0
  50. package/dist/Components/lineinputs/LabeledInputControl.d.ts.map +1 -0
  51. package/dist/Components/lineinputs/SelectControl.d.ts +7 -0
  52. package/dist/Components/lineinputs/SelectControl.d.ts.map +1 -0
  53. package/dist/Components/lineinputs/checkbox/Checkbox.d.ts +11 -5
  54. package/dist/Components/lineinputs/checkbox/Checkbox.d.ts.map +1 -1
  55. package/dist/Components/lineinputs/checkbox/QuadCheckbox.d.ts +1 -2
  56. package/dist/Components/lineinputs/checkbox/QuadCheckbox.d.ts.map +1 -1
  57. package/dist/Components/lineinputs/checkbox/TriCheckbox.d.ts +1 -2
  58. package/dist/Components/lineinputs/checkbox/TriCheckbox.d.ts.map +1 -1
  59. package/dist/Components/lineinputs/dropdown.d.ts +7 -6
  60. package/dist/Components/lineinputs/dropdown.d.ts.map +1 -1
  61. package/dist/Components/lineinputs/label.d.ts +14 -0
  62. package/dist/Components/lineinputs/label.d.ts.map +1 -0
  63. package/dist/Components/lineinputs/radio.d.ts +20 -7
  64. package/dist/Components/lineinputs/radio.d.ts.map +1 -1
  65. package/dist/Components/lineinputs/textbox.d.ts +7 -6
  66. package/dist/Components/lineinputs/textbox.d.ts.map +1 -1
  67. package/dist/Components/lineinputs/toggle.d.ts +10 -3
  68. package/dist/Components/lineinputs/toggle.d.ts.map +1 -1
  69. package/dist/Components/menu/button.d.ts +6 -3
  70. package/dist/Components/menu/button.d.ts.map +1 -1
  71. package/dist/Components/menu/toolbar.d.ts +1 -1
  72. package/dist/Components/menu/toolbar.d.ts.map +1 -1
  73. package/dist/Components/status/progressBar.d.ts +1 -1
  74. package/dist/Components/status/progressBar.d.ts.map +1 -1
  75. package/dist/Components/theme/stylesheetPicker.d.ts +6 -7
  76. package/dist/Components/theme/stylesheetPicker.d.ts.map +1 -1
  77. package/dist/index.d.ts +3 -1
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +2539 -1839
  80. package/dist/index.js.map +1 -1
  81. package/dist/{jsx-dev-runtime-Kf1Dhu-y.js → jsx-dev-runtime-CRDpvXOH.js} +481 -472
  82. package/dist/jsx-dev-runtime-CRDpvXOH.js.map +1 -0
  83. package/dist/jsx-dev-runtime.js +1 -1
  84. package/dist/jsx-runtime.js +1 -1
  85. package/dist/routing/RouteLink.d.ts +1 -0
  86. package/dist/routing/RouteLink.d.ts.map +1 -1
  87. package/dist/routing/RouteQuery.d.ts +1 -0
  88. package/dist/routing/RouteQuery.d.ts.map +1 -1
  89. package/dist/routing/RouteScope.d.ts +1 -0
  90. package/dist/routing/RouteScope.d.ts.map +1 -1
  91. package/dist/routing/RouteValue.d.ts +1 -0
  92. package/dist/routing/RouteValue.d.ts.map +1 -1
  93. package/dist/runtime.d.ts +5 -13
  94. package/dist/runtime.d.ts.map +1 -1
  95. package/dist/styling/styleRegistry.d.ts +0 -4
  96. package/dist/styling/styleRegistry.d.ts.map +1 -1
  97. package/dist/styling/theme.d.ts +14 -2
  98. package/dist/styling/theme.d.ts.map +1 -1
  99. package/package.json +5 -6
  100. package/styles/structural.css +888 -398
  101. package/themes/README.md +30 -72
  102. package/themes/base.css +311 -0
  103. package/themes/java/theme.css +14 -423
  104. package/themes/minimal/theme.css +3 -419
  105. package/themes/shiny/theme.css +127 -508
  106. package/dist/jsx-dev-runtime-Kf1Dhu-y.js.map +0 -1
  107. package/dist/styling/baseStyleDefinitions.d.ts +0 -75
  108. package/dist/styling/baseStyleDefinitions.d.ts.map +0 -1
  109. package/themes/dark.css +0 -98
  110. package/themes/light.css +0 -98
@@ -1,158 +1,129 @@
1
1
  /* Generated by scripts/build-structural-css.mjs. Do not edit directly. */
2
2
 
3
- *, *::before, *::after {
4
- box-sizing: border-box;
5
- }
6
-
7
- @media (prefers-reduced-motion: reduce) {
8
- *, *::before, *::after {
9
- scroll-behavior: auto !important;
10
- animation-duration: 0.01ms !important;
11
- animation-iteration-count: 1 !important;
12
- transition-duration: 0.01ms !important;
13
- }
14
- }
15
-
16
- @media (forced-colors: active) {
17
- :focus-visible {
18
- outline: 2px solid Highlight !important;
19
- outline-offset: 2px !important;
20
- }
21
- }
22
-
23
- /* uiline */
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
- box-sizing: border-box;
31
- min-height: var(--control-min-height, 2rem);
32
- cursor: pointer;
33
- user-select: none;
34
- }
35
-
36
- /* button */
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"] {
42
- box-sizing: border-box;
43
- cursor: default;
44
- user-select: none;
45
- }
46
-
47
- /* button: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 {
53
- cursor: not-allowed;
54
- pointer-events: none;
55
- }
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
-
68
- /* inputline */
69
- fray-color-picker,
70
- fray-color-picker > select,
71
- fray-dropdown,
72
- fray-dropdown > select,
73
- fray-list-view > [role="listbox"] > [role="option"],
74
- fray-textbox,
75
- fray-textbox > input,
76
- fray-theme-picker,
77
- fray-theme-picker > select {
78
- display: flex;
79
- flex-flow: row nowrap;
80
- position: relative;
81
- min-height: var(--control-min-height, 2rem);
82
- box-sizing: border-box;
83
- }
84
-
85
- /* input */
86
- fray-color-picker > select,
87
- fray-dropdown > select,
88
- fray-textbox > input,
89
- fray-theme-picker > select {
90
- pointer-events: all;
91
- width: var(--input-width, 15rem);
92
- box-sizing: border-box;
93
- white-space: nowrap;
94
- }
95
-
96
- /* after */
97
- fray-placeholder::after {
98
- content: "";
99
- display: block;
100
- position: absolute;
101
- top: 0;
102
- left: 0;
103
- width: 100%;
104
- height: 100%;
105
- pointer-events: none;
106
- }
107
-
108
- /* working */
109
- fray-placeholder::after {
110
- display: inline;
111
- position: absolute;
112
- z-index: 1;
113
- margin: auto;
114
- animation: fray-placeholder-progress 0.8s linear infinite;
115
- background-repeat: repeat;
116
- background-size: 2rem 2rem;
117
- background-image: var(--working-background-image);
118
- border: 0 solid transparent;
119
- border-radius: inherit;
120
- box-sizing: border-box;
121
- }
122
-
123
- /* noselect */
124
- th[aria-sort] {
125
- user-select: var(--noselect-user-select);
126
- cursor: var(--noselect-cursor);
127
- }
128
-
129
- /* inputlike */
130
- fray-list-view {
131
- pointer-events: all;
132
- box-sizing: border-box;
133
- white-space: nowrap;
134
- }
135
-
136
- button {
3
+ .fray-fill-horizontal,
4
+ .fray-fill-vertical {
5
+ box-sizing: border-box;
6
+ background: var(--application-background);
7
+ }
8
+
9
+ .fray-fill-horizontal {
10
+ width: 100vw;
11
+ max-width: 100vw;
12
+ min-width: 0;
13
+ overflow-x: auto;
14
+ }
15
+
16
+ .fray-fill-vertical {
17
+ height: 100vh;
18
+ max-height: 100vh;
19
+ min-height: 0;
20
+ overflow-y: auto;
21
+ }
22
+
23
+ .island {
24
+ box-sizing: border-box;
25
+ min-width: 0;
26
+ min-height: 0;
27
+ margin: var(--island-margin);
28
+ padding: var(--island-padding);
29
+ background: var(--island-background);
30
+ border: var(--island-border);
31
+ border-radius: var(--island-radius);
32
+ box-shadow: var(--island-shadow);
33
+ }
34
+
35
+ .fray-fill-horizontal.island,
36
+ .fray-fill-horizontal .island {
37
+ max-width: calc(100% - (2 * var(--island-margin)));
38
+ overflow-x: auto;
39
+ }
40
+
41
+ .fray-fill-vertical.island,
42
+ .fray-fill-vertical .island {
43
+ max-height: calc(100% - (2 * var(--island-margin)));
44
+ overflow-y: auto;
45
+ }
46
+
47
+ fray-button > button {
48
+ min-height: var(--control-min-height, 2rem);
49
+ padding: var(--space-xs) var(--space-sm);
50
+ color: var(--button-color);
51
+ background: var(--button-background);
52
+ border: var(--button-border);
53
+ border-radius: var(--radius-md);
54
+ box-shadow: var(--button-shadow);
55
+ box-sizing: border-box;
56
+ cursor: default;
137
57
  font-family: inherit;
58
+ font-size: var(--ui-font-size);
59
+ line-height: calc(var(--ui-font-size) + var(--ui-padding) + var(--ui-padding));
60
+ user-select: none;
61
+ white-space: nowrap;
138
62
  }
139
63
 
140
- fray-check-box {
141
- display: inline-block;
64
+ fray-button > button:hover:not(:disabled, [aria-disabled="true"]) {
65
+ background: var(--button-background-hover);
66
+ }
67
+
68
+ fray-button > button:active:not(:disabled, [aria-disabled="true"]) {
69
+ background: var(--button-background-active);
70
+ border-style: var(--button-border-style-active);
71
+ box-shadow: var(--button-shadow-active);
72
+ }
73
+
74
+ fray-button > button:focus-visible {
75
+ outline: 2px solid transparent;
76
+ outline-offset: 1px;
77
+ box-shadow: var(--focus-ring);
78
+ }
79
+
80
+ fray-button > button:disabled,
81
+ fray-button > button[aria-disabled="true"] {
82
+ color: var(--input-color-disabled);
83
+ background: var(--button-background-disabled);
84
+ border: var(--button-border-disabled);
85
+ cursor: not-allowed;
86
+ pointer-events: none;
142
87
  }
143
88
 
144
- fray-check-box > label {
89
+ fray-checkbox,
90
+ fray-quadcheckbox,
91
+ fray-tricheckbox {
145
92
  display: inline-flex;
93
+ line-height: 1;
94
+ }
95
+
96
+ fray-checkbox > label,
97
+ fray-quadcheckbox > label,
98
+ fray-tricheckbox > label {
99
+ display: flex;
100
+ flex-flow: row nowrap;
101
+ position: relative;
102
+ line-height: calc(var(--ui-font-size) + var(--ui-padding) + var(--ui-padding));
103
+ font-size: var(--ui-font-size);
104
+ height: calc(var(--ui-font-size) + var(--ui-padding-h) + var(--ui-padding-h));
105
+ color: var(--ui-text-color);
106
+ border-radius: var(--ui-border-radius);
107
+ box-sizing: border-box;
146
108
  align-items: center;
147
- gap: 0.35em;
109
+ gap: .3em;
110
+ align-content: center;
111
+ justify-content: center;
112
+ justify-items: center;
148
113
  cursor: pointer;
114
+ user-select: none;
149
115
  }
150
116
 
151
- fray-check-box[data-disabled] > label {
117
+ fray-checkbox > label:has(> input:disabled),
118
+ fray-quadcheckbox > label:has(> input:disabled),
119
+ fray-tricheckbox > label:has(> input:disabled) {
120
+ color: var(--checkable-label-color-disabled);
152
121
  cursor: not-allowed;
153
122
  }
154
123
 
155
- fray-check-box input[type="checkbox"] {
124
+ fray-checkbox > label > input,
125
+ fray-quadcheckbox > label > input,
126
+ fray-tricheckbox > label > input {
156
127
  position: absolute;
157
128
  width: 1px;
158
129
  height: 1px;
@@ -166,218 +137,548 @@ fray-check-box {
166
137
  font-size: var(--ui-font-size, inherit);
167
138
  }
168
139
 
169
- fray-check-box input[type="checkbox"] + .checkboxshell {
140
+ fray-checkbox > label > input + fray-checkshell,
141
+ fray-quadcheckbox > label > input + fray-checkshell,
142
+ fray-tricheckbox > label > input + fray-checkshell {
170
143
  position: relative;
171
- display: inline-grid;
144
+ display: grid;
172
145
  width: 1em;
173
146
  height: 1em;
174
147
  flex: 0 0 1em;
175
- overflow: hidden;
176
148
  box-sizing: border-box;
177
- line-height: 1;
178
- place-items: center;
149
+ text-align: center;
150
+ line-height: 120%;
179
151
  color: var(--input-color, var(--ui-text-color, currentColor));
180
152
  background: var(--checkbox-box-background, var(--ui-input-bg, transparent));
181
153
  border: var(--checkbox-box-border, var(--cbx-o-border, 1px solid currentColor));
182
154
  border-radius: var(--cbx-border-radius, var(--radius-sm, 0.2rem));
155
+ box-shadow: var(--checkbox-box-shadow);
183
156
  font-family: inherit;
184
157
  font-size: 1em;
185
158
  user-select: none;
159
+ place-items: center;
186
160
  }
187
161
 
188
- fray-check-box input[type="checkbox"]:checked + .checkboxshell {
162
+ fray-checkbox > label > input:checked + fray-checkshell,
163
+ fray-quadcheckbox > label > input:checked + fray-checkshell,
164
+ fray-tricheckbox > label > input:checked + fray-checkshell {
189
165
  color: var(--checkbox-symbol-color, var(--selection-color, currentColor));
190
166
  background: var(--checkbox-box-background-checked,
191
167
  var(--selection-background, var(--ui-accent-color, Highlight)));
168
+ box-shadow: var(--checkbox-box-shadow-checked);
192
169
  }
193
170
 
194
- fray-check-box input[type="checkbox"]:focus-visible + .checkboxshell {
171
+ fray-checkbox > label > input:focus-visible + fray-checkshell,
172
+ fray-quadcheckbox > label > input:focus-visible + fray-checkshell,
173
+ fray-tricheckbox > label > input:focus-visible + fray-checkshell {
195
174
  outline: 2px solid var(--focus-color, var(--ui-accent-color, Highlight));
196
175
  outline-offset: 1px;
197
176
  }
198
177
 
199
- fray-check-box input[type="checkbox"]:disabled + .checkboxshell {
178
+ fray-checkbox > label > input:disabled + fray-checkshell,
179
+ fray-quadcheckbox > label > input:disabled + fray-checkshell,
180
+ fray-tricheckbox > label > input:disabled + fray-checkshell {
200
181
  opacity: 0.6;
182
+ filter: saturate(0.6);
183
+ }
184
+
185
+ fray-checkbox > label > input[value="require"] + fray-checkshell,
186
+ fray-quadcheckbox > label > input[value="require"] + fray-checkshell,
187
+ fray-tricheckbox > label > input[value="require"] + fray-checkshell {
188
+ color: var(--palette-contrast-light);
189
+ background: var(--palette-green);
190
+ box-shadow: var(--checkbox-box-shadow-checked);
201
191
  }
202
192
 
203
- fray-color-picker {
193
+ fray-checkbox > label > input[value="deny"] + fray-checkshell,
194
+ fray-quadcheckbox > label > input[value="deny"] + fray-checkshell,
195
+ fray-tricheckbox > label > input[value="deny"] + fray-checkshell {
196
+ color: var(--palette-contrast-light);
197
+ background: var(--palette-red);
198
+ box-shadow: var(--checkbox-box-shadow-checked);
199
+ }
200
+
201
+ fray-colorpicker,
202
+ fray-dropdown,
203
+ fray-textbox,
204
+ fray-themepicker {
205
+ display: flex;
206
+ flex-flow: row nowrap;
207
+ position: relative;
208
+ align-items: center;
209
+ gap: .5em;
210
+ min-height: var(--control-min-height, 2rem);
211
+ color: var(--ui-text-color);
212
+ font-size: var(--ui-font-size);
213
+ line-height: calc(var(--ui-font-size) + var(--ui-padding) + var(--ui-padding));
214
+ box-sizing: border-box;
215
+ user-select: none;
216
+ }
217
+
218
+ fray-colorpicker > label,
219
+ fray-dropdown > label,
220
+ fray-textbox > label,
221
+ fray-themepicker > label {
222
+ user-select: none;
223
+ white-space: nowrap;
224
+ }
225
+
226
+ fray-colorpicker > fray-selectshell,
227
+ fray-dropdown > fray-selectshell,
228
+ fray-themepicker > fray-selectshell {
229
+ display: flex;
230
+ flex-flow: row nowrap;
231
+ position: relative;
232
+ isolation: isolate;
233
+ min-height: var(--control-min-height, 2rem);
234
+ box-sizing: border-box;
235
+ }
236
+
237
+ fray-colorpicker > fray-selectshell > select,
238
+ fray-dropdown > fray-selectshell > select,
239
+ fray-themepicker > fray-selectshell > select {
204
240
  position: relative;
241
+ z-index: 1;
242
+ min-height: var(--control-min-height, 2rem);
243
+ width: var(--input-width, 15rem);
244
+ padding: var(--space-xs) var(--space-sm);
245
+ padding-inline-end: var(--dropdown-padding-inline-end);
246
+ color: var(--input-color);
247
+ background: var(--dropdown-select-background);
248
+ border: var(--dropdown-select-border);
249
+ border-radius: var(--radius-md);
250
+ box-shadow: var(--dropdown-select-shadow);
251
+ box-sizing: border-box;
252
+ font: inherit;
253
+ appearance: var(--dropdown-appearance);
254
+ pointer-events: all;
255
+ white-space: nowrap;
256
+ }
257
+
258
+ fray-colorpicker > fray-selectshell::after,
259
+ fray-dropdown > fray-selectshell::after,
260
+ fray-themepicker > fray-selectshell::after {
261
+ content: var(--dropdown-underlay-content);
262
+ position: absolute;
263
+ z-index: 0;
264
+ inset: 0;
265
+ background: var(--dropdown-underlay-background);
266
+ border: var(--dropdown-underlay-border);
267
+ border-radius: 0;
268
+ border-start-start-radius: var(--dropdown-underlay-start-radius);
269
+ border-end-start-radius: var(--dropdown-underlay-start-radius);
270
+ box-shadow: var(--dropdown-underlay-shadow);
271
+ box-sizing: border-box;
272
+ pointer-events: none;
205
273
  }
206
274
 
207
- fray-color-picker > select {
275
+ fray-colorpicker > fray-selectshell::before,
276
+ fray-dropdown > fray-selectshell::before,
277
+ fray-themepicker > fray-selectshell::before {
278
+ content: var(--dropdown-trigger-content);
279
+ position: absolute;
280
+ z-index: 2;
281
+ inset-block: 0;
282
+ inset-inline-end: 0;
283
+ display: grid;
284
+ inline-size: var(--dropdown-trigger-width);
285
+ place-items: center;
286
+ color: var(--dropdown-trigger-color);
287
+ background: var(--dropdown-trigger-background);
288
+ border: var(--dropdown-trigger-border);
289
+ border-radius: 0;
290
+ border-start-end-radius: var(--dropdown-trigger-end-radius);
291
+ border-end-end-radius: var(--dropdown-trigger-end-radius);
292
+ box-shadow: var(--dropdown-trigger-shadow);
293
+ box-sizing: border-box;
294
+ pointer-events: none;
295
+ }
296
+
297
+ fray-colorpicker > fray-selectshell:has(> select:hover:not(:disabled))::before,
298
+ fray-dropdown > fray-selectshell:has(> select:hover:not(:disabled))::before,
299
+ fray-themepicker > fray-selectshell:has(> select:hover:not(:disabled))::before {
300
+ background: var(--dropdown-trigger-background-hover);
301
+ box-shadow: var(--dropdown-trigger-shadow-hover);
302
+ }
303
+
304
+ fray-colorpicker > fray-selectshell:has(> select:disabled)::before,
305
+ fray-dropdown > fray-selectshell:has(> select:disabled)::before,
306
+ fray-themepicker > fray-selectshell:has(> select:disabled)::before {
307
+ color: var(--input-color-disabled);
308
+ background: var(--dropdown-trigger-background-disabled);
309
+ border: var(--dropdown-trigger-border-disabled);
310
+ }
311
+
312
+ fray-colorpicker > fray-selectshell:has(> select:disabled)::after,
313
+ fray-dropdown > fray-selectshell:has(> select:disabled)::after,
314
+ fray-themepicker > fray-selectshell:has(> select:disabled)::after {
315
+ background: var(--dropdown-underlay-background-disabled);
316
+ border: var(--dropdown-underlay-border-disabled);
317
+ }
318
+
319
+ fray-colorpicker > fray-selectshell > select:focus-visible,
320
+ fray-dropdown > fray-selectshell > select:focus-visible,
321
+ fray-themepicker > fray-selectshell > select:focus-visible {
322
+ outline: 2px solid transparent;
323
+ outline-offset: 1px;
324
+ box-shadow: var(--focus-ring);
325
+ }
326
+
327
+ @media (forced-colors: active) {
328
+ fray-colorpicker > fray-selectshell::before,
329
+ fray-dropdown > fray-selectshell::before,
330
+ fray-themepicker > fray-selectshell::before,
331
+ fray-colorpicker > fray-selectshell::after,
332
+ fray-dropdown > fray-selectshell::after,
333
+ fray-themepicker > fray-selectshell::after {
334
+ display: none;
335
+ }
336
+
337
+ fray-colorpicker > fray-selectshell > select,
338
+ fray-dropdown > fray-selectshell > select,
339
+ fray-themepicker > fray-selectshell > select {
340
+ appearance: auto;
341
+ padding-inline-end: var(--space-sm);
342
+ }
343
+ }
344
+
345
+ fray-colorpicker > fray-selectshell > select,
346
+ fray-themepicker > fray-selectshell > select {
208
347
  min-width: 8rem;
209
348
  }
210
349
 
211
- fray-data-table {
350
+ fray-datatable {
351
+ display: block;
212
352
  overflow: auto;
213
353
  }
214
354
 
215
- fray-data-table > table {
216
- width: 100%;
355
+ fray-datatable > p {
356
+ margin: 0;
357
+ }
358
+
359
+ fray-datatable > table {
217
360
  border-collapse: collapse;
361
+ width: 100%;
218
362
  }
219
363
 
220
- fray-data-table thead:has([aria-expanded="true"]) {
364
+ fray-datatable thead:has([aria-expanded="true"]) {
221
365
  position: relative;
222
366
  z-index: 1100;
223
367
  }
224
368
 
225
- fray-data-table th,
226
- fray-data-table td {
227
- padding: var(--ui-padding-v) var(--ui-padding-h);
228
- text-align: start;
369
+ fray-datatable th,
370
+ fray-datatable td {
371
+ text-align: left;
372
+ padding: 0 var(--ui-padding);
373
+ font-weight: normal;
229
374
  }
230
375
 
231
- fray-data-table tbody tr[data-fray-selectable-row] {
232
- cursor: default;
376
+ fray-datatable,
377
+ fray-datatable table,
378
+ fray-datatable tbody tr,
379
+ fray-datatable tbody tr td {
233
380
  user-select: none;
381
+ pointer-events: all;
382
+ }
383
+
384
+ fray-datatable tr td {
385
+ background: var(--ui-table-bg-color);
386
+ line-height: calc(var(--ui-font-size) + var(--ui-padding));
387
+ font-size: var(--ui-font-size);
388
+ height: calc(var(--ui-font-size) + var(--ui-padding-h));
389
+ }
390
+
391
+ fray-datatable > table > tbody > tr:nth-child(even) > td {
392
+ background: var(--ui-table-bg-color2);
393
+ }
394
+
395
+ fray-datatable > table > tbody > tr[aria-selected="true"] > td {
396
+ color: var(--ui-select-text-color);
397
+ background: var(--ui-select-bg);
398
+ }
399
+
400
+ fray-datatable > table > tbody > tr:nth-child(even)[aria-selected="true"] > td {
401
+ background: var(--ui-select-bg-dark);
402
+ }
403
+
404
+ fray-datatable tr td fray-placeholder {
405
+ font-size: var(--ui-font-size);
406
+ height: var(--ui-font-size);
234
407
  }
235
408
 
236
409
  fray-placeholder {
237
410
  display: block;
238
- min-width: 3rem;
411
+ width: 5em;
239
412
  height: 1em;
240
- overflow: hidden;
241
- background: currentColor;
413
+ background: #ccc;
242
414
  border-radius: var(--ui-border-radius);
243
- opacity: 0.18;
244
415
  position: relative;
245
416
  }
246
417
 
418
+ fray-placeholder::after {
419
+ content: "";
420
+ display: block;
421
+ position: absolute;
422
+ z-index: 1;
423
+ inset: 0;
424
+ margin: auto;
425
+ animation: fray-placeholder-progress 0.55s linear infinite;
426
+ background-repeat: repeat;
427
+ background-size: 2rem 2rem;
428
+ background-image: var(--working-background-image);
429
+ border: 0 solid transparent;
430
+ border-radius: inherit;
431
+ box-sizing: border-box;
432
+ pointer-events: none;
433
+ }
434
+
247
435
  @keyframes fray-placeholder-progress {
248
- from { background-position: 0 0; }
436
+ from { background-position: 0rem 0; }
249
437
  to { background-position: 2rem 0; }
250
438
  }
251
439
 
252
- th[aria-sort] {
440
+ @media (prefers-reduced-motion: reduce) {
441
+ fray-placeholder::after {
442
+ animation: none;
443
+ }
444
+ }
445
+
446
+ fray-datatable > table > thead {
447
+ color: var(--table-header-color);
448
+ background: var(--ui-gradient);
449
+ }
450
+
451
+ fray-datatable > table > thead > tr > th {
452
+ border: 2px groove #fff7;
453
+ border-left: none;
454
+ }
455
+
456
+ fray-datatable > table > thead > tr > th:last-child {
457
+ border-right: none;
458
+ }
459
+
460
+ fray-datatable > table > thead > tr > th[aria-sort] {
253
461
  position: relative;
254
- text-align: start;
462
+ padding-right: 24px;
463
+ user-select: var(--noselect-user-select);
464
+ cursor: var(--noselect-cursor);
465
+ }
466
+
467
+ fray-datatable > table > thead > tr > th[aria-sort] > button.sort {
468
+ appearance: none;
469
+ display: block;
470
+ width: 100%;
471
+ padding: 0;
472
+ color: inherit;
473
+ background: transparent;
474
+ border: 0;
475
+ font-family: inherit;
476
+ font-size: inherit;
477
+ font-weight: inherit;
478
+ line-height: inherit;
479
+ text-align: inherit;
480
+ cursor: pointer;
481
+ }
482
+
483
+ fray-datatable > table > thead > tr > th[aria-sort] > button.sort > span.sortindicator {
484
+ position: absolute;
485
+ right: 20px;
486
+ top: 50%;
487
+ transform: translateY(-50%);
488
+ width: 1em;
489
+ text-align: center;
255
490
  }
256
491
 
257
- th[aria-sort] > [data-part="sort"],
258
- th[aria-sort] > [data-part="filter-toggle"] {
259
- width: auto;
492
+ fray-datatable > table > thead > tr > th[aria-sort] > button.filter {
493
+ appearance: none;
494
+ position: absolute;
495
+ right: 2px;
496
+ top: 50%;
497
+ transform: translateY(-50%);
498
+ width: 1em;
499
+ padding: 0;
500
+ color: inherit;
501
+ background: transparent;
502
+ border: 0;
260
503
  font-family: inherit;
504
+ font-size: inherit;
505
+ line-height: inherit;
506
+ text-align: center;
507
+ cursor: pointer;
508
+ opacity: 0.5;
261
509
  }
262
510
 
263
- th[aria-sort] > [data-part="filter-toggle"] {
264
- margin-inline-start: var(--ui-padding-h);
265
- font-size: 0.75em;
511
+ fray-datatable > table > thead > tr > th[aria-sort] > button.filter:hover {
512
+ opacity: 1;
266
513
  }
267
514
 
268
- fray-filter-panel {
269
- position: fixed;
270
- z-index: 1100;
271
- inset-block-start: 0;
272
- inset-inline-end: 0;
515
+ fray-filterpanel {
516
+ position: absolute;
517
+ background: white;
518
+ border: 1px solid #ccc;
519
+ padding: 8px;
520
+ min-width: 180px;
521
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
522
+ z-index: 1000;
273
523
  display: flex;
274
- min-width: 12rem;
275
- padding: var(--ui-padding);
276
524
  flex-flow: column nowrap;
277
- align-items: stretch;
278
- overflow-y: auto;
279
- }
280
-
281
- div:has(> dt + dd) {
282
- display: grid;
283
- grid-template-columns: minmax(7rem, 0.7fr) minmax(0, 1.3fr);
284
- gap: var(--spacing-small, 0.5rem);
285
- padding-block: var(--spacing-small, 0.5rem);
525
+ align-items: flex-start;
526
+ left: 100%;
527
+ top: 0;
286
528
  }
287
529
 
288
- div:has(> dt + dd) > dd {
289
- min-width: 0;
530
+ fray-filterpanel > p {
290
531
  margin: 0;
291
- overflow-wrap: anywhere;
292
532
  }
293
533
 
294
- @media (max-width: 36rem) {
295
- div:has(> dt + dd) {
296
- grid-template-columns: minmax(0, 1fr);
297
- gap: 0.15rem;
298
- }
534
+ fray-descriptionlist {
535
+ display: block;
299
536
  }
300
537
 
301
- dl:has(> div > dt + dd) {
538
+ fray-descriptionlist > dl {
302
539
  display: grid;
303
540
  margin: 0;
304
541
  }
305
542
 
306
- dialog {
543
+ fray-dialog > dialog {
544
+ z-index: 2;
307
545
  width: min(38rem, calc(100vw - 2rem));
308
546
  max-height: min(42rem, calc(100dvh - 2rem));
309
547
  padding: 0;
548
+ color: var(--panel-color);
549
+ background: var(--panel-background);
550
+ border: var(--panel-border);
551
+ border-radius: var(--panel-radius);
552
+ box-shadow: var(--dialog-shadow);
553
+ overflow: hidden;
554
+ isolation: isolate;
555
+ }
556
+
557
+ fray-dialog > dialog[open] {
558
+ display: flex;
559
+ flex-direction: column;
560
+ }
561
+
562
+ fray-dialog > dialog::backdrop {
563
+ background: var(--dialog-backdrop-background);
310
564
  }
311
565
 
312
- dialog > header,
313
- dialog > p,
314
- dialog > [data-part="content"],
315
- dialog > footer {
566
+ fray-dialog > dialog > header,
567
+ fray-dialog > dialog > p,
568
+ fray-dialog > dialog > fray-content,
569
+ fray-dialog > dialog > footer {
316
570
  padding: var(--panel-padding, 0.75rem);
317
571
  }
318
572
 
319
- dialog > header h2,
320
- dialog > p {
573
+ fray-dialog > dialog > header {
574
+ position: relative;
575
+ z-index: 1;
576
+ color: var(--dialog-header-color);
577
+ background: var(--dialog-header-background);
578
+ box-shadow: var(--section-header-shadow);
579
+ }
580
+
581
+ fray-dialog > dialog > header h2,
582
+ fray-dialog > dialog > p {
321
583
  margin: 0;
322
584
  }
323
585
 
324
- dialog > [data-part="content"] {
586
+ fray-dialog > dialog > header h2 {
587
+ font-size: 1.1em;
588
+ font-weight: 700;
589
+ }
590
+
591
+ fray-dialog > dialog > fray-content {
592
+ position: relative;
593
+ z-index: 0;
594
+ display: block;
595
+ flex: 1 1 auto;
596
+ min-height: 0;
325
597
  overflow: auto;
326
598
  }
327
599
 
328
- dialog > footer {
600
+ fray-dialog > dialog > footer {
329
601
  display: flex;
330
602
  justify-content: flex-end;
331
603
  gap: var(--spacing-small, 0.5rem);
332
604
  }
333
605
 
334
606
  @media (forced-colors: active) {
335
- dialog {
607
+ fray-dialog > dialog {
336
608
  border: 2px solid CanvasText;
337
609
  }
338
- }
339
610
 
340
- fray-dropdown {
341
- position: relative;
611
+ fray-dialog > dialog::backdrop {
612
+ background: Canvas;
613
+ }
342
614
  }
343
615
 
344
- fray-list-view {
616
+ fray-listview {
345
617
  display: flex;
346
618
  flex-direction: column;
347
619
  overflow-y: auto;
348
- min-height: 0;
620
+ height: 100%;
621
+ padding: var(--ui-padding-v) var(--ui-padding-h);
622
+ color: var(--ui-text-color);
623
+ background: var(--ui-input-bg);
624
+ border: var(--ui-input-border);
625
+ border-radius: var(--ui-border-radius);
626
+ box-shadow: var(--input-shadow);
627
+ box-sizing: border-box;
628
+ pointer-events: all;
629
+ user-select: none;
630
+ white-space: nowrap;
349
631
  }
350
632
 
351
- fray-list-view > [role="listbox"],
352
- fray-list-view > [data-part="loading"] {
633
+ fray-listview > [role="listbox"],
634
+ fray-listview > ul[aria-hidden="true"] {
353
635
  display: flex;
354
636
  flex-direction: column;
637
+ margin: 0;
638
+ padding: 0;
639
+ list-style: none;
355
640
  }
356
641
 
357
- fray-list-view > [role="listbox"] > [role="option"] {
358
- cursor: default;
642
+ fray-listview > [role="listbox"] > [role="option"] {
643
+ display: flex;
644
+ flex-flow: row nowrap;
645
+ position: relative;
646
+ min-height: calc(var(--ui-font-size) + var(--ui-padding-h) + var(--ui-padding-h));
647
+ line-height: calc(var(--ui-font-size) + var(--ui-padding) + var(--ui-padding));
648
+ font-size: var(--ui-font-size);
649
+ color: var(--ui-text-color);
650
+ border-radius: var(--ui-border-radius);
651
+ box-sizing: border-box;
359
652
  user-select: none;
360
653
  }
361
654
 
362
- fray-list-view > [role="status"],
363
- fray-list-view > [role="alert"] {
655
+ fray-listview > [role="listbox"] > [role="option"]:hover {
656
+ background: var(--hover-bg-color, #f5f5f5);
657
+ }
658
+
659
+ fray-listview > [role="listbox"] > [role="option"][aria-selected="true"] {
660
+ background: var(--selected-bg-color, #e0e7ff);
661
+ }
662
+
663
+ fray-listview > [role="status"],
664
+ fray-listview > [role="alert"] {
364
665
  margin: 0;
365
666
  padding: var(--ui-padding);
366
667
  }
367
668
 
368
669
  fray-panel {
670
+ background: var(--panel-background);
671
+ border: var(--panel-border);
672
+ border-radius: var(--panel-radius);
673
+ box-shadow: var(--panel-shadow);
674
+ color: var(--panel-color);
369
675
  display: flex;
370
676
  flex-direction: column;
371
677
  overflow: auto;
372
678
  flex: 0 0 auto;
373
679
  }
374
680
 
375
- fray-panel > header h2 {
376
- margin: 0;
377
- font: inherit;
378
- }
379
-
380
- fray-panel > [data-part="content"] {
681
+ fray-panel > fray-content {
381
682
  display: flex;
382
683
  flex: 1;
383
684
  overflow: auto;
@@ -385,52 +686,44 @@ fray-panel {
385
686
  gap: var(--spacing-medium, 1rem);
386
687
  }
387
688
 
388
- fray-panel > [data-part="content"][data-orientation="horizontal"] {
689
+ fray-panel > fray-content.horizontal {
389
690
  flex-direction: row;
390
691
  }
391
692
 
392
- fray-panel > [data-part="content"][data-orientation="vertical"] {
693
+ fray-panel > fray-content.vertical {
393
694
  flex-direction: column;
394
695
  }
395
696
 
396
- fray-progress-bar {
397
- display: grid;
398
- gap: var(--spacing-small, 0.5rem);
399
- }
400
-
401
- fray-progress-bar > [data-part="label-line"] {
402
- display: flex;
403
- justify-content: space-between;
404
- gap: var(--spacing-medium, 1rem);
405
- }
406
-
407
- fray-progress-bar > progress {
408
- width: 100%;
409
- min-height: 0.8rem;
410
- }
411
-
412
- @media (forced-colors: active) {
413
- fray-progress-bar > progress {
414
- forced-color-adjust: auto;
415
- }
416
- }
417
-
418
- fray-quad-checkbox {
419
- display: inline-block;
697
+ fray-panel[aria-disabled="true"] {
698
+ opacity: .65;
420
699
  }
421
700
 
422
- fray-quad-checkbox > label {
423
- display: inline-flex;
424
- align-items: center;
425
- gap: 0.35em;
426
- cursor: pointer;
701
+ fray-header {
702
+ display: block;
703
+ color: var(--section-header-color);
704
+ border-radius: var(--ui-border-radius) var(--ui-border-radius) 0 0;
705
+ padding: .25em;
706
+ background: var(--section-header-background);
707
+ box-shadow: var(--section-header-shadow);
708
+ z-index: 1;
709
+ }
710
+
711
+ fray-header > h1,
712
+ fray-header > h2,
713
+ fray-header > h3,
714
+ fray-header > h4,
715
+ fray-header > h5,
716
+ fray-header > h6 {
717
+ margin: 0;
718
+ font: inherit;
427
719
  }
428
720
 
429
- fray-quad-checkbox[data-disabled] > label {
430
- cursor: not-allowed;
721
+ fray-progressbar {
722
+ display: block;
431
723
  }
432
724
 
433
- fray-quad-checkbox input[type="checkbox"] {
725
+ fray-progressbar > label,
726
+ fray-progressbar > progress {
434
727
  position: absolute;
435
728
  width: 1px;
436
729
  height: 1px;
@@ -440,166 +733,407 @@ fray-quad-checkbox {
440
733
  clip: rect(0 0 0 0);
441
734
  white-space: nowrap;
442
735
  border: 0;
443
- font: inherit;
444
- font-size: var(--ui-font-size, inherit);
445
736
  }
446
737
 
447
- fray-quad-checkbox input[type="checkbox"] + .checkboxshell {
738
+ fray-progressbar > fray-content {
448
739
  position: relative;
449
- display: inline-grid;
450
- width: 1em;
451
- height: 1em;
452
- flex: 0 0 1em;
740
+ display: block;
741
+ width: 100%;
742
+ min-height: var(--control-min-height);
743
+ border-radius: var(--ui-border-radius);
453
744
  overflow: hidden;
745
+ background: var(--progress-track-background);
746
+ box-shadow: var(--progress-track-shadow);
747
+ color: var(--progress-track-color);
748
+ text-align: center;
749
+ line-height: var(--control-min-height);
454
750
  box-sizing: border-box;
455
- line-height: 1;
456
- place-items: center;
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;
464
751
  }
465
752
 
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)));
753
+ fray-progressbar > fray-content > fray-progress {
754
+ position: absolute;
755
+ z-index: 1;
756
+ top: 0;
757
+ left: 0;
758
+ display: block;
759
+ width: var(--progress-width, 0%);
760
+ height: 100%;
761
+ border-radius: inherit;
762
+ overflow: hidden;
763
+ background: var(--progress-value-background);
764
+ box-shadow: var(--progress-value-shadow);
470
765
  }
471
766
 
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;
767
+ fray-progressbar > fray-content > fray-progress > fray-inverse {
768
+ position: absolute;
769
+ top: 0;
770
+ left: 0;
771
+ display: block;
772
+ width: var(--progress-inverse-width, 10000%);
773
+ height: 100%;
774
+ color: var(--progress-value-color);
775
+ text-align: center;
776
+ white-space: nowrap;
475
777
  }
476
778
 
477
- fray-quad-checkbox input[type="checkbox"]:disabled + .checkboxshell {
478
- opacity: 0.6;
779
+ fray-progressbar > fray-content > fray-label {
780
+ position: relative;
781
+ z-index: 0;
782
+ display: block;
783
+ height: 100%;
784
+ white-space: nowrap;
785
+ }
786
+
787
+ fray-progressbar:has(> progress:indeterminate) > fray-content > fray-progress {
788
+ display: none;
789
+ }
790
+
791
+ fray-progressbar:has(> progress:indeterminate) > fray-content > fray-label {
792
+ z-index: 2;
793
+ }
794
+
795
+ fray-progressbar:has(> progress:indeterminate) > fray-content::after {
796
+ position: absolute;
797
+ z-index: 1;
798
+ inset: 1px;
799
+ content: "";
800
+ border-radius: inherit;
801
+ background-image: var(--working-background-image);
802
+ background-repeat: repeat;
803
+ background-size: 2rem 2rem;
804
+ animation: fray-progressbar-indeterminate 0.55s linear infinite;
805
+ opacity: .5;
806
+ }
807
+
808
+ @keyframes fray-progressbar-indeterminate {
809
+ from { background-position: 0 0; }
810
+ to { background-position: 2rem 0; }
479
811
  }
480
812
 
481
- aside {
813
+ @media (forced-colors: active) {
814
+ fray-progressbar > fray-content {
815
+ border: 1px solid CanvasText;
816
+ background: Canvas;
817
+ box-shadow: none;
818
+ color: CanvasText;
819
+ }
820
+
821
+ fray-progressbar > fray-content > fray-progress {
822
+ background: Highlight;
823
+ box-shadow: none;
824
+ }
825
+
826
+ fray-progressbar > fray-content > fray-progress > fray-inverse {
827
+ color: HighlightText;
828
+ }
829
+ }
830
+
831
+ fray-sidebar {
482
832
  display: flex;
483
- flex-direction: column;
484
833
  min-width: 0;
485
834
  min-height: 0;
486
- overflow: hidden;
487
835
  }
488
836
 
489
- aside > header,
490
- aside > [data-part="toolbar"] {
491
- flex: 0 0 auto;
837
+ fray-sidebar > aside {
838
+ display: flex;
839
+ flex: 1 1 auto;
840
+ flex-direction: column;
841
+ min-width: 0;
842
+ min-height: 0;
843
+ overflow: hidden;
492
844
  }
493
845
 
494
- aside > header h2 {
495
- margin: 0;
496
- font: inherit;
846
+ fray-sidebar > aside > fray-header,
847
+ fray-sidebar > aside > fray-toolbarcontent {
848
+ flex: none;
497
849
  }
498
850
 
499
- aside > [data-part="content"] {
500
- flex: 1 1 auto;
501
- min-width: 0;
851
+ fray-sidebar > aside > fray-content {
852
+ flex: 1;
502
853
  min-height: 0;
503
- overflow-x: hidden;
504
- overflow-y: auto;
854
+ overflow: auto;
505
855
  }
506
856
 
507
- fray-split-view {
508
- display: grid;
857
+ fray-splitview {
858
+ display: flex;
509
859
  flex: 1 1 auto;
510
860
  min-width: 0;
511
861
  min-height: 0;
512
862
  overflow: hidden;
513
863
  }
514
864
 
515
- fray-split-view[data-direction="horizontal"] {
516
- grid-template-columns:
517
- var(--split-primary-size, minmax(16rem, 0.8fr))
518
- minmax(0, 1.2fr);
865
+ fray-splitview.horizontal {
866
+ flex-direction: row;
519
867
  }
520
868
 
521
- fray-split-view[data-direction="vertical"] {
522
- grid-template-rows:
523
- var(--split-primary-size, minmax(12rem, 0.8fr))
524
- minmax(0, 1.2fr);
869
+ fray-splitview.vertical {
870
+ flex-direction: column;
525
871
  }
526
872
 
527
- fray-split-view > [data-part] {
873
+ fray-splitview > fray-primary {
874
+ flex: 0 1 var(--split-primary-size, 40%);
875
+ }
876
+
877
+ fray-splitview > fray-secondary {
878
+ flex: 1;
879
+ }
880
+
881
+ fray-splitview > fray-primary,
882
+ fray-splitview > fray-secondary {
528
883
  min-width: 0;
529
884
  min-height: 0;
530
885
  overflow: auto;
531
886
  }
532
887
 
533
- fray-split-view[data-direction="horizontal"] > [data-part="primary"] {
888
+ fray-splitview.horizontal > fray-primary {
534
889
  border-inline-end: 1px solid var(--ui-border-color);
535
890
  }
536
891
 
537
- fray-split-view[data-direction="vertical"] > [data-part="primary"] {
892
+ fray-splitview.vertical > fray-primary {
538
893
  border-block-end: 1px solid var(--ui-border-color);
539
894
  }
540
895
 
541
- fray-tab-line {
896
+ fray-tabline {
542
897
  display: flex;
898
+ background: var(--tabline-background);
543
899
  flex-flow: row wrap;
900
+ overflow: hidden;
544
901
  padding-top: 3px;
902
+ padding-inline-start: var(--tabline-padding-inline-start);
903
+ flex: 0 0 auto;
904
+ z-index: 0;
545
905
  }
546
906
 
547
- fray-tab-panel {
907
+ fray-tabline > button[role="tab"] {
908
+ position: relative;
909
+ min-height: calc(var(--control-min-height, 2rem) - 5px);
910
+ padding-block: 0;
911
+ padding-inline: var(--space-sm);
912
+ color: var(--button-color);
913
+ background: var(--tab-button-background);
914
+ border: none;
915
+ border-radius: var(--radius-md) var(--radius-md) 0 0;
916
+ box-shadow: var(--tab-button-shadow);
917
+ box-sizing: border-box;
918
+ align-self: flex-end;
919
+ cursor: default;
920
+ font-family: inherit;
921
+ font-size: var(--ui-font-size);
922
+ line-height: calc(var(--ui-font-size) + var(--ui-padding) + var(--ui-padding));
923
+ margin-block-start: 3px;
924
+ user-select: none;
925
+ white-space: nowrap;
926
+ }
927
+
928
+ fray-tabline > button[role="tab"]:hover:not(:disabled)[aria-selected="false"] {
929
+ background: var(--button-background-hover);
930
+ }
931
+
932
+ fray-tabline > button[role="tab"]:not(:disabled)[aria-selected="true"] {
933
+ min-height: var(--control-min-height, 2rem);
934
+ padding-block-start: 3px;
935
+ background: var(--tab-button-background-active);
936
+ box-shadow: var(--tab-button-shadow-active);
937
+ margin-block-start: 0;
938
+ z-index: 1;
939
+ }
940
+
941
+ fray-tabline > button[role="tab"]:not(:disabled)[aria-selected="false"]::after {
942
+ content: '';
943
+ position: absolute;
944
+ inset-inline: 0;
945
+ block-size: 1px;
946
+ inset-block-end: -1px;
947
+ box-shadow: var(--tab-button-inactive-bottom-shadow);
948
+ z-index: 1;
949
+ }
950
+
951
+ fray-tabline > button[role="tab"]:disabled {
952
+ color: var(--input-color-disabled);
953
+ background: var(--button-background-disabled);
954
+ border: var(--button-border-disabled);
955
+ cursor: not-allowed;
956
+ }
957
+
958
+ fray-tabpanel {
959
+ background: var(--panel-background);
960
+ border-radius: var(--panel-radius);
961
+ box-shadow: var(--panel-shadow);
548
962
  display: flex;
549
963
  flex-direction: column;
550
964
  width: 100%;
551
- min-height: 0;
965
+ height: 100%;
552
966
  overflow: hidden;
553
967
  }
554
968
 
555
- fray-tab-panel > [data-part="content"] {
969
+ fray-tabpanel > section[role="tabpanel"] {
556
970
  display: flex;
557
971
  flex-direction: column;
558
972
  flex: 1;
559
973
  overflow: auto;
974
+ padding: 3px;
975
+ z-index: 2;
976
+ }
977
+
978
+ fray-tabpanel > section[role="tabpanel"][hidden] {
979
+ display: none;
980
+ }
981
+
982
+ fray-tabpanel > section[role="tabpanel"] > fray-toolbar[role="toolbar"]:first-child {
983
+ width: calc(100% + 6px);
984
+ margin-block-start: -3px;
985
+ margin-inline-start: -3px;
560
986
  }
561
987
 
562
- fray-textbox input {
988
+ fray-textbox > input {
989
+ min-height: var(--control-min-height, 2rem);
990
+ width: var(--input-width, 15rem);
991
+ padding: var(--space-xs) var(--space-sm);
992
+ color: var(--input-color);
993
+ background: var(--input-background);
994
+ border: var(--input-border);
995
+ border-radius: var(--radius-md);
996
+ box-shadow: var(--input-shadow);
997
+ box-sizing: border-box;
998
+ font: inherit;
999
+ pointer-events: all;
1000
+ user-select: text;
1001
+ white-space: nowrap;
563
1002
  cursor: text;
564
1003
  }
565
1004
 
1005
+ fray-textbox > input:disabled {
1006
+ color: var(--input-color-disabled);
1007
+ background: var(--input-background-disabled);
1008
+ border-color: var(--ui-input-border-disabled);
1009
+ cursor: not-allowed;
1010
+ }
1011
+
1012
+ fray-textbox > input:focus-visible {
1013
+ outline: 2px solid transparent;
1014
+ outline-offset: 1px;
1015
+ box-shadow: var(--focus-ring);
1016
+ }
1017
+
566
1018
  fray-textbox > [role="alert"] {
567
1019
  margin: 0;
568
1020
  }
569
1021
 
570
- fray-theme-picker {
1022
+ fray-toggle {
1023
+ display: inline-block;
1024
+ inline-size: fit-content;
1025
+ max-inline-size: 100%;
1026
+ }
1027
+
1028
+ fray-toggle > fray-label,
1029
+ fray-toggle > fray-error {
1030
+ display: block;
1031
+ }
1032
+
1033
+ fray-toggle > fray-options {
1034
+ display: flex;
1035
+ min-height: var(--control-min-height, 2rem);
1036
+ border-radius: var(--radius-md);
1037
+ box-shadow: var(--toggle-group-shadow);
1038
+ box-sizing: border-box;
1039
+ cursor: pointer;
1040
+ user-select: none;
1041
+ }
1042
+
1043
+ fray-toggle > fray-options > button[role="radio"] {
571
1044
  position: relative;
1045
+ min-height: var(--control-min-height, 2rem);
1046
+ padding: var(--space-xs) var(--space-sm);
1047
+ color: var(--button-color);
1048
+ background: var(--toggle-button-background);
1049
+ border: var(--button-border);
1050
+ border-radius: 0;
1051
+ border-left: none;
1052
+ border-right: none;
1053
+ box-shadow: var(--toggle-button-shadow);
1054
+ box-sizing: border-box;
1055
+ cursor: default;
1056
+ font-family: inherit;
1057
+ font-size: var(--ui-font-size);
1058
+ line-height: calc(var(--ui-font-size) + var(--ui-padding) + var(--ui-padding));
1059
+ user-select: none;
1060
+ white-space: nowrap;
572
1061
  }
573
1062
 
574
- fray-theme-picker > select {
575
- min-width: 8rem;
1063
+ fray-toggle > fray-options > button[role="radio"]:hover:not(:disabled)[aria-checked="false"] {
1064
+ background: var(--button-background-hover);
576
1065
  }
577
1066
 
578
- fieldset:has(> [data-part="options"]) {
579
- margin: 0;
580
- padding: 0;
581
- border: 0;
1067
+ fray-toggle > fray-options > button[role="radio"]:first-of-type {
1068
+ border-radius: var(--radius-md) 0 0 var(--radius-md);
1069
+ border: var(--button-border);
1070
+ border-right: none;
582
1071
  }
583
1072
 
584
- fieldset:has(> [data-part="options"]) > [data-part="options"] {
585
- display: flex;
586
- padding: 0;
1073
+ fray-toggle > fray-options > button[role="radio"]:last-of-type {
1074
+ border-radius: 0 var(--radius-md) var(--radius-md) 0;
1075
+ border: var(--button-border);
1076
+ border-left: none;
1077
+ }
1078
+
1079
+ fray-toggle > fray-options > button[role="radio"][aria-checked="false"]
1080
+ + [role="radio"][aria-checked="false"] {
1081
+ border-inline-start: var(--button-border);
1082
+ border-inline-start-color: var(--toggle-inactive-shared-border-color);
1083
+ }
1084
+
1085
+ fray-toggle > fray-options > button[role="radio"][aria-checked="true"] {
1086
+ color: var(--selection-color);
1087
+ background: var(--toggle-button-background-checked);
1088
+ border: var(--toggle-button-border-checked);
1089
+ box-shadow: var(--toggle-button-shadow-checked);
1090
+ margin-inline: var(--toggle-button-selected-inline-overlap);
1091
+ z-index: var(--toggle-button-selected-z-index);
1092
+ }
1093
+
1094
+ fray-toggle > fray-options > button[role="radio"]:disabled {
1095
+ color: var(--input-color-disabled);
1096
+ background: var(--button-background-disabled);
1097
+ border: var(--button-border-disabled);
1098
+ cursor: not-allowed;
1099
+ }
1100
+
1101
+ fray-toggle > fray-options > button[role="radio"]:active:not(:disabled) {
1102
+ border-style: var(--button-border-style-active);
1103
+ }
1104
+
1105
+ fray-toggle > fray-options > button[role="radio"][aria-checked="false"]
1106
+ + [role="radio"][aria-checked="false"]::after {
1107
+ content: '';
1108
+ position: absolute;
1109
+ inset-block: var(--toggle-inactive-separator-block-inset);
1110
+ inline-size: 1px;
1111
+ inset-inline-start: -1px;
1112
+ background: var(--toggle-inactive-separator-background);
587
1113
  }
588
1114
 
589
1115
  fray-toolbar {
590
1116
  display: flex;
591
1117
  flex-wrap: wrap;
592
1118
  align-items: center;
1119
+ color: var(--toolbar-color);
1120
+ background: var(--toolbar-background);
1121
+ border: var(--toolbar-border);
1122
+ box-shadow: var(--toolbar-shadow);
593
1123
  gap: var(--spacing-small, 0.5rem);
594
1124
  padding: var(--ui-padding);
595
1125
  }
596
1126
 
597
- fray-toolbar[data-orientation="vertical"] {
1127
+ fray-toolbar > * {
1128
+ margin: 0;
1129
+ }
1130
+
1131
+ fray-toolbar[aria-orientation="vertical"] {
598
1132
  flex-direction: column;
599
1133
  align-items: stretch;
600
1134
  }
601
1135
 
602
- fray-tree-view {
1136
+ fray-treeview {
603
1137
  display: flex;
604
1138
  flex-direction: column;
605
1139
  min-width: 0;
@@ -607,12 +1141,15 @@ fray-tree-view {
607
1141
  overflow: auto;
608
1142
  }
609
1143
 
610
- fray-tree-view > [role="tree"] {
1144
+ fray-treeview > [role="tree"] {
611
1145
  display: grid;
612
1146
  align-content: start;
1147
+ margin: 0;
1148
+ padding: 0;
1149
+ list-style: none;
613
1150
  }
614
1151
 
615
- fray-tree-view [role="treeitem"] {
1152
+ fray-treeview [role="treeitem"] {
616
1153
  display: flex;
617
1154
  align-items: flex-start;
618
1155
  gap: 0.35rem;
@@ -623,91 +1160,44 @@ fray-tree-view {
623
1160
  user-select: none;
624
1161
  }
625
1162
 
626
- fray-tree-view [data-part="expander"] {
1163
+ fray-treeview [role="treeitem"]:hover {
1164
+ background: var(--button-background-hover);
1165
+ }
1166
+
1167
+ fray-treeview [role="treeitem"]:focus-visible {
1168
+ outline: 2px solid transparent;
1169
+ outline-offset: -2px;
1170
+ box-shadow: var(--focus-ring);
1171
+ }
1172
+
1173
+ fray-treeview [role="treeitem"][aria-selected="true"] {
1174
+ color: var(--ui-select-text-color);
1175
+ background: var(--ui-select-bg);
1176
+ }
1177
+
1178
+ fray-treeview fray-expander {
627
1179
  flex: 0 0 1rem;
628
1180
  text-align: center;
629
1181
  }
630
1182
 
631
- fray-tree-view [data-part="expander"][data-expandable] {
1183
+ fray-treeview [role="treeitem"][aria-expanded] > fray-expander {
632
1184
  cursor: pointer;
633
1185
  }
634
1186
 
635
- fray-tree-view [data-part="label"] {
1187
+ fray-treeview fray-label {
636
1188
  min-width: 0;
637
1189
  overflow-wrap: anywhere;
638
1190
  }
639
1191
 
640
- fray-tree-view > [role="status"] {
1192
+ fray-treeview > [role="status"],
1193
+ fray-treeview > [role="alert"] {
641
1194
  margin: 0;
642
1195
  padding: var(--ui-padding, 0.75rem);
643
1196
  }
644
1197
 
645
1198
  @media (forced-colors: active) {
646
- fray-tree-view [role="treeitem"][aria-selected="true"] {
1199
+ fray-treeview [role="treeitem"][aria-selected="true"] {
647
1200
  outline: 2px solid Highlight;
648
1201
  forced-color-adjust: auto;
649
1202
  }
650
1203
  }
651
-
652
- fray-tri-checkbox {
653
- display: inline-block;
654
- }
655
-
656
- fray-tri-checkbox > label {
657
- display: inline-flex;
658
- align-items: center;
659
- gap: 0.35em;
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);
679
- }
680
-
681
- fray-tri-checkbox input[type="checkbox"] + .checkboxshell {
682
- position: relative;
683
- display: inline-grid;
684
- width: 1em;
685
- height: 1em;
686
- flex: 0 0 1em;
687
- overflow: hidden;
688
- box-sizing: border-box;
689
- line-height: 1;
690
- place-items: center;
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;
709
- }
710
-
711
- fray-tri-checkbox input[type="checkbox"]:disabled + .checkboxshell {
712
- opacity: 0.6;
713
- }