@egose/shadcn-theme-ng 0.0.13 → 0.0.15
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/accordion/fesm2022/accordion.mjs +10 -10
- package/alert/fesm2022/alert.mjs +30 -30
- package/autocomplete/fesm2022/autocomplete.mjs +11 -11
- package/badge/fesm2022/badge.mjs +53 -53
- package/basic-alert/fesm2022/basic-alert.mjs +2 -2
- package/button/fesm2022/button.mjs +108 -108
- package/calendar/fesm2022/calendar.mjs +78 -78
- package/checkbox/README.md +64 -0
- package/checkbox/fesm2022/checkbox.mjs +146 -0
- package/checkbox/fesm2022/checkbox.mjs.map +1 -0
- package/checkbox/index.d.ts +55 -0
- package/confirmation-dialog/fesm2022/confirmation-dialog.mjs +10 -10
- package/date-picker/fesm2022/date-picker.mjs +11 -11
- package/dialog/fesm2022/dialog.mjs +9 -9
- package/exports.json +1 -1
- package/form-checkbox/README.md +64 -0
- package/form-checkbox/fesm2022/form-checkbox.mjs +134 -0
- package/form-checkbox/fesm2022/form-checkbox.mjs.map +1 -0
- package/form-checkbox/index.d.ts +26 -0
- package/form-date-picker/fesm2022/form-date-picker.mjs +9 -9
- package/form-field/fesm2022/form-field.mjs +3 -3
- package/form-field-simple/README.md +64 -0
- package/form-field-simple/fesm2022/form-field-simple.mjs +82 -0
- package/form-field-simple/fesm2022/form-field-simple.mjs.map +1 -0
- package/form-field-simple/index.d.ts +22 -0
- package/form-searchable-multiselect/fesm2022/form-searchable-multiselect.mjs +27 -20
- package/form-searchable-multiselect/fesm2022/form-searchable-multiselect.mjs.map +1 -1
- package/form-select/fesm2022/form-select.mjs +9 -9
- package/form-text-input/fesm2022/form-text-input.mjs +9 -9
- package/form-textarea/fesm2022/form-textarea.mjs +9 -9
- package/input/fesm2022/input.mjs +3 -3
- package/label/fesm2022/label.mjs +1 -1
- package/package.json +13 -1
- package/popover/fesm2022/popover.mjs +2 -2
- package/radio-group/fesm2022/radio-group.mjs +5 -5
- package/searchable-multiselect/fesm2022/searchable-multiselect.mjs +20 -20
- package/select/fesm2022/select.mjs +18 -18
- package/separator/fesm2022/separator.mjs +1 -1
- package/sonner/fesm2022/sonner.mjs +4 -4
- package/spinner/fesm2022/spinner.mjs +6 -6
- package/switch/fesm2022/switch.mjs +2 -2
- package/tabs/fesm2022/tabs.mjs +12 -12
- package/tooltip/fesm2022/tooltip.mjs +5 -5
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { forwardRef, input, computed, model, booleanAttribute, signal, output, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
+
import { provideIcons, NgIcon } from '@ng-icons/core';
|
|
5
|
+
import { lucideCheck } from '@ng-icons/lucide';
|
|
6
|
+
import { BrnCheckbox } from '@spartan-ng/brain/checkbox';
|
|
7
|
+
import { HlmIcon } from '@egose/shadcn-theme-ng/icon';
|
|
8
|
+
import { hlm } from '@egose/shadcn-theme-ng/utils';
|
|
9
|
+
|
|
10
|
+
const HLM_CHECKBOX_VALUE_ACCESSOR = {
|
|
11
|
+
provide: NG_VALUE_ACCESSOR,
|
|
12
|
+
useExisting: forwardRef(() => HlmCheckbox),
|
|
13
|
+
multi: true,
|
|
14
|
+
};
|
|
15
|
+
class HlmCheckbox {
|
|
16
|
+
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
17
|
+
_computedClass = computed(() => hlm('border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive shadow-xs peer size-4 shrink-0 cursor-default rounded-[4px] border outline-none transition-shadow focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50', this.userClass(), this._state().disabled() ? 'cursor-not-allowed opacity-50' : ''), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
18
|
+
/** Used to set the id on the underlying brn element. */
|
|
19
|
+
id = input(null, ...(ngDevMode ? [{ debugName: "id" }] : []));
|
|
20
|
+
/** Used to set the aria-label attribute on the underlying brn element. */
|
|
21
|
+
ariaLabel = input(null, ...(ngDevMode ? [{ debugName: "ariaLabel", alias: 'aria-label' }] : [{ alias: 'aria-label' }]));
|
|
22
|
+
/** Used to set the aria-labelledby attribute on the underlying brn element. */
|
|
23
|
+
ariaLabelledby = input(null, ...(ngDevMode ? [{ debugName: "ariaLabelledby", alias: 'aria-labelledby' }] : [{ alias: 'aria-labelledby' }]));
|
|
24
|
+
/** Used to set the aria-describedby attribute on the underlying brn element. */
|
|
25
|
+
ariaDescribedby = input(null, ...(ngDevMode ? [{ debugName: "ariaDescribedby", alias: 'aria-describedby' }] : [{ alias: 'aria-describedby' }]));
|
|
26
|
+
/** The checked state of the checkbox. */
|
|
27
|
+
checked = model(false, ...(ngDevMode ? [{ debugName: "checked" }] : []));
|
|
28
|
+
/** The name attribute of the checkbox. */
|
|
29
|
+
name = input(null, ...(ngDevMode ? [{ debugName: "name" }] : []));
|
|
30
|
+
/** Whether the checkbox is required. */
|
|
31
|
+
required = input(false, ...(ngDevMode ? [{ debugName: "required", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
32
|
+
/** Whether the checkbox is disabled. */
|
|
33
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
34
|
+
_state = computed(() => ({
|
|
35
|
+
disabled: signal(this.disabled()),
|
|
36
|
+
}), ...(ngDevMode ? [{ debugName: "_state" }] : []));
|
|
37
|
+
changed = output();
|
|
38
|
+
_onChange;
|
|
39
|
+
_onTouched;
|
|
40
|
+
_handleChange() {
|
|
41
|
+
if (this._state().disabled())
|
|
42
|
+
return;
|
|
43
|
+
const previousChecked = this.checked();
|
|
44
|
+
this.checked.set(previousChecked === 'indeterminate' ? true : !previousChecked);
|
|
45
|
+
this._onChange?.(!previousChecked);
|
|
46
|
+
this.changed.emit(!previousChecked);
|
|
47
|
+
}
|
|
48
|
+
/** CONTROL VALUE ACCESSOR */
|
|
49
|
+
writeValue(value) {
|
|
50
|
+
this.checked.set(!!value);
|
|
51
|
+
}
|
|
52
|
+
registerOnChange(fn) {
|
|
53
|
+
this._onChange = fn;
|
|
54
|
+
}
|
|
55
|
+
registerOnTouched(fn) {
|
|
56
|
+
this._onTouched = fn;
|
|
57
|
+
}
|
|
58
|
+
setDisabledState(isDisabled) {
|
|
59
|
+
this._state().disabled.set(isDisabled);
|
|
60
|
+
}
|
|
61
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
62
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: HlmCheckbox, isStandalone: true, selector: "hlm-checkbox", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", changed: "changed" }, host: { properties: { "attr.id": "null", "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.aria-describedby": "null", "attr.data-disabled": "_state().disabled() ? \"\" : null" }, classAttribute: "contents peer" }, providers: [HLM_CHECKBOX_VALUE_ACCESSOR], ngImport: i0, template: `
|
|
63
|
+
<brn-checkbox
|
|
64
|
+
[id]="id()"
|
|
65
|
+
[name]="name()"
|
|
66
|
+
[class]="_computedClass()"
|
|
67
|
+
[checked]="checked()"
|
|
68
|
+
[disabled]="_state().disabled()"
|
|
69
|
+
[required]="required()"
|
|
70
|
+
[aria-label]="ariaLabel()"
|
|
71
|
+
[aria-labelledby]="ariaLabelledby()"
|
|
72
|
+
[aria-describedby]="ariaDescribedby()"
|
|
73
|
+
(changed)="_handleChange()"
|
|
74
|
+
(touched)="_onTouched?.()"
|
|
75
|
+
>
|
|
76
|
+
@if (checked()) {
|
|
77
|
+
<span class="flex items-center justify-center text-current transition-none">
|
|
78
|
+
<ng-icon hlm size="14px" name="lucideCheck" />
|
|
79
|
+
</span>
|
|
80
|
+
}
|
|
81
|
+
</brn-checkbox>
|
|
82
|
+
`, isInline: true, dependencies: [{ kind: "component", type: BrnCheckbox, selector: "brn-checkbox", inputs: ["checked", "id", "name", "class", "aria-label", "aria-labelledby", "aria-describedby", "required", "disabled"], outputs: ["checkedChange", "changed", "touched"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: HlmIcon, selector: "ng-icon[hlm]", inputs: ["size"] }], viewProviders: [provideIcons({ lucideCheck })], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
83
|
+
}
|
|
84
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmCheckbox, decorators: [{
|
|
85
|
+
type: Component,
|
|
86
|
+
args: [{
|
|
87
|
+
selector: 'hlm-checkbox',
|
|
88
|
+
imports: [BrnCheckbox, NgIcon, HlmIcon],
|
|
89
|
+
template: `
|
|
90
|
+
<brn-checkbox
|
|
91
|
+
[id]="id()"
|
|
92
|
+
[name]="name()"
|
|
93
|
+
[class]="_computedClass()"
|
|
94
|
+
[checked]="checked()"
|
|
95
|
+
[disabled]="_state().disabled()"
|
|
96
|
+
[required]="required()"
|
|
97
|
+
[aria-label]="ariaLabel()"
|
|
98
|
+
[aria-labelledby]="ariaLabelledby()"
|
|
99
|
+
[aria-describedby]="ariaDescribedby()"
|
|
100
|
+
(changed)="_handleChange()"
|
|
101
|
+
(touched)="_onTouched?.()"
|
|
102
|
+
>
|
|
103
|
+
@if (checked()) {
|
|
104
|
+
<span class="flex items-center justify-center text-current transition-none">
|
|
105
|
+
<ng-icon hlm size="14px" name="lucideCheck" />
|
|
106
|
+
</span>
|
|
107
|
+
}
|
|
108
|
+
</brn-checkbox>
|
|
109
|
+
`,
|
|
110
|
+
host: {
|
|
111
|
+
class: 'contents peer',
|
|
112
|
+
'[attr.id]': 'null',
|
|
113
|
+
'[attr.aria-label]': 'null',
|
|
114
|
+
'[attr.aria-labelledby]': 'null',
|
|
115
|
+
'[attr.aria-describedby]': 'null',
|
|
116
|
+
'[attr.data-disabled]': '_state().disabled() ? "" : null',
|
|
117
|
+
},
|
|
118
|
+
providers: [HLM_CHECKBOX_VALUE_ACCESSOR],
|
|
119
|
+
viewProviders: [provideIcons({ lucideCheck })],
|
|
120
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
121
|
+
}]
|
|
122
|
+
}] });
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* Public API Surface of checkbox
|
|
126
|
+
*/
|
|
127
|
+
const HlmCheckboxImports = [HlmCheckbox];
|
|
128
|
+
class HlmCheckboxModule {
|
|
129
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmCheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
130
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.1", ngImport: i0, type: HlmCheckboxModule, imports: [HlmCheckbox], exports: [HlmCheckbox] });
|
|
131
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmCheckboxModule, imports: [HlmCheckboxImports] });
|
|
132
|
+
}
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmCheckboxModule, decorators: [{
|
|
134
|
+
type: NgModule,
|
|
135
|
+
args: [{
|
|
136
|
+
imports: [...HlmCheckboxImports],
|
|
137
|
+
exports: [...HlmCheckboxImports],
|
|
138
|
+
}]
|
|
139
|
+
}] });
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Generated bundle index. Do not edit.
|
|
143
|
+
*/
|
|
144
|
+
|
|
145
|
+
export { HLM_CHECKBOX_VALUE_ACCESSOR, HlmCheckbox, HlmCheckboxImports, HlmCheckboxModule };
|
|
146
|
+
//# sourceMappingURL=checkbox.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.mjs","sources":["../../../projects/checkbox/src/lib/checkbox.ts","../../../projects/checkbox/src/public-api.ts","../../../projects/checkbox/src/checkbox.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n ChangeDetectionStrategy,\n Component,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { lucideCheck } from '@ng-icons/lucide';\nimport { BrnCheckbox } from '@spartan-ng/brain/checkbox';\nimport type { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport { HlmIcon } from '@egose/shadcn-theme-ng/icon';\nimport { hlm } from '@egose/shadcn-theme-ng/utils';\nimport type { ClassValue } from 'clsx';\n\nexport const HLM_CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => HlmCheckbox),\n multi: true,\n};\n\n@Component({\n selector: 'hlm-checkbox',\n imports: [BrnCheckbox, NgIcon, HlmIcon],\n template: `\n <brn-checkbox\n [id]=\"id()\"\n [name]=\"name()\"\n [class]=\"_computedClass()\"\n [checked]=\"checked()\"\n [disabled]=\"_state().disabled()\"\n [required]=\"required()\"\n [aria-label]=\"ariaLabel()\"\n [aria-labelledby]=\"ariaLabelledby()\"\n [aria-describedby]=\"ariaDescribedby()\"\n (changed)=\"_handleChange()\"\n (touched)=\"_onTouched?.()\"\n >\n @if (checked()) {\n <span class=\"tw:flex tw:items-center tw:justify-center tw:text-current tw:transition-none\">\n <ng-icon hlm size=\"14px\" name=\"lucideCheck\" />\n </span>\n }\n </brn-checkbox>\n `,\n host: {\n class: 'contents peer',\n '[attr.id]': 'null',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[attr.aria-describedby]': 'null',\n '[attr.data-disabled]': '_state().disabled() ? \"\" : null',\n },\n providers: [HLM_CHECKBOX_VALUE_ACCESSOR],\n viewProviders: [provideIcons({ lucideCheck })],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HlmCheckbox implements ControlValueAccessor {\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(() =>\n hlm(\n 'tw:border-input tw:dark:bg-input/30 tw:data-[state=checked]:bg-primary tw:data-[state=checked]:text-primary-foreground tw:dark:data-[state=checked]:bg-primary tw:data-[state=checked]:border-primary tw:focus-visible:border-ring tw:focus-visible:ring-ring/50 tw:aria-invalid:ring-destructive/20 tw:dark:aria-invalid:ring-destructive/40 tw:aria-invalid:border-destructive tw:shadow-xs tw:peer tw:size-4 tw:shrink-0 tw:cursor-default tw:rounded-[4px] tw:border tw:outline-none tw:transition-shadow tw:focus-visible:ring-[3px] tw:disabled:cursor-not-allowed tw:disabled:opacity-50',\n this.userClass(),\n this._state().disabled() ? 'tw:cursor-not-allowed tw:opacity-50' : '',\n ),\n );\n\n /** Used to set the id on the underlying brn element. */\n public readonly id = input<string | null>(null);\n\n /** Used to set the aria-label attribute on the underlying brn element. */\n public readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n /** Used to set the aria-labelledby attribute on the underlying brn element. */\n public readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n /** Used to set the aria-describedby attribute on the underlying brn element. */\n public readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n\n /** The checked state of the checkbox. */\n public readonly checked = model<CheckboxValue>(false);\n\n /** The name attribute of the checkbox. */\n public readonly name = input<string | null>(null);\n\n /** Whether the checkbox is required. */\n public readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Whether the checkbox is disabled. */\n public readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n protected readonly _state = computed(() => ({\n disabled: signal(this.disabled()),\n }));\n\n public readonly changed = output<boolean>();\n\n protected _onChange?: ChangeFn<CheckboxValue>;\n protected _onTouched?: TouchFn;\n\n protected _handleChange(): void {\n if (this._state().disabled()) return;\n\n const previousChecked = this.checked();\n this.checked.set(previousChecked === 'indeterminate' ? true : !previousChecked);\n this._onChange?.(!previousChecked);\n this.changed.emit(!previousChecked);\n }\n\n /** CONTROL VALUE ACCESSOR */\n writeValue(value: CheckboxValue): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: ChangeFn<CheckboxValue>): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: TouchFn): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._state().disabled.set(isDisabled);\n }\n}\n\ntype CheckboxValue = boolean | 'indeterminate';\n","/*\n * Public API Surface of checkbox\n */\n\nimport { NgModule } from '@angular/core';\n\nimport { HlmCheckbox } from './lib/checkbox';\n\nexport * from './lib/checkbox';\n\nexport const HlmCheckboxImports = [HlmCheckbox] as const;\n@NgModule({\n imports: [...HlmCheckboxImports],\n exports: [...HlmCheckboxImports],\n})\nexport class HlmCheckboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { BooleanInput } from '@angular/cdk/coercion';
|
|
3
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
4
|
+
import { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';
|
|
5
|
+
import { ClassValue } from 'clsx';
|
|
6
|
+
|
|
7
|
+
declare const HLM_CHECKBOX_VALUE_ACCESSOR: {
|
|
8
|
+
provide: _angular_core.InjectionToken<readonly ControlValueAccessor[]>;
|
|
9
|
+
useExisting: _angular_core.Type<any>;
|
|
10
|
+
multi: boolean;
|
|
11
|
+
};
|
|
12
|
+
declare class HlmCheckbox implements ControlValueAccessor {
|
|
13
|
+
readonly userClass: _angular_core.InputSignal<ClassValue>;
|
|
14
|
+
protected readonly _computedClass: _angular_core.Signal<string>;
|
|
15
|
+
/** Used to set the id on the underlying brn element. */
|
|
16
|
+
readonly id: _angular_core.InputSignal<string | null>;
|
|
17
|
+
/** Used to set the aria-label attribute on the underlying brn element. */
|
|
18
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
19
|
+
/** Used to set the aria-labelledby attribute on the underlying brn element. */
|
|
20
|
+
readonly ariaLabelledby: _angular_core.InputSignal<string | null>;
|
|
21
|
+
/** Used to set the aria-describedby attribute on the underlying brn element. */
|
|
22
|
+
readonly ariaDescribedby: _angular_core.InputSignal<string | null>;
|
|
23
|
+
/** The checked state of the checkbox. */
|
|
24
|
+
readonly checked: _angular_core.ModelSignal<CheckboxValue>;
|
|
25
|
+
/** The name attribute of the checkbox. */
|
|
26
|
+
readonly name: _angular_core.InputSignal<string | null>;
|
|
27
|
+
/** Whether the checkbox is required. */
|
|
28
|
+
readonly required: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
29
|
+
/** Whether the checkbox is disabled. */
|
|
30
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
31
|
+
protected readonly _state: _angular_core.Signal<{
|
|
32
|
+
disabled: _angular_core.WritableSignal<boolean>;
|
|
33
|
+
}>;
|
|
34
|
+
readonly changed: _angular_core.OutputEmitterRef<boolean>;
|
|
35
|
+
protected _onChange?: ChangeFn<CheckboxValue>;
|
|
36
|
+
protected _onTouched?: TouchFn;
|
|
37
|
+
protected _handleChange(): void;
|
|
38
|
+
/** CONTROL VALUE ACCESSOR */
|
|
39
|
+
writeValue(value: CheckboxValue): void;
|
|
40
|
+
registerOnChange(fn: ChangeFn<CheckboxValue>): void;
|
|
41
|
+
registerOnTouched(fn: TouchFn): void;
|
|
42
|
+
setDisabledState(isDisabled: boolean): void;
|
|
43
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HlmCheckbox, never>;
|
|
44
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HlmCheckbox, "hlm-checkbox", never, { "userClass": { "alias": "class"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; "ariaDescribedby": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, never, true, never>;
|
|
45
|
+
}
|
|
46
|
+
type CheckboxValue = boolean | 'indeterminate';
|
|
47
|
+
|
|
48
|
+
declare const HlmCheckboxImports: readonly [typeof HlmCheckbox];
|
|
49
|
+
declare class HlmCheckboxModule {
|
|
50
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HlmCheckboxModule, never>;
|
|
51
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<HlmCheckboxModule, never, [typeof HlmCheckbox], [typeof HlmCheckbox]>;
|
|
52
|
+
static ɵinj: _angular_core.ɵɵInjectorDeclaration<HlmCheckboxModule>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { HLM_CHECKBOX_VALUE_ACCESSOR, HlmCheckbox, HlmCheckboxImports, HlmCheckboxModule };
|
|
@@ -17,16 +17,16 @@ class EgConfirmationDiaglog {
|
|
|
17
17
|
this._dialogRef.close(confirm);
|
|
18
18
|
}
|
|
19
19
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: EgConfirmationDiaglog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.1", type: EgConfirmationDiaglog, isStandalone: true, selector: "ng-component", host: { classAttribute: "
|
|
20
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.1", type: EgConfirmationDiaglog, isStandalone: true, selector: "ng-component", host: { classAttribute: "w-full p-1" }, providers: [provideIcons({ lucideTriangleAlert })], ngImport: i0, template: `
|
|
21
21
|
<hlm-dialog-header>
|
|
22
|
-
<div class="
|
|
22
|
+
<div class="flex items-center gap-1">
|
|
23
23
|
<ng-icon hlm hlmAlertIcon name="lucideTriangleAlert" size="base" />
|
|
24
|
-
<h3 hlmDialogTitle class="
|
|
24
|
+
<h3 hlmDialogTitle class="text-xl">{{ _title }}</h3>
|
|
25
25
|
</div>
|
|
26
|
-
<p hlmDialogDescription class="
|
|
26
|
+
<p hlmDialogDescription class="text-base text-gray-700">{{ _description }}</p>
|
|
27
27
|
</hlm-dialog-header>
|
|
28
28
|
|
|
29
|
-
<hlm-dialog-footer class="
|
|
29
|
+
<hlm-dialog-footer class="mt-4">
|
|
30
30
|
<button hlmButton variant="secondary" appearance="outline" (click)="close(false)">Cancel</button>
|
|
31
31
|
<button hlmButton variant="danger" (click)="close(true)">Confirm</button>
|
|
32
32
|
</hlm-dialog-footer>
|
|
@@ -40,20 +40,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
40
40
|
providers: [provideIcons({ lucideTriangleAlert })],
|
|
41
41
|
template: `
|
|
42
42
|
<hlm-dialog-header>
|
|
43
|
-
<div class="
|
|
43
|
+
<div class="flex items-center gap-1">
|
|
44
44
|
<ng-icon hlm hlmAlertIcon name="lucideTriangleAlert" size="base" />
|
|
45
|
-
<h3 hlmDialogTitle class="
|
|
45
|
+
<h3 hlmDialogTitle class="text-xl">{{ _title }}</h3>
|
|
46
46
|
</div>
|
|
47
|
-
<p hlmDialogDescription class="
|
|
47
|
+
<p hlmDialogDescription class="text-base text-gray-700">{{ _description }}</p>
|
|
48
48
|
</hlm-dialog-header>
|
|
49
49
|
|
|
50
|
-
<hlm-dialog-footer class="
|
|
50
|
+
<hlm-dialog-footer class="mt-4">
|
|
51
51
|
<button hlmButton variant="secondary" appearance="outline" (click)="close(false)">Cancel</button>
|
|
52
52
|
<button hlmButton variant="danger" (click)="close(true)">Confirm</button>
|
|
53
53
|
</hlm-dialog-footer>
|
|
54
54
|
`,
|
|
55
55
|
host: {
|
|
56
|
-
class: '
|
|
56
|
+
class: 'w-full p-1',
|
|
57
57
|
},
|
|
58
58
|
}]
|
|
59
59
|
}] });
|
|
@@ -35,7 +35,7 @@ let nextId$2 = 0;
|
|
|
35
35
|
class HlmDatePicker extends BrnFormFieldControl {
|
|
36
36
|
_config = injectHlmDatePickerConfig();
|
|
37
37
|
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
38
|
-
_computedClass = computed(() => hlm('
|
|
38
|
+
_computedClass = computed(() => hlm('ring-offset-background border-input bg-background hover:bg-input/50 dark:bg-input/10 dark:hover:bg-input/50 inline-flex h-9 w-full cursor-default items-center justify-between gap-2 whitespace-nowrap rounded-md border px-3 py-2 text-left text-sm font-normal transition-all disabled:pointer-events-none disabled:opacity-50', 'focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2', 'disabled:pointer-events-none disabled:opacity-50', '[&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0', this.userClass()), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
39
39
|
/** The id of the button that opens the date picker. */
|
|
40
40
|
buttonId = input(`hlm-date-picker-${nextId$2++}`, ...(ngDevMode ? [{ debugName: "buttonId" }] : []));
|
|
41
41
|
/** The minimum date that can be selected.*/
|
|
@@ -124,9 +124,9 @@ class HlmDatePicker extends BrnFormFieldControl {
|
|
|
124
124
|
<ng-icon hlm size="sm" name="lucideChevronDown" />
|
|
125
125
|
</button>
|
|
126
126
|
|
|
127
|
-
<div hlmPopoverContent class="
|
|
127
|
+
<div hlmPopoverContent class="w-auto p-0" *brnPopoverContent="let ctx">
|
|
128
128
|
<hlm-calendar
|
|
129
|
-
calendarClass="
|
|
129
|
+
calendarClass="border-0 rounded-none"
|
|
130
130
|
[date]="_mutableDate()"
|
|
131
131
|
[min]="min()"
|
|
132
132
|
[max]="max()"
|
|
@@ -170,9 +170,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
170
170
|
<ng-icon hlm size="sm" name="lucideChevronDown" />
|
|
171
171
|
</button>
|
|
172
172
|
|
|
173
|
-
<div hlmPopoverContent class="
|
|
173
|
+
<div hlmPopoverContent class="w-auto p-0" *brnPopoverContent="let ctx">
|
|
174
174
|
<hlm-calendar
|
|
175
|
-
calendarClass="
|
|
175
|
+
calendarClass="border-0 rounded-none"
|
|
176
176
|
[date]="_mutableDate()"
|
|
177
177
|
[min]="min()"
|
|
178
178
|
[max]="max()"
|
|
@@ -214,7 +214,7 @@ let nextId$1 = 0;
|
|
|
214
214
|
class HlmDatePickerMulti {
|
|
215
215
|
_config = injectHlmDatePickerMultiConfig();
|
|
216
216
|
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
217
|
-
_computedClass = computed(() => hlm('
|
|
217
|
+
_computedClass = computed(() => hlm('ring-offset-background border-input bg-background hover:bg-accent dark:bg-input/30 dark:hover:bg-input/50 inline-flex h-9 w-[280px] cursor-default items-center justify-between gap-2 whitespace-nowrap rounded-md border px-3 py-2 text-left text-sm font-normal transition-all disabled:pointer-events-none disabled:opacity-50', 'focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2', 'disabled:pointer-events-none disabled:opacity-50', '[&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0', this.userClass()), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
218
218
|
/** The id of the button that opens the date picker. */
|
|
219
219
|
buttonId = input(`hlm-date-picker-multi-${nextId$1++}`, ...(ngDevMode ? [{ debugName: "buttonId" }] : []));
|
|
220
220
|
/** The minimum date that can be selected.*/
|
|
@@ -396,7 +396,7 @@ let nextId = 0;
|
|
|
396
396
|
class HlmDateRangePicker {
|
|
397
397
|
_config = injectHlmDateRangePickerConfig();
|
|
398
398
|
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
399
|
-
_computedClass = computed(() => hlm('
|
|
399
|
+
_computedClass = computed(() => hlm('ring-offset-background border-input bg-background hover:bg-accent dark:bg-input/30 dark:hover:bg-input/50 inline-flex h-9 w-[280px] cursor-default items-center justify-between gap-2 whitespace-nowrap rounded-md border px-3 py-2 text-left text-sm font-normal transition-all disabled:pointer-events-none disabled:opacity-50', 'focus-visible:ring-ring focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2', 'disabled:pointer-events-none disabled:opacity-50', '[&_ng-icon]:pointer-events-none [&_ng-icon]:shrink-0', this.userClass()), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
400
400
|
/** The id of the button that opens the date picker. */
|
|
401
401
|
buttonId = input(`hlm-date-picker-range-${nextId++}`, ...(ngDevMode ? [{ debugName: "buttonId" }] : []));
|
|
402
402
|
/** The minimum date that can be selected.*/
|
|
@@ -507,9 +507,9 @@ class HlmDateRangePicker {
|
|
|
507
507
|
<ng-icon hlm size="sm" name="lucideChevronDown" />
|
|
508
508
|
</button>
|
|
509
509
|
|
|
510
|
-
<div hlmPopoverContent class="
|
|
510
|
+
<div hlmPopoverContent class="w-auto p-0" *brnPopoverContent="let ctx">
|
|
511
511
|
<hlm-calendar-range
|
|
512
|
-
calendarClass="
|
|
512
|
+
calendarClass="border-0 rounded-none"
|
|
513
513
|
[startDate]="_start()"
|
|
514
514
|
[endDate]="_end()"
|
|
515
515
|
[min]="min()"
|
|
@@ -553,9 +553,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
553
553
|
<ng-icon hlm size="sm" name="lucideChevronDown" />
|
|
554
554
|
</button>
|
|
555
555
|
|
|
556
|
-
<div hlmPopoverContent class="
|
|
556
|
+
<div hlmPopoverContent class="w-auto p-0" *brnPopoverContent="let ctx">
|
|
557
557
|
<hlm-calendar-range
|
|
558
|
-
calendarClass="
|
|
558
|
+
calendarClass="border-0 rounded-none"
|
|
559
559
|
[startDate]="_start()"
|
|
560
560
|
[endDate]="_end()"
|
|
561
561
|
[min]="min()"
|
|
@@ -9,7 +9,7 @@ import { NgIcon, provideIcons } from '@ng-icons/core';
|
|
|
9
9
|
import { lucideX } from '@ng-icons/lucide';
|
|
10
10
|
import { HlmIcon } from '@egose/shadcn-theme-ng/icon';
|
|
11
11
|
|
|
12
|
-
const hlmDialogOverlayClass = '
|
|
12
|
+
const hlmDialogOverlayClass = 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 bg-black/50';
|
|
13
13
|
class HlmDialogOverlay {
|
|
14
14
|
_classSettable = injectCustomClassSettable({ optional: true, host: true });
|
|
15
15
|
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
@@ -71,7 +71,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
71
71
|
|
|
72
72
|
class HlmDialogClose {
|
|
73
73
|
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
74
|
-
_computedClass = computed(() => hlm('
|
|
74
|
+
_computedClass = computed(() => hlm('ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground rounded-xs absolute right-4 top-4 flex items-center justify-center opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none [&_ng-icon]:shrink-0', this.userClass()), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
75
75
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmDialogClose, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
76
76
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: HlmDialogClose, isStandalone: true, selector: "[hlmDialogClose],[brnDialogClose][hlm]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()" } }, ngImport: i0 });
|
|
77
77
|
}
|
|
@@ -92,7 +92,7 @@ class HlmDialogContent {
|
|
|
92
92
|
component = this._dialogContext?.$component;
|
|
93
93
|
_dynamicComponentClass = this._dialogContext?.$dynamicComponentClass;
|
|
94
94
|
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
95
|
-
_computedClass = computed(() => hlm('
|
|
95
|
+
_computedClass = computed(() => hlm('bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 relative z-50 mx-auto grid w-full max-w-[calc(100%-2rem)] gap-4 rounded-lg border p-6 shadow-lg data-[state=closed]:duration-200 data-[state=open]:duration-200 sm:mx-0 sm:max-w-lg', this.userClass(), this._dynamicComponentClass), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
96
96
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmDialogContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
97
97
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: HlmDialogContent, isStandalone: true, selector: "hlm-dialog-content", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()", "attr.data-state": "state()" } }, providers: [provideIcons({ lucideX })], ngImport: i0, template: `
|
|
98
98
|
@if (component) {
|
|
@@ -102,7 +102,7 @@ class HlmDialogContent {
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
<button brnDialogClose hlm>
|
|
105
|
-
<span class="
|
|
105
|
+
<span class="sr-only">Close</span>
|
|
106
106
|
<ng-icon hlm size="sm" name="lucideX" />
|
|
107
107
|
</button>
|
|
108
108
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: BrnDialogClose, selector: "button[brnDialogClose]", inputs: ["delay"] }, { kind: "directive", type: HlmDialogClose, selector: "[hlmDialogClose],[brnDialogClose][hlm]", inputs: ["class"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: HlmIcon, selector: "ng-icon[hlm]", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
@@ -125,7 +125,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
<button brnDialogClose hlm>
|
|
128
|
-
<span class="
|
|
128
|
+
<span class="sr-only">Close</span>
|
|
129
129
|
<ng-icon hlm size="sm" name="lucideX" />
|
|
130
130
|
</button>
|
|
131
131
|
`,
|
|
@@ -136,7 +136,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
136
136
|
|
|
137
137
|
class HlmDialogDescription {
|
|
138
138
|
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
139
|
-
_computedClass = computed(() => hlm('
|
|
139
|
+
_computedClass = computed(() => hlm('text-muted-foreground text-sm', this.userClass()), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
140
140
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmDialogDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
141
141
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: HlmDialogDescription, isStandalone: true, selector: "[hlmDialogDescription]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()" } }, hostDirectives: [{ directive: i1.BrnDialogDescription }], ngImport: i0 });
|
|
142
142
|
}
|
|
@@ -153,7 +153,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
153
153
|
|
|
154
154
|
class HlmDialogFooter {
|
|
155
155
|
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
156
|
-
_computedClass = computed(() => hlm('
|
|
156
|
+
_computedClass = computed(() => hlm('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', this.userClass()), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
157
157
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmDialogFooter, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
158
158
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: HlmDialogFooter, isStandalone: true, selector: "hlm-dialog-footer", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()" } }, ngImport: i0, template: ` <ng-content /> `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
159
159
|
}
|
|
@@ -171,7 +171,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
171
171
|
|
|
172
172
|
class HlmDialogHeader {
|
|
173
173
|
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
174
|
-
_computedClass = computed(() => hlm('
|
|
174
|
+
_computedClass = computed(() => hlm('flex flex-col gap-2 text-center sm:text-left', this.userClass()), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
175
175
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmDialogHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
176
176
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.1", type: HlmDialogHeader, isStandalone: true, selector: "hlm-dialog-header", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()" } }, ngImport: i0, template: ` <ng-content /> `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
177
177
|
}
|
|
@@ -189,7 +189,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
189
189
|
|
|
190
190
|
class HlmDialogTitle {
|
|
191
191
|
userClass = input('', ...(ngDevMode ? [{ debugName: "userClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
192
|
-
_computedClass = computed(() => hlm('
|
|
192
|
+
_computedClass = computed(() => hlm('text-lg font-semibold leading-none', this.userClass()), ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
193
193
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: HlmDialogTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
194
194
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.1", type: HlmDialogTitle, isStandalone: true, selector: "[hlmDialogTitle]", inputs: { userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()" } }, hostDirectives: [{ directive: i1.BrnDialogTitle }], ngImport: i0 });
|
|
195
195
|
}
|
package/exports.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"./utils":{"types":"./utils/index.d.ts","default":"./utils/fesm2022/utils.mjs"},"./icon":{"types":"./icon/index.d.ts","default":"./icon/fesm2022/icon.mjs"},"./spinner":{"types":"./spinner/index.d.ts","default":"./spinner/fesm2022/spinner.mjs"},"./badge":{"types":"./badge/index.d.ts","default":"./badge/fesm2022/badge.mjs"},"./input":{"types":"./input/index.d.ts","default":"./input/fesm2022/input.mjs"},"./select":{"types":"./select/index.d.ts","default":"./select/fesm2022/select.mjs"},"./button":{"types":"./button/index.d.ts","default":"./button/fesm2022/button.mjs"},"./accordion":{"types":"./accordion/index.d.ts","default":"./accordion/fesm2022/accordion.mjs"},"./alert":{"types":"./alert/index.d.ts","default":"./alert/fesm2022/alert.mjs"},"./switch":{"types":"./switch/index.d.ts","default":"./switch/fesm2022/switch.mjs"},"./label":{"types":"./label/index.d.ts","default":"./label/fesm2022/label.mjs"},"./form-field":{"types":"./form-field/index.d.ts","default":"./form-field/fesm2022/form-field.mjs"},"./popover":{"types":"./popover/index.d.ts","default":"./popover/fesm2022/popover.mjs"},"./calendar":{"types":"./calendar/index.d.ts","default":"./calendar/fesm2022/calendar.mjs"},"./date-picker":{"types":"./date-picker/index.d.ts","default":"./date-picker/fesm2022/date-picker.mjs"},"./dialog":{"types":"./dialog/index.d.ts","default":"./dialog/fesm2022/dialog.mjs"},"./radio-group":{"types":"./radio-group/index.d.ts","default":"./radio-group/fesm2022/radio-group.mjs"},"./separator":{"types":"./separator/index.d.ts","default":"./separator/fesm2022/separator.mjs"},"./tabs":{"types":"./tabs/index.d.ts","default":"./tabs/fesm2022/tabs.mjs"},"./tooltip":{"types":"./tooltip/index.d.ts","default":"./tooltip/fesm2022/tooltip.mjs"},"./form-select":{"types":"./form-select/index.d.ts","default":"./form-select/fesm2022/form-select.mjs"},"./form-text-input":{"types":"./form-text-input/index.d.ts","default":"./form-text-input/fesm2022/form-text-input.mjs"},"./form-textarea":{"types":"./form-textarea/index.d.ts","default":"./form-textarea/fesm2022/form-textarea.mjs"},"./form-date-picker":{"types":"./form-date-picker/index.d.ts","default":"./form-date-picker/fesm2022/form-date-picker.mjs"},"./basic-alert":{"types":"./basic-alert/index.d.ts","default":"./basic-alert/fesm2022/basic-alert.mjs"},"./confirmation-dialog":{"types":"./confirmation-dialog/index.d.ts","default":"./confirmation-dialog/fesm2022/confirmation-dialog.mjs"},"./sonner":{"types":"./sonner/index.d.ts","default":"./sonner/fesm2022/sonner.mjs"},"./autocomplete":{"types":"./autocomplete/index.d.ts","default":"./autocomplete/fesm2022/autocomplete.mjs"},"./searchable-multiselect":{"types":"./searchable-multiselect/index.d.ts","default":"./searchable-multiselect/fesm2022/searchable-multiselect.mjs"},"./form-searchable-multiselect":{"types":"./form-searchable-multiselect/index.d.ts","default":"./form-searchable-multiselect/fesm2022/form-searchable-multiselect.mjs"}}
|
|
1
|
+
{"./utils":{"types":"./utils/index.d.ts","default":"./utils/fesm2022/utils.mjs"},"./icon":{"types":"./icon/index.d.ts","default":"./icon/fesm2022/icon.mjs"},"./spinner":{"types":"./spinner/index.d.ts","default":"./spinner/fesm2022/spinner.mjs"},"./badge":{"types":"./badge/index.d.ts","default":"./badge/fesm2022/badge.mjs"},"./input":{"types":"./input/index.d.ts","default":"./input/fesm2022/input.mjs"},"./select":{"types":"./select/index.d.ts","default":"./select/fesm2022/select.mjs"},"./button":{"types":"./button/index.d.ts","default":"./button/fesm2022/button.mjs"},"./accordion":{"types":"./accordion/index.d.ts","default":"./accordion/fesm2022/accordion.mjs"},"./alert":{"types":"./alert/index.d.ts","default":"./alert/fesm2022/alert.mjs"},"./switch":{"types":"./switch/index.d.ts","default":"./switch/fesm2022/switch.mjs"},"./label":{"types":"./label/index.d.ts","default":"./label/fesm2022/label.mjs"},"./form-field":{"types":"./form-field/index.d.ts","default":"./form-field/fesm2022/form-field.mjs"},"./form-field-simple":{"types":"./form-field-simple/index.d.ts","default":"./form-field-simple/fesm2022/form-field-simple.mjs"},"./checkbox":{"types":"./checkbox/index.d.ts","default":"./checkbox/fesm2022/checkbox.mjs"},"./popover":{"types":"./popover/index.d.ts","default":"./popover/fesm2022/popover.mjs"},"./calendar":{"types":"./calendar/index.d.ts","default":"./calendar/fesm2022/calendar.mjs"},"./date-picker":{"types":"./date-picker/index.d.ts","default":"./date-picker/fesm2022/date-picker.mjs"},"./dialog":{"types":"./dialog/index.d.ts","default":"./dialog/fesm2022/dialog.mjs"},"./radio-group":{"types":"./radio-group/index.d.ts","default":"./radio-group/fesm2022/radio-group.mjs"},"./separator":{"types":"./separator/index.d.ts","default":"./separator/fesm2022/separator.mjs"},"./tabs":{"types":"./tabs/index.d.ts","default":"./tabs/fesm2022/tabs.mjs"},"./tooltip":{"types":"./tooltip/index.d.ts","default":"./tooltip/fesm2022/tooltip.mjs"},"./form-select":{"types":"./form-select/index.d.ts","default":"./form-select/fesm2022/form-select.mjs"},"./form-text-input":{"types":"./form-text-input/index.d.ts","default":"./form-text-input/fesm2022/form-text-input.mjs"},"./form-textarea":{"types":"./form-textarea/index.d.ts","default":"./form-textarea/fesm2022/form-textarea.mjs"},"./form-date-picker":{"types":"./form-date-picker/index.d.ts","default":"./form-date-picker/fesm2022/form-date-picker.mjs"},"./basic-alert":{"types":"./basic-alert/index.d.ts","default":"./basic-alert/fesm2022/basic-alert.mjs"},"./confirmation-dialog":{"types":"./confirmation-dialog/index.d.ts","default":"./confirmation-dialog/fesm2022/confirmation-dialog.mjs"},"./sonner":{"types":"./sonner/index.d.ts","default":"./sonner/fesm2022/sonner.mjs"},"./autocomplete":{"types":"./autocomplete/index.d.ts","default":"./autocomplete/fesm2022/autocomplete.mjs"},"./searchable-multiselect":{"types":"./searchable-multiselect/index.d.ts","default":"./searchable-multiselect/fesm2022/searchable-multiselect.mjs"},"./form-searchable-multiselect":{"types":"./form-searchable-multiselect/index.d.ts","default":"./form-searchable-multiselect/fesm2022/form-searchable-multiselect.mjs"},"./form-checkbox":{"types":"./form-checkbox/index.d.ts","default":"./form-checkbox/fesm2022/form-checkbox.mjs"}}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# FormCheckbox
|
|
2
|
+
|
|
3
|
+
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.3.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
ng generate component component-name
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
ng generate --help
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Building
|
|
20
|
+
|
|
21
|
+
To build the library, run:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
ng build form-checkbox
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
|
|
28
|
+
|
|
29
|
+
### Publishing the Library
|
|
30
|
+
|
|
31
|
+
Once the project is built, you can publish your library by following these steps:
|
|
32
|
+
|
|
33
|
+
1. Navigate to the `dist` directory:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
cd dist/form-checkbox
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
2. Run the `npm publish` command to publish your library to the npm registry:
|
|
40
|
+
```bash
|
|
41
|
+
npm publish
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Running unit tests
|
|
45
|
+
|
|
46
|
+
To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
ng test
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Running end-to-end tests
|
|
53
|
+
|
|
54
|
+
For end-to-end (e2e) testing, run:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
ng e2e
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
|
|
61
|
+
|
|
62
|
+
## Additional Resources
|
|
63
|
+
|
|
64
|
+
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|