@apexara/ng-components 1.0.5 → 1.0.6-test.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +298 -25
  2. package/fesm2022/apexara-ng-components-checkbox.mjs +44 -6
  3. package/fesm2022/apexara-ng-components-checkbox.mjs.map +1 -1
  4. package/fesm2022/apexara-ng-components-chip.mjs +5 -2
  5. package/fesm2022/apexara-ng-components-chip.mjs.map +1 -1
  6. package/fesm2022/apexara-ng-components-dialog.mjs +2 -2
  7. package/fesm2022/apexara-ng-components-dialog.mjs.map +1 -1
  8. package/fesm2022/apexara-ng-components-drawer.mjs +7 -15
  9. package/fesm2022/apexara-ng-components-drawer.mjs.map +1 -1
  10. package/fesm2022/apexara-ng-components-expander.mjs +3 -15
  11. package/fesm2022/apexara-ng-components-expander.mjs.map +1 -1
  12. package/fesm2022/apexara-ng-components-input.mjs +2 -2
  13. package/fesm2022/apexara-ng-components-input.mjs.map +1 -1
  14. package/fesm2022/apexara-ng-components-listbox.mjs +2 -2
  15. package/fesm2022/apexara-ng-components-listbox.mjs.map +1 -1
  16. package/fesm2022/apexara-ng-components-more-options.mjs +132 -0
  17. package/fesm2022/apexara-ng-components-more-options.mjs.map +1 -0
  18. package/fesm2022/apexara-ng-components-radiobutton.mjs +2 -2
  19. package/fesm2022/apexara-ng-components-radiobutton.mjs.map +1 -1
  20. package/fesm2022/apexara-ng-components-select.mjs +2 -2
  21. package/fesm2022/apexara-ng-components-select.mjs.map +1 -1
  22. package/fesm2022/apexara-ng-components-snackbar.mjs +2 -44
  23. package/fesm2022/apexara-ng-components-snackbar.mjs.map +1 -1
  24. package/fesm2022/apexara-ng-components-table.mjs +57 -5
  25. package/fesm2022/apexara-ng-components-table.mjs.map +1 -1
  26. package/package.json +5 -2
  27. package/types/apexara-ng-components-checkbox.d.ts +13 -2
  28. package/types/apexara-ng-components-chip.d.ts +7 -1
  29. package/types/apexara-ng-components-more-options.d.ts +34 -0
  30. package/types/apexara-ng-components-select.d.ts +1 -0
  31. package/types/apexara-ng-components-snackbar.d.ts +0 -3
  32. package/types/apexara-ng-components-table.d.ts +27 -5
package/README.md CHANGED
@@ -28,6 +28,7 @@ npm install @apexara/ng-components
28
28
  [🔽 Table](#apex-table-component) <br>
29
29
  [🔽 Textarea](#apex-textarea-component) <br>
30
30
  [🔽 Tooltip](#apex-tooltip-component) <br>
31
+ [🔽 More Options](#apex-more-options-component) <br>
31
32
 
32
33
 
33
34
  -----------------------------------------------------------------
@@ -146,17 +147,29 @@ with a APEX Tooltip.
146
147
  > formControlName: 'checkboxControl',
147
148
  > }
148
149
  >
150
+ > public checkboxWithErrorOptions: ApexCheckboxOptions = {
151
+ > formGroup: this.formGroup,
152
+ > formControlName: 'checkboxControl',
153
+ > errors: {
154
+ > required: 'You must accept the terms and conditions',
155
+ > },
156
+ > }
157
+ >
149
158
  >}
150
159
  >```
151
160
  >**`parent.component.html`**
152
161
  >```html
153
- ><apex-checkbox
162
+ ><apex-checkbox
154
163
  > [checked]="true"
155
164
  > [disabled]="false"
156
165
  > [options]="checkboxOptions"
157
166
  > [tooltip]="'example tooltip text'">
158
167
  ></apex-checkbox>
159
168
  >
169
+ ><!-- With error validation -->
170
+ ><apex-checkbox [options]="checkboxWithErrorOptions">
171
+ > I accept the terms and conditions
172
+ ></apex-checkbox>
160
173
  >```
161
174
  ### Inputs
162
175
 
@@ -169,13 +182,20 @@ with a APEX Tooltip.
169
182
  >#### tooltip
170
183
  >a text that if present triggers a tooltip component with it inside.
171
184
 
172
- >#### formGroup
173
- >Refference to the FormGroup that the apex-checkbox will handle
185
+ >#### options - ApexCheckboxOptions
174
186
 
175
- >#### formControlName
176
- >Refference to the name of the control that we will access in the FormGroup
187
+ >**formGroup?: FormGroup**: Reference to the FormGroup that the apex-checkbox will handle.
188
+ >
189
+ >**formControlName?: string**: Reference to the name of the control that we will access in the FormGroup.
190
+ >
191
+ >**errors?: ApexCheckboxErrors**: A map of validation error keys to error message strings. When the control is touched and invalid, the first matching error message is displayed below the checkbox.
192
+ >```typescript
193
+ >errors: {
194
+ > required: 'This field is required',
195
+ >}
196
+ >```
177
197
 
178
- ### CSS Variables
198
+ ### CSS Variables
179
199
  >Here are all the CSS variables (and their default values) you can set when using apex-checkbox:
180
200
  >
181
201
  >```css
@@ -188,8 +208,9 @@ with a APEX Tooltip.
188
208
  > --apex-checkbox-wrapper-border-color: transparent;
189
209
  > --apex-checkbox-arrow-color: #FFFFFF;
190
210
  > --apex-checkbox-tooltip-icon-stroke: #FFFFFF;
211
+ > --apex-checkbox-error-color: #F96138;
191
212
  >
192
- > --apex-checkbox-border-color: #E9E9E9;
213
+ > --apex-checkbox-border-color: #E9E9E9;
193
214
  > --apex-checkbox-border-hover-color: #F96138;
194
215
  > --apex-checkbox-outline-color: none;
195
216
  >
@@ -204,38 +225,83 @@ with a APEX Tooltip.
204
225
  -----------------------------------------------------------------
205
226
 
206
227
  # APEX Chip component
207
- A simple visual container for displaying a text, state, etc.
228
+ A simple visual container for displaying a text, state, etc. Supports optional left and right icons and an optional close button.
208
229
 
209
230
  ## Usage
210
231
  >**`parent.component.ts`**
211
232
  >```typescript
212
- >import { ApexChipComponent }
233
+ >import { ApexChipComponent, ApexChipOptions }
213
234
  >from '@apexara/ng-components/chip';
214
235
  >
215
236
  >@Component({
216
237
  > imports: [ ApexChipComponent ]
217
238
  >})
218
239
  >
219
- >export class ChipExampleComponent { }
240
+ >export class ChipExampleComponent {
241
+ >
242
+ > public chipOptions: ApexChipOptions = {
243
+ > iconLeft: 'icon.svg',
244
+ > iconRight: 'arrow.svg',
245
+ > };
246
+ >
247
+ > public chipClose(): void {
248
+ > // handle close
249
+ > }
250
+ >
251
+ >}
220
252
  >
221
253
  >```
222
254
  >**`parent.component.html`**
223
255
  >```html
224
- ><apex-chip
225
- > class="with-close-icon"
256
+ ><!-- Basic chip -->
257
+ ><apex-chip>Default</apex-chip>
258
+ >
259
+ ><!-- With close icon -->
260
+ ><apex-chip
226
261
  > [closeIcon]="true"
227
262
  > (closeChange)="chipClose()">
228
- > With Close Icon
263
+ > Closeable
264
+ ></apex-chip>
265
+ >
266
+ ><!-- With left icon -->
267
+ ><apex-chip [options]="{ iconLeft: 'icon.svg' }">With Left Icon</apex-chip>
268
+ >
269
+ ><!-- With right icon -->
270
+ ><apex-chip [options]="{ iconRight: 'arrow.svg' }">With Right Icon</apex-chip>
271
+ >
272
+ ><!-- With both icons and close -->
273
+ ><apex-chip
274
+ > [options]="chipOptions"
275
+ > [closeIcon]="true"
276
+ > (closeChange)="chipClose()">
277
+ > Full Featured
229
278
  ></apex-chip>
230
279
  >```
231
280
  >
232
281
 
282
+ ### ApexChipOptions
283
+ >```typescript
284
+ >interface ApexChipOptions {
285
+ > iconLeft?: string; // SVG filename relative to assets/img/
286
+ > iconRight?: string; // SVG filename relative to assets/img/
287
+ >}
288
+ >```
289
+
233
290
  ### Inputs
291
+ >#### options
292
+ >ApexChipOptions object to configure optional left and right icons. Icon files are resolved from the `assets/img/` directory.
293
+
234
294
  >#### closeIcon
235
295
  >boolean that triggers an X icon that has the closeChange event emitter attached.
236
296
 
297
+ ### Outputs
237
298
  >#### closeChange
238
- >event emitter to handle clicks
299
+ >event emitter triggered when the close icon is clicked.
300
+
301
+ ### Layout Order
302
+ >When all features are enabled, the chip renders in this order:
303
+ >
304
+ >`[ left icon ] [ text ] [ right icon ] [ close X ]`
239
305
 
240
306
  ### CSS Variables
241
307
  >Here all the available CSS variables (and their default values) you can set when using apex-chip:
@@ -244,11 +310,17 @@ A simple visual container for displaying a text, state, etc.
244
310
  >apex-chip {
245
311
  > /* Sizes: */
246
312
  > --apex-chip-font-size: 12px;
313
+ > --apex-chip-icon-size: 16px;
314
+ > --apex-chip-icon-spacing: 6px;
247
315
  >
248
316
  > /* Colors, Fills, Strokes: */
249
317
  > --apex-chip-color: #FFFFFF;
250
318
  > --apex-chip-background-color: #0B1222;
251
319
  > --apex-chip-icon-color: #FFFFFF;
320
+ > --apex-chip-left-icon-fill: #FFFFFF;
321
+ > --apex-chip-left-icon-stroke: #ffffff00;
322
+ > --apex-chip-right-icon-fill: #FFFFFF;
323
+ > --apex-chip-right-icon-stroke: #ffffff00;
252
324
  >}
253
325
  >```
254
326
 
@@ -878,8 +950,8 @@ Simple styled radio-button that can accept a formGroup and a control.
878
950
  > public selectOptions: ApexSelectOptions = {
879
951
  > label: 'Example label',
880
952
  > data: [
881
- > { label: 'Any string', value: any },
882
- > { label: '', value: any },
953
+ > { label: 'Any string', value: any, icon: 'icon.svg' },
954
+ > { label: '', value: any, icon: 'write.svg' },
883
955
  > { label: '', value: any },
884
956
  > ],
885
957
  > tooltip: 'tooltip text',
@@ -969,6 +1041,14 @@ Simple styled radio-button that can accept a formGroup and a control.
969
1041
  > --apex-select-dropdown-border-color: #E9E9E9;
970
1042
  > --apex-select-dropdown-background-color: #FFFFFF;
971
1043
  >
1044
+ > /* Option icons (per-item icons in dropdown): */
1045
+ > --apex-select-option-icon-size: 20px;
1046
+ > --apex-select-option-icon-spacing: 10px;
1047
+ > --apex-select-option-icon-fill: #5D6068;
1048
+ > --apex-select-option-icon-stroke: #ffffff00;
1049
+ > --apex-select-option-icon-selected-fill: #F96138;
1050
+ > --apex-select-option-icon-selected-stroke: #ffffff00;
1051
+ >
972
1052
  >/* Note: When you want to setup the color of your icon
973
1053
  > you should experiment with both these variables or consider
974
1054
  > using the one your icon is based on. */
@@ -1543,18 +1623,35 @@ Two types of tables are available. One with local data and local sorting & filte
1543
1623
  >
1544
1624
  >**class?: string | { [key: string]: string }**: Custom CSS classes for styling the column.
1545
1625
  >
1626
+ >**change?: string**: Row property path for a percentage change value. When set, an inline chip appears next to the cell value showing the change (e.g., "+6.2%") — green for positive, red for negative. Works with Text, Number, Currency, and NumberMath column types.
1627
+ >
1628
+ >**listOptions?: ApexTableListOptions**: Groups list column display options into a single object.
1629
+ >- `label?: string` — the property name on each array item to use as the display label (e.g., `'name'`).
1630
+ >- `max?: number` — the maximum number of items to show before the overflow badge. Default is `3`.
1631
+ >
1632
+ >**cellOptions?: ApexTableCellOptions**: Groups cell-level display options (icon, icon position, color) into a single object.
1633
+ >
1634
+ >```typescript
1635
+ >export interface ApexTableCellOptions {
1636
+ > icon?: string | { [key: string]: string }; // static icon or value-to-icon map
1637
+ > iconPosition?: 'left' | 'right'; // default: 'left'
1638
+ > color?: { [key: string]: string }; // value-to-color map for text color
1639
+ >}
1640
+ >```
1641
+ >
1546
1642
 
1547
1643
  >#### columnType - ApexTableColumnType
1548
- >```typescript
1644
+ >```typescript
1549
1645
  >export enum ApexTableColumnType {
1550
- > Text, // A standard text column
1551
- > Date, // A column for displaying dates
1552
- > Currency, // A column for displaying currencies
1553
- > Chip, // A column for displaying chip components
1554
- > Checkbox, // A column for displaying checkboxes
1555
- > Number, // A column for displaying numbers
1646
+ > Text, // A standard text column
1647
+ > Date, // A column for displaying dates
1648
+ > Currency, // A column for displaying currencies
1649
+ > Chip, // A column for displaying chip components
1650
+ > Checkbox, // A column for displaying checkboxes
1651
+ > Number, // A column for displaying numbers
1556
1652
  > NumberMath, // A column for displaying combined properties' values numbers with additional addition, subtraction, multiplication, division logic.
1557
- > Actions, // A column for action buttons
1653
+ > Actions, // A column for action buttons
1654
+ > List, // A column for displaying arrays with overflow badge
1558
1655
  >}
1559
1656
  >```
1560
1657
  >
@@ -1571,7 +1668,90 @@ Two types of tables are available. One with local data and local sorting & filte
1571
1668
  >Number Column: Displays numbers with optional prefix and suffix. This column type also supports calculations based on the numeric values.
1572
1669
  >
1573
1670
  >Actions Column: Displays action buttons with dynamic visibility based on context.
1574
- >```typescript
1671
+ >
1672
+ >List Column: Displays an array of objects as a formatted text string joined by " / " (e.g., "Miami / Orlando / Tampa"). When the array exceeds `listOptions.max` items, an overflow badge (+N) appears. Hovering the badge shows a tooltip with all remaining items.
1673
+
1674
+ ### List Column Usage
1675
+
1676
+ >```typescript
1677
+ >// Data
1678
+ >public tableData = [
1679
+ > {
1680
+ > id: 1,
1681
+ > locations: [
1682
+ > { name: 'Miami' },
1683
+ > { name: 'Orlando' },
1684
+ > { name: 'Tampa' },
1685
+ > { name: 'Jacksonville' },
1686
+ > { name: 'Tallahassee' }
1687
+ > ]
1688
+ > }
1689
+ >];
1690
+ >
1691
+ >// Column config
1692
+ >public tableColumns: ApexTableColumn[] = [
1693
+ > {
1694
+ > label: 'Locations',
1695
+ > value: 'locations',
1696
+ > type: ApexTableColumnType.List,
1697
+ > listOptions: {
1698
+ > label: 'name', // which property on each item to display
1699
+ > max: 3, // show first 3, then "+2" badge
1700
+ > },
1701
+ > width: '200px'
1702
+ > }
1703
+ >];
1704
+ >```
1705
+ >
1706
+ >This renders: **Miami / Orlando / Tampa** `+2`
1707
+ >
1708
+ >Hovering `+2` shows a tooltip with:
1709
+ >- Jacksonville
1710
+ >- Tallahassee
1711
+
1712
+ ### List Column CSS Variables
1713
+
1714
+ >| Variable | Default | Description |
1715
+ >|---|---|---|
1716
+ >| `--apex-table-list-overflow-background` | `transparent` | Overflow badge background |
1717
+ >| `--apex-table-list-overflow-color` | `#FFA753` | Overflow badge text color |
1718
+ >| `--apex-table-list-overflow-border-color` | `#FFEFE1` | Overflow badge border color |
1719
+
1720
+ ### Cell Icons
1721
+
1722
+ Cell icons allow you to display an icon next to the text in a cell. The icon can be static or mapped per value, making it useful for status indicators, engagement levels, etc.
1723
+
1724
+ >```typescript
1725
+ >// Column with value-mapped icons and colors
1726
+ >public columns: ApexTableColumn[] = [
1727
+ > {
1728
+ > label: 'Engagement',
1729
+ > value: 'engagement',
1730
+ > width: '120px',
1731
+ > cellOptions: {
1732
+ > icon: {
1733
+ > 'High': 'arrow-up.svg',
1734
+ > 'Medium': 'arrow-up-right.svg',
1735
+ > 'Low': 'arrow-down.svg'
1736
+ > },
1737
+ > color: {
1738
+ > 'High': '#26D280',
1739
+ > 'Medium': '#FFA753',
1740
+ > 'Low': '#FF4242'
1741
+ > }
1742
+ > }
1743
+ > }
1744
+ >];
1745
+ >```
1746
+ >
1747
+ >This renders an arrow icon + colored text per value:
1748
+ >- **High**: green arrow up + green text
1749
+ >- **Medium**: orange diagonal arrow + orange text
1750
+ >- **Low**: red arrow down + red text
1751
+ >
1752
+ >Use `iconPosition: 'right'` inside `cellOptions` to place the icon after the text.
1753
+
1754
+ >```typescript
1575
1755
  >export interface Action {
1576
1756
  > icon: string; // Icon source. example: ('assets/icons/icon.svg')
1577
1757
  > label: string; // Label for icon. Tooltip pops on hover.
@@ -1889,3 +2069,96 @@ place it as a directive to a component:
1889
2069
  [🔼 Back to top](#components)
1890
2070
 
1891
2071
  -----------------------------------------------------------------
2072
+
2073
+ # APEX More Options Component
2074
+ A three-dot menu button that opens a dropdown with action items. Supports horizontal and vertical dot orientation, icon + label menu items, and custom dropdown content via ng-content.
2075
+
2076
+ ## Usage
2077
+ >**`parent.component.ts`**
2078
+ >```typescript
2079
+ >import { ApexMoreOptionsComponent, ApexMoreOptionsItem }
2080
+ >from '@apexara/ng-components/more-options';
2081
+ >
2082
+ >@Component({
2083
+ > imports: [ ApexMoreOptionsComponent ]
2084
+ >})
2085
+ >
2086
+ >export class ExampleComponent {
2087
+ >
2088
+ > public menuItems: ApexMoreOptionsItem[] = [
2089
+ > { label: 'Edit', icon: 'write.svg', execute: () => console.log('edit') },
2090
+ > { label: 'View', icon: 'eye.svg', execute: () => console.log('view') },
2091
+ > { label: 'Delete', icon: 'delete.svg', disabled: true },
2092
+ > ];
2093
+ >
2094
+ >}
2095
+ >```
2096
+ >**`parent.component.html`**
2097
+ >```html
2098
+ ><!-- Default (horizontal dots) with items -->
2099
+ ><apex-more-options
2100
+ > [items]="menuItems"
2101
+ > (itemClick)="onItemClick($event)">
2102
+ ></apex-more-options>
2103
+ >
2104
+ ><!-- Vertical dots -->
2105
+ ><apex-more-options
2106
+ > [items]="menuItems"
2107
+ > [vertical]="true">
2108
+ ></apex-more-options>
2109
+ >
2110
+ ><!-- Custom dropdown content (no items) -->
2111
+ ><apex-more-options>
2112
+ > <div style="padding: 16px;">Any custom content here</div>
2113
+ ></apex-more-options>
2114
+ >```
2115
+
2116
+ ### ApexMoreOptionsItem
2117
+ >```typescript
2118
+ >interface ApexMoreOptionsItem {
2119
+ > icon?: string; // SVG filename relative to assets/img/
2120
+ > label: string;
2121
+ > execute?: () => void;
2122
+ > disabled?: boolean;
2123
+ >}
2124
+ >```
2125
+
2126
+ ### Inputs
2127
+ >#### items
2128
+ >Array of `ApexMoreOptionsItem` objects defining the dropdown menu actions. When empty, the component falls back to projecting `<ng-content>` for custom dropdown content.
2129
+
2130
+ >#### vertical
2131
+ >Boolean that rotates the three-dot icon 90 degrees for vertical orientation. Default is `false` (horizontal).
2132
+
2133
+ ### Outputs
2134
+ >#### itemClick
2135
+ >Event emitter that fires the clicked `ApexMoreOptionsItem` when a menu item is selected.
2136
+
2137
+ ### CSS Variables
2138
+ >Here are all the available CSS variables (and their default values) you can set when using apex-more-options:
2139
+ >
2140
+ >```css
2141
+ >apex-more-options {
2142
+ > /* Trigger button: */
2143
+ > --apex-more-options-trigger-size: 32px;
2144
+ > --apex-more-options-trigger-border-radius: 8px;
2145
+ > --apex-more-options-trigger-background: transparent;
2146
+ > --apex-more-options-trigger-hover-background: #F7F8FB;
2147
+ > --apex-more-options-trigger-border-color: #E9E9E9;
2148
+ > --apex-more-options-icon-fill: #000000;
2149
+ >
2150
+ > /* Dropdown: */
2151
+ > --apex-more-options-dropdown-background: #FFFFFF;
2152
+ > --apex-more-options-dropdown-border-radius: 8px;
2153
+ > --apex-more-options-dropdown-box-shadow: 0px 4px 8px 0px rgba(214, 214, 214, 0.35);
2154
+ >
2155
+ > /* Menu items: */
2156
+ > --apex-more-options-item-height: 44px;
2157
+ > --apex-more-options-item-hover-background: #F3F3F3;
2158
+ > --apex-more-options-item-color: #0B1222;
2159
+ > --apex-more-options-item-icon-fill: #5D6068;
2160
+ > --apex-more-options-item-icon-stroke: #ffffff00;
2161
+ >}
2162
+ >```
2163
+
2164
+ [🔼 Back to top](#components)
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Output, Input, Component } from '@angular/core';
2
+ import { EventEmitter, HostListener, Output, Input, Component } from '@angular/core';
3
3
  import { NgClass, NgTemplateOutlet } from '@angular/common';
4
4
  import * as i1 from '@angular/forms';
5
5
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
@@ -14,26 +14,61 @@ class ApexCheckboxComponent {
14
14
  this.options = null;
15
15
  this.clickChange = new EventEmitter();
16
16
  this.tooltipPosition = TooltipPosition;
17
+ this.controlInvalid = false;
18
+ this.errorLabel = '';
19
+ this.control = null;
17
20
  }
18
21
  ngAfterViewInit() {
19
- this.checkIfControlDisabled();
22
+ this.setControl();
20
23
  }
21
24
  ngOnDestroy() {
22
25
  if (this.controlSubscription) {
23
26
  this.controlSubscription.unsubscribe();
24
27
  }
25
28
  }
29
+ onFocusOut() {
30
+ this.initChange();
31
+ }
26
32
  onChange() {
27
33
  this.clickChange.emit(this.checked);
28
34
  }
29
- checkIfControlDisabled() {
35
+ setControl() {
30
36
  if (!this.options || !this.options.formGroup || !this.options.formControlName || !this.options.formGroup.get(this.options.formControlName)) {
31
37
  return;
32
38
  }
33
- this.disabled = this.options.formGroup.controls[this.options.formControlName].disabled;
39
+ this.control = this.options.formGroup.controls[this.options.formControlName];
40
+ this.disabled = this.control.disabled;
41
+ this.controlSubscription = this.control.statusChanges.subscribe(() => {
42
+ this.initChange();
43
+ });
44
+ }
45
+ initChange() {
46
+ if (!this.control) {
47
+ return;
48
+ }
49
+ this.checkIfControlInvalid(this.control);
50
+ this.getErrorLabel();
51
+ this.changeDetectorRef.detectChanges();
52
+ }
53
+ checkIfControlInvalid(control) {
54
+ this.controlInvalid = control.touched && control.invalid;
55
+ }
56
+ getErrorLabel() {
57
+ this.errorLabel = '';
58
+ const options = this.options;
59
+ const formGroup = options.formGroup;
60
+ const formControlName = options.formControlName;
61
+ if (formGroup && formControlName && options.errors && this.controlInvalid) {
62
+ for (const error in options.errors) {
63
+ if (formGroup.controls[formControlName].hasError(error)) {
64
+ this.errorLabel = options.errors[error];
65
+ return;
66
+ }
67
+ }
68
+ }
34
69
  }
35
70
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ApexCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
36
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: ApexCheckboxComponent, isStandalone: true, selector: "apex-checkbox", inputs: { checked: "checked", disabled: "disabled", tooltip: "tooltip", options: "options" }, outputs: { clickChange: "clickChange" }, ngImport: i0, template: "@if (options && options.formGroup && options.formControlName) {\n <label class=\"checkbox\" [ngClass]=\"{ checked: options.formGroup.controls[options.formControlName].value, disabled }\" [formGroup]=\"options.formGroup\">\n <input #input type=\"checkbox\" name=\"checkbox\" [formControlName]=\"options.formControlName\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n} @else {\n <label class=\"checkbox\" [ngClass]=\"{ checked, disabled }\">\n <input #input type=\"checkbox\" name=\"checkbox\" [(ngModel)]=\"checked\" [disabled]=\"disabled\" (change)=\"onChange()\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n \n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n}\n\n<ng-template #content>\n <span>\n <ng-content></ng-content>\n </span>\n\n @if (tooltip) {\n <div class=\"tooltip-svg\">\n <svg [apexTooltip]=\"tooltip\" [tooltipPosition]=\"tooltipPosition.Above\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g stroke=\"#fff\">\n <path d=\"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 7.5H8V11h.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.25 5.25a.25.25 0 1 1-.5 0 .25.25 0 0 1 .5 0z\" fill=\"#fff\"/>\n </g>\n </svg>\n </div>\n }\n</ng-template>\n", styles: [":host{touch-action:manipulation}.checkbox{display:flex;align-items:center;position:relative;cursor:pointer}.checkbox.disabled{opacity:var(--apex-checkbox-disabled-opacity, .5);cursor:not-allowed;pointer-events:none}.checkbox span{color:var(--apex-checkbox-text-color, #0B1222);text-wrap:wrap;word-break:break-all;font-size:var(--apex-checkbox-font-size, 14px)}.checkbox span:not(:empty){margin:0 4px 0 8px}.checkbox input[type=checkbox]{width:20px;min-width:20px;height:20px;display:block}.checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;position:relative;cursor:pointer;outline:var(--apex-checkbox-outline-color, none);background-color:var(--apex-checkbox-background-color, #F7F8FB);border:1px solid var(--apex-checkbox-border-color, #E9E9E9);border-radius:4px;transition:box-shadow .3s,border .25s;box-shadow:inset 0 0 0 0 var(--apex-checkbox-border-color);margin:0}.checkbox.checked input[type=checkbox]{box-shadow:inset 0 0 0 10px var(--apex-checkbox-box-shadow-color, #F96138)}.checkbox-svg{width:20px;height:20px;position:absolute}.checkbox .checkbox-svg svg{position:absolute;top:50%;left:50%;transform:translateY(-50%) translate(-50%)}.checkbox .checkbox-svg svg path{fill:none;stroke:none;pointer-events:none;stroke:transparent;stroke-linecap:round;stroke-linejoin:round}.checkbox.checked .checkbox-svg svg path{stroke:var(--apex-checkbox-arrow-color, #FFFFFF)}.tooltip-svg{width:16px;height:16px}.tooltip-svg g{stroke:var(--apex-checkbox-tooltip-icon-stroke, #FFFFFF)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ApexTooltipDirective, selector: "[apexTooltip]", inputs: ["apexTooltip", "tooltipPosition"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
71
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: ApexCheckboxComponent, isStandalone: true, selector: "apex-checkbox", inputs: { checked: "checked", disabled: "disabled", tooltip: "tooltip", options: "options" }, outputs: { clickChange: "clickChange" }, host: { listeners: { "focusout": "onFocusOut()" } }, ngImport: i0, template: "@if (options && options.formGroup && options.formControlName) {\n <label class=\"checkbox\" [ngClass]=\"{ checked: options.formGroup.controls[options.formControlName].value, disabled }\" [formGroup]=\"options.formGroup\">\n <input #input type=\"checkbox\" name=\"checkbox\" [formControlName]=\"options.formControlName\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n\n @if (options && options.errors) {\n <div class=\"footer\" [ngClass]=\"{ 'error': controlInvalid }\">\n {{ errorLabel }}\n </div>\n }\n} @else {\n <label class=\"checkbox\" [ngClass]=\"{ checked, disabled }\">\n <input #input type=\"checkbox\" name=\"checkbox\" [(ngModel)]=\"checked\" [disabled]=\"disabled\" (change)=\"onChange()\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n \n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n}\n\n<ng-template #content>\n <span>\n <ng-content></ng-content>\n </span>\n\n @if (tooltip) {\n <div class=\"tooltip-svg\">\n <svg [apexTooltip]=\"tooltip\" [tooltipPosition]=\"tooltipPosition.Above\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g stroke=\"#fff\">\n <path d=\"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 7.5H8V11h.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.25 5.25a.25.25 0 1 1-.5 0 .25.25 0 0 1 .5 0z\" fill=\"#fff\"/>\n </g>\n </svg>\n </div>\n }\n</ng-template>\n", styles: [":host{touch-action:manipulation}.checkbox{display:flex;align-items:center;position:relative;cursor:pointer}.checkbox.disabled{opacity:var(--apex-checkbox-disabled-opacity, .5);cursor:not-allowed;pointer-events:none}.checkbox span{color:var(--apex-checkbox-text-color, #0B1222);text-wrap:wrap;word-break:break-all;font-size:var(--apex-checkbox-font-size, 14px)}.checkbox span:not(:empty){margin:0 4px 0 8px}.checkbox input[type=checkbox]{width:20px;min-width:20px;height:20px;display:block}.checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;position:relative;cursor:pointer;outline:var(--apex-checkbox-outline-color, none);background-color:var(--apex-checkbox-background-color, #F7F8FB);border:1px solid var(--apex-checkbox-border-color, #E9E9E9);border-radius:4px;transition:box-shadow .3s,border .25s;box-shadow:inset 0 0 0 0 var(--apex-checkbox-border-color);margin:0}.checkbox.checked input[type=checkbox]{box-shadow:inset 0 0 0 10px var(--apex-checkbox-box-shadow-color, #F96138)}.checkbox-svg{width:20px;height:20px;position:absolute}.checkbox .checkbox-svg svg{position:absolute;top:50%;left:50%;transform:translateY(-50%) translate(-50%)}.checkbox .checkbox-svg svg path{fill:none;stroke:none;pointer-events:none;stroke:transparent;stroke-linecap:round;stroke-linejoin:round}.checkbox.checked .checkbox-svg svg path{stroke:var(--apex-checkbox-arrow-color, #FFFFFF)}.tooltip-svg{width:16px;height:16px}.tooltip-svg g{stroke:var(--apex-checkbox-tooltip-icon-stroke, #FFFFFF)}.footer{height:14px;font-size:12px;margin-top:2px}.footer.error{color:var(--apex-checkbox-error-color, #F96138)}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ApexTooltipDirective, selector: "[apexTooltip]", inputs: ["apexTooltip", "tooltipPosition"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
37
72
  }
38
73
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: ApexCheckboxComponent, decorators: [{
39
74
  type: Component,
@@ -43,7 +78,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
43
78
  NgTemplateOutlet,
44
79
  ApexTooltipDirective,
45
80
  ReactiveFormsModule,
46
- ], template: "@if (options && options.formGroup && options.formControlName) {\n <label class=\"checkbox\" [ngClass]=\"{ checked: options.formGroup.controls[options.formControlName].value, disabled }\" [formGroup]=\"options.formGroup\">\n <input #input type=\"checkbox\" name=\"checkbox\" [formControlName]=\"options.formControlName\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n} @else {\n <label class=\"checkbox\" [ngClass]=\"{ checked, disabled }\">\n <input #input type=\"checkbox\" name=\"checkbox\" [(ngModel)]=\"checked\" [disabled]=\"disabled\" (change)=\"onChange()\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n \n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n}\n\n<ng-template #content>\n <span>\n <ng-content></ng-content>\n </span>\n\n @if (tooltip) {\n <div class=\"tooltip-svg\">\n <svg [apexTooltip]=\"tooltip\" [tooltipPosition]=\"tooltipPosition.Above\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g stroke=\"#fff\">\n <path d=\"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 7.5H8V11h.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.25 5.25a.25.25 0 1 1-.5 0 .25.25 0 0 1 .5 0z\" fill=\"#fff\"/>\n </g>\n </svg>\n </div>\n }\n</ng-template>\n", styles: [":host{touch-action:manipulation}.checkbox{display:flex;align-items:center;position:relative;cursor:pointer}.checkbox.disabled{opacity:var(--apex-checkbox-disabled-opacity, .5);cursor:not-allowed;pointer-events:none}.checkbox span{color:var(--apex-checkbox-text-color, #0B1222);text-wrap:wrap;word-break:break-all;font-size:var(--apex-checkbox-font-size, 14px)}.checkbox span:not(:empty){margin:0 4px 0 8px}.checkbox input[type=checkbox]{width:20px;min-width:20px;height:20px;display:block}.checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;position:relative;cursor:pointer;outline:var(--apex-checkbox-outline-color, none);background-color:var(--apex-checkbox-background-color, #F7F8FB);border:1px solid var(--apex-checkbox-border-color, #E9E9E9);border-radius:4px;transition:box-shadow .3s,border .25s;box-shadow:inset 0 0 0 0 var(--apex-checkbox-border-color);margin:0}.checkbox.checked input[type=checkbox]{box-shadow:inset 0 0 0 10px var(--apex-checkbox-box-shadow-color, #F96138)}.checkbox-svg{width:20px;height:20px;position:absolute}.checkbox .checkbox-svg svg{position:absolute;top:50%;left:50%;transform:translateY(-50%) translate(-50%)}.checkbox .checkbox-svg svg path{fill:none;stroke:none;pointer-events:none;stroke:transparent;stroke-linecap:round;stroke-linejoin:round}.checkbox.checked .checkbox-svg svg path{stroke:var(--apex-checkbox-arrow-color, #FFFFFF)}.tooltip-svg{width:16px;height:16px}.tooltip-svg g{stroke:var(--apex-checkbox-tooltip-icon-stroke, #FFFFFF)}\n"] }]
81
+ ], template: "@if (options && options.formGroup && options.formControlName) {\n <label class=\"checkbox\" [ngClass]=\"{ checked: options.formGroup.controls[options.formControlName].value, disabled }\" [formGroup]=\"options.formGroup\">\n <input #input type=\"checkbox\" name=\"checkbox\" [formControlName]=\"options.formControlName\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n\n @if (options && options.errors) {\n <div class=\"footer\" [ngClass]=\"{ 'error': controlInvalid }\">\n {{ errorLabel }}\n </div>\n }\n} @else {\n <label class=\"checkbox\" [ngClass]=\"{ checked, disabled }\">\n <input #input type=\"checkbox\" name=\"checkbox\" [(ngModel)]=\"checked\" [disabled]=\"disabled\" (change)=\"onChange()\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n \n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n}\n\n<ng-template #content>\n <span>\n <ng-content></ng-content>\n </span>\n\n @if (tooltip) {\n <div class=\"tooltip-svg\">\n <svg [apexTooltip]=\"tooltip\" [tooltipPosition]=\"tooltipPosition.Above\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g stroke=\"#fff\">\n <path d=\"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 7.5H8V11h.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.25 5.25a.25.25 0 1 1-.5 0 .25.25 0 0 1 .5 0z\" fill=\"#fff\"/>\n </g>\n </svg>\n </div>\n }\n</ng-template>\n", styles: [":host{touch-action:manipulation}.checkbox{display:flex;align-items:center;position:relative;cursor:pointer}.checkbox.disabled{opacity:var(--apex-checkbox-disabled-opacity, .5);cursor:not-allowed;pointer-events:none}.checkbox span{color:var(--apex-checkbox-text-color, #0B1222);text-wrap:wrap;word-break:break-all;font-size:var(--apex-checkbox-font-size, 14px)}.checkbox span:not(:empty){margin:0 4px 0 8px}.checkbox input[type=checkbox]{width:20px;min-width:20px;height:20px;display:block}.checkbox input[type=checkbox]{appearance:none;-webkit-appearance:none;-moz-appearance:none;position:relative;cursor:pointer;outline:var(--apex-checkbox-outline-color, none);background-color:var(--apex-checkbox-background-color, #F7F8FB);border:1px solid var(--apex-checkbox-border-color, #E9E9E9);border-radius:4px;transition:box-shadow .3s,border .25s;box-shadow:inset 0 0 0 0 var(--apex-checkbox-border-color);margin:0}.checkbox.checked input[type=checkbox]{box-shadow:inset 0 0 0 10px var(--apex-checkbox-box-shadow-color, #F96138)}.checkbox-svg{width:20px;height:20px;position:absolute}.checkbox .checkbox-svg svg{position:absolute;top:50%;left:50%;transform:translateY(-50%) translate(-50%)}.checkbox .checkbox-svg svg path{fill:none;stroke:none;pointer-events:none;stroke:transparent;stroke-linecap:round;stroke-linejoin:round}.checkbox.checked .checkbox-svg svg path{stroke:var(--apex-checkbox-arrow-color, #FFFFFF)}.tooltip-svg{width:16px;height:16px}.tooltip-svg g{stroke:var(--apex-checkbox-tooltip-icon-stroke, #FFFFFF)}.footer{height:14px;font-size:12px;margin-top:2px}.footer.error{color:var(--apex-checkbox-error-color, #F96138)}\n"] }]
47
82
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { checked: [{
48
83
  type: Input
49
84
  }], disabled: [{
@@ -54,6 +89,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
54
89
  type: Input
55
90
  }], clickChange: [{
56
91
  type: Output
92
+ }], onFocusOut: [{
93
+ type: HostListener,
94
+ args: ['focusout']
57
95
  }] } });
58
96
 
59
97
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"apexara-ng-components-checkbox.mjs","sources":["../../../../projects/apexara/ng-components/checkbox/src/checkbox.component.ts","../../../../projects/apexara/ng-components/checkbox/src/checkbox.component.html","../../../../projects/apexara/ng-components/checkbox/apexara-ng-components-checkbox.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { Subscription } from 'rxjs';\n\nimport { ApexTooltipDirective, TooltipPosition } from '@apexara/ng-components/tooltip';\n\nexport interface ApexCheckboxOptions {\n formGroup?: FormGroup;\n formControlName?: string;\n}\n\n@Component({\n selector: 'apex-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.css'],\n imports: [\n NgClass,\n FormsModule,\n NgTemplateOutlet,\n ApexTooltipDirective,\n ReactiveFormsModule,\n ],\n})\n\nexport class ApexCheckboxComponent {\n\n constructor(private changeDetectorRef: ChangeDetectorRef) { }\n\n @Input() checked = false;\n @Input() disabled = false;\n @Input() tooltip: string | null = null;\n\n @Input() options: ApexCheckboxOptions | null = null;\n\n @Output() clickChange = new EventEmitter<boolean>();\n\n public tooltipPosition = TooltipPosition;\n\n private controlSubscription!: Subscription;\n\n public ngAfterViewInit(): void {\n this.checkIfControlDisabled();\n }\n\n public ngOnDestroy(): void {\n if (this.controlSubscription) {\n this.controlSubscription.unsubscribe();\n }\n }\n\n public onChange(): void {\n this.clickChange.emit(this.checked);\n }\n\n private checkIfControlDisabled(): void {\n if (!this.options || !this.options.formGroup || !this.options.formControlName || !this.options.formGroup.get(this.options.formControlName)) {\n return;\n }\n\n this.disabled = this.options.formGroup.controls[this.options.formControlName].disabled;\n }\n\n}\n","@if (options && options.formGroup && options.formControlName) {\n <label class=\"checkbox\" [ngClass]=\"{ checked: options.formGroup.controls[options.formControlName].value, disabled }\" [formGroup]=\"options.formGroup\">\n <input #input type=\"checkbox\" name=\"checkbox\" [formControlName]=\"options.formControlName\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n} @else {\n <label class=\"checkbox\" [ngClass]=\"{ checked, disabled }\">\n <input #input type=\"checkbox\" name=\"checkbox\" [(ngModel)]=\"checked\" [disabled]=\"disabled\" (change)=\"onChange()\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n \n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n}\n\n<ng-template #content>\n <span>\n <ng-content></ng-content>\n </span>\n\n @if (tooltip) {\n <div class=\"tooltip-svg\">\n <svg [apexTooltip]=\"tooltip\" [tooltipPosition]=\"tooltipPosition.Above\" width=\"16\" height=\"16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g stroke=\"#fff\">\n <path d=\"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 7.5H8V11h.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.25 5.25a.25.25 0 1 1-.5 0 .25.25 0 0 1 .5 0z\" fill=\"#fff\"/>\n </g>\n </svg>\n </div>\n }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MA0Ba,qBAAqB,CAAA;AAEhC,IAAA,WAAA,CAAoB,iBAAoC,EAAA;QAApC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAE5B,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,OAAO,GAAkB,IAAI;QAE7B,IAAA,CAAA,OAAO,GAA+B,IAAI;AAEzC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAW;QAE5C,IAAA,CAAA,eAAe,GAAG,eAAe;IAVoB;IAcrD,eAAe,GAAA;QACpB,IAAI,CAAC,sBAAsB,EAAE;IAC/B;IAEO,WAAW,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;QACxC;IACF;IAEO,QAAQ,GAAA;QACb,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACrC;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;YAC1I;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,QAAQ;IACxF;8GApCW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BlC,2mEA2CA,EAAA,MAAA,EAAA,CAAA,q/CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzBI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIV,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAGhB;wBACP,OAAO;wBACP,WAAW;wBACX,gBAAgB;wBAChB,oBAAoB;wBACpB,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,2mEAAA,EAAA,MAAA,EAAA,CAAA,q/CAAA,CAAA,EAAA;;sBAOA;;sBACA;;sBACA;;sBAEA;;sBAEA;;;AEpCH;;AAEG;;;;"}
1
+ {"version":3,"file":"apexara-ng-components-checkbox.mjs","sources":["../../../../projects/apexara/ng-components/checkbox/src/checkbox.component.ts","../../../../projects/apexara/ng-components/checkbox/src/checkbox.component.html","../../../../projects/apexara/ng-components/checkbox/apexara-ng-components-checkbox.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ChangeDetectorRef, HostListener } from '@angular/core';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { AbstractControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { Subscription } from 'rxjs';\n\nimport { ApexTooltipDirective, TooltipPosition } from '@apexara/ng-components/tooltip';\n\nexport interface ApexCheckboxOptions {\n formGroup?: FormGroup;\n formControlName?: string;\n errors?: ApexCheckboxErrors;\n}\n\nexport interface ApexCheckboxErrors {\n [x: string]: string;\n}\n\n@Component({\n selector: 'apex-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.css'],\n imports: [\n NgClass,\n FormsModule,\n NgTemplateOutlet,\n ApexTooltipDirective,\n ReactiveFormsModule,\n ],\n})\n\nexport class ApexCheckboxComponent {\n\n constructor(private changeDetectorRef: ChangeDetectorRef) { }\n\n @Input() checked = false;\n @Input() disabled = false;\n @Input() tooltip: string | null = null;\n\n @Input() options: ApexCheckboxOptions | null = null;\n\n @Output() clickChange = new EventEmitter<boolean>();\n\n public tooltipPosition = TooltipPosition;\n public controlInvalid = false;\n public errorLabel = '';\n\n private controlSubscription!: Subscription;\n private control: AbstractControl | null = null;\n\n public ngAfterViewInit(): void {\n this.setControl();\n }\n\n public ngOnDestroy(): void {\n if (this.controlSubscription) {\n this.controlSubscription.unsubscribe();\n }\n }\n\n @HostListener('focusout')\n onFocusOut(): void {\n this.initChange();\n }\n\n public onChange(): void {\n this.clickChange.emit(this.checked);\n }\n\n private setControl(): void {\n if (!this.options || !this.options.formGroup || !this.options.formControlName || !this.options.formGroup.get(this.options.formControlName)) {\n return;\n }\n\n this.control = this.options.formGroup.controls[this.options.formControlName];\n\n this.disabled = this.control.disabled;\n\n this.controlSubscription = this.control.statusChanges.subscribe(() => {\n this.initChange();\n });\n }\n\n private initChange(): void {\n if (!this.control) {\n return;\n }\n\n this.checkIfControlInvalid(this.control);\n this.getErrorLabel();\n this.changeDetectorRef.detectChanges();\n }\n\n private checkIfControlInvalid(control: AbstractControl): void {\n this.controlInvalid = control.touched && control.invalid;\n }\n\n private getErrorLabel(): void {\n this.errorLabel = '';\n\n const options = this.options!;\n const formGroup = options.formGroup;\n const formControlName = options.formControlName;\n\n if (formGroup && formControlName && options.errors && this.controlInvalid) {\n for (const error in options.errors) {\n if (formGroup.controls[formControlName].hasError(error)) {\n this.errorLabel = options.errors[error];\n\n return;\n }\n }\n }\n }\n\n}\n","@if (options && options.formGroup && options.formControlName) {\n <label class=\"checkbox\" [ngClass]=\"{ checked: options.formGroup.controls[options.formControlName].value, disabled }\" [formGroup]=\"options.formGroup\">\n <input #input type=\"checkbox\" name=\"checkbox\" [formControlName]=\"options.formControlName\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n\n @if (options && options.errors) {\n <div class=\"footer\" [ngClass]=\"{ 'error': controlInvalid }\">\n {{ errorLabel }}\n </div>\n }\n} @else {\n <label class=\"checkbox\" [ngClass]=\"{ checked, disabled }\">\n <input #input type=\"checkbox\" name=\"checkbox\" [(ngModel)]=\"checked\" [disabled]=\"disabled\" (change)=\"onChange()\"/>\n\n <div class=\"checkbox-svg\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"8\" viewBox=\"0 0 11 8\" fill=\"none\">\n <path d=\"M1 4L4 7L10 1\" stroke=\"white\" stroke-width=\"2\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n \n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </label>\n}\n\n<ng-template #content>\n <span>\n <ng-content></ng-content>\n </span>\n\n @if (tooltip) {\n <div class=\"tooltip-svg\">\n <svg [apexTooltip]=\"tooltip\" [tooltipPosition]=\"tooltipPosition.Above\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g stroke=\"#fff\">\n <path d=\"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 7.5H8V11h.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.25 5.25a.25.25 0 1 1-.5 0 .25.25 0 0 1 .5 0z\" fill=\"#fff\"/>\n </g>\n </svg>\n </div>\n }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}