tyrell-components 1.0.0-RC11 → 1.0.0-RC13
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.
- package/README.md +1 -0
- package/css/tyrell-colors-static.css +316 -0
- package/css/tyrell-theme.css +1454 -0
- package/css/tyrell.css +112 -420
- package/dist/tyrell-colors-static.css +316 -0
- package/dist/tyrell-theme.css +1454 -0
- package/dist/tyrell.css +112 -420
- package/dist/tyrell.js +1 -1
- package/lib/base/ty-component.d.ts +7 -0
- package/lib/base/ty-component.d.ts.map +1 -1
- package/lib/base/ty-component.js +27 -0
- package/lib/base/ty-component.js.map +1 -1
- package/lib/components/button.d.ts +16 -1
- package/lib/components/button.d.ts.map +1 -1
- package/lib/components/button.js +34 -4
- package/lib/components/button.js.map +1 -1
- package/lib/components/calendar-month.d.ts +23 -0
- package/lib/components/calendar-month.d.ts.map +1 -1
- package/lib/components/calendar-month.js +168 -11
- package/lib/components/calendar-month.js.map +1 -1
- package/lib/components/calendar-navigation.d.ts +31 -5
- package/lib/components/calendar-navigation.d.ts.map +1 -1
- package/lib/components/calendar-navigation.js +71 -31
- package/lib/components/calendar-navigation.js.map +1 -1
- package/lib/components/calendar.d.ts +17 -2
- package/lib/components/calendar.d.ts.map +1 -1
- package/lib/components/calendar.js +83 -12
- package/lib/components/calendar.js.map +1 -1
- package/lib/components/checkbox.d.ts +14 -3
- package/lib/components/checkbox.d.ts.map +1 -1
- package/lib/components/checkbox.js +86 -57
- package/lib/components/checkbox.js.map +1 -1
- package/lib/components/copy.d.ts +14 -3
- package/lib/components/copy.d.ts.map +1 -1
- package/lib/components/copy.js +47 -25
- package/lib/components/copy.js.map +1 -1
- package/lib/components/date-picker.d.ts +26 -1
- package/lib/components/date-picker.d.ts.map +1 -1
- package/lib/components/date-picker.js +151 -32
- package/lib/components/date-picker.js.map +1 -1
- package/lib/components/input.d.ts +17 -2
- package/lib/components/input.d.ts.map +1 -1
- package/lib/components/input.js +104 -25
- package/lib/components/input.js.map +1 -1
- package/lib/components/modal.d.ts.map +1 -1
- package/lib/components/modal.js +28 -3
- package/lib/components/modal.js.map +1 -1
- package/lib/components/option.d.ts +0 -27
- package/lib/components/option.d.ts.map +1 -1
- package/lib/components/option.js +11 -102
- package/lib/components/option.js.map +1 -1
- package/lib/components/popup.d.ts.map +1 -1
- package/lib/components/popup.js +36 -2
- package/lib/components/popup.js.map +1 -1
- package/lib/components/radio.d.ts +6 -2
- package/lib/components/radio.d.ts.map +1 -1
- package/lib/components/radio.js +55 -13
- package/lib/components/radio.js.map +1 -1
- package/lib/components/scroll-container.d.ts +16 -0
- package/lib/components/scroll-container.d.ts.map +1 -1
- package/lib/components/scroll-container.js +105 -1
- package/lib/components/scroll-container.js.map +1 -1
- package/lib/components/select.d.ts +550 -0
- package/lib/components/select.d.ts.map +1 -0
- package/lib/components/select.js +2115 -0
- package/lib/components/select.js.map +1 -0
- package/lib/components/selected-tags.d.ts +93 -0
- package/lib/components/selected-tags.d.ts.map +1 -0
- package/lib/components/selected-tags.js +286 -0
- package/lib/components/selected-tags.js.map +1 -0
- package/lib/components/switch.d.ts +6 -3
- package/lib/components/switch.d.ts.map +1 -1
- package/lib/components/switch.js +54 -36
- package/lib/components/switch.js.map +1 -1
- package/lib/components/tabs.d.ts.map +1 -1
- package/lib/components/tabs.js +190 -25
- package/lib/components/tabs.js.map +1 -1
- package/lib/components/tag.d.ts +9 -1
- package/lib/components/tag.d.ts.map +1 -1
- package/lib/components/tag.js +41 -5
- package/lib/components/tag.js.map +1 -1
- package/lib/components/textarea.d.ts +3 -0
- package/lib/components/textarea.d.ts.map +1 -1
- package/lib/components/textarea.js +61 -6
- package/lib/components/textarea.js.map +1 -1
- package/lib/components/tooltip.d.ts +4 -2
- package/lib/components/tooltip.d.ts.map +1 -1
- package/lib/components/tooltip.js +109 -70
- package/lib/components/tooltip.js.map +1 -1
- package/lib/components/wizard.d.ts.map +1 -1
- package/lib/components/wizard.js +22 -3
- package/lib/components/wizard.js.map +1 -1
- package/lib/index.d.ts +3 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -2
- package/lib/index.js.map +1 -1
- package/lib/styles/button.d.ts +41 -6
- package/lib/styles/button.d.ts.map +1 -1
- package/lib/styles/button.js +294 -254
- package/lib/styles/button.js.map +1 -1
- package/lib/styles/calendar-month.d.ts +3 -1
- package/lib/styles/calendar-month.d.ts.map +1 -1
- package/lib/styles/calendar-month.js +100 -67
- package/lib/styles/calendar-month.js.map +1 -1
- package/lib/styles/calendar-navigation.d.ts +1 -1
- package/lib/styles/calendar-navigation.d.ts.map +1 -1
- package/lib/styles/calendar-navigation.js +20 -28
- package/lib/styles/calendar-navigation.js.map +1 -1
- package/lib/styles/checkbox.d.ts +7 -5
- package/lib/styles/checkbox.d.ts.map +1 -1
- package/lib/styles/checkbox.js +125 -8
- package/lib/styles/checkbox.js.map +1 -1
- package/lib/styles/copy.d.ts +3 -1
- package/lib/styles/copy.d.ts.map +1 -1
- package/lib/styles/copy.js +61 -6
- package/lib/styles/copy.js.map +1 -1
- package/lib/styles/custom-scrollbar.d.ts +1 -1
- package/lib/styles/custom-scrollbar.d.ts.map +1 -1
- package/lib/styles/custom-scrollbar.js +2 -2
- package/lib/styles/date-picker.d.ts +3 -1
- package/lib/styles/date-picker.d.ts.map +1 -1
- package/lib/styles/date-picker.js +65 -103
- package/lib/styles/date-picker.js.map +1 -1
- package/lib/styles/file-upload.d.ts +1 -1
- package/lib/styles/file-upload.d.ts.map +1 -1
- package/lib/styles/file-upload.js +3 -3
- package/lib/styles/input.d.ts +3 -1
- package/lib/styles/input.d.ts.map +1 -1
- package/lib/styles/input.js +93 -419
- package/lib/styles/input.js.map +1 -1
- package/lib/styles/multiselect.d.ts +3 -1
- package/lib/styles/multiselect.d.ts.map +1 -1
- package/lib/styles/multiselect.js +26 -2
- package/lib/styles/multiselect.js.map +1 -1
- package/lib/styles/option.d.ts +1 -1
- package/lib/styles/option.d.ts.map +1 -1
- package/lib/styles/option.js +20 -47
- package/lib/styles/option.js.map +1 -1
- package/lib/styles/radio.d.ts +3 -1
- package/lib/styles/radio.d.ts.map +1 -1
- package/lib/styles/radio.js +24 -21
- package/lib/styles/radio.js.map +1 -1
- package/lib/styles/scroll-container.d.ts +1 -1
- package/lib/styles/scroll-container.d.ts.map +1 -1
- package/lib/styles/scroll-container.js +6 -0
- package/lib/styles/scroll-container.js.map +1 -1
- package/lib/styles/select-base.d.ts +9 -0
- package/lib/styles/select-base.d.ts.map +1 -0
- package/lib/styles/select-base.js +973 -0
- package/lib/styles/select-base.js.map +1 -0
- package/lib/styles/select.d.ts +12 -0
- package/lib/styles/select.d.ts.map +1 -0
- package/lib/styles/select.js +308 -0
- package/lib/styles/select.js.map +1 -0
- package/lib/styles/step.d.ts +1 -1
- package/lib/styles/step.d.ts.map +1 -1
- package/lib/styles/switch.d.ts +3 -1
- package/lib/styles/switch.d.ts.map +1 -1
- package/lib/styles/switch.js +25 -10
- package/lib/styles/switch.js.map +1 -1
- package/lib/styles/tab.d.ts +1 -1
- package/lib/styles/tab.d.ts.map +1 -1
- package/lib/styles/tabs.d.ts +1 -1
- package/lib/styles/tabs.d.ts.map +1 -1
- package/lib/styles/tabs.js +71 -1
- package/lib/styles/tabs.js.map +1 -1
- package/lib/styles/tag.d.ts +1 -1
- package/lib/styles/tag.d.ts.map +1 -1
- package/lib/styles/tag.js +40 -141
- package/lib/styles/tag.js.map +1 -1
- package/lib/styles/textarea.d.ts +1 -1
- package/lib/styles/textarea.d.ts.map +1 -1
- package/lib/styles/textarea.js +71 -37
- package/lib/styles/textarea.js.map +1 -1
- package/lib/styles/tooltip.d.ts +4 -2
- package/lib/styles/tooltip.d.ts.map +1 -1
- package/lib/styles/tooltip.js +4 -119
- package/lib/styles/tooltip.js.map +1 -1
- package/lib/styles/wizard.d.ts +1 -1
- package/lib/styles/wizard.d.ts.map +1 -1
- package/lib/styles/wizard.js +18 -6
- package/lib/styles/wizard.js.map +1 -1
- package/lib/types/common.d.ts +2 -1
- package/lib/types/common.d.ts.map +1 -1
- package/lib/types/common.js +15 -1
- package/lib/types/common.js.map +1 -1
- package/lib/utils/calendar-utils.d.ts +0 -48
- package/lib/utils/calendar-utils.d.ts.map +1 -1
- package/lib/utils/calendar-utils.js +0 -69
- package/lib/utils/calendar-utils.js.map +1 -1
- package/lib/utils/flavor-sheet.d.ts +32 -0
- package/lib/utils/flavor-sheet.d.ts.map +1 -0
- package/lib/utils/flavor-sheet.js +40 -0
- package/lib/utils/flavor-sheet.js.map +1 -0
- package/lib/utils/icon-registry.d.ts +0 -13
- package/lib/utils/icon-registry.d.ts.map +1 -1
- package/lib/utils/icon-registry.js +0 -35
- package/lib/utils/icon-registry.js.map +1 -1
- package/lib/utils/icons.d.ts +10 -0
- package/lib/utils/icons.d.ts.map +1 -0
- package/lib/utils/icons.js +10 -0
- package/lib/utils/icons.js.map +1 -0
- package/lib/utils/loader-registry.d.ts +2 -2
- package/lib/utils/loader-registry.js +2 -2
- package/lib/utils/locale.d.ts +0 -57
- package/lib/utils/locale.d.ts.map +1 -1
- package/lib/utils/locale.js +0 -89
- package/lib/utils/locale.js.map +1 -1
- package/lib/utils/number-format.d.ts +0 -21
- package/lib/utils/number-format.d.ts.map +1 -1
- package/lib/utils/number-format.js +0 -27
- package/lib/utils/number-format.js.map +1 -1
- package/lib/utils/positioning.d.ts +29 -22
- package/lib/utils/positioning.d.ts.map +1 -1
- package/lib/utils/positioning.js +23 -87
- package/lib/utils/positioning.js.map +1 -1
- package/lib/utils/scroll-lock.d.ts.map +1 -1
- package/lib/utils/scroll-lock.js +0 -1
- package/lib/utils/scroll-lock.js.map +1 -1
- package/lib/utils/styles.d.ts +0 -5
- package/lib/utils/styles.d.ts.map +1 -1
- package/lib/utils/styles.js +0 -7
- package/lib/utils/styles.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +22 -11
- package/css/tyrell-brand.css +0 -913
- package/dist/tyrell-brand.css +0 -913
- package/lib/components/dropdown.d.ts +0 -424
- package/lib/components/dropdown.d.ts.map +0 -1
- package/lib/components/dropdown.js +0 -1640
- package/lib/components/dropdown.js.map +0 -1
- package/lib/components/multiselect.d.ts +0 -397
- package/lib/components/multiselect.d.ts.map +0 -1
- package/lib/components/multiselect.js +0 -1595
- package/lib/components/multiselect.js.map +0 -1
- package/lib/styles/dropdown.d.ts +0 -12
- package/lib/styles/dropdown.d.ts.map +0 -1
- package/lib/styles/dropdown.js +0 -1081
- package/lib/styles/dropdown.js.map +0 -1
package/lib/styles/tabs.js
CHANGED
|
@@ -107,7 +107,7 @@ export const tabsStyles = `
|
|
|
107
107
|
cursor: pointer;
|
|
108
108
|
font: inherit;
|
|
109
109
|
color: var(--ty-text-soft);
|
|
110
|
-
transition: color 200ms, background-color 200ms;
|
|
110
|
+
transition: var(--ty-local-transition, color 200ms, background-color 200ms);
|
|
111
111
|
white-space: nowrap;
|
|
112
112
|
display: inline-flex;
|
|
113
113
|
align-items: center;
|
|
@@ -136,6 +136,76 @@ export const tabsStyles = `
|
|
|
136
136
|
outline-offset: -2px;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
+
.tab-button.overflow-hidden {
|
|
140
|
+
display: none;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* ===================================== */
|
|
144
|
+
/* Overflow "more" trigger + menu */
|
|
145
|
+
/* ===================================== */
|
|
146
|
+
|
|
147
|
+
.tab-overflow-trigger {
|
|
148
|
+
flex-shrink: 0;
|
|
149
|
+
width: 40px;
|
|
150
|
+
min-width: 40px;
|
|
151
|
+
padding: 6px;
|
|
152
|
+
border: none;
|
|
153
|
+
background: transparent;
|
|
154
|
+
cursor: pointer;
|
|
155
|
+
color: var(--ty-text-soft);
|
|
156
|
+
font-size: 18px;
|
|
157
|
+
line-height: 1;
|
|
158
|
+
display: inline-flex;
|
|
159
|
+
align-items: center;
|
|
160
|
+
justify-content: center;
|
|
161
|
+
position: relative;
|
|
162
|
+
z-index: 10;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.tab-overflow-trigger:hover {
|
|
166
|
+
color: var(--ty-text-strong);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.tab-overflow-trigger:focus-visible {
|
|
170
|
+
outline: 2px solid var(--ty-color-primary);
|
|
171
|
+
outline-offset: -2px;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.tab-overflow-menu {
|
|
175
|
+
display: flex;
|
|
176
|
+
flex-direction: column;
|
|
177
|
+
min-width: 160px;
|
|
178
|
+
max-height: 300px;
|
|
179
|
+
overflow-y: auto;
|
|
180
|
+
padding: var(--ty-spacing-2, 4px);
|
|
181
|
+
background: var(--ty-surface-floating);
|
|
182
|
+
border-radius: var(--ty-radius-md);
|
|
183
|
+
box-shadow: var(--ty-shadow-md, 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.tab-overflow-item {
|
|
187
|
+
padding: var(--ty-spacing-2, 6px) var(--ty-spacing-3, 12px);
|
|
188
|
+
border: none;
|
|
189
|
+
background: transparent;
|
|
190
|
+
text-align: left;
|
|
191
|
+
cursor: pointer;
|
|
192
|
+
border-radius: var(--ty-radius-md);
|
|
193
|
+
color: var(--ty-text);
|
|
194
|
+
font: inherit;
|
|
195
|
+
font-size: var(--ty-font-sm);
|
|
196
|
+
white-space: nowrap;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.tab-overflow-item:hover {
|
|
200
|
+
background: var(--ty-bg-neutral-soft);
|
|
201
|
+
color: var(--ty-text-strong);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.tab-overflow-item[disabled] {
|
|
205
|
+
opacity: 0.5;
|
|
206
|
+
cursor: not-allowed;
|
|
207
|
+
}
|
|
208
|
+
|
|
139
209
|
/* ===================================== */
|
|
140
210
|
/* Panels Viewport */
|
|
141
211
|
/* Expose as CSS Part for panels container styling */
|
package/lib/styles/tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/styles/tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../src/styles/tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiPzB,CAAC"}
|
package/lib/styles/tag.d.ts
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Tag Component Styles
|
|
3
3
|
* PORTED FROM: clj/ty/components/tag.css
|
|
4
4
|
*/
|
|
5
|
-
export declare const tagStyles = "\n/* Tag Component Styles using centralized ty.variables.css */\n\n/* Host element */\n\n/* Hidden attribute support */\n:host([hidden]) {\n display: none !important;\n}\n\n/* Main container */\n.tag-container {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--ty-spacing-1);\n /* Default pill shape - can be overridden */\n border-radius: var(--ty-radius-full);\n font-weight: var(--ty-font-medium);\n text-align: center;\n white-space: nowrap;\n user-select: none;\n box-sizing: border-box;\n\n /* Default MD size \u2014 anchor at 28px, even +4 steps for other sizes */\n padding: 0 0.625rem; /* 0 10px */\n font-size: var(--ty-font-xs); /* 14px */\n line-height: var(--ty-leading-xs); /* 21px */\n letter-spacing: var(--ty-tracking-xs); /* -0.013em */\n min-height: 28px;\n\n /* Transitions using centralized values */\n transition: var(--ty-transition-all);\n\n /* Colors via custom properties \u2014 override on :host for full control */\n background: var(--tag-bg, transparent);\n color: var(--tag-color, var(--ty-text));\n border: 1px solid;\n border-color: var(--tag-border-color, var(--ty-border));\n}\n\n/* Non-pill variant - rectangular with rounded corners */\n:host([pill=\"false\"]) .tag-container,\n:host([not-pill]) .tag-container {\n border-radius: var(--ty-radius-md);\n /* 6px instead of full pill */\n}\n\n/* Tags with value attribute but NOT selected should be clickable */\n:host([value]:not([selected])) .tag-container:not([aria-disabled=\"true\"]) {\n cursor: pointer;\n}\n\n:host([selected]) .tag-container:not([aria-disabled=\"true\"]) {\n cursor: initial;\n}\n\n.tag-container[tabindex]:not([aria-disabled=\"true\"]):hover {\n background: var(--ty-bg-neutral-soft);\n transform: translateY(-1px);\n box-shadow: var(--ty-shadow-sm);\n}\n\n.tag-container[tabindex]:not([aria-disabled=\"true\"]):active {\n transform: translateY(0);\n box-shadow: var(--ty-shadow-sm);\n}\n\n.tag-container[tabindex]:focus {\n outline: none;\n}\n\n/* Disabled state */\n.tag-container[aria-disabled=\"true\"] {\n opacity: 0.6;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* Slot containers */\n.tag-start,\n.tag-content,\n.tag-end {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.tag-content {\n flex: 1;\n min-width: 0;\n}\n\n/* Dismiss button */\n.tag-dismiss {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n background: none;\n border: none;\n color: currentColor;\n cursor: pointer;\n border-radius: var(--ty-radius-full);\n transition: var(--ty-transition-all);\n opacity: 0.7;\n flex-shrink: 0;\n /* Default MD dismiss button size */\n width: var(--ty-spacing-4);\n /* 16px */\n height: var(--ty-spacing-4);\n}\n\n.tag-dismiss:hover {\n opacity: 1;\n background: rgba(0, 0, 0, 0.1);\n}\n\n.tag-dismiss svg {\n width: 100%;\n height: 100%;\n}\n\n/* Size variants - override defaults */\n:host([size=\"xs\"]) .tag-container {\n padding: 0 0.375rem; /* 0 6px */\n font-size: var(--ty-font-xs); /* 12px */\n line-height: var(--ty-leading-xs);\n letter-spacing: var(--ty-tracking-xs);\n min-height: 20px;\n}\n\n:host([size=\"xs\"]) .tag-dismiss {\n width: var(--ty-spacing-3);\n height: var(--ty-spacing-3);\n margin-left: var(--ty-spacing-2);\n}\n\n:host([size=\"sm\"]) .tag-container {\n padding: 0 var(--ty-spacing-2); /* 0 8px */\n font-size: var(--ty-font-xs); /* 12px */\n line-height: var(--ty-leading-xs);\n letter-spacing: var(--ty-tracking-xs);\n min-height: 24px;\n}\n\n:host([size=\"sm\"]) .tag-dismiss {\n width: var(--ty-spacing-3);\n height: var(--ty-spacing-3);\n margin-left: var(--ty-spacing-2);\n}\n\n/* MD is now the default - no need for explicit [size=\"md\"] selector */\n/* All default styles above apply to MD size (min-height: 24px) */\n\n:host([size=\"lg\"]) .tag-container {\n padding: 0 var(--ty-spacing-3); /* 0 12px */\n font-size: var(--ty-font-sm); /* 14px */\n line-height: var(--ty-leading-sm); /* 21px */\n letter-spacing: var(--ty-tracking-sm); /* -0.013em */\n min-height: 32px;\n}\n\n:host([size=\"lg\"]) .tag-dismiss {\n width: var(--ty-spacing-5);\n height: var(--ty-spacing-5);\n margin-left: var(--ty-spacing-4);\n}\n\n:host([size=\"xl\"]) .tag-container {\n padding: 0 0.875rem; /* 0 14px */\n font-size: var(--ty-font-sm); /* 14px */\n line-height: var(--ty-leading-sm); /* 21px */\n letter-spacing: var(--ty-tracking-sm); /* -0.013em */\n min-height: 36px;\n}\n\n:host([size=\"xl\"]) .tag-dismiss {\n width: var(--ty-spacing-5);\n height: var(--ty-spacing-5);\n margin-left: var(--ty-spacing-4);\n}\n\n/* ===== FLAVOR VARIANTS =====\n Each flavor sets --tag-bg / --tag-color / --tag-border-color on :host.\n Append '+' to flavor for a stronger shade (mild background, strong color),\n or '-' for a softer shade (soft background, base color). */\n\n/* ----- PRIMARY ----- */\n:host([flavor=\"primary\"]) {\n --tag-bg: var(--ty-bg-primary);\n --tag-color: var(--ty-color-primary-strong);\n --tag-border-color: var(--ty-border-primary);\n}\n:host([flavor=\"primary+\"]) {\n --tag-bg: var(--ty-bg-primary-bold);\n --tag-color: var(--ty-color-primary-strong);\n --tag-border-color: var(--ty-color-primary);\n}\n:host([flavor=\"primary-\"]) {\n --tag-bg: var(--ty-bg-primary-soft);\n --tag-color: var(--ty-color-primary);\n --tag-border-color: var(--ty-border-primary);\n}\n:host([flavor=\"primary\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"primary+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"primary-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-primary-bold);\n}\n:host([flavor=\"primary\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"primary+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"primary-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-primary-faint);\n}\n\n/* ----- SECONDARY ----- */\n:host([flavor=\"secondary\"]) {\n --tag-bg: var(--ty-bg-secondary);\n --tag-color: var(--ty-color-secondary-strong);\n --tag-border-color: var(--ty-border-secondary);\n}\n:host([flavor=\"secondary+\"]) {\n --tag-bg: var(--ty-bg-secondary-bold);\n --tag-color: var(--ty-color-secondary-strong);\n --tag-border-color: var(--ty-color-secondary);\n}\n:host([flavor=\"secondary-\"]) {\n --tag-bg: var(--ty-bg-secondary-soft);\n --tag-color: var(--ty-color-secondary);\n --tag-border-color: var(--ty-border-secondary);\n}\n:host([flavor=\"secondary\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"secondary+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"secondary-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-secondary-bold);\n}\n:host([flavor=\"secondary\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"secondary+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"secondary-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-secondary-faint);\n}\n\n/* ----- SUCCESS ----- */\n:host([flavor=\"success\"]) {\n --tag-bg: var(--ty-bg-success);\n --tag-color: var(--ty-color-success-strong);\n --tag-border-color: var(--ty-border-success);\n}\n:host([flavor=\"success+\"]) {\n --tag-bg: var(--ty-bg-success-bold);\n --tag-color: var(--ty-color-success-strong);\n --tag-border-color: var(--ty-color-success);\n}\n:host([flavor=\"success-\"]) {\n --tag-bg: var(--ty-bg-success-soft);\n --tag-color: var(--ty-color-success);\n --tag-border-color: var(--ty-border-success);\n}\n:host([flavor=\"success\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"success+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"success-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-success-bold);\n}\n:host([flavor=\"success\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"success+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"success-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-success-faint);\n}\n\n/* ----- DANGER ----- */\n:host([flavor=\"danger\"]) {\n --tag-bg: var(--ty-bg-danger);\n --tag-color: var(--ty-color-danger-strong);\n --tag-border-color: var(--ty-border-danger);\n}\n:host([flavor=\"danger+\"]) {\n --tag-bg: var(--ty-bg-danger-bold);\n --tag-color: var(--ty-color-danger-strong);\n --tag-border-color: var(--ty-color-danger);\n}\n:host([flavor=\"danger-\"]) {\n --tag-bg: var(--ty-bg-danger-soft);\n --tag-color: var(--ty-color-danger);\n --tag-border-color: var(--ty-border-danger);\n}\n:host([flavor=\"danger\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"danger+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"danger-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-danger-bold);\n}\n:host([flavor=\"danger\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"danger+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"danger-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-danger-faint);\n}\n\n/* ----- WARNING ----- */\n:host([flavor=\"warning\"]) {\n --tag-bg: var(--ty-bg-warning);\n --tag-color: var(--ty-color-warning-strong);\n --tag-border-color: var(--ty-border-warning);\n}\n:host([flavor=\"warning+\"]) {\n --tag-bg: var(--ty-bg-warning-bold);\n --tag-color: var(--ty-color-warning-strong);\n --tag-border-color: var(--ty-color-warning);\n}\n:host([flavor=\"warning-\"]) {\n --tag-bg: var(--ty-bg-warning-soft);\n --tag-color: var(--ty-color-warning);\n --tag-border-color: var(--ty-border-warning);\n}\n:host([flavor=\"warning\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"warning+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"warning-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-warning-bold);\n}\n:host([flavor=\"warning\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"warning+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"warning-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-warning-faint);\n}\n\n:host([flavor=\"info\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-color-info-faint);\n}\n\n/* ----- NEUTRAL ----- */\n:host([flavor=\"neutral\"]) {\n --tag-color: var(--ty-text-bold);\n --tag-bg: var(--ty-bg-neutral-soft);\n --tag-border-color: var(--ty-border-bold);\n}\n\n:host([flavor=\"neutral+\"]) {\n --tag-bg: var(--ty-bg-neutral-bold);\n --tag-color: var(--ty-text-bold);\n --tag-border-color: var(--ty-border-strong);\n}\n:host([flavor=\"neutral-\"]) {\n --tag-bg: var(--ty-bg-neutral-soft);\n --tag-color: var(--ty-text-soft);\n --tag-border-color: var(--ty-border);\n}\n:host([flavor=\"neutral\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"neutral+\"]) .tag-container[tabindex]:hover,\n:host([flavor=\"neutral-\"]) .tag-container[tabindex]:hover {\n background: var(--ty-bg-neutral-soft);\n}\n:host([flavor=\"neutral\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"neutral+\"]) .tag-container[tabindex]:focus,\n:host([flavor=\"neutral-\"]) .tag-container[tabindex]:focus {\n box-shadow: 0 0 0 3px var(--ty-border-soft);\n}\n\n/* Slotted content styling */\n.tag-start ::slotted(*),\n.tag-content ::slotted(*),\n.tag-end ::slotted(*) {\n display: flex;\n align-items: center;\n}\n\n/* Icon sizing for slotted icons */\n.tag-start ::slotted(ty-icon),\n.tag-end ::slotted(ty-icon) {\n width: 1em;\n height: 1em;\n flex-shrink: 0;\n}\n\n/* Count/badge styling using centralized spacing */\n.tag-end ::slotted(.count) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--ty-spacing-6);\n /* 24px */\n height: var(--ty-spacing-5);\n /* 20px */\n padding: 0 var(--ty-spacing-2);\n /* 0 8px */\n background: rgba(0, 0, 0, 0.1);\n border-radius: var(--ty-radius-full);\n font-size: var(--ty-font-xs);\n font-weight: var(--ty-font-semibold);\n line-height: var(--ty-line-height-none);\n flex-shrink: 0;\n}\n\n/* Special handling for long text content */\n.tag-content {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n:host([data-type=\"user\"]) .tag-container {\n min-width: var(--ty-spacing-20);\n /* 80px for user tags */\n}\n\n/* Dark mode is handled automatically by the centralized variables */\n";
|
|
5
|
+
export declare const tagStyles: string;
|
|
6
6
|
//# sourceMappingURL=tag.d.ts.map
|
package/lib/styles/tag.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/styles/tag.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/styles/tag.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqCH,eAAO,MAAM,SAAS,QA8QrB,CAAC"}
|
package/lib/styles/tag.js
CHANGED
|
@@ -2,6 +2,38 @@
|
|
|
2
2
|
* Tag Component Styles
|
|
3
3
|
* PORTED FROM: clj/ty/components/tag.css
|
|
4
4
|
*/
|
|
5
|
+
import { FLAVORS } from '../types/common.js';
|
|
6
|
+
/* Neutral maps to text/border tokens instead of flavor tokens, so it is
|
|
7
|
+
written out by hand in the template below. */
|
|
8
|
+
const COLOR_FLAVORS = FLAVORS.filter((f) => f !== 'neutral');
|
|
9
|
+
const tagFlavor = (f) => `
|
|
10
|
+
/* ----- ${f.toUpperCase()} ----- */
|
|
11
|
+
:host([flavor="${f}"]) {
|
|
12
|
+
--tag-bg: var(--ty-bg-${f});
|
|
13
|
+
--tag-color: var(--ty-color-${f});
|
|
14
|
+
--tag-border-color: var(--ty-border-${f});
|
|
15
|
+
}
|
|
16
|
+
:host([flavor="${f}+"]) {
|
|
17
|
+
--tag-bg: var(--ty-bg-${f}-bold);
|
|
18
|
+
--tag-color: var(--ty-color-${f}-strong);
|
|
19
|
+
--tag-border-color: var(--ty-color-${f});
|
|
20
|
+
}
|
|
21
|
+
:host([flavor="${f}-"]) {
|
|
22
|
+
--tag-bg: var(--ty-bg-${f}-soft);
|
|
23
|
+
--tag-color: var(--ty-color-${f});
|
|
24
|
+
--tag-border-color: var(--ty-border-${f});
|
|
25
|
+
}
|
|
26
|
+
:host([flavor="${f}"]) .tag-container[tabindex]:hover,
|
|
27
|
+
:host([flavor="${f}+"]) .tag-container[tabindex]:hover,
|
|
28
|
+
:host([flavor="${f}-"]) .tag-container[tabindex]:hover {
|
|
29
|
+
background: var(--ty-bg-${f}-bold);
|
|
30
|
+
}
|
|
31
|
+
:host([flavor="${f}"]) .tag-container[tabindex]:focus,
|
|
32
|
+
:host([flavor="${f}+"]) .tag-container[tabindex]:focus,
|
|
33
|
+
:host([flavor="${f}-"]) .tag-container[tabindex]:focus {
|
|
34
|
+
box-shadow: 0 0 0 3px var(--ty-color-${f}-faint);
|
|
35
|
+
}
|
|
36
|
+
`;
|
|
5
37
|
export const tagStyles = `
|
|
6
38
|
/* Tag Component Styles using centralized ty.variables.css */
|
|
7
39
|
|
|
@@ -20,7 +52,10 @@ export const tagStyles = `
|
|
|
20
52
|
gap: var(--ty-spacing-1);
|
|
21
53
|
/* Default pill shape - can be overridden */
|
|
22
54
|
border-radius: var(--ty-radius-full);
|
|
23
|
-
|
|
55
|
+
/* Mode-flipped weight dial (tyrell.css): 440 light / 400 dark. Chips are
|
|
56
|
+
labels, not actions — they run lighter than buttons. Override with
|
|
57
|
+
--ty-weight-label at any scope. */
|
|
58
|
+
font-weight: var(--ty-weight-label, 440);
|
|
24
59
|
text-align: center;
|
|
25
60
|
white-space: nowrap;
|
|
26
61
|
user-select: none;
|
|
@@ -189,147 +224,11 @@ export const tagStyles = `
|
|
|
189
224
|
/* ===== FLAVOR VARIANTS =====
|
|
190
225
|
Each flavor sets --tag-bg / --tag-color / --tag-border-color on :host.
|
|
191
226
|
Append '+' to flavor for a stronger shade (mild background, strong color),
|
|
192
|
-
or '-' for a softer shade (soft background, base color).
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
:host([flavor="primary"]) {
|
|
196
|
-
--tag-bg: var(--ty-bg-primary);
|
|
197
|
-
--tag-color: var(--ty-color-primary-strong);
|
|
198
|
-
--tag-border-color: var(--ty-border-primary);
|
|
199
|
-
}
|
|
200
|
-
:host([flavor="primary+"]) {
|
|
201
|
-
--tag-bg: var(--ty-bg-primary-bold);
|
|
202
|
-
--tag-color: var(--ty-color-primary-strong);
|
|
203
|
-
--tag-border-color: var(--ty-color-primary);
|
|
204
|
-
}
|
|
205
|
-
:host([flavor="primary-"]) {
|
|
206
|
-
--tag-bg: var(--ty-bg-primary-soft);
|
|
207
|
-
--tag-color: var(--ty-color-primary);
|
|
208
|
-
--tag-border-color: var(--ty-border-primary);
|
|
209
|
-
}
|
|
210
|
-
:host([flavor="primary"]) .tag-container[tabindex]:hover,
|
|
211
|
-
:host([flavor="primary+"]) .tag-container[tabindex]:hover,
|
|
212
|
-
:host([flavor="primary-"]) .tag-container[tabindex]:hover {
|
|
213
|
-
background: var(--ty-bg-primary-bold);
|
|
214
|
-
}
|
|
215
|
-
:host([flavor="primary"]) .tag-container[tabindex]:focus,
|
|
216
|
-
:host([flavor="primary+"]) .tag-container[tabindex]:focus,
|
|
217
|
-
:host([flavor="primary-"]) .tag-container[tabindex]:focus {
|
|
218
|
-
box-shadow: 0 0 0 3px var(--ty-color-primary-faint);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/* ----- SECONDARY ----- */
|
|
222
|
-
:host([flavor="secondary"]) {
|
|
223
|
-
--tag-bg: var(--ty-bg-secondary);
|
|
224
|
-
--tag-color: var(--ty-color-secondary-strong);
|
|
225
|
-
--tag-border-color: var(--ty-border-secondary);
|
|
226
|
-
}
|
|
227
|
-
:host([flavor="secondary+"]) {
|
|
228
|
-
--tag-bg: var(--ty-bg-secondary-bold);
|
|
229
|
-
--tag-color: var(--ty-color-secondary-strong);
|
|
230
|
-
--tag-border-color: var(--ty-color-secondary);
|
|
231
|
-
}
|
|
232
|
-
:host([flavor="secondary-"]) {
|
|
233
|
-
--tag-bg: var(--ty-bg-secondary-soft);
|
|
234
|
-
--tag-color: var(--ty-color-secondary);
|
|
235
|
-
--tag-border-color: var(--ty-border-secondary);
|
|
236
|
-
}
|
|
237
|
-
:host([flavor="secondary"]) .tag-container[tabindex]:hover,
|
|
238
|
-
:host([flavor="secondary+"]) .tag-container[tabindex]:hover,
|
|
239
|
-
:host([flavor="secondary-"]) .tag-container[tabindex]:hover {
|
|
240
|
-
background: var(--ty-bg-secondary-bold);
|
|
241
|
-
}
|
|
242
|
-
:host([flavor="secondary"]) .tag-container[tabindex]:focus,
|
|
243
|
-
:host([flavor="secondary+"]) .tag-container[tabindex]:focus,
|
|
244
|
-
:host([flavor="secondary-"]) .tag-container[tabindex]:focus {
|
|
245
|
-
box-shadow: 0 0 0 3px var(--ty-color-secondary-faint);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/* ----- SUCCESS ----- */
|
|
249
|
-
:host([flavor="success"]) {
|
|
250
|
-
--tag-bg: var(--ty-bg-success);
|
|
251
|
-
--tag-color: var(--ty-color-success-strong);
|
|
252
|
-
--tag-border-color: var(--ty-border-success);
|
|
253
|
-
}
|
|
254
|
-
:host([flavor="success+"]) {
|
|
255
|
-
--tag-bg: var(--ty-bg-success-bold);
|
|
256
|
-
--tag-color: var(--ty-color-success-strong);
|
|
257
|
-
--tag-border-color: var(--ty-color-success);
|
|
258
|
-
}
|
|
259
|
-
:host([flavor="success-"]) {
|
|
260
|
-
--tag-bg: var(--ty-bg-success-soft);
|
|
261
|
-
--tag-color: var(--ty-color-success);
|
|
262
|
-
--tag-border-color: var(--ty-border-success);
|
|
263
|
-
}
|
|
264
|
-
:host([flavor="success"]) .tag-container[tabindex]:hover,
|
|
265
|
-
:host([flavor="success+"]) .tag-container[tabindex]:hover,
|
|
266
|
-
:host([flavor="success-"]) .tag-container[tabindex]:hover {
|
|
267
|
-
background: var(--ty-bg-success-bold);
|
|
268
|
-
}
|
|
269
|
-
:host([flavor="success"]) .tag-container[tabindex]:focus,
|
|
270
|
-
:host([flavor="success+"]) .tag-container[tabindex]:focus,
|
|
271
|
-
:host([flavor="success-"]) .tag-container[tabindex]:focus {
|
|
272
|
-
box-shadow: 0 0 0 3px var(--ty-color-success-faint);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/* ----- DANGER ----- */
|
|
276
|
-
:host([flavor="danger"]) {
|
|
277
|
-
--tag-bg: var(--ty-bg-danger);
|
|
278
|
-
--tag-color: var(--ty-color-danger-strong);
|
|
279
|
-
--tag-border-color: var(--ty-border-danger);
|
|
280
|
-
}
|
|
281
|
-
:host([flavor="danger+"]) {
|
|
282
|
-
--tag-bg: var(--ty-bg-danger-bold);
|
|
283
|
-
--tag-color: var(--ty-color-danger-strong);
|
|
284
|
-
--tag-border-color: var(--ty-color-danger);
|
|
285
|
-
}
|
|
286
|
-
:host([flavor="danger-"]) {
|
|
287
|
-
--tag-bg: var(--ty-bg-danger-soft);
|
|
288
|
-
--tag-color: var(--ty-color-danger);
|
|
289
|
-
--tag-border-color: var(--ty-border-danger);
|
|
290
|
-
}
|
|
291
|
-
:host([flavor="danger"]) .tag-container[tabindex]:hover,
|
|
292
|
-
:host([flavor="danger+"]) .tag-container[tabindex]:hover,
|
|
293
|
-
:host([flavor="danger-"]) .tag-container[tabindex]:hover {
|
|
294
|
-
background: var(--ty-bg-danger-bold);
|
|
295
|
-
}
|
|
296
|
-
:host([flavor="danger"]) .tag-container[tabindex]:focus,
|
|
297
|
-
:host([flavor="danger+"]) .tag-container[tabindex]:focus,
|
|
298
|
-
:host([flavor="danger-"]) .tag-container[tabindex]:focus {
|
|
299
|
-
box-shadow: 0 0 0 3px var(--ty-color-danger-faint);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/* ----- WARNING ----- */
|
|
303
|
-
:host([flavor="warning"]) {
|
|
304
|
-
--tag-bg: var(--ty-bg-warning);
|
|
305
|
-
--tag-color: var(--ty-color-warning-strong);
|
|
306
|
-
--tag-border-color: var(--ty-border-warning);
|
|
307
|
-
}
|
|
308
|
-
:host([flavor="warning+"]) {
|
|
309
|
-
--tag-bg: var(--ty-bg-warning-bold);
|
|
310
|
-
--tag-color: var(--ty-color-warning-strong);
|
|
311
|
-
--tag-border-color: var(--ty-color-warning);
|
|
312
|
-
}
|
|
313
|
-
:host([flavor="warning-"]) {
|
|
314
|
-
--tag-bg: var(--ty-bg-warning-soft);
|
|
315
|
-
--tag-color: var(--ty-color-warning);
|
|
316
|
-
--tag-border-color: var(--ty-border-warning);
|
|
317
|
-
}
|
|
318
|
-
:host([flavor="warning"]) .tag-container[tabindex]:hover,
|
|
319
|
-
:host([flavor="warning+"]) .tag-container[tabindex]:hover,
|
|
320
|
-
:host([flavor="warning-"]) .tag-container[tabindex]:hover {
|
|
321
|
-
background: var(--ty-bg-warning-bold);
|
|
322
|
-
}
|
|
323
|
-
:host([flavor="warning"]) .tag-container[tabindex]:focus,
|
|
324
|
-
:host([flavor="warning+"]) .tag-container[tabindex]:focus,
|
|
325
|
-
:host([flavor="warning-"]) .tag-container[tabindex]:focus {
|
|
326
|
-
box-shadow: 0 0 0 3px var(--ty-color-warning-faint);
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
:host([flavor="info"]) .tag-container[tabindex]:focus {
|
|
330
|
-
box-shadow: 0 0 0 3px var(--ty-color-info-faint);
|
|
331
|
-
}
|
|
227
|
+
or '-' for a softer shade (soft background, base color).
|
|
228
|
+
Generated per flavor above; neutral diverges (text/border tokens) and
|
|
229
|
+
stays hand-written below. */
|
|
332
230
|
|
|
231
|
+
${COLOR_FLAVORS.map(tagFlavor).join('')}
|
|
333
232
|
/* ----- NEUTRAL ----- */
|
|
334
233
|
:host([flavor="neutral"]) {
|
|
335
234
|
--tag-color: var(--ty-text-bold);
|
package/lib/styles/tag.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/styles/tag.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG
|
|
1
|
+
{"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/styles/tag.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C;gDACgD;AAChD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAA;AAE5D,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC;WACtB,CAAC,CAAC,WAAW,EAAE;iBACT,CAAC;0BACQ,CAAC;gCACK,CAAC;wCACO,CAAC;;iBAExB,CAAC;0BACQ,CAAC;gCACK,CAAC;uCACM,CAAC;;iBAEvB,CAAC;0BACQ,CAAC;gCACK,CAAC;wCACO,CAAC;;iBAExB,CAAC;iBACD,CAAC;iBACD,CAAC;4BACU,CAAC;;iBAEZ,CAAC;iBACD,CAAC;iBACD,CAAC;yCACuB,CAAC;;CAEzC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkMvB,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4EtC,CAAC"}
|
package/lib/styles/textarea.d.ts
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Styles for ty-textarea component
|
|
3
3
|
* Enhanced textarea with auto-resize functionality
|
|
4
4
|
*/
|
|
5
|
-
export declare const textareaStyles = "\n:host {\n display: block;\n font-family: var(--ty-font-sans);\n width: 100%;\n}\n\n.textarea-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n position: relative;\n /* For absolute positioned dummy element */\n}\n\n.textarea-wrapper {\n position: relative;\n width: 100%;\n}\n\n/* Custom scrollbar track positioning within textarea border */\n.textarea-wrapper .ty-scrollbar-track-y {\n top: 2px;\n right: 2px;\n bottom: 2px;\n border-radius: 0 4px 4px 0;\n}\n\n/* ===== LABEL STYLING ===== */\n\n.ty-field-label {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n font-weight: var(--ty-font-medium);\n color: var(--ty-label-color);\n margin-bottom: 6px;\n padding-left: 12px;\n}\n\n/* Required indicator - using SVG icon instead of CSS */\n.required-icon {\n display: inline-flex;\n align-items: center;\n color: var(--ty-color-danger);\n width: 12px;\n height: 12px;\n vertical-align: middle;\n}\n\n/* ===== ERROR MESSAGE STYLING ===== */\n\n.error-message {\n font-size: var(--ty-font-xs);\n line-height: var(--ty-leading-xs);\n letter-spacing: var(--ty-tracking-xs);\n color: var(--ty-color-danger);\n margin-top: 4px;\n padding-left: 12px;\n}\n\n/* Error state for textareas */\ntextarea.error {\n border-color: var(--ty-color-danger);\n background: var(--ty-bg-danger-soft);\n}\n\ntextarea.error:focus {\n border-color: var(--ty-color-danger-bold);\n box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));\n}\n\n/* ===== TEXTAREA BASE STYLING ===== */\n\ntextarea {\n /* Base appearance \u2014 elegant and minimal like input */\n box-sizing: border-box;\n width: 100%;\n border: 1px solid var(--input-border, var(--ty-input-border));\n border-radius: 6px;\n background: var(--input-bg, var(--ty-input-bg));\n color: var(--input-color, var(--ty-input-color));\n font-family: inherit;\n /* Linear-paired typography */\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n font-weight: var(--ty-font-normal);\n transition: all 0.15s ease-in-out;\n outline: none;\n\n /* Default size (md) - refined spacing */\n min-height: 80px;\n /* Larger than input for multiline */\n padding: 12px 12px;\n /* Slightly larger padding for text areas */\n\n /* Auto-resize specific styles */\n overflow: hidden;\n /* Hide scrollbars since we're auto-resizing */\n resize: none;\n /* Disable manual resize by default */\n\n /* Ensure consistent text wrapping */\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n/* Hide native scrollbar for webkit when custom scrollbar is active\n (scrollbar-width: none handles Firefox; this handles Chrome/Safari) */\n:host([data-custom-scroll]) textarea::-webkit-scrollbar {\n display: none;\n}\n\n/* Focus state - elegant blue glow like input */\ntextarea:focus {\n border-color: var(--input-border-focus, var(--ty-input-border-focus));\n box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));\n background: var(--input-bg, var(--ty-input-bg));\n}\n\n/* Hover state - subtle feedback */\ntextarea:hover:not(:disabled) {\n border-color: var(--input-border-hover, var(--ty-input-border-hover));\n}\n\n/* Disabled state - refined opacity */\ntextarea:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n background: var(--input-disabled-bg, var(--ty-input-disabled-bg));\n border-color: var(--input-disabled-border, var(--ty-input-disabled-border));\n color: var(--input-disabled-color, var(--ty-input-disabled-color));\n}\n\n/* Placeholder styling - subtle and elegant */\ntextarea::placeholder {\n color: var(--input-placeholder, var(--ty-input-placeholder));\n font-weight: 400;\n}\n\n/* ===== RESIZE CONTROL OPTIONS ===== */\n\n/* Allow manual resizing */\ntextarea.resize-both {\n resize: both;\n}\n\ntextarea.resize-horizontal {\n resize: horizontal;\n}\n\ntextarea.resize-vertical {\n resize: vertical;\n}\n\ntextarea.resize-none {\n resize: none;\n}\n\n/* Auto-resize mode (default) disables manual resize */\ntextarea:not(.resize-both):not(.resize-horizontal):not(.resize-vertical) {\n resize: none;\n}\n\n/* ===== DUMMY ELEMENT FOR AUTO-RESIZE ===== */\n\n.textarea-dummy {\n /* Hidden element that measures text height */\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n visibility: hidden !important;\n white-space: pre-wrap !important;\n word-break: break-word !important;\n box-sizing: border-box !important;\n overflow: hidden !important;\n pointer-events: none !important;\n z-index: -1 !important;\n\n /* Ensure it has the same text behavior as textarea */\n word-wrap: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n/* ===== SIZE MODIFIERS ===== */\n\n/* Extra Small */\ntextarea.xs {\n min-height: 64px;\n padding: 8px 10px;\n font-size: var(--ty-font-xs);\n line-height: var(--ty-leading-xs);\n letter-spacing: var(--ty-tracking-xs);\n}\n\n/* Small */\ntextarea.sm {\n min-height: 72px;\n padding: 10px 10px;\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n}\n\n/* Medium (default) */\ntextarea.md {\n min-height: 80px;\n padding: 12px 12px;\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n}\n\n/* Large */\ntextarea.lg {\n min-height: 96px;\n padding: 14px 14px;\n font-size: var(--ty-font-base);\n line-height: var(--ty-leading-base);\n letter-spacing: var(--ty-tracking-base);\n}\n\n/* Extra Large */\ntextarea.xl {\n min-height: 112px;\n padding: 16px 16px;\n font-size: var(--ty-font-lg);\n line-height: var(--ty-leading-lg);\n letter-spacing: var(--ty-tracking-lg);\n}\n\n/* ===== ACCESSIBILITY ENHANCEMENTS ===== */\n\ntextarea:focus-visible {\n outline: none;\n /* We use box-shadow instead */\n}\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n textarea {\n border-width: 2px;\n }\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n textarea {\n transition: none;\n }\n\n .textarea-dummy {\n transition: none;\n }\n}\n\n/* ===== CONTAINER-AWARE RESPONSIVE BEHAVIOR ===== */\n\n/* Scale down on smaller containers using container queries */\n@container (max-width: 480px) {\n textarea.lg {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n\n textarea.xl {\n font-size: var(--ty-font-base);\n line-height: var(--ty-leading-base);\n letter-spacing: var(--ty-tracking-base);\n padding: 14px 14px;\n min-height: 96px;\n }\n}\n\n@container (max-width: 320px) {\n textarea.xl {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n}\n\n/* Fallback for browsers without container query support */\n@media (max-width: 640px) {\n textarea.lg {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n\n textarea.xl {\n font-size: var(--ty-font-base);\n line-height: var(--ty-leading-base);\n letter-spacing: var(--ty-tracking-base);\n padding: 14px 14px;\n min-height: 96px;\n }\n}\n\n@media (max-width: 480px) {\n textarea.xl {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n}\n\n/* ===== ANIMATION AND TRANSITIONS ===== */\n\n/* Smooth height transitions for auto-resize */\ntextarea {\n transition:\n border-color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out,\n background-color 0.15s ease-in-out,\n height 0.1s ease-out;\n /* Smooth height changes */\n}\n\n/* Disable height transition on focus to avoid jarring effect */\ntextarea:focus {\n transition:\n border-color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out,\n background-color 0.15s ease-in-out;\n}\n\n/* For users who prefer reduced motion, disable height transitions */\n@media (prefers-reduced-motion: reduce) {\n textarea {\n transition: none;\n }\n}\n";
|
|
5
|
+
export declare const textareaStyles = "\n:host {\n display: block;\n font-family: var(--ty-font-sans);\n width: 100%;\n}\n\n.textarea-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n box-sizing: border-box;\n position: relative;\n /* For absolute positioned dummy element */\n}\n\n/* Bordered container \u2014 owns the border + active state (composer layout):\n header (top slot) \u00B7 textarea (borderless) \u00B7 footer (bottom slot). */\n.textarea-wrapper {\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n border: 1px solid var(--input-border, var(--ty-input-border));\n border-radius: var(--ty-radius-base);\n background: var(--input-bg, var(--ty-input-bg));\n transition: var(--ty-local-transition, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out);\n}\n\n/* Active ring tied to the TEXTAREA specifically (not :focus-within) so tabbing\n to a footer button doesn't make the whole field look focused. */\n.textarea-wrapper:has(textarea:focus) {\n border-color: var(--input-border-focus, var(--ty-input-border-focus));\n box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));\n}\n\n/* Error + disabled reflected from the inner textarea (both in shadow DOM, so\n :has is reliable here \u2014 unlike slotted content). */\n.textarea-wrapper:has(textarea.error) {\n border-color: var(--ty-color-danger);\n background: var(--ty-bg-danger-soft);\n}\n.textarea-wrapper:has(textarea.error):has(textarea:focus) {\n border-color: var(--ty-color-danger-bold);\n}\n.textarea-wrapper:has(textarea:disabled) {\n opacity: 0.5;\n background: var(--input-disabled-bg, var(--ty-input-disabled-bg));\n border-color: var(--input-disabled-border, var(--ty-input-disabled-border));\n}\n\n/* Scroll region wraps just the textarea so the custom scrollbar never overlaps\n the header/footer. */\n.textarea-scroll {\n position: relative;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n}\n\n/* Custom scrollbar track positioned to the scroll region (textarea edges) */\n.textarea-scroll .ty-scrollbar-track-y {\n top: 2px;\n right: 2px;\n bottom: 2px;\n border-radius: 0 4px 4px 0;\n}\n\n/* Header / footer slot regions \u2014 zero footprint until they have content\n (the component toggles .has-content via slotchange). footer defaults to\n space-between so \"tools \u2026 submit\" works; a single wide button fills it. */\n.textarea-header,\n.textarea-footer {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n.textarea-footer { justify-content: space-between; }\n.textarea-header.has-content {\n padding: 6px 10px;\n border-bottom: 1px solid var(--ty-textarea-divider, var(--input-border, var(--ty-input-border)));\n}\n.textarea-footer.has-content {\n padding: 6px 10px;\n border-top: 1px solid var(--ty-textarea-divider, var(--input-border, var(--ty-input-border)));\n}\n\n/* ===== LABEL STYLING ===== */\n\n.ty-field-label {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n font-weight: var(--ty-font-medium);\n color: var(--ty-label-color);\n margin-bottom: 6px;\n padding-left: 12px;\n}\n\n/* Required indicator - using SVG icon instead of CSS */\n.required-icon {\n display: inline-flex;\n align-items: center;\n color: var(--ty-color-danger);\n width: 12px;\n height: 12px;\n vertical-align: middle;\n}\n\n/* ===== ERROR MESSAGE STYLING ===== */\n\n.error-message {\n font-size: var(--ty-font-xs);\n line-height: var(--ty-leading-xs);\n letter-spacing: var(--ty-tracking-xs);\n color: var(--ty-color-danger);\n margin-top: 4px;\n padding-left: 12px;\n}\n\n/* Error state is reflected on .textarea-wrapper (see above). */\n\n/* ===== TEXTAREA BASE STYLING ===== */\n\ntextarea {\n /* Borderless \u2014 the .textarea-wrapper owns the border/background now. */\n box-sizing: border-box;\n width: 100%;\n flex: 1 1 auto;\n border: none;\n background: transparent;\n color: var(--input-color, var(--ty-input-color));\n font-family: inherit;\n /* Linear-paired typography */\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n font-weight: var(--ty-font-normal);\n outline: none;\n\n /* Default size (md) - refined spacing */\n min-height: 80px;\n /* Larger than input for multiline */\n padding: 12px 12px;\n /* Slightly larger padding for text areas */\n\n /* Auto-resize specific styles */\n overflow: hidden;\n /* Hide scrollbars since we're auto-resizing */\n resize: none;\n /* Disable manual resize by default */\n\n /* Ensure consistent text wrapping */\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n/* Hide native scrollbar for webkit when custom scrollbar is active\n (scrollbar-width: none handles Firefox; this handles Chrome/Safari) */\n:host([data-custom-scroll]) textarea::-webkit-scrollbar {\n display: none;\n}\n\n/* Disabled \u2014 visual state lives on the wrapper; just the cursor/text here. */\ntextarea:disabled {\n cursor: not-allowed;\n color: var(--input-disabled-color, var(--ty-input-disabled-color));\n}\n\n/* Placeholder styling - subtle and elegant */\ntextarea::placeholder {\n color: var(--input-placeholder, var(--ty-input-placeholder));\n font-weight: 400;\n}\n\n/* ===== RESIZE CONTROL OPTIONS ===== */\n\n/* Allow manual resizing */\ntextarea.resize-both {\n resize: both;\n}\n\ntextarea.resize-horizontal {\n resize: horizontal;\n}\n\ntextarea.resize-vertical {\n resize: vertical;\n}\n\ntextarea.resize-none {\n resize: none;\n}\n\n/* Auto-resize mode (default) disables manual resize */\ntextarea:not(.resize-both):not(.resize-horizontal):not(.resize-vertical) {\n resize: none;\n}\n\n/* ===== DUMMY ELEMENT FOR AUTO-RESIZE ===== */\n\n.textarea-dummy {\n /* Hidden element that measures text height */\n position: absolute !important;\n top: 0 !important;\n left: 0 !important;\n visibility: hidden !important;\n white-space: pre-wrap !important;\n word-break: break-word !important;\n box-sizing: border-box !important;\n overflow: hidden !important;\n pointer-events: none !important;\n z-index: -1 !important;\n\n /* Ensure it has the same text behavior as textarea */\n word-wrap: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n/* ===== SIZE MODIFIERS ===== */\n\n/* Extra Small */\ntextarea.xs {\n min-height: 64px;\n padding: 8px 10px;\n font-size: var(--ty-font-xs);\n line-height: var(--ty-leading-xs);\n letter-spacing: var(--ty-tracking-xs);\n}\n\n/* Small */\ntextarea.sm {\n min-height: 72px;\n padding: 10px 10px;\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n}\n\n/* Medium (default) */\ntextarea.md {\n min-height: 80px;\n padding: 12px 12px;\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n}\n\n/* Large */\ntextarea.lg {\n min-height: 96px;\n padding: 14px 14px;\n font-size: var(--ty-font-base);\n line-height: var(--ty-leading-base);\n letter-spacing: var(--ty-tracking-base);\n}\n\n/* Extra Large */\ntextarea.xl {\n min-height: 112px;\n padding: 16px 16px;\n font-size: var(--ty-font-lg);\n line-height: var(--ty-leading-lg);\n letter-spacing: var(--ty-tracking-lg);\n}\n\n/* ===== ACCESSIBILITY ENHANCEMENTS ===== */\n\ntextarea:focus-visible {\n outline: none;\n /* We use box-shadow instead */\n}\n\n/* High contrast mode support */\n@media (prefers-contrast: high) {\n textarea {\n border-width: 2px;\n }\n}\n\n/* Reduced motion support */\n@media (prefers-reduced-motion: reduce) {\n textarea {\n transition: none;\n }\n\n .textarea-dummy {\n transition: none;\n }\n}\n\n/* ===== CONTAINER-AWARE RESPONSIVE BEHAVIOR ===== */\n\n/* Scale down on smaller containers using container queries */\n@container (max-width: 480px) {\n textarea.lg {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n\n textarea.xl {\n font-size: var(--ty-font-base);\n line-height: var(--ty-leading-base);\n letter-spacing: var(--ty-tracking-base);\n padding: 14px 14px;\n min-height: 96px;\n }\n}\n\n@container (max-width: 320px) {\n textarea.xl {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n}\n\n/* Fallback for browsers without container query support */\n@media (max-width: 640px) {\n textarea.lg {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n\n textarea.xl {\n font-size: var(--ty-font-base);\n line-height: var(--ty-leading-base);\n letter-spacing: var(--ty-tracking-base);\n padding: 14px 14px;\n min-height: 96px;\n }\n}\n\n@media (max-width: 480px) {\n textarea.xl {\n font-size: var(--ty-font-sm);\n line-height: var(--ty-leading-sm);\n letter-spacing: var(--ty-tracking-sm);\n padding: 12px 12px;\n min-height: 80px;\n }\n}\n\n/* ===== ANIMATION AND TRANSITIONS ===== */\n\n/* Smooth height transitions for auto-resize */\ntextarea {\n transition: var(--ty-local-transition,\n border-color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out,\n background-color 0.15s ease-in-out,\n height 0.1s ease-out);\n /* Smooth height changes */\n}\n\n/* Disable height transition on focus to avoid jarring effect */\ntextarea:focus {\n transition: var(--ty-local-transition,\n border-color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out,\n background-color 0.15s ease-in-out);\n}\n\n/* For users who prefer reduced motion, disable height transitions */\n@media (prefers-reduced-motion: reduce) {\n textarea {\n transition: none;\n }\n}\n";
|
|
6
6
|
//# sourceMappingURL=textarea.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../src/styles/textarea.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../src/styles/textarea.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,cAAc,uvTA0X1B,CAAA"}
|
package/lib/styles/textarea.js
CHANGED
|
@@ -18,19 +18,78 @@ export const textareaStyles = `
|
|
|
18
18
|
/* For absolute positioned dummy element */
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
/* Bordered container — owns the border + active state (composer layout):
|
|
22
|
+
header (top slot) · textarea (borderless) · footer (bottom slot). */
|
|
21
23
|
.textarea-wrapper {
|
|
22
24
|
position: relative;
|
|
23
25
|
width: 100%;
|
|
26
|
+
display: flex;
|
|
27
|
+
flex-direction: column;
|
|
28
|
+
box-sizing: border-box;
|
|
29
|
+
border: 1px solid var(--input-border, var(--ty-input-border));
|
|
30
|
+
border-radius: var(--ty-radius-base);
|
|
31
|
+
background: var(--input-bg, var(--ty-input-bg));
|
|
32
|
+
transition: var(--ty-local-transition, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out);
|
|
24
33
|
}
|
|
25
34
|
|
|
26
|
-
/*
|
|
27
|
-
|
|
35
|
+
/* Active ring tied to the TEXTAREA specifically (not :focus-within) so tabbing
|
|
36
|
+
to a footer button doesn't make the whole field look focused. */
|
|
37
|
+
.textarea-wrapper:has(textarea:focus) {
|
|
38
|
+
border-color: var(--input-border-focus, var(--ty-input-border-focus));
|
|
39
|
+
box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Error + disabled reflected from the inner textarea (both in shadow DOM, so
|
|
43
|
+
:has is reliable here — unlike slotted content). */
|
|
44
|
+
.textarea-wrapper:has(textarea.error) {
|
|
45
|
+
border-color: var(--ty-color-danger);
|
|
46
|
+
background: var(--ty-bg-danger-soft);
|
|
47
|
+
}
|
|
48
|
+
.textarea-wrapper:has(textarea.error):has(textarea:focus) {
|
|
49
|
+
border-color: var(--ty-color-danger-bold);
|
|
50
|
+
}
|
|
51
|
+
.textarea-wrapper:has(textarea:disabled) {
|
|
52
|
+
opacity: 0.5;
|
|
53
|
+
background: var(--input-disabled-bg, var(--ty-input-disabled-bg));
|
|
54
|
+
border-color: var(--input-disabled-border, var(--ty-input-disabled-border));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Scroll region wraps just the textarea so the custom scrollbar never overlaps
|
|
58
|
+
the header/footer. */
|
|
59
|
+
.textarea-scroll {
|
|
60
|
+
position: relative;
|
|
61
|
+
flex: 1 1 auto;
|
|
62
|
+
min-height: 0;
|
|
63
|
+
display: flex;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* Custom scrollbar track positioned to the scroll region (textarea edges) */
|
|
67
|
+
.textarea-scroll .ty-scrollbar-track-y {
|
|
28
68
|
top: 2px;
|
|
29
69
|
right: 2px;
|
|
30
70
|
bottom: 2px;
|
|
31
71
|
border-radius: 0 4px 4px 0;
|
|
32
72
|
}
|
|
33
73
|
|
|
74
|
+
/* Header / footer slot regions — zero footprint until they have content
|
|
75
|
+
(the component toggles .has-content via slotchange). footer defaults to
|
|
76
|
+
space-between so "tools … submit" works; a single wide button fills it. */
|
|
77
|
+
.textarea-header,
|
|
78
|
+
.textarea-footer {
|
|
79
|
+
display: flex;
|
|
80
|
+
align-items: center;
|
|
81
|
+
gap: 0.5rem;
|
|
82
|
+
}
|
|
83
|
+
.textarea-footer { justify-content: space-between; }
|
|
84
|
+
.textarea-header.has-content {
|
|
85
|
+
padding: 6px 10px;
|
|
86
|
+
border-bottom: 1px solid var(--ty-textarea-divider, var(--input-border, var(--ty-input-border)));
|
|
87
|
+
}
|
|
88
|
+
.textarea-footer.has-content {
|
|
89
|
+
padding: 6px 10px;
|
|
90
|
+
border-top: 1px solid var(--ty-textarea-divider, var(--input-border, var(--ty-input-border)));
|
|
91
|
+
}
|
|
92
|
+
|
|
34
93
|
/* ===== LABEL STYLING ===== */
|
|
35
94
|
|
|
36
95
|
.ty-field-label {
|
|
@@ -64,26 +123,17 @@ export const textareaStyles = `
|
|
|
64
123
|
padding-left: 12px;
|
|
65
124
|
}
|
|
66
125
|
|
|
67
|
-
/* Error state
|
|
68
|
-
textarea.error {
|
|
69
|
-
border-color: var(--ty-color-danger);
|
|
70
|
-
background: var(--ty-bg-danger-soft);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
textarea.error:focus {
|
|
74
|
-
border-color: var(--ty-color-danger-bold);
|
|
75
|
-
box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));
|
|
76
|
-
}
|
|
126
|
+
/* Error state is reflected on .textarea-wrapper (see above). */
|
|
77
127
|
|
|
78
128
|
/* ===== TEXTAREA BASE STYLING ===== */
|
|
79
129
|
|
|
80
130
|
textarea {
|
|
81
|
-
/*
|
|
131
|
+
/* Borderless — the .textarea-wrapper owns the border/background now. */
|
|
82
132
|
box-sizing: border-box;
|
|
83
133
|
width: 100%;
|
|
84
|
-
|
|
85
|
-
border
|
|
86
|
-
background:
|
|
134
|
+
flex: 1 1 auto;
|
|
135
|
+
border: none;
|
|
136
|
+
background: transparent;
|
|
87
137
|
color: var(--input-color, var(--ty-input-color));
|
|
88
138
|
font-family: inherit;
|
|
89
139
|
/* Linear-paired typography */
|
|
@@ -91,7 +141,6 @@ textarea {
|
|
|
91
141
|
line-height: var(--ty-leading-sm);
|
|
92
142
|
letter-spacing: var(--ty-tracking-sm);
|
|
93
143
|
font-weight: var(--ty-font-normal);
|
|
94
|
-
transition: all 0.15s ease-in-out;
|
|
95
144
|
outline: none;
|
|
96
145
|
|
|
97
146
|
/* Default size (md) - refined spacing */
|
|
@@ -117,24 +166,9 @@ textarea {
|
|
|
117
166
|
display: none;
|
|
118
167
|
}
|
|
119
168
|
|
|
120
|
-
/*
|
|
121
|
-
textarea:focus {
|
|
122
|
-
border-color: var(--input-border-focus, var(--ty-input-border-focus));
|
|
123
|
-
box-shadow: 0 0 0 3px var(--input-shadow-focus, var(--ty-input-shadow-focus));
|
|
124
|
-
background: var(--input-bg, var(--ty-input-bg));
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/* Hover state - subtle feedback */
|
|
128
|
-
textarea:hover:not(:disabled) {
|
|
129
|
-
border-color: var(--input-border-hover, var(--ty-input-border-hover));
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/* Disabled state - refined opacity */
|
|
169
|
+
/* Disabled — visual state lives on the wrapper; just the cursor/text here. */
|
|
133
170
|
textarea:disabled {
|
|
134
171
|
cursor: not-allowed;
|
|
135
|
-
opacity: 0.5;
|
|
136
|
-
background: var(--input-disabled-bg, var(--ty-input-disabled-bg));
|
|
137
|
-
border-color: var(--input-disabled-border, var(--ty-input-disabled-border));
|
|
138
172
|
color: var(--input-disabled-color, var(--ty-input-disabled-color));
|
|
139
173
|
}
|
|
140
174
|
|
|
@@ -324,20 +358,20 @@ textarea:focus-visible {
|
|
|
324
358
|
|
|
325
359
|
/* Smooth height transitions for auto-resize */
|
|
326
360
|
textarea {
|
|
327
|
-
transition:
|
|
361
|
+
transition: var(--ty-local-transition,
|
|
328
362
|
border-color 0.15s ease-in-out,
|
|
329
363
|
box-shadow 0.15s ease-in-out,
|
|
330
364
|
background-color 0.15s ease-in-out,
|
|
331
|
-
height 0.1s ease-out;
|
|
365
|
+
height 0.1s ease-out);
|
|
332
366
|
/* Smooth height changes */
|
|
333
367
|
}
|
|
334
368
|
|
|
335
369
|
/* Disable height transition on focus to avoid jarring effect */
|
|
336
370
|
textarea:focus {
|
|
337
|
-
transition:
|
|
371
|
+
transition: var(--ty-local-transition,
|
|
338
372
|
border-color 0.15s ease-in-out,
|
|
339
373
|
box-shadow 0.15s ease-in-out,
|
|
340
|
-
background-color 0.15s ease-in-out;
|
|
374
|
+
background-color 0.15s ease-in-out);
|
|
341
375
|
}
|
|
342
376
|
|
|
343
377
|
/* For users who prefer reduced motion, disable height transitions */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../src/styles/textarea.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG
|
|
1
|
+
{"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../src/styles/textarea.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0X7B,CAAA"}
|
package/lib/styles/tooltip.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tooltip Styles
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* The tooltip popover is created in document.body (top-layer Popover API)
|
|
5
|
+
* and styled inline by the component — see applyFlavorStyles() in
|
|
6
|
+
* components/tooltip.ts. The shadow root only needs the host to not affect
|
|
7
|
+
* layout.
|
|
6
8
|
*/
|
|
7
9
|
import type { StyleContent } from '../types/common.js';
|
|
8
10
|
export declare const tooltipStyles: StyleContent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/styles/tooltip.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/styles/tooltip.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,aAAa,EAAE,YAQ3B,CAAC"}
|