@spartan-ng/brain 0.0.1-alpha.539 → 0.0.1-alpha.541

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, forwardRef, input, booleanAttribute, model, output, computed, signal, ChangeDetectionStrategy, Component, ChangeDetectorRef, Directive } from '@angular/core';
2
+ import { InjectionToken, inject, forwardRef, input, computed, model, output, booleanAttribute, linkedSignal, Directive } from '@angular/core';
3
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
 
5
5
  const BrnToggleGroupToken = new InjectionToken('BrnToggleGroupToken');
@@ -24,18 +24,10 @@ class BrnButtonToggleChange {
24
24
  }
25
25
  }
26
26
  class BrnToggleGroup {
27
- /**
28
- * The method to be called in order to update ngModel.
29
- */
30
- // eslint-disable-next-line @typescript-eslint/no-empty-function
31
- _onChange = () => { };
32
- /** onTouch function registered via registerOnTouch (ControlValueAccessor). */
33
- // eslint-disable-next-line @typescript-eslint/no-empty-function
34
- onTouched = () => { };
35
- /** Whether the button toggle group has a vertical orientation */
36
- vertical = input(false, {
37
- transform: booleanAttribute,
38
- });
27
+ /** The type of the toggle group. */
28
+ type = input('single');
29
+ /** Whether the toggle group allows multiple selections. */
30
+ _multiple = computed(() => this.type() === 'multiple');
39
31
  /** Value of the toggle group. */
40
32
  value = model(undefined);
41
33
  /** Emits when the value changes. */
@@ -44,20 +36,22 @@ class BrnToggleGroup {
44
36
  nullable = input(false, {
45
37
  transform: booleanAttribute,
46
38
  });
47
- /** Whether multiple button toggles can be selected. */
48
- multiple = input(false, {
49
- transform: booleanAttribute,
50
- });
51
39
  /** Whether the button toggle group is disabled. */
52
40
  disabled = input(false, {
53
41
  transform: booleanAttribute,
54
42
  });
55
- /** The internal state of the component. This can be replaced with linkedSignal in the future. */
56
- state = computed(() => ({
57
- disabled: signal(this.disabled()),
58
- }));
43
+ /** The disabled state. */
44
+ disabledState = linkedSignal(this.disabled);
59
45
  /** Emit event when the group value changes. */
60
46
  change = output();
47
+ /**
48
+ * The method to be called in order to update ngModel.
49
+ */
50
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
51
+ _onChange = () => { };
52
+ /** onTouch function registered via registerOnTouch (ControlValueAccessor). */
53
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
54
+ onTouched = () => { };
61
55
  writeValue(value) {
62
56
  this.value.set(value);
63
57
  }
@@ -68,7 +62,7 @@ class BrnToggleGroup {
68
62
  this.onTouched = fn;
69
63
  }
70
64
  setDisabledState(isDisabled) {
71
- this.state().disabled.set(isDisabled);
65
+ this.disabledState.set(isDisabled);
72
66
  }
73
67
  /**
74
68
  * @internal
@@ -79,7 +73,7 @@ class BrnToggleGroup {
79
73
  if (this.nullable())
80
74
  return true;
81
75
  const currentValue = this.value();
82
- if (this.multiple() && Array.isArray(currentValue)) {
76
+ if (this._multiple() && Array.isArray(currentValue)) {
83
77
  return !(currentValue.length === 1 && currentValue[0] === value);
84
78
  }
85
79
  return currentValue !== value;
@@ -89,12 +83,12 @@ class BrnToggleGroup {
89
83
  * Selects a value.
90
84
  */
91
85
  select(value, source) {
92
- if (this.state().disabled() || this.isSelected(value)) {
86
+ if (this.disabledState() || this.isSelected(value)) {
93
87
  return;
94
88
  }
95
89
  const currentValue = this.value();
96
90
  // emit the valueChange event here as we should only emit based on user interaction
97
- if (this.multiple()) {
91
+ if (this._multiple()) {
98
92
  this.emitSelectionChange([...(currentValue ?? []), value], source);
99
93
  }
100
94
  else {
@@ -108,11 +102,11 @@ class BrnToggleGroup {
108
102
  * Deselects a value.
109
103
  */
110
104
  deselect(value, source) {
111
- if (this.state().disabled() || !this.isSelected(value) || !this.canDeselect(value)) {
105
+ if (this.disabledState() || !this.isSelected(value) || !this.canDeselect(value)) {
112
106
  return;
113
107
  }
114
108
  const currentValue = this.value();
115
- if (this.multiple()) {
109
+ if (this._multiple()) {
116
110
  this.emitSelectionChange((currentValue ?? []).filter((v) => v !== value), source);
117
111
  }
118
112
  else if (currentValue === value) {
@@ -130,7 +124,7 @@ class BrnToggleGroup {
130
124
  (Array.isArray(currentValue) && currentValue.length === 0)) {
131
125
  return false;
132
126
  }
133
- if (this.multiple()) {
127
+ if (this._multiple()) {
134
128
  return currentValue?.includes(value);
135
129
  }
136
130
  return currentValue === value;
@@ -142,35 +136,26 @@ class BrnToggleGroup {
142
136
  this._onChange(value);
143
137
  this.change.emit(new BrnButtonToggleChange(source, this.value()));
144
138
  }
145
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: BrnToggleGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
146
- /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.8", type: BrnToggleGroup, isStandalone: true, selector: "brn-toggle-group", inputs: { vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, nullable: { classPropertyName: "nullable", publicName: "nullable", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", change: "change" }, host: { attributes: { "role": "group" }, listeners: { "focusout": "onTouched()" }, properties: { "attr.aria-disabled": "state().disabled()", "attr.data-disabled": "state().disabled()", "attr.data-vertical": "vertical()" }, classAttribute: "brn-button-toggle-group" }, providers: [provideBrnToggleGroup(BrnToggleGroup), BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR], exportAs: ["brnToggleGroup"], ngImport: i0, template: `
147
- <ng-content />
148
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
139
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: BrnToggleGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
140
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.8", type: BrnToggleGroup, isStandalone: true, selector: "[brnToggleGroup],brn-toggle-group", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, nullable: { classPropertyName: "nullable", publicName: "nullable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", change: "change" }, host: { attributes: { "role": "group" }, listeners: { "focusout": "onTouched()" }, properties: { "attr.aria-disabled": "disabledState()", "attr.data-disabled": "disabledState()" } }, providers: [provideBrnToggleGroup(BrnToggleGroup), BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR], exportAs: ["brnToggleGroup"], ngImport: i0 });
149
141
  }
150
142
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: BrnToggleGroup, decorators: [{
151
- type: Component,
143
+ type: Directive,
152
144
  args: [{
153
- selector: 'brn-toggle-group',
145
+ selector: '[brnToggleGroup],brn-toggle-group',
154
146
  providers: [provideBrnToggleGroup(BrnToggleGroup), BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR],
155
147
  host: {
156
148
  role: 'group',
157
- class: 'brn-button-toggle-group',
158
- '[attr.aria-disabled]': 'state().disabled()',
159
- '[attr.data-disabled]': 'state().disabled()',
160
- '[attr.data-vertical]': 'vertical()',
149
+ '[attr.aria-disabled]': 'disabledState()',
150
+ '[attr.data-disabled]': 'disabledState()',
161
151
  '(focusout)': 'onTouched()',
162
152
  },
163
153
  exportAs: 'brnToggleGroup',
164
- template: `
165
- <ng-content />
166
- `,
167
- changeDetection: ChangeDetectionStrategy.OnPush,
168
154
  }]
169
155
  }] });
170
156
 
171
157
  class BrnToggleGroupItem {
172
158
  static _uniqueId = 0;
173
- _changeDetector = inject(ChangeDetectorRef);
174
159
  /** Access the toggle group if available. */
175
160
  _group = injectBrnToggleGroup();
176
161
  /** The id of the toggle. */
@@ -181,12 +166,17 @@ class BrnToggleGroupItem {
181
166
  disabled = input(false, {
182
167
  transform: booleanAttribute,
183
168
  });
169
+ /** Whether the toggle is disabled either from itself or from the group. */
170
+ _disabled = computed(() => this.disabled() || this._group?.disabled());
184
171
  /** The current state of the toggle when not used in a group. */
185
172
  state = model('off');
186
- /** Whether the toggle is responds to click events. */
187
- disableToggleClick = input(false, {
188
- transform: booleanAttribute,
189
- });
173
+ /** The type of the button. */
174
+ type = input('button');
175
+ /**
176
+ * Accessibility label for screen readers.
177
+ * Use when no visible label exists.
178
+ */
179
+ ariaLabel = input(null, { alias: 'aria-label' });
190
180
  /** Whether the toggle is in the on state. */
191
181
  _isOn = computed(() => this._state() === 'on');
192
182
  /** The current state that reflects the group state or the model state. */
@@ -197,7 +187,7 @@ class BrnToggleGroupItem {
197
187
  return this.state();
198
188
  });
199
189
  toggle() {
200
- if (this.disableToggleClick())
190
+ if (this._disabled())
201
191
  return;
202
192
  if (this._group) {
203
193
  if (this._isOn()) {
@@ -212,18 +202,20 @@ class BrnToggleGroupItem {
212
202
  }
213
203
  }
214
204
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: BrnToggleGroupItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
215
- /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.8", type: BrnToggleGroupItem, isStandalone: true, selector: "button[hlmToggleGroupItem], button[brnToggleGroupItem]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, disableToggleClick: { classPropertyName: "disableToggleClick", publicName: "disableToggleClick", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { state: "stateChange" }, host: { listeners: { "click": "toggle()" }, properties: { "id": "id()", "attr.disabled": "disabled() || _group?.disabled() ? true : null", "attr.data-disabled": "disabled() || _group?.disabled() ? true : null", "attr.data-state": "_state()", "attr.aria-pressed": "_isOn()" } }, ngImport: i0 });
205
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.8", type: BrnToggleGroupItem, isStandalone: true, selector: "button[brnToggleGroupItem]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { state: "stateChange" }, host: { listeners: { "click": "toggle()" }, properties: { "id": "id()", "attr.disabled": "_disabled() ? true : null", "attr.data-disabled": "_disabled() ? true : null", "attr.data-state": "_state()", "attr.aria-pressed": "_isOn()", "attr.aria-label": "ariaLabel() || null", "type": "type()" } }, ngImport: i0 });
216
206
  }
217
207
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: BrnToggleGroupItem, decorators: [{
218
208
  type: Directive,
219
209
  args: [{
220
- selector: 'button[hlmToggleGroupItem], button[brnToggleGroupItem]',
210
+ selector: 'button[brnToggleGroupItem]',
221
211
  host: {
222
212
  '[id]': 'id()',
223
- '[attr.disabled]': 'disabled() || _group?.disabled() ? true : null',
224
- '[attr.data-disabled]': 'disabled() || _group?.disabled() ? true : null',
213
+ '[attr.disabled]': '_disabled() ? true : null',
214
+ '[attr.data-disabled]': '_disabled() ? true : null',
225
215
  '[attr.data-state]': '_state()',
226
216
  '[attr.aria-pressed]': '_isOn()',
217
+ '[attr.aria-label]': 'ariaLabel() || null',
218
+ '[type]': 'type()',
227
219
  '(click)': 'toggle()',
228
220
  },
229
221
  }]
@@ -235,5 +227,5 @@ const BrnToggleGroupImports = [BrnToggleGroup, BrnToggleGroupItem];
235
227
  * Generated bundle index. Do not edit.
236
228
  */
237
229
 
238
- export { BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR, BrnButtonToggleChange, BrnToggleGroup, BrnToggleGroupImports, BrnToggleGroupItem };
230
+ export { BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR, BrnButtonToggleChange, BrnToggleGroup, BrnToggleGroupImports, BrnToggleGroupItem, injectBrnToggleGroup, provideBrnToggleGroup };
239
231
  //# sourceMappingURL=spartan-ng-brain-toggle-group.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"spartan-ng-brain-toggle-group.mjs","sources":["../../../../libs/brain/toggle-group/src/lib/brn-toggle-group.token.ts","../../../../libs/brain/toggle-group/src/lib/brn-toggle-group.ts","../../../../libs/brain/toggle-group/src/lib/brn-toggle-item.ts","../../../../libs/brain/toggle-group/src/index.ts","../../../../libs/brain/toggle-group/src/spartan-ng-brain-toggle-group.ts"],"sourcesContent":["import { type ExistingProvider, InjectionToken, type Type, inject } from '@angular/core';\nimport type { BrnToggleGroup } from './brn-toggle-group';\n\nconst BrnToggleGroupToken = new InjectionToken<BrnToggleGroup>('BrnToggleGroupToken');\n\nexport function injectBrnToggleGroup<T>(): BrnToggleGroup<T> | null {\n\treturn inject(BrnToggleGroupToken, { optional: true }) as BrnToggleGroup<T> | null;\n}\n\nexport function provideBrnToggleGroup<T>(value: Type<BrnToggleGroup<T>>): ExistingProvider {\n\treturn { provide: BrnToggleGroupToken, useExisting: value };\n}\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport {\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tforwardRef,\n\tinput,\n\tmodel,\n\toutput,\n\tsignal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideBrnToggleGroup } from './brn-toggle-group.token';\nimport type { BrnToggleGroupItem } from './brn-toggle-item';\n\nexport const BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnToggleGroup),\n\tmulti: true,\n};\n\nexport class BrnButtonToggleChange<T = unknown> {\n\tconstructor(\n\t\tpublic source: BrnToggleGroupItem<T>,\n\t\tpublic value: ToggleValue<T>,\n\t) {}\n}\n\n@Component({\n\tselector: 'brn-toggle-group',\n\tproviders: [provideBrnToggleGroup(BrnToggleGroup), BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR],\n\thost: {\n\t\trole: 'group',\n\t\tclass: 'brn-button-toggle-group',\n\t\t'[attr.aria-disabled]': 'state().disabled()',\n\t\t'[attr.data-disabled]': 'state().disabled()',\n\t\t'[attr.data-vertical]': 'vertical()',\n\t\t'(focusout)': 'onTouched()',\n\t},\n\texportAs: 'brnToggleGroup',\n\ttemplate: `\n\t\t<ng-content />\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BrnToggleGroup<T = unknown> implements ControlValueAccessor {\n\t/**\n\t * The method to be called in order to update ngModel.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onChange: (value: ToggleValue<T>) => void = () => {};\n\n\t/** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprotected onTouched: () => void = () => {};\n\n\t/** Whether the button toggle group has a vertical orientation */\n\tpublic readonly vertical = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Value of the toggle group. */\n\tpublic readonly value = model<ToggleValue<T>>(undefined);\n\n\t/** Emits when the value changes. */\n\tpublic readonly valueChange = output<ToggleValue<T>>();\n\n\t/** Whether no button toggles need to be selected. */\n\tpublic readonly nullable = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether multiple button toggles can be selected. */\n\tpublic readonly multiple = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the button toggle group is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The internal state of the component. This can be replaced with linkedSignal in the future. */\n\tpublic readonly state = computed(() => ({\n\t\tdisabled: signal(this.disabled()),\n\t}));\n\n\t/** Emit event when the group value changes. */\n\tpublic readonly change = output<BrnButtonToggleChange<T>>();\n\n\twriteValue(value: ToggleValue<T>): void {\n\t\tthis.value.set(value);\n\t}\n\n\tregisterOnChange(fn: (value: ToggleValue<T>) => void) {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void) {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.state().disabled.set(isDisabled);\n\t}\n\n\t/**\n\t * @internal\n\t * Determines whether a value can be set on the group.\n\t */\n\tcanDeselect(value: ToggleValue<T>): boolean {\n\t\t// if null values are allowed, the group can always be nullable\n\t\tif (this.nullable()) return true;\n\n\t\tconst currentValue = this.value();\n\n\t\tif (this.multiple() && Array.isArray(currentValue)) {\n\t\t\treturn !(currentValue.length === 1 && currentValue[0] === value);\n\t\t}\n\n\t\treturn currentValue !== value;\n\t}\n\n\t/**\n\t * @internal\n\t * Selects a value.\n\t */\n\tselect(value: T, source: BrnToggleGroupItem<T>): void {\n\t\tif (this.state().disabled() || this.isSelected(value)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentValue = this.value();\n\n\t\t// emit the valueChange event here as we should only emit based on user interaction\n\t\tif (this.multiple()) {\n\t\t\tthis.emitSelectionChange([...((currentValue ?? []) as T[]), value], source);\n\t\t} else {\n\t\t\tthis.emitSelectionChange(value, source);\n\t\t}\n\n\t\tthis._onChange(this.value());\n\t\tthis.change.emit(new BrnButtonToggleChange<T>(source, this.value()));\n\t}\n\n\t/**\n\t * @internal\n\t * Deselects a value.\n\t */\n\tdeselect(value: T, source: BrnToggleGroupItem<T>): void {\n\t\tif (this.state().disabled() || !this.isSelected(value) || !this.canDeselect(value)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentValue = this.value();\n\n\t\tif (this.multiple()) {\n\t\t\tthis.emitSelectionChange(\n\t\t\t\t((currentValue ?? []) as T[]).filter((v) => v !== value),\n\t\t\t\tsource,\n\t\t\t);\n\t\t} else if (currentValue === value) {\n\t\t\tthis.emitSelectionChange(null, source);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t * Determines whether a value is selected.\n\t */\n\tisSelected(value: T): boolean {\n\t\tconst currentValue = this.value();\n\n\t\tif (\n\t\t\tcurrentValue == null ||\n\t\t\tcurrentValue === undefined ||\n\t\t\t(Array.isArray(currentValue) && currentValue.length === 0)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.multiple()) {\n\t\t\treturn (currentValue as T[])?.includes(value);\n\t\t}\n\t\treturn currentValue === value;\n\t}\n\n\t/** Update the value of the group */\n\tprivate emitSelectionChange(value: ToggleValue<T>, source: BrnToggleGroupItem<T>): void {\n\t\tthis.value.set(value);\n\t\tthis.valueChange.emit(value);\n\t\tthis._onChange(value);\n\t\tthis.change.emit(new BrnButtonToggleChange<T>(source, this.value()));\n\t}\n}\n\ntype ToggleValue<T> = T | T[] | null | undefined;\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Directive, booleanAttribute, computed, inject, input, model } from '@angular/core';\nimport { injectBrnToggleGroup } from './brn-toggle-group.token';\n\n@Directive({\n\tselector: 'button[hlmToggleGroupItem], button[brnToggleGroupItem]',\n\thost: {\n\t\t'[id]': 'id()',\n\t\t'[attr.disabled]': 'disabled() || _group?.disabled() ? true : null',\n\t\t'[attr.data-disabled]': 'disabled() || _group?.disabled() ? true : null',\n\t\t'[attr.data-state]': '_state()',\n\t\t'[attr.aria-pressed]': '_isOn()',\n\t\t'(click)': 'toggle()',\n\t},\n})\nexport class BrnToggleGroupItem<T> {\n\tprivate static _uniqueId = 0;\n\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** Access the toggle group if available. */\n\tprotected readonly _group = injectBrnToggleGroup<T>();\n\n\t/** The id of the toggle. */\n\tpublic readonly id = input(`brn-toggle-group-item-${++BrnToggleGroupItem._uniqueId}`);\n\n\t/** The value this toggle represents. */\n\tpublic readonly value = input<T>();\n\n\t/** Whether the toggle is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The current state of the toggle when not used in a group. */\n\tpublic readonly state = model<'on' | 'off'>('off');\n\n\t/** Whether the toggle is responds to click events. */\n\tpublic readonly disableToggleClick = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the toggle is in the on state. */\n\tprotected readonly _isOn = computed(() => this._state() === 'on');\n\n\t/** The current state that reflects the group state or the model state. */\n\tprotected readonly _state = computed(() => {\n\t\tif (this._group) {\n\t\t\treturn this._group.isSelected(this.value() as T) ? 'on' : 'off';\n\t\t}\n\t\treturn this.state();\n\t});\n\n\ttoggle(): void {\n\t\tif (this.disableToggleClick()) return;\n\n\t\tif (this._group) {\n\t\t\tif (this._isOn()) {\n\t\t\t\tthis._group.deselect(this.value() as T, this);\n\t\t\t} else {\n\t\t\t\tthis._group.select(this.value() as T, this);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.state.set(this._isOn() ? 'off' : 'on');\n\t\t}\n\t}\n}\n","import { BrnToggleGroup } from './lib/brn-toggle-group';\nimport { BrnToggleGroupItem } from './lib/brn-toggle-item';\n\nexport * from './lib/brn-toggle-group';\nexport * from './lib/brn-toggle-item';\n\nexport const BrnToggleGroupImports = [BrnToggleGroup, BrnToggleGroupItem] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spartan-ng-brain-toggle-group.mjs","sources":["../../../../libs/brain/toggle-group/src/lib/brn-toggle-group.token.ts","../../../../libs/brain/toggle-group/src/lib/brn-toggle-group.ts","../../../../libs/brain/toggle-group/src/lib/brn-toggle-item.ts","../../../../libs/brain/toggle-group/src/index.ts","../../../../libs/brain/toggle-group/src/spartan-ng-brain-toggle-group.ts"],"sourcesContent":["import { type ExistingProvider, InjectionToken, type Type, inject } from '@angular/core';\nimport type { BrnToggleGroup } from './brn-toggle-group';\n\nconst BrnToggleGroupToken = new InjectionToken<BrnToggleGroup>('BrnToggleGroupToken');\n\nexport function injectBrnToggleGroup<T>(): BrnToggleGroup<T> | null {\n\treturn inject(BrnToggleGroupToken, { optional: true }) as BrnToggleGroup<T> | null;\n}\n\nexport function provideBrnToggleGroup<T>(value: Type<BrnToggleGroup<T>>): ExistingProvider {\n\treturn { provide: BrnToggleGroupToken, useExisting: value };\n}\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, forwardRef, input, linkedSignal, model, output } from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { provideBrnToggleGroup } from './brn-toggle-group.token';\nimport type { BrnToggleGroupItem } from './brn-toggle-item';\n\nexport const BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnToggleGroup),\n\tmulti: true,\n};\n\nexport class BrnButtonToggleChange<T = unknown> {\n\tconstructor(\n\t\tpublic source: BrnToggleGroupItem<T>,\n\t\tpublic value: ToggleValue<T>,\n\t) {}\n}\n\n@Directive({\n\tselector: '[brnToggleGroup],brn-toggle-group',\n\tproviders: [provideBrnToggleGroup(BrnToggleGroup), BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR],\n\thost: {\n\t\trole: 'group',\n\t\t'[attr.aria-disabled]': 'disabledState()',\n\t\t'[attr.data-disabled]': 'disabledState()',\n\t\t'(focusout)': 'onTouched()',\n\t},\n\texportAs: 'brnToggleGroup',\n})\nexport class BrnToggleGroup<T = unknown> implements ControlValueAccessor {\n\t/** The type of the toggle group. */\n\tpublic readonly type = input<ToggleType>('single');\n\n\t/** Whether the toggle group allows multiple selections. */\n\tprotected readonly _multiple = computed(() => this.type() === 'multiple');\n\n\t/** Value of the toggle group. */\n\tpublic readonly value = model<ToggleValue<T>>(undefined);\n\n\t/** Emits when the value changes. */\n\tpublic readonly valueChange = output<ToggleValue<T>>();\n\n\t/** Whether no button toggles need to be selected. */\n\tpublic readonly nullable = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the button toggle group is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The disabled state. */\n\tpublic readonly disabledState = linkedSignal(this.disabled);\n\n\t/** Emit event when the group value changes. */\n\tpublic readonly change = output<BrnButtonToggleChange<T>>();\n\n\t/**\n\t * The method to be called in order to update ngModel.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onChange: (value: ToggleValue<T>) => void = () => {};\n\n\t/** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprotected onTouched: () => void = () => {};\n\n\twriteValue(value: ToggleValue<T>): void {\n\t\tthis.value.set(value);\n\t}\n\n\tregisterOnChange(fn: (value: ToggleValue<T>) => void) {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void) {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabledState.set(isDisabled);\n\t}\n\n\t/**\n\t * @internal\n\t * Determines whether a value can be set on the group.\n\t */\n\tcanDeselect(value: ToggleValue<T>): boolean {\n\t\t// if null values are allowed, the group can always be nullable\n\t\tif (this.nullable()) return true;\n\n\t\tconst currentValue = this.value();\n\n\t\tif (this._multiple() && Array.isArray(currentValue)) {\n\t\t\treturn !(currentValue.length === 1 && currentValue[0] === value);\n\t\t}\n\n\t\treturn currentValue !== value;\n\t}\n\n\t/**\n\t * @internal\n\t * Selects a value.\n\t */\n\tselect(value: T, source: BrnToggleGroupItem<T>): void {\n\t\tif (this.disabledState() || this.isSelected(value)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentValue = this.value();\n\n\t\t// emit the valueChange event here as we should only emit based on user interaction\n\t\tif (this._multiple()) {\n\t\t\tthis.emitSelectionChange([...((currentValue ?? []) as T[]), value], source);\n\t\t} else {\n\t\t\tthis.emitSelectionChange(value, source);\n\t\t}\n\n\t\tthis._onChange(this.value());\n\t\tthis.change.emit(new BrnButtonToggleChange<T>(source, this.value()));\n\t}\n\n\t/**\n\t * @internal\n\t * Deselects a value.\n\t */\n\tdeselect(value: T, source: BrnToggleGroupItem<T>): void {\n\t\tif (this.disabledState() || !this.isSelected(value) || !this.canDeselect(value)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentValue = this.value();\n\n\t\tif (this._multiple()) {\n\t\t\tthis.emitSelectionChange(\n\t\t\t\t((currentValue ?? []) as T[]).filter((v) => v !== value),\n\t\t\t\tsource,\n\t\t\t);\n\t\t} else if (currentValue === value) {\n\t\t\tthis.emitSelectionChange(null, source);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t * Determines whether a value is selected.\n\t */\n\tisSelected(value: T): boolean {\n\t\tconst currentValue = this.value();\n\n\t\tif (\n\t\t\tcurrentValue == null ||\n\t\t\tcurrentValue === undefined ||\n\t\t\t(Array.isArray(currentValue) && currentValue.length === 0)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._multiple()) {\n\t\t\treturn (currentValue as T[])?.includes(value);\n\t\t}\n\t\treturn currentValue === value;\n\t}\n\n\t/** Update the value of the group */\n\tprivate emitSelectionChange(value: ToggleValue<T>, source: BrnToggleGroupItem<T>): void {\n\t\tthis.value.set(value);\n\t\tthis.valueChange.emit(value);\n\t\tthis._onChange(value);\n\t\tthis.change.emit(new BrnButtonToggleChange<T>(source, this.value()));\n\t}\n}\n\nexport type ToggleValue<T> = T | T[] | null | undefined;\nexport type ToggleType = 'single' | 'multiple';\n","import type { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, computed, input, model } from '@angular/core';\nimport { injectBrnToggleGroup } from './brn-toggle-group.token';\n\n@Directive({\n\tselector: 'button[brnToggleGroupItem]',\n\thost: {\n\t\t'[id]': 'id()',\n\t\t'[attr.disabled]': '_disabled() ? true : null',\n\t\t'[attr.data-disabled]': '_disabled() ? true : null',\n\t\t'[attr.data-state]': '_state()',\n\t\t'[attr.aria-pressed]': '_isOn()',\n\t\t'[attr.aria-label]': 'ariaLabel() || null',\n\t\t'[type]': 'type()',\n\t\t'(click)': 'toggle()',\n\t},\n})\nexport class BrnToggleGroupItem<T> {\n\tprivate static _uniqueId = 0;\n\n\t/** Access the toggle group if available. */\n\tprotected readonly _group = injectBrnToggleGroup<T>();\n\n\t/** The id of the toggle. */\n\tpublic readonly id = input(`brn-toggle-group-item-${++BrnToggleGroupItem._uniqueId}`);\n\n\t/** The value this toggle represents. */\n\tpublic readonly value = input<T>();\n\n\t/** Whether the toggle is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the toggle is disabled either from itself or from the group. */\n\tprotected readonly _disabled = computed(() => this.disabled() || this._group?.disabled());\n\n\t/** The current state of the toggle when not used in a group. */\n\tpublic readonly state = model<'on' | 'off'>('off');\n\n\t/** The type of the button. */\n\tpublic readonly type = input<'button' | 'submit' | 'reset'>('button');\n\n\t/**\n\t * Accessibility label for screen readers.\n\t * Use when no visible label exists.\n\t */\n\tpublic readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n\t/** Whether the toggle is in the on state. */\n\tprotected readonly _isOn = computed(() => this._state() === 'on');\n\n\t/** The current state that reflects the group state or the model state. */\n\tprotected readonly _state = computed(() => {\n\t\tif (this._group) {\n\t\t\treturn this._group.isSelected(this.value() as T) ? 'on' : 'off';\n\t\t}\n\t\treturn this.state();\n\t});\n\n\ttoggle(): void {\n\t\tif (this._disabled()) return;\n\n\t\tif (this._group) {\n\t\t\tif (this._isOn()) {\n\t\t\t\tthis._group.deselect(this.value() as T, this);\n\t\t\t} else {\n\t\t\t\tthis._group.select(this.value() as T, this);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.state.set(this._isOn() ? 'off' : 'on');\n\t\t}\n\t}\n}\n","import { BrnToggleGroup } from './lib/brn-toggle-group';\nimport { BrnToggleGroupItem } from './lib/brn-toggle-item';\n\nexport * from './lib/brn-toggle-group';\nexport * from './lib/brn-toggle-group.token';\nexport * from './lib/brn-toggle-item';\n\nexport const BrnToggleGroupImports = [BrnToggleGroup, BrnToggleGroupItem] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ChangeDetectorRef, input, booleanAttribute, model, computed, Directive } from '@angular/core';
2
+ import { input, booleanAttribute, model, computed, Directive } from '@angular/core';
3
3
 
4
4
  class BrnToggle {
5
5
  static _uniqueId = 0;
6
- _changeDetector = inject(ChangeDetectorRef);
7
6
  /** The id of the toggle. */
8
7
  id = input(`brn-toggle-${++BrnToggle._uniqueId}`);
9
8
  /** The value this toggle represents. */
@@ -14,34 +13,35 @@ class BrnToggle {
14
13
  });
15
14
  /** The current state of the toggle when not used in a group. */
16
15
  state = model('off');
17
- /** Whether the toggle is responds to click events. */
18
- disableToggleClick = input(false, {
19
- transform: booleanAttribute,
20
- });
16
+ /** The type of the button. */
17
+ type = input('button');
18
+ /**
19
+ * Accessibility label for screen readers.
20
+ * Use when no visible label exists.
21
+ */
22
+ ariaLabel = input(null, { alias: 'aria-label' });
21
23
  /** Whether the toggle is in the on state. */
22
- _isOn = computed(() => this._state() === 'on');
23
- /** The current state that reflects the group state or the model state. */
24
- _state = computed(() => {
25
- return this.state();
26
- });
24
+ _isOn = computed(() => this.state() === 'on');
27
25
  toggle() {
28
- if (this.disableToggleClick())
26
+ if (this.disabled())
29
27
  return;
30
28
  this.state.set(this._isOn() ? 'off' : 'on');
31
29
  }
32
30
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: BrnToggle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
33
- /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.8", type: BrnToggle, isStandalone: true, selector: "button[hlmToggle], button[brnToggle]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, disableToggleClick: { classPropertyName: "disableToggleClick", publicName: "disableToggleClick", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { state: "stateChange" }, host: { listeners: { "click": "toggle()" }, properties: { "id": "id()", "attr.disabled": "disabled() ? true : null", "attr.data-disabled": "disabled() ? true : null", "attr.data-state": "_state()", "attr.aria-pressed": "_isOn()" } }, ngImport: i0 });
31
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.8", type: BrnToggle, isStandalone: true, selector: "button[brnToggle]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { state: "stateChange" }, host: { listeners: { "click": "toggle()" }, properties: { "id": "id()", "attr.disabled": "disabled() ? true : null", "attr.data-disabled": "disabled() ? true : null", "attr.data-state": "state()", "attr.aria-pressed": "_isOn()", "attr.aria-label": "ariaLabel() || null", "type": "type()" } }, ngImport: i0 });
34
32
  }
35
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: BrnToggle, decorators: [{
36
34
  type: Directive,
37
35
  args: [{
38
- selector: 'button[hlmToggle], button[brnToggle]',
36
+ selector: 'button[brnToggle]',
39
37
  host: {
40
38
  '[id]': 'id()',
41
39
  '[attr.disabled]': 'disabled() ? true : null',
42
40
  '[attr.data-disabled]': 'disabled() ? true : null',
43
- '[attr.data-state]': '_state()',
41
+ '[attr.data-state]': 'state()',
44
42
  '[attr.aria-pressed]': '_isOn()',
43
+ '[attr.aria-label]': 'ariaLabel() || null',
44
+ '[type]': 'type()',
45
45
  '(click)': 'toggle()',
46
46
  },
47
47
  }]
@@ -1 +1 @@
1
- {"version":3,"file":"spartan-ng-brain-toggle.mjs","sources":["../../../../libs/brain/toggle/src/lib/brn-toggle.ts","../../../../libs/brain/toggle/src/index.ts","../../../../libs/brain/toggle/src/spartan-ng-brain-toggle.ts"],"sourcesContent":["import type { BooleanInput } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Directive, booleanAttribute, computed, inject, input, model } from '@angular/core';\n\n@Directive({\n\tselector: 'button[hlmToggle], button[brnToggle]',\n\thost: {\n\t\t'[id]': 'id()',\n\t\t'[attr.disabled]': 'disabled() ? true : null',\n\t\t'[attr.data-disabled]': 'disabled() ? true : null',\n\t\t'[attr.data-state]': '_state()',\n\t\t'[attr.aria-pressed]': '_isOn()',\n\t\t'(click)': 'toggle()',\n\t},\n})\nexport class BrnToggle<T> {\n\tprivate static _uniqueId = 0;\n\n\tprivate readonly _changeDetector = inject(ChangeDetectorRef);\n\n\t/** The id of the toggle. */\n\tpublic readonly id = input(`brn-toggle-${++BrnToggle._uniqueId}`);\n\n\t/** The value this toggle represents. */\n\tpublic readonly value = input<T>();\n\n\t/** Whether the toggle is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The current state of the toggle when not used in a group. */\n\tpublic readonly state = model<'on' | 'off'>('off');\n\n\t/** Whether the toggle is responds to click events. */\n\tpublic readonly disableToggleClick = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the toggle is in the on state. */\n\tprotected readonly _isOn = computed(() => this._state() === 'on');\n\n\t/** The current state that reflects the group state or the model state. */\n\tprotected readonly _state = computed(() => {\n\t\treturn this.state();\n\t});\n\n\ttoggle(): void {\n\t\tif (this.disableToggleClick()) return;\n\n\t\tthis.state.set(this._isOn() ? 'off' : 'on');\n\t}\n}\n","import { BrnToggle } from './lib/brn-toggle';\n\nexport * from './lib/brn-toggle';\n\nexport const BrnToggleImports = [BrnToggle] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spartan-ng-brain-toggle.mjs","sources":["../../../../libs/brain/toggle/src/lib/brn-toggle.ts","../../../../libs/brain/toggle/src/index.ts","../../../../libs/brain/toggle/src/spartan-ng-brain-toggle.ts"],"sourcesContent":["import type { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, computed, input, model } from '@angular/core';\n\n@Directive({\n\tselector: 'button[brnToggle]',\n\thost: {\n\t\t'[id]': 'id()',\n\t\t'[attr.disabled]': 'disabled() ? true : null',\n\t\t'[attr.data-disabled]': 'disabled() ? true : null',\n\t\t'[attr.data-state]': 'state()',\n\t\t'[attr.aria-pressed]': '_isOn()',\n\t\t'[attr.aria-label]': 'ariaLabel() || null',\n\t\t'[type]': 'type()',\n\t\t'(click)': 'toggle()',\n\t},\n})\nexport class BrnToggle<T> {\n\tprivate static _uniqueId = 0;\n\n\t/** The id of the toggle. */\n\tpublic readonly id = input(`brn-toggle-${++BrnToggle._uniqueId}`);\n\n\t/** The value this toggle represents. */\n\tpublic readonly value = input<T>();\n\n\t/** Whether the toggle is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** The current state of the toggle when not used in a group. */\n\tpublic readonly state = model<'on' | 'off'>('off');\n\n\t/** The type of the button. */\n\tpublic readonly type = input<'button' | 'submit' | 'reset'>('button');\n\n\t/**\n\t * Accessibility label for screen readers.\n\t * Use when no visible label exists.\n\t */\n\tpublic readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n\t/** Whether the toggle is in the on state. */\n\tprotected readonly _isOn = computed(() => this.state() === 'on');\n\n\ttoggle(): void {\n\t\tif (this.disabled()) return;\n\n\t\tthis.state.set(this._isOn() ? 'off' : 'on');\n\t}\n}\n","import { BrnToggle } from './lib/brn-toggle';\n\nexport * from './lib/brn-toggle';\n\nexport const BrnToggleImports = [BrnToggle] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spartan-ng/brain",
3
- "version": "0.0.1-alpha.539",
3
+ "version": "0.0.1-alpha.541",
4
4
  "sideEffects": false,
5
5
  "exports": {
6
6
  "./hlm-tailwind-preset": {
@@ -26,14 +26,18 @@
26
26
  "types": "./autocomplete/index.d.ts",
27
27
  "default": "./fesm2022/spartan-ng-brain-autocomplete.mjs"
28
28
  },
29
- "./calendar": {
30
- "types": "./calendar/index.d.ts",
31
- "default": "./fesm2022/spartan-ng-brain-calendar.mjs"
29
+ "./avatar": {
30
+ "types": "./avatar/index.d.ts",
31
+ "default": "./fesm2022/spartan-ng-brain-avatar.mjs"
32
32
  },
33
33
  "./button": {
34
34
  "types": "./button/index.d.ts",
35
35
  "default": "./fesm2022/spartan-ng-brain-button.mjs"
36
36
  },
37
+ "./calendar": {
38
+ "types": "./calendar/index.d.ts",
39
+ "default": "./fesm2022/spartan-ng-brain-calendar.mjs"
40
+ },
37
41
  "./checkbox": {
38
42
  "types": "./checkbox/index.d.ts",
39
43
  "default": "./fesm2022/spartan-ng-brain-checkbox.mjs"
@@ -42,10 +46,6 @@
42
46
  "types": "./collapsible/index.d.ts",
43
47
  "default": "./fesm2022/spartan-ng-brain-collapsible.mjs"
44
48
  },
45
- "./avatar": {
46
- "types": "./avatar/index.d.ts",
47
- "default": "./fesm2022/spartan-ng-brain-avatar.mjs"
48
- },
49
49
  "./command": {
50
50
  "types": "./command/index.d.ts",
51
51
  "default": "./fesm2022/spartan-ng-brain-command.mjs"
@@ -98,22 +98,22 @@
98
98
  "types": "./popover/index.d.ts",
99
99
  "default": "./fesm2022/spartan-ng-brain-popover.mjs"
100
100
  },
101
- "./radio-group": {
102
- "types": "./radio-group/index.d.ts",
103
- "default": "./fesm2022/spartan-ng-brain-radio-group.mjs"
104
- },
105
101
  "./progress": {
106
102
  "types": "./progress/index.d.ts",
107
103
  "default": "./fesm2022/spartan-ng-brain-progress.mjs"
108
104
  },
109
- "./select": {
110
- "types": "./select/index.d.ts",
111
- "default": "./fesm2022/spartan-ng-brain-select.mjs"
105
+ "./radio-group": {
106
+ "types": "./radio-group/index.d.ts",
107
+ "default": "./fesm2022/spartan-ng-brain-radio-group.mjs"
112
108
  },
113
109
  "./resizable": {
114
110
  "types": "./resizable/index.d.ts",
115
111
  "default": "./fesm2022/spartan-ng-brain-resizable.mjs"
116
112
  },
113
+ "./select": {
114
+ "types": "./select/index.d.ts",
115
+ "default": "./fesm2022/spartan-ng-brain-select.mjs"
116
+ },
117
117
  "./separator": {
118
118
  "types": "./separator/index.d.ts",
119
119
  "default": "./fesm2022/spartan-ng-brain-separator.mjs"
@@ -126,13 +126,17 @@
126
126
  "types": "./slider/index.d.ts",
127
127
  "default": "./fesm2022/spartan-ng-brain-slider.mjs"
128
128
  },
129
+ "./switch": {
130
+ "types": "./switch/index.d.ts",
131
+ "default": "./fesm2022/spartan-ng-brain-switch.mjs"
132
+ },
129
133
  "./tabs": {
130
134
  "types": "./tabs/index.d.ts",
131
135
  "default": "./fesm2022/spartan-ng-brain-tabs.mjs"
132
136
  },
133
- "./switch": {
134
- "types": "./switch/index.d.ts",
135
- "default": "./fesm2022/spartan-ng-brain-switch.mjs"
137
+ "./toggle": {
138
+ "types": "./toggle/index.d.ts",
139
+ "default": "./fesm2022/spartan-ng-brain-toggle.mjs"
136
140
  },
137
141
  "./toggle-group": {
138
142
  "types": "./toggle-group/index.d.ts",
@@ -141,10 +145,6 @@
141
145
  "./tooltip": {
142
146
  "types": "./tooltip/index.d.ts",
143
147
  "default": "./fesm2022/spartan-ng-brain-tooltip.mjs"
144
- },
145
- "./toggle": {
146
- "types": "./toggle/index.d.ts",
147
- "default": "./fesm2022/spartan-ng-brain-toggle.mjs"
148
148
  }
149
149
  },
150
150
  "peerDependencies": {
@@ -2,7 +2,6 @@ import type { BooleanInput } from '@angular/cdk/coercion';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class BrnToggle<T> {
4
4
  private static _uniqueId;
5
- private readonly _changeDetector;
6
5
  /** The id of the toggle. */
7
6
  readonly id: import("@angular/core").InputSignal<string>;
8
7
  /** The value this toggle represents. */
@@ -11,13 +10,16 @@ export declare class BrnToggle<T> {
11
10
  readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
12
11
  /** The current state of the toggle when not used in a group. */
13
12
  readonly state: import("@angular/core").ModelSignal<"on" | "off">;
14
- /** Whether the toggle is responds to click events. */
15
- readonly disableToggleClick: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
13
+ /** The type of the button. */
14
+ readonly type: import("@angular/core").InputSignal<"button" | "submit" | "reset">;
15
+ /**
16
+ * Accessibility label for screen readers.
17
+ * Use when no visible label exists.
18
+ */
19
+ readonly ariaLabel: import("@angular/core").InputSignal<string | null>;
16
20
  /** Whether the toggle is in the on state. */
17
21
  protected readonly _isOn: import("@angular/core").Signal<boolean>;
18
- /** The current state that reflects the group state or the model state. */
19
- protected readonly _state: import("@angular/core").Signal<"on" | "off">;
20
22
  toggle(): void;
21
23
  static ɵfac: i0.ɵɵFactoryDeclaration<BrnToggle<any>, never>;
22
- static ɵdir: i0.ɵɵDirectiveDeclaration<BrnToggle<any>, "button[hlmToggle], button[brnToggle]", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "disableToggleClick": { "alias": "disableToggleClick"; "required": false; "isSignal": true; }; }, { "state": "stateChange"; }, never, never, true, never>;
24
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BrnToggle<any>, "button[brnToggle]", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, { "state": "stateChange"; }, never, never, true, never>;
23
25
  }
@@ -1,5 +1,6 @@
1
1
  import { BrnToggleGroup } from './lib/brn-toggle-group';
2
2
  import { BrnToggleGroupItem } from './lib/brn-toggle-item';
3
3
  export * from './lib/brn-toggle-group';
4
+ export * from './lib/brn-toggle-group.token';
4
5
  export * from './lib/brn-toggle-item';
5
6
  export declare const BrnToggleGroupImports: readonly [typeof BrnToggleGroup, typeof BrnToggleGroupItem];
@@ -13,30 +13,28 @@ export declare class BrnButtonToggleChange<T = unknown> {
13
13
  constructor(source: BrnToggleGroupItem<T>, value: ToggleValue<T>);
14
14
  }
15
15
  export declare class BrnToggleGroup<T = unknown> implements ControlValueAccessor {
16
- /**
17
- * The method to be called in order to update ngModel.
18
- */
19
- private _onChange;
20
- /** onTouch function registered via registerOnTouch (ControlValueAccessor). */
21
- protected onTouched: () => void;
22
- /** Whether the button toggle group has a vertical orientation */
23
- readonly vertical: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
16
+ /** The type of the toggle group. */
17
+ readonly type: import("@angular/core").InputSignal<ToggleType>;
18
+ /** Whether the toggle group allows multiple selections. */
19
+ protected readonly _multiple: import("@angular/core").Signal<boolean>;
24
20
  /** Value of the toggle group. */
25
21
  readonly value: import("@angular/core").ModelSignal<ToggleValue<T>>;
26
22
  /** Emits when the value changes. */
27
23
  readonly valueChange: import("@angular/core").OutputEmitterRef<ToggleValue<T>>;
28
24
  /** Whether no button toggles need to be selected. */
29
25
  readonly nullable: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
30
- /** Whether multiple button toggles can be selected. */
31
- readonly multiple: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
32
26
  /** Whether the button toggle group is disabled. */
33
27
  readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
34
- /** The internal state of the component. This can be replaced with linkedSignal in the future. */
35
- readonly state: import("@angular/core").Signal<{
36
- disabled: import("@angular/core").WritableSignal<boolean>;
37
- }>;
28
+ /** The disabled state. */
29
+ readonly disabledState: import("@angular/core").WritableSignal<boolean>;
38
30
  /** Emit event when the group value changes. */
39
31
  readonly change: import("@angular/core").OutputEmitterRef<BrnButtonToggleChange<T>>;
32
+ /**
33
+ * The method to be called in order to update ngModel.
34
+ */
35
+ private _onChange;
36
+ /** onTouch function registered via registerOnTouch (ControlValueAccessor). */
37
+ protected onTouched: () => void;
40
38
  writeValue(value: ToggleValue<T>): void;
41
39
  registerOnChange(fn: (value: ToggleValue<T>) => void): void;
42
40
  registerOnTouched(fn: () => void): void;
@@ -64,7 +62,7 @@ export declare class BrnToggleGroup<T = unknown> implements ControlValueAccessor
64
62
  /** Update the value of the group */
65
63
  private emitSelectionChange;
66
64
  static ɵfac: i0.ɵɵFactoryDeclaration<BrnToggleGroup<any>, never>;
67
- static ɵcmp: i0.ɵɵComponentDeclaration<BrnToggleGroup<any>, "brn-toggle-group", ["brnToggleGroup"], { "vertical": { "alias": "vertical"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "nullable": { "alias": "nullable"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "valueChange": "valueChange"; "change": "change"; }, never, ["*"], true, never>;
65
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BrnToggleGroup<any>, "[brnToggleGroup],brn-toggle-group", ["brnToggleGroup"], { "type": { "alias": "type"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "nullable": { "alias": "nullable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "valueChange": "valueChange"; "change": "change"; }, never, never, true, never>;
68
66
  }
69
- type ToggleValue<T> = T | T[] | null | undefined;
70
- export {};
67
+ export type ToggleValue<T> = T | T[] | null | undefined;
68
+ export type ToggleType = 'single' | 'multiple';
@@ -2,7 +2,6 @@ import type { BooleanInput } from '@angular/cdk/coercion';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class BrnToggleGroupItem<T> {
4
4
  private static _uniqueId;
5
- private readonly _changeDetector;
6
5
  /** Access the toggle group if available. */
7
6
  protected readonly _group: import("@spartan-ng/brain/toggle-group").BrnToggleGroup<T> | null;
8
7
  /** The id of the toggle. */
@@ -11,15 +10,22 @@ export declare class BrnToggleGroupItem<T> {
11
10
  readonly value: import("@angular/core").InputSignal<T | undefined>;
12
11
  /** Whether the toggle is disabled. */
13
12
  readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
13
+ /** Whether the toggle is disabled either from itself or from the group. */
14
+ protected readonly _disabled: import("@angular/core").Signal<boolean | undefined>;
14
15
  /** The current state of the toggle when not used in a group. */
15
16
  readonly state: import("@angular/core").ModelSignal<"on" | "off">;
16
- /** Whether the toggle is responds to click events. */
17
- readonly disableToggleClick: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
17
+ /** The type of the button. */
18
+ readonly type: import("@angular/core").InputSignal<"button" | "submit" | "reset">;
19
+ /**
20
+ * Accessibility label for screen readers.
21
+ * Use when no visible label exists.
22
+ */
23
+ readonly ariaLabel: import("@angular/core").InputSignal<string | null>;
18
24
  /** Whether the toggle is in the on state. */
19
25
  protected readonly _isOn: import("@angular/core").Signal<boolean>;
20
26
  /** The current state that reflects the group state or the model state. */
21
27
  protected readonly _state: import("@angular/core").Signal<"on" | "off">;
22
28
  toggle(): void;
23
29
  static ɵfac: i0.ɵɵFactoryDeclaration<BrnToggleGroupItem<any>, never>;
24
- static ɵdir: i0.ɵɵDirectiveDeclaration<BrnToggleGroupItem<any>, "button[hlmToggleGroupItem], button[brnToggleGroupItem]", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "disableToggleClick": { "alias": "disableToggleClick"; "required": false; "isSignal": true; }; }, { "state": "stateChange"; }, never, never, true, never>;
30
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BrnToggleGroupItem<any>, "button[brnToggleGroupItem]", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, { "state": "stateChange"; }, never, never, true, never>;
25
31
  }