@fylib/adapter-angular 0.1.0 → 0.2.1

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 (28) hide show
  1. package/dist/components/accordion.component.js +128 -128
  2. package/dist/components/badge.component.js +43 -43
  3. package/dist/components/button.component.js +103 -103
  4. package/dist/components/card.component.js +103 -103
  5. package/dist/components/chart.component.js +72 -72
  6. package/dist/components/icon.component.js +29 -29
  7. package/dist/components/input.component.js +111 -111
  8. package/dist/components/modal.component.js +122 -122
  9. package/dist/components/nav-link.component.js +56 -56
  10. package/dist/components/notification-menu.component.js +388 -388
  11. package/dist/components/select.component.js +122 -122
  12. package/dist/components/table.component.js +371 -371
  13. package/dist/components/text.component.js +2 -2
  14. package/dist/components/toast.component.js +115 -115
  15. package/dist/directives/theme-vars.directive.js +10 -10
  16. package/dist/directives/wallpaper.directive.js +5 -5
  17. package/dist/layouts/layout.component.js +69 -69
  18. package/dist/layouts/slot.component.js +584 -584
  19. package/dist/schematics/collection.json +9 -0
  20. package/dist/schematics/ng-add/index.d.ts +2 -0
  21. package/dist/schematics/ng-add/index.js +80 -0
  22. package/dist/schematics/ng-add/index.js.map +1 -0
  23. package/dist/schematics/ng-add/schema.json +8 -0
  24. package/dist/schematics/templates/fylib/crypto.config.ts.template +7 -0
  25. package/dist/schematics/templates/fylib/logging.config.ts.template +9 -0
  26. package/dist/schematics/templates/fylib/sse.config.ts.template +7 -0
  27. package/dist/schematics/templates/fylib/theme.config.ts.template +9 -0
  28. package/package.json +46 -43
@@ -124,110 +124,110 @@ FyCardComponent = __decorate([
124
124
  selector: 'fy-card',
125
125
  standalone: true,
126
126
  imports: [CommonModule, FyIconComponent],
127
- template: `
128
- <section
129
- class="fy-card fy-card--{{variant}} {{ animationClassSuffix }}"
130
- [style]="hostStyles"
131
- >
132
- @if (title || hasHeaderSlot) {
133
- <header class="fy-card__header" [class.fy-card__header--muted]="mutedHeader">
134
- @if (headerIconName) {
135
- <fy-icon class="fy-card__header-icon" [name]="headerIconName"></fy-icon>
136
- }
137
- <ng-content select="[fy-card-header]"></ng-content>
138
- @if (title) {
139
- <h3 class="fy-card__title">{{ title }}</h3>
140
- }
141
- </header>
142
- }
143
-
144
- <form class="fy-card__body" [class.fy-card__body--scroll]="scrollContent" (submit)="onSubmit($event)">
145
- <ng-content></ng-content>
146
- @if (hasActionsSlot) {
147
- <div class="fy-card__actions">
148
- <ng-content select="[fy-card-actions]"></ng-content>
149
- </div>
150
- }
151
- </form>
152
-
153
- @if (footerText || hasFooterSlot) {
154
- <footer class="fy-card__footer" [class.fy-card__footer--muted]="mutedFooter">
155
- @if (footerIconName) {
156
- <fy-icon class="fy-card__footer-icon" [name]="footerIconName"></fy-icon>
157
- }
158
- <ng-content select="[fy-card-footer]"></ng-content>
159
- @if (footerText) {
160
- <span>{{ footerText }}</span>
161
- }
162
- </footer>
163
- }
164
- </section>
127
+ template: `
128
+ <section
129
+ class="fy-card fy-card--{{variant}} {{ animationClassSuffix }}"
130
+ [style]="hostStyles"
131
+ >
132
+ @if (title || hasHeaderSlot) {
133
+ <header class="fy-card__header" [class.fy-card__header--muted]="mutedHeader">
134
+ @if (headerIconName) {
135
+ <fy-icon class="fy-card__header-icon" [name]="headerIconName"></fy-icon>
136
+ }
137
+ <ng-content select="[fy-card-header]"></ng-content>
138
+ @if (title) {
139
+ <h3 class="fy-card__title">{{ title }}</h3>
140
+ }
141
+ </header>
142
+ }
143
+
144
+ <form class="fy-card__body" [class.fy-card__body--scroll]="scrollContent" (submit)="onSubmit($event)">
145
+ <ng-content></ng-content>
146
+ @if (hasActionsSlot) {
147
+ <div class="fy-card__actions">
148
+ <ng-content select="[fy-card-actions]"></ng-content>
149
+ </div>
150
+ }
151
+ </form>
152
+
153
+ @if (footerText || hasFooterSlot) {
154
+ <footer class="fy-card__footer" [class.fy-card__footer--muted]="mutedFooter">
155
+ @if (footerIconName) {
156
+ <fy-icon class="fy-card__footer-icon" [name]="footerIconName"></fy-icon>
157
+ }
158
+ <ng-content select="[fy-card-footer]"></ng-content>
159
+ @if (footerText) {
160
+ <span>{{ footerText }}</span>
161
+ }
162
+ </footer>
163
+ }
164
+ </section>
165
165
  `,
166
- styles: [`
167
- .fy-card {
168
- display: flex;
169
- flex-direction: column;
170
- gap: var(--fy-spacing-sm, 8px);
171
- border-radius: var(--fy-borderRadius-lg, 12px);
172
- background: var(--fy-effects-card-background, var(--fy-colors-surface, #fff));
173
- border: 1px solid var(--fy-effects-card-borderColor, rgba(0,0,0,0.08));
174
- box-shadow: var(--fy-effects-card-shadow, 0 6px 24px rgba(15, 23, 42, 0.06));
175
- overflow: hidden;
176
- width: 100%;
177
- max-width: 100%;
178
- color: var(--fy-colors-textOverlay, var(--fy-colors-text));
179
- }
180
- .fy-card__header-icon, .fy-card__footer-icon { margin-right: var(--fy-spacing-sm, 8px); opacity: .9; }
181
-
182
- .fy-card__header,
183
- .fy-card__footer {
184
- padding: var(--fy-spacing-md, 16px);
185
- display: flex;
186
- align-items: center;
187
- justify-content: space-between;
188
- }
189
-
190
- .fy-card__header--muted,
191
- .fy-card__footer--muted {
192
- background: var(--fy-colors-mutedBackground, rgba(15, 23, 42, 0.03));
193
- color: var(--fy-colors-secondary, #64748b);
194
- }
195
-
196
- .fy-card__title {
197
- margin: 0;
198
- font-size: var(--fy-typography-fontSize-lg, 20px);
199
- font-weight: var(--fy-typography-fontWeight-bold, 700);
200
- }
201
-
202
- .fy-card__body {
203
- padding: var(--fy-spacing-md, 16px);
204
- display: flex;
205
- flex-direction: column;
206
- gap: var(--fy-spacing-md, 16px);
207
- }
208
-
209
- .fy-card__body--scroll {
210
- max-height: 420px;
211
- overflow-y: auto;
212
- }
213
-
214
- .fy-card__actions {
215
- display: flex;
216
- gap: var(--fy-spacing-sm, 8px);
217
- padding-top: var(--fy-spacing-sm, 8px);
218
- border-top: 1px solid var(--fy-effects-card-dividerColor, rgba(0,0,0,0.08));
219
- justify-content: flex-end;
220
- flex-wrap: wrap;
221
- }
222
-
223
- @media (max-width: 768px) {
224
- .fy-card__body--scroll {
225
- max-height: 60vh;
226
- }
227
- .fy-card__actions {
228
- justify-content: stretch;
229
- }
230
- }
166
+ styles: [`
167
+ .fy-card {
168
+ display: flex;
169
+ flex-direction: column;
170
+ gap: var(--fy-spacing-sm, 8px);
171
+ border-radius: var(--fy-borderRadius-lg, 12px);
172
+ background: var(--fy-effects-card-background, var(--fy-colors-surface, #fff));
173
+ border: 1px solid var(--fy-effects-card-borderColor, rgba(0,0,0,0.08));
174
+ box-shadow: var(--fy-effects-card-shadow, 0 6px 24px rgba(15, 23, 42, 0.06));
175
+ overflow: hidden;
176
+ width: 100%;
177
+ max-width: 100%;
178
+ color: var(--fy-colors-textOverlay, var(--fy-colors-text));
179
+ }
180
+ .fy-card__header-icon, .fy-card__footer-icon { margin-right: var(--fy-spacing-sm, 8px); opacity: .9; }
181
+
182
+ .fy-card__header,
183
+ .fy-card__footer {
184
+ padding: var(--fy-spacing-md, 16px);
185
+ display: flex;
186
+ align-items: center;
187
+ justify-content: space-between;
188
+ }
189
+
190
+ .fy-card__header--muted,
191
+ .fy-card__footer--muted {
192
+ background: var(--fy-colors-mutedBackground, rgba(15, 23, 42, 0.03));
193
+ color: var(--fy-colors-secondary, #64748b);
194
+ }
195
+
196
+ .fy-card__title {
197
+ margin: 0;
198
+ font-size: var(--fy-typography-fontSize-lg, 20px);
199
+ font-weight: var(--fy-typography-fontWeight-bold, 700);
200
+ }
201
+
202
+ .fy-card__body {
203
+ padding: var(--fy-spacing-md, 16px);
204
+ display: flex;
205
+ flex-direction: column;
206
+ gap: var(--fy-spacing-md, 16px);
207
+ }
208
+
209
+ .fy-card__body--scroll {
210
+ max-height: 420px;
211
+ overflow-y: auto;
212
+ }
213
+
214
+ .fy-card__actions {
215
+ display: flex;
216
+ gap: var(--fy-spacing-sm, 8px);
217
+ padding-top: var(--fy-spacing-sm, 8px);
218
+ border-top: 1px solid var(--fy-effects-card-dividerColor, rgba(0,0,0,0.08));
219
+ justify-content: flex-end;
220
+ flex-wrap: wrap;
221
+ }
222
+
223
+ @media (max-width: 768px) {
224
+ .fy-card__body--scroll {
225
+ max-height: 60vh;
226
+ }
227
+ .fy-card__actions {
228
+ justify-content: stretch;
229
+ }
230
+ }
231
231
  `],
232
232
  encapsulation: ViewEncapsulation.None
233
233
  }),
@@ -226,79 +226,79 @@ FyChartComponent = __decorate([
226
226
  standalone: true,
227
227
  imports: [CommonModule, BaseChartDirective],
228
228
  schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
229
- template: `
230
- <div
231
- class="fy-chart-container"
232
- [class]="'fy-chart--' + variant"
233
- [class]="composeAnimClasses(animationClassSuffix)"
234
- [style]="getHostStyles(customStyles)"
235
- >
236
-
237
- @if(title || subtitle) {
238
- <div class="fy-chart__header">
239
- @if(title) {
240
- <h3 class="fy-chart__title">{{ title }}</h3>
241
- }
242
- @if(subtitle) {
243
- <p class="fy-chart__subtitle">{{ subtitle }}</p>
244
- }
245
- </div>
246
- }
247
- @if(chartData.datasets.length > 0) {
248
- <div class="fy-chart__content" [style.height]="height" [style.width]="width">
249
- <canvas
250
- baseChart
251
- [data]="chartData"
252
- [options]="chartOptions"
253
- [type]="chartJsType"
254
- (chartClick)="onChartClick($event)"
255
- >
256
- </canvas>
257
- </div>
258
- }
259
-
260
- </div>
229
+ template: `
230
+ <div
231
+ class="fy-chart-container"
232
+ [class]="'fy-chart--' + variant"
233
+ [class]="composeAnimClasses(animationClassSuffix)"
234
+ [style]="getHostStyles(customStyles)"
235
+ >
236
+
237
+ @if(title || subtitle) {
238
+ <div class="fy-chart__header">
239
+ @if(title) {
240
+ <h3 class="fy-chart__title">{{ title }}</h3>
241
+ }
242
+ @if(subtitle) {
243
+ <p class="fy-chart__subtitle">{{ subtitle }}</p>
244
+ }
245
+ </div>
246
+ }
247
+ @if(chartData.datasets.length > 0) {
248
+ <div class="fy-chart__content" [style.height]="height" [style.width]="width">
249
+ <canvas
250
+ baseChart
251
+ [data]="chartData"
252
+ [options]="chartOptions"
253
+ [type]="chartJsType"
254
+ (chartClick)="onChartClick($event)"
255
+ >
256
+ </canvas>
257
+ </div>
258
+ }
259
+
260
+ </div>
261
261
  `,
262
- styles: [`
263
- .fy-chart-container {
264
- display: flex;
265
- flex-direction: column;
266
- width: 100%;
267
- background: var(--fy-effects-chart-background, transparent);
268
- border: 1px solid var(--fy-effects-chart-borderColor, transparent);
269
- border-radius: var(--fy-borderRadius-lg, 12px);
270
- padding: var(--fy-spacing-md);
271
- box-sizing: border-box;
272
- }
273
-
274
- .fy-chart__header {
275
- margin-bottom: var(--fy-spacing-md);
276
- }
277
-
278
- .fy-chart__title {
279
- margin: 0;
280
- font-size: var(--fy-typography-fontSize-lg);
281
- font-weight: var(--fy-typography-fontWeight-bold);
282
- color: var(--fy-colors-text);
283
- }
284
-
285
- .fy-chart__subtitle {
286
- margin: 4px 0 0;
287
- font-size: var(--fy-typography-fontSize-sm);
288
- color: var(--fy-colors-secondary);
289
- }
290
-
291
- .fy-chart__content {
292
- position: relative;
293
- margin: auto;
294
- width: 100%;
295
- }
296
-
297
- .fy-chart--minimal {
298
- padding: 0;
299
- border: none;
300
- background: transparent;
301
- }
262
+ styles: [`
263
+ .fy-chart-container {
264
+ display: flex;
265
+ flex-direction: column;
266
+ width: 100%;
267
+ background: var(--fy-effects-chart-background, transparent);
268
+ border: 1px solid var(--fy-effects-chart-borderColor, transparent);
269
+ border-radius: var(--fy-borderRadius-lg, 12px);
270
+ padding: var(--fy-spacing-md);
271
+ box-sizing: border-box;
272
+ }
273
+
274
+ .fy-chart__header {
275
+ margin-bottom: var(--fy-spacing-md);
276
+ }
277
+
278
+ .fy-chart__title {
279
+ margin: 0;
280
+ font-size: var(--fy-typography-fontSize-lg);
281
+ font-weight: var(--fy-typography-fontWeight-bold);
282
+ color: var(--fy-colors-text);
283
+ }
284
+
285
+ .fy-chart__subtitle {
286
+ margin: 4px 0 0;
287
+ font-size: var(--fy-typography-fontSize-sm);
288
+ color: var(--fy-colors-secondary);
289
+ }
290
+
291
+ .fy-chart__content {
292
+ position: relative;
293
+ margin: auto;
294
+ width: 100%;
295
+ }
296
+
297
+ .fy-chart--minimal {
298
+ padding: 0;
299
+ border: none;
300
+ background: transparent;
301
+ }
302
302
  `],
303
303
  encapsulation: ViewEncapsulation.None
304
304
  }),
@@ -107,36 +107,36 @@ FyIconComponent = __decorate([
107
107
  selector: 'fy-icon',
108
108
  standalone: true,
109
109
  imports: [CommonModule],
110
- template: `
111
- <span class="fy-icon"
112
- [class]="'fy-icon--' + size"
113
- [ngStyle]="wrapperStyle()"
114
- >
115
- @if (svgPath) {
116
- <svg [attr.viewBox]="svgViewBox" fill="currentColor" aria-hidden="true">
117
- <path [attr.d]="svgPath"></path>
118
- </svg>
119
- } @else {
120
- @if (className) {
121
- <span [class]="className"></span>
122
- }
123
- }
124
- </span>
110
+ template: `
111
+ <span class="fy-icon"
112
+ [class]="'fy-icon--' + size"
113
+ [ngStyle]="wrapperStyle()"
114
+ >
115
+ @if (svgPath) {
116
+ <svg [attr.viewBox]="svgViewBox" fill="currentColor" aria-hidden="true">
117
+ <path [attr.d]="svgPath"></path>
118
+ </svg>
119
+ } @else {
120
+ @if (className) {
121
+ <span [class]="className"></span>
122
+ }
123
+ }
124
+ </span>
125
125
  `,
126
- styles: [`
127
- .fy-icon {
128
- display: inline-flex;
129
- align-items: center;
130
- justify-content: center;
131
- color: var(--fy-icons-color, currentColor);
132
- }
133
- .fy-icon svg {
134
- width: 1em;
135
- height: 1em;
136
- }
137
- .fy-icon--sm { font-size: var(--fy-icons-size-sm, var(--fy-typography-fontSize-sm, 12px)); }
138
- .fy-icon--md { font-size: var(--fy-icons-size-md, var(--fy-typography-fontSize-md, 16px)); }
139
- .fy-icon--lg { font-size: var(--fy-icons-size-lg, var(--fy-typography-fontSize-lg, 20px)); }
126
+ styles: [`
127
+ .fy-icon {
128
+ display: inline-flex;
129
+ align-items: center;
130
+ justify-content: center;
131
+ color: var(--fy-icons-color, currentColor);
132
+ }
133
+ .fy-icon svg {
134
+ width: 1em;
135
+ height: 1em;
136
+ }
137
+ .fy-icon--sm { font-size: var(--fy-icons-size-sm, var(--fy-typography-fontSize-sm, 12px)); }
138
+ .fy-icon--md { font-size: var(--fy-icons-size-md, var(--fy-typography-fontSize-md, 16px)); }
139
+ .fy-icon--lg { font-size: var(--fy-icons-size-lg, var(--fy-typography-fontSize-lg, 20px)); }
140
140
  `],
141
141
  encapsulation: ViewEncapsulation.None
142
142
  })
@@ -263,118 +263,118 @@ FyInputComponent = __decorate([
263
263
  selector: 'fy-input',
264
264
  standalone: true,
265
265
  imports: [CommonModule, FyIconComponent],
266
- template: `
267
- <div
268
- class="fy-input"
269
- [class.fy-input--with-left]="iconLeft || iconLeftName"
270
- [class.fy-input--with-right]="iconRight || iconRightName"
271
- [class.fy-input--sm]="size === 'sm'"
272
- [class.fy-input--lg]="size === 'lg'"
273
- [class.fy-input--status-success]="status === 'success'"
274
- [class.fy-input--status-error]="status === 'error'"
275
- [class]="animationClassSuffix"
276
- >
277
- @if (iconLeftName) {
278
- <fy-icon class="fy-input__icon fy-input__icon--left" [name]="iconLeftName"></fy-icon>
279
- } @else if (iconLeft) {
280
- <span class="fy-input__icon fy-input__icon--left" [class]="iconLeft"></span>
281
- }
282
- <input
283
- class="fy-input__field"
284
- [attr.type]="visibleType"
285
- [attr.placeholder]="placeholder || null"
286
- [disabled]="disabled"
287
- [readOnly]="readonly"
288
- [value]="value ?? ''"
289
- [attr.aria-invalid]="status === 'error'"
290
- [attr.aria-label]="placeholder"
291
- (input)="onInputHandler($event)"
292
- (change)="onChangeHandler($event)"
293
- (focus)="onFocusHandler()"
294
- (blur)="onBlurHandler()"
295
- />
296
- @if (type === 'password' && showPasswordToggle) {
297
- <button
298
- type="button"
299
- class="fy-input__toggle"
300
- (click)="togglePassword()"
301
- [attr.aria-label]="visibleType === 'password' ? 'Mostrar senha' : 'Ocultar senha'"
302
- ></button>
303
- }
304
- @if (iconRightName) {
305
- <fy-icon class="fy-input__icon fy-input__icon--right" [name]="iconRightName"></fy-icon>
306
- } @else if (iconRight) {
307
- <span class="fy-input__icon fy-input__icon--right" [class]="iconRight"></span>
308
- }
309
- </div>
266
+ template: `
267
+ <div
268
+ class="fy-input"
269
+ [class.fy-input--with-left]="iconLeft || iconLeftName"
270
+ [class.fy-input--with-right]="iconRight || iconRightName"
271
+ [class.fy-input--sm]="size === 'sm'"
272
+ [class.fy-input--lg]="size === 'lg'"
273
+ [class.fy-input--status-success]="status === 'success'"
274
+ [class.fy-input--status-error]="status === 'error'"
275
+ [class]="animationClassSuffix"
276
+ >
277
+ @if (iconLeftName) {
278
+ <fy-icon class="fy-input__icon fy-input__icon--left" [name]="iconLeftName"></fy-icon>
279
+ } @else if (iconLeft) {
280
+ <span class="fy-input__icon fy-input__icon--left" [class]="iconLeft"></span>
281
+ }
282
+ <input
283
+ class="fy-input__field"
284
+ [attr.type]="visibleType"
285
+ [attr.placeholder]="placeholder || null"
286
+ [disabled]="disabled"
287
+ [readOnly]="readonly"
288
+ [value]="value ?? ''"
289
+ [attr.aria-invalid]="status === 'error'"
290
+ [attr.aria-label]="placeholder"
291
+ (input)="onInputHandler($event)"
292
+ (change)="onChangeHandler($event)"
293
+ (focus)="onFocusHandler()"
294
+ (blur)="onBlurHandler()"
295
+ />
296
+ @if (type === 'password' && showPasswordToggle) {
297
+ <button
298
+ type="button"
299
+ class="fy-input__toggle"
300
+ (click)="togglePassword()"
301
+ [attr.aria-label]="visibleType === 'password' ? 'Mostrar senha' : 'Ocultar senha'"
302
+ ></button>
303
+ }
304
+ @if (iconRightName) {
305
+ <fy-icon class="fy-input__icon fy-input__icon--right" [name]="iconRightName"></fy-icon>
306
+ } @else if (iconRight) {
307
+ <span class="fy-input__icon fy-input__icon--right" [class]="iconRight"></span>
308
+ }
309
+ </div>
310
310
  `,
311
- styles: [`
312
- .fy-input {
313
- position: relative;
314
- display: inline-flex;
315
- align-items: center;
316
- width: 100%;
317
- max-width: 100%;
318
- border: var(--fy-effects-input-borderWidth, 1px) solid var(--fy-effects-input-borderColor, rgba(0,0,0,0.15));
319
- background: var(--fy-effects-input-background, #fff);
320
- border-radius: var(--fy-effects-input-borderRadius, var(--fy-borderRadius-md));
321
- box-shadow: var(--fy-effects-input-shadow, none);
322
- transition: box-shadow .2s ease, border-color .2s ease, background-color .2s ease;
323
- color: var(--fy-colors-textOverlay, var(--fy-colors-text));
324
- min-height: 36px;
325
- padding: 0 10px;
326
- gap: 6px;
327
- }
328
-
329
- .fy-animations-disabled, .fy-animations-disabled * {
330
- transition: none !important;
331
- animation: none !important;
332
- }
333
-
334
- .fy-input--sm { min-height: 30px; border-radius: var(--fy-borderRadius-sm); }
335
- .fy-input--lg { min-height: 42px; border-radius: var(--fy-borderRadius-lg); }
336
-
337
- .fy-input--status-success {
338
- border-color: var(--fy-colors-success, #22c55e);
339
- background: rgba(34, 197, 94, 0.04);
340
- }
341
-
342
- .fy-input--status-error {
343
- border-color: var(--fy-colors-danger, #ef4444);
344
- background: rgba(239, 68, 68, 0.04);
345
- }
346
-
347
- .fy-input__field {
348
- flex: 1 1 auto;
349
- border: 0;
350
- outline: 0;
351
- background: transparent;
352
- font: inherit;
353
- color: inherit;
354
- min-width: 0;
355
- height: 100%;
356
- }
357
- .fy-input__field::placeholder {
358
- color: var(--fy-effects-input-placeholderColor, #6b7280);
359
- opacity: .8;
360
- }
361
-
362
- .fy-input__icon {
363
- width: 16px;
364
- height: 16px;
365
- opacity: .9;
366
- flex: 0 0 auto;
367
- color: var(--fy-effects-input-icons-color, currentColor);
368
- }
369
-
370
- .fy-input__toggle {
371
- width: 20px;
372
- height: 20px;
373
- border: 0;
374
- background: transparent;
375
- cursor: pointer;
376
- flex: 0 0 auto;
377
- }
311
+ styles: [`
312
+ .fy-input {
313
+ position: relative;
314
+ display: inline-flex;
315
+ align-items: center;
316
+ width: 100%;
317
+ max-width: 100%;
318
+ border: var(--fy-effects-input-borderWidth, 1px) solid var(--fy-effects-input-borderColor, rgba(0,0,0,0.15));
319
+ background: var(--fy-effects-input-background, #fff);
320
+ border-radius: var(--fy-effects-input-borderRadius, var(--fy-borderRadius-md));
321
+ box-shadow: var(--fy-effects-input-shadow, none);
322
+ transition: box-shadow .2s ease, border-color .2s ease, background-color .2s ease;
323
+ color: var(--fy-colors-textOverlay, var(--fy-colors-text));
324
+ min-height: 36px;
325
+ padding: 0 10px;
326
+ gap: 6px;
327
+ }
328
+
329
+ .fy-animations-disabled, .fy-animations-disabled * {
330
+ transition: none !important;
331
+ animation: none !important;
332
+ }
333
+
334
+ .fy-input--sm { min-height: 30px; border-radius: var(--fy-borderRadius-sm); }
335
+ .fy-input--lg { min-height: 42px; border-radius: var(--fy-borderRadius-lg); }
336
+
337
+ .fy-input--status-success {
338
+ border-color: var(--fy-colors-success, #22c55e);
339
+ background: rgba(34, 197, 94, 0.04);
340
+ }
341
+
342
+ .fy-input--status-error {
343
+ border-color: var(--fy-colors-danger, #ef4444);
344
+ background: rgba(239, 68, 68, 0.04);
345
+ }
346
+
347
+ .fy-input__field {
348
+ flex: 1 1 auto;
349
+ border: 0;
350
+ outline: 0;
351
+ background: transparent;
352
+ font: inherit;
353
+ color: inherit;
354
+ min-width: 0;
355
+ height: 100%;
356
+ }
357
+ .fy-input__field::placeholder {
358
+ color: var(--fy-effects-input-placeholderColor, #6b7280);
359
+ opacity: .8;
360
+ }
361
+
362
+ .fy-input__icon {
363
+ width: 16px;
364
+ height: 16px;
365
+ opacity: .9;
366
+ flex: 0 0 auto;
367
+ color: var(--fy-effects-input-icons-color, currentColor);
368
+ }
369
+
370
+ .fy-input__toggle {
371
+ width: 20px;
372
+ height: 20px;
373
+ border: 0;
374
+ background: transparent;
375
+ cursor: pointer;
376
+ flex: 0 0 auto;
377
+ }
378
378
  `],
379
379
  encapsulation: ViewEncapsulation.None
380
380
  }),