@ship-ui/core 0.13.2

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 (66) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/assets/fonts/InterTight-VariableFont_wght.woff2 +0 -0
  4. package/bin/ship-fg-node +40 -0
  5. package/bin/ship-fg.ts +40 -0
  6. package/bin/src/ship-fg-node.js +344 -0
  7. package/bin/src/ship-fg.ts +368 -0
  8. package/bin/src/utilities.js +53 -0
  9. package/bin/src/utilities.ts +98 -0
  10. package/bin/tsconfig.app.json +15 -0
  11. package/fesm2022/ship-ui-core.mjs +5373 -0
  12. package/fesm2022/ship-ui-core.mjs.map +1 -0
  13. package/index.d.ts +758 -0
  14. package/package.json +52 -0
  15. package/styles/components/ship-alert-container.component.scss +49 -0
  16. package/styles/components/ship-alert.component.scss +273 -0
  17. package/styles/components/ship-button-group.component.scss +63 -0
  18. package/styles/components/ship-button.component.scss +330 -0
  19. package/styles/components/ship-card.component.scss +54 -0
  20. package/styles/components/ship-checkbox.component.scss +245 -0
  21. package/styles/components/ship-chip.component.scss +290 -0
  22. package/styles/components/ship-color-picker.component.scss +78 -0
  23. package/styles/components/ship-datepicker.component.scss +274 -0
  24. package/styles/components/ship-dialog.component.scss +119 -0
  25. package/styles/components/ship-divider.component.scss +27 -0
  26. package/styles/components/ship-file-upload.component.scss +47 -0
  27. package/styles/components/ship-form-field.component.scss +334 -0
  28. package/styles/components/ship-icon.component.scss +54 -0
  29. package/styles/components/ship-list.component.scss +148 -0
  30. package/styles/components/ship-menu.component.scss +217 -0
  31. package/styles/components/ship-popover.component.scss +66 -0
  32. package/styles/components/ship-progress-bar.component.scss +173 -0
  33. package/styles/components/ship-radio.component.scss +182 -0
  34. package/styles/components/ship-range-slider.component.scss +412 -0
  35. package/styles/components/ship-select.component.scss +139 -0
  36. package/styles/components/ship-sidenav.component.scss +192 -0
  37. package/styles/components/ship-sortable.component.scss +54 -0
  38. package/styles/components/ship-spinner.component.scss +53 -0
  39. package/styles/components/ship-stepper.component.scss +138 -0
  40. package/styles/components/ship-table.component.scss +402 -0
  41. package/styles/components/ship-tabs.component.scss +86 -0
  42. package/styles/components/ship-toggle-card.component.scss +71 -0
  43. package/styles/components/ship-toggle.component.scss +238 -0
  44. package/styles/components/ship-tooltip.component.scss +175 -0
  45. package/styles/components/ship-virtual-scroll.component.scss +12 -0
  46. package/styles/components/sparkle-checkbox.component.scss +245 -0
  47. package/styles/components/sparkle-select.component.scss +139 -0
  48. package/styles/core/apexcharts/apexcharts.scss +58 -0
  49. package/styles/core/core/layout.scss +74 -0
  50. package/styles/core/core/loader.scss +63 -0
  51. package/styles/core/core/palette-variables.scss +352 -0
  52. package/styles/core/core/typography.scss +103 -0
  53. package/styles/core/core/variables.scss +188 -0
  54. package/styles/core/core.scss +4 -0
  55. package/styles/core/fonts/_inter-tight.scss +11 -0
  56. package/styles/core/helpers/fn/color-mix.scss +7 -0
  57. package/styles/core/helpers/fn/dp.scss +14 -0
  58. package/styles/core/helpers/fn/p2r.scss +23 -0
  59. package/styles/core/helpers/mixins/border-gradient.scss +61 -0
  60. package/styles/core/helpers/mixins/breakpoint.scss +217 -0
  61. package/styles/core/helpers/mixins/ellipsis.scss +7 -0
  62. package/styles/core/helpers/mixins/overflow-scrolling.scss +18 -0
  63. package/styles/core/helpers/mixins/wrapper.scss +16 -0
  64. package/styles/core/polyfill/light-dark.scss +3 -0
  65. package/styles/helpers.scss +13 -0
  66. package/styles/index.scss +146 -0
@@ -0,0 +1,238 @@
1
+ @use '../helpers.scss' as *;
2
+
3
+ $shipToggle: true !default;
4
+
5
+ @if $shipToggle == true {
6
+ sh-toggle {
7
+ --toggle-bg: var(--base-4);
8
+ --toggle-b: 0;
9
+ --togglek-bg: var(--base-2);
10
+ --togglek-bs: var(--box-shadow-20);
11
+
12
+ display: flex;
13
+ align-items: center;
14
+ gap: p2r(8);
15
+ cursor: pointer;
16
+ user-select: none;
17
+ position: relative;
18
+
19
+ label {
20
+ display: flex;
21
+ align-items: center;
22
+ gap: p2r(8);
23
+ position: relative;
24
+ z-index: 1;
25
+ }
26
+
27
+ .box {
28
+ display: block;
29
+ width: p2r(34);
30
+ height: p2r(20);
31
+ cursor: pointer;
32
+ position: relative;
33
+ border-radius: 999px;
34
+ background: var(--toggle-bg);
35
+ border: var(--toggle-b);
36
+ transition: background 150ms linear;
37
+ }
38
+
39
+ > input[type='checkbox'] {
40
+ appearance: none;
41
+ position: absolute;
42
+ inset: 0;
43
+ cursor: pointer;
44
+ z-index: 0;
45
+ }
46
+
47
+ &:has(input[disabled]),
48
+ &[disabled]:not([disabled='false']) {
49
+ opacity: 0.5;
50
+ pointer-events: none;
51
+ user-select: none;
52
+ cursor: initial;
53
+ }
54
+
55
+ .knob {
56
+ position: absolute;
57
+ top: p2r(2);
58
+ left: p2r(2);
59
+ width: p2r(16);
60
+ height: p2r(16);
61
+ border-radius: 50%;
62
+ background: var(--togglek-bg);
63
+ box-shadow: var(--togglek-bs);
64
+ box-sizing: border-box;
65
+ transition: left 125ms ease-in-out;
66
+ }
67
+
68
+ &:has(input[type='checkbox']:checked),
69
+ &.active {
70
+ --togglek-bg: var(--base-8);
71
+
72
+ .knob {
73
+ left: p2r(16);
74
+ }
75
+
76
+ &.primary {
77
+ --toggle-bg: var(--primary-3);
78
+ --togglek-bg: var(--primary-8);
79
+ }
80
+
81
+ &.accent {
82
+ --toggle-bg: var(--accent-3);
83
+ --togglek-bg: var(--accent-8);
84
+ }
85
+
86
+ &.warn {
87
+ --toggle-bg: var(--warn-3);
88
+ --togglek-bg: var(--warn-8);
89
+ }
90
+
91
+ &.error {
92
+ --toggle-bg: var(--error-3);
93
+ --togglek-bg: var(--error-8);
94
+ }
95
+
96
+ &.success {
97
+ --toggle-bg: var(--success-3);
98
+ --togglek-bg: var(--success-8);
99
+ }
100
+ }
101
+
102
+ &.outlined {
103
+ --toggle-bg: var(--base-1);
104
+ --togglek-bg: var(--base-5);
105
+ --togglek-bs: none;
106
+ --toggle-b: 1px solid var(--base-5);
107
+
108
+ .knob {
109
+ width: p2r(14);
110
+ height: p2r(14);
111
+ }
112
+
113
+ &.active {
114
+ --togglek-bg: var(--base-8);
115
+ --toggle-b: 1px solid var(--base-8);
116
+
117
+ &.primary {
118
+ --togglek-bg: var(--primary-8);
119
+ --toggle-b: 1px solid var(--primary-8);
120
+ }
121
+
122
+ &.accent {
123
+ --togglek-bg: var(--accent-8);
124
+ --toggle-b: 1px solid var(--accent-8);
125
+ }
126
+
127
+ &.warn {
128
+ --togglek-bg: var(--warn-8);
129
+ --toggle-b: 1px solid var(--warn-8);
130
+ }
131
+
132
+ &.error {
133
+ --togglek-bg: var(--error-8);
134
+ --toggle-b: 1px solid var(--error-8);
135
+ }
136
+
137
+ &.success {
138
+ --togglek-bg: var(--success-8);
139
+ --toggle-b: 1px solid var(--success-8);
140
+ }
141
+ }
142
+ }
143
+
144
+ &.simple {
145
+ --togglek-bg: #fff;
146
+
147
+ &:has(input[type='checkbox']:checked),
148
+ &.active {
149
+ --togglek-bg: var(--base-8);
150
+
151
+ &.primary {
152
+ --togglek-bg: var(--primary-8);
153
+ --toggle-bg: var(--primary-3);
154
+ }
155
+
156
+ &.accent {
157
+ --togglek-bg: var(--accent-8);
158
+ --toggle-bg: var(--accent-3);
159
+ }
160
+
161
+ &.warn {
162
+ --togglek-bg: var(--warn-8);
163
+ --toggle-bg: var(--warn-3);
164
+ }
165
+
166
+ &.error {
167
+ --togglek-bg: var(--error-8);
168
+ --toggle-bg: var(--error-3);
169
+ }
170
+
171
+ &.success {
172
+ --togglek-bg: var(--success-8);
173
+ --toggle-bg: var(--success-3);
174
+ }
175
+ }
176
+ }
177
+
178
+ &.flat {
179
+ --togglek-bg: #fff;
180
+
181
+ &:has(input[type='checkbox']:checked),
182
+ &.active {
183
+ --togglek-bg: #fff;
184
+ --toggle-bg: var(--base-8);
185
+
186
+ &.primary {
187
+ --toggle-bg: var(--primary-8);
188
+ }
189
+
190
+ &.accent {
191
+ --toggle-bg: var(--accent-8);
192
+ }
193
+
194
+ &.warn {
195
+ --toggle-bg: var(--warn-8);
196
+ }
197
+
198
+ &.error {
199
+ --toggle-bg: var(--error-8);
200
+ }
201
+
202
+ &.success {
203
+ --toggle-bg: var(--success-8);
204
+ }
205
+ }
206
+ }
207
+
208
+ &.raised {
209
+ --togglek-bg: #fff;
210
+
211
+ &:has(input[type='checkbox']:checked),
212
+ &.active {
213
+ --toggle-bg: var(--base-g2);
214
+ --togglek-bg: #fff;
215
+
216
+ &.primary {
217
+ --toggle-bg: var(--primary-g2);
218
+ }
219
+
220
+ &.accent {
221
+ --toggle-bg: var(--accent-g2);
222
+ }
223
+
224
+ &.warn {
225
+ --toggle-bg: var(--warn-g2);
226
+ }
227
+
228
+ &.error {
229
+ --toggle-bg: var(--error-g2);
230
+ }
231
+
232
+ &.success {
233
+ --toggle-bg: var(--success-g2);
234
+ }
235
+ }
236
+ }
237
+ }
238
+ }
@@ -0,0 +1,175 @@
1
+ @use '../helpers.scss' as *;
2
+
3
+ $shTooltip: true !default;
4
+
5
+ %hoverState {
6
+ opacity: 1;
7
+ z-index: 0;
8
+ visibility: visible;
9
+ }
10
+ @if $shTooltip == true {
11
+ .tooltip {
12
+ position: relative;
13
+ pointer-events: initial !important;
14
+
15
+ &:after {
16
+ content: '';
17
+ position: absolute;
18
+ top: p2r(-8);
19
+ bottom: p2r(-8);
20
+ left: p2r(-8);
21
+ right: p2r(-8);
22
+ z-index: 1;
23
+ }
24
+
25
+ &.primary + ship-tooltip-wrapper {
26
+ --tt-bg: var(--primary-2);
27
+ --tt-c: var(--primary-8);
28
+ }
29
+
30
+ &.accent + ship-tooltip-wrapper {
31
+ --tt-bg: var(--accent-2);
32
+ --tt-c: var(--accent-8);
33
+ }
34
+
35
+ &.warn + ship-tooltip-wrapper {
36
+ --tt-bg: var(--warn-2);
37
+ --tt-c: var(--warn-8);
38
+ }
39
+
40
+ &.error + ship-tooltip-wrapper {
41
+ --tt-bg: var(--error-2);
42
+ --tt-c: var(--error-8);
43
+ }
44
+
45
+ &.success + ship-tooltip-wrapper {
46
+ --tt-bg: var(--success-2);
47
+ --tt-c: var(--success-8);
48
+ }
49
+
50
+ &.active {
51
+ z-index: 1;
52
+ + ship-tooltip-wrapper {
53
+ @extend %hoverState;
54
+ // transform: translateY(-#{p2r(8)}) scale(1);
55
+ // &.below {
56
+ // transform: translateY(#{p2r(8)}) scale(1);
57
+ // }
58
+
59
+ transform: scale(1);
60
+ }
61
+ }
62
+ }
63
+
64
+ ship-tooltip-wrapper {
65
+ --tt-bg: var(--base-3);
66
+ --tt-c: var(--base-12);
67
+ --tt-mh: #{p2r(136)};
68
+ --tt-mw: #{p2r(280)};
69
+
70
+ position: fixed;
71
+ opacity: 0;
72
+ visibility: hidden;
73
+ padding: p2r(0 0 12);
74
+ transform: translateY(50%) scale(0);
75
+
76
+ width: max-content;
77
+ overflow: visible;
78
+ box-shadow: none;
79
+ margin: initial;
80
+ background: transparent;
81
+ border: 0;
82
+
83
+ @supports (anchor-name: --anchor) {
84
+ inset: unset;
85
+ justify-self: anchor-center;
86
+ bottom: anchor(top);
87
+ position: fixed;
88
+ position-try-order:
89
+ flip-block,
90
+ flip-inline,
91
+ flip-block flip-inline;
92
+ position-try-fallbacks:
93
+ flip-block,
94
+ flip-inline,
95
+ flip-block flip-inline;
96
+ }
97
+
98
+ &:before {
99
+ content: '';
100
+ position: absolute;
101
+ bottom: 0%;
102
+ left: 50%;
103
+ z-index: 1;
104
+ transform: translateX(-50%);
105
+ border-width: p2r(6);
106
+ border-style: solid;
107
+ border-color: transparent;
108
+ border-top-color: var(--tt-bg);
109
+ width: 0;
110
+ height: 0;
111
+ opacity: 1;
112
+ }
113
+
114
+ &.below {
115
+ padding: p2r(12 0 0);
116
+ &:before {
117
+ border-top-color: transparent;
118
+ border-bottom-color: var(--tt-bg);
119
+ top: 0%;
120
+ bottom: auto;
121
+ }
122
+ }
123
+
124
+ .tooltip-content {
125
+ padding: p2r(8 12);
126
+ position: relative;
127
+ hyphens: auto;
128
+ text-wrap: pretty;
129
+ color: var(--tt-c);
130
+ max-height: var(--tt-mh);
131
+ max-width: var(--tt-mw);
132
+ overflow: auto;
133
+ // background: none;
134
+ background: var(--tt-bg);
135
+ border-radius: var(--shape-2);
136
+ box-shadow: var(--box-shadow-20);
137
+ }
138
+
139
+ // @position-fallback --dropdown-flip-and-slide {
140
+ // /* Attempt 1: Position below and align to the start (left) of the trigger */
141
+ // @try {
142
+ // top: calc(anchor(bottom) + 8px); /* 8px gap */
143
+ // left: anchor(left);
144
+ // }
145
+ // /* Attempt 2: Position above and align to the start (left) of the trigger */
146
+ // @try {
147
+ // bottom: calc(anchor(top) + 8px); /* 8px gap */
148
+ // left: anchor(left);
149
+ // }
150
+ // /* Attempt 3: Position below and align to the end (right) of the trigger */
151
+ // @try {
152
+ // top: calc(anchor(bottom) + 8px);
153
+ // right: anchor(right);
154
+ // }
155
+ // /* Attempt 4: Position above and align to the end (right) of the trigger */
156
+ // @try {
157
+ // bottom: calc(anchor(top) + 8px);
158
+ // right: anchor(right);
159
+ // }
160
+ // /* Attempt 5: (More advanced) If it's too wide, try to align center, below */
161
+ // @try {
162
+ // top: calc(anchor(bottom) + 8px);
163
+ // left: anchor(center);
164
+ // /* This might need more constraints or a width calculation if it's wider than anchor */
165
+ // transform: translateX(-50%); /* Center it based on its own width */
166
+ // }
167
+ // /* Attempt 6: (More advanced) If it's too wide, try to align center, above */
168
+ // @try {
169
+ // bottom: calc(anchor(top) + 8px);
170
+ // left: anchor(center);
171
+ // transform: translateX(-50%);
172
+ // }
173
+ // }
174
+ }
175
+ }
@@ -0,0 +1,12 @@
1
+ @use '../helpers.scss' as *;
2
+
3
+ $shipVirtualScroll: false !default;
4
+
5
+ @if $shipVirtualScroll == true {
6
+ sh-virtual-scroll {
7
+ overflow-y: auto;
8
+ position: relative;
9
+ display: block;
10
+ height: 600px;
11
+ }
12
+ }
@@ -0,0 +1,245 @@
1
+ @use '../helpers.scss' as *;
2
+
3
+ $shipCheckbox: true !default;
4
+
5
+ @if $shipCheckbox == true {
6
+ sh-checkbox {
7
+ --box-bw: #{p2r(1)};
8
+ --box-bc: var(--base-4);
9
+ --box-c: var(--base-8);
10
+ --box-bg: var(--base-2);
11
+
12
+ display: flex;
13
+ align-items: center;
14
+ gap: p2r(8);
15
+ cursor: pointer;
16
+ user-select: none;
17
+ position: relative;
18
+
19
+ > input[type='checkbox'] {
20
+ appearance: none;
21
+ position: absolute;
22
+ inset: 0;
23
+ cursor: pointer;
24
+
25
+ &:focus {
26
+ outline: none;
27
+ }
28
+ }
29
+
30
+ &:has(input[disabled]),
31
+ &[disabled]:not([disabled='false']) {
32
+ opacity: 0.5;
33
+ pointer-events: none;
34
+ user-select: none;
35
+ cursor: initial;
36
+ }
37
+
38
+ .box {
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: center;
42
+ width: p2r(20);
43
+ height: p2r(20);
44
+ cursor: pointer;
45
+ position: relative;
46
+ border-radius: var(--shape-1);
47
+ border: var(--box-bw) solid var(--box-bc);
48
+ background: var(--box-bg);
49
+ font-size: p2r(12);
50
+ color: var(--box-c);
51
+
52
+ sh-icon {
53
+ opacity: 0;
54
+ font-weight: bold;
55
+ transition: opacity 75ms linear;
56
+
57
+ &.indeterminate-indicator {
58
+ display: none;
59
+ }
60
+ }
61
+ }
62
+
63
+ &.indeterminate {
64
+ .box sh-icon {
65
+ &.indeterminate-indicator {
66
+ display: block;
67
+ }
68
+
69
+ &.default-indicator {
70
+ display: none;
71
+ }
72
+ }
73
+ }
74
+
75
+ &:has(input[type='checkbox']:checked),
76
+ &.indeterminate,
77
+ &.active {
78
+ .box sh-icon {
79
+ opacity: 1;
80
+ }
81
+ }
82
+
83
+ &:hover {
84
+ .box sh-icon {
85
+ opacity: 0.5;
86
+ }
87
+ }
88
+
89
+ &.primary {
90
+ --box-c: var(--primary-8);
91
+ }
92
+
93
+ &.accent {
94
+ --box-c: var(--accent-8);
95
+ }
96
+
97
+ &.warn {
98
+ --box-c: var(--warn-8);
99
+ }
100
+
101
+ &.error {
102
+ --box-c: var(--error-8);
103
+ }
104
+
105
+ &.success {
106
+ --box-c: var(--success-8);
107
+ }
108
+
109
+ &.simple,
110
+ &.outlined {
111
+ --box-bg: var(--base-3);
112
+ --box-bc: var(--base-6);
113
+
114
+ &.primary {
115
+ --box-bg: var(--primary-3);
116
+ --box-bc: var(--primary-6);
117
+ }
118
+
119
+ &.accent {
120
+ --box-bg: var(--accent-3);
121
+ --box-bc: var(--accent-6);
122
+ }
123
+
124
+ &.warn {
125
+ --box-bg: var(--warn-3);
126
+ --box-bc: var(--warn-6);
127
+ }
128
+
129
+ &.error {
130
+ --box-bg: var(--error-3);
131
+ --box-bc: var(--error-6);
132
+ }
133
+
134
+ &.success {
135
+ --box-bg: var(--success-3);
136
+ --box-bc: var(--success-6);
137
+ }
138
+ }
139
+
140
+ &.simple {
141
+ --box-bc: var(--box-bg);
142
+
143
+ &.primary,
144
+ &.accent,
145
+ &.warn,
146
+ &.error,
147
+ &.success {
148
+ --box-bc: var(--box-bg);
149
+ }
150
+ }
151
+
152
+ &.flat,
153
+ &.raised {
154
+ &.primary,
155
+ &.accent,
156
+ &.warn,
157
+ &.error,
158
+ &.success {
159
+ --box-bc: var(--base-4);
160
+ --box-c: var(--base-8);
161
+ --box-bg: var(--base-2);
162
+ }
163
+ }
164
+
165
+ &.flat:has(input[type='checkbox']:checked),
166
+ &.flat.indeterminate,
167
+ &.flat.active {
168
+ @extend %flat;
169
+ }
170
+
171
+ &.raised:has(input[type='checkbox']:checked),
172
+ &.raised.indeterminate,
173
+ &.raised.active {
174
+ @extend %raised;
175
+ }
176
+ }
177
+
178
+ .ship-popup-menu sh-option[selected] {
179
+ sh-checkbox {
180
+ sh-icon {
181
+ opacity: 1;
182
+ }
183
+
184
+ &.flat {
185
+ @extend %flat;
186
+ }
187
+
188
+ &.raised {
189
+ @extend %raised;
190
+ }
191
+ }
192
+ }
193
+
194
+ %flat {
195
+ --box-bw: 0;
196
+ --box-bg: var(--base-8);
197
+ --box-c: #fff;
198
+
199
+ &.primary {
200
+ --box-bg: var(--primary-8);
201
+ }
202
+
203
+ &.accent {
204
+ --box-bg: var(--accent-8);
205
+ }
206
+
207
+ &.warn {
208
+ --box-bg: var(--warn-8);
209
+ }
210
+
211
+ &.error {
212
+ --box-bg: var(--error-8);
213
+ }
214
+
215
+ &.success {
216
+ --box-bg: var(--success-8);
217
+ }
218
+ }
219
+
220
+ %raised {
221
+ --box-bw: 0;
222
+ --box-bg: var(--base-g2);
223
+ --box-c: #fff;
224
+
225
+ &.primary {
226
+ --box-bg: var(--primary-g2);
227
+ }
228
+
229
+ &.accent {
230
+ --box-bg: var(--accent-g2);
231
+ }
232
+
233
+ &.warn {
234
+ --box-bg: var(--warn-g2);
235
+ }
236
+
237
+ &.error {
238
+ --box-bg: var(--error-g2);
239
+ }
240
+
241
+ &.success {
242
+ --box-bg: var(--success-g2);
243
+ }
244
+ }
245
+ }