@keepui/ui 0.2.0 → 0.4.0
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 +299 -131
- package/fesm2022/keepui-ui.mjs +1240 -13
- package/fesm2022/keepui-ui.mjs.map +1 -1
- package/lib/components/button/button.component.d.ts.map +1 -1
- package/lib/components/card/card.component.d.ts +1 -3
- package/lib/components/card/card.component.d.ts.map +1 -1
- package/lib/components/card/card.types.d.ts +4 -0
- package/lib/components/card/card.types.d.ts.map +1 -0
- package/lib/components/icon/icon.component.d.ts +39 -0
- package/lib/components/icon/icon.component.d.ts.map +1 -0
- package/lib/components/icon-action-button/icon-action-button.component.d.ts +52 -0
- package/lib/components/icon-action-button/icon-action-button.component.d.ts.map +1 -0
- package/lib/components/icon-action-button/icon-action-button.types.d.ts +3 -0
- package/lib/components/icon-action-button/icon-action-button.types.d.ts.map +1 -0
- package/lib/components/signal-dropdown/signal-dropdown.component.d.ts +91 -0
- package/lib/components/signal-dropdown/signal-dropdown.component.d.ts.map +1 -0
- package/lib/components/signal-dropdown/signal-dropdown.types.d.ts +12 -0
- package/lib/components/signal-dropdown/signal-dropdown.types.d.ts.map +1 -0
- package/lib/components/signal-text-input/signal-text-input.component.d.ts +101 -0
- package/lib/components/signal-text-input/signal-text-input.component.d.ts.map +1 -0
- package/lib/components/signal-text-input/signal-text-input.types.d.ts +8 -0
- package/lib/components/signal-text-input/signal-text-input.types.d.ts.map +1 -0
- package/lib/components/signal-textarea/signal-textarea.component.d.ts +70 -0
- package/lib/components/signal-textarea/signal-textarea.component.d.ts.map +1 -0
- package/lib/components/signal-textarea/signal-textarea.types.d.ts +11 -0
- package/lib/components/signal-textarea/signal-textarea.types.d.ts.map +1 -0
- package/lib/i18n/keep-ui-translations.d.ts +4 -0
- package/lib/i18n/keep-ui-translations.d.ts.map +1 -1
- package/lib/i18n/translation-keys.d.ts +4 -0
- package/lib/i18n/translation-keys.d.ts.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +10 -0
- package/public-api.d.ts.map +1 -1
- package/styles/index.css +11 -1
- package/styles/prebuilt.css +1 -1
- package/styles/themes.css +27 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
import { SignalDropdownOption, SignalDropdownWidth } from './signal-dropdown.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Signal-based accessible dropdown / select component.
|
|
6
|
+
*
|
|
7
|
+
* Fully platform-agnostic — no native API usage. The panel opens in `fixed`
|
|
8
|
+
* position so it is never clipped by overflow-hidden ancestors. It repositions
|
|
9
|
+
* itself automatically on scroll and resize.
|
|
10
|
+
*
|
|
11
|
+
* The `value` and `touched` properties are `model()` signals so the component
|
|
12
|
+
* integrates seamlessly with Angular signal-based forms.
|
|
13
|
+
*
|
|
14
|
+
* ```html
|
|
15
|
+
* <keepui-signal-dropdown
|
|
16
|
+
* label="País"
|
|
17
|
+
* placeholder="Selecciona un país"
|
|
18
|
+
* [options]="countries"
|
|
19
|
+
* [(value)]="selectedCountry"
|
|
20
|
+
* />
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @typeParam T – type of each option's `value` property. Defaults to `string`.
|
|
24
|
+
*/
|
|
25
|
+
export declare class SignalDropdownComponent<T = string> {
|
|
26
|
+
private readonly destroyRef;
|
|
27
|
+
protected readonly isOpen: import("@angular/core").WritableSignal<boolean>;
|
|
28
|
+
protected readonly openUpwards: import("@angular/core").WritableSignal<boolean>;
|
|
29
|
+
protected readonly panelTopPx: import("@angular/core").WritableSignal<number>;
|
|
30
|
+
protected readonly panelLeftPx: import("@angular/core").WritableSignal<number>;
|
|
31
|
+
protected readonly panelWidthPx: import("@angular/core").WritableSignal<number>;
|
|
32
|
+
protected readonly dropdownButton: import("@angular/core").Signal<ElementRef<HTMLButtonElement> | undefined>;
|
|
33
|
+
protected readonly dropdownContainer: import("@angular/core").Signal<ElementRef<HTMLElement> | undefined>;
|
|
34
|
+
/** Optional label text rendered above the dropdown. */
|
|
35
|
+
readonly label: import("@angular/core").InputSignal<string>;
|
|
36
|
+
/** Placeholder shown when no value is selected. */
|
|
37
|
+
readonly placeholder: import("@angular/core").InputSignal<string>;
|
|
38
|
+
/** Array of options to display in the panel. */
|
|
39
|
+
readonly options: import("@angular/core").InputSignal<SignalDropdownOption<T>[]>;
|
|
40
|
+
/** Layout width of the wrapper. @default 'full' */
|
|
41
|
+
readonly width: import("@angular/core").InputSignal<SignalDropdownWidth>;
|
|
42
|
+
/** Marks the field as required. Adds `aria-required` and a visual asterisk. @default false */
|
|
43
|
+
readonly required: import("@angular/core").InputSignal<boolean>;
|
|
44
|
+
/** Human-readable error message shown below the dropdown. Takes precedence over `errors[0]`. */
|
|
45
|
+
readonly errorMessage: import("@angular/core").InputSignal<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Array of error strings. The first item is displayed when `errorMessage` is empty.
|
|
48
|
+
* Set together with `invalid=true` to trigger the error state.
|
|
49
|
+
*/
|
|
50
|
+
readonly errors: import("@angular/core").InputSignal<readonly string[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Stable `id` used to link the `<label>` with the trigger `<button>`.
|
|
53
|
+
* A random suffix is generated by default.
|
|
54
|
+
*/
|
|
55
|
+
readonly selectId: import("@angular/core").InputSignal<string>;
|
|
56
|
+
/** Disables the dropdown. @default false */
|
|
57
|
+
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* Forces the error visual state regardless of the `touched` model.
|
|
60
|
+
* Useful for external form validation. @default false
|
|
61
|
+
*/
|
|
62
|
+
readonly invalid: import("@angular/core").InputSignal<boolean>;
|
|
63
|
+
/** Currently selected value. Use `[(value)]` for two-way binding. */
|
|
64
|
+
readonly value: import("@angular/core").ModelSignal<T | null>;
|
|
65
|
+
/** Whether the control has been interacted with. Use `[(touched)]` for two-way binding. */
|
|
66
|
+
readonly touched: import("@angular/core").ModelSignal<boolean>;
|
|
67
|
+
/** Emitted when the selected value changes. */
|
|
68
|
+
readonly valueChange: import("@angular/core").OutputEmitterRef<T | null>;
|
|
69
|
+
protected readonly errorId: import("@angular/core").Signal<string>;
|
|
70
|
+
protected readonly panelStyle: import("@angular/core").Signal<string>;
|
|
71
|
+
protected readonly widthClass: import("@angular/core").Signal<string>;
|
|
72
|
+
protected readonly selectedLabel: import("@angular/core").Signal<string>;
|
|
73
|
+
protected readonly selectedBadges: import("@angular/core").Signal<string[]>;
|
|
74
|
+
protected readonly showError: import("@angular/core").Signal<boolean>;
|
|
75
|
+
constructor();
|
|
76
|
+
protected onDocumentClick(event: MouseEvent): void;
|
|
77
|
+
protected toggleDropdown(): void;
|
|
78
|
+
protected close(): void;
|
|
79
|
+
protected selectOption(option: SignalDropdownOption<T>): void;
|
|
80
|
+
protected onBlur(): void;
|
|
81
|
+
protected isSelected(optionValue: T): boolean;
|
|
82
|
+
protected onButtonKeydown(event: KeyboardEvent): void;
|
|
83
|
+
protected onOptionKeydown(event: KeyboardEvent, option: SignalDropdownOption<T>, index: number): void;
|
|
84
|
+
private calculateDropdownPosition;
|
|
85
|
+
private readonly recalculatePosition;
|
|
86
|
+
private addViewportListeners;
|
|
87
|
+
private removeViewportListeners;
|
|
88
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SignalDropdownComponent<any>, never>;
|
|
89
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SignalDropdownComponent<any>, "keepui-signal-dropdown", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "selectId": { "alias": "selectId"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "valueChange": "valueChange"; }, never, never, true, never>;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=signal-dropdown.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-dropdown.component.d.ts","sourceRoot":"","sources":["../../../../../projects/keep-ui/src/lib/components/signal-dropdown/signal-dropdown.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,UAAU,EAMX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;;AAOpF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBA2Ia,uBAAuB,CAAC,CAAC,GAAG,MAAM;IAE7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAEjD,SAAS,CAAC,QAAQ,CAAC,MAAM,kDAAiB;IAC1C,SAAS,CAAC,QAAQ,CAAC,WAAW,kDAAiB;IAC/C,SAAS,CAAC,QAAQ,CAAC,UAAU,iDAAa;IAC1C,SAAS,CAAC,QAAQ,CAAC,WAAW,iDAAa;IAC3C,SAAS,CAAC,QAAQ,CAAC,YAAY,iDAAa;IAE5C,SAAS,CAAC,QAAQ,CAAC,cAAc,4EAC4B;IAC7D,SAAS,CAAC,QAAQ,CAAC,iBAAiB,sEACsB;IAE1D,uDAAuD;IACvD,QAAQ,CAAC,KAAK,8CAAqB;IAEnC,mDAAmD;IACnD,QAAQ,CAAC,WAAW,8CAAqB;IAEzC,gDAAgD;IAChD,QAAQ,CAAC,OAAO,iEAA+C;IAE/D,mDAAmD;IACnD,QAAQ,CAAC,KAAK,2DAAsC;IAEpD,8FAA8F;IAC9F,QAAQ,CAAC,QAAQ,+CAAyB;IAE1C,gGAAgG;IAChG,QAAQ,CAAC,YAAY,8CAAqB;IAE1C;;;OAGG;IACH,QAAQ,CAAC,MAAM,yDAAgC;IAE/C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,8CAEf;IAEF,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,+CAAyB;IAE1C;;;OAGG;IACH,QAAQ,CAAC,OAAO,+CAAyB;IAEzC,qEAAqE;IACrE,QAAQ,CAAC,KAAK,gDAAyB;IAEvC,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,+CAAyB;IAEzC,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,qDAAsB;IAE1C,SAAS,CAAC,QAAQ,CAAC,OAAO,yCAExB;IAEF,SAAS,CAAC,QAAQ,CAAC,UAAU,yCAG3B;IAEF,SAAS,CAAC,QAAQ,CAAC,UAAU,yCAO1B;IAEH,SAAS,CAAC,QAAQ,CAAC,aAAa,yCAI7B;IAEH,SAAS,CAAC,QAAQ,CAAC,cAAc,2CAI9B;IAEH,SAAS,CAAC,QAAQ,CAAC,SAAS,0CAE1B;;IAeF,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOlD,SAAS,CAAC,cAAc,IAAI,IAAI;IAKhC,SAAS,CAAC,KAAK,IAAI,IAAI;IAOvB,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAO7D,SAAS,CAAC,MAAM,IAAI,IAAI;IAIxB,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO;IAI7C,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IASrD,SAAS,CAAC,eAAe,CACvB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC/B,KAAK,EAAE,MAAM,GACZ,IAAI;IAqBP,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAElC;IAEF,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,uBAAuB;yCAvNpB,uBAAuB;2CAAvB,uBAAuB;CA2NnC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Layout width of the dropdown wrapper. */
|
|
2
|
+
export type SignalDropdownWidth = 'full' | 'half' | 'auto';
|
|
3
|
+
/** A single option rendered in the dropdown list. */
|
|
4
|
+
export interface SignalDropdownOption<T = string> {
|
|
5
|
+
/** Human-readable label shown in the button and the panel. */
|
|
6
|
+
label: string;
|
|
7
|
+
/** Value associated with this option. */
|
|
8
|
+
value: T;
|
|
9
|
+
/** Optional badge strings rendered as pills next to the label. */
|
|
10
|
+
badges?: string[];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=signal-dropdown.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-dropdown.types.d.ts","sourceRoot":"","sources":["../../../../../projects/keep-ui/src/lib/components/signal-dropdown/signal-dropdown.types.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3D,qDAAqD;AACrD,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,MAAM;IAC9C,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,KAAK,EAAE,CAAC,CAAC;IACT,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
import { SignalTextInputType, SignalTextInputWidth } from './signal-text-input.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Signal-based accessible text input supporting all common HTML input types,
|
|
6
|
+
* leading/trailing icons, a trailing content slot, and a built-in
|
|
7
|
+
* password-visibility toggle (when `type="password"`).
|
|
8
|
+
*
|
|
9
|
+
* The `value` and `touched` properties are `model()` signals so the component
|
|
10
|
+
* integrates seamlessly with Angular signal-based forms.
|
|
11
|
+
*
|
|
12
|
+
* Password toggle labels are translated via Transloco (scope `'keepui'`).
|
|
13
|
+
* Call `provideKeepUiI18n()` in your `app.config.ts` to activate i18n.
|
|
14
|
+
*
|
|
15
|
+
* ```html
|
|
16
|
+
* <keepui-signal-text-input
|
|
17
|
+
* label="Email"
|
|
18
|
+
* type="email"
|
|
19
|
+
* placeholder="usuario@ejemplo.com"
|
|
20
|
+
* leadingIcon="mail-icon"
|
|
21
|
+
* [(value)]="email"
|
|
22
|
+
* />
|
|
23
|
+
*
|
|
24
|
+
* <!-- Password with toggle -->
|
|
25
|
+
* <keepui-signal-text-input
|
|
26
|
+
* label="Contraseña"
|
|
27
|
+
* type="password"
|
|
28
|
+
* [(value)]="password"
|
|
29
|
+
* />
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class SignalTextInputComponent {
|
|
33
|
+
protected readonly isPasswordVisible: import("@angular/core").WritableSignal<boolean>;
|
|
34
|
+
protected readonly inputRef: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
35
|
+
/** Translation key references (typed via KEEPUI_TRANSLATION_KEYS). */
|
|
36
|
+
protected readonly keys: {
|
|
37
|
+
readonly SHOW_PASSWORD: "signalTextInput.showPassword";
|
|
38
|
+
readonly HIDE_PASSWORD: "signalTextInput.hidePassword";
|
|
39
|
+
};
|
|
40
|
+
/** Optional label text rendered above the input. */
|
|
41
|
+
readonly label: import("@angular/core").InputSignal<string>;
|
|
42
|
+
/** Placeholder passed to the underlying `<input>`. */
|
|
43
|
+
readonly placeholder: import("@angular/core").InputSignal<string>;
|
|
44
|
+
/** HTML `type` attribute. Use `'password'` to enable the visibility toggle. @default 'text' */
|
|
45
|
+
readonly type: import("@angular/core").InputSignal<SignalTextInputType>;
|
|
46
|
+
/** Layout width of the wrapper. @default 'full' */
|
|
47
|
+
readonly width: import("@angular/core").InputSignal<SignalTextInputWidth>;
|
|
48
|
+
/** Name of the leading icon (SVG symbol ID). Leave empty for no icon. */
|
|
49
|
+
readonly leadingIcon: import("@angular/core").InputSignal<string>;
|
|
50
|
+
/** Name of the trailing icon (SVG symbol ID). Ignored when `type="password"`. */
|
|
51
|
+
readonly trailingIcon: import("@angular/core").InputSignal<string>;
|
|
52
|
+
/**
|
|
53
|
+
* When `true`, a slot for custom trailing content is enabled
|
|
54
|
+
* (projects `[trailingSlot]` content). Overrides `trailingIcon`.
|
|
55
|
+
* @default false
|
|
56
|
+
*/
|
|
57
|
+
readonly hasTrailingSlot: import("@angular/core").InputSignal<boolean>;
|
|
58
|
+
/** Marks the field as required. Adds `aria-required` and a visual asterisk. @default false */
|
|
59
|
+
readonly required: import("@angular/core").InputSignal<boolean>;
|
|
60
|
+
/** When `false`, hides the visual asterisk even if `required=true`. @default true */
|
|
61
|
+
readonly showRequiredIndicator: import("@angular/core").InputSignal<boolean>;
|
|
62
|
+
/** Human-readable error message. Takes precedence over `errors[0]`. */
|
|
63
|
+
readonly errorMessage: import("@angular/core").InputSignal<string>;
|
|
64
|
+
/**
|
|
65
|
+
* Array of error strings. The first item is displayed when `errorMessage` is empty.
|
|
66
|
+
* Set together with `invalid=true` to trigger the error state.
|
|
67
|
+
*/
|
|
68
|
+
readonly errors: import("@angular/core").InputSignal<readonly string[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Stable `id` used to link the `<label>` with the `<input>`.
|
|
71
|
+
* A random suffix is generated by default.
|
|
72
|
+
*/
|
|
73
|
+
readonly inputId: import("@angular/core").InputSignal<string>;
|
|
74
|
+
/** Disables the input. @default false */
|
|
75
|
+
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
76
|
+
/**
|
|
77
|
+
* Forces the error visual state regardless of the `touched` model.
|
|
78
|
+
* Useful for external form validation. @default false
|
|
79
|
+
*/
|
|
80
|
+
readonly invalid: import("@angular/core").InputSignal<boolean>;
|
|
81
|
+
/** Current text value. Use `[(value)]` for two-way binding. */
|
|
82
|
+
readonly value: import("@angular/core").ModelSignal<string>;
|
|
83
|
+
/** Whether the control has been interacted with. Use `[(touched)]` for two-way binding. */
|
|
84
|
+
readonly touched: import("@angular/core").ModelSignal<boolean>;
|
|
85
|
+
protected readonly errorId: import("@angular/core").Signal<string>;
|
|
86
|
+
protected readonly isPasswordType: import("@angular/core").Signal<boolean>;
|
|
87
|
+
protected readonly resolvedType: import("@angular/core").Signal<string>;
|
|
88
|
+
protected readonly widthClass: import("@angular/core").Signal<string>;
|
|
89
|
+
protected readonly hasLeading: import("@angular/core").Signal<boolean>;
|
|
90
|
+
protected readonly hasTrailing: import("@angular/core").Signal<boolean>;
|
|
91
|
+
protected readonly showError: import("@angular/core").Signal<boolean>;
|
|
92
|
+
protected readonly isDateEmpty: import("@angular/core").Signal<boolean>;
|
|
93
|
+
protected readonly inputClasses: import("@angular/core").Signal<string>;
|
|
94
|
+
protected onInput(event: Event): void;
|
|
95
|
+
protected onBlur(): void;
|
|
96
|
+
protected openDatePicker(): void;
|
|
97
|
+
protected togglePasswordVisibility(): void;
|
|
98
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SignalTextInputComponent, never>;
|
|
99
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SignalTextInputComponent, "keepui-signal-text-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "leadingIcon": { "alias": "leadingIcon"; "required": false; "isSignal": true; }; "trailingIcon": { "alias": "trailingIcon"; "required": false; "isSignal": true; }; "hasTrailingSlot": { "alias": "hasTrailingSlot"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["[trailingSlot]"], true, never>;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=signal-text-input.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-text-input.component.d.ts","sourceRoot":"","sources":["../../../../../projects/keep-ui/src/lib/components/signal-text-input/signal-text-input.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,UAAU,EACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;;AAItF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAqGa,wBAAwB;IAEnC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,kDAAiB;IAErD,SAAS,CAAC,QAAQ,CAAC,QAAQ,2EAAuD;IAElF,sEAAsE;IACtE,SAAS,CAAC,QAAQ,CAAC,IAAI;;;MAAuB;IAE9C,oDAAoD;IACpD,QAAQ,CAAC,KAAK,8CAAqB;IAEnC,sDAAsD;IACtD,QAAQ,CAAC,WAAW,8CAAqB;IAEzC,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,2DAAsC;IAEnD,mDAAmD;IACnD,QAAQ,CAAC,KAAK,4DAAuC;IAErD,yEAAyE;IACzE,QAAQ,CAAC,WAAW,8CAAqB;IAEzC,iFAAiF;IACjF,QAAQ,CAAC,YAAY,8CAAqB;IAE1C;;;;OAIG;IACH,QAAQ,CAAC,eAAe,+CAAyB;IAEjD,8FAA8F;IAC9F,QAAQ,CAAC,QAAQ,+CAAyB;IAE1C,qFAAqF;IACrF,QAAQ,CAAC,qBAAqB,+CAAwB;IAEtD,uEAAuE;IACvE,QAAQ,CAAC,YAAY,8CAAqB;IAE1C;;;OAGG;IACH,QAAQ,CAAC,MAAM,yDAAgC;IAE/C;;;OAGG;IACH,QAAQ,CAAC,OAAO,8CAEd;IAEF,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,+CAAyB;IAE1C;;;OAGG;IACH,QAAQ,CAAC,OAAO,+CAAyB;IAEzC,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,8CAAqB;IAEnC,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,+CAAyB;IAEzC,SAAS,CAAC,QAAQ,CAAC,OAAO,yCAExB;IAEF,SAAS,CAAC,QAAQ,CAAC,cAAc,0CAA8C;IAE/E,SAAS,CAAC,QAAQ,CAAC,YAAY,yCAK5B;IAEH,SAAS,CAAC,QAAQ,CAAC,UAAU,yCAO1B;IAEH,SAAS,CAAC,QAAQ,CAAC,UAAU,0CAAiD;IAE9E,SAAS,CAAC,QAAQ,CAAC,WAAW,0CAE5B;IAEF,SAAS,CAAC,QAAQ,CAAC,SAAS,0CAI1B;IAEF,SAAS,CAAC,QAAQ,CAAC,WAAW,0CAE5B;IAEF,SAAS,CAAC,QAAQ,CAAC,YAAY,yCAgB5B;IAEH,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKrC,SAAS,CAAC,MAAM,IAAI,IAAI;IAIxB,SAAS,CAAC,cAAc,IAAI,IAAI;IAQhC,SAAS,CAAC,wBAAwB,IAAI,IAAI;yCAjJ/B,wBAAwB;2CAAxB,wBAAwB;CAoJpC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Layout width of the text input wrapper. */
|
|
2
|
+
export type SignalTextInputWidth = 'full' | 'half' | 'auto';
|
|
3
|
+
/**
|
|
4
|
+
* HTML `type` attribute for the underlying `<input>` element.
|
|
5
|
+
* Use `'password'` to enable the built-in show/hide toggle.
|
|
6
|
+
*/
|
|
7
|
+
export type SignalTextInputType = 'text' | 'email' | 'tel' | 'number' | 'password' | 'search' | 'url' | 'date';
|
|
8
|
+
//# sourceMappingURL=signal-text-input.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-text-input.types.d.ts","sourceRoot":"","sources":["../../../../../projects/keep-ui/src/lib/components/signal-text-input/signal-text-input.types.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5D;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,OAAO,GACP,KAAK,GACL,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,KAAK,GACL,MAAM,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { SignalTextareaResize, SignalTextareaWidth } from './signal-textarea.types';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Signal-based accessible textarea component with character counter,
|
|
5
|
+
* resize control, and integrated error display.
|
|
6
|
+
*
|
|
7
|
+
* The `value` and `touched` properties are `model()` signals so the component
|
|
8
|
+
* integrates seamlessly with Angular signal-based forms.
|
|
9
|
+
*
|
|
10
|
+
* ```html
|
|
11
|
+
* <keepui-signal-textarea
|
|
12
|
+
* label="Descripción"
|
|
13
|
+
* placeholder="Escribe aquí…"
|
|
14
|
+
* [rows]="5"
|
|
15
|
+
* [maxLength]="500"
|
|
16
|
+
* [(value)]="description"
|
|
17
|
+
* />
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare class SignalTextareaComponent {
|
|
21
|
+
/** Optional label text rendered above the textarea. */
|
|
22
|
+
readonly label: import("@angular/core").InputSignal<string>;
|
|
23
|
+
/** Placeholder passed to the underlying `<textarea>`. */
|
|
24
|
+
readonly placeholder: import("@angular/core").InputSignal<string>;
|
|
25
|
+
/** Number of visible text rows. @default 4 */
|
|
26
|
+
readonly rows: import("@angular/core").InputSignal<number>;
|
|
27
|
+
/** Layout width of the wrapper. @default 'full' */
|
|
28
|
+
readonly width: import("@angular/core").InputSignal<SignalTextareaWidth>;
|
|
29
|
+
/** CSS `resize` behaviour. @default 'none' */
|
|
30
|
+
readonly resize: import("@angular/core").InputSignal<SignalTextareaResize>;
|
|
31
|
+
/** Marks the field as required. @default false */
|
|
32
|
+
readonly required: import("@angular/core").InputSignal<boolean>;
|
|
33
|
+
/** Human-readable error message. Takes precedence over `errors[0]`. */
|
|
34
|
+
readonly errorMessage: import("@angular/core").InputSignal<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Array of error strings. The first item is displayed when `errorMessage` is empty.
|
|
37
|
+
* Set together with `invalid=true` to trigger the error state.
|
|
38
|
+
*/
|
|
39
|
+
readonly errors: import("@angular/core").InputSignal<readonly string[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Stable `id` used to link the `<label>` with the `<textarea>`.
|
|
42
|
+
* A random suffix is generated by default.
|
|
43
|
+
*/
|
|
44
|
+
readonly textareaId: import("@angular/core").InputSignal<string>;
|
|
45
|
+
/** Disables the textarea. @default false */
|
|
46
|
+
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
47
|
+
/** Maximum number of characters allowed. Shows a character counter when set. */
|
|
48
|
+
readonly maxLength: import("@angular/core").InputSignal<number | undefined>;
|
|
49
|
+
/**
|
|
50
|
+
* Forces the error visual state regardless of the `touched` model.
|
|
51
|
+
* Useful for external form validation. @default false
|
|
52
|
+
*/
|
|
53
|
+
readonly invalid: import("@angular/core").InputSignal<boolean>;
|
|
54
|
+
/** Current text value. Use `[(value)]` for two-way binding. */
|
|
55
|
+
readonly value: import("@angular/core").ModelSignal<string>;
|
|
56
|
+
/** Whether the control has been interacted with. Use `[(touched)]` for two-way binding. */
|
|
57
|
+
readonly touched: import("@angular/core").ModelSignal<boolean>;
|
|
58
|
+
protected readonly errorId: import("@angular/core").Signal<string>;
|
|
59
|
+
protected readonly charCountId: import("@angular/core").Signal<string>;
|
|
60
|
+
protected readonly charCount: import("@angular/core").Signal<number>;
|
|
61
|
+
protected readonly showError: import("@angular/core").Signal<boolean>;
|
|
62
|
+
protected readonly widthClass: import("@angular/core").Signal<string>;
|
|
63
|
+
protected readonly resizeClass: import("@angular/core").Signal<string>;
|
|
64
|
+
protected readonly textareaClasses: import("@angular/core").Signal<string>;
|
|
65
|
+
protected onInput(event: Event): void;
|
|
66
|
+
protected onBlur(): void;
|
|
67
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SignalTextareaComponent, never>;
|
|
68
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SignalTextareaComponent, "keepui-signal-textarea", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "resize": { "alias": "resize"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "textareaId": { "alias": "textareaId"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=signal-textarea.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-textarea.component.d.ts","sourceRoot":"","sources":["../../../../../projects/keep-ui/src/lib/components/signal-textarea/signal-textarea.component.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;;AAEpF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAoEa,uBAAuB;IAElC,uDAAuD;IACvD,QAAQ,CAAC,KAAK,8CAAqB;IAEnC,yDAAyD;IACzD,QAAQ,CAAC,WAAW,8CAAqB;IAEzC,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,8CAAoB;IAEjC,mDAAmD;IACnD,QAAQ,CAAC,KAAK,2DAAsC;IAEpD,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,4DAAuC;IAEtD,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,+CAAyB;IAE1C,uEAAuE;IACvE,QAAQ,CAAC,YAAY,8CAAqB;IAE1C;;;OAGG;IACH,QAAQ,CAAC,MAAM,yDAAgC;IAE/C;;;OAGG;IACH,QAAQ,CAAC,UAAU,8CAEjB;IAEF,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,+CAAyB;IAE1C,gFAAgF;IAChF,QAAQ,CAAC,SAAS,0DAAwC;IAE1D;;;OAGG;IACH,QAAQ,CAAC,OAAO,+CAAyB;IAEzC,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,8CAAqB;IAEnC,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,+CAAyB;IAEzC,SAAS,CAAC,QAAQ,CAAC,OAAO,yCAAgD;IAC1E,SAAS,CAAC,QAAQ,CAAC,WAAW,yCAAgD;IAE9E,SAAS,CAAC,QAAQ,CAAC,SAAS,yCAAuC;IAEnE,SAAS,CAAC,QAAQ,CAAC,SAAS,0CAI1B;IAEF,SAAS,CAAC,QAAQ,CAAC,UAAU,yCAO1B;IAEH,SAAS,CAAC,QAAQ,CAAC,WAAW,yCAQ3B;IAEH,SAAS,CAAC,QAAQ,CAAC,eAAe,yCAK/B;IAEH,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKrC,SAAS,CAAC,MAAM,IAAI,IAAI;yCAjGb,uBAAuB;2CAAvB,uBAAuB;CAoGnC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Layout width of the textarea wrapper. */
|
|
2
|
+
export type SignalTextareaWidth = 'full' | 'half' | 'auto';
|
|
3
|
+
/**
|
|
4
|
+
* CSS `resize` behaviour of the `<textarea>` element.
|
|
5
|
+
* - `none` → not resizable (default).
|
|
6
|
+
* - `vertical` → user can drag to resize vertically.
|
|
7
|
+
* - `horizontal` → user can drag to resize horizontally.
|
|
8
|
+
* - `both` → user can drag freely.
|
|
9
|
+
*/
|
|
10
|
+
export type SignalTextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
|
|
11
|
+
//# sourceMappingURL=signal-textarea.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-textarea.types.d.ts","sourceRoot":"","sources":["../../../../../projects/keep-ui/src/lib/components/signal-textarea/signal-textarea.types.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC"}
|
|
@@ -15,6 +15,10 @@ export interface KeepUiTranslationSchema {
|
|
|
15
15
|
previewAlt: string;
|
|
16
16
|
errorUnexpected: string;
|
|
17
17
|
};
|
|
18
|
+
signalTextInput: {
|
|
19
|
+
showPassword: string;
|
|
20
|
+
hidePassword: string;
|
|
21
|
+
};
|
|
18
22
|
}
|
|
19
23
|
/** Map from locale code to its translation object. */
|
|
20
24
|
export declare const KEEPUI_TRANSLATIONS: Record<KeepUiLanguage, KeepUiTranslationSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keep-ui-translations.d.ts","sourceRoot":"","sources":["../../../../projects/keep-ui/src/lib/i18n/keep-ui-translations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"keep-ui-translations.d.ts","sourceRoot":"","sources":["../../../../projects/keep-ui/src/lib/i18n/keep-ui-translations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,eAAe,EAAE;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAyCD,sDAAsD;AACtD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,cAAc,EAAE,uBAAuB,CAI/E,CAAC"}
|
|
@@ -18,6 +18,10 @@ export declare const KEEPUI_TRANSLATION_KEYS: {
|
|
|
18
18
|
readonly PREVIEW_ALT: "imagePreview.previewAlt";
|
|
19
19
|
readonly ERROR_UNEXPECTED: "imagePreview.errorUnexpected";
|
|
20
20
|
};
|
|
21
|
+
readonly SIGNAL_TEXT_INPUT: {
|
|
22
|
+
readonly SHOW_PASSWORD: "signalTextInput.showPassword";
|
|
23
|
+
readonly HIDE_PASSWORD: "signalTextInput.hidePassword";
|
|
24
|
+
};
|
|
21
25
|
};
|
|
22
26
|
/** Union of all supported KeepUI locales. */
|
|
23
27
|
export type KeepUiLanguage = 'en' | 'es' | 'de';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translation-keys.d.ts","sourceRoot":"","sources":["../../../../projects/keep-ui/src/lib/i18n/translation-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"translation-keys.d.ts","sourceRoot":"","sources":["../../../../projects/keep-ui/src/lib/i18n/translation-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;CAW1B,CAAC;AAEX,6CAA6C;AAC7C,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEhD,qDAAqD;AACrD,eAAO,MAAM,0BAA0B,EAAE,SAAS,cAAc,EAItD,CAAC"}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -4,8 +4,18 @@ export * from './lib/tokens/file.token';
|
|
|
4
4
|
export * from './lib/services/web-file.service';
|
|
5
5
|
export * from './lib/components/button/button.types';
|
|
6
6
|
export * from './lib/components/button/button.component';
|
|
7
|
+
export * from './lib/components/card/card.types';
|
|
7
8
|
export * from './lib/components/card/card.component';
|
|
9
|
+
export * from './lib/components/icon/icon.component';
|
|
10
|
+
export * from './lib/components/icon-action-button/icon-action-button.types';
|
|
11
|
+
export * from './lib/components/icon-action-button/icon-action-button.component';
|
|
8
12
|
export * from './lib/components/image-preview/image-preview.component';
|
|
13
|
+
export * from './lib/components/signal-dropdown/signal-dropdown.types';
|
|
14
|
+
export * from './lib/components/signal-dropdown/signal-dropdown.component';
|
|
15
|
+
export * from './lib/components/signal-text-input/signal-text-input.types';
|
|
16
|
+
export * from './lib/components/signal-text-input/signal-text-input.component';
|
|
17
|
+
export * from './lib/components/signal-textarea/signal-textarea.types';
|
|
18
|
+
export * from './lib/components/signal-textarea/signal-textarea.component';
|
|
9
19
|
export * from './lib/providers/provide-keep-ui';
|
|
10
20
|
export * from './lib/providers/keep-ui-i18n.provider';
|
|
11
21
|
export * from './lib/i18n/translation-keys';
|
package/public-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../projects/keep-ui/src/public-api.ts"],"names":[],"mappings":"AAGA,cAAc,gCAAgC,CAAC;AAG/C,cAAc,uBAAuB,CAAC;AAGtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,iCAAiC,CAAC;AAGhD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wDAAwD,CAAC;
|
|
1
|
+
{"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../projects/keep-ui/src/public-api.ts"],"names":[],"mappings":"AAGA,cAAc,gCAAgC,CAAC;AAG/C,cAAc,uBAAuB,CAAC;AAGtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,iCAAiC,CAAC;AAGhD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,8DAA8D,CAAC;AAC7E,cAAc,kEAAkE,CAAC;AACjF,cAAc,wDAAwD,CAAC;AACvE,cAAc,wDAAwD,CAAC;AACvE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,4DAA4D,CAAC;AAC3E,cAAc,gEAAgE,CAAC;AAC/E,cAAc,wDAAwD,CAAC;AACvE,cAAc,4DAA4D,CAAC;AAG3E,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AAGxD,cAAc,iCAAiC,CAAC"}
|
package/styles/index.css
CHANGED
|
@@ -57,10 +57,20 @@
|
|
|
57
57
|
* @source inline() declares all Tailwind classes used by KeepUI components
|
|
58
58
|
* explicitly — the string must be on a SINGLE LINE (CSS string literal rule).
|
|
59
59
|
*/
|
|
60
|
-
@source inline("inline-flex items-center justify-center gap-2 min-h-[2.75rem] text-sm font-medium cursor-pointer select-none transition-colors duration-200 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ku-primary-border focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed w-full h-10 px-4 w-40 px-6 rounded-full rounded-2xl rounded-lg bg-ku-primary text-ku-primary-text border border-ku-primary-border enabled:hover:bg-ku-primary-hover enabled:hover:border-ku-primary-border enabled:active:bg-ku-primary-hover enabled:active:border-ku-primary-border bg-ku-secondary text-ku-secondary-text border-ku-secondary-border enabled:hover:bg-ku-secondary-hover enabled:hover:border-ku-gray-border disabled:text-ku-gray-text bg-transparent text-ku-brand-text enabled:hover:border-ku-primary-border enabled:hover:text-ku-brand-text bg-ku-primary/10 enabled:hover:bg-ku-primary/10 bg-ku-red-bg text-ku-red-text border-ku-red-border enabled:hover:opacity-90 enabled:active:opacity-80 p-4 shadow-sm shadow shadow-lg flex flex-col gap-4 max-w-full h-auto m-0 block sr-only bg-ku-gray-bg border-ku-gray-border text-ku-gray-text bg-ku-brand-bg border-ku-brand-border text-ku-brand-text bg-ku-indigo-bg border-ku-indigo-border text-ku-indigo-text bg-ku-blue-bg border-ku-blue-border text-ku-blue-text bg-ku-pink-bg border-ku-pink-border text-ku-pink-text bg-ku-orange-bg border-ku-orange-border text-ku-orange-text bg-ku-yellow-bg border-ku-yellow-border text-ku-yellow-text bg-ku-green-bg border-ku-green-border text-ku-green-text bg-ku-purple-bg border-ku-purple-border text-ku-purple-text bg-ku-teal-bg border-ku-teal-border text-ku-teal-text bg-ku-red-bg border-ku-red-border text-ku-red-text
|
|
60
|
+
@source inline("inline-flex items-center justify-center gap-2 min-h-[2.75rem] min-w-[2.75rem] text-sm font-medium cursor-pointer select-none transition-colors duration-200 transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ku-primary-border focus-visible:ring-ku-action-primary focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed w-full w-1/2 w-auto h-10 px-4 w-40 px-6 rounded-full rounded-2xl rounded-lg rounded-xl bg-ku-action-primary border-ku-action-primary text-ku-action-primary bg-ku-action-background text-ku-error-primary bg-ku-error-primary border-ku-error-primary bg-ku-error-background text-ku-success-primary bg-ku-success-primary border-ku-success-primary bg-ku-success-background text-ku-warning-primary bg-ku-warning-primary border-ku-warning-primary bg-ku-warning-background bg-ku-primary text-ku-primary-text border border-ku-primary-border border-ku-secondary-border focus-visible:border-ku-action-primary enabled:hover:bg-ku-primary-hover enabled:hover:border-ku-primary-border enabled:active:bg-ku-primary-hover enabled:active:border-ku-primary-border bg-ku-secondary text-ku-secondary-text border-ku-secondary-border enabled:hover:bg-ku-secondary-hover enabled:hover:border-ku-gray-border disabled:text-ku-gray-text bg-transparent text-ku-brand-text enabled:hover:border-ku-primary-border enabled:hover:text-ku-brand-text bg-ku-primary/10 enabled:hover:bg-ku-primary/10 bg-ku-red-bg text-ku-red-text border-ku-red-border enabled:hover:opacity-90 enabled:active:opacity-80 p-4 p-3 shadow-sm shadow shadow-lg flex flex-col gap-4 gap-1 gap-1.5 gap-2 gap-3 max-w-full h-auto m-0 block sr-only bg-ku-gray-bg border-ku-gray-border text-ku-gray-text bg-ku-brand-bg border-ku-brand-border text-ku-brand-text bg-ku-indigo-bg border-ku-indigo-border text-ku-indigo-text bg-ku-blue-bg border-ku-blue-border text-ku-blue-text bg-ku-pink-bg border-ku-pink-border text-ku-pink-text bg-ku-orange-bg border-ku-orange-border text-ku-orange-text bg-ku-yellow-bg border-ku-yellow-border text-ku-yellow-text bg-ku-green-bg border-ku-green-border text-ku-green-text bg-ku-purple-bg border-ku-purple-border text-ku-purple-text bg-ku-teal-bg border-ku-teal-border text-ku-teal-text bg-ku-red-bg border-ku-red-border text-ku-red-text overflow-hidden transition-colors border-ku-brand-border hover:bg-ku-primary-hover focus:outline-none focus-visible:ring-ku-brand-border h-full h-4 shrink-0 overflow-y-auto overflow-x-auto p-6 px-4 pt-4 relative absolute left-3 right-1 right-3 pointer-events-none pl-4 pl-9 pr-4 pr-10 pr-24 py-2.5 py-0.5 placeholder:text-ku-gray-text outline-none dark:[color-scheme:dark] hover:text-ku-primary-text truncate flex-1 flex-wrap justify-between min-w-0 text-[11px] text-xs px-2 z-[1000] max-h-64 shadow-lg hover:bg-ku-primary-hover focus-visible:bg-ku-primary-hover bg-ku-primary-hover rotate-180 resize-none resize-y resize-x resize aria-live-polite ml-auto gap-2 items-start justify-start opacity-70");
|
|
61
61
|
|
|
62
62
|
@theme inline {
|
|
63
63
|
|
|
64
|
+
/* ── Action / Feedback tokens ── */
|
|
65
|
+
--color-ku-action-primary: var(--ku-action-primary);
|
|
66
|
+
--color-ku-action-background: var(--ku-action-background);
|
|
67
|
+
--color-ku-success-primary: var(--ku-success-primary);
|
|
68
|
+
--color-ku-success-background: var(--ku-success-background);
|
|
69
|
+
--color-ku-error-primary: var(--ku-error-primary);
|
|
70
|
+
--color-ku-error-background: var(--ku-error-background);
|
|
71
|
+
--color-ku-warning-primary: var(--ku-warning-primary);
|
|
72
|
+
--color-ku-warning-background: var(--ku-warning-background);
|
|
73
|
+
|
|
64
74
|
/* ── Primary surface ── */
|
|
65
75
|
--color-ku-primary: var(--ku-primary);
|
|
66
76
|
--color-ku-primary-hover: var(--ku-primary-hover);
|
package/styles/prebuilt.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fixed{position:fixed}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.left-0{left:calc(var(--spacing) * 0)}.z-30{z-index:30}.z-40{z-index:40}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-auto{margin-inline:auto}.mt-0{margin-top:calc(var(--spacing) * 0)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mb-0{margin-bottom:calc(var(--spacing) * 0)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-52{height:calc(var(--spacing) * 52)}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.min-h-\[2\.75rem\]{min-height:2.75rem}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-40{width:calc(var(--spacing) * 40)}.w-64{width:calc(var(--spacing) * 64)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-full{max-width:100%}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[2\.75rem\]{min-width:2.75rem}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-8{gap:calc(var(--spacing) * 8)}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-ku-blue-border{border-color:var(--ku-blue-border)}.border-ku-brand-border{border-color:var(--ku-brand-border)}.border-ku-gray-border{border-color:var(--ku-gray-border)}.border-ku-green-border{border-color:var(--ku-green-border)}.border-ku-indigo-border{border-color:var(--ku-indigo-border)}.border-ku-orange-border{border-color:var(--ku-orange-border)}.border-ku-pink-border{border-color:var(--ku-pink-border)}.border-ku-primary-border{border-color:var(--ku-primary-border)}.border-ku-purple-border{border-color:var(--ku-purple-border)}.border-ku-red-border{border-color:var(--ku-red-border)}.border-ku-secondary-border{border-color:var(--ku-secondary-border)}.border-ku-teal-border{border-color:var(--ku-teal-border)}.border-ku-yellow-border{border-color:var(--ku-yellow-border)}.\!bg-ku-primary-hover{background-color:var(--ku-primary-hover)!important}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-ku-blue-bg{background-color:var(--ku-blue-bg)}.bg-ku-brand-bg{background-color:var(--ku-brand-bg)}.bg-ku-gray-bg{background-color:var(--ku-gray-bg)}.bg-ku-green-bg{background-color:var(--ku-green-bg)}.bg-ku-indigo-bg{background-color:var(--ku-indigo-bg)}.bg-ku-orange-bg{background-color:var(--ku-orange-bg)}.bg-ku-pink-bg{background-color:var(--ku-pink-bg)}.bg-ku-primary{background-color:var(--ku-primary)}.bg-ku-primary-hover{background-color:var(--ku-primary-hover)}.bg-ku-purple-bg{background-color:var(--ku-purple-bg)}.bg-ku-red-bg{background-color:var(--ku-red-bg)}.bg-ku-secondary{background-color:var(--ku-secondary)}.bg-ku-secondary-hover{background-color:var(--ku-secondary-hover)}.bg-ku-teal-bg{background-color:var(--ku-teal-bg)}.bg-ku-yellow-bg{background-color:var(--ku-yellow-bg)}.bg-transparent{background-color:#0000}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.\!text-ku-primary-text{color:var(--ku-primary-text)!important}.text-ku-blue-text{color:var(--ku-blue-text)}.text-ku-brand-text{color:var(--ku-brand-text)}.text-ku-gray-text{color:var(--ku-gray-text)}.text-ku-green-text{color:var(--ku-green-text)}.text-ku-indigo-text{color:var(--ku-indigo-text)}.text-ku-orange-text{color:var(--ku-orange-text)}.text-ku-pink-text{color:var(--ku-pink-text)}.text-ku-primary-text{color:var(--ku-primary-text)}.text-ku-purple-text{color:var(--ku-purple-text)}.text-ku-red-text{color:var(--ku-red-text)}.text-ku-secondary-text{color:var(--ku-secondary-text)}.text-ku-teal-text{color:var(--ku-teal-text)}.text-ku-yellow-text{color:var(--ku-yellow-text)}.uppercase{text-transform:uppercase}.no-underline{text-decoration-line:none}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:gap-2:is(:where(.group):hover *){gap:calc(var(--spacing) * 2)}}.first\:mt-1\.5:first-child{margin-top:calc(var(--spacing) * 1.5)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}@media (hover:hover){.hover\:border-ku-primary-border:hover{border-color:var(--ku-primary-border)}.hover\:bg-ku-primary-hover:hover{background-color:var(--ku-primary-hover)}.hover\:bg-ku-secondary-hover:hover{background-color:var(--ku-secondary-hover)}.hover\:text-ku-primary-text:hover{color:var(--ku-primary-text)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ku-brand-border:focus-visible{--tw-ring-color:var(--ku-brand-border)}.focus-visible\:ring-ku-primary-border:focus-visible{--tw-ring-color:var(--ku-primary-border)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}@media (hover:hover){.enabled\:hover\:border-ku-gray-border:enabled:hover{border-color:var(--ku-gray-border)}.enabled\:hover\:border-ku-primary-border:enabled:hover{border-color:var(--ku-primary-border)}.enabled\:hover\:bg-ku-primary-hover:enabled:hover{background-color:var(--ku-primary-hover)}.enabled\:hover\:bg-ku-primary\/10:enabled:hover{background-color:var(--ku-primary)}@supports (color:color-mix(in lab, red, red)){.enabled\:hover\:bg-ku-primary\/10:enabled:hover{background-color:color-mix(in oklab, var(--ku-primary) 10%, transparent)}}.enabled\:hover\:bg-ku-secondary-hover:enabled:hover{background-color:var(--ku-secondary-hover)}.enabled\:hover\:text-ku-brand-text:enabled:hover{color:var(--ku-brand-text)}.enabled\:hover\:opacity-90:enabled:hover{opacity:.9}}.enabled\:active\:border-ku-primary-border:enabled:active{border-color:var(--ku-primary-border)}.enabled\:active\:bg-ku-primary-hover:enabled:active{background-color:var(--ku-primary-hover)}.enabled\:active\:opacity-80:enabled:active{opacity:.8}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:text-ku-gray-text:disabled{color:var(--ku-gray-text)}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:48rem){.md\:static{position:static}.md\:inset-auto{inset:auto}.md\:z-auto{z-index:auto}.md\:hidden{display:none}.md\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.md\:p-10{padding:calc(var(--spacing) * 10)}}@media (min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}:root{--ku-primary:#f9f9f9;--ku-primary-hover:#e2e3e8;--ku-primary-text:#171717;--ku-primary-border:#e2e3e8;--ku-secondary:#fff;--ku-secondary-hover:#f9f9f9;--ku-secondary-text:#171717;--ku-secondary-border:#e2e3e8;--ku-gray-bg:#f5f5f5;--ku-gray-border:#d5d7da;--ku-gray-text:#6b7280;--ku-brand-bg:#f9f5ff;--ku-brand-border:#d6bbfb;--ku-brand-text:#6941c6;--ku-indigo-bg:#eef4ff;--ku-indigo-border:#c7d7fe;--ku-indigo-text:#3538cd;--ku-blue-bg:#eff8ff;--ku-blue-border:#b2ddff;--ku-blue-text:#175cd3;--ku-pink-bg:#fdf2fa;--ku-pink-border:#fcceee;--ku-pink-text:#c11574;--ku-orange-bg:#fff6ed;--ku-orange-border:#f9dbaf;--ku-orange-text:#b93815;--ku-yellow-bg:#fefbe8;--ku-yellow-border:#fedf89;--ku-yellow-text:#a15c07;--ku-green-bg:#ecfdf3;--ku-green-border:#abefc6;--ku-green-text:#067647;--ku-purple-bg:#f4f3ff;--ku-purple-border:#d9d6fe;--ku-purple-text:#5925dc;--ku-teal-bg:#f0fdfa;--ku-teal-border:#99f6e4;--ku-teal-text:#0f766e;--ku-red-bg:#fff1f2;--ku-red-border:#fecdd3;--ku-red-text:#b91c1c}[data-theme=dark],.dark{--ku-primary:#050505;--ku-primary-hover:#2c2d31;--ku-primary-text:#fff;--ku-primary-border:#2c2d31;--ku-secondary:#15161a;--ku-secondary-hover:#2c2d31;--ku-secondary-text:#fff;--ku-secondary-border:#2c2d31;--ku-gray-bg:#1f2937;--ku-gray-border:#4b5563;--ku-gray-text:#9ca3af;--ku-brand-bg:#2e1065;--ku-brand-border:#7c3aed;--ku-brand-text:#c4b5fd;--ku-indigo-bg:#1e1b4b;--ku-indigo-border:#4338ca;--ku-indigo-text:#a5b4fc;--ku-blue-bg:#0c1d3e;--ku-blue-border:#2563eb;--ku-blue-text:#93c5fd;--ku-pink-bg:#3d0b2f;--ku-pink-border:#db2777;--ku-pink-text:#f9a8d4;--ku-orange-bg:#2c1204;--ku-orange-border:#ea580c;--ku-orange-text:#fdba74;--ku-yellow-bg:#2c1f02;--ku-yellow-border:#ca8a04;--ku-yellow-text:#fde047;--ku-green-bg:#052e16;--ku-green-border:#16a34a;--ku-green-text:#4ade80;--ku-purple-bg:#1c1040;--ku-purple-border:#6d28d9;--ku-purple-text:#c4b5fd;--ku-teal-bg:#042a28;--ku-teal-border:#0d9488;--ku-teal-text:#2dd4bf;--ku-red-bg:#2d0b0b;--ku-red-border:#dc2626;--ku-red-text:#fca5a5;--spacing-xs:4px;--spacing-sm:8px;--spacing-md:16px;--spacing-lg:24px;--spacing-xl:32px;--spacing-2xl:48px;--spacing-3xl:64px;--spacing-4xl:96px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-2xl:24px;--radius-full:9999px;--shadow-sm:0 1px 2px 0 #0000000d;--shadow:1px 1px 12px 0 #0006;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -1px #0000000f;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -2px #0000000d;--shadow-xl:0 20px 25px -5px #0000001a, 0 10px 10px -5px #0000000a;--shadow-2xl:0 25px 50px -12px #00000040;--z-index-base:0;--z-index-dropdown:1000;--z-index-sticky:1020;--z-index-fixed:1030;--z-index-modal-backdrop:1040;--z-index-modal:1050;--z-index-popover:1060;--z-index-tooltip:1070}@media (prefers-color-scheme:dark){:root:not([data-theme=light]):not(.light){--ku-gray-bg:#1f2937;--ku-gray-border:#4b5563;--ku-gray-text:#9ca3af;--ku-brand-bg:#2e1065;--ku-brand-border:#7c3aed;--ku-brand-text:#c4b5fd;--ku-indigo-bg:#1e1b4b;--ku-indigo-border:#4338ca;--ku-indigo-text:#a5b4fc;--ku-blue-bg:#0c1d3e;--ku-blue-border:#2563eb;--ku-blue-text:#93c5fd;--ku-pink-bg:#3d0b2f;--ku-pink-border:#db2777;--ku-pink-text:#f9a8d4;--ku-orange-bg:#2c1204;--ku-orange-border:#ea580c;--ku-orange-text:#fdba74;--ku-yellow-bg:#2c1f02;--ku-yellow-border:#ca8a04;--ku-yellow-text:#fde047;--ku-green-bg:#052e16;--ku-green-border:#16a34a;--ku-green-text:#4ade80;--ku-purple-bg:#1c1040;--ku-purple-border:#6d28d9;--ku-purple-text:#c4b5fd;--ku-teal-bg:#042a28;--ku-teal-border:#0d9488;--ku-teal-text:#2dd4bf;--ku-red-bg:#2d0b0b;--ku-red-border:#dc2626;--ku-red-text:#fca5a5}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.right-1{right:calc(var(--spacing) * 1)}.right-3{right:calc(var(--spacing) * 3)}.left-0{left:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.z-30{z-index:30}.z-40{z-index:40}.z-\[1000\]{z-index:1000}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-auto{margin-inline:auto}.mt-0{margin-top:calc(var(--spacing) * 0)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mb-0{margin-bottom:calc(var(--spacing) * 0)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-52{height:calc(var(--spacing) * 52)}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-64{max-height:calc(var(--spacing) * 64)}.min-h-\[2\.75rem\]{min-height:2.75rem}.w-1\/2{width:50%}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-40{width:calc(var(--spacing) * 40)}.w-64{width:calc(var(--spacing) * 64)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[2\.75rem\]{min-width:2.75rem}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-x{resize:horizontal}.resize-y{resize:vertical}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-ku-action-primary{border-color:var(--ku-action-primary)}.border-ku-brand-border{border-color:var(--ku-brand-border)}.border-ku-error-primary{border-color:var(--ku-error-primary)}.border-ku-primary-border{border-color:var(--ku-primary-border)}.border-ku-secondary-border{border-color:var(--ku-secondary-border)}.\!bg-ku-primary-hover{background-color:var(--ku-primary-hover)!important}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-ku-action-background{background-color:var(--ku-action-background)}.bg-ku-action-primary{background-color:var(--ku-action-primary)}.bg-ku-error-primary{background-color:var(--ku-error-primary)}.bg-ku-primary{background-color:var(--ku-primary)}.bg-ku-primary-hover{background-color:var(--ku-primary-hover)}.bg-ku-secondary{background-color:var(--ku-secondary)}.bg-transparent{background-color:#0000}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pr-24{padding-right:calc(var(--spacing) * 24)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.\!text-ku-primary-text{color:var(--ku-primary-text)!important}.text-ku-action-primary{color:var(--ku-action-primary)}.text-ku-brand-text{color:var(--ku-brand-text)}.text-ku-error-primary{color:var(--ku-error-primary)}.text-ku-gray-text{color:var(--ku-gray-text)}.text-ku-primary-text{color:var(--ku-primary-text)}.text-ku-red-text{color:var(--ku-red-text)}.text-ku-secondary-text{color:var(--ku-secondary-text)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.no-underline{text-decoration-line:none}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:gap-2:is(:where(.group):hover *){gap:calc(var(--spacing) * 2)}}.placeholder\:text-ku-gray-text::placeholder{color:var(--ku-gray-text)}.first\:mt-1\.5:first-child{margin-top:calc(var(--spacing) * 1.5)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}@media (hover:hover){.hover\:border-ku-primary-border:hover{border-color:var(--ku-primary-border)}.hover\:bg-ku-primary-hover:hover{background-color:var(--ku-primary-hover)}.hover\:bg-ku-secondary-hover:hover{background-color:var(--ku-secondary-hover)}.hover\:text-ku-primary-text:hover{color:var(--ku-primary-text)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-ku-action-primary:focus-visible{border-color:var(--ku-action-primary)}.focus-visible\:bg-ku-primary-hover:focus-visible{background-color:var(--ku-primary-hover)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ku-action-primary:focus-visible{--tw-ring-color:var(--ku-action-primary)}.focus-visible\:ring-ku-brand-border:focus-visible{--tw-ring-color:var(--ku-brand-border)}.focus-visible\:ring-ku-primary-border:focus-visible{--tw-ring-color:var(--ku-primary-border)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}@media (hover:hover){.enabled\:hover\:border-ku-action-primary:enabled:hover{border-color:var(--ku-action-primary)}.enabled\:hover\:border-ku-error-primary:enabled:hover{border-color:var(--ku-error-primary)}.enabled\:hover\:bg-ku-action-background:enabled:hover{background-color:var(--ku-action-background)}.enabled\:hover\:bg-ku-error-background:enabled:hover{background-color:var(--ku-error-background)}.enabled\:hover\:text-ku-action-primary:enabled:hover{color:var(--ku-action-primary)}.enabled\:hover\:text-ku-error-primary:enabled:hover{color:var(--ku-error-primary)}.enabled\:hover\:opacity-90:enabled:hover{opacity:.9}}.enabled\:active\:opacity-80:enabled:active{opacity:.8}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:48rem){.md\:static{position:static}.md\:inset-auto{inset:auto}.md\:z-auto{z-index:auto}.md\:hidden{display:none}.md\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.md\:p-10{padding:calc(var(--spacing) * 10)}}@media (min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (prefers-color-scheme:dark){.dark\:\[color-scheme\:dark\]{color-scheme:dark}}}:root{--ku-action-primary:#007bff;--ku-action-background:#007bff33;--ku-success-primary:#5abf68;--ku-success-background:#5abf6833;--ku-error-primary:#de695e;--ku-error-background:#de695e33;--ku-warning-primary:#e59928;--ku-warning-background:#e5992833;--ku-primary:#f9f9f9;--ku-primary-hover:#e2e3e8;--ku-primary-text:#171717;--ku-primary-border:#e2e3e8;--ku-secondary:#fff;--ku-secondary-hover:#f9f9f9;--ku-secondary-text:#171717;--ku-secondary-border:#e2e3e8;--ku-gray-bg:#f5f5f5;--ku-gray-border:#d5d7da;--ku-gray-text:#6b7280;--ku-brand-bg:#f9f5ff;--ku-brand-border:#d6bbfb;--ku-brand-text:#6941c6;--ku-indigo-bg:#eef4ff;--ku-indigo-border:#c7d7fe;--ku-indigo-text:#3538cd;--ku-blue-bg:#eff8ff;--ku-blue-border:#b2ddff;--ku-blue-text:#175cd3;--ku-pink-bg:#fdf2fa;--ku-pink-border:#fcceee;--ku-pink-text:#c11574;--ku-orange-bg:#fff6ed;--ku-orange-border:#f9dbaf;--ku-orange-text:#b93815;--ku-yellow-bg:#fefbe8;--ku-yellow-border:#fedf89;--ku-yellow-text:#a15c07;--ku-green-bg:#ecfdf3;--ku-green-border:#abefc6;--ku-green-text:#067647;--ku-purple-bg:#f4f3ff;--ku-purple-border:#d9d6fe;--ku-purple-text:#5925dc;--ku-teal-bg:#f0fdfa;--ku-teal-border:#99f6e4;--ku-teal-text:#0f766e;--ku-red-bg:#fff1f2;--ku-red-border:#fecdd3;--ku-red-text:#b91c1c}[data-theme=dark],.dark{--ku-action-primary:#007bff;--ku-action-background:#007bff33;--ku-success-primary:#5abf68;--ku-success-background:#5abf6833;--ku-error-primary:#de695e;--ku-error-background:#de695e33;--ku-warning-primary:#e59928;--ku-warning-background:#e5992833;--ku-primary:#050505;--ku-primary-hover:#2c2d31;--ku-primary-text:#fff;--ku-primary-border:#2c2d31;--ku-secondary:#15161a;--ku-secondary-hover:#2c2d31;--ku-secondary-text:#fff;--ku-secondary-border:#2c2d31;--ku-gray-bg:#1f2937;--ku-gray-border:#4b5563;--ku-gray-text:#9ca3af;--ku-brand-bg:#2e1065;--ku-brand-border:#7c3aed;--ku-brand-text:#c4b5fd;--ku-indigo-bg:#1e1b4b;--ku-indigo-border:#4338ca;--ku-indigo-text:#a5b4fc;--ku-blue-bg:#0c1d3e;--ku-blue-border:#2563eb;--ku-blue-text:#93c5fd;--ku-pink-bg:#3d0b2f;--ku-pink-border:#db2777;--ku-pink-text:#f9a8d4;--ku-orange-bg:#2c1204;--ku-orange-border:#ea580c;--ku-orange-text:#fdba74;--ku-yellow-bg:#2c1f02;--ku-yellow-border:#ca8a04;--ku-yellow-text:#fde047;--ku-green-bg:#052e16;--ku-green-border:#16a34a;--ku-green-text:#4ade80;--ku-purple-bg:#1c1040;--ku-purple-border:#6d28d9;--ku-purple-text:#c4b5fd;--ku-teal-bg:#042a28;--ku-teal-border:#0d9488;--ku-teal-text:#2dd4bf;--ku-red-bg:#2d0b0b;--ku-red-border:#dc2626;--ku-red-text:#fca5a5;--spacing-xs:4px;--spacing-sm:8px;--spacing-md:16px;--spacing-lg:24px;--spacing-xl:32px;--spacing-2xl:48px;--spacing-3xl:64px;--spacing-4xl:96px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-2xl:24px;--radius-full:9999px;--shadow-sm:0 1px 2px 0 #0000000d;--shadow:1px 1px 12px 0 #0006;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -1px #0000000f;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -2px #0000000d;--shadow-xl:0 20px 25px -5px #0000001a, 0 10px 10px -5px #0000000a;--shadow-2xl:0 25px 50px -12px #00000040;--z-index-base:0;--z-index-dropdown:1000;--z-index-sticky:1020;--z-index-fixed:1030;--z-index-modal-backdrop:1040;--z-index-modal:1050;--z-index-popover:1060;--z-index-tooltip:1070}@media (prefers-color-scheme:dark){:root:not([data-theme=light]):not(.light){--ku-action-primary:#007bff;--ku-action-background:#007bff33;--ku-success-primary:#5abf68;--ku-success-background:#5abf6833;--ku-error-primary:#de695e;--ku-error-background:#de695e33;--ku-warning-primary:#e59928;--ku-warning-background:#e5992833;--ku-gray-bg:#1f2937;--ku-gray-border:#4b5563;--ku-gray-text:#9ca3af;--ku-brand-bg:#2e1065;--ku-brand-border:#7c3aed;--ku-brand-text:#c4b5fd;--ku-indigo-bg:#1e1b4b;--ku-indigo-border:#4338ca;--ku-indigo-text:#a5b4fc;--ku-blue-bg:#0c1d3e;--ku-blue-border:#2563eb;--ku-blue-text:#93c5fd;--ku-pink-bg:#3d0b2f;--ku-pink-border:#db2777;--ku-pink-text:#f9a8d4;--ku-orange-bg:#2c1204;--ku-orange-border:#ea580c;--ku-orange-text:#fdba74;--ku-yellow-bg:#2c1f02;--ku-yellow-border:#ca8a04;--ku-yellow-text:#fde047;--ku-green-bg:#052e16;--ku-green-border:#16a34a;--ku-green-text:#4ade80;--ku-purple-bg:#1c1040;--ku-purple-border:#6d28d9;--ku-purple-text:#c4b5fd;--ku-teal-bg:#042a28;--ku-teal-border:#0d9488;--ku-teal-text:#2dd4bf;--ku-red-bg:#2d0b0b;--ku-red-border:#dc2626;--ku-red-text:#fca5a5}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|
package/styles/themes.css
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
/* ===== LIGHT THEME (default) ===== */
|
|
2
2
|
:root {
|
|
3
|
+
--ku-action-primary: #007BFF;
|
|
4
|
+
--ku-action-background: rgba(0, 123, 255, 0.2);
|
|
5
|
+
--ku-success-primary: #5ABF68;
|
|
6
|
+
--ku-success-background: rgba(90, 191, 104, 0.2);
|
|
7
|
+
--ku-error-primary: #DE695E;
|
|
8
|
+
--ku-error-background: rgba(222, 105, 94, 0.2);
|
|
9
|
+
--ku-warning-primary: #E59928;
|
|
10
|
+
--ku-warning-background: rgba(229, 153, 40, 0.2);
|
|
11
|
+
|
|
3
12
|
--ku-primary: #F9F9F9;
|
|
4
13
|
--ku-primary-hover: #E2E3E8;
|
|
5
14
|
--ku-primary-text: #171717;
|
|
@@ -59,6 +68,15 @@
|
|
|
59
68
|
/* ===== DARK THEME ===== */
|
|
60
69
|
[data-theme="dark"],
|
|
61
70
|
.dark {
|
|
71
|
+
--ku-action-primary: #007BFF;
|
|
72
|
+
--ku-action-background: rgba(0, 123, 255, 0.2);
|
|
73
|
+
--ku-success-primary: #5ABF68;
|
|
74
|
+
--ku-success-background: rgba(90, 191, 104, 0.2);
|
|
75
|
+
--ku-error-primary: #DE695E;
|
|
76
|
+
--ku-error-background: rgba(222, 105, 94, 0.2);
|
|
77
|
+
--ku-warning-primary: #E59928;
|
|
78
|
+
--ku-warning-background: rgba(229, 153, 40, 0.2);
|
|
79
|
+
|
|
62
80
|
--ku-primary: #050505;
|
|
63
81
|
--ku-primary-hover: #2C2D31;
|
|
64
82
|
--ku-primary-text: #FFFFFF;
|
|
@@ -165,6 +183,15 @@
|
|
|
165
183
|
/* ===== Auto dark (OS preference) ===== */
|
|
166
184
|
@media (prefers-color-scheme: dark) {
|
|
167
185
|
:root:not([data-theme="light"]):not(.light) {
|
|
186
|
+
--ku-action-primary: #007BFF;
|
|
187
|
+
--ku-action-background: rgba(0, 123, 255, 0.2);
|
|
188
|
+
--ku-success-primary: #5ABF68;
|
|
189
|
+
--ku-success-background: rgba(90, 191, 104, 0.2);
|
|
190
|
+
--ku-error-primary: #DE695E;
|
|
191
|
+
--ku-error-background: rgba(222, 105, 94, 0.2);
|
|
192
|
+
--ku-warning-primary: #E59928;
|
|
193
|
+
--ku-warning-background: rgba(229, 153, 40, 0.2);
|
|
194
|
+
|
|
168
195
|
/* ── Semantic color palette (dark) ── */
|
|
169
196
|
--ku-gray-bg: #1F2937;
|
|
170
197
|
--ku-gray-border: #4B5563;
|