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