@poirazis/supercomponents-shared 1.2.15 → 1.2.18

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 (37) hide show
  1. package/dist/index.js +17704 -22252
  2. package/dist/index.umd.cjs +19 -18
  3. package/package.json +11 -11
  4. package/src/lib/SuperButton/SuperButton.svelte +65 -35
  5. package/src/lib/SuperField/SuperField.svelte +8 -11
  6. package/src/lib/SuperForm/InnerForm.svelte +14 -8
  7. package/src/lib/SuperForm/SuperForm.svelte +5 -5
  8. package/src/lib/SuperPopover/SuperPopover.svelte +1 -1
  9. package/src/lib/SuperTable/SuperTable.css +13 -6
  10. package/src/lib/SuperTable/SuperTable.svelte +28 -19
  11. package/src/lib/SuperTable/constants.js +1 -1
  12. package/src/lib/SuperTable/controls/RowButtonsColumn.svelte +33 -17
  13. package/src/lib/SuperTable/controls/SelectionColumn.svelte +2 -2
  14. package/src/lib/SuperTableCells/CellBoolean.svelte +52 -45
  15. package/src/lib/SuperTableCells/CellCommon.css +97 -35
  16. package/src/lib/SuperTableCells/CellDatetime.svelte +267 -120
  17. package/src/lib/SuperTableCells/CellLink.svelte +22 -13
  18. package/src/lib/SuperTableCells/CellLinkPickerSelect.svelte +28 -24
  19. package/src/lib/SuperTableCells/CellLinkPickerTree.svelte +22 -20
  20. package/src/lib/SuperTableCells/CellNumber.svelte +55 -53
  21. package/src/lib/SuperTableCells/CellOptions.svelte +356 -246
  22. package/src/lib/SuperTableCells/CellOptionsAdvanced.svelte +199 -180
  23. package/src/lib/SuperTableCells/CellSQLLink.svelte +32 -32
  24. package/src/lib/SuperTableCells/CellSQLLinkPicker.svelte +2 -7
  25. package/src/lib/SuperTableCells/CellSkeleton.svelte +1 -1
  26. package/src/lib/SuperTableCells/CellString.svelte +62 -80
  27. package/src/lib/SuperTableCells/CellStringMask.svelte +41 -40
  28. package/src/lib/SuperTableCells/CellStringSimple.svelte +1 -4
  29. package/src/lib/SuperTableColumn/SuperTableColumn.svelte +3 -1
  30. package/src/lib/SuperTableColumn/parts/SuperColumnBody.svelte +3 -0
  31. package/src/lib/SuperTableColumn/parts/SuperColumnHeader.svelte +44 -42
  32. package/src/lib/SuperTableColumn/parts/SuperColumnRow.svelte +2 -4
  33. package/src/lib/SuperTabs/SuperTabs.svelte +33 -17
  34. package/src/lib/UI/elements/Checkbox.svelte +68 -10
  35. package/src/lib/UI/elements/Switch.svelte +162 -0
  36. package/src/lib/UI/elements/Tooltip.svelte +15 -43
  37. package/src/lib/SuperTableCells/JSDOC_GUIDE.md +0 -869
@@ -25,7 +25,7 @@
25
25
 
26
26
  // Local state
27
27
  let timer;
28
- let editor;
28
+
29
29
  let lastEdit;
30
30
  let localValue = value;
31
31
  let state =
@@ -38,7 +38,6 @@
38
38
  $: ({
39
39
  controlType,
40
40
  role,
41
- disabled,
42
41
  readonly,
43
42
  error: optionError,
44
43
  icon: optionIcon,
@@ -60,6 +59,7 @@
60
59
  : (value ?? undefined);
61
60
  $: placeholder = placeholderText ?? "";
62
61
  $: textarea = controlType === "textarea";
62
+ $: disabled = cellOptions?.disabled;
63
63
 
64
64
  // Reset when value changes externally
65
65
  $: cellState.reset(value);
@@ -90,25 +90,20 @@
90
90
  },
91
91
  Editing: {
92
92
  _enter() {
93
- setTimeout(() => {
94
- editor?.focus();
95
- }, 50);
96
93
  dispatch("enteredit");
97
94
  },
98
95
  _exit() {
99
96
  lastEdit = undefined;
100
97
  dispatch("exitedit");
101
98
  },
102
- focus() {
103
- editor?.focus();
104
- },
99
+ focus() {},
105
100
  clear() {
106
101
  if (debounceDelay) {
107
102
  dispatch("change", null);
108
103
  }
109
104
  lastEdit = new Date();
110
105
  localValue = null;
111
- editor?.focus();
106
+
112
107
  dispatch("clear", null);
113
108
  },
114
109
  focusout(e) {
@@ -206,84 +201,71 @@
206
201
  style:background
207
202
  on:focusin={cellState.focus}
208
203
  >
209
- {#if icon && !textarea}
210
- <i class={icon + " field-icon"} class:with-error={error}></i>
211
- {/if}
212
- {#if inEdit}
213
- {#if textarea}
214
- <textarea
215
- bind:this={editor}
216
- tabindex="0"
217
- class="editor textarea"
218
- class:placeholder={!value && !formattedValue && !localValue}
219
- placeholder={cellOptions?.placeholder ?? ""}
220
- style:text-align={cellOptions.align == "center"
221
- ? "center"
222
- : cellOptions.align == "flex-end"
223
- ? "right"
224
- : "left"}
225
- on:input={cellState.debounce}
226
- on:focusout={cellState.focusout}
227
- on:keydown={cellState.handleKeyboard}
228
- use:focus>{localValue ?? ""}</textarea
229
- >
204
+ {#key inEdit}
205
+ {#if icon && !textarea}
206
+ <i class={icon + " field-icon"} class:with-error={error}></i>
207
+ {/if}
208
+ {#if inEdit}
209
+ {#if textarea}
210
+ <textarea
211
+ tabindex="0"
212
+ class:placeholder={!value && !formattedValue && !localValue}
213
+ placeholder={cellOptions?.placeholder ?? ""}
214
+ value={localValue ?? ""}
215
+ on:input={cellState.debounce}
216
+ on:focusout={cellState.focusout}
217
+ on:keydown={cellState.handleKeyboard}
218
+ use:focus
219
+ ></textarea>
220
+ {:else}
221
+ <input
222
+ tabindex="0"
223
+ class="editor"
224
+ class:placeholder={!value && !formattedValue && !localValue}
225
+ value={localValue ?? ""}
226
+ placeholder={cellOptions?.placeholder ?? ""}
227
+ style:text-align={cellOptions.align == "center"
228
+ ? "center"
229
+ : cellOptions.align == "flex-end"
230
+ ? "right"
231
+ : "left"}
232
+ on:input={cellState.debounce}
233
+ on:focusout={cellState.focusout}
234
+ on:keydown={cellState.handleKeyboard}
235
+ use:focus
236
+ />
237
+ <i
238
+ class="ri-close-line clear-icon"
239
+ class:visible={localValue && cellOptions?.clearIcon !== false}
240
+ on:mousedown|self|preventDefault={cellState.clear}
241
+ ></i>
242
+ {/if}
230
243
  {:else}
231
- <input
232
- bind:this={editor}
233
- tabindex="0"
234
- class="editor"
235
- class:placeholder={!value && !formattedValue && !localValue}
236
- value={localValue ?? ""}
237
- placeholder={cellOptions?.placeholder ?? ""}
238
- style:text-align={cellOptions.align == "center"
239
- ? "center"
240
- : cellOptions.align == "flex-end"
241
- ? "right"
242
- : "left"}
243
- on:input={cellState.debounce}
244
- on:focusout={cellState.focusout}
245
- on:keydown={cellState.handleKeyboard}
246
- use:focus
247
- />
248
- <i
249
- class="ri-close-line clear-icon"
250
- class:visible={localValue && cellOptions?.clearIcon !== false}
251
- on:mousedown|self|preventDefault={cellState.clear}
252
- ></i>
244
+ <div
245
+ class="value"
246
+ class:textarea
247
+ class:placeholder={!value && !formattedValue}
248
+ style:justify-content={cellOptions.align}
249
+ >
250
+ <span>{formattedValue || value || placeholder}</span>
251
+ </div>
253
252
  {/if}
254
- {:else if textarea}
255
- <div
256
- class="value textarea"
257
- class:placeholder={!value && !formattedValue}
258
- style:justify-content={cellOptions.align}
259
- >
260
- {formattedValue || value || placeholder}
261
- </div>
262
- {:else}
263
- <div
264
- class="value"
265
- class:placeholder={!value}
266
- style:justify-content={cellOptions.align}
267
- >
268
- <span>
269
- {formattedValue || value || placeholder}
270
- </span>
271
- </div>
272
- {/if}
253
+ {/key}
273
254
  </div>
274
255
 
275
256
  <style>
276
- .value.textarea {
277
- flex: 1 0 auto;
278
- display: flex;
279
- align-items: flex-start;
280
- white-space: pre-wrap;
281
- padding: 0.5rem 0rem;
257
+ textarea {
258
+ all: inherit;
259
+ flex: 1;
260
+ min-height: 100%;
261
+ width: 100%;
262
+ padding: 0.5rem 0.75rem;
263
+ background-color: transparent;
282
264
  overflow-y: auto;
283
265
  }
284
266
 
285
- .textarea.placeholder {
286
- color: var(--spectrum-global-color-gray-500);
287
- font-style: italic;
267
+ textarea:focus {
268
+ outline: none;
269
+ border: none;
288
270
  }
289
271
  </style>
@@ -354,49 +354,50 @@
354
354
  : cellOptions.background}
355
355
  style:font-weight={cellOptions.fontWeight}
356
356
  >
357
- {#if icon}
358
- <i class={icon + " field-icon"} class:with-error={error}></i>
359
- {/if}
357
+ {#key $cellState}
358
+ {#if icon}
359
+ <i class={icon + " field-icon"} class:with-error={error}></i>
360
+ {/if}
360
361
 
361
- {#if inEdit}
362
- <input
363
- bind:this={inputElement}
364
- tabindex="0"
365
- class="editor"
366
- {placeholder}
367
- style:color={!isComplete
368
- ? "var(--spectrum-global-color-gray-700)"
369
- : cellOptions.color}
370
- style:text-align={cellOptions.align == "center"
371
- ? "center"
372
- : cellOptions.align == "flex-end"
373
- ? "right"
374
- : "left"}
375
- style:padding-right={cellOptions.align != "flex-start"
376
- ? "2rem"
377
- : "0.75rem"}
378
- on:focusout={cellState.focusout}
379
- on:keydown={cellState.handleKeyboard}
380
- use:focus
381
- use:initIMask={mask}
382
- />
383
- {#if localValue && cellOptions?.clearIcon !== false}
362
+ {#if inEdit}
363
+ <input
364
+ bind:this={inputElement}
365
+ tabindex="0"
366
+ class="editor"
367
+ {placeholder}
368
+ style:color={!isComplete
369
+ ? "var(--spectrum-global-color-gray-700)"
370
+ : cellOptions.color}
371
+ style:text-align={cellOptions.align == "center"
372
+ ? "center"
373
+ : cellOptions.align == "flex-end"
374
+ ? "right"
375
+ : "left"}
376
+ style:padding-right={cellOptions.align != "flex-start"
377
+ ? "2rem"
378
+ : "0.75rem"}
379
+ on:focusout={cellState.focusout}
380
+ on:keydown={cellState.handleKeyboard}
381
+ use:focus
382
+ use:initIMask={mask}
383
+ />
384
384
  <i
385
- class="ri-close-line clearIcon"
385
+ class="ri-close-line clear-icon"
386
+ class:visible={localValue && cellOptions?.clearIcon !== false}
386
387
  on:mousedown|self|preventDefault={cellState.clear}
387
388
  ></i>
389
+ {:else}
390
+ <div
391
+ class="value"
392
+ tabindex={cellOptions.readonly || cellOptions.disabled ? "-1" : "0"}
393
+ class:placeholder={!value}
394
+ style:justify-content={cellOptions.align}
395
+ on:focusin={cellState.focus}
396
+ >
397
+ <span>
398
+ {displayValue || placeholder}
399
+ </span>
400
+ </div>
388
401
  {/if}
389
- {:else}
390
- <div
391
- class="value"
392
- tabindex={cellOptions.readonly || cellOptions.disabled ? "-1" : "0"}
393
- class:placeholder={!value}
394
- style:justify-content={cellOptions.align}
395
- on:focusin={cellState.focus}
396
- >
397
- <span>
398
- {displayValue || placeholder}
399
- </span>
400
- </div>
401
- {/if}
402
+ {/key}
402
403
  </div>
@@ -35,7 +35,6 @@
35
35
  class:error={cellOptions.error}
36
36
  style:color={cellOptions.color}
37
37
  style:background={cellOptions.background}
38
- style:font-weight={cellOptions.fontWeight}
39
38
  >
40
39
  {#if cellOptions.icon}
41
40
  <i class={cellOptions.icon + " field-icon"}></i>
@@ -46,8 +45,6 @@
46
45
  class:placeholder={!value}
47
46
  style:justify-content={cellOptions.align}
48
47
  >
49
- <span>
50
- {formattedValue || value || placeholder}
51
- </span>
48
+ <span>{formattedValue || value || placeholder}</span>
52
49
  </div>
53
50
  </div>
@@ -192,6 +192,7 @@
192
192
  startResizing(e) {
193
193
  e.stopPropagation();
194
194
  e.preventDefault();
195
+ stbAPI.startResize();
195
196
  resizing = true;
196
197
  startPoint = e.clientX;
197
198
  startWidth = viewport.clientWidth;
@@ -203,6 +204,7 @@
203
204
  stopResizing(e) {
204
205
  e.preventDefault();
205
206
  e.stopPropagation();
207
+ stbAPI.endResize();
206
208
  resizing = false;
207
209
  startPoint = undefined;
208
210
  width = $lockWidth;
@@ -259,7 +261,7 @@
259
261
  },
260
262
  EditingCell: {
261
263
  _enter() {
262
- $lockWidth = Math.max(viewport.clientWidth, 160);
264
+ $lockWidth = Math.max(viewport.clientWidth, 80);
263
265
  stbState.edit.debounce(30);
264
266
  },
265
267
  patchRow(index, id, rev, field, change) {
@@ -21,6 +21,8 @@
21
21
  $columnState == "EditingCell" &&
22
22
  ($columnSettings.highlighters == "vertical" ||
23
23
  $columnSettings.highlighters == "both");
24
+
25
+ $: console.log(isLast);
24
26
  </script>
25
27
 
26
28
  <div
@@ -32,6 +34,7 @@
32
34
  class:inserting
33
35
  class:filtered={$columnState == "Filtered"}
34
36
  class:is-editing={editing}
37
+ class:is-last={isLast}
35
38
  >
36
39
  {#each $stbVisibleRows as index (index)}
37
40
  <SuperColumnRow
@@ -108,51 +108,53 @@
108
108
  on:mouseenter={() => (hovered = true)}
109
109
  on:mouseleave={() => (hovered = false)}
110
110
  >
111
- {#if $columnState == "Entering" || $columnState == "Filtered"}
112
- {#if $columnOptions.canFilter == "advanced"}
113
- <i
114
- class="ri-filter-3-line"
115
- tabindex="0"
116
- style="align-self: center; font-size: 14px;"
117
- on:click|preventDefault={() =>
118
- (showFilteringOptions = !showFilteringOptions)}
119
- ></i>
120
- {/if}
121
- <svelte:component
122
- this={$columnOptions.headerComponent}
123
- cellOptions={{
124
- ...$cellOptions,
125
- placeholder: filterOperator,
126
- disabled: filterOperator == "empty" || filterOperator == "notEmpty",
127
- }}
128
- value={filterValue}
129
- fieldSchema={$columnOptions.schema}
130
- multi={filterOperator == "containsAny" || filterOperator == "oneOf"}
131
- on:change={handleValueChange}
132
- on:focusout={handleBlur}
133
- />
134
- {:else}
135
- <div
136
- class="headerLabel"
137
- style:justify-content={$columnOptions?.headerAlign}
138
- on:click={columnState.headerClicked}
139
- >
140
- <div class="innerText" class:sortable={$columnOptions.canSort}>
141
- {$columnOptions.displayName ?? $columnOptions.name}
142
- </div>
143
- </div>
144
- {/if}
145
-
146
- {#if $columnOptions.canSort && $columnState == "Idle"}
147
- <span class="placeholder" on:click={columnState.sort}>
148
- {#if hovered || sorted}
111
+ {#key $columnState}
112
+ {#if $columnState == "Entering" || $columnState == "Filtered"}
113
+ {#if $columnOptions.canFilter == "advanced"}
149
114
  <i
150
- class={sorted == "ascending" ? "ri-sort-asc" : "ri-sort-desc"}
151
- class:sorted
115
+ class="ri-filter-3-line"
116
+ tabindex="0"
117
+ style="align-self: center; font-size: 14px;"
118
+ on:click|preventDefault={() =>
119
+ (showFilteringOptions = !showFilteringOptions)}
152
120
  ></i>
153
121
  {/if}
154
- </span>
155
- {/if}
122
+ <svelte:component
123
+ this={$columnOptions.headerComponent}
124
+ cellOptions={{
125
+ ...$cellOptions,
126
+ placeholder: filterOperator,
127
+ disabled: filterOperator == "empty" || filterOperator == "notEmpty",
128
+ }}
129
+ value={filterValue}
130
+ fieldSchema={$columnOptions.schema}
131
+ multi={filterOperator == "containsAny" || filterOperator == "oneOf"}
132
+ on:change={handleValueChange}
133
+ on:focusout={handleBlur}
134
+ />
135
+ {:else}
136
+ <div
137
+ class="headerLabel"
138
+ style:justify-content={$columnOptions?.headerAlign}
139
+ on:click={columnState.headerClicked}
140
+ >
141
+ <div class="innerText" class:sortable={$columnOptions.canSort}>
142
+ {$columnOptions.displayName ?? $columnOptions.name}
143
+ </div>
144
+ </div>
145
+ {/if}
146
+
147
+ {#if $columnOptions.canSort && $columnState == "Idle"}
148
+ <span class="placeholder" on:click={columnState.sort}>
149
+ {#if hovered || sorted}
150
+ <i
151
+ class={sorted == "ascending" ? "ri-sort-asc" : "ri-sort-desc"}
152
+ class:sorted
153
+ ></i>
154
+ {/if}
155
+ </span>
156
+ {/if}
157
+ {/key}
156
158
  </div>
157
159
 
158
160
  {#if $columnOptions.canFilter == "advanced" && $columnState != "Idle"}
@@ -72,7 +72,7 @@
72
72
  }
73
73
  }
74
74
  return obj;
75
- } else return obj[path] ?? undefined;
75
+ } else return obj[path];
76
76
  };
77
77
 
78
78
  const onClick = () => {
@@ -88,8 +88,6 @@
88
88
  const onContextMenu = (e) => {
89
89
  stbAPI.showContextMenu(index, e.__root);
90
90
  };
91
-
92
- $: console.log(height);
93
91
  </script>
94
92
 
95
93
  <!-- svelte-ignore a11y-click-events-have-key-events -->
@@ -102,7 +100,7 @@
102
100
  class:isEditing
103
101
  class:disabled
104
102
  class:isLast
105
- style:min-height={height}
103
+ style:height
106
104
  style:color
107
105
  style:background-color={bgcolor}
108
106
  style:justify-content={$columnSettings.align}
@@ -16,6 +16,7 @@
16
16
  export let list_icon;
17
17
  export let list_title;
18
18
  export let tabsWidth = "200px";
19
+ export let listBackground = "var(--spectrum-global-color-gray-50)";
19
20
 
20
21
  export let quietTabs;
21
22
 
@@ -44,11 +45,12 @@
44
45
  style:justify-content={buttonsAlignment}
45
46
  style:--tab-alignment={tabsAlignment}
46
47
  style:--tab-track-thickness="1px"
48
+ style:--list-background={listBackground}
47
49
  >
48
50
  {#if theme === "list" && list_title}
49
51
  <div class="tab list-title">
50
52
  {#if list_icon}
51
- <i class={list_icon}></i>
53
+ <i class={"ph ph-" + list_icon}></i>
52
54
  {/if}
53
55
  {list_title}
54
56
  </div>
@@ -73,7 +75,7 @@
73
75
  {#if container.icon}
74
76
  <i
75
77
  class={container.icon}
76
- style:font-size={tabsIconsOnly ? "20px" : "inherit"}
78
+ style:font-size={tabsIconsOnly ? "20px" : "12px"}
77
79
  style:color={container.color}
78
80
  ></i>
79
81
  {/if}
@@ -110,6 +112,14 @@
110
112
  margin-bottom: unset;
111
113
  --selected-tab: var(--spectrum-global-color-gray-200);
112
114
  }
115
+ .outer-tabs.vertical.list {
116
+ padding-left: unset;
117
+ padding-right: unset;
118
+ flex-direction: column;
119
+ align-items: stretch;
120
+ --selected-tab: var(--spectrum-global-color-gray-200);
121
+ border-right: 1px solid var(--spectrum-global-color-gray-300);
122
+ }
113
123
 
114
124
  .tabs {
115
125
  flex: auto;
@@ -125,20 +135,29 @@
125
135
 
126
136
  .tabs.list {
127
137
  gap: 0;
128
- background-color: var(--spectrum-global-color-gray-50);
138
+ background-color: var(
139
+ --list-background,
140
+ var(--spectrum-global-color-gray-50)
141
+ );
129
142
  border: unset;
130
143
  padding: unset;
144
+ padding-bottom: 0.5rem;
131
145
  }
132
146
 
133
147
  .tabs.vertical {
134
148
  flex-direction: column;
135
149
  border-bottom: unset;
136
150
  border-top: unset;
151
+ border-right: 1px solid var(--spectrum-global-color-gray-300);
152
+ padding-right: 0.25rem;
137
153
  gap: 0.25rem;
138
154
  }
139
155
 
140
156
  .tabs.vertical.list {
141
157
  border-right: unset;
158
+ gap: 2px;
159
+ padding: 2px;
160
+ padding-top: 0rem;
142
161
  }
143
162
 
144
163
  .tab {
@@ -165,10 +184,9 @@
165
184
  .tab.button {
166
185
  border-radius: 0.25rem;
167
186
  padding: 0.5rem 1rem;
168
- font-weight: 600;
169
187
  line-height: 14px;
170
188
  border: 1px solid transparent;
171
- height: 1.85rem;
189
+ height: 1.75rem;
172
190
  }
173
191
 
174
192
  .tab.button.vertical {
@@ -184,51 +202,49 @@
184
202
 
185
203
  .tab.button.selected {
186
204
  color: var(--spectrum-global-color-gray-700);
187
- border: 1px solid var(--spectrum-global-color-gray-300);
205
+ font-weight: 500;
206
+ border: 1px solid
207
+ rgb(from var(--spectrum-global-color-gray-400) r g b / 0.75);
188
208
  background-color: rgb(
189
209
  from var(--spectrum-global-color-gray-200) r g b / 0.85
190
210
  );
191
211
  }
192
212
 
193
213
  .tab.list {
194
- padding: 0.5rem 1rem;
214
+ padding: 0.5rem 0.5rem;
215
+ border-radius: 0.25rem;
195
216
  max-width: 100%;
196
217
  color: var(--spectrum-global-color-gray-700);
197
- font-weight: 400;
198
218
  }
199
219
 
200
220
  .tab.list.selected {
201
221
  color: var(--tab-selected-color);
202
222
  background-color: var(--selected-tab);
203
- font-weight: 500;
204
223
  }
205
224
 
206
- .tab.list:hover:not(.disabled):not(.list-section) {
207
- background-color: var(--spectrum-global-color-gray-75);
225
+ .tab.list:hover:not(.disabled):not(.list-section):not(.selected) {
226
+ background-color: var(--spectrum-global-color-gray-100);
208
227
  }
209
228
 
210
229
  .tab.list-title {
211
- padding: 0.75rem 1rem;
230
+ padding: 0.75rem 0.5rem;
212
231
  max-width: 100%;
213
232
  font-size: 12px;
214
233
  color: var(--spectrum-global-color-gray-800);
215
234
  text-transform: uppercase;
216
235
  letter-spacing: 1.2px;
217
- font-weight: 500;
218
236
  border-bottom: 1px solid var(--spectrum-global-color-gray-300);
219
- height: 3rem;
220
237
  }
221
238
 
222
239
  .tab.list-section {
223
240
  text-transform: uppercase;
224
241
  font-size: 11px;
225
- font-weight: 400;
226
- letter-spacing: 1.2px;
242
+ color: var(--spectrum-global-color-gray-600);
227
243
  background-color: transparent;
228
244
  }
229
245
 
230
246
  .tab.list-section.vertical {
231
- margin-top: 12px;
247
+ margin-top: 4px;
232
248
  }
233
249
 
234
250
  .tab.list-section:hover {