@dataloop-ai/components 0.20.197 → 0.20.199

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 (27) hide show
  1. package/package.json +1 -1
  2. package/src/components/basic/DlButton/DlButton.vue +9 -8
  3. package/src/components/basic/DlListItem/utils.ts +1 -1
  4. package/src/components/compound/DlDateTime/DlDateTimeRange/DateTimeRangeContent.vue +177 -0
  5. package/src/components/compound/DlDateTime/DlDateTimeRange/DlDateTimeRange.vue +101 -106
  6. package/src/components/compound/DlDateTime/DlDateTimeRange/types.ts +5 -0
  7. package/src/components/compound/DlDropdownButton/DlDropdownButton.vue +24 -27
  8. package/src/components/compound/DlInput/DlInput.vue +21 -5
  9. package/src/components/compound/DlSearches/DlSearch/DlSearch.vue +12 -0
  10. package/src/components/compound/DlSearches/DlSmartSearch/DlSmartSearch.vue +3 -8
  11. package/src/components/compound/DlSearches/DlSmartSearch/components/DlSmartSearchInput.vue +71 -19
  12. package/src/components/compound/DlSearches/DlSmartSearch/components/DlSmartSearchJsonEditorDialog.vue +187 -45
  13. package/src/components/compound/DlSelect/DlSelect.vue +15 -7
  14. package/src/components/compound/DlSelect/components/DlSelectOption.vue +9 -8
  15. package/src/components/compound/DlTable/DlTable.vue +2 -2
  16. package/src/components/compound/DlTreeTable/DlTreeTable.vue +16 -16
  17. package/src/components/compound/DlTreeTable/views/DlTrTreeView.vue +1 -1
  18. package/src/components/essential/DlCheckbox/DlCheckbox.vue +4 -4
  19. package/src/components/essential/DlLink/DlLink.vue +6 -2
  20. package/src/components/essential/DlList/DlList.vue +4 -8
  21. package/src/components/essential/DlProgressBar/DlProgressBar.vue +1 -1
  22. package/src/components/essential/DlSwitch/DlSwitch.vue +14 -4
  23. package/src/components/essential/DlTrend/DlTrend.vue +22 -7
  24. package/src/components/shared/DlVirtualScroll/DlVirtualScroll.vue +3 -1
  25. package/src/demos/DlDateTimeRangeDemo.vue +20 -0
  26. package/src/demos/SmartSearchDemo/DlSmartSearchDemo.vue +1 -0
  27. package/src/utils/getColor.ts +2 -2
@@ -985,11 +985,11 @@ export default defineComponent({
985
985
  },
986
986
  getBorderColor(): string {
987
987
  if (this.error) {
988
- return `var(--dl-color-negative)`
988
+ return `var(--dell-red-500)`
989
989
  } else if (this.warning) {
990
- return `var(--dl-color-warning)`
990
+ return `var(--dell-yellow-500)`
991
991
  } else {
992
- return `var(--dl-color-secondary)`
992
+ return `var(--dell-blue-500)`
993
993
  }
994
994
  },
995
995
  cssVars(): Record<string, any> {
@@ -1034,6 +1034,12 @@ export default defineComponent({
1034
1034
  classes.push('dl-input__input--disabled')
1035
1035
  }
1036
1036
 
1037
+ if (this.inputLength) {
1038
+ classes.push('dl-input__input--text-color')
1039
+ } else {
1040
+ classes.push('dl-input__input--placeholder-color')
1041
+ }
1042
+
1037
1043
  return classes
1038
1044
  },
1039
1045
  asteriskClasses(): string[] {
@@ -1366,7 +1372,7 @@ export default defineComponent({
1366
1372
  [contenteditable='true']:empty:before {
1367
1373
  content: attr(placeholder);
1368
1374
  display: inline;
1369
- opacity: 0.5;
1375
+ opacity: 1;
1370
1376
  -webkit-text-security: none;
1371
1377
  }
1372
1378
 
@@ -1470,6 +1476,9 @@ export default defineComponent({
1470
1476
  &--s {
1471
1477
  height: 18px;
1472
1478
  }
1479
+ &--m {
1480
+ height: 26px;
1481
+ }
1473
1482
  }
1474
1483
 
1475
1484
  &__input {
@@ -1477,7 +1486,6 @@ export default defineComponent({
1477
1486
  font-family: Arial, Helvetica, sans-serif;
1478
1487
  border-right: none;
1479
1488
  border-radius: 0px;
1480
- color: var(--dl-color-darker);
1481
1489
  white-space: var(--dl-input-white-space);
1482
1490
  font-size: var(--dl-font-size-body);
1483
1491
  overflow: hidden scroll;
@@ -1493,6 +1501,13 @@ export default defineComponent({
1493
1501
  line-height: 10px;
1494
1502
  width: 100%;
1495
1503
 
1504
+ &--text-color {
1505
+ color: var(--dell-gray-800);
1506
+ }
1507
+ &--placeholder-color {
1508
+ color: var(--dell-gray-500);
1509
+ }
1510
+
1496
1511
  &--prepend {
1497
1512
  width: calc(100% - 10px - 28px);
1498
1513
  }
@@ -1518,6 +1533,7 @@ export default defineComponent({
1518
1533
  }
1519
1534
 
1520
1535
  &--m {
1536
+ height: 12px;
1521
1537
  line-height: 12px;
1522
1538
  padding-top: 7px;
1523
1539
  padding-bottom: 7px;
@@ -158,6 +158,18 @@ export default defineComponent({
158
158
  },
159
159
  onSearchButtonPress(): void {
160
160
  this.$emit('search', this.modelValue)
161
+ },
162
+ focus(): void {
163
+ const inputComponent = this.$refs.input as InstanceType<
164
+ typeof DlInput
165
+ >
166
+ inputComponent?.focus()
167
+ },
168
+ blur(): void {
169
+ const inputComponent = this.$refs.input as InstanceType<
170
+ typeof DlInput
171
+ >
172
+ inputComponent?.blur()
161
173
  }
162
174
  }
163
175
  })
@@ -1,12 +1,6 @@
1
1
  <template>
2
- <div
3
- class="dl-smart-search"
4
- :style="cssVars"
5
- >
6
- <div
7
- ref="inputWrapper"
8
- class="dl-smart-search__input-wrapper"
9
- >
2
+ <div class="dl-smart-search" :style="cssVars">
3
+ <div ref="inputWrapper" class="dl-smart-search__input-wrapper">
10
4
  <dl-smart-search-input
11
5
  ref="smartSearchInput"
12
6
  v-model="queryObject"
@@ -18,6 +12,7 @@
18
12
  :color-schema="colorSchema"
19
13
  :strict="strict"
20
14
  :placeholder="placeholder"
15
+ :disabled="disabled"
21
16
  @focus="isFocused = true"
22
17
  @blur="isFocused = false"
23
18
  @search="emitSearchQuery"
@@ -12,11 +12,7 @@
12
12
  :icon="
13
13
  focused ? defaultIcon : statusIcon || defaultIcon
14
14
  "
15
- :color="
16
- focused
17
- ? defaultIconColor
18
- : statusIconColor || defaultIconColor
19
- "
15
+ :color="iconColor"
20
16
  size="16px"
21
17
  :inline="false"
22
18
  />
@@ -53,7 +49,7 @@
53
49
  </div>
54
50
  </div>
55
51
  <dl-tooltip
56
- v-if="!focused"
52
+ v-if="!focused && !noTooltip"
57
53
  border="1px solid var(--dl-color-separator)"
58
54
  background-color="dl-color-panel-background"
59
55
  color="dl-color-darker"
@@ -248,6 +244,10 @@ export default defineComponent({
248
244
  type: String,
249
245
  default: '28px'
250
246
  },
247
+ noTooltip: {
248
+ type: Boolean,
249
+ default: false
250
+ },
251
251
  omitSuggestions: {
252
252
  type: Array as PropType<string[]>,
253
253
  default: () => [] as string[]
@@ -275,6 +275,7 @@ export default defineComponent({
275
275
  'blur',
276
276
  'input',
277
277
  'search',
278
+ 'status',
278
279
  'error',
279
280
  'clear'
280
281
  ],
@@ -297,6 +298,7 @@ export default defineComponent({
297
298
  defaultIcon,
298
299
  defaultIconColor,
299
300
  schema,
301
+ noTooltip,
300
302
  omitSuggestions,
301
303
  operatorsOverride,
302
304
  height,
@@ -960,6 +962,16 @@ export default defineComponent({
960
962
  }
961
963
  })
962
964
 
965
+ const iconColor = computed(() => {
966
+ if (disabled.value) {
967
+ return 'dl-color-disabled'
968
+ }
969
+ if (focused.value) {
970
+ return defaultIconColor.value
971
+ }
972
+ return statusIconColor.value || defaultIconColor.value
973
+ })
974
+
963
975
  const textareaStyles = computed<Record<string, string | number>>(() => {
964
976
  const overflow: string =
965
977
  scroll.value && focused.value ? 'scroll' : 'hidden'
@@ -994,9 +1006,14 @@ export default defineComponent({
994
1006
  })
995
1007
 
996
1008
  const inputClass = computed<string>(() => {
997
- return `dl-smart-search-input__textarea${
998
- focused.value ? ' focus' : ''
999
- }`
1009
+ let classes = 'dl-smart-search-input__textarea'
1010
+ if (focused.value) {
1011
+ classes += ' focus'
1012
+ }
1013
+ if (disabled.value) {
1014
+ classes += ' dl-smart-search-input__textarea--disabled'
1015
+ }
1016
+ return classes
1000
1017
  })
1001
1018
 
1002
1019
  const showClearButton = computed(() => {
@@ -1035,24 +1052,31 @@ export default defineComponent({
1035
1052
  return status.value
1036
1053
  }
1037
1054
 
1055
+ let newStatus: {
1056
+ type: string
1057
+ message: string
1058
+ }
1059
+
1038
1060
  if (!error.value && searchQuery.value !== '') {
1039
- return {
1061
+ newStatus = {
1040
1062
  type: 'success',
1041
1063
  message: ''
1042
1064
  }
1043
- }
1044
-
1045
- if (error.value === 'warning') {
1046
- return {
1065
+ } else if (error.value === 'warning') {
1066
+ newStatus = {
1047
1067
  type: 'warning',
1048
1068
  message: 'The query is not supported technically.'
1049
1069
  }
1070
+ } else {
1071
+ newStatus = {
1072
+ type: 'error',
1073
+ message: error.value
1074
+ }
1050
1075
  }
1051
1076
 
1052
- return {
1053
- type: 'error',
1054
- message: error.value
1055
- }
1077
+ emit('status', newStatus)
1078
+
1079
+ return newStatus
1056
1080
  })
1057
1081
 
1058
1082
  const inputPlaceholder = computed<string>(() => {
@@ -1085,11 +1109,23 @@ export default defineComponent({
1085
1109
  })
1086
1110
  })
1087
1111
 
1112
+ const uuid = v4()
1113
+ const watchFocusIn = () => {
1114
+ focused.value = focused.value ||
1115
+ !!document.activeElement?.closest(`#DlSmartSearchInput${uuid}`)
1116
+ }
1117
+
1088
1118
  watch(focused, (value, old) => {
1089
1119
  if (old === value) {
1090
1120
  return
1091
1121
  }
1092
1122
 
1123
+ if (!value) {
1124
+ const focusIn = 'focusin'
1125
+ window.removeEventListener(focusIn, watchFocusIn)
1126
+ window.addEventListener(focusIn, watchFocusIn)
1127
+ }
1128
+
1093
1129
  updateParentElementWidth()
1094
1130
  })
1095
1131
 
@@ -1150,7 +1186,7 @@ export default defineComponent({
1150
1186
  })
1151
1187
 
1152
1188
  return {
1153
- uuid: v4(),
1189
+ uuid,
1154
1190
  suggestionsDropdown,
1155
1191
  container,
1156
1192
  input,
@@ -1173,6 +1209,7 @@ export default defineComponent({
1173
1209
  debouncedSetInputValue,
1174
1210
  statusIcon,
1175
1211
  statusIconColor,
1212
+ iconColor,
1176
1213
  textareaStyles,
1177
1214
  searchBarClasses,
1178
1215
  inputClass,
@@ -1325,6 +1362,21 @@ export default defineComponent({
1325
1362
  }
1326
1363
  }
1327
1364
 
1365
+ &__textarea--disabled {
1366
+ &::before {
1367
+ color: var(--dl-color-disabled);
1368
+ }
1369
+ }
1370
+
1371
+ &__search-bar--disabled {
1372
+ .dl-smart-search-input__input,
1373
+ .dl-smart-search-input__textarea {
1374
+ &::before {
1375
+ color: var(--dl-color-disabled);
1376
+ }
1377
+ }
1378
+ }
1379
+
1328
1380
  &__input-wrapper,
1329
1381
  &__textarea-wrapper {
1330
1382
  min-height: 28px;
@@ -4,48 +4,116 @@
4
4
  v-model="isOpen"
5
5
  :height="500"
6
6
  :width="800"
7
- style="--dl-dialog-box-footer-padding: 10px 16px"
7
+ style="--dl-dialog-box-footer-padding: 10px 16px; --dl-dialog-box-content-padding: 0"
8
8
  >
9
9
  <template #header>
10
10
  <dl-dialog-box-header
11
- title="DQL Search"
11
+ title="DQL Editor"
12
12
  :close-button="true"
13
13
  @onClose="isOpen = false"
14
14
  />
15
15
  </template>
16
16
  <template #body>
17
17
  <div class="json-editor-layout">
18
- <div
19
- class="json-query-menu"
20
- style="margin-bottom: 10px"
21
- >
18
+ <div class="json-query-menu">
22
19
  <dl-select
23
20
  :model-value="selectedOption"
21
+ ref="jsonQueryMenu"
24
22
  width="300px"
25
23
  :options="selectOptions"
26
24
  placeholder="New Query"
25
+ searchable
26
+ size="m"
27
+ after-options-padding="0"
28
+ no-options-padding="0"
29
+ menu-style="overflow-y: hidden;"
27
30
  @update:model-value="onQuerySelect"
28
31
  >
29
32
  <template #selected="scope">
30
- <span class="json-query-menu-option">
33
+ <span class="json-query-menu-selected">
31
34
  {{ scope.opt ? scope.opt.label : '' }}
32
35
  </span>
33
36
  </template>
34
37
  <template #option="scope">
35
- <span class="json-query-menu-option">
36
- {{ scope.opt.label }}
37
- </span>
38
+ <div
39
+ v-if="selectOptions.length < 2"
40
+ class="json-query-menu-no-option"
41
+ disabled
42
+ style="cursor: default !important; padding: 14px 0 10px 0;"
43
+ >
44
+ No Saved Queries
45
+ </div>
46
+ <div v-else class="json-query-menu-option">
47
+ <div class="json-query-menu-option-label">
48
+ {{ scope.opt.label }}
49
+ </div>
50
+ <dl-icon
51
+ v-if="scope.opt.label !== 'New Query'"
52
+ icon="icon-dl-delete"
53
+ color="dl-color-negative"
54
+ class="json-query-menu-option-delete"
55
+ @click.stop="onDelete(scope.opt)"
56
+ >
57
+ <dl-tooltip>Delete</dl-tooltip>
58
+ </dl-icon>
59
+ </div>
60
+ </template>
61
+ <template #after-options>
62
+ <dl-separator
63
+ style="margin: 0 0 2px 0 !important"
64
+ type="horizontal"
65
+ />
66
+ <dl-button
67
+ icon="icon-dl-save"
68
+ flat
69
+ fluid
70
+ secondary
71
+ size="s"
72
+ label="Save Query"
73
+ class="json-query-menu-save-button"
74
+ @click="onSave"
75
+ />
76
+ </template>
77
+ <template #no-options>
78
+ <div class="json-query-menu-no-option">
79
+ No Results Found
80
+ </div>
81
+ <dl-separator
82
+ style="margin: 0 0 2px 0 !important"
83
+ type="horizontal"
84
+ />
85
+ <dl-button
86
+ icon="icon-dl-save"
87
+ flat
88
+ fluid
89
+ secondary
90
+ size="s"
91
+ label="Save Query"
92
+ class="json-query-menu-save-button"
93
+ @click="onSave"
94
+ />
38
95
  </template>
39
96
  </dl-select>
40
- <dl-button
41
- icon="icon-dl-align-left"
42
- label="Align Left"
43
- flat
44
- color="secondary"
45
- padding="0px 3px"
46
- :disabled="alignDisabled"
47
- @click="alignJSON"
48
- />
97
+ <div>
98
+ <dl-button
99
+ icon="icon-dl-align-left"
100
+ tooltip="Align Left"
101
+ flat
102
+ color="secondary"
103
+ padding="0px 3px"
104
+ :disabled="alignDisabled"
105
+ @click="alignJSON"
106
+ />
107
+ <dl-button
108
+ icon="icon-dl-copy"
109
+ tooltip="Copy"
110
+ flat
111
+ color="secondary"
112
+ padding="0px 3px"
113
+ :disabled="alignDisabled"
114
+ @click="copyJSON"
115
+ />
116
+ </div>
49
117
  </div>
50
118
  <dl-json-editor
51
119
  ref="jsonEditor"
@@ -65,7 +133,7 @@
65
133
  flat
66
134
  color="secondary"
67
135
  padding="0"
68
- @click="showDeleteDialog = true"
136
+ @click="optionToDelete = selectedOption"
69
137
  />
70
138
  <div class="json-editor-footer-actions">
71
139
  <dl-button
@@ -101,27 +169,20 @@
101
169
  <template #body>
102
170
  <dl-input
103
171
  v-model="newQueryName"
104
- title="Query name"
105
- style="text-align: center"
106
- placeholder="Type query name"
172
+ :red-asterisk="true"
173
+ :required="true"
174
+ title="Query Name"
175
+ placeholder="Insert query name"
107
176
  />
108
177
  </template>
109
178
  <template #footer>
110
179
  <div class="dl-smart-search__buttons--save">
111
180
  <dl-button
112
181
  :disabled="!newQueryName"
113
- outlined
114
- style="margin-right: 5px"
115
182
  @click="() => saveQuery(false)"
116
183
  >
117
184
  Save
118
185
  </dl-button>
119
- <dl-button
120
- :disabled="!newQueryName"
121
- @click="() => saveQuery(true)"
122
- >
123
- Save and Search
124
- </dl-button>
125
186
  </div>
126
187
  </template>
127
188
  </dl-dialog-box>
@@ -135,12 +196,13 @@
135
196
  />
136
197
  </template>
137
198
  <template #body>
138
- <dl-typography
139
- size="h3"
140
- style="display: flex; justify-content: center"
141
- >
142
- Are you sure you want to delete
143
- {{ selectedOption.label }}?
199
+ <dl-typography size="h5">
200
+ Are you sure you want to permanently delete the following query?
201
+ <br />
202
+ {{ optionToDelete.label }}
203
+ <br />
204
+ <br />
205
+ This action cannot be undone.
144
206
  </dl-typography>
145
207
  </template>
146
208
  <template #footer>
@@ -166,10 +228,12 @@ import {
166
228
  } from 'vue-demi'
167
229
  import { DlSelect } from '../../../DlSelect'
168
230
  import { DlSelectOption } from '../../../DlSelect/types'
231
+ import { DlSeparator } from '../../../../essential/DlSeparator'
169
232
  import { DlButton } from '../../../../basic'
170
233
  import { DlDialogBox, DlDialogBoxHeader } from '../../../DlDialogBox'
171
234
  import { DlJsonEditor } from '../../../DlJsonEditor'
172
- import { DlTypography } from '../../../../essential'
235
+ import { DlTooltip } from '../../../../shared/DlTooltip'
236
+ import { DlTypography, DlIcon } from '../../../../essential'
173
237
  import { DlInput } from '../../../DlInput'
174
238
  import { stateManager } from '../../../../../StateManager'
175
239
  import { cloneDeep, isEqual, uniqBy } from 'lodash'
@@ -179,9 +243,12 @@ export default defineComponent({
179
243
  components: {
180
244
  DlDialogBox,
181
245
  DlDialogBoxHeader,
246
+ DlIcon,
182
247
  DlJsonEditor,
183
248
  DlButton,
184
249
  DlSelect,
250
+ DlSeparator,
251
+ DlTooltip,
185
252
  DlTypography,
186
253
  DlInput
187
254
  },
@@ -214,11 +281,24 @@ export default defineComponent({
214
281
  'update:modelValue',
215
282
  'search',
216
283
  'change',
284
+ 'copied',
217
285
  'update:options',
218
286
  'save',
219
287
  'delete',
220
288
  'select'
221
289
  ],
290
+ methods: {
291
+ onDelete(option: DlSelectOption) {
292
+ const select = this.$refs['jsonQueryMenu'] as InstanceType<typeof DlSelect>
293
+ select?.closeMenu()
294
+ this.optionToDelete = option
295
+ },
296
+ onSave() {
297
+ const select = this.$refs['jsonQueryMenu'] as InstanceType<typeof DlSelect>
298
+ select?.closeMenu()
299
+ this.showSaveDialog = true
300
+ }
301
+ },
222
302
  setup(props, { emit }) {
223
303
  const { modelValue, options, json, selectedFilter } = toRefs(props)
224
304
 
@@ -230,7 +310,15 @@ export default defineComponent({
230
310
  const currentQuery = ref<{ [key: string]: any }>(cloneDeep(json.value))
231
311
  const jsonEditor = ref<any>(null)
232
312
  const showSaveDialog = ref(false)
233
- const showDeleteDialog = ref(false)
313
+ const optionToDelete = ref<DlSelectOption>(null)
314
+ const showDeleteDialog = computed<boolean>({
315
+ get: () => !!optionToDelete.value,
316
+ set: (val) => {
317
+ if (!val) {
318
+ optionToDelete.value = null
319
+ }
320
+ }
321
+ })
234
322
  const newQueryName = ref('')
235
323
  const alignDisabled = ref(false)
236
324
 
@@ -273,6 +361,11 @@ export default defineComponent({
273
361
  jsonEditor.value?.format()
274
362
  }
275
363
 
364
+ const copyJSON = async () => {
365
+ await navigator.clipboard.writeText(stringifiedJSON.value)
366
+ emit('copied')
367
+ }
368
+
276
369
  const onQuerySelect = (option: DlSelectOption) => {
277
370
  if (option.label === selectedOption.value.label) {
278
371
  return
@@ -356,10 +449,10 @@ export default defineComponent({
356
449
 
357
450
  const deleteQuery = () => {
358
451
  const toDelete = options.value.find(
359
- (o: DlSelectOption) => o.label === selectedOption.value.label
452
+ (o: DlSelectOption) => o.label === optionToDelete.value.label
360
453
  )
361
454
  const newOptions = options.value.filter(
362
- (o: DlSelectOption) => o.label !== selectedOption.value.label
455
+ (o: DlSelectOption) => o.label !== optionToDelete.value.label
363
456
  )
364
457
 
365
458
  emit('delete', toDelete)
@@ -392,9 +485,11 @@ export default defineComponent({
392
485
  selectedOption,
393
486
  hasActiveFilter,
394
487
  alignJSON,
488
+ copyJSON,
395
489
  onQuerySelect,
396
490
  newQueryName,
397
491
  alignDisabled,
492
+ optionToDelete,
398
493
  showDeleteDialog,
399
494
  selectOptions,
400
495
  search,
@@ -407,29 +502,76 @@ export default defineComponent({
407
502
  })
408
503
  </script>
409
504
 
410
- <style scoped lang="scss">
505
+ <style scoped>
411
506
  .json-editor-layout {
412
507
  display: flex;
413
508
  flex-direction: column;
414
509
  height: 100%;
415
510
  }
416
511
 
417
- .json-editor-footer,
418
- .json-query-menu {
512
+ .json-editor-footer {
419
513
  width: 100%;
420
514
  display: flex;
421
515
  align-items: center;
422
516
  justify-content: space-between;
423
517
  }
518
+ .json-query-menu {
519
+ display: flex;
520
+ align-items: center;
521
+ background-color: var(--dl-color-fill);
522
+ justify-content: space-between;
523
+ padding: 6px 16px;
524
+ }
424
525
  .json-editor {
425
- height: 100%;
526
+ height: calc(100% - 40px);
527
+ --jse-main-border: none;
426
528
  }
427
529
 
428
530
  .json-query-menu-option {
531
+ display: flex;
532
+ flex-direction: row;
533
+ }
534
+ .json-query-menu-option-label,
535
+ .json-query-menu-selected {
536
+ padding-top: 3px;
429
537
  white-space: nowrap;
430
538
  display: inline-block;
431
539
  width: 265px;
432
540
  overflow: hidden;
433
541
  text-overflow: ellipsis;
434
542
  }
543
+ .json-query-menu-option:hover .json-query-menu-option-label {
544
+ margin-right: 6px;
545
+ width: 255px;
546
+ }
547
+ .json-query-menu-option-delete {
548
+ overflow-x: hidden;
549
+ width: 0;
550
+ }
551
+ .json-query-menu-option:hover .json-query-menu-option-delete {
552
+ border-radius: 4px;
553
+ overflow-x: visible;
554
+ padding: 4px;
555
+ width: auto;
556
+ }
557
+ .json-query-menu-option-delete:hover {
558
+ background-color: var(--dl-color-fill-secondary);
559
+ }
560
+ .json-query-menu-option-delete:active {
561
+ background-color: var(--dl-color-negative-background);
562
+ }
563
+ .json-query-menu-no-option {
564
+ display: flex;
565
+ padding: 20px 0;
566
+ flex-direction: column;
567
+ align-items: center;
568
+ align-self: stretch;
569
+ }
570
+ .json-query-menu-save-button:hover {
571
+ background-color: var(--dl-color-fill-secondary);
572
+ }
573
+ .dl-smart-search__buttons--save {
574
+ text-align: right;
575
+ width: 100%;
576
+ }
435
577
  </style>