@sylwellsoftware/fray 0.6.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 (117) hide show
  1. package/README.md +426 -205
  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 +3 -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 +10 -2
  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 -6
  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 +64 -0
  64. package/dist/Components/lineinputs/radio.d.ts.map +1 -0
  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 +11 -1
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +3378 -1454
  80. package/dist/index.js.map +1 -1
  81. package/dist/jsx-dev-runtime-CRDpvXOH.js +1208 -0
  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 +18 -0
  86. package/dist/routing/RouteLink.d.ts.map +1 -0
  87. package/dist/routing/RouteQuery.d.ts +19 -0
  88. package/dist/routing/RouteQuery.d.ts.map +1 -0
  89. package/dist/routing/RouteScope.d.ts +18 -0
  90. package/dist/routing/RouteScope.d.ts.map +1 -0
  91. package/dist/routing/RouteValue.d.ts +19 -0
  92. package/dist/routing/RouteValue.d.ts.map +1 -0
  93. package/dist/routing/navigationAdapter.d.ts +33 -0
  94. package/dist/routing/navigationAdapter.d.ts.map +1 -0
  95. package/dist/routing/route.d.ts +64 -0
  96. package/dist/routing/route.d.ts.map +1 -0
  97. package/dist/routing/router.d.ts +109 -0
  98. package/dist/routing/router.d.ts.map +1 -0
  99. package/dist/runtime.d.ts +10 -13
  100. package/dist/runtime.d.ts.map +1 -1
  101. package/dist/styling/styleRegistry.d.ts +0 -4
  102. package/dist/styling/styleRegistry.d.ts.map +1 -1
  103. package/dist/styling/theme.d.ts +14 -2
  104. package/dist/styling/theme.d.ts.map +1 -1
  105. package/package.json +5 -6
  106. package/styles/structural.css +942 -320
  107. package/themes/README.md +30 -72
  108. package/themes/base.css +311 -0
  109. package/themes/java/theme.css +14 -411
  110. package/themes/minimal/theme.css +3 -407
  111. package/themes/shiny/theme.css +127 -500
  112. package/dist/jsx-dev-runtime-CqunwZ8j.js +0 -1174
  113. package/dist/jsx-dev-runtime-CqunwZ8j.js.map +0 -1
  114. package/dist/styling/baseStyleDefinitions.d.ts +0 -75
  115. package/dist/styling/baseStyleDefinitions.d.ts.map +0 -1
  116. package/themes/dark.css +0 -86
  117. package/themes/light.css +0 -86
@@ -1,345 +1,684 @@
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
- /* inputline */
58
- fray-checkbox,
59
- fray-checkbox > [role="checkbox"],
60
- fray-color-picker,
61
- fray-color-picker > select,
62
- fray-dropdown,
63
- fray-dropdown > select,
64
- fray-list-view > [role="listbox"] > [role="option"],
65
- fray-quad-checkbox,
66
- fray-quad-checkbox > [role="checkbox"],
67
- fray-textbox,
68
- fray-textbox > input,
69
- fray-theme-picker,
70
- fray-theme-picker > select,
71
- fray-tri-checkbox,
72
- fray-tri-checkbox > [role="checkbox"] {
73
- display: flex;
74
- flex-flow: row nowrap;
75
- position: relative;
76
- min-height: var(--control-min-height, 2rem);
77
- box-sizing: border-box;
78
- }
79
-
80
- /* input */
81
- fray-checkbox > [role="checkbox"],
82
- fray-color-picker > select,
83
- fray-dropdown > select,
84
- fray-quad-checkbox > [role="checkbox"],
85
- fray-textbox > input,
86
- fray-theme-picker > select,
87
- fray-tri-checkbox > [role="checkbox"] {
88
- pointer-events: all;
89
- width: var(--input-width, 15rem);
90
- box-sizing: border-box;
91
- white-space: nowrap;
92
- }
93
-
94
- /* labeledinput */
95
- fray-color-picker,
96
- fray-dropdown,
97
- fray-textbox,
98
- fray-theme-picker {
99
- display: flex;
100
- flex-flow: row nowrap;
101
- align-items: center;
102
- gap: .5em;
103
- }
104
-
105
- /* after */
106
- fray-placeholder::after {
107
- content: "";
108
- display: block;
109
- position: absolute;
110
- top: 0;
111
- left: 0;
112
- width: 100%;
113
- height: 100%;
114
- pointer-events: none;
115
- }
116
-
117
- /* working */
118
- fray-placeholder::after {
119
- display: inline;
120
- position: absolute;
121
- z-index: 1;
122
- margin: auto;
123
- animation: fray-placeholder-progress 0.8s linear infinite;
124
- background-repeat: repeat;
125
- background-size: 2rem 2rem;
126
- background-image: var(--working-background-image);
127
- border: 0 solid transparent;
128
- border-radius: inherit;
129
- box-sizing: border-box;
130
- }
131
-
132
- /* noselect */
133
- th[aria-sort] {
134
- user-select: var(--noselect-user-select);
135
- cursor: var(--noselect-cursor);
136
- }
137
-
138
- /* inputlike */
139
- fray-list-view {
140
- pointer-events: all;
141
- box-sizing: border-box;
142
- white-space: nowrap;
143
- }
144
-
145
- 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;
146
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;
62
+ }
63
+
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);
147
72
  }
148
73
 
149
- fray-checkbox > [role="checkbox"] {
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;
87
+ }
88
+
89
+ fray-checkbox,
90
+ fray-quadcheckbox,
91
+ fray-tricheckbox {
150
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;
151
108
  align-items: center;
152
- gap: 0.35em;
153
- width: auto;
154
- font-family: inherit;
109
+ gap: .3em;
110
+ align-content: center;
111
+ justify-content: center;
112
+ justify-items: center;
113
+ cursor: pointer;
114
+ user-select: none;
115
+ }
116
+
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);
121
+ cursor: not-allowed;
155
122
  }
156
123
 
157
- fray-checkbox .inputshell {
158
- display: inline-grid;
124
+ fray-checkbox > label > input,
125
+ fray-quadcheckbox > label > input,
126
+ fray-tricheckbox > label > input {
127
+ position: absolute;
128
+ width: 1px;
129
+ height: 1px;
130
+ padding: 0;
131
+ margin: -1px;
132
+ overflow: hidden;
133
+ clip: rect(0 0 0 0);
134
+ white-space: nowrap;
135
+ border: 0;
136
+ font: inherit;
137
+ font-size: var(--ui-font-size, inherit);
138
+ }
139
+
140
+ fray-checkbox > label > input + fray-checkshell,
141
+ fray-quadcheckbox > label > input + fray-checkshell,
142
+ fray-tricheckbox > label > input + fray-checkshell {
143
+ position: relative;
144
+ display: grid;
159
145
  width: 1em;
160
146
  height: 1em;
161
- line-height: 1;
147
+ flex: 0 0 1em;
148
+ box-sizing: border-box;
149
+ text-align: center;
150
+ line-height: 120%;
151
+ color: var(--input-color, var(--ui-text-color, currentColor));
152
+ background: var(--checkbox-box-background, var(--ui-input-bg, transparent));
153
+ border: var(--checkbox-box-border, var(--cbx-o-border, 1px solid currentColor));
154
+ border-radius: var(--cbx-border-radius, var(--radius-sm, 0.2rem));
155
+ box-shadow: var(--checkbox-box-shadow);
156
+ font-family: inherit;
157
+ font-size: 1em;
158
+ user-select: none;
162
159
  place-items: center;
163
160
  }
164
161
 
165
- fray-color-picker {
162
+ fray-checkbox > label > input:checked + fray-checkshell,
163
+ fray-quadcheckbox > label > input:checked + fray-checkshell,
164
+ fray-tricheckbox > label > input:checked + fray-checkshell {
165
+ color: var(--checkbox-symbol-color, var(--selection-color, currentColor));
166
+ background: var(--checkbox-box-background-checked,
167
+ var(--selection-background, var(--ui-accent-color, Highlight)));
168
+ box-shadow: var(--checkbox-box-shadow-checked);
169
+ }
170
+
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 {
174
+ outline: 2px solid var(--focus-color, var(--ui-accent-color, Highlight));
175
+ outline-offset: 1px;
176
+ }
177
+
178
+ fray-checkbox > label > input:disabled + fray-checkshell,
179
+ fray-quadcheckbox > label > input:disabled + fray-checkshell,
180
+ fray-tricheckbox > label > input:disabled + fray-checkshell {
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);
191
+ }
192
+
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;
166
231
  position: relative;
232
+ isolation: isolate;
233
+ min-height: var(--control-min-height, 2rem);
234
+ box-sizing: border-box;
167
235
  }
168
236
 
169
- fray-color-picker > select {
237
+ fray-colorpicker > fray-selectshell > select,
238
+ fray-dropdown > fray-selectshell > select,
239
+ fray-themepicker > fray-selectshell > select {
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;
273
+ }
274
+
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 {
170
347
  min-width: 8rem;
171
348
  }
172
349
 
173
- fray-data-table {
350
+ fray-datatable {
351
+ display: block;
174
352
  overflow: auto;
175
353
  }
176
354
 
177
- fray-data-table > table {
178
- width: 100%;
355
+ fray-datatable > p {
356
+ margin: 0;
357
+ }
358
+
359
+ fray-datatable > table {
179
360
  border-collapse: collapse;
361
+ width: 100%;
180
362
  }
181
363
 
182
- fray-data-table thead:has([aria-expanded="true"]) {
364
+ fray-datatable thead:has([aria-expanded="true"]) {
183
365
  position: relative;
184
366
  z-index: 1100;
185
367
  }
186
368
 
187
- fray-data-table th,
188
- fray-data-table td {
189
- padding: var(--ui-padding-v) var(--ui-padding-h);
190
- 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;
191
374
  }
192
375
 
193
- fray-data-table tbody tr[data-fray-selectable-row] {
194
- cursor: default;
376
+ fray-datatable,
377
+ fray-datatable table,
378
+ fray-datatable tbody tr,
379
+ fray-datatable tbody tr td {
195
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);
196
407
  }
197
408
 
198
409
  fray-placeholder {
199
410
  display: block;
200
- min-width: 3rem;
411
+ width: 5em;
201
412
  height: 1em;
202
- overflow: hidden;
203
- background: currentColor;
413
+ background: #ccc;
204
414
  border-radius: var(--ui-border-radius);
205
- opacity: 0.18;
206
415
  position: relative;
207
416
  }
208
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
+
209
435
  @keyframes fray-placeholder-progress {
210
- from { background-position: 0 0; }
436
+ from { background-position: 0rem 0; }
211
437
  to { background-position: 2rem 0; }
212
438
  }
213
439
 
214
- 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] {
215
461
  position: relative;
216
- 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;
217
490
  }
218
491
 
219
- th[aria-sort] > [data-part="sort"],
220
- th[aria-sort] > [data-part="filter-toggle"] {
221
- 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;
222
503
  font-family: inherit;
504
+ font-size: inherit;
505
+ line-height: inherit;
506
+ text-align: center;
507
+ cursor: pointer;
508
+ opacity: 0.5;
223
509
  }
224
510
 
225
- th[aria-sort] > [data-part="filter-toggle"] {
226
- margin-inline-start: var(--ui-padding-h);
227
- font-size: 0.75em;
511
+ fray-datatable > table > thead > tr > th[aria-sort] > button.filter:hover {
512
+ opacity: 1;
228
513
  }
229
514
 
230
- fray-filter-panel {
231
- position: fixed;
232
- z-index: 1100;
233
- inset-block-start: 0;
234
- 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;
235
523
  display: flex;
236
- min-width: 12rem;
237
- padding: var(--ui-padding);
238
524
  flex-flow: column nowrap;
239
- align-items: stretch;
240
- overflow-y: auto;
241
- }
242
-
243
- div:has(> dt + dd) {
244
- display: grid;
245
- grid-template-columns: minmax(7rem, 0.7fr) minmax(0, 1.3fr);
246
- gap: var(--spacing-small, 0.5rem);
247
- padding-block: var(--spacing-small, 0.5rem);
525
+ align-items: flex-start;
526
+ left: 100%;
527
+ top: 0;
248
528
  }
249
529
 
250
- div:has(> dt + dd) > dd {
251
- min-width: 0;
530
+ fray-filterpanel > p {
252
531
  margin: 0;
253
- overflow-wrap: anywhere;
254
532
  }
255
533
 
256
- @media (max-width: 36rem) {
257
- div:has(> dt + dd) {
258
- grid-template-columns: minmax(0, 1fr);
259
- gap: 0.15rem;
260
- }
534
+ fray-descriptionlist {
535
+ display: block;
261
536
  }
262
537
 
263
- dl:has(> div > dt + dd) {
538
+ fray-descriptionlist > dl {
264
539
  display: grid;
265
540
  margin: 0;
266
541
  }
267
542
 
268
- dialog {
543
+ fray-dialog > dialog {
544
+ z-index: 2;
269
545
  width: min(38rem, calc(100vw - 2rem));
270
546
  max-height: min(42rem, calc(100dvh - 2rem));
271
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);
272
564
  }
273
565
 
274
- dialog > header,
275
- dialog > p,
276
- dialog > [data-part="content"],
277
- dialog > footer {
566
+ fray-dialog > dialog > header,
567
+ fray-dialog > dialog > p,
568
+ fray-dialog > dialog > fray-content,
569
+ fray-dialog > dialog > footer {
278
570
  padding: var(--panel-padding, 0.75rem);
279
571
  }
280
572
 
281
- dialog > header h2,
282
- 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 {
283
583
  margin: 0;
284
584
  }
285
585
 
286
- 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;
287
597
  overflow: auto;
288
598
  }
289
599
 
290
- dialog > footer {
600
+ fray-dialog > dialog > footer {
291
601
  display: flex;
292
602
  justify-content: flex-end;
293
603
  gap: var(--spacing-small, 0.5rem);
294
604
  }
295
605
 
296
606
  @media (forced-colors: active) {
297
- dialog {
607
+ fray-dialog > dialog {
298
608
  border: 2px solid CanvasText;
299
609
  }
300
- }
301
610
 
302
- fray-dropdown {
303
- position: relative;
611
+ fray-dialog > dialog::backdrop {
612
+ background: Canvas;
613
+ }
304
614
  }
305
615
 
306
- fray-list-view {
616
+ fray-listview {
307
617
  display: flex;
308
618
  flex-direction: column;
309
619
  overflow-y: auto;
310
- 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;
311
631
  }
312
632
 
313
- fray-list-view > [role="listbox"],
314
- fray-list-view > [data-part="loading"] {
633
+ fray-listview > [role="listbox"],
634
+ fray-listview > ul[aria-hidden="true"] {
315
635
  display: flex;
316
636
  flex-direction: column;
637
+ margin: 0;
638
+ padding: 0;
639
+ list-style: none;
317
640
  }
318
641
 
319
- fray-list-view > [role="listbox"] > [role="option"] {
320
- 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;
321
652
  user-select: none;
322
653
  }
323
654
 
324
- fray-list-view > [role="status"],
325
- 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"] {
326
665
  margin: 0;
327
666
  padding: var(--ui-padding);
328
667
  }
329
668
 
330
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);
331
675
  display: flex;
332
676
  flex-direction: column;
333
677
  overflow: auto;
334
678
  flex: 0 0 auto;
335
679
  }
336
680
 
337
- fray-panel > header h2 {
338
- margin: 0;
339
- font: inherit;
340
- }
341
-
342
- fray-panel > [data-part="content"] {
681
+ fray-panel > fray-content {
343
682
  display: flex;
344
683
  flex: 1;
345
684
  overflow: auto;
@@ -347,174 +686,454 @@ fray-panel {
347
686
  gap: var(--spacing-medium, 1rem);
348
687
  }
349
688
 
350
- fray-panel > [data-part="content"][data-orientation="horizontal"] {
689
+ fray-panel > fray-content.horizontal {
351
690
  flex-direction: row;
352
691
  }
353
692
 
354
- fray-panel > [data-part="content"][data-orientation="vertical"] {
693
+ fray-panel > fray-content.vertical {
355
694
  flex-direction: column;
356
695
  }
357
696
 
358
- fray-progress-bar {
359
- display: grid;
360
- gap: var(--spacing-small, 0.5rem);
697
+ fray-panel[aria-disabled="true"] {
698
+ opacity: .65;
361
699
  }
362
700
 
363
- fray-progress-bar > [data-part="label-line"] {
364
- display: flex;
365
- justify-content: space-between;
366
- gap: var(--spacing-medium, 1rem);
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;
719
+ }
720
+
721
+ fray-progressbar {
722
+ display: block;
723
+ }
724
+
725
+ fray-progressbar > label,
726
+ fray-progressbar > progress {
727
+ position: absolute;
728
+ width: 1px;
729
+ height: 1px;
730
+ padding: 0;
731
+ margin: -1px;
732
+ overflow: hidden;
733
+ clip: rect(0 0 0 0);
734
+ white-space: nowrap;
735
+ border: 0;
367
736
  }
368
737
 
369
- fray-progress-bar > progress {
738
+ fray-progressbar > fray-content {
739
+ position: relative;
740
+ display: block;
370
741
  width: 100%;
371
- min-height: 0.8rem;
742
+ min-height: var(--control-min-height);
743
+ border-radius: var(--ui-border-radius);
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);
750
+ box-sizing: border-box;
751
+ }
752
+
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);
765
+ }
766
+
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;
777
+ }
778
+
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; }
372
811
  }
373
812
 
374
813
  @media (forced-colors: active) {
375
- fray-progress-bar > progress {
376
- forced-color-adjust: auto;
814
+ fray-progressbar > fray-content {
815
+ border: 1px solid CanvasText;
816
+ background: Canvas;
817
+ box-shadow: none;
818
+ color: CanvasText;
377
819
  }
378
- }
379
820
 
380
- fray-quad-checkbox > [role="checkbox"] {
381
- display: inline-flex;
382
- align-items: center;
383
- gap: 0.35em;
384
- width: auto;
385
- font-family: inherit;
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
+ }
386
829
  }
387
830
 
388
- fray-quad-checkbox .inputshell {
389
- display: inline-grid;
390
- width: 1em;
391
- height: 1em;
392
- line-height: 1;
393
- place-items: center;
831
+ fray-sidebar {
832
+ display: flex;
833
+ min-width: 0;
834
+ min-height: 0;
394
835
  }
395
836
 
396
- aside {
837
+ fray-sidebar > aside {
397
838
  display: flex;
839
+ flex: 1 1 auto;
398
840
  flex-direction: column;
399
841
  min-width: 0;
400
842
  min-height: 0;
401
843
  overflow: hidden;
402
844
  }
403
845
 
404
- aside > header,
405
- aside > [data-part="toolbar"] {
406
- flex: 0 0 auto;
846
+ fray-sidebar > aside > fray-header,
847
+ fray-sidebar > aside > fray-toolbarcontent {
848
+ flex: none;
407
849
  }
408
850
 
409
- aside > header h2 {
410
- margin: 0;
411
- font: inherit;
412
- }
413
-
414
- aside > [data-part="content"] {
415
- flex: 1 1 auto;
416
- min-width: 0;
851
+ fray-sidebar > aside > fray-content {
852
+ flex: 1;
417
853
  min-height: 0;
418
- overflow-x: hidden;
419
- overflow-y: auto;
854
+ overflow: auto;
420
855
  }
421
856
 
422
- fray-split-view {
423
- display: grid;
857
+ fray-splitview {
858
+ display: flex;
424
859
  flex: 1 1 auto;
425
860
  min-width: 0;
426
861
  min-height: 0;
427
862
  overflow: hidden;
428
863
  }
429
864
 
430
- fray-split-view[data-direction="horizontal"] {
431
- grid-template-columns:
432
- var(--split-primary-size, minmax(16rem, 0.8fr))
433
- minmax(0, 1.2fr);
865
+ fray-splitview.horizontal {
866
+ flex-direction: row;
434
867
  }
435
868
 
436
- fray-split-view[data-direction="vertical"] {
437
- grid-template-rows:
438
- var(--split-primary-size, minmax(12rem, 0.8fr))
439
- minmax(0, 1.2fr);
869
+ fray-splitview.vertical {
870
+ flex-direction: column;
871
+ }
872
+
873
+ fray-splitview > fray-primary {
874
+ flex: 0 1 var(--split-primary-size, 40%);
875
+ }
876
+
877
+ fray-splitview > fray-secondary {
878
+ flex: 1;
440
879
  }
441
880
 
442
- fray-split-view > [data-part] {
881
+ fray-splitview > fray-primary,
882
+ fray-splitview > fray-secondary {
443
883
  min-width: 0;
444
884
  min-height: 0;
445
885
  overflow: auto;
446
886
  }
447
887
 
448
- fray-split-view[data-direction="horizontal"] > [data-part="primary"] {
888
+ fray-splitview.horizontal > fray-primary {
449
889
  border-inline-end: 1px solid var(--ui-border-color);
450
890
  }
451
891
 
452
- fray-split-view[data-direction="vertical"] > [data-part="primary"] {
892
+ fray-splitview.vertical > fray-primary {
453
893
  border-block-end: 1px solid var(--ui-border-color);
454
894
  }
455
895
 
456
- fray-tab-line {
896
+ fray-tabline {
457
897
  display: flex;
898
+ background: var(--tabline-background);
458
899
  flex-flow: row wrap;
900
+ overflow: hidden;
459
901
  padding-top: 3px;
902
+ padding-inline-start: var(--tabline-padding-inline-start);
903
+ flex: 0 0 auto;
904
+ z-index: 0;
905
+ }
906
+
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;
460
949
  }
461
950
 
462
- fray-tab-panel {
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);
463
962
  display: flex;
464
963
  flex-direction: column;
465
964
  width: 100%;
466
- min-height: 0;
965
+ height: 100%;
467
966
  overflow: hidden;
468
967
  }
469
968
 
470
- fray-tab-panel > [data-part="content"] {
969
+ fray-tabpanel > section[role="tabpanel"] {
471
970
  display: flex;
472
971
  flex-direction: column;
473
972
  flex: 1;
474
973
  overflow: auto;
974
+ padding: 3px;
975
+ z-index: 2;
475
976
  }
476
977
 
477
- fray-textbox input {
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;
986
+ }
987
+
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;
478
1002
  cursor: text;
479
1003
  }
480
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
+
481
1018
  fray-textbox > [role="alert"] {
482
1019
  margin: 0;
483
1020
  }
484
1021
 
485
- 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"] {
486
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;
487
1061
  }
488
1062
 
489
- fray-theme-picker > select {
490
- min-width: 8rem;
1063
+ fray-toggle > fray-options > button[role="radio"]:hover:not(:disabled)[aria-checked="false"] {
1064
+ background: var(--button-background-hover);
491
1065
  }
492
1066
 
493
- fieldset:has(> [data-part="options"]) {
494
- margin: 0;
495
- padding: 0;
496
- 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;
497
1071
  }
498
1072
 
499
- fieldset:has(> [data-part="options"]) > [data-part="options"] {
500
- display: flex;
501
- 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);
502
1113
  }
503
1114
 
504
1115
  fray-toolbar {
505
1116
  display: flex;
506
1117
  flex-wrap: wrap;
507
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);
508
1123
  gap: var(--spacing-small, 0.5rem);
509
1124
  padding: var(--ui-padding);
510
1125
  }
511
1126
 
512
- fray-toolbar[data-orientation="vertical"] {
1127
+ fray-toolbar > * {
1128
+ margin: 0;
1129
+ }
1130
+
1131
+ fray-toolbar[aria-orientation="vertical"] {
513
1132
  flex-direction: column;
514
1133
  align-items: stretch;
515
1134
  }
516
1135
 
517
- fray-tree-view {
1136
+ fray-treeview {
518
1137
  display: flex;
519
1138
  flex-direction: column;
520
1139
  min-width: 0;
@@ -522,12 +1141,15 @@ fray-tree-view {
522
1141
  overflow: auto;
523
1142
  }
524
1143
 
525
- fray-tree-view > [role="tree"] {
1144
+ fray-treeview > [role="tree"] {
526
1145
  display: grid;
527
1146
  align-content: start;
1147
+ margin: 0;
1148
+ padding: 0;
1149
+ list-style: none;
528
1150
  }
529
1151
 
530
- fray-tree-view [role="treeitem"] {
1152
+ fray-treeview [role="treeitem"] {
531
1153
  display: flex;
532
1154
  align-items: flex-start;
533
1155
  gap: 0.35rem;
@@ -538,44 +1160,44 @@ fray-tree-view {
538
1160
  user-select: none;
539
1161
  }
540
1162
 
541
- 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 {
542
1179
  flex: 0 0 1rem;
543
1180
  text-align: center;
544
1181
  }
545
1182
 
546
- fray-tree-view [data-part="expander"][data-expandable] {
1183
+ fray-treeview [role="treeitem"][aria-expanded] > fray-expander {
547
1184
  cursor: pointer;
548
1185
  }
549
1186
 
550
- fray-tree-view [data-part="label"] {
1187
+ fray-treeview fray-label {
551
1188
  min-width: 0;
552
1189
  overflow-wrap: anywhere;
553
1190
  }
554
1191
 
555
- fray-tree-view > [role="status"] {
1192
+ fray-treeview > [role="status"],
1193
+ fray-treeview > [role="alert"] {
556
1194
  margin: 0;
557
1195
  padding: var(--ui-padding, 0.75rem);
558
1196
  }
559
1197
 
560
1198
  @media (forced-colors: active) {
561
- fray-tree-view [role="treeitem"][aria-selected="true"] {
1199
+ fray-treeview [role="treeitem"][aria-selected="true"] {
562
1200
  outline: 2px solid Highlight;
563
1201
  forced-color-adjust: auto;
564
1202
  }
565
1203
  }
566
-
567
- fray-tri-checkbox > [role="checkbox"] {
568
- display: inline-flex;
569
- align-items: center;
570
- gap: 0.35em;
571
- width: auto;
572
- font-family: inherit;
573
- }
574
-
575
- fray-tri-checkbox .inputshell {
576
- display: inline-grid;
577
- width: 1em;
578
- height: 1em;
579
- line-height: 1;
580
- place-items: center;
581
- }