@olenbetong/appframe-ds 1.0.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/package.json +8 -7
- package/scripts/copyAssets.mjs +27 -55
- package/src/AfLookup/Lookup.css +129 -125
- package/src/AfLookup/Lookup.tsx +184 -162
- package/src/AfLookup/LookupCombobox.css +78 -78
- package/src/AfLookup/LookupCombobox.tsx +237 -237
- package/src/AfLookup/LookupEdit.tsx +130 -130
- package/src/AfLookup/LookupGrid.tsx +124 -124
- package/src/AfLookup/index.ts +5 -5
- package/src/autocomplete/Autocomplete.css +256 -256
- package/src/autocomplete/Autocomplete.tsx +320 -320
- package/src/autocomplete/AutocompleteFrame.tsx +168 -168
- package/src/autocomplete/Combobox.tsx +286 -286
- package/src/autocomplete/index.ts +4 -4
- package/src/autocomplete/types.ts +204 -204
- package/src/autocomplete/utils.ts +183 -183
- package/src/binding/BoundNumericTextField.tsx +102 -102
- package/src/binding/BoundTextField.tsx +49 -49
- package/src/binding/CancelButton.tsx +30 -30
- package/src/binding/CancelIconButton.tsx +30 -30
- package/src/binding/DataEditToolbar.tsx +92 -92
- package/src/binding/DeleteButton.tsx +35 -35
- package/src/binding/DeleteIconButton.tsx +35 -35
- package/src/binding/RefreshButton.tsx +31 -31
- package/src/binding/RefreshIconButton.tsx +33 -33
- package/src/binding/RefreshRowIconButton.tsx +33 -33
- package/src/binding/SaveButton.tsx +37 -37
- package/src/binding/SaveIconButton.tsx +38 -38
- package/src/container/Container.tsx +49 -49
- package/src/container/index.ts +1 -1
- package/src/cutoff/CutOffPicker.css +12 -0
- package/src/cutoff/CutOffPicker.tsx +165 -0
- package/src/cutoff/context.tsx +194 -0
- package/src/cutoff/dsCutOffDates.ts +21 -0
- package/src/cutoff/index.ts +4 -0
- package/src/cutoff/utils.test.ts +59 -0
- package/src/cutoff/utils.ts +276 -0
- package/src/filter/ChipListInput.tsx +79 -79
- package/src/filter/FieldFilterPanel.css +150 -150
- package/src/filter/FieldFilterPanel.tsx +309 -309
- package/src/filter/FilterBuilder.css +152 -152
- package/src/filter/FilterBuilder.test.tsx +153 -153
- package/src/filter/FilterBuilder.tsx +435 -435
- package/src/filter/FilterEditor.css +231 -231
- package/src/filter/FilterEditor.test.tsx +259 -259
- package/src/filter/FilterEditor.tsx +75 -74
- package/src/filter/FilterGroupEditor.tsx +160 -160
- package/src/filter/FilterNameDialog.css +22 -22
- package/src/filter/FilterNameDialog.tsx +81 -81
- package/src/filter/FilterRow.tsx +117 -117
- package/src/filter/FilterShareDialog.css +28 -28
- package/src/filter/FilterShareDialog.tsx +201 -201
- package/src/filter/FilterStringField.tsx +78 -77
- package/src/filter/FilterValueEditor.tsx +220 -220
- package/src/filter/SavedFilterTree.css +107 -107
- package/src/filter/SavedFilterTree.test.tsx +94 -94
- package/src/filter/SavedFilterTree.tsx +218 -222
- package/src/filter/fieldFilter.test.ts +158 -158
- package/src/filter/fieldFilter.ts +139 -139
- package/src/filter/index.ts +27 -27
- package/src/filter/types.ts +38 -38
- package/src/filter/useDistinctValues.test.ts +102 -102
- package/src/filter/useDistinctValues.ts +230 -230
- package/src/global.d.ts +11 -11
- package/src/grid/AfGridColumnsPanel.tsx +118 -118
- package/src/grid/AfGridContext.tsx +51 -51
- package/src/grid/AfGridError.tsx +46 -46
- package/src/grid/AfHeaderFilterCell.tsx +147 -151
- package/src/grid/AfHeaderFilterPanel.tsx +111 -111
- package/src/grid/GridEditLookup.css +12 -0
- package/src/grid/GridEditLookup.tsx +121 -0
- package/src/grid/Toolbar.tsx +233 -233
- package/src/grid/editing.ts +100 -100
- package/src/grid/filter.ts +78 -78
- package/src/grid/formatters.ts +48 -48
- package/src/grid/index.css +245 -245
- package/src/grid/index.tsx +489 -484
- package/src/grid/license.ts +48 -48
- package/src/grid/localization.ts +369 -369
- package/src/grid/slots/index.tsx +307 -307
- package/src/grid/slots/slots.css +64 -64
- package/src/grid/theme.tsx +138 -138
- package/src/grid/useAfColumns.tsx +371 -371
- package/src/grid/useAfCurrentIndex.ts +63 -63
- package/src/grid/useAfData.ts +20 -20
- package/src/grid/useAfFilter.ts +160 -160
- package/src/grid/useAfFilterFields.ts +55 -55
- package/src/grid/useAfGridApi.ts +71 -71
- package/src/grid/useAfKeyBindings.ts +36 -36
- package/src/grid/useAfNewItemRow.ts +258 -258
- package/src/grid/useAfPagination.ts +53 -53
- package/src/grid/useAfPersistedState.ts +230 -230
- package/src/grid/useAfRowEditModel.ts +145 -145
- package/src/grid/useAfRowGrouping.ts +47 -47
- package/src/grid/useAfServerAggregation.ts +145 -145
- package/src/grid/useAfSortModel.ts +84 -84
- package/src/i18n.ts +13 -0
- package/src/index.ts +14 -12
- package/src/input/InputAdornments.css +75 -75
- package/src/input/InputAdornments.tsx +102 -102
- package/src/input/index.ts +1 -1
- package/src/layout/AppMenu.tsx +74 -75
- package/src/layout/AppMenuDrawer.css +70 -70
- package/src/layout/AppMenuDrawer.tsx +122 -122
- package/src/layout/ErrorBoundary.tsx +162 -162
- package/src/layout/ResponsiveDialog.css +86 -0
- package/src/layout/ResponsiveDialog.tsx +55 -0
- package/src/layout/index.tsx +69 -68
- package/src/link/Link.tsx +23 -0
- package/src/link/index.ts +1 -0
- package/src/mdi/Mdi.css +138 -138
- package/src/mdi/Mdi.test.tsx +91 -87
- package/src/mdi/Mdi.tsx +141 -141
- package/src/mdi/MdiConfirmCloseDialog.tsx +47 -47
- package/src/mdi/MdiContext.tsx +59 -59
- package/src/mdi/MdiDocumentContext.tsx +60 -60
- package/src/mdi/MdiPanel.tsx +61 -61
- package/src/mdi/MdiRestore.test.tsx +86 -82
- package/src/mdi/MdiTab.tsx +30 -30
- package/src/mdi/controller.test.ts +382 -382
- package/src/mdi/controller.ts +656 -656
- package/src/mdi/dockviewHost.ts +132 -132
- package/src/mdi/fakeHost.ts +200 -200
- package/src/mdi/host.ts +44 -44
- package/src/mdi/ids.test.ts +20 -20
- package/src/mdi/ids.ts +18 -18
- package/src/mdi/index.ts +31 -31
- package/src/mdi/layoutRestore.test.ts +156 -156
- package/src/mdi/layoutRestore.ts +311 -311
- package/src/mdi/layoutSpec.test.ts +143 -143
- package/src/mdi/layoutSpec.ts +214 -214
- package/src/mdi/layoutStore.test.ts +93 -93
- package/src/mdi/layoutStore.ts +99 -99
- package/src/mdi/memorySettingsStore.ts +21 -21
- package/src/mdi/registry.ts +34 -34
- package/src/mdi/testTypes.ts +37 -37
- package/src/mdi/theme.ts +22 -22
- package/src/mdi/types.ts +214 -214
- package/src/page/Page.css +53 -53
- package/src/page/PageBlock.css +64 -64
- package/src/page/PageBlock.tsx +92 -92
- package/src/page/PageHeader.css +88 -88
- package/src/page/PageHeader.tsx +115 -116
- package/src/page/PageTitle.css +5 -0
- package/src/page/PageTitle.tsx +21 -0
- package/src/page/index.ts +4 -3
- package/src/paper/Paper.tsx +52 -52
- package/src/progress/LinearProgress.css +93 -93
- package/src/progress/LinearProgress.tsx +104 -104
- package/src/progress/index.ts +1 -1
- package/src/report-downloader/ReportDownloader.css +67 -67
- package/src/report-downloader/components/StatusItem.tsx +87 -86
- package/src/report-downloader/components/StatusList.tsx +28 -28
- package/src/report-downloader/index.ts +41 -41
- package/src/report-downloader/status.tsx +92 -92
- package/src/sortable/DropIndicator.css +51 -51
- package/src/sortable/DropIndicator.tsx +27 -27
- package/src/sortable/SortableItemList.css +21 -21
- package/src/sortable/SortableItemList.tsx +264 -264
- package/src/sortable/index.ts +8 -8
- package/src/sortable/reorderSortOrder.ts +126 -126
- package/src/sortable/sortOrder.ts +101 -101
- package/src/sortable/types.ts +9 -9
- package/src/sortable/useSortableContainer.ts +53 -53
- package/src/sortable/useSortableItem.ts +95 -95
- package/src/sortable/useSortableList.ts +117 -117
- package/src/test/happy-dom-document-class.ts +24 -24
- package/src/test/setup.ts +12 -12
- package/src/theme/useDsColorScheme.ts +53 -53
- package/tsconfig.build.json +9 -9
- package/tsconfig.json +8 -8
- package/vitest.config.ts +10 -10
|
@@ -1,231 +1,231 @@
|
|
|
1
|
-
.ObFilterEditor-root {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-direction: column;
|
|
4
|
-
gap: var(--ds-size-2);
|
|
5
|
-
min-block-size: 0;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
/*
|
|
9
|
-
* The conditions scroll, the generated filter string does not, so it stays in
|
|
10
|
-
* view at the foot of the editor. The flex basis keeps the scroll area usable
|
|
11
|
-
* when the editor is short, as on a phone, but — unlike a minimum height — it
|
|
12
|
-
* still lets the editor shrink when it shares a fixed height with content below
|
|
13
|
-
* it, which would otherwise overflow and overlap that content.
|
|
14
|
-
*/
|
|
15
|
-
.ObFilterEditor-body {
|
|
16
|
-
display: flex;
|
|
17
|
-
flex-direction: column;
|
|
18
|
-
gap: var(--ds-size-2);
|
|
19
|
-
flex: 1 1 min(16rem, 50dvh);
|
|
20
|
-
min-block-size: 0;
|
|
21
|
-
overflow: auto;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.ObFilterEditor-filterString {
|
|
25
|
-
flex: 0 0 auto;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
.ObFilterEditor-intro {
|
|
29
|
-
margin: 0;
|
|
30
|
-
color: var(--ds-color-neutral-text-subtle);
|
|
31
|
-
font-size: var(--ds-font-size-2);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.ObFilterEditor-groups {
|
|
35
|
-
display: flex;
|
|
36
|
-
flex-direction: column;
|
|
37
|
-
gap: var(--ds-size-3);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.ObFilterEditor-group {
|
|
41
|
-
display: flex;
|
|
42
|
-
flex-direction: column;
|
|
43
|
-
gap: var(--ds-size-2);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/*
|
|
47
|
-
* The border is drawn around the conditions only, not the group header, and the
|
|
48
|
-
* whole box is indented so the header reads as owning the conditions below it
|
|
49
|
-
* rather than as a sibling of the first one.
|
|
50
|
-
*/
|
|
51
|
-
.ObFilterEditor-groupItems {
|
|
52
|
-
display: flex;
|
|
53
|
-
flex-direction: column;
|
|
54
|
-
gap: var(--ds-size-2);
|
|
55
|
-
|
|
56
|
-
margin-inline-start: var(--ds-size-4);
|
|
57
|
-
padding: var(--ds-size-2);
|
|
58
|
-
border: 1px solid var(--ds-color-neutral-border-subtle);
|
|
59
|
-
border-radius: var(--ds-border-radius-md);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/* Nested groups are tinted so the tree structure is readable. */
|
|
63
|
-
.ObFilterEditor-groupItems .ObFilterEditor-groupItems {
|
|
64
|
-
background-color: var(--ds-color-neutral-surface-tinted);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.ObFilterEditor-groupHeader {
|
|
68
|
-
display: flex;
|
|
69
|
-
align-items: center;
|
|
70
|
-
gap: var(--ds-size-2);
|
|
71
|
-
flex-wrap: wrap;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.ObFilterEditor-groupButton svg {
|
|
75
|
-
flex: 0 0 auto;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/*
|
|
79
|
-
* The group buttons do not fit next to the operator select on a phone, so only
|
|
80
|
-
* their icon is shown. `aria-label` carries the name either way.
|
|
81
|
-
*/
|
|
82
|
-
@media (width < 40rem) {
|
|
83
|
-
.ObFilterEditor-groupButtonLabel {
|
|
84
|
-
display: none;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.ObFilterEditor-groupItems {
|
|
88
|
-
margin-inline-start: var(--ds-size-2);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.ObFilterEditor-groupMode {
|
|
93
|
-
flex: 0 0 auto;
|
|
94
|
-
width: auto;
|
|
95
|
-
min-width: 6rem;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
.ObFilterEditor-groupLabel {
|
|
99
|
-
font-weight: 600;
|
|
100
|
-
font-size: var(--ds-font-size-2);
|
|
101
|
-
text-transform: uppercase;
|
|
102
|
-
letter-spacing: 0.04em;
|
|
103
|
-
color: var(--ds-color-neutral-text-subtle);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.ObFilterEditor-row {
|
|
107
|
-
display: flex;
|
|
108
|
-
align-items: center;
|
|
109
|
-
gap: var(--ds-size-2);
|
|
110
|
-
flex-wrap: wrap;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/*
|
|
114
|
-
* On narrow viewports the parts of a condition wrap onto several lines, which
|
|
115
|
-
* makes neighbouring conditions run together. Separate them with extra spacing
|
|
116
|
-
* and a rule so it stays obvious where one condition ends and the next begins.
|
|
117
|
-
*/
|
|
118
|
-
@media (width < 40rem) {
|
|
119
|
-
.ObFilterEditor-row {
|
|
120
|
-
gap: var(--ds-size-3);
|
|
121
|
-
padding-block-end: var(--ds-size-3);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
.ObFilterEditor-row:not(:last-child) {
|
|
125
|
-
border-block-end: 1px solid var(--ds-color-neutral-border-subtle);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
.ObFilterEditor-field {
|
|
130
|
-
flex: 1 1 12rem;
|
|
131
|
-
min-width: 10rem;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
.ObFilterEditor-operator {
|
|
135
|
-
flex: 0 1 12rem;
|
|
136
|
-
min-width: 8rem;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
.ObFilterEditor-valueCell {
|
|
140
|
-
display: flex;
|
|
141
|
-
align-items: center;
|
|
142
|
-
gap: var(--ds-size-1);
|
|
143
|
-
flex: 2 1 14rem;
|
|
144
|
-
min-width: 10rem;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
.ObFilterEditor-value {
|
|
148
|
-
flex: 1 1 auto;
|
|
149
|
-
min-width: 0;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
.ObFilterEditor-pair {
|
|
153
|
-
display: flex;
|
|
154
|
-
align-items: center;
|
|
155
|
-
gap: var(--ds-size-2);
|
|
156
|
-
flex: 1 1 auto;
|
|
157
|
-
min-width: 0;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
.ObFilterEditor-pairSeparator {
|
|
161
|
-
flex: 0 0 auto;
|
|
162
|
-
color: var(--ds-color-neutral-text-subtle);
|
|
163
|
-
font-size: var(--ds-font-size-2);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
.ObFilterEditor-chipList {
|
|
167
|
-
display: flex;
|
|
168
|
-
align-items: center;
|
|
169
|
-
flex-wrap: wrap;
|
|
170
|
-
gap: var(--ds-size-1);
|
|
171
|
-
flex: 1 1 auto;
|
|
172
|
-
min-width: 0;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.ObFilterEditor-chipListInput {
|
|
176
|
-
flex: 1 1 6rem;
|
|
177
|
-
min-width: 6rem;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
.ObFilterEditor-iconButton {
|
|
181
|
-
display: inline-flex;
|
|
182
|
-
align-items: center;
|
|
183
|
-
justify-content: center;
|
|
184
|
-
flex: 0 0 auto;
|
|
185
|
-
|
|
186
|
-
width: 2rem;
|
|
187
|
-
height: 2rem;
|
|
188
|
-
padding: 0;
|
|
189
|
-
|
|
190
|
-
background: none;
|
|
191
|
-
border: none;
|
|
192
|
-
border-radius: var(--ds-border-radius-md);
|
|
193
|
-
color: var(--ds-color-neutral-text-subtle);
|
|
194
|
-
cursor: pointer;
|
|
195
|
-
|
|
196
|
-
&:hover {
|
|
197
|
-
background-color: var(--ds-color-neutral-surface-hover);
|
|
198
|
-
color: var(--ds-color-neutral-text-default);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
&[aria-pressed="true"] {
|
|
202
|
-
background-color: var(--ds-color-neutral-surface-active);
|
|
203
|
-
color: var(--ds-color-neutral-text-default);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
svg {
|
|
207
|
-
width: 1.25rem;
|
|
208
|
-
height: 1.25rem;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
.ObFilterEditor-filterString {
|
|
213
|
-
display: flex;
|
|
214
|
-
flex-direction: column;
|
|
215
|
-
gap: var(--ds-size-1);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
.ObFilterEditor-hint {
|
|
219
|
-
color: var(--ds-color-neutral-text-subtle);
|
|
220
|
-
font-size: var(--ds-font-size-1);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/*
|
|
224
|
-
* The converting hint sits on the label row rather than under the input, so that
|
|
225
|
-
* it appearing and disappearing does not shift the layout.
|
|
226
|
-
*/
|
|
227
|
-
.ObFilterEditor-filterStringLabel {
|
|
228
|
-
display: flex;
|
|
229
|
-
align-items: baseline;
|
|
230
|
-
gap: var(--ds-size-2);
|
|
231
|
-
}
|
|
1
|
+
.ObFilterEditor-root {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
gap: var(--ds-size-2);
|
|
5
|
+
min-block-size: 0;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* The conditions scroll, the generated filter string does not, so it stays in
|
|
10
|
+
* view at the foot of the editor. The flex basis keeps the scroll area usable
|
|
11
|
+
* when the editor is short, as on a phone, but — unlike a minimum height — it
|
|
12
|
+
* still lets the editor shrink when it shares a fixed height with content below
|
|
13
|
+
* it, which would otherwise overflow and overlap that content.
|
|
14
|
+
*/
|
|
15
|
+
.ObFilterEditor-body {
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
gap: var(--ds-size-2);
|
|
19
|
+
flex: 1 1 min(16rem, 50dvh);
|
|
20
|
+
min-block-size: 0;
|
|
21
|
+
overflow: auto;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.ObFilterEditor-filterString {
|
|
25
|
+
flex: 0 0 auto;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.ObFilterEditor-intro {
|
|
29
|
+
margin: 0;
|
|
30
|
+
color: var(--ds-color-neutral-text-subtle);
|
|
31
|
+
font-size: var(--ds-font-size-2);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.ObFilterEditor-groups {
|
|
35
|
+
display: flex;
|
|
36
|
+
flex-direction: column;
|
|
37
|
+
gap: var(--ds-size-3);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.ObFilterEditor-group {
|
|
41
|
+
display: flex;
|
|
42
|
+
flex-direction: column;
|
|
43
|
+
gap: var(--ds-size-2);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/*
|
|
47
|
+
* The border is drawn around the conditions only, not the group header, and the
|
|
48
|
+
* whole box is indented so the header reads as owning the conditions below it
|
|
49
|
+
* rather than as a sibling of the first one.
|
|
50
|
+
*/
|
|
51
|
+
.ObFilterEditor-groupItems {
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
gap: var(--ds-size-2);
|
|
55
|
+
|
|
56
|
+
margin-inline-start: var(--ds-size-4);
|
|
57
|
+
padding: var(--ds-size-2);
|
|
58
|
+
border: 1px solid var(--ds-color-neutral-border-subtle);
|
|
59
|
+
border-radius: var(--ds-border-radius-md);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* Nested groups are tinted so the tree structure is readable. */
|
|
63
|
+
.ObFilterEditor-groupItems .ObFilterEditor-groupItems {
|
|
64
|
+
background-color: var(--ds-color-neutral-surface-tinted);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.ObFilterEditor-groupHeader {
|
|
68
|
+
display: flex;
|
|
69
|
+
align-items: center;
|
|
70
|
+
gap: var(--ds-size-2);
|
|
71
|
+
flex-wrap: wrap;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.ObFilterEditor-groupButton svg {
|
|
75
|
+
flex: 0 0 auto;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/*
|
|
79
|
+
* The group buttons do not fit next to the operator select on a phone, so only
|
|
80
|
+
* their icon is shown. `aria-label` carries the name either way.
|
|
81
|
+
*/
|
|
82
|
+
@media (width < 40rem) {
|
|
83
|
+
.ObFilterEditor-groupButtonLabel {
|
|
84
|
+
display: none;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.ObFilterEditor-groupItems {
|
|
88
|
+
margin-inline-start: var(--ds-size-2);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.ObFilterEditor-groupMode {
|
|
93
|
+
flex: 0 0 auto;
|
|
94
|
+
width: auto;
|
|
95
|
+
min-width: 6rem;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.ObFilterEditor-groupLabel {
|
|
99
|
+
font-weight: 600;
|
|
100
|
+
font-size: var(--ds-font-size-2);
|
|
101
|
+
text-transform: uppercase;
|
|
102
|
+
letter-spacing: 0.04em;
|
|
103
|
+
color: var(--ds-color-neutral-text-subtle);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.ObFilterEditor-row {
|
|
107
|
+
display: flex;
|
|
108
|
+
align-items: center;
|
|
109
|
+
gap: var(--ds-size-2);
|
|
110
|
+
flex-wrap: wrap;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/*
|
|
114
|
+
* On narrow viewports the parts of a condition wrap onto several lines, which
|
|
115
|
+
* makes neighbouring conditions run together. Separate them with extra spacing
|
|
116
|
+
* and a rule so it stays obvious where one condition ends and the next begins.
|
|
117
|
+
*/
|
|
118
|
+
@media (width < 40rem) {
|
|
119
|
+
.ObFilterEditor-row {
|
|
120
|
+
gap: var(--ds-size-3);
|
|
121
|
+
padding-block-end: var(--ds-size-3);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.ObFilterEditor-row:not(:last-child) {
|
|
125
|
+
border-block-end: 1px solid var(--ds-color-neutral-border-subtle);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.ObFilterEditor-field {
|
|
130
|
+
flex: 1 1 12rem;
|
|
131
|
+
min-width: 10rem;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.ObFilterEditor-operator {
|
|
135
|
+
flex: 0 1 12rem;
|
|
136
|
+
min-width: 8rem;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.ObFilterEditor-valueCell {
|
|
140
|
+
display: flex;
|
|
141
|
+
align-items: center;
|
|
142
|
+
gap: var(--ds-size-1);
|
|
143
|
+
flex: 2 1 14rem;
|
|
144
|
+
min-width: 10rem;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.ObFilterEditor-value {
|
|
148
|
+
flex: 1 1 auto;
|
|
149
|
+
min-width: 0;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.ObFilterEditor-pair {
|
|
153
|
+
display: flex;
|
|
154
|
+
align-items: center;
|
|
155
|
+
gap: var(--ds-size-2);
|
|
156
|
+
flex: 1 1 auto;
|
|
157
|
+
min-width: 0;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.ObFilterEditor-pairSeparator {
|
|
161
|
+
flex: 0 0 auto;
|
|
162
|
+
color: var(--ds-color-neutral-text-subtle);
|
|
163
|
+
font-size: var(--ds-font-size-2);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.ObFilterEditor-chipList {
|
|
167
|
+
display: flex;
|
|
168
|
+
align-items: center;
|
|
169
|
+
flex-wrap: wrap;
|
|
170
|
+
gap: var(--ds-size-1);
|
|
171
|
+
flex: 1 1 auto;
|
|
172
|
+
min-width: 0;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.ObFilterEditor-chipListInput {
|
|
176
|
+
flex: 1 1 6rem;
|
|
177
|
+
min-width: 6rem;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.ObFilterEditor-iconButton {
|
|
181
|
+
display: inline-flex;
|
|
182
|
+
align-items: center;
|
|
183
|
+
justify-content: center;
|
|
184
|
+
flex: 0 0 auto;
|
|
185
|
+
|
|
186
|
+
width: 2rem;
|
|
187
|
+
height: 2rem;
|
|
188
|
+
padding: 0;
|
|
189
|
+
|
|
190
|
+
background: none;
|
|
191
|
+
border: none;
|
|
192
|
+
border-radius: var(--ds-border-radius-md);
|
|
193
|
+
color: var(--ds-color-neutral-text-subtle);
|
|
194
|
+
cursor: pointer;
|
|
195
|
+
|
|
196
|
+
&:hover {
|
|
197
|
+
background-color: var(--ds-color-neutral-surface-hover);
|
|
198
|
+
color: var(--ds-color-neutral-text-default);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
&[aria-pressed="true"] {
|
|
202
|
+
background-color: var(--ds-color-neutral-surface-active);
|
|
203
|
+
color: var(--ds-color-neutral-text-default);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
svg {
|
|
207
|
+
width: 1.25rem;
|
|
208
|
+
height: 1.25rem;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.ObFilterEditor-filterString {
|
|
213
|
+
display: flex;
|
|
214
|
+
flex-direction: column;
|
|
215
|
+
gap: var(--ds-size-1);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.ObFilterEditor-hint {
|
|
219
|
+
color: var(--ds-color-neutral-text-subtle);
|
|
220
|
+
font-size: var(--ds-font-size-1);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/*
|
|
224
|
+
* The converting hint sits on the label row rather than under the input, so that
|
|
225
|
+
* it appearing and disappearing does not shift the layout.
|
|
226
|
+
*/
|
|
227
|
+
.ObFilterEditor-filterStringLabel {
|
|
228
|
+
display: flex;
|
|
229
|
+
align-items: baseline;
|
|
230
|
+
gap: var(--ds-size-2);
|
|
231
|
+
}
|