@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
@@ -6,9 +6,11 @@
6
6
  export let partial: boolean = false;
7
7
  export let disabled: boolean = false;
8
8
  export let hovered: boolean = false;
9
+ export let locked: boolean = false;
10
+ export let size: "small" | "medium" | "large" = "small";
9
11
 
10
12
  function toggle() {
11
- if (disabled) return;
13
+ if (disabled || locked) return;
12
14
  checked = !checked;
13
15
  dispatch("change", { checked });
14
16
  }
@@ -16,11 +18,20 @@
16
18
 
17
19
  <!-- svelte-ignore a11y-click-events-have-key-events -->
18
20
  <!-- svelte-ignore a11y-no-static-element-interactions -->
19
- <button class:checked class:disabled class:hovered on:click={toggle}>
21
+ <button
22
+ class:checked
23
+ class:disabled
24
+ class:hovered
25
+ class:locked
26
+ class={size}
27
+ on:click={toggle}
28
+ >
20
29
  {#if checked}
21
30
  <i class="ph ph-check"></i>
22
31
  {:else if partial}
23
32
  <i class="ph ph-minus"></i>
33
+ {:else if locked}
34
+ <i class="ph ph-lock"></i>
24
35
  {/if}
25
36
  </button>
26
37
 
@@ -31,16 +42,50 @@
31
42
  display: flex;
32
43
  align-items: center;
33
44
  justify-content: center;
34
- width: 0.85rem;
35
- height: 0.85rem;
36
45
  border-radius: 0.25rem;
37
46
  border: 1px solid var(--spectrum-global-color-gray-500);
38
47
  background-color: var(--spectrum-global-color-gray-50);
39
48
  transition: all 0.1s ease-in-out;
40
49
  }
41
50
 
51
+ /* Small size */
52
+ button.small {
53
+ width: 0.85rem;
54
+ height: 0.85rem;
55
+ }
56
+
57
+ button.small i {
58
+ font-size: 0.65rem;
59
+ }
60
+
61
+ /* Medium size */
62
+ button.medium {
63
+ width: 1rem;
64
+ height: 1rem;
65
+ }
66
+
67
+ button.medium i {
68
+ font-size: 0.75rem;
69
+ }
70
+
71
+ /* Large size */
72
+ button.large {
73
+ width: 1.25rem;
74
+ height: 1.25rem;
75
+ }
76
+
77
+ button.large i {
78
+ font-size: 0.9rem;
79
+ }
80
+
42
81
  button.checked {
43
- border-color: var(--spectrum-global-color-gray-700);
82
+ border-color: var(--spectrum-global-color-blue-600) !important;
83
+ background-color: var(--spectrum-global-color-blue-600);
84
+
85
+ & i {
86
+ color: white;
87
+ font-weight: 900;
88
+ }
44
89
  }
45
90
 
46
91
  button.disabled {
@@ -49,20 +94,33 @@
49
94
  border-color: var(--spectrum-global-color-gray-300);
50
95
  }
51
96
 
52
- button:hover:not(.disabled),
53
- button.hovered:not(.disabled) {
97
+ button.locked {
98
+ border-color: transparent;
99
+ }
100
+
101
+ button.locked i {
102
+ font-size: 1rem !important;
103
+ font-weight: 400 !important;
104
+ color: var(--spectrum-global-color-gray-500) !important;
105
+ }
106
+
107
+ button:hover:not(.disabled):not(.locked):not(.checked) {
108
+ background-color: var(--spectrum-global-color-gray-100);
109
+ border-color: var(--spectrum-global-color-gray-600);
110
+ }
111
+
112
+ button.hovered:not(.disabled):not(.locked):not(.checked) {
54
113
  border: 1px solid var(--spectrum-global-color-gray-600);
55
114
  }
56
115
 
57
- button:active {
116
+ button:active:not(.disabled):not(.locked):not(.checked) {
58
117
  background-color: var(--spectrum-global-color-blue-100);
59
118
  }
60
- button:focus {
119
+ button:focus:not(.disabled):not(.locked) {
61
120
  border: 1px solid var(--spectrum-global-color-gray-700);
62
121
  }
63
122
 
64
123
  i {
65
- font-size: 0.65rem;
66
124
  font-weight: 700;
67
125
  color: var(--spectrum-global-color-gray-700);
68
126
  animation: scaleIn 0.13s ease-out;
@@ -0,0 +1,162 @@
1
+ <script lang="ts">
2
+ import { createEventDispatcher } from "svelte";
3
+ const dispatch = createEventDispatcher();
4
+
5
+ export let checked: boolean | null = false;
6
+ export let disabled: boolean = false;
7
+ export let hovered: boolean = false;
8
+ export let size: "small" | "medium" | "large" = "medium";
9
+ export let tristate: boolean = false;
10
+
11
+ function toggle() {
12
+ if (disabled) return;
13
+
14
+ if (tristate) {
15
+ // Three-state cycle: off -> on -> null -> off
16
+ if (checked === false) {
17
+ checked = true;
18
+ } else if (checked === true) {
19
+ checked = null;
20
+ } else {
21
+ checked = false;
22
+ }
23
+ } else {
24
+ // Two-state toggle: off -> on -> off
25
+ checked = !checked;
26
+ }
27
+
28
+ dispatch("change", { checked });
29
+ }
30
+ </script>
31
+
32
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
33
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
34
+ <div
35
+ class="switch-container {size}"
36
+ class:checked={checked === true}
37
+ class:indeterminate={checked === null}
38
+ class:disabled
39
+ class:hovered
40
+ on:click|stopPropagation={toggle}
41
+ >
42
+ <div class="switch-track">
43
+ <div class="switch-thumb"></div>
44
+ </div>
45
+ </div>
46
+
47
+ <style>
48
+ .switch-container {
49
+ display: inline-flex;
50
+ align-items: center;
51
+ cursor: pointer;
52
+ user-select: none;
53
+ }
54
+
55
+ .switch-container.disabled {
56
+ cursor: not-allowed;
57
+ opacity: 0.6;
58
+ }
59
+
60
+ .switch-track {
61
+ position: relative;
62
+ background-color: var(--spectrum-global-color-gray-400);
63
+ border-radius: 1rem;
64
+ }
65
+
66
+ .switch-thumb {
67
+ position: absolute;
68
+ background-color: var(--spectrum-global-color-gray-50);
69
+ border-radius: 50%;
70
+ transition: transform 0.2s ease-in-out;
71
+ }
72
+
73
+ /* Small size */
74
+ .switch-container.small .switch-track {
75
+ width: 2rem;
76
+ height: 1rem;
77
+ }
78
+
79
+ .switch-container.small .switch-thumb {
80
+ width: 0.7rem;
81
+ height: 0.7rem;
82
+ top: 0.15rem;
83
+ left: 0.15rem;
84
+ }
85
+
86
+ .switch-container.small.checked .switch-thumb {
87
+ transform: translateX(1rem);
88
+ }
89
+
90
+ .switch-container.small.checked .switch-track {
91
+ justify-content: flex-end;
92
+ }
93
+
94
+ .switch-container.small.indeterminate .switch-thumb {
95
+ transform: translateX(0.45rem);
96
+ }
97
+
98
+ /* Medium size */
99
+ .switch-container.medium .switch-track {
100
+ width: 2.5rem;
101
+ height: 1.25rem;
102
+ }
103
+
104
+ .switch-container.medium .switch-thumb {
105
+ width: 1rem;
106
+ height: 1rem;
107
+ top: 0.125rem;
108
+ left: 0.125rem;
109
+ }
110
+
111
+ .switch-container.medium.checked .switch-thumb {
112
+ transform: translateX(1.25rem);
113
+ }
114
+
115
+ .switch-container.medium.indeterminate .switch-thumb {
116
+ transform: translateX(0.625rem);
117
+ }
118
+
119
+ /* Large size */
120
+ .switch-container.large .switch-track {
121
+ width: 3rem;
122
+ height: 1.5rem;
123
+ }
124
+
125
+ .switch-container.large .switch-thumb {
126
+ width: 1.25rem;
127
+ height: 1.25rem;
128
+ top: 0.125rem;
129
+ left: 0.125rem;
130
+ }
131
+
132
+ .switch-container.large.checked .switch-thumb {
133
+ transform: translateX(1.5rem);
134
+ }
135
+
136
+ .switch-container.large.indeterminate .switch-thumb {
137
+ transform: translateX(0.75rem);
138
+ }
139
+
140
+ /* Checked state */
141
+ .switch-container.checked .switch-track {
142
+ background-color: var(--spectrum-global-color-blue-500);
143
+ }
144
+
145
+ /* Indeterminate state */
146
+ .switch-container.indeterminate .switch-track {
147
+ background-color: var(--spectrum-global-color-orange-500);
148
+ }
149
+
150
+ /* Hover state */
151
+ .switch-container:hover:not(.disabled),
152
+ .switch-container.hovered:not(.disabled) {
153
+ filter: brightness(1.1);
154
+ }
155
+
156
+ /* Focus state */
157
+ .switch-container:focus-visible {
158
+ outline: 2px solid var(--spectrum-global-color-blue-600);
159
+ outline-offset: 2px;
160
+ border-radius: 0.5rem;
161
+ }
162
+ </style>
@@ -1,59 +1,30 @@
1
1
  <script>
2
2
  import SuperPopover from "../../SuperPopover/SuperPopover.svelte";
3
- import { onDestroy } from "svelte";
4
3
 
5
4
  export let anchor;
6
5
  export let content;
7
6
  export let show = false;
8
- export let delay = 750;
9
7
  export let align = "top";
10
-
11
- let timer;
12
- let isHovered = false;
13
-
14
- const startTimer = () => {
15
- if (timer) clearTimeout(timer);
16
- timer = setTimeout(() => {
17
- show = true;
18
- }, delay);
19
- };
20
-
21
- const clearTimer = () => {
22
- if (timer) {
23
- clearTimeout(timer);
24
- timer = null;
25
- }
26
- show = false;
27
- };
28
-
29
- const handleMouseEnter = () => {
30
- isHovered = true;
31
- startTimer();
32
- };
33
-
34
- const handleMouseLeave = () => {
35
- isHovered = false;
36
- clearTimer();
37
- };
38
-
39
- onDestroy(() => {
40
- clearTimer();
41
- });
42
8
  </script>
43
9
 
44
- {#if show}
45
- <SuperPopover {anchor} {align} open={show} dismissible={false} animate={true}>
46
- <div class="tooltip-content info">
47
- {content}
48
- </div>
49
- </SuperPopover>
50
- {/if}
10
+ <SuperPopover
11
+ {anchor}
12
+ {align}
13
+ open={show}
14
+ dismissible={false}
15
+ animate={true}
16
+ customZindex={1000}
17
+ offsetBelow={12}
18
+ >
19
+ <div class="tooltip-content info">
20
+ {content}
21
+ </div>
22
+ </SuperPopover>
51
23
 
52
24
  <style>
53
25
  .tooltip-content {
54
- padding: 8px 12px;
26
+ padding: 4px 12px;
55
27
  font-size: 12px;
56
- line-height: 1.4;
57
28
  color: var(--spectrum-global-color-gray-700);
58
29
  background-color: var(--spectrum-global-color-gray-50);
59
30
  border: 1px solid var(--spectrum-global-color-gray-300);
@@ -64,6 +35,7 @@
64
35
  }
65
36
 
66
37
  .tooltip-content.info {
38
+ padding: 4px 12px;
67
39
  background-color: var(--spectrum-global-color-blue-100);
68
40
  border-color: rgb(from var(--spectrum-global-color-blue-500) r g b / 50%);
69
41
  color: var(--spectrum-global-color-gray-800);