@haiilo/catalyst 1.2.1 → 1.2.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 (75) hide show
  1. package/dist/catalyst/catalyst.css +1 -1
  2. package/dist/catalyst/catalyst.esm.js +1 -1
  3. package/dist/catalyst/p-c1cab319.entry.js +10 -0
  4. package/dist/catalyst/p-c1cab319.entry.js.map +1 -0
  5. package/dist/catalyst/scss/_mixins.scss +0 -1
  6. package/dist/catalyst/scss/_variables.scss +2 -2
  7. package/dist/catalyst/scss/_variables.tokens.scss +6 -2
  8. package/dist/catalyst/scss/core/_typography.scss +42 -12
  9. package/dist/catalyst/scss/utils/_disabled.mixins.scss +0 -1
  10. package/dist/catalyst/scss/utils/_spacing.scss +0 -1
  11. package/dist/cjs/cat-alert_23.cjs.entry.js +30 -22
  12. package/dist/cjs/cat-alert_23.cjs.entry.js.map +1 -1
  13. package/dist/collection/components/cat-alert/cat-alert.css +5 -5
  14. package/dist/collection/components/cat-avatar/cat-avatar.css +1 -1
  15. package/dist/collection/components/cat-badge/cat-badge.css +17 -17
  16. package/dist/collection/components/cat-button/cat-button.css +53 -43
  17. package/dist/collection/components/cat-card/cat-card.css +1 -1
  18. package/dist/collection/components/cat-checkbox/cat-checkbox.css +7 -7
  19. package/dist/collection/components/cat-input/cat-input.css +8 -8
  20. package/dist/collection/components/cat-menu/cat-menu.css +1 -1
  21. package/dist/collection/components/cat-menu/cat-menu.js +15 -6
  22. package/dist/collection/components/cat-menu/cat-menu.js.map +1 -1
  23. package/dist/collection/components/cat-modal/cat-modal.css +2 -2
  24. package/dist/collection/components/cat-radio/cat-radio.css +6 -6
  25. package/dist/collection/components/cat-select/cat-select.css +9 -9
  26. package/dist/collection/components/cat-skeleton/cat-skeleton.css +1 -1
  27. package/dist/collection/components/cat-tabs/cat-tabs.css +1 -1
  28. package/dist/collection/components/cat-textarea/cat-textarea.css +4 -4
  29. package/dist/collection/components/cat-toggle/cat-toggle.css +5 -5
  30. package/dist/collection/components/cat-tooltip/cat-tooltip.css +3 -3
  31. package/dist/collection/scss/_mixins.scss +0 -1
  32. package/dist/collection/scss/_variables.scss +2 -2
  33. package/dist/collection/scss/_variables.tokens.scss +6 -2
  34. package/dist/collection/scss/core/_typography.scss +42 -12
  35. package/dist/collection/scss/utils/_disabled.mixins.scss +0 -1
  36. package/dist/collection/scss/utils/_spacing.scss +0 -1
  37. package/dist/components/cat-alert.js +1 -1
  38. package/dist/components/cat-alert.js.map +1 -1
  39. package/dist/components/cat-avatar2.js +1 -1
  40. package/dist/components/cat-avatar2.js.map +1 -1
  41. package/dist/components/cat-badge.js +1 -1
  42. package/dist/components/cat-badge.js.map +1 -1
  43. package/dist/components/cat-button2.js +1 -1
  44. package/dist/components/cat-button2.js.map +1 -1
  45. package/dist/components/cat-card.js +1 -1
  46. package/dist/components/cat-card.js.map +1 -1
  47. package/dist/components/cat-checkbox2.js +1 -1
  48. package/dist/components/cat-checkbox2.js.map +1 -1
  49. package/dist/components/cat-input.js +1 -1
  50. package/dist/components/cat-input.js.map +1 -1
  51. package/dist/components/cat-menu.js +16 -7
  52. package/dist/components/cat-menu.js.map +1 -1
  53. package/dist/components/cat-modal.js +1 -1
  54. package/dist/components/cat-modal.js.map +1 -1
  55. package/dist/components/cat-radio.js +1 -1
  56. package/dist/components/cat-radio.js.map +1 -1
  57. package/dist/components/cat-select2.js +1 -1
  58. package/dist/components/cat-select2.js.map +1 -1
  59. package/dist/components/cat-skeleton2.js +1 -1
  60. package/dist/components/cat-skeleton2.js.map +1 -1
  61. package/dist/components/cat-tabs.js +1 -1
  62. package/dist/components/cat-tabs.js.map +1 -1
  63. package/dist/components/cat-textarea.js +1 -1
  64. package/dist/components/cat-textarea.js.map +1 -1
  65. package/dist/components/cat-toggle.js +1 -1
  66. package/dist/components/cat-toggle.js.map +1 -1
  67. package/dist/components/cat-tooltip.js +1 -1
  68. package/dist/components/cat-tooltip.js.map +1 -1
  69. package/dist/esm/cat-alert_23.entry.js +30 -22
  70. package/dist/esm/cat-alert_23.entry.js.map +1 -1
  71. package/package.json +2 -2
  72. package/dist/catalyst/p-e428a411.entry.js +0 -10
  73. package/dist/catalyst/p-e428a411.entry.js.map +0 -1
  74. package/dist/catalyst/scss/utils/_spacing.mixins.scss +0 -5
  75. package/dist/collection/scss/utils/_spacing.mixins.scss +0 -5
@@ -7,7 +7,7 @@
7
7
  display: flex;
8
8
  gap: 0.5rem;
9
9
  padding: 1.25rem;
10
- border-radius: 0.5rem;
10
+ border-radius: var(--cat-border-radius-l, 0.5rem);
11
11
  margin-bottom: 1rem;
12
12
  }
13
13
 
@@ -36,28 +36,28 @@
36
36
  }
37
37
 
38
38
  :host([color=secondary]) {
39
- background-color: rgba(105, 118, 135, 0.1);
39
+ background-color: rgba(var(--cat-secondary-bg, 105, 118, 135), 0.1);
40
40
  }
41
41
  :host([color=secondary]) cat-icon {
42
42
  color: #697687;
43
43
  }
44
44
 
45
45
  :host([color=success]) {
46
- background-color: rgba(0, 132, 88, 0.1);
46
+ background-color: rgba(var(--cat-success-bg-, 0, 132, 88), 0.1);
47
47
  }
48
48
  :host([color=success]) cat-icon {
49
49
  color: #008458;
50
50
  }
51
51
 
52
52
  :host([color=warning]) {
53
- background-color: rgba(255, 206, 128, 0.1);
53
+ background-color: rgba(var(--cat-warning-bg, 255, 206, 128), 0.1);
54
54
  }
55
55
  :host([color=warning]) cat-icon {
56
56
  color: #ebb663;
57
57
  }
58
58
 
59
59
  :host([color=danger]) {
60
- background-color: rgba(217, 52, 13, 0.1);
60
+ background-color: rgba(var(--cat-danger-bg, 217, 52, 13), 0.1);
61
61
  }
62
62
  :host([color=danger]) cat-icon {
63
63
  color: #d9340d;
@@ -21,7 +21,7 @@
21
21
  display: inline-flex;
22
22
  align-items: center;
23
23
  justify-content: center;
24
- border-radius: 0.25rem;
24
+ border-radius: var(--cat-border-radius-m, 0.25rem);
25
25
  text-decoration: inherit;
26
26
  color: var(--cat-avatar-fill, white);
27
27
  background-color: var(--cat-avatar-bg, #697687);
@@ -13,7 +13,7 @@
13
13
  vertical-align: baseline;
14
14
  align-items: center;
15
15
  justify-content: center;
16
- border-radius: 0.25rem;
16
+ border-radius: var(--cat-border-radius-m, 0.25rem);
17
17
  text-decoration: none;
18
18
  line-height: 1.5;
19
19
  }
@@ -52,31 +52,31 @@
52
52
  }
53
53
 
54
54
  :host([color=secondary]) {
55
- --bg: 105, 118, 135;
56
- --fill: 255, 255, 255;
57
- --text: 0, 0, 0;
58
- --border: 105, 118, 135;
55
+ --bg: var(--cat-secondary-bg, 105, 118, 135);
56
+ --fill: var(--cat-secondary-fill, 255, 255, 255);
57
+ --text: var(--cat-secondary-text, 0, 0, 0);
58
+ --border: var(--cat-secondary-bg, 105, 118, 135);
59
59
  }
60
60
 
61
61
  :host([color=success]) {
62
- --bg: 0, 132, 88;
63
- --fill: 255, 255, 255;
64
- --text: 0, 132, 88;
65
- --border: 0, 132, 88;
62
+ --bg: var(--cat-success-bg-, 0, 132, 88);
63
+ --fill: var(--cat-success-fill, 255, 255, 255);
64
+ --text: var(--cat-success-text, 0, 132, 88);
65
+ --border: var(--cat-success-text, 0, 132, 88);
66
66
  }
67
67
 
68
68
  :host([color=warning]) {
69
- --bg: 255, 206, 128;
70
- --fill: 0, 0, 0;
71
- --text: 159, 97, 0;
72
- --border: 159, 97, 0;
69
+ --bg: var(--cat-warning-bg, 255, 206, 128);
70
+ --fill: var(--cat-warning-fill, 0, 0, 0);
71
+ --text: var(--cat-warning-text, 159, 97, 0);
72
+ --border: var(--cat-warning-text, 159, 97, 0);
73
73
  }
74
74
 
75
75
  :host([color=danger]) {
76
- --bg: 217, 52, 13;
77
- --fill: 255, 255, 255;
78
- --text: 217, 52, 13;
79
- --border: 217, 52, 13;
76
+ --bg: var(--cat-danger-bg, 217, 52, 13);
77
+ --fill: var(--cat-danger-fill, 255, 255, 255);
78
+ --text: var(--cat-danger-text, 217, 52, 13);
79
+ --border: var(--cat-danger-text, 217, 52, 13);
80
80
  }
81
81
 
82
82
  :host([size=xs]) {
@@ -25,7 +25,7 @@
25
25
  align-items: center;
26
26
  justify-content: center;
27
27
  border: none;
28
- border-radius: 0.25rem;
28
+ border-radius: var(--cat-border-radius-m, 0.25rem);
29
29
  text-decoration: none;
30
30
  width: 100%;
31
31
  box-sizing: border-box;
@@ -51,8 +51,7 @@
51
51
 
52
52
  .cat-button-disabled {
53
53
  cursor: not-allowed;
54
- opacity: 0.65;
55
- filter: grayscale(100%);
54
+ opacity: var(--cat-opacity-disabled, 0.65);
56
55
  }
57
56
 
58
57
  .cat-button-round {
@@ -76,12 +75,20 @@
76
75
  -webkit-font-smoothing: antialiased;
77
76
  -moz-osx-font-smoothing: greyscale;
78
77
  }
78
+ .cat-button-filled.cat-button-disabled {
79
+ --bg: 235, 236, 240;
80
+ --fill: var(--cat-font-color-muted, 105, 118, 135);
81
+ }
79
82
 
80
83
  .cat-button-outlined {
81
84
  background-color: white;
82
85
  box-shadow: inset 0 0 0 1px rgba(var(--base), 0.2);
83
86
  color: rgb(var(--text));
84
87
  }
88
+ .cat-button-outlined.cat-button-disabled {
89
+ --base: var(--cat-font-color-muted, 105, 118, 135);
90
+ --text: var(--cat-font-color-muted, 105, 118, 135);
91
+ }
85
92
  .cat-button-outlined:hover:not(.cat-button-disabled):not(.cat-button-loading), .cat-button-outlined.cat-button-active:not(.cat-button-disabled):not(.cat-button-loading) {
86
93
  background-color: rgba(var(--base), 0.05);
87
94
  }
@@ -94,6 +101,9 @@
94
101
  color: rgb(var(--text));
95
102
  text-decoration: none;
96
103
  }
104
+ .cat-button-text.cat-button-disabled {
105
+ --text: var(--cat-font-color-muted, 105, 118, 135);
106
+ }
97
107
  .cat-button-text:hover:not(.cat-button-disabled):not(.cat-button-loading), .cat-button-text.cat-button-active:not(.cat-button-disabled):not(.cat-button-loading) {
98
108
  text-decoration: none;
99
109
  background-color: rgba(var(--base), 0.05);
@@ -117,71 +127,71 @@
117
127
  }
118
128
 
119
129
  .cat-button-secondary {
120
- --bg: 105, 118, 135;
121
- --fill: 255, 255, 255;
122
- --text: 0, 0, 0;
123
- --base: 105, 118, 135;
130
+ --bg: var(--cat-secondary-bg, 105, 118, 135);
131
+ --fill: var(--cat-secondary-fill, 255, 255, 255);
132
+ --text: var(--cat-secondary-text, 0, 0, 0);
133
+ --base: var(--cat-secondary-bg, 105, 118, 135);
124
134
  }
125
135
  .cat-button-secondary:hover:not(.cat-button-disabled):not(.cat-button-loading) {
126
- --bg: 105, 118, 135;
127
- --fill: 255, 255, 255;
128
- --text: 0, 0, 0;
136
+ --bg: var(--cat-secondary-bg-hover, 105, 118, 135);
137
+ --fill: var(--cat-secondary-fill-hover, 255, 255, 255);
138
+ --text: var(--cat-secondary-text-hover, 0, 0, 0);
129
139
  }
130
140
  .cat-button-secondary.cat-button-active:not(.cat-button-disabled):not(.cat-button-loading), .cat-button-secondary:active:not(.cat-button-disabled):not(.cat-button-loading) {
131
- --bg: 105, 118, 135;
132
- --fill: 255, 255, 255;
133
- --text: 0, 0, 0;
141
+ --bg: var(--cat-secondary-bg-active, 105, 118, 135);
142
+ --fill: var(--cat-secondary-fill-active, 255, 255, 255);
143
+ --text: var(--cat-catsecondary-text-active, 0, 0, 0);
134
144
  }
135
145
 
136
146
  .cat-button-success {
137
- --bg: 0, 132, 88;
138
- --fill: 255, 255, 255;
139
- --text: 0, 132, 88;
140
- --base: 0, 132, 88;
147
+ --bg: var(--cat-success-bg-, 0, 132, 88);
148
+ --fill: var(--cat-success-fill, 255, 255, 255);
149
+ --text: var(--cat-success-text, 0, 132, 88);
150
+ --base: var(--cat-success-text, 0, 132, 88);
141
151
  }
142
152
  .cat-button-success:hover:not(.cat-button-disabled):not(.cat-button-loading) {
143
- --bg: 0, 117, 78;
144
- --fill: 255, 255, 255;
145
- --text: 0, 117, 78;
153
+ --bg: var(--cat-success-bg-hover, 0, 117, 78);
154
+ --fill: var(--cat-success-fill-hover, 255, 255, 255);
155
+ --text: var(--cat-success-text-hover, 0, 117, 78);
146
156
  }
147
157
  .cat-button-success.cat-button-active:not(.cat-button-disabled):not(.cat-button-loading), .cat-button-success:active:not(.cat-button-disabled):not(.cat-button-loading) {
148
- --bg: 0, 105, 70;
149
- --fill: 255, 255, 255;
150
- --text: 0, 105, 70;
158
+ --bg: var(--cat-success-bg-active, 0, 105, 70);
159
+ --fill: var(--cat-success-fill-active, 255, 255, 255);
160
+ --text: var(--cat-success-text-active, 0, 105, 70);
151
161
  }
152
162
 
153
163
  .cat-button-warning {
154
- --bg: 255, 206, 128;
155
- --fill: 0, 0, 0;
156
- --text: 159, 97, 0;
157
- --base: 159, 97, 0;
164
+ --bg: var(--cat-warning-bg, 255, 206, 128);
165
+ --fill: var(--cat-warning-fill, 0, 0, 0);
166
+ --text: var(--cat-warning-text, 159, 97, 0);
167
+ --base: var(--cat-warning-text, 159, 97, 0);
158
168
  }
159
169
  .cat-button-warning:hover:not(.cat-button-disabled):not(.cat-button-loading) {
160
- --bg: 255, 214, 148;
161
- --fill: 0, 0, 0;
162
- --text: 159, 97, 0;
170
+ --bg: var(--cat-warning-bg-hover, 255, 214, 148);
171
+ --fill: var(--cat-warning-fill-hover, 0, 0, 0);
172
+ --text: var(--cat-warning-text-hover, 159, 97, 0);
163
173
  }
164
174
  .cat-button-warning.cat-button-active:not(.cat-button-disabled):not(.cat-button-loading), .cat-button-warning:active:not(.cat-button-disabled):not(.cat-button-loading) {
165
- --bg: 255, 222, 168;
166
- --fill: 0, 0, 0;
167
- --text: 159, 97, 0;
175
+ --bg: var(--cat-warning-bg-active, 255, 222, 168);
176
+ --fill: var(--cat-warning-fill-active, 0, 0, 0);
177
+ --text: var(--cat-warning-text-active, 159, 97, 0);
168
178
  }
169
179
 
170
180
  .cat-button-danger {
171
- --bg: 217, 52, 13;
172
- --fill: 255, 255, 255;
173
- --text: 217, 52, 13;
174
- --base: 217, 52, 13;
181
+ --bg: var(--cat-danger-bg, 217, 52, 13);
182
+ --fill: var(--cat-danger-fill, 255, 255, 255);
183
+ --text: var(--cat-danger-text, 217, 52, 13);
184
+ --base: var(--cat-danger-text, 217, 52, 13);
175
185
  }
176
186
  .cat-button-danger:hover:not(.cat-button-disabled):not(.cat-button-loading) {
177
- --bg: 194, 46, 11;
178
- --fill: 255, 255, 255;
179
- --text: 194, 46, 11;
187
+ --bg: var(--cat-danger-bg-hover, 194, 46, 11);
188
+ --fill: var(--cat-danger-fill-hover, 255, 255, 255);
189
+ --text: var(--cat-danger-text-hover, 194, 46, 11);
180
190
  }
181
191
  .cat-button-danger.cat-button-active:not(.cat-button-disabled):not(.cat-button-loading), .cat-button-danger:active:not(.cat-button-disabled):not(.cat-button-loading) {
182
- --bg: 174, 42, 10;
183
- --fill: 255, 255, 255;
184
- --text: 174, 42, 10;
192
+ --bg: var(--cat-danger-bg-active, 174, 42, 10);
193
+ --fill: var(--cat-danger-fill-active, 255, 255, 255);
194
+ --text: var(--cat-catdanger-text-active, 174, 42, 10);
185
195
  }
186
196
 
187
197
  :host(.cat-button-pull:not([size])) {
@@ -6,7 +6,7 @@
6
6
  :host {
7
7
  display: block;
8
8
  margin-bottom: 1rem;
9
- border-radius: 0.5rem;
9
+ border-radius: var(--cat-border-radius-l, 0.5rem);
10
10
  background-color: white;
11
11
  padding: 1.25rem;
12
12
  }
@@ -17,7 +17,7 @@
17
17
  }
18
18
 
19
19
  :host-context(.cat-error) .hint-section {
20
- color: #d9340d;
20
+ color: rgb(var(--cat-danger-text, 217, 52, 13));
21
21
  }
22
22
 
23
23
  :host {
@@ -73,8 +73,8 @@ input {
73
73
  height: 1.25rem;
74
74
  width: 1.25rem;
75
75
  background-color: white;
76
- border: 1px solid #d7dbe0;
77
- border-radius: 0.125rem;
76
+ border: 1px solid rgb(var(--cat-border-color-focus, 215, 219, 224));
77
+ border-radius: var(--cat-border-radius-s, 0.125rem);
78
78
  transition: background-color 0.13s ease, border-color 0.13s ease;
79
79
  pointer-events: none;
80
80
  }
@@ -114,13 +114,13 @@ input {
114
114
  }
115
115
 
116
116
  :host(.cat-error) .box {
117
- border: 1px solid #d9340d;
117
+ border: 1px solid rgb(var(--cat-danger-bg, 217, 52, 13));
118
118
  }
119
119
  :host(.cat-error) :checked + .box,
120
120
  :host(.cat-error) :indeterminate + .box {
121
- background-color: #d9340d;
122
- border-color: #d9340d;
123
- stroke: white;
121
+ background-color: rgb(var(--cat-danger-bg, 217, 52, 13));
122
+ border-color: rgb(var(--cat-danger-bg, 217, 52, 13));
123
+ stroke: rgb(var(--cat-danger-fill, 255, 255, 255));
124
124
  }
125
125
 
126
126
  .label {
@@ -17,7 +17,7 @@
17
17
  }
18
18
 
19
19
  :host-context(.cat-error) .hint-section {
20
- color: #d9340d;
20
+ color: rgb(var(--cat-danger-text, 217, 52, 13));
21
21
  }
22
22
 
23
23
  :host {
@@ -42,8 +42,8 @@
42
42
  height: 2.5rem;
43
43
  overflow: hidden;
44
44
  background: white;
45
- border-radius: 0.25rem;
46
- box-shadow: 0 0 0 1px #d7dbe0;
45
+ border-radius: var(--cat-border-radius-m, 0.25rem);
46
+ box-shadow: 0 0 0 1px rgb(var(--cat-border-color-focus, 215, 219, 224));
47
47
  transition: box-shadow 0.13s linear;
48
48
  }
49
49
  .input-wrapper.input-round {
@@ -55,17 +55,17 @@
55
55
  color: rgb(var(--cat-font-color-muted, 105, 118, 135));
56
56
  }
57
57
  .input-wrapper:not(.input-disabled):hover {
58
- box-shadow: 0 0 0 2px #d7dbe0;
58
+ box-shadow: 0 0 0 2px rgb(var(--cat-border-color-focus, 215, 219, 224));
59
59
  }
60
60
  .input-wrapper:not(.input-disabled):focus-within {
61
61
  outline: 2px solid rgb(var(--cat-border-color-focus, 0, 113, 255));
62
62
  }
63
63
 
64
64
  :host(.cat-error) .input-wrapper {
65
- box-shadow: 0 0 0 1px #d9340d;
65
+ box-shadow: 0 0 0 1px rgb(var(--cat-danger-bg, 217, 52, 13));
66
66
  }
67
67
  :host(.cat-error) .input-wrapper:not(.input-disabled):hover {
68
- box-shadow: 0 0 0 2px #d9340d;
68
+ box-shadow: 0 0 0 2px rgb(var(--cat-danger-bg, 217, 52, 13));
69
69
  }
70
70
 
71
71
  label {
@@ -103,12 +103,12 @@ label.hidden {
103
103
  }
104
104
 
105
105
  .text-prefix {
106
- border-right: 1px solid #d7dbe0;
106
+ border-right: 1px solid rgb(var(--cat-border-color-focus, 215, 219, 224));
107
107
  padding-right: 0.75rem;
108
108
  }
109
109
 
110
110
  .text-suffix {
111
- border-left: 1px solid #d7dbe0;
111
+ border-left: 1px solid rgb(var(--cat-border-color-focus, 215, 219, 224));
112
112
  padding-left: 0.75rem;
113
113
  }
114
114
 
@@ -32,6 +32,6 @@
32
32
  min-height: 2rem;
33
33
  max-height: calc(100vh - 48px);
34
34
  box-shadow: 0 1px 4px 0 rgba(16, 29, 48, 0.2);
35
- border-radius: 0.25rem;
35
+ border-radius: var(--cat-border-radius-m, 0.25rem);
36
36
  z-index: 100;
37
37
  }
@@ -1,6 +1,7 @@
1
1
  import { autoUpdate, computePosition, flip, offset } from '@floating-ui/dom';
2
2
  import { Component, Event, h, Host, Listen, Method, Prop } from '@stencil/core';
3
3
  import * as focusTrap from 'focus-trap';
4
+ import log from 'loglevel';
4
5
  import { tabbable } from 'tabbable';
5
6
  import firstTabbable from '../../utils/first-tabbable';
6
7
  let nextUniqueId = 0;
@@ -27,14 +28,22 @@ export class CatMenu {
27
28
  this.hide();
28
29
  }
29
30
  componentDidLoad() {
30
- var _a, _b, _c, _d, _e;
31
+ var _a, _b, _c, _d, _e, _f, _g;
32
+ let trigger = (_b = (_a = this.triggerSlot) === null || _a === void 0 ? void 0 : _a.querySelector('[data-trigger]')) !== null && _b !== void 0 ? _b : undefined;
33
+ if (!trigger) {
34
+ trigger = firstTabbable(this.triggerSlot);
35
+ }
36
+ if (!trigger) {
37
+ log.error('Cannot find tabbable element. Use [data-trigger] to set the trigger.');
38
+ return;
39
+ }
31
40
  this.trigger = firstTabbable(this.triggerSlot);
32
- (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-haspopup', 'true');
33
- (_b = this.trigger) === null || _b === void 0 ? void 0 : _b.setAttribute('aria-expanded', 'false');
34
- (_c = this.trigger) === null || _c === void 0 ? void 0 : _c.setAttribute('aria-controls', this.contentId);
35
- (_d = this.content) === null || _d === void 0 ? void 0 : _d.setAttribute('id', this.contentId);
41
+ (_c = this.trigger) === null || _c === void 0 ? void 0 : _c.setAttribute('aria-haspopup', 'true');
42
+ (_d = this.trigger) === null || _d === void 0 ? void 0 : _d.setAttribute('aria-expanded', 'false');
43
+ (_e = this.trigger) === null || _e === void 0 ? void 0 : _e.setAttribute('aria-controls', this.contentId);
44
+ (_f = this.content) === null || _f === void 0 ? void 0 : _f.setAttribute('id', this.contentId);
36
45
  if (this.trigger && this.content) {
37
- (_e = this.trigger) === null || _e === void 0 ? void 0 : _e.addEventListener('click', () => this.show());
46
+ (_g = this.trigger) === null || _g === void 0 ? void 0 : _g.addEventListener('click', () => this.show());
38
47
  autoUpdate(this.trigger, this.content, () => this.update());
39
48
  }
40
49
  this.keyListener = event => {
@@ -1 +1 @@
1
- {"version":3,"file":"cat-menu.js","sourceRoot":"","sources":["../../../src/components/cat-menu/cat-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { autoUpdate, computePosition, flip, offset, Placement } from '@floating-ui/dom';\nimport { Component, Event, EventEmitter, h, Host, Listen, Method, Prop } from '@stencil/core';\nimport * as focusTrap from 'focus-trap';\nimport { FocusableElement, tabbable } from 'tabbable';\nimport firstTabbable from '../../utils/first-tabbable';\n\nlet nextUniqueId = 0;\n\n@Component({\n tag: 'cat-menu',\n styleUrl: 'cat-menu.scss',\n shadow: true\n})\nexport class CatMenu {\n private static readonly OFFSET = 4;\n private readonly id = nextUniqueId++;\n private triggerSlot?: Element;\n private trigger?: FocusableElement;\n private content?: HTMLElement;\n private trap?: focusTrap.FocusTrap;\n private keyListener?: (event: KeyboardEvent) => void;\n\n /**\n * The placement of the menu.\n */\n @Prop() placement: Placement = 'bottom-start';\n\n /**\n * Emitted when the menu is opened.\n */\n @Event() catOpen!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the menu is closed.\n */\n @Event() catClose!: EventEmitter<FocusEvent>;\n\n @Listen('catClick')\n clickHandler(event: CustomEvent<MouseEvent>) {\n // hide menu on button click\n if (this.content && event.composedPath().includes(this.content)) {\n this.close();\n }\n }\n\n /**\n * Closes the menu.\n */\n @Method()\n async close(): Promise<void> {\n this.trap?.deactivate();\n this.hide();\n }\n\n componentDidLoad(): void {\n this.trigger = firstTabbable(this.triggerSlot);\n this.trigger?.setAttribute('aria-haspopup', 'true');\n this.trigger?.setAttribute('aria-expanded', 'false');\n this.trigger?.setAttribute('aria-controls', this.contentId);\n this.content?.setAttribute('id', this.contentId);\n if (this.trigger && this.content) {\n this.trigger?.addEventListener('click', () => this.show());\n autoUpdate(this.trigger, this.content, () => this.update());\n }\n\n this.keyListener = event => {\n if (this.content && ['ArrowDown', 'ArrowUp'].includes(event.key)) {\n const targetElements = tabbable(this.content, { includeContainer: false, getShadowRoot: true });\n const activeElement = firstTabbable(document.activeElement);\n const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;\n const activeOff = event.key === 'ArrowDown' ? 1 : -1;\n const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;\n targetElements[targetIdx].focus();\n event.preventDefault();\n }\n };\n document.addEventListener('keydown', this.keyListener);\n }\n\n disconnectedCallback(): void {\n if (this.keyListener) {\n document.removeEventListener('keydown', this.keyListener);\n }\n }\n\n render() {\n return (\n <Host>\n <slot name=\"trigger\" ref={el => (this.triggerSlot = el)}></slot>\n <div class=\"content\" ref={el => (this.content = el)}>\n <slot name=\"content\"></slot>\n </div>\n </Host>\n );\n }\n\n private get contentId() {\n return `cat-menu-${this.id}`;\n }\n\n private show() {\n if (this.content) {\n this.content.style.display = 'block';\n this.trigger?.setAttribute('aria-expanded', 'true');\n this.catOpen.emit();\n this.trap = this.trap\n ? this.trap.updateContainerElements(this.content)\n : focusTrap.createFocusTrap(this.content, {\n tabbableOptions: {\n getShadowRoot: true\n },\n allowOutsideClick: true,\n clickOutsideDeactivates: event => !this.content || !event.composedPath().includes(this.content),\n onPostDeactivate: () => this.hide()\n });\n this.trap.activate();\n }\n }\n\n private hide() {\n if (this.content) {\n this.content.style.display = '';\n this.trigger?.setAttribute('aria-expanded', 'false');\n this.catClose.emit();\n }\n }\n\n private update() {\n if (this.trigger && this.content) {\n computePosition(this.trigger, this.content, {\n placement: this.placement,\n middleware: [offset(CatMenu.OFFSET), flip()]\n }).then(({ x, y }) => {\n if (this.content) {\n Object.assign(this.content.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n }\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"cat-menu.js","sourceRoot":"","sources":["../../../src/components/cat-menu/cat-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { autoUpdate, computePosition, flip, offset, Placement } from '@floating-ui/dom';\nimport { Component, Event, EventEmitter, h, Host, Listen, Method, Prop } from '@stencil/core';\nimport * as focusTrap from 'focus-trap';\nimport log from 'loglevel';\nimport { FocusableElement, tabbable } from 'tabbable';\nimport firstTabbable from '../../utils/first-tabbable';\n\nlet nextUniqueId = 0;\n\n@Component({\n tag: 'cat-menu',\n styleUrl: 'cat-menu.scss',\n shadow: true\n})\nexport class CatMenu {\n private static readonly OFFSET = 4;\n private readonly id = nextUniqueId++;\n private triggerSlot?: Element;\n private trigger?: FocusableElement;\n private content?: HTMLElement;\n private trap?: focusTrap.FocusTrap;\n private keyListener?: (event: KeyboardEvent) => void;\n\n /**\n * The placement of the menu.\n */\n @Prop() placement: Placement = 'bottom-start';\n\n /**\n * Emitted when the menu is opened.\n */\n @Event() catOpen!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the menu is closed.\n */\n @Event() catClose!: EventEmitter<FocusEvent>;\n\n @Listen('catClick')\n clickHandler(event: CustomEvent<MouseEvent>) {\n // hide menu on button click\n if (this.content && event.composedPath().includes(this.content)) {\n this.close();\n }\n }\n\n /**\n * Closes the menu.\n */\n @Method()\n async close(): Promise<void> {\n this.trap?.deactivate();\n this.hide();\n }\n\n componentDidLoad(): void {\n let trigger: FocusableElement | undefined =\n this.triggerSlot?.querySelector<HTMLElement>('[data-trigger]') ?? undefined;\n if (!trigger) {\n trigger = firstTabbable(this.triggerSlot);\n }\n if (!trigger) {\n log.error('Cannot find tabbable element. Use [data-trigger] to set the trigger.');\n return;\n }\n this.trigger = firstTabbable(this.triggerSlot);\n this.trigger?.setAttribute('aria-haspopup', 'true');\n this.trigger?.setAttribute('aria-expanded', 'false');\n this.trigger?.setAttribute('aria-controls', this.contentId);\n this.content?.setAttribute('id', this.contentId);\n if (this.trigger && this.content) {\n this.trigger?.addEventListener('click', () => this.show());\n autoUpdate(this.trigger, this.content, () => this.update());\n }\n\n this.keyListener = event => {\n if (this.content && ['ArrowDown', 'ArrowUp'].includes(event.key)) {\n const targetElements = tabbable(this.content, { includeContainer: false, getShadowRoot: true });\n const activeElement = firstTabbable(document.activeElement);\n const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;\n const activeOff = event.key === 'ArrowDown' ? 1 : -1;\n const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;\n targetElements[targetIdx].focus();\n event.preventDefault();\n }\n };\n document.addEventListener('keydown', this.keyListener);\n }\n\n disconnectedCallback(): void {\n if (this.keyListener) {\n document.removeEventListener('keydown', this.keyListener);\n }\n }\n\n render() {\n return (\n <Host>\n <slot name=\"trigger\" ref={el => (this.triggerSlot = el)}></slot>\n <div class=\"content\" ref={el => (this.content = el)}>\n <slot name=\"content\"></slot>\n </div>\n </Host>\n );\n }\n\n private get contentId() {\n return `cat-menu-${this.id}`;\n }\n\n private show() {\n if (this.content) {\n this.content.style.display = 'block';\n this.trigger?.setAttribute('aria-expanded', 'true');\n this.catOpen.emit();\n this.trap = this.trap\n ? this.trap.updateContainerElements(this.content)\n : focusTrap.createFocusTrap(this.content, {\n tabbableOptions: {\n getShadowRoot: true\n },\n allowOutsideClick: true,\n clickOutsideDeactivates: event => !this.content || !event.composedPath().includes(this.content),\n onPostDeactivate: () => this.hide()\n });\n this.trap.activate();\n }\n }\n\n private hide() {\n if (this.content) {\n this.content.style.display = '';\n this.trigger?.setAttribute('aria-expanded', 'false');\n this.catClose.emit();\n }\n }\n\n private update() {\n if (this.trigger && this.content) {\n computePosition(this.trigger, this.content, {\n placement: this.placement,\n middleware: [offset(CatMenu.OFFSET), flip()]\n }).then(({ x, y }) => {\n if (this.content) {\n Object.assign(this.content.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n }\n });\n }\n }\n}\n"]}
@@ -17,7 +17,7 @@
17
17
  right: 0;
18
18
  bottom: 0;
19
19
  left: 0;
20
- background-color: rgba(0, 0, 0, 0.6);
20
+ background-color: rgb(rgb(var(--cat-bg-backdrop, 0, 0, 0)), var(--cat-opacity-backdrop, 0.6));
21
21
  z-index: 2;
22
22
  display: flex;
23
23
  }
@@ -30,7 +30,7 @@
30
30
  z-index: 2;
31
31
  position: relative;
32
32
  background-color: white;
33
- border-radius: 0.5rem;
33
+ border-radius: var(--cat-border-radius-l, 0.5rem);
34
34
  max-width: 100%;
35
35
  padding: 32px;
36
36
  }
@@ -17,7 +17,7 @@
17
17
  }
18
18
 
19
19
  :host-context(.cat-error) .hint-section {
20
- color: #d9340d;
20
+ color: rgb(var(--cat-danger-text, 217, 52, 13));
21
21
  }
22
22
 
23
23
  :host {
@@ -68,7 +68,7 @@ input {
68
68
  height: 1.25rem;
69
69
  appearance: none;
70
70
  background-color: white;
71
- border: 1px solid #d7dbe0;
71
+ border: 1px solid rgb(var(--cat-border-color-focus, 215, 219, 224));
72
72
  border-radius: 10rem;
73
73
  cursor: inherit;
74
74
  }
@@ -84,10 +84,10 @@ input:focus-visible {
84
84
  }
85
85
 
86
86
  :host(.cat-error) input {
87
- border-color: #d9340d;
87
+ border-color: rgb(var(--cat-danger-bg, 217, 52, 13));
88
88
  }
89
89
  :host(.cat-error) .circle {
90
- background-color: #d9340d;
90
+ background-color: rgb(var(--cat-danger-bg, 217, 52, 13));
91
91
  }
92
92
 
93
93
  .label {
@@ -113,8 +113,8 @@ input:focus-visible {
113
113
  background-color: #f8f8fb;
114
114
  }
115
115
  .is-disabled input:checked {
116
- border-color: #d7dbe0;
116
+ border-color: rgb(var(--cat-border-color-focus, 215, 219, 224));
117
117
  }
118
118
  .is-disabled .circle {
119
- background-color: #d7dbe0;
119
+ background-color: rgb(var(--cat-border-color-focus, 215, 219, 224));
120
120
  }
@@ -17,7 +17,7 @@
17
17
  }
18
18
 
19
19
  :host-context(.cat-error) .hint-section {
20
- color: #d9340d;
20
+ color: rgb(var(--cat-danger-text, 217, 52, 13));
21
21
  }
22
22
 
23
23
  :host {
@@ -59,23 +59,23 @@ label.hidden {
59
59
  display: flex;
60
60
  align-items: flex-start;
61
61
  background: white;
62
- border-radius: 0.25rem;
63
- box-shadow: 0 0 0 1px #d7dbe0;
62
+ border-radius: var(--cat-border-radius-m, 0.25rem);
63
+ box-shadow: 0 0 0 1px rgb(var(--cat-border-color-focus, 215, 219, 224));
64
64
  transition: box-shadow 0.13s linear;
65
65
  padding: 0.25rem;
66
66
  }
67
67
  .select-wrapper:not(.select-disabled):hover {
68
- box-shadow: 0 0 0 2px #d7dbe0;
68
+ box-shadow: 0 0 0 2px rgb(var(--cat-border-color-focus, 215, 219, 224));
69
69
  }
70
70
  .select-wrapper:not(.select-disabled):focus-within {
71
71
  outline: 2px solid rgb(var(--cat-border-color-focus, 0, 113, 255));
72
72
  }
73
73
 
74
74
  :host(.cat-error) .select-wrapper {
75
- box-shadow: 0 0 0 1px #d9340d;
75
+ box-shadow: 0 0 0 1px rgb(var(--cat-danger-bg, 217, 52, 13));
76
76
  }
77
77
  :host(.cat-error) .select-wrapper:not(.input-disabled):hover {
78
- box-shadow: 0 0 0 2px #d9340d;
78
+ box-shadow: 0 0 0 2px rgb(var(--cat-danger-bg, 217, 52, 13));
79
79
  }
80
80
 
81
81
  .select-disabled {
@@ -127,7 +127,7 @@ label.hidden {
127
127
  gap: 0.5rem;
128
128
  padding: 0.25rem 0.5rem;
129
129
  background: #f2f4f7;
130
- border-radius: 0.125rem;
130
+ border-radius: var(--cat-border-radius-s, 0.125rem);
131
131
  white-space: nowrap;
132
132
  min-width: 0;
133
133
  }
@@ -163,7 +163,7 @@ cat-spinner {
163
163
  display: none;
164
164
  overflow: auto;
165
165
  box-shadow: 0 1px 4px 0 rgba(16, 29, 48, 0.2);
166
- border-radius: 0.25rem;
166
+ border-radius: var(--cat-border-radius-m, 0.25rem);
167
167
  z-index: 100;
168
168
  }
169
169
 
@@ -212,7 +212,7 @@ cat-spinner {
212
212
  }
213
213
 
214
214
  .select-option:hover {
215
- background-color: rgba(105, 118, 135, 0.05);
215
+ background-color: rgba(var(--cat-secondary-bg, 105, 118, 135), 0.05);
216
216
  }
217
217
 
218
218
  .select-option-active {
@@ -36,7 +36,7 @@
36
36
 
37
37
  .skeleton {
38
38
  display: block;
39
- border-radius: 0.25rem;
39
+ border-radius: var(--cat-border-radius-m, 0.25rem);
40
40
  background: var(--background);
41
41
  }
42
42
 
@@ -6,7 +6,7 @@
6
6
  :host {
7
7
  display: flex;
8
8
  flex-direction: row;
9
- box-shadow: inset 0 -1px 0 0 #d7dbe0;
9
+ box-shadow: inset 0 -1px 0 0 rgb(var(--cat-border-color-focus, 215, 219, 224));
10
10
  }
11
11
 
12
12
  :host([hidden]) {
@@ -17,7 +17,7 @@
17
17
  }
18
18
 
19
19
  :host-context(.cat-error) .hint-section {
20
- color: #d9340d;
20
+ color: rgb(var(--cat-danger-text, 217, 52, 13));
21
21
  }
22
22
 
23
23
  :host {
@@ -63,9 +63,9 @@ textarea {
63
63
  min-height: 2.5rem;
64
64
  font: inherit;
65
65
  background: white;
66
- border-radius: 0.25rem;
66
+ border-radius: var(--cat-border-radius-m, 0.25rem);
67
67
  border: none;
68
- box-shadow: 0 0 0 1px #d7dbe0;
68
+ box-shadow: 0 0 0 1px rgb(var(--cat-border-color-focus, 215, 219, 224));
69
69
  transition: box-shadow 0.13s linear;
70
70
  }
71
71
  textarea:disabled {
@@ -75,7 +75,7 @@ textarea:disabled {
75
75
  resize: none;
76
76
  }
77
77
  textarea:hover:not(:disabled) {
78
- box-shadow: 0 0 0 2px #d7dbe0;
78
+ box-shadow: 0 0 0 2px rgb(var(--cat-border-color-focus, 215, 219, 224));
79
79
  }
80
80
  textarea:focus {
81
81
  outline: 2px solid rgb(var(--cat-border-color-focus, 0, 113, 255));