@shival99/z-ui 1.0.1 → 1.0.3
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 +50 -77
- package/assets/css/animations.css +207 -0
- package/assets/css/base.css +76 -0
- package/assets/css/tailwind.css +53 -0
- package/assets/css/themes/gray.css +73 -0
- package/assets/css/themes/green.css +75 -0
- package/assets/css/themes/hospital.css +79 -0
- package/assets/css/themes/neutral.css +73 -0
- package/assets/css/themes/orange.css +73 -0
- package/assets/css/themes/slate.css +73 -0
- package/assets/css/themes/stone.css +73 -0
- package/assets/css/themes/violet.css +73 -0
- package/assets/css/themes/zinc.css +73 -0
- package/assets/images/avatar.svg +6 -0
- package/assets/images/logo.svg +6 -0
- package/fesm2022/shival99-z-ui-components-z-accordion.mjs +148 -0
- package/fesm2022/shival99-z-ui-components-z-accordion.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs +74 -0
- package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-button.mjs +155 -0
- package/fesm2022/shival99-z-ui-components-z-button.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs +2335 -0
- package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-checkbox.mjs +240 -0
- package/fesm2022/shival99-z-ui-components-z-checkbox.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-code.mjs +139 -0
- package/fesm2022/shival99-z-ui-components-z-code.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs +664 -0
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +55 -0
- package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-editor.mjs +411 -0
- package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-filter.mjs +794 -0
- package/fesm2022/shival99-z-ui-components-z-filter.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-icon.mjs +451 -0
- package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-input.mjs +804 -0
- package/fesm2022/shival99-z-ui-components-z-input.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-loading.mjs +105 -0
- package/fesm2022/shival99-z-ui-components-z-loading.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-menu.mjs +351 -0
- package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-modal.mjs +722 -0
- package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-pagination.mjs +131 -0
- package/fesm2022/shival99-z-ui-components-z-pagination.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-popover.mjs +917 -0
- package/fesm2022/shival99-z-ui-components-z-popover.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-radio.mjs +154 -0
- package/fesm2022/shival99-z-ui-components-z-radio.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-select.mjs +998 -0
- package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-skeleton.mjs +139 -0
- package/fesm2022/shival99-z-ui-components-z-skeleton.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-switch.mjs +127 -0
- package/fesm2022/shival99-z-ui-components-z-switch.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-table.mjs +2628 -0
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs +259 -0
- package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-timeline.mjs +335 -0
- package/fesm2022/shival99-z-ui-components-z-timeline.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-toast.mjs +93 -0
- package/fesm2022/shival99-z-ui-components-z-toast.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-tooltip.mjs +660 -0
- package/fesm2022/shival99-z-ui-components-z-tooltip.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-components-z-upload.mjs +504 -0
- package/fesm2022/shival99-z-ui-components-z-upload.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-i18n.mjs +258 -0
- package/fesm2022/shival99-z-ui-i18n.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-pipes.mjs +116 -0
- package/fesm2022/shival99-z-ui-pipes.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-providers.mjs +203 -0
- package/fesm2022/shival99-z-ui-providers.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-services.mjs +919 -0
- package/fesm2022/shival99-z-ui-services.mjs.map +1 -0
- package/fesm2022/shival99-z-ui-utils.mjs +591 -0
- package/fesm2022/shival99-z-ui-utils.mjs.map +1 -0
- package/fesm2022/z-ui.mjs +3 -19924
- package/fesm2022/z-ui.mjs.map +1 -1
- package/package.json +132 -4
- package/types/shival99-z-ui-components-z-accordion.d.ts +55 -0
- package/types/shival99-z-ui-components-z-breadcrumb.d.ts +36 -0
- package/types/shival99-z-ui-components-z-button.d.ts +41 -0
- package/types/shival99-z-ui-components-z-calendar.d.ts +300 -0
- package/types/shival99-z-ui-components-z-checkbox.d.ts +84 -0
- package/types/shival99-z-ui-components-z-code.d.ts +35 -0
- package/types/shival99-z-ui-components-z-drawer.d.ts +232 -0
- package/types/shival99-z-ui-components-z-dropdown-menu.d.ts +50 -0
- package/types/shival99-z-ui-components-z-editor.d.ts +115 -0
- package/types/shival99-z-ui-components-z-filter.d.ts +268 -0
- package/types/shival99-z-ui-components-z-icon.d.ts +291 -0
- package/types/shival99-z-ui-components-z-input.d.ts +188 -0
- package/types/shival99-z-ui-components-z-loading.d.ts +46 -0
- package/types/shival99-z-ui-components-z-menu.d.ts +116 -0
- package/types/shival99-z-ui-components-z-modal.d.ts +270 -0
- package/types/shival99-z-ui-components-z-pagination.d.ts +52 -0
- package/types/shival99-z-ui-components-z-popover.d.ts +134 -0
- package/types/shival99-z-ui-components-z-radio.d.ts +63 -0
- package/types/shival99-z-ui-components-z-select.d.ts +268 -0
- package/types/shival99-z-ui-components-z-skeleton.d.ts +55 -0
- package/types/shival99-z-ui-components-z-switch.d.ts +48 -0
- package/types/shival99-z-ui-components-z-table.d.ts +482 -0
- package/types/shival99-z-ui-components-z-tabs.d.ts +75 -0
- package/types/shival99-z-ui-components-z-timeline.d.ts +98 -0
- package/types/shival99-z-ui-components-z-toast.d.ts +61 -0
- package/types/shival99-z-ui-components-z-tooltip.d.ts +85 -0
- package/types/shival99-z-ui-components-z-upload.d.ts +136 -0
- package/types/shival99-z-ui-i18n.d.ts +50 -0
- package/types/shival99-z-ui-pipes.d.ts +36 -0
- package/types/shival99-z-ui-providers.d.ts +132 -0
- package/types/shival99-z-ui-services.d.ts +364 -0
- package/types/shival99-z-ui-utils.d.ts +145 -0
- package/types/z-ui.d.ts +3 -4977
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, model, output, signal, computed, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
+
import { ZIconComponent } from '@shival99/z-ui/components/z-icon';
|
|
5
|
+
import { zTransform, zMergeClasses } from '@shival99/z-ui/utils';
|
|
6
|
+
import { cva } from 'class-variance-authority';
|
|
7
|
+
|
|
8
|
+
const zCheckboxVariants = cva([
|
|
9
|
+
'relative inline-flex items-center justify-center shrink-0 cursor-pointer',
|
|
10
|
+
'rounded-[4px] border-2 border-input',
|
|
11
|
+
'transition-[border-color,background-color,box-shadow,color] duration-200',
|
|
12
|
+
'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
|
|
13
|
+
'disabled:cursor-not-allowed disabled:opacity-50',
|
|
14
|
+
'data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground',
|
|
15
|
+
'data-[state=indeterminate]:bg-primary data-[state=indeterminate]:border-primary data-[state=indeterminate]:text-primary-foreground',
|
|
16
|
+
], {
|
|
17
|
+
variants: {
|
|
18
|
+
zSize: {
|
|
19
|
+
sm: 'size-4',
|
|
20
|
+
default: 'size-5',
|
|
21
|
+
lg: 'size-6',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
defaultVariants: {
|
|
25
|
+
zSize: 'default',
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
const zCheckboxLabelVariants = cva('select-none cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70', {
|
|
29
|
+
variants: {
|
|
30
|
+
zSize: {
|
|
31
|
+
sm: 'text-xs',
|
|
32
|
+
default: 'text-sm',
|
|
33
|
+
lg: 'text-base',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
defaultVariants: {
|
|
37
|
+
zSize: 'default',
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
class ZCheckboxComponent {
|
|
42
|
+
class = input('', ...(ngDevMode ? [{ debugName: "class" }] : []));
|
|
43
|
+
zType = input('default', ...(ngDevMode ? [{ debugName: "zType" }] : []));
|
|
44
|
+
zSize = input('default', ...(ngDevMode ? [{ debugName: "zSize" }] : []));
|
|
45
|
+
zLabel = input('', ...(ngDevMode ? [{ debugName: "zLabel" }] : []));
|
|
46
|
+
zText = input('', ...(ngDevMode ? [{ debugName: "zText" }] : []));
|
|
47
|
+
zDisabled = input(false, { ...(ngDevMode ? { debugName: "zDisabled" } : {}), transform: zTransform });
|
|
48
|
+
zIndeterminate = input(false, { ...(ngDevMode ? { debugName: "zIndeterminate" } : {}), transform: zTransform });
|
|
49
|
+
zValue = input('', ...(ngDevMode ? [{ debugName: "zValue" }] : []));
|
|
50
|
+
zOptions = input([], ...(ngDevMode ? [{ debugName: "zOptions" }] : []));
|
|
51
|
+
zOrientation = input('vertical', ...(ngDevMode ? [{ debugName: "zOrientation" }] : []));
|
|
52
|
+
zCheckAll = input(false, { ...(ngDevMode ? { debugName: "zCheckAll" } : {}), transform: zTransform });
|
|
53
|
+
zCheckAllText = input('Check All', ...(ngDevMode ? [{ debugName: "zCheckAllText" }] : []));
|
|
54
|
+
zChecked = model(false, ...(ngDevMode ? [{ debugName: "zChecked" }] : []));
|
|
55
|
+
zGroupValue = model([], ...(ngDevMode ? [{ debugName: "zGroupValue" }] : []));
|
|
56
|
+
zChange = output();
|
|
57
|
+
zGroupChange = output();
|
|
58
|
+
zControl = output();
|
|
59
|
+
_disabled = signal(false, ...(ngDevMode ? [{ debugName: "_disabled" }] : []));
|
|
60
|
+
isDisabled = computed(() => this.zDisabled() || this._disabled(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : []));
|
|
61
|
+
enabledOptions = computed(() => this.zOptions().filter(opt => !opt.disabled), ...(ngDevMode ? [{ debugName: "enabledOptions" }] : []));
|
|
62
|
+
isAllChecked = computed(() => {
|
|
63
|
+
const enabledOpts = this.enabledOptions();
|
|
64
|
+
if (enabledOpts.length === 0) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return enabledOpts.every(opt => this.zGroupValue().includes(opt.value));
|
|
68
|
+
}, ...(ngDevMode ? [{ debugName: "isAllChecked" }] : []));
|
|
69
|
+
isNoneChecked = computed(() => {
|
|
70
|
+
const enabledOpts = this.enabledOptions();
|
|
71
|
+
return enabledOpts.every(opt => !this.zGroupValue().includes(opt.value));
|
|
72
|
+
}, ...(ngDevMode ? [{ debugName: "isNoneChecked" }] : []));
|
|
73
|
+
isIndeterminateState = computed(() => !this.isAllChecked() && !this.isNoneChecked(), ...(ngDevMode ? [{ debugName: "isIndeterminateState" }] : []));
|
|
74
|
+
hostClasses = computed(() => {
|
|
75
|
+
const hasLabel = !!this.zLabel();
|
|
76
|
+
if (this.zType() === 'group') {
|
|
77
|
+
return zMergeClasses('flex flex-col gap-2', this.class());
|
|
78
|
+
}
|
|
79
|
+
// When has zLabel, need flex-col to stack label above checkbox
|
|
80
|
+
if (hasLabel) {
|
|
81
|
+
return zMergeClasses('flex flex-col gap-2', this.class());
|
|
82
|
+
}
|
|
83
|
+
return zMergeClasses('inline-flex items-center gap-2', this.class());
|
|
84
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : []));
|
|
85
|
+
groupClasses = computed(() => {
|
|
86
|
+
const orientation = this.zOrientation() === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col';
|
|
87
|
+
return `flex ${orientation} gap-2`;
|
|
88
|
+
}, ...(ngDevMode ? [{ debugName: "groupClasses" }] : []));
|
|
89
|
+
checkboxClasses = computed(() => zCheckboxVariants({ zSize: this.zSize() }), ...(ngDevMode ? [{ debugName: "checkboxClasses" }] : []));
|
|
90
|
+
labelClasses = computed(() => zCheckboxLabelVariants({ zSize: this.zSize() }), ...(ngDevMode ? [{ debugName: "labelClasses" }] : []));
|
|
91
|
+
checkboxState = computed(() => {
|
|
92
|
+
if (this.zIndeterminate()) {
|
|
93
|
+
return 'indeterminate';
|
|
94
|
+
}
|
|
95
|
+
if (this.zChecked()) {
|
|
96
|
+
return 'checked';
|
|
97
|
+
}
|
|
98
|
+
return 'unchecked';
|
|
99
|
+
}, ...(ngDevMode ? [{ debugName: "checkboxState" }] : []));
|
|
100
|
+
iconSize = computed(() => {
|
|
101
|
+
const sizeMap = {
|
|
102
|
+
sm: '12',
|
|
103
|
+
default: '14',
|
|
104
|
+
lg: '16',
|
|
105
|
+
};
|
|
106
|
+
return sizeMap[this.zSize()];
|
|
107
|
+
}, ...(ngDevMode ? [{ debugName: "iconSize" }] : []));
|
|
108
|
+
_onChange = () => { };
|
|
109
|
+
_onTouched = () => { };
|
|
110
|
+
ngAfterViewInit() {
|
|
111
|
+
if (this.zType() === 'group' && this.zCheckAll()) {
|
|
112
|
+
this.zControl.emit({
|
|
113
|
+
checkAll: () => this._checkAllOptions(),
|
|
114
|
+
uncheckAll: () => this._uncheckAllOptions(),
|
|
115
|
+
toggleAll: () => this._toggleAllOptions(),
|
|
116
|
+
isAllChecked: this.isAllChecked,
|
|
117
|
+
isIndeterminate: this.isIndeterminateState,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
writeValue(value) {
|
|
122
|
+
if (this.zType() === 'group') {
|
|
123
|
+
this.zGroupValue.set(Array.isArray(value) ? value : []);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
this.zChecked.set(!!value);
|
|
127
|
+
}
|
|
128
|
+
registerOnChange(fn) {
|
|
129
|
+
this._onChange = fn;
|
|
130
|
+
}
|
|
131
|
+
registerOnTouched(fn) {
|
|
132
|
+
this._onTouched = fn;
|
|
133
|
+
}
|
|
134
|
+
setDisabledState(isDisabled) {
|
|
135
|
+
this._disabled.set(isDisabled);
|
|
136
|
+
}
|
|
137
|
+
onCheckboxClick() {
|
|
138
|
+
if (this.isDisabled()) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const newValue = !this.zChecked();
|
|
142
|
+
this.zChecked.set(newValue);
|
|
143
|
+
this.zChange.emit(newValue);
|
|
144
|
+
this._onChange(newValue);
|
|
145
|
+
this._onTouched();
|
|
146
|
+
}
|
|
147
|
+
onOptionClick(option) {
|
|
148
|
+
if (this.isDisabled() || option.disabled) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const currentValues = [...this.zGroupValue()];
|
|
152
|
+
const index = currentValues.indexOf(option.value);
|
|
153
|
+
if (index === -1) {
|
|
154
|
+
currentValues.push(option.value);
|
|
155
|
+
}
|
|
156
|
+
if (index !== -1) {
|
|
157
|
+
currentValues.splice(index, 1);
|
|
158
|
+
}
|
|
159
|
+
this.zGroupValue.set(currentValues);
|
|
160
|
+
this.zGroupChange.emit(currentValues);
|
|
161
|
+
this._onChange(currentValues);
|
|
162
|
+
this._onTouched();
|
|
163
|
+
}
|
|
164
|
+
onCheckAllClick() {
|
|
165
|
+
if (this.isDisabled()) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
if (this.isAllChecked()) {
|
|
169
|
+
this._uncheckAllOptions();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
this._checkAllOptions();
|
|
173
|
+
}
|
|
174
|
+
isOptionChecked(option) {
|
|
175
|
+
return this.zGroupValue().includes(option.value);
|
|
176
|
+
}
|
|
177
|
+
getOptionState(option) {
|
|
178
|
+
return this.isOptionChecked(option) ? 'checked' : 'unchecked';
|
|
179
|
+
}
|
|
180
|
+
getCheckAllState() {
|
|
181
|
+
if (this.isAllChecked()) {
|
|
182
|
+
return 'checked';
|
|
183
|
+
}
|
|
184
|
+
if (this.isIndeterminateState()) {
|
|
185
|
+
return 'indeterminate';
|
|
186
|
+
}
|
|
187
|
+
return 'unchecked';
|
|
188
|
+
}
|
|
189
|
+
_checkAllOptions() {
|
|
190
|
+
const enabledValues = this.enabledOptions().map(opt => opt.value);
|
|
191
|
+
const currentValues = [...this.zGroupValue()];
|
|
192
|
+
const newValues = [...new Set([...currentValues, ...enabledValues])];
|
|
193
|
+
this.zGroupValue.set(newValues);
|
|
194
|
+
this.zGroupChange.emit(newValues);
|
|
195
|
+
this._onChange(newValues);
|
|
196
|
+
this._onTouched();
|
|
197
|
+
}
|
|
198
|
+
_uncheckAllOptions() {
|
|
199
|
+
const enabledValues = this.enabledOptions().map(opt => opt.value);
|
|
200
|
+
const currentValues = this.zGroupValue().filter(v => !enabledValues.includes(v));
|
|
201
|
+
this.zGroupValue.set(currentValues);
|
|
202
|
+
this.zGroupChange.emit(currentValues);
|
|
203
|
+
this._onChange(currentValues);
|
|
204
|
+
this._onTouched();
|
|
205
|
+
}
|
|
206
|
+
_toggleAllOptions() {
|
|
207
|
+
if (this.isAllChecked()) {
|
|
208
|
+
this._uncheckAllOptions();
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
this._checkAllOptions();
|
|
212
|
+
}
|
|
213
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
214
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ZCheckboxComponent, isStandalone: true, selector: "z-checkbox", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zType: { classPropertyName: "zType", publicName: "zType", isSignal: true, isRequired: false, transformFunction: null }, zSize: { classPropertyName: "zSize", publicName: "zSize", isSignal: true, isRequired: false, transformFunction: null }, zLabel: { classPropertyName: "zLabel", publicName: "zLabel", isSignal: true, isRequired: false, transformFunction: null }, zText: { classPropertyName: "zText", publicName: "zText", isSignal: true, isRequired: false, transformFunction: null }, zDisabled: { classPropertyName: "zDisabled", publicName: "zDisabled", isSignal: true, isRequired: false, transformFunction: null }, zIndeterminate: { classPropertyName: "zIndeterminate", publicName: "zIndeterminate", isSignal: true, isRequired: false, transformFunction: null }, zValue: { classPropertyName: "zValue", publicName: "zValue", isSignal: true, isRequired: false, transformFunction: null }, zOptions: { classPropertyName: "zOptions", publicName: "zOptions", isSignal: true, isRequired: false, transformFunction: null }, zOrientation: { classPropertyName: "zOrientation", publicName: "zOrientation", isSignal: true, isRequired: false, transformFunction: null }, zCheckAll: { classPropertyName: "zCheckAll", publicName: "zCheckAll", isSignal: true, isRequired: false, transformFunction: null }, zCheckAllText: { classPropertyName: "zCheckAllText", publicName: "zCheckAllText", isSignal: true, isRequired: false, transformFunction: null }, zChecked: { classPropertyName: "zChecked", publicName: "zChecked", isSignal: true, isRequired: false, transformFunction: null }, zGroupValue: { classPropertyName: "zGroupValue", publicName: "zGroupValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { zChecked: "zCheckedChange", zGroupValue: "zGroupValueChange", zChange: "zChange", zGroupChange: "zGroupChange", zControl: "zControl" }, host: { properties: { "class": "hostClasses()" } }, providers: [
|
|
215
|
+
{
|
|
216
|
+
provide: NG_VALUE_ACCESSOR,
|
|
217
|
+
useExisting: forwardRef(() => ZCheckboxComponent),
|
|
218
|
+
multi: true,
|
|
219
|
+
},
|
|
220
|
+
], ngImport: i0, template: "<!-- Group Mode -->\n@if (zType() === 'group') {\n <!-- Label above group -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div [class]=\"groupClasses()\">\n <!-- Check All option -->\n @if (zCheckAll()) {\n <label\n class=\"inline-flex cursor-pointer items-center gap-2\"\n [class.opacity-50]=\"isDisabled()\"\n [class.cursor-not-allowed]=\"isDisabled()\">\n <button\n type=\"button\"\n role=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [attr.aria-checked]=\"isAllChecked()\"\n [attr.data-state]=\"getCheckAllState()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onCheckAllClick()\">\n @if (isIndeterminateState()) {\n <i z-icon zType=\"lucideMinus\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n @if (isAllChecked()) {\n <i z-icon zType=\"lucideCheck\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n </button>\n <span [class]=\"labelClasses()\">{{ zCheckAllText() }}</span>\n </label>\n }\n\n <!-- Options -->\n @for (option of zOptions(); track option.value) {\n <label\n class=\"inline-flex cursor-pointer items-center gap-2\"\n [class.opacity-40]=\"option.disabled || isDisabled()\"\n [class.dark:opacity-50]=\"option.disabled || isDisabled()\"\n [class.cursor-not-allowed]=\"option.disabled || isDisabled()\">\n <button\n type=\"button\"\n role=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [attr.aria-checked]=\"isOptionChecked(option)\"\n [attr.data-state]=\"getOptionState(option)\"\n [disabled]=\"isDisabled() || option.disabled\"\n (click)=\"onOptionClick(option)\">\n @if (isOptionChecked(option)) {\n <i z-icon zType=\"lucideCheck\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n </button>\n <span [class]=\"labelClasses()\" [class.text-muted-foreground]=\"option.disabled\">{{ option.label }}</span>\n </label>\n }\n </div>\n}\n\n<!-- Default Mode (single checkbox) -->\n@if (zType() === 'default') {\n <!-- Label above -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div class=\"inline-flex items-center gap-2\">\n <button\n type=\"button\"\n role=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [attr.aria-checked]=\"zChecked()\"\n [attr.data-state]=\"checkboxState()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onCheckboxClick()\">\n @if (zIndeterminate()) {\n <i z-icon zType=\"lucideMinus\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n @if (!zIndeterminate() && zChecked()) {\n <i z-icon zType=\"lucideCheck\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n </button>\n @if (zText()) {\n <label [class]=\"labelClasses()\" (click)=\"onCheckboxClick()\">{{ zText() }}</label>\n }\n </div>\n}\n", dependencies: [{ kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zSize", "zStrokeWidth", "zSvg"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
221
|
+
}
|
|
222
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZCheckboxComponent, decorators: [{
|
|
223
|
+
type: Component,
|
|
224
|
+
args: [{ selector: 'z-checkbox', imports: [ZIconComponent], standalone: true, providers: [
|
|
225
|
+
{
|
|
226
|
+
provide: NG_VALUE_ACCESSOR,
|
|
227
|
+
useExisting: forwardRef(() => ZCheckboxComponent),
|
|
228
|
+
multi: true,
|
|
229
|
+
},
|
|
230
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
231
|
+
'[class]': 'hostClasses()',
|
|
232
|
+
}, template: "<!-- Group Mode -->\n@if (zType() === 'group') {\n <!-- Label above group -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div [class]=\"groupClasses()\">\n <!-- Check All option -->\n @if (zCheckAll()) {\n <label\n class=\"inline-flex cursor-pointer items-center gap-2\"\n [class.opacity-50]=\"isDisabled()\"\n [class.cursor-not-allowed]=\"isDisabled()\">\n <button\n type=\"button\"\n role=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [attr.aria-checked]=\"isAllChecked()\"\n [attr.data-state]=\"getCheckAllState()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onCheckAllClick()\">\n @if (isIndeterminateState()) {\n <i z-icon zType=\"lucideMinus\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n @if (isAllChecked()) {\n <i z-icon zType=\"lucideCheck\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n </button>\n <span [class]=\"labelClasses()\">{{ zCheckAllText() }}</span>\n </label>\n }\n\n <!-- Options -->\n @for (option of zOptions(); track option.value) {\n <label\n class=\"inline-flex cursor-pointer items-center gap-2\"\n [class.opacity-40]=\"option.disabled || isDisabled()\"\n [class.dark:opacity-50]=\"option.disabled || isDisabled()\"\n [class.cursor-not-allowed]=\"option.disabled || isDisabled()\">\n <button\n type=\"button\"\n role=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [attr.aria-checked]=\"isOptionChecked(option)\"\n [attr.data-state]=\"getOptionState(option)\"\n [disabled]=\"isDisabled() || option.disabled\"\n (click)=\"onOptionClick(option)\">\n @if (isOptionChecked(option)) {\n <i z-icon zType=\"lucideCheck\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n </button>\n <span [class]=\"labelClasses()\" [class.text-muted-foreground]=\"option.disabled\">{{ option.label }}</span>\n </label>\n }\n </div>\n}\n\n<!-- Default Mode (single checkbox) -->\n@if (zType() === 'default') {\n <!-- Label above -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div class=\"inline-flex items-center gap-2\">\n <button\n type=\"button\"\n role=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [attr.aria-checked]=\"zChecked()\"\n [attr.data-state]=\"checkboxState()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onCheckboxClick()\">\n @if (zIndeterminate()) {\n <i z-icon zType=\"lucideMinus\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n @if (!zIndeterminate() && zChecked()) {\n <i z-icon zType=\"lucideCheck\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n </button>\n @if (zText()) {\n <label [class]=\"labelClasses()\" (click)=\"onCheckboxClick()\">{{ zText() }}</label>\n }\n </div>\n}\n" }]
|
|
233
|
+
}], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zType: [{ type: i0.Input, args: [{ isSignal: true, alias: "zType", required: false }] }], zSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "zSize", required: false }] }], zLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLabel", required: false }] }], zText: [{ type: i0.Input, args: [{ isSignal: true, alias: "zText", required: false }] }], zDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "zDisabled", required: false }] }], zIndeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIndeterminate", required: false }] }], zValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "zValue", required: false }] }], zOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOptions", required: false }] }], zOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "zOrientation", required: false }] }], zCheckAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "zCheckAll", required: false }] }], zCheckAllText: [{ type: i0.Input, args: [{ isSignal: true, alias: "zCheckAllText", required: false }] }], zChecked: [{ type: i0.Input, args: [{ isSignal: true, alias: "zChecked", required: false }] }, { type: i0.Output, args: ["zCheckedChange"] }], zGroupValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "zGroupValue", required: false }] }, { type: i0.Output, args: ["zGroupValueChange"] }], zChange: [{ type: i0.Output, args: ["zChange"] }], zGroupChange: [{ type: i0.Output, args: ["zGroupChange"] }], zControl: [{ type: i0.Output, args: ["zControl"] }] } });
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Generated bundle index. Do not edit.
|
|
237
|
+
*/
|
|
238
|
+
|
|
239
|
+
export { ZCheckboxComponent, zCheckboxLabelVariants, zCheckboxVariants };
|
|
240
|
+
//# sourceMappingURL=shival99-z-ui-components-z-checkbox.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shival99-z-ui-components-z-checkbox.mjs","sources":["../../../../libs/core-ui/components/z-checkbox/z-checkbox.variants.ts","../../../../libs/core-ui/components/z-checkbox/z-checkbox.component.ts","../../../../libs/core-ui/components/z-checkbox/z-checkbox.component.html","../../../../libs/core-ui/components/z-checkbox/shival99-z-ui-components-z-checkbox.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zCheckboxVariants = cva(\n [\n 'relative inline-flex items-center justify-center shrink-0 cursor-pointer',\n 'rounded-[4px] border-2 border-input',\n 'transition-[border-color,background-color,box-shadow,color] duration-200',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground',\n 'data-[state=indeterminate]:bg-primary data-[state=indeterminate]:border-primary data-[state=indeterminate]:text-primary-foreground',\n ],\n {\n variants: {\n zSize: {\n sm: 'size-4',\n default: 'size-5',\n lg: 'size-6',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\nexport const zCheckboxLabelVariants = cva(\n 'select-none cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n {\n variants: {\n zSize: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n zSize: 'default',\n },\n }\n);\n\nexport type ZCheckboxVariants = VariantProps<typeof zCheckboxVariants>;\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { zMergeClasses, zTransform } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport type {\n ZCheckboxControl,\n ZCheckboxOption,\n ZCheckboxOrientation,\n ZCheckboxSize,\n ZCheckboxType,\n} from './z-checkbox.types';\nimport { zCheckboxLabelVariants, zCheckboxVariants } from './z-checkbox.variants';\n\n@Component({\n selector: 'z-checkbox',\n imports: [ZIconComponent],\n standalone: true,\n templateUrl: './z-checkbox.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ZCheckboxComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'hostClasses()',\n },\n})\nexport class ZCheckboxComponent implements ControlValueAccessor, AfterViewInit {\n public readonly class = input<ClassValue>('');\n public readonly zType = input<ZCheckboxType>('default');\n public readonly zSize = input<ZCheckboxSize>('default');\n public readonly zLabel = input<string>('');\n public readonly zText = input<string>('');\n public readonly zDisabled = input(false, { transform: zTransform });\n public readonly zIndeterminate = input(false, { transform: zTransform });\n public readonly zValue = input<string | number>('');\n public readonly zOptions = input<ZCheckboxOption[]>([]);\n public readonly zOrientation = input<ZCheckboxOrientation>('vertical');\n public readonly zCheckAll = input(false, { transform: zTransform });\n public readonly zCheckAllText = input<string>('Check All');\n\n public readonly zChecked = model<boolean>(false);\n public readonly zGroupValue = model<(string | number)[]>([]);\n\n public readonly zChange = output<boolean>();\n public readonly zGroupChange = output<(string | number)[]>();\n public readonly zControl = output<ZCheckboxControl>();\n\n private readonly _disabled = signal(false);\n\n protected readonly isDisabled = computed(() => this.zDisabled() || this._disabled());\n\n protected readonly enabledOptions = computed(() => this.zOptions().filter(opt => !opt.disabled));\n\n protected readonly isAllChecked = computed(() => {\n const enabledOpts = this.enabledOptions();\n if (enabledOpts.length === 0) {\n return false;\n }\n return enabledOpts.every(opt => this.zGroupValue().includes(opt.value));\n });\n\n protected readonly isNoneChecked = computed(() => {\n const enabledOpts = this.enabledOptions();\n return enabledOpts.every(opt => !this.zGroupValue().includes(opt.value));\n });\n\n protected readonly isIndeterminateState = computed(() => !this.isAllChecked() && !this.isNoneChecked());\n\n protected readonly hostClasses = computed(() => {\n const hasLabel = !!this.zLabel();\n if (this.zType() === 'group') {\n return zMergeClasses('flex flex-col gap-2', this.class());\n }\n // When has zLabel, need flex-col to stack label above checkbox\n if (hasLabel) {\n return zMergeClasses('flex flex-col gap-2', this.class());\n }\n return zMergeClasses('inline-flex items-center gap-2', this.class());\n });\n\n protected readonly groupClasses = computed(() => {\n const orientation = this.zOrientation() === 'horizontal' ? 'flex-row flex-wrap' : 'flex-col';\n return `flex ${orientation} gap-2`;\n });\n\n protected readonly checkboxClasses = computed(() => zCheckboxVariants({ zSize: this.zSize() }));\n\n protected readonly labelClasses = computed(() => zCheckboxLabelVariants({ zSize: this.zSize() }));\n\n protected readonly checkboxState = computed(() => {\n if (this.zIndeterminate()) {\n return 'indeterminate';\n }\n if (this.zChecked()) {\n return 'checked';\n }\n return 'unchecked';\n });\n\n protected readonly iconSize = computed(() => {\n const sizeMap: Record<ZCheckboxSize, string> = {\n sm: '12',\n default: '14',\n lg: '16',\n };\n return sizeMap[this.zSize()] as '12' | '14' | '16';\n });\n\n private _onChange: (value: boolean | (string | number)[]) => void = () => {};\n private _onTouched: () => void = () => {};\n\n public ngAfterViewInit(): void {\n if (this.zType() === 'group' && this.zCheckAll()) {\n this.zControl.emit({\n checkAll: () => this._checkAllOptions(),\n uncheckAll: () => this._uncheckAllOptions(),\n toggleAll: () => this._toggleAllOptions(),\n isAllChecked: this.isAllChecked,\n isIndeterminate: this.isIndeterminateState,\n });\n }\n }\n\n public writeValue(value: boolean | (string | number)[] | null): void {\n if (this.zType() === 'group') {\n this.zGroupValue.set(Array.isArray(value) ? value : []);\n return;\n }\n this.zChecked.set(!!value);\n }\n\n public registerOnChange(fn: (value: boolean | (string | number)[]) => void): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n\n protected onCheckboxClick(): void {\n if (this.isDisabled()) {\n return;\n }\n\n const newValue = !this.zChecked();\n this.zChecked.set(newValue);\n this.zChange.emit(newValue);\n this._onChange(newValue);\n this._onTouched();\n }\n\n protected onOptionClick(option: ZCheckboxOption): void {\n if (this.isDisabled() || option.disabled) {\n return;\n }\n\n const currentValues = [...this.zGroupValue()];\n const index = currentValues.indexOf(option.value);\n\n if (index === -1) {\n currentValues.push(option.value);\n }\n\n if (index !== -1) {\n currentValues.splice(index, 1);\n }\n\n this.zGroupValue.set(currentValues);\n this.zGroupChange.emit(currentValues);\n this._onChange(currentValues);\n this._onTouched();\n }\n\n protected onCheckAllClick(): void {\n if (this.isDisabled()) {\n return;\n }\n\n if (this.isAllChecked()) {\n this._uncheckAllOptions();\n return;\n }\n\n this._checkAllOptions();\n }\n\n protected isOptionChecked(option: ZCheckboxOption): boolean {\n return this.zGroupValue().includes(option.value);\n }\n\n protected getOptionState(option: ZCheckboxOption): string {\n return this.isOptionChecked(option) ? 'checked' : 'unchecked';\n }\n\n protected getCheckAllState(): string {\n if (this.isAllChecked()) {\n return 'checked';\n }\n if (this.isIndeterminateState()) {\n return 'indeterminate';\n }\n return 'unchecked';\n }\n\n private _checkAllOptions(): void {\n const enabledValues = this.enabledOptions().map(opt => opt.value);\n const currentValues = [...this.zGroupValue()];\n const newValues = [...new Set([...currentValues, ...enabledValues])];\n this.zGroupValue.set(newValues);\n this.zGroupChange.emit(newValues);\n this._onChange(newValues);\n this._onTouched();\n }\n\n private _uncheckAllOptions(): void {\n const enabledValues = this.enabledOptions().map(opt => opt.value);\n const currentValues = this.zGroupValue().filter(v => !enabledValues.includes(v));\n this.zGroupValue.set(currentValues);\n this.zGroupChange.emit(currentValues);\n this._onChange(currentValues);\n this._onTouched();\n }\n\n private _toggleAllOptions(): void {\n if (this.isAllChecked()) {\n this._uncheckAllOptions();\n return;\n }\n\n this._checkAllOptions();\n }\n}\n","<!-- Group Mode -->\n@if (zType() === 'group') {\n <!-- Label above group -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div [class]=\"groupClasses()\">\n <!-- Check All option -->\n @if (zCheckAll()) {\n <label\n class=\"inline-flex cursor-pointer items-center gap-2\"\n [class.opacity-50]=\"isDisabled()\"\n [class.cursor-not-allowed]=\"isDisabled()\">\n <button\n type=\"button\"\n role=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [attr.aria-checked]=\"isAllChecked()\"\n [attr.data-state]=\"getCheckAllState()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onCheckAllClick()\">\n @if (isIndeterminateState()) {\n <i z-icon zType=\"lucideMinus\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n @if (isAllChecked()) {\n <i z-icon zType=\"lucideCheck\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n </button>\n <span [class]=\"labelClasses()\">{{ zCheckAllText() }}</span>\n </label>\n }\n\n <!-- Options -->\n @for (option of zOptions(); track option.value) {\n <label\n class=\"inline-flex cursor-pointer items-center gap-2\"\n [class.opacity-40]=\"option.disabled || isDisabled()\"\n [class.dark:opacity-50]=\"option.disabled || isDisabled()\"\n [class.cursor-not-allowed]=\"option.disabled || isDisabled()\">\n <button\n type=\"button\"\n role=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [attr.aria-checked]=\"isOptionChecked(option)\"\n [attr.data-state]=\"getOptionState(option)\"\n [disabled]=\"isDisabled() || option.disabled\"\n (click)=\"onOptionClick(option)\">\n @if (isOptionChecked(option)) {\n <i z-icon zType=\"lucideCheck\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n </button>\n <span [class]=\"labelClasses()\" [class.text-muted-foreground]=\"option.disabled\">{{ option.label }}</span>\n </label>\n }\n </div>\n}\n\n<!-- Default Mode (single checkbox) -->\n@if (zType() === 'default') {\n <!-- Label above -->\n @if (zLabel()) {\n <label class=\"text-xs leading-none font-medium\">{{ zLabel() }}</label>\n }\n\n <div class=\"inline-flex items-center gap-2\">\n <button\n type=\"button\"\n role=\"checkbox\"\n [class]=\"checkboxClasses()\"\n [attr.aria-checked]=\"zChecked()\"\n [attr.data-state]=\"checkboxState()\"\n [disabled]=\"isDisabled()\"\n (click)=\"onCheckboxClick()\">\n @if (zIndeterminate()) {\n <i z-icon zType=\"lucideMinus\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n @if (!zIndeterminate() && zChecked()) {\n <i z-icon zType=\"lucideCheck\" [zSize]=\"iconSize()\" class=\"text-current\"></i>\n }\n </button>\n @if (zText()) {\n <label [class]=\"labelClasses()\" (click)=\"onCheckboxClick()\">{{ zText() }}</label>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, viewChild, signal, inject, computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
4
|
+
import { ZButtonComponent } from '@shival99/z-ui/components/z-button';
|
|
5
|
+
import { ZIconComponent } from '@shival99/z-ui/components/z-icon';
|
|
6
|
+
import { ZToastService } from '@shival99/z-ui/components/z-toast';
|
|
7
|
+
import { ZThemeService } from '@shival99/z-ui/services';
|
|
8
|
+
import { zMergeClasses } from '@shival99/z-ui/utils';
|
|
9
|
+
|
|
10
|
+
const getHighlighter = (() => {
|
|
11
|
+
let cache = null;
|
|
12
|
+
return async () => {
|
|
13
|
+
if (cache) {
|
|
14
|
+
return cache;
|
|
15
|
+
}
|
|
16
|
+
cache = import('shiki').then(async ({ createHighlighter }) => createHighlighter({
|
|
17
|
+
themes: ['github-dark', 'github-light', 'vitesse-dark', 'one-dark-pro'],
|
|
18
|
+
langs: [
|
|
19
|
+
'typescript',
|
|
20
|
+
'javascript',
|
|
21
|
+
'html',
|
|
22
|
+
'css',
|
|
23
|
+
'scss',
|
|
24
|
+
'json',
|
|
25
|
+
'bash',
|
|
26
|
+
'shell',
|
|
27
|
+
'markdown',
|
|
28
|
+
'yaml',
|
|
29
|
+
'python',
|
|
30
|
+
'java',
|
|
31
|
+
'sql',
|
|
32
|
+
'xml',
|
|
33
|
+
'angular-ts',
|
|
34
|
+
'angular-html',
|
|
35
|
+
],
|
|
36
|
+
}));
|
|
37
|
+
return cache;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
function escapeHtml(text) {
|
|
41
|
+
const div = document.createElement('div');
|
|
42
|
+
div.textContent = text;
|
|
43
|
+
return div.innerHTML;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
class ZCodeComponent {
|
|
47
|
+
class = input('', ...(ngDevMode ? [{ debugName: "class" }] : []));
|
|
48
|
+
zTitle = input('', ...(ngDevMode ? [{ debugName: "zTitle" }] : []));
|
|
49
|
+
zLanguage = input('typescript', ...(ngDevMode ? [{ debugName: "zLanguage" }] : []));
|
|
50
|
+
zCode = input('', ...(ngDevMode ? [{ debugName: "zCode" }] : []));
|
|
51
|
+
zTheme = input('', ...(ngDevMode ? [{ debugName: "zTheme" }] : []));
|
|
52
|
+
zShowLineNumbers = input(true, ...(ngDevMode ? [{ debugName: "zShowLineNumbers" }] : []));
|
|
53
|
+
codeEl = viewChild('codeEl', ...(ngDevMode ? [{ debugName: "codeEl" }] : []));
|
|
54
|
+
copied = signal(false, ...(ngDevMode ? [{ debugName: "copied" }] : []));
|
|
55
|
+
highlightedCode = signal('', ...(ngDevMode ? [{ debugName: "highlightedCode" }] : []));
|
|
56
|
+
isHighlighting = signal(true, ...(ngDevMode ? [{ debugName: "isHighlighting" }] : []));
|
|
57
|
+
_toast = inject(ZToastService);
|
|
58
|
+
_sanitizer = inject(DomSanitizer);
|
|
59
|
+
_themeService = inject(ZThemeService);
|
|
60
|
+
_rawCode = '';
|
|
61
|
+
_effectiveTheme = computed(() => {
|
|
62
|
+
const inputTheme = this.zTheme();
|
|
63
|
+
if (inputTheme) {
|
|
64
|
+
return inputTheme;
|
|
65
|
+
}
|
|
66
|
+
return this._themeService.isDark() ? 'github-dark' : 'github-light';
|
|
67
|
+
}, ...(ngDevMode ? [{ debugName: "_effectiveTheme" }] : []));
|
|
68
|
+
wrapperClasses = computed(() => zMergeClasses('border-border bg-card overflow-hidden rounded-lg border', this.class()), ...(ngDevMode ? [{ debugName: "wrapperClasses" }] : []));
|
|
69
|
+
contentClasses = computed(() => zMergeClasses('overflow-x-auto p-4', this.zTitle() ? '' : 'pt-10'), ...(ngDevMode ? [{ debugName: "contentClasses" }] : []));
|
|
70
|
+
constructor() {
|
|
71
|
+
effect(() => {
|
|
72
|
+
const code = this.zCode();
|
|
73
|
+
const lang = this.zLanguage();
|
|
74
|
+
const theme = this._effectiveTheme();
|
|
75
|
+
if (!code) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
this._rawCode = code;
|
|
79
|
+
void this._highlightCode(code, lang, theme);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
ngAfterViewInit() {
|
|
83
|
+
if (this.zCode()) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const codeEl = this.codeEl()?.nativeElement;
|
|
87
|
+
if (!codeEl) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const preEl = codeEl.querySelector('pre');
|
|
91
|
+
const codeContent = preEl?.querySelector('code');
|
|
92
|
+
const rawText = codeContent?.textContent ?? preEl?.textContent ?? codeEl.textContent ?? '';
|
|
93
|
+
if (!rawText.trim()) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
this._rawCode = rawText.trim();
|
|
97
|
+
void this._highlightCode(this._rawCode, this.zLanguage(), this._effectiveTheme());
|
|
98
|
+
}
|
|
99
|
+
async _highlightCode(code, lang, theme) {
|
|
100
|
+
this.isHighlighting.set(true);
|
|
101
|
+
try {
|
|
102
|
+
const highlighter = await getHighlighter();
|
|
103
|
+
const html = highlighter.codeToHtml(code, { lang, theme });
|
|
104
|
+
const safeHtml = this._sanitizer.bypassSecurityTrustHtml(html);
|
|
105
|
+
this.highlightedCode.set(safeHtml);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.warn('Shiki highlighting failed, falling back to plain text:', error);
|
|
109
|
+
const escapedHtml = `<pre class="shiki"><code>${escapeHtml(code)}</code></pre>`;
|
|
110
|
+
this.highlightedCode.set(this._sanitizer.bypassSecurityTrustHtml(escapedHtml));
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
this.isHighlighting.set(false);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
copyCode() {
|
|
117
|
+
const code = this._rawCode.trim();
|
|
118
|
+
void navigator.clipboard.writeText(code).then(() => {
|
|
119
|
+
this.copied.set(true);
|
|
120
|
+
this._toast.success('Code đã được copy!');
|
|
121
|
+
setTimeout(() => {
|
|
122
|
+
this.copied.set(false);
|
|
123
|
+
}, 2000);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZCodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
127
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ZCodeComponent, isStandalone: true, selector: "z-code", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, zTitle: { classPropertyName: "zTitle", publicName: "zTitle", isSignal: true, isRequired: false, transformFunction: null }, zLanguage: { classPropertyName: "zLanguage", publicName: "zLanguage", isSignal: true, isRequired: false, transformFunction: null }, zCode: { classPropertyName: "zCode", publicName: "zCode", isSignal: true, isRequired: false, transformFunction: null }, zTheme: { classPropertyName: "zTheme", publicName: "zTheme", isSignal: true, isRequired: false, transformFunction: null }, zShowLineNumbers: { classPropertyName: "zShowLineNumbers", publicName: "zShowLineNumbers", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "codeEl", first: true, predicate: ["codeEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class]=\"wrapperClasses()\">\n @if (zTitle()) {\n <div class=\"z-code-header border-border flex items-center justify-between border-b px-4 py-2\">\n <span class=\"text-muted-foreground text-xs font-medium\">{{ zTitle() }}</span>\n <button z-button zType=\"outline\" zSize=\"xs\" [zWave]=\"false\" (click)=\"copyCode()\">\n @if (copied()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-green-500\" />\n <span class=\"text-green-500\">Copied!</span>\n } @else {\n <z-icon zType=\"lucideCopy\" zSize=\"14\" />\n <span>Copy</span>\n }\n </button>\n </div>\n }\n <div class=\"relative\">\n @if (!zTitle()) {\n <button\n z-button\n zType=\"outline\"\n zSize=\"xs\"\n [zWave]=\"false\"\n class=\"absolute top-2 right-2 z-10 backdrop-blur-sm\"\n (click)=\"copyCode()\">\n @if (copied()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-green-500\" />\n <span class=\"text-green-500\">Copied!</span>\n } @else {\n <z-icon zType=\"lucideCopy\" zSize=\"14\" />\n <span>Copy</span>\n }\n </button>\n }\n @if (isHighlighting()) {\n <div class=\"p-4\">\n <div class=\"bg-muted h-4 w-3/4 animate-pulse rounded\"></div>\n <div class=\"bg-muted mt-2 h-4 w-1/2 animate-pulse rounded\"></div>\n <div class=\"bg-muted mt-2 h-4 w-2/3 animate-pulse rounded\"></div>\n </div>\n } @else {\n <div #codeEl [class]=\"contentClasses()\" [innerHTML]=\"highlightedCode()\"></div>\n }\n </div>\n</div>\n", styles: [":host{display:block}:host ::ng-deep .shiki{margin:0;padding:0;overflow-x:auto;background:transparent!important;background-color:transparent!important}:host ::ng-deep .shiki code{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.875rem;line-height:1.7;display:block;counter-reset:line}:host ::ng-deep .shiki .line{display:inline-block;width:100%}:host ::ng-deep .shiki .line:before{counter-increment:line;content:counter(line);display:inline-block;width:2rem;margin-right:1rem;text-align:right;color:var(--muted-foreground);opacity:.5;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "component", type: ZIconComponent, selector: "z-icon, [z-icon]", inputs: ["class", "zType", "zSize", "zStrokeWidth", "zSvg"] }, { kind: "component", type: ZButtonComponent, selector: "z-button, button[z-button], a[z-button]", inputs: ["class", "zType", "zSize", "zShape", "zLabel", "zLoading", "zDisabled", "zTypeIcon", "zSizeIcon", "zStrokeWidthIcon", "zWave"], exportAs: ["zButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
128
|
+
}
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ZCodeComponent, decorators: [{
|
|
130
|
+
type: Component,
|
|
131
|
+
args: [{ selector: 'z-code', imports: [ZIconComponent, ZButtonComponent], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"wrapperClasses()\">\n @if (zTitle()) {\n <div class=\"z-code-header border-border flex items-center justify-between border-b px-4 py-2\">\n <span class=\"text-muted-foreground text-xs font-medium\">{{ zTitle() }}</span>\n <button z-button zType=\"outline\" zSize=\"xs\" [zWave]=\"false\" (click)=\"copyCode()\">\n @if (copied()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-green-500\" />\n <span class=\"text-green-500\">Copied!</span>\n } @else {\n <z-icon zType=\"lucideCopy\" zSize=\"14\" />\n <span>Copy</span>\n }\n </button>\n </div>\n }\n <div class=\"relative\">\n @if (!zTitle()) {\n <button\n z-button\n zType=\"outline\"\n zSize=\"xs\"\n [zWave]=\"false\"\n class=\"absolute top-2 right-2 z-10 backdrop-blur-sm\"\n (click)=\"copyCode()\">\n @if (copied()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-green-500\" />\n <span class=\"text-green-500\">Copied!</span>\n } @else {\n <z-icon zType=\"lucideCopy\" zSize=\"14\" />\n <span>Copy</span>\n }\n </button>\n }\n @if (isHighlighting()) {\n <div class=\"p-4\">\n <div class=\"bg-muted h-4 w-3/4 animate-pulse rounded\"></div>\n <div class=\"bg-muted mt-2 h-4 w-1/2 animate-pulse rounded\"></div>\n <div class=\"bg-muted mt-2 h-4 w-2/3 animate-pulse rounded\"></div>\n </div>\n } @else {\n <div #codeEl [class]=\"contentClasses()\" [innerHTML]=\"highlightedCode()\"></div>\n }\n </div>\n</div>\n", styles: [":host{display:block}:host ::ng-deep .shiki{margin:0;padding:0;overflow-x:auto;background:transparent!important;background-color:transparent!important}:host ::ng-deep .shiki code{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:.875rem;line-height:1.7;display:block;counter-reset:line}:host ::ng-deep .shiki .line{display:inline-block;width:100%}:host ::ng-deep .shiki .line:before{counter-increment:line;content:counter(line);display:inline-block;width:2rem;margin-right:1rem;text-align:right;color:var(--muted-foreground);opacity:.5;-webkit-user-select:none;user-select:none}\n"] }]
|
|
132
|
+
}], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], zTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTitle", required: false }] }], zLanguage: [{ type: i0.Input, args: [{ isSignal: true, alias: "zLanguage", required: false }] }], zCode: [{ type: i0.Input, args: [{ isSignal: true, alias: "zCode", required: false }] }], zTheme: [{ type: i0.Input, args: [{ isSignal: true, alias: "zTheme", required: false }] }], zShowLineNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "zShowLineNumbers", required: false }] }], codeEl: [{ type: i0.ViewChild, args: ['codeEl', { isSignal: true }] }] } });
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Generated bundle index. Do not edit.
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
export { ZCodeComponent };
|
|
139
|
+
//# sourceMappingURL=shival99-z-ui-components-z-code.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shival99-z-ui-components-z-code.mjs","sources":["../../../../libs/core-ui/components/z-code/z-code.utils.ts","../../../../libs/core-ui/components/z-code/z-code.component.ts","../../../../libs/core-ui/components/z-code/z-code.component.html","../../../../libs/core-ui/components/z-code/shival99-z-ui-components-z-code.ts"],"sourcesContent":["import type { BundledLanguage, BundledTheme, HighlighterGeneric } from 'shiki';\n\nexport const getHighlighter = (() => {\n let cache: Promise<HighlighterGeneric<BundledLanguage, BundledTheme>> | null = null;\n\n return async (): Promise<HighlighterGeneric<BundledLanguage, BundledTheme>> => {\n if (cache) {\n return cache;\n }\n\n cache = import('shiki').then(async ({ createHighlighter }) =>\n createHighlighter({\n themes: ['github-dark', 'github-light', 'vitesse-dark', 'one-dark-pro'],\n langs: [\n 'typescript',\n 'javascript',\n 'html',\n 'css',\n 'scss',\n 'json',\n 'bash',\n 'shell',\n 'markdown',\n 'yaml',\n 'python',\n 'java',\n 'sql',\n 'xml',\n 'angular-ts',\n 'angular-html',\n ],\n })\n );\n\n return cache;\n };\n})();\n\nexport function escapeHtml(text: string): string {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport { ZToastService } from '@shival99/z-ui/components/z-toast';\nimport { ZThemeService } from '@shival99/z-ui/services';\nimport { zMergeClasses } from '@shival99/z-ui/utils';\nimport type { ClassValue } from 'clsx';\nimport type { BundledLanguage } from 'shiki';\nimport { type ZCodeTheme } from './z-code.types';\nimport { escapeHtml, getHighlighter } from './z-code.utils';\n\n@Component({\n selector: 'z-code',\n imports: [ZIconComponent, ZButtonComponent],\n standalone: true,\n templateUrl: './z-code.component.html',\n styleUrl: './z-code.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZCodeComponent implements AfterViewInit {\n public readonly class = input<ClassValue>('');\n public readonly zTitle = input<string>('');\n public readonly zLanguage = input<BundledLanguage>('typescript');\n public readonly zCode = input<string>('');\n public readonly zTheme = input<ZCodeTheme | ''>('');\n public readonly zShowLineNumbers = input<boolean>(true);\n\n protected readonly codeEl = viewChild<ElementRef<HTMLDivElement>>('codeEl');\n protected readonly copied = signal(false);\n protected readonly highlightedCode = signal<SafeHtml>('');\n protected readonly isHighlighting = signal(true);\n\n private readonly _toast = inject(ZToastService);\n private readonly _sanitizer = inject(DomSanitizer);\n private readonly _themeService = inject(ZThemeService);\n private _rawCode = '';\n\n private readonly _effectiveTheme = computed(() => {\n const inputTheme = this.zTheme();\n if (inputTheme) {\n return inputTheme;\n }\n return this._themeService.isDark() ? 'github-dark' : 'github-light';\n });\n\n protected readonly wrapperClasses = computed(() =>\n zMergeClasses('border-border bg-card overflow-hidden rounded-lg border', this.class())\n );\n\n protected readonly contentClasses = computed(() =>\n zMergeClasses('overflow-x-auto p-4', this.zTitle() ? '' : 'pt-10')\n );\n\n constructor() {\n effect(() => {\n const code = this.zCode();\n const lang = this.zLanguage();\n const theme = this._effectiveTheme();\n\n if (!code) {\n return;\n }\n\n this._rawCode = code;\n void this._highlightCode(code, lang, theme);\n });\n }\n\n ngAfterViewInit(): void {\n if (this.zCode()) {\n return;\n }\n\n const codeEl = this.codeEl()?.nativeElement;\n if (!codeEl) {\n return;\n }\n\n const preEl = codeEl.querySelector('pre');\n const codeContent = preEl?.querySelector('code');\n const rawText = codeContent?.textContent ?? preEl?.textContent ?? codeEl.textContent ?? '';\n\n if (!rawText.trim()) {\n return;\n }\n\n this._rawCode = rawText.trim();\n void this._highlightCode(this._rawCode, this.zLanguage(), this._effectiveTheme());\n }\n\n private async _highlightCode(code: string, lang: BundledLanguage, theme: ZCodeTheme): Promise<void> {\n this.isHighlighting.set(true);\n try {\n const highlighter = await getHighlighter();\n const html = highlighter.codeToHtml(code, { lang, theme });\n const safeHtml = this._sanitizer.bypassSecurityTrustHtml(html);\n this.highlightedCode.set(safeHtml);\n } catch (error) {\n console.warn('Shiki highlighting failed, falling back to plain text:', error);\n const escapedHtml = `<pre class=\"shiki\"><code>${escapeHtml(code)}</code></pre>`;\n this.highlightedCode.set(this._sanitizer.bypassSecurityTrustHtml(escapedHtml));\n } finally {\n this.isHighlighting.set(false);\n }\n }\n\n protected copyCode(): void {\n const code = this._rawCode.trim();\n\n void navigator.clipboard.writeText(code).then(() => {\n this.copied.set(true);\n this._toast.success('Code đã được copy!');\n setTimeout(() => {\n this.copied.set(false);\n }, 2000);\n });\n }\n}\n","<div [class]=\"wrapperClasses()\">\n @if (zTitle()) {\n <div class=\"z-code-header border-border flex items-center justify-between border-b px-4 py-2\">\n <span class=\"text-muted-foreground text-xs font-medium\">{{ zTitle() }}</span>\n <button z-button zType=\"outline\" zSize=\"xs\" [zWave]=\"false\" (click)=\"copyCode()\">\n @if (copied()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-green-500\" />\n <span class=\"text-green-500\">Copied!</span>\n } @else {\n <z-icon zType=\"lucideCopy\" zSize=\"14\" />\n <span>Copy</span>\n }\n </button>\n </div>\n }\n <div class=\"relative\">\n @if (!zTitle()) {\n <button\n z-button\n zType=\"outline\"\n zSize=\"xs\"\n [zWave]=\"false\"\n class=\"absolute top-2 right-2 z-10 backdrop-blur-sm\"\n (click)=\"copyCode()\">\n @if (copied()) {\n <z-icon zType=\"lucideCheck\" zSize=\"14\" class=\"text-green-500\" />\n <span class=\"text-green-500\">Copied!</span>\n } @else {\n <z-icon zType=\"lucideCopy\" zSize=\"14\" />\n <span>Copy</span>\n }\n </button>\n }\n @if (isHighlighting()) {\n <div class=\"p-4\">\n <div class=\"bg-muted h-4 w-3/4 animate-pulse rounded\"></div>\n <div class=\"bg-muted mt-2 h-4 w-1/2 animate-pulse rounded\"></div>\n <div class=\"bg-muted mt-2 h-4 w-2/3 animate-pulse rounded\"></div>\n </div>\n } @else {\n <div #codeEl [class]=\"contentClasses()\" [innerHTML]=\"highlightedCode()\"></div>\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|