@poirazis/supercomponents-shared 1.0.40 → 1.0.41

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.
@@ -1,5 +1,5 @@
1
1
  <script>
2
- import { getContext, createEventDispatcher, beforeUpdate } from "svelte";
2
+ import { getContext, createEventDispatcher, afterUpdate } from "svelte";
3
3
 
4
4
  const stbScrollPos = getContext("stbScrollPos");
5
5
  const stbHorizontalScrollPos = getContext("stbHorizontalScrollPos");
@@ -42,6 +42,7 @@
42
42
 
43
43
  export const calculate = () => {
44
44
  if (!anchor) return;
45
+
45
46
  verticalRange = Math.max(scrollHeight - clientHeight, 0);
46
47
  horizontalRange = anchor?.scrollWidth - anchor?.clientWidth;
47
48
  visible = verticalRange;
@@ -50,8 +51,8 @@
50
51
  width = (anchor?.clientWidth / anchor?.scrollWidth) * 100 + "%";
51
52
  };
52
53
 
53
- beforeUpdate(() => {
54
- calculate();
54
+ afterUpdate(() => {
55
+ calculate?.();
55
56
  });
56
57
  </script>
57
58
 
@@ -42,7 +42,7 @@
42
42
  quiet={true}
43
43
  size="S"
44
44
  type="secondary"
45
- on:click={() => (hidden = true)}
45
+ onClick={() => (hidden = true)}
46
46
  />
47
47
  <span class="text">
48
48
  {$stbSelected.length == 1
@@ -57,7 +57,7 @@
57
57
  {type}
58
58
  {disabled}
59
59
  {size}
60
- on:click={tableAPI.executeSelectedRowsAction(onClick)}
60
+ onClick={tableAPI.executeSelectedRowsAction(onClick)}
61
61
  />
62
62
  {/each}
63
63
  </div>
@@ -254,7 +254,7 @@
254
254
  background-color: unset !important;
255
255
  padding-left: 2px !important;
256
256
  border-color: transparent !important;
257
- border-width: 0px !important;
257
+ border-width: 1px !important;
258
258
 
259
259
  &.with-icon {
260
260
  padding-left: 32px !important;
@@ -269,11 +269,11 @@
269
269
  background: var(--spectrum-global-color-gray-50);
270
270
  min-height: 2rem;
271
271
 
272
- &:focus-within {
272
+ &:focus-within:not(.naked-field) {
273
273
  border: 1px solid var(--spectrum-global-color-blue-400) !important;
274
274
  }
275
275
 
276
- &.inEdit {
276
+ &.inEdit:not(.naked-field) {
277
277
  border: 1px solid var(--spectrum-global-color-blue-400) !important;
278
278
  }
279
279
 
@@ -283,6 +283,7 @@
283
283
 
284
284
  &.disabled {
285
285
  background-color: var(--spectrum-global-color-gray-100) !important;
286
+ border: 1px solid var(--spectrum-global-color-gray-200);
286
287
  color: var(--spectrum-global-color-gray-600) !important;
287
288
  cursor: not-allowed !important;
288
289
 
@@ -304,6 +305,10 @@
304
305
  &.error {
305
306
  border-color: var(--spectrum-global-color-red-400) !important;
306
307
  }
308
+
309
+ &.naked-field:focus-within {
310
+ border: 1px solid transparent !important;
311
+ }
307
312
  }
308
313
 
309
314
  .superCell.tableCell {
@@ -323,6 +328,7 @@
323
328
  }
324
329
 
325
330
  .superCell > .editor {
331
+ min-width: none;
326
332
  width: 100%;
327
333
  height: 100%;
328
334
  display: flex;
@@ -30,10 +30,9 @@
30
30
 
31
31
  const colors = derivedMemo(options, ($options) => {
32
32
  let obj = {};
33
- if (!colorColumn) return obj;
34
33
  $options.forEach(
35
34
  (option, index) =>
36
- (obj[option] = optionColors[option] || colorsArray[index % 14])
35
+ (obj[option] = optionColors[option] ?? colorsArray[index % 14])
37
36
  );
38
37
  return obj;
39
38
  });
@@ -364,8 +363,8 @@
364
363
  <div
365
364
  bind:this={anchor}
366
365
  class="superCell multirow"
367
- tabindex={cellOptions?.disabled ? "-1" : "0"}
368
- class:inEdit
366
+ tabindex={cellOptions?.disabled ? -1 : 0}
367
+ class:inEdit={inEdit && controlType != "buttons"}
369
368
  class:isDirty={isDirty && cellOptions.showDirty}
370
369
  class:disabled
371
370
  class:readonly
@@ -376,6 +375,7 @@
376
375
  class:inline={role == "inlineInput"}
377
376
  class:tableCell={role == "tableCell"}
378
377
  class:formInput={role == "formInput"}
378
+ class:naked-field={controlType == "buttons"}
379
379
  on:focusin={cellState.focus}
380
380
  on:focusout={cellState.focusout}
381
381
  on:keydown={editorState.handleKeyboard}
@@ -406,9 +406,9 @@
406
406
  anchor.focus();
407
407
  }}
408
408
  />
409
- {:else if controlType == "checkbox" || controlType == "radio" || controlType == "buttons"}
409
+ {:else if controlType == "radio" || controlType == "buttons"}
410
410
  {#if isButtons}
411
- <div class="buttons">
411
+ <div class="buttons" class:vertical={cellOptions.direction == "column"}>
412
412
  {#each $options as option, idx (idx)}
413
413
  <div
414
414
  class="button"
@@ -463,7 +463,7 @@
463
463
  on:click={cellOptions.toggleAll ? editorState.toggleAll : undefined}
464
464
  on:mouseenter
465
465
  >
466
- <div class="text title">{label ?? ""}</div>
466
+ <div class="text title">{label ?? "Toggle All"}</div>
467
467
  {#if cellOptions.toggleAll && !(readonly || disabled)}
468
468
  <div class="spectrum-Switch spectrum-Switch--emphasized">
469
469
  <input
@@ -599,15 +599,20 @@
599
599
  gap: 0.5rem;
600
600
  justify-items: flex-start;
601
601
  }
602
+
603
+ .buttons.vertical {
604
+ flex-direction: column;
605
+ gap: 0.25rem;
606
+ }
602
607
  .buttons .button {
603
608
  padding: 0.25rem 0.75rem;
604
- border: 1px solid var(--spectrum-global-color-gray-300);
609
+ border: 1px solid var(--spectrum-global-color-gray-200);
605
610
  border-radius: 4px;
606
- background-color: var(--spectrum-global-color-gray-100);
607
- color: var(--spectrum-global-color-gray-700);
611
+ background-color: var(--spectrum-global-color-gray-50);
612
+ color: var(--spectrum-global-color-gray-500);
608
613
  cursor: pointer;
609
614
  user-select: none;
610
- font-size: 13px;
615
+ font-size: 12px;
611
616
  font-weight: 500;
612
617
  transition: all 0.15s ease-in-out;
613
618
  white-space: nowrap;
@@ -622,7 +627,7 @@
622
627
  var(--spectrum-global-color-gray-300)
623
628
  );
624
629
  border-color: var(--option-color, var(--spectrum-global-color-gray-300));
625
- color: var(--spectrum-global-color-gray-100);
630
+ color: var(--spectrum-global-color-gray-800);
626
631
  }
627
632
 
628
633
  .radios {
@@ -171,7 +171,7 @@
171
171
  class:readonly={cellOptions.readonly}
172
172
  class:error={cellOptions.error}
173
173
  style:color={cellOptions.color}
174
- style:background={$cellState == "Editing" && cellOptions.role != "inline"
174
+ style:background={$cellState == "Editing" && cellOptions.role != "inlineInput"
175
175
  ? "var(--spectrum-global-color-gray-50)"
176
176
  : cellOptions.background}
177
177
  style:font-weight={cellOptions.fontWeight}
@@ -185,7 +185,7 @@
185
185
  }
186
186
  },
187
187
  lockWidth() {
188
- if (!resizing) $lockWidth = viewport.clientWidth;
188
+ if (!resizing) $lockWidth = viewport?.clientWidth;
189
189
  },
190
190
  unlockWidth() {
191
191
  if (resizing) return;
@@ -18,6 +18,10 @@
18
18
  export let wide = true;
19
19
 
20
20
  export let quietTabs;
21
+
22
+ // Computed for repeated logic
23
+ $: isVertical = direction === "column" || theme === "list";
24
+ $: justify = direction === "row" ? hAlign : vAlign;
21
25
  </script>
22
26
 
23
27
  <!-- svelte-ignore a11y-click-events-have-key-events -->
@@ -26,21 +30,21 @@
26
30
  <div
27
31
  class="outer-tabs"
28
32
  class:quietTabs
29
- class:list={theme == "list"}
30
- class:vertical={direction == "column"}
31
- style:justify-content={direction == "row" ? hAlign : vAlign}
33
+ class:list={theme === "list"}
34
+ class:vertical={isVertical}
35
+ style:justify-content={justify}
32
36
  >
33
37
  <div
34
38
  class="tabs"
35
- class:vertical={direction == "column" || theme == "list"}
36
- class:buttons={theme == "buttons"}
37
- class:list={theme == "list"}
39
+ class:vertical={isVertical}
40
+ class:buttons={theme === "buttons"}
41
+ class:list={theme === "list"}
38
42
  class:wide
39
- style:justify-content={direction == "row" ? hAlign : vAlign}
43
+ style:justify-content={justify}
40
44
  style:--tab-alignment={tabsAlignment}
41
45
  style:--tab-track-thickness="1px"
42
46
  >
43
- {#if theme == "list" && list_title}
47
+ {#if theme === "list" && list_title}
44
48
  <div class="tab list-title">
45
49
  {#if list_icon}
46
50
  <i class={list_icon} />
@@ -53,10 +57,10 @@
53
57
  <!-- svelte-ignore a11y-no-static-element-interactions -->
54
58
  <button
55
59
  class="tab"
56
- class:vertical={direction == "column"}
57
- class:button={theme == "buttons"}
58
- class:list={theme == "list"}
59
- class:selected={container.id == selectedTab}
60
+ class:vertical={isVertical}
61
+ class:button={theme === "buttons"}
62
+ class:list={theme === "list"}
63
+ class:selected={container.id === selectedTab}
60
64
  class:disabled={container.disabled}
61
65
  class:list-section={container.isTabSection}
62
66
  on:click={() => {
@@ -94,16 +98,16 @@
94
98
  justify-content: stretch;
95
99
  --selected-tab: var(--spectrum-global-color-gray-200);
96
100
  margin-bottom: 0.5rem;
101
+ }
97
102
 
98
- &.vertical {
99
- flex: none;
100
- width: auto;
101
- flex-direction: column;
102
- align-items: stretch;
103
- margin-right: 0.5rem;
104
- margin-bottom: unset;
105
- }
103
+ .outer-tabs.vertical {
104
+ flex-direction: column;
105
+ align-items: stretch;
106
+ margin-right: 1rem;
107
+ margin-bottom: unset;
108
+ width: 14rem;
106
109
  }
110
+
107
111
  .tabs {
108
112
  flex: auto;
109
113
  display: flex;
@@ -111,34 +115,29 @@
111
115
  padding: 0.35rem 0.5rem;
112
116
  border-bottom: 1px solid var(--spectrum-global-color-gray-200);
113
117
  border-top: 1px solid var(--spectrum-global-color-gray-200);
118
+ }
114
119
 
115
- &.buttons {
116
- gap: 0.5rem;
117
- }
118
-
119
- &.list {
120
- gap: 0rem;
121
- background-color: var(--spectrum-global-color-gray-50);
122
- border: unset;
123
- padding: unset;
124
- }
120
+ .tabs.buttons {
121
+ gap: 0.5rem;
122
+ }
125
123
 
126
- &.vertical {
127
- height: 100%;
128
- flex-direction: column;
129
- border-bottom: unset;
130
- border-top: unset;
131
- border-right: 1px solid var(--spectrum-global-color-gray-200);
132
- width: 10rem;
124
+ .tabs.list {
125
+ gap: 0;
126
+ background-color: var(--spectrum-global-color-gray-50);
127
+ border: unset;
128
+ padding: unset;
129
+ }
133
130
 
134
- &.wide {
135
- width: 12rem;
136
- }
131
+ .tabs.vertical {
132
+ flex-direction: column;
133
+ border-bottom: unset;
134
+ border-top: unset;
135
+ border-right: 1px solid var(--spectrum-global-color-gray-300);
136
+ gap: 0.25rem;
137
+ }
137
138
 
138
- &.list {
139
- border-right: unset;
140
- }
141
- }
139
+ .tabs.vertical.list {
140
+ border-right: unset;
142
141
  }
143
142
 
144
143
  .tab {
@@ -152,95 +151,95 @@
152
151
  font-size: 13px;
153
152
  background: transparent;
154
153
  border: none;
154
+ }
155
+
156
+ .tab.disabled {
157
+ color: var(--spectrum-global-color-gray-400);
158
+ }
159
+
160
+ .tab.disabled:hover {
161
+ cursor: not-allowed;
162
+ }
163
+
164
+ .tab.button {
165
+ border-radius: 4px;
166
+ padding: 0.35rem 1rem;
167
+ }
168
+
169
+ .tab.button.vertical {
170
+ width: 100%;
171
+ padding: 0.5rem 0.75rem;
172
+ }
173
+
174
+ .tab.button:active:not(.disabled):not(.list-section) {
175
+ background-color: var(--spectrum-global-color-gray-200);
176
+ }
177
+
178
+ .tab.button.selected {
179
+ color: var(--spectrum-global-color-gray-800);
180
+ background-color: var(--spectrum-global-color-gray-300);
181
+ }
182
+
183
+ .tab.list {
184
+ padding: 0.5rem 1rem;
185
+ max-width: 100%;
186
+ color: var(--spectrum-global-color-gray-700);
187
+ font-weight: 400;
188
+ }
189
+
190
+ .tab.list.selected {
191
+ color: var(--tab-selected-color);
192
+ background-color: var(--selected-tab);
193
+ font-weight: 500;
194
+ }
195
+
196
+ .tab.list:hover:not(.disabled):not(.list-section) {
197
+ background-color: var(--spectrum-global-color-gray-75);
198
+ }
199
+
200
+ .tab.list-title {
201
+ padding: 0.75rem 1rem;
202
+ max-width: 100%;
203
+ font-size: 12px;
204
+ color: var(--spectrum-global-color-gray-800);
205
+ text-transform: uppercase;
206
+ letter-spacing: 1.2px;
207
+ font-weight: 500;
208
+ border-bottom: 1px solid var(--spectrum-global-color-gray-300);
209
+ height: 3rem;
210
+ }
211
+
212
+ .tab.list-section {
213
+ text-transform: uppercase;
214
+ font-size: 11px;
215
+ font-weight: 400;
216
+ letter-spacing: 1.2px;
217
+ background-color: transparent;
218
+ }
219
+
220
+ .tab.list-section.vertical {
221
+ margin-top: 12px;
222
+ }
223
+
224
+ .tab.list-section:hover {
225
+ cursor: default;
226
+ }
227
+
228
+ .tab:hover:not(.disabled):not(.list-title):not(.list-section) {
229
+ cursor: pointer;
230
+ color: var(--spectrum-global-color-gray-800);
231
+ }
232
+
233
+ .tab.button:hover:not(.selected) {
234
+ background-color: var(--spectrum-global-color-gray-200);
235
+ }
236
+
237
+ .tab.selected {
238
+ color: var(--tab-selected-color);
239
+ }
155
240
 
156
- &.disabled {
157
- color: var(--spectrum-global-color-gray-400) !important;
158
- &:hover {
159
- cursor: not-allowed;
160
- }
161
- }
162
-
163
- &.button {
164
- border-radius: 4px;
165
- padding: 0.35rem 1rem;
166
- border: none;
167
- background: transparent;
168
-
169
- &:active:not(.list-section):not(.disabled) {
170
- background-color: var(--spectrum-global-color-gray-200);
171
- }
172
- &.selected {
173
- color: var(--spectrum-global-color-gray-800);
174
- background-color: var(--spectrum-global-color-gray-200);
175
- }
176
- }
177
-
178
- &.list {
179
- display: flex;
180
- align-items: center;
181
- padding: 0.5rem 1rem;
182
- max-width: 100%;
183
- color: var(--spectrum-global-color-gray-700);
184
- font-weight: 400;
185
-
186
- &.selected {
187
- color: var(--tab-selected-color);
188
- background-color: var(--selected-tab) !important;
189
- font-weight: 500;
190
- }
191
-
192
- &:hover:not(.disabled):not(.list-section) {
193
- background-color: var(--spectrum-global-color-gray-75);
194
- }
195
- }
196
-
197
- &.list-title {
198
- display: flex;
199
- align-items: center;
200
- padding: 0.75rem 1rem;
201
- max-width: 100%;
202
- font-size: 12px;
203
- color: var(--spectrum-global-color-gray-800);
204
- text-transform: uppercase;
205
- letter-spacing: 1.2px;
206
- font-weight: 500;
207
- border-bottom: 1px solid var(--spectrum-global-color-gray-300);
208
- height: 3rem;
209
- }
210
-
211
- &.list-section {
212
- text-transform: uppercase;
213
- font-size: 11px;
214
- font-weight: 400;
215
- letter-spacing: 1.2px;
216
- background-color: transparent;
217
-
218
- &.vertical {
219
- margin-top: 12px;
220
- }
221
-
222
- &:hover {
223
- cursor: default;
224
- }
225
- }
226
-
227
- &:hover:not(.disabled):not(.list-title):not(.list-section) {
228
- cursor: pointer;
229
- color: var(--spectrum-global-color-gray-800);
230
-
231
- &.button:not(.selected) {
232
- background-color: var(--spectrum-global-color-gray-100);
233
- }
234
- }
235
-
236
- &.selected {
237
- color: var(--tab-selected-color);
238
-
239
- &:hover {
240
- color: var(--tab-selected-color);
241
- cursor: default;
242
- }
243
- }
241
+ .tab.selected:hover {
242
+ cursor: default;
244
243
  }
245
244
 
246
245
  .tab-text {