ng-primitives 0.92.0 → 0.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/a11y/index.d.ts +3 -1
  2. package/accordion/index.d.ts +8 -1
  3. package/autofill/index.d.ts +4 -0
  4. package/avatar/index.d.ts +11 -2
  5. package/breadcrumbs/index.d.ts +21 -7
  6. package/button/index.d.ts +3 -1
  7. package/checkbox/index.d.ts +3 -1
  8. package/fesm2022/ng-primitives-checkbox.mjs +7 -8
  9. package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
  10. package/fesm2022/ng-primitives-file-upload.mjs +39 -38
  11. package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
  12. package/fesm2022/ng-primitives-focus-trap.mjs +107 -138
  13. package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -1
  14. package/fesm2022/ng-primitives-form-field.mjs +323 -365
  15. package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
  16. package/fesm2022/ng-primitives-interactions.mjs +57 -58
  17. package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
  18. package/fesm2022/ng-primitives-listbox.mjs +2 -2
  19. package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
  20. package/fesm2022/ng-primitives-slider.mjs +4 -5
  21. package/fesm2022/ng-primitives-slider.mjs.map +1 -1
  22. package/fesm2022/ng-primitives-state.mjs +28 -5
  23. package/fesm2022/ng-primitives-state.mjs.map +1 -1
  24. package/fesm2022/ng-primitives-switch.mjs +4 -5
  25. package/fesm2022/ng-primitives-switch.mjs.map +1 -1
  26. package/fesm2022/ng-primitives-tabs.mjs +194 -192
  27. package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
  28. package/fesm2022/ng-primitives-toggle-group.mjs +4 -5
  29. package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
  30. package/fesm2022/ng-primitives-toggle.mjs +4 -5
  31. package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
  32. package/fesm2022/ng-primitives-tooltip.mjs +4 -4
  33. package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
  34. package/fesm2022/ng-primitives-utils.mjs.map +1 -1
  35. package/file-upload/index.d.ts +20 -2
  36. package/focus-trap/index.d.ts +33 -75
  37. package/form-field/index.d.ts +320 -123
  38. package/input/index.d.ts +6 -0
  39. package/interactions/index.d.ts +16 -16
  40. package/package.json +1 -1
  41. package/roving-focus/index.d.ts +6 -2
  42. package/schematics/ng-generate/templates/tabs/tabs.__fileSuffix@dasherize__.ts.template +2 -2
  43. package/slider/index.d.ts +14 -6
  44. package/state/index.d.ts +22 -8
  45. package/switch/index.d.ts +8 -4
  46. package/tabs/index.d.ts +333 -84
  47. package/textarea/index.d.ts +6 -0
  48. package/toggle/index.d.ts +5 -3
  49. package/toggle-group/index.d.ts +6 -2
  50. package/toolbar/index.d.ts +5 -0
  51. package/utils/index.d.ts +1 -1
package/a11y/index.d.ts CHANGED
@@ -71,10 +71,12 @@ declare const injectVisuallyHiddenState: {
71
71
  (): Signal<NgpVisuallyHiddenState>;
72
72
  (options: {
73
73
  hoisted: true;
74
+ optional?: boolean;
74
75
  }): Signal<NgpVisuallyHiddenState | null>;
75
76
  (options?: {
76
77
  hoisted?: boolean;
77
- }): Signal<NgpVisuallyHiddenState | null>;
78
+ optional?: boolean;
79
+ }): Signal<NgpVisuallyHiddenState> | Signal<NgpVisuallyHiddenState | null>;
78
80
  };
79
81
  declare const provideVisuallyHiddenState: (opts?: {
80
82
  inherit?: boolean;
@@ -34,10 +34,12 @@ declare const injectAccordionContentState: {
34
34
  (): Signal<{}>;
35
35
  (options: {
36
36
  hoisted: true;
37
+ optional?: boolean;
37
38
  }): Signal<{} | null>;
38
39
  (options?: {
39
40
  hoisted?: boolean;
40
- }): Signal<{} | null>;
41
+ optional?: boolean;
42
+ }): Signal<{}> | Signal<{} | null>;
41
43
  };
42
44
  declare const provideAccordionContentState: (opts?: {
43
45
  inherit?: boolean;
@@ -342,15 +344,20 @@ declare const injectAccordionTriggerState: {
342
344
  }>;
343
345
  (options: {
344
346
  hoisted: true;
347
+ optional?: boolean;
345
348
  }): Signal<{
346
349
  id: Signal<string>;
347
350
  toggle: () => void;
348
351
  } | null>;
349
352
  (options?: {
350
353
  hoisted?: boolean;
354
+ optional?: boolean;
351
355
  }): Signal<{
352
356
  id: Signal<string>;
353
357
  toggle: () => void;
358
+ }> | Signal<{
359
+ id: Signal<string>;
360
+ toggle: () => void;
354
361
  } | null>;
355
362
  };
356
363
  declare const provideAccordionTriggerState: (opts?: {
@@ -45,13 +45,17 @@ declare const injectAutofillState: {
45
45
  }>;
46
46
  (options: {
47
47
  hoisted: true;
48
+ optional?: boolean;
48
49
  }): Signal<{
49
50
  autofilled: _angular_core.WritableSignal<boolean>;
50
51
  } | null>;
51
52
  (options?: {
52
53
  hoisted?: boolean;
54
+ optional?: boolean;
53
55
  }): Signal<{
54
56
  autofilled: _angular_core.WritableSignal<boolean>;
57
+ }> | Signal<{
58
+ autofilled: _angular_core.WritableSignal<boolean>;
55
59
  } | null>;
56
60
  };
57
61
  declare const provideAutofillState: (opts?: {
package/avatar/index.d.ts CHANGED
@@ -34,10 +34,12 @@ declare const injectAvatarFallbackState: {
34
34
  (): Signal<{}>;
35
35
  (options: {
36
36
  hoisted: true;
37
+ optional?: boolean;
37
38
  }): Signal<{} | null>;
38
39
  (options?: {
39
40
  hoisted?: boolean;
40
- }): Signal<{} | null>;
41
+ optional?: boolean;
42
+ }): Signal<{}> | Signal<{} | null>;
41
43
  };
42
44
  declare const provideAvatarFallbackState: (opts?: {
43
45
  inherit?: boolean;
@@ -62,10 +64,12 @@ declare const injectAvatarImageState: {
62
64
  (): _angular_core.Signal<{}>;
63
65
  (options: {
64
66
  hoisted: true;
67
+ optional?: boolean;
65
68
  }): _angular_core.Signal<{} | null>;
66
69
  (options?: {
67
70
  hoisted?: boolean;
68
- }): _angular_core.Signal<{} | null>;
71
+ optional?: boolean;
72
+ }): _angular_core.Signal<{}> | _angular_core.Signal<{} | null>;
69
73
  };
70
74
  declare const provideAvatarImageState: (opts?: {
71
75
  inherit?: boolean;
@@ -98,15 +102,20 @@ declare const injectAvatarState: {
98
102
  }>;
99
103
  (options: {
100
104
  hoisted: true;
105
+ optional?: boolean;
101
106
  }): Signal<{
102
107
  status: _angular_core.WritableSignal<NgpAvatarStatus>;
103
108
  setStatus: (newStatus: NgpAvatarStatus) => void;
104
109
  } | null>;
105
110
  (options?: {
106
111
  hoisted?: boolean;
112
+ optional?: boolean;
107
113
  }): Signal<{
108
114
  status: _angular_core.WritableSignal<NgpAvatarStatus>;
109
115
  setStatus: (newStatus: NgpAvatarStatus) => void;
116
+ }> | Signal<{
117
+ status: _angular_core.WritableSignal<NgpAvatarStatus>;
118
+ setStatus: (newStatus: NgpAvatarStatus) => void;
110
119
  } | null>;
111
120
  };
112
121
  declare const provideAvatarState: (opts?: {
@@ -73,10 +73,12 @@ declare const injectBreadcrumbsState: {
73
73
  (): _angular_core.Signal<{}>;
74
74
  (options: {
75
75
  hoisted: true;
76
+ optional?: boolean;
76
77
  }): _angular_core.Signal<{} | null>;
77
78
  (options?: {
78
79
  hoisted?: boolean;
79
- }): _angular_core.Signal<{} | null>;
80
+ optional?: boolean;
81
+ }): _angular_core.Signal<{}> | _angular_core.Signal<{} | null>;
80
82
  };
81
83
  declare const provideBreadcrumbsState: (opts?: {
82
84
  inherit?: boolean;
@@ -92,10 +94,12 @@ declare const injectBreadcrumbListState: {
92
94
  (): _angular_core.Signal<{}>;
93
95
  (options: {
94
96
  hoisted: true;
97
+ optional?: boolean;
95
98
  }): _angular_core.Signal<{} | null>;
96
99
  (options?: {
97
100
  hoisted?: boolean;
98
- }): _angular_core.Signal<{} | null>;
101
+ optional?: boolean;
102
+ }): _angular_core.Signal<{}> | _angular_core.Signal<{} | null>;
99
103
  };
100
104
  declare const provideBreadcrumbListState: (opts?: {
101
105
  inherit?: boolean;
@@ -111,10 +115,12 @@ declare const injectBreadcrumbItemState: {
111
115
  (): _angular_core.Signal<{}>;
112
116
  (options: {
113
117
  hoisted: true;
118
+ optional?: boolean;
114
119
  }): _angular_core.Signal<{} | null>;
115
120
  (options?: {
116
121
  hoisted?: boolean;
117
- }): _angular_core.Signal<{} | null>;
122
+ optional?: boolean;
123
+ }): _angular_core.Signal<{}> | _angular_core.Signal<{} | null>;
118
124
  };
119
125
  declare const provideBreadcrumbItemState: (opts?: {
120
126
  inherit?: boolean;
@@ -130,10 +136,12 @@ declare const injectBreadcrumbLinkState: {
130
136
  (): _angular_core.Signal<{}>;
131
137
  (options: {
132
138
  hoisted: true;
139
+ optional?: boolean;
133
140
  }): _angular_core.Signal<{} | null>;
134
141
  (options?: {
135
142
  hoisted?: boolean;
136
- }): _angular_core.Signal<{} | null>;
143
+ optional?: boolean;
144
+ }): _angular_core.Signal<{}> | _angular_core.Signal<{} | null>;
137
145
  };
138
146
  declare const provideBreadcrumbLinkState: (opts?: {
139
147
  inherit?: boolean;
@@ -149,10 +157,12 @@ declare const injectBreadcrumbPageState: {
149
157
  (): _angular_core.Signal<{}>;
150
158
  (options: {
151
159
  hoisted: true;
160
+ optional?: boolean;
152
161
  }): _angular_core.Signal<{} | null>;
153
162
  (options?: {
154
163
  hoisted?: boolean;
155
- }): _angular_core.Signal<{} | null>;
164
+ optional?: boolean;
165
+ }): _angular_core.Signal<{}> | _angular_core.Signal<{} | null>;
156
166
  };
157
167
  declare const provideBreadcrumbPageState: (opts?: {
158
168
  inherit?: boolean;
@@ -168,10 +178,12 @@ declare const injectBreadcrumbSeparatorState: {
168
178
  (): _angular_core.Signal<{}>;
169
179
  (options: {
170
180
  hoisted: true;
181
+ optional?: boolean;
171
182
  }): _angular_core.Signal<{} | null>;
172
183
  (options?: {
173
184
  hoisted?: boolean;
174
- }): _angular_core.Signal<{} | null>;
185
+ optional?: boolean;
186
+ }): _angular_core.Signal<{}> | _angular_core.Signal<{} | null>;
175
187
  };
176
188
  declare const provideBreadcrumbSeparatorState: (opts?: {
177
189
  inherit?: boolean;
@@ -187,10 +199,12 @@ declare const injectBreadcrumbEllipsisState: {
187
199
  (): _angular_core.Signal<{}>;
188
200
  (options: {
189
201
  hoisted: true;
202
+ optional?: boolean;
190
203
  }): _angular_core.Signal<{} | null>;
191
204
  (options?: {
192
205
  hoisted?: boolean;
193
- }): _angular_core.Signal<{} | null>;
206
+ optional?: boolean;
207
+ }): _angular_core.Signal<{}> | _angular_core.Signal<{} | null>;
194
208
  };
195
209
  declare const provideBreadcrumbEllipsisState: (opts?: {
196
210
  inherit?: boolean;
package/button/index.d.ts CHANGED
@@ -13,10 +13,12 @@ declare const injectButtonState: {
13
13
  (): Signal<NgpButtonState>;
14
14
  (options: {
15
15
  hoisted: true;
16
+ optional?: boolean;
16
17
  }): Signal<NgpButtonState | null>;
17
18
  (options?: {
18
19
  hoisted?: boolean;
19
- }): Signal<NgpButtonState | null>;
20
+ optional?: boolean;
21
+ }): Signal<NgpButtonState> | Signal<NgpButtonState | null>;
20
22
  };
21
23
  declare const provideButtonState: (opts?: {
22
24
  inherit?: boolean;
@@ -82,10 +82,12 @@ declare const injectCheckboxState: {
82
82
  (): Signal<NgpCheckboxState>;
83
83
  (options: {
84
84
  hoisted: true;
85
+ optional?: boolean;
85
86
  }): Signal<NgpCheckboxState | null>;
86
87
  (options?: {
87
88
  hoisted?: boolean;
88
- }): Signal<NgpCheckboxState | null>;
89
+ optional?: boolean;
90
+ }): Signal<NgpCheckboxState> | Signal<NgpCheckboxState | null>;
89
91
  };
90
92
  declare const provideCheckboxState: (opts?: {
91
93
  inherit?: boolean;
@@ -4,16 +4,15 @@ import { uniqueId } from 'ng-primitives/utils';
4
4
  import { ngpFormControl } from 'ng-primitives/form-field';
5
5
  import { ngpInteractions } from 'ng-primitives/interactions';
6
6
  import { injectElementRef } from 'ng-primitives/internal';
7
- import { createPrimitive, controlled, attrBinding, dataBinding, listener, deprecatedSetter } from 'ng-primitives/state';
8
- import { Subject } from 'rxjs';
7
+ import { createPrimitive, controlled, emitter, attrBinding, dataBinding, listener, deprecatedSetter } from 'ng-primitives/state';
9
8
 
10
9
  const [NgpCheckboxStateToken, ngpCheckbox, injectCheckboxState, provideCheckboxState] = createPrimitive('NgpCheckbox', ({ id = signal(uniqueId('ngp-checkbox')), checked: _checked = signal(false), indeterminate: _indeterminate = signal(false), disabled: _disabled = signal(false), onCheckedChange, onIndeterminateChange, }) => {
11
10
  const element = injectElementRef();
12
11
  const checked = controlled(_checked);
13
12
  const indeterminate = controlled(_indeterminate);
14
13
  const disabled = controlled(_disabled);
15
- const checkedChange = new Subject();
16
- const indeterminateChange = new Subject();
14
+ const checkedChange = emitter();
15
+ const indeterminateChange = emitter();
17
16
  const tabindex = computed(() => (disabled() ? -1 : 0), ...(ngDevMode ? [{ debugName: "tabindex" }] : []));
18
17
  // Setup interactions and form control hooks
19
18
  ngpInteractions({ hover: true, press: true, focusVisible: true, disabled });
@@ -53,12 +52,12 @@ const [NgpCheckboxStateToken, ngpCheckbox, injectCheckboxState, provideCheckboxS
53
52
  function setChecked(value) {
54
53
  checked.set(value);
55
54
  onCheckedChange?.(value);
56
- checkedChange.next(value);
55
+ checkedChange.emit(value);
57
56
  }
58
57
  function setIndeterminate(value) {
59
58
  indeterminate.set(value);
60
59
  onIndeterminateChange?.(value);
61
- indeterminateChange.next(value);
60
+ indeterminateChange.emit(value);
62
61
  }
63
62
  function setDisabled(value) {
64
63
  disabled.set(value);
@@ -68,8 +67,8 @@ const [NgpCheckboxStateToken, ngpCheckbox, injectCheckboxState, provideCheckboxS
68
67
  checked: deprecatedSetter(checked, 'setChecked'),
69
68
  indeterminate: deprecatedSetter(indeterminate, 'setIndeterminate'),
70
69
  disabled: deprecatedSetter(disabled, 'setDisabled'),
71
- checkedChange,
72
- indeterminateChange,
70
+ checkedChange: checkedChange.asObservable(),
71
+ indeterminateChange: indeterminateChange.asObservable(),
73
72
  toggle,
74
73
  setChecked,
75
74
  setIndeterminate,
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-checkbox.mjs","sources":["../../../../packages/ng-primitives/checkbox/src/checkbox/checkbox-state.ts","../../../../packages/ng-primitives/checkbox/src/checkbox/checkbox.ts","../../../../packages/ng-primitives/checkbox/src/ng-primitives-checkbox.ts"],"sourcesContent":["import { computed, Signal, signal, WritableSignal } from '@angular/core';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n listener,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable, Subject } from 'rxjs';\n\n/**\n * Public state surface for the Checkbox primitive.\n */\nexport interface NgpCheckboxState {\n /**\n * The id of the checkbox.\n */\n readonly id: Signal<string>;\n /**\n * Whether the checkbox is checked.\n */\n readonly checked: WritableSignal<boolean>;\n /**\n * Whether the checkbox is indeterminate.\n */\n readonly indeterminate: WritableSignal<boolean>;\n /**\n * Whether the checkbox is disabled.\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * Emits when the checked state changes.\n */\n readonly checkedChange: Observable<boolean>;\n /**\n * Emits when the indeterminate state changes.\n */\n readonly indeterminateChange: Observable<boolean>;\n /**\n * Toggle the checkbox value.\n */\n toggle(event?: Event): void;\n /**\n * Update the checked value.\n */\n setChecked(value: boolean): void;\n /**\n * Update the indeterminate value.\n */\n setIndeterminate(value: boolean): void;\n /**\n * Set the disabled value.\n */\n setDisabled(value: boolean): void;\n}\n\n/**\n * Inputs for configuring the Checkbox primitive.\n */\nexport interface NgpCheckboxProps {\n /**\n * The id of the checkbox.\n */\n readonly id?: Signal<string>;\n /**\n * Whether the checkbox is checked.\n */\n readonly checked?: Signal<boolean>;\n /**\n * Whether the checkbox is indeterminate.\n */\n readonly indeterminate?: Signal<boolean>;\n /**\n * Whether the checkbox is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Callback fired when the checked state changes.\n */\n readonly onCheckedChange?: (checked: boolean) => void;\n /**\n * Callback fired when the indeterminate state changes.\n */\n readonly onIndeterminateChange?: (indeterminate: boolean) => void;\n}\n\nexport const [NgpCheckboxStateToken, ngpCheckbox, injectCheckboxState, provideCheckboxState] =\n createPrimitive(\n 'NgpCheckbox',\n ({\n id = signal(uniqueId('ngp-checkbox')),\n checked: _checked = signal(false),\n indeterminate: _indeterminate = signal(false),\n disabled: _disabled = signal(false),\n onCheckedChange,\n onIndeterminateChange,\n }: NgpCheckboxProps): NgpCheckboxState => {\n const element = injectElementRef();\n const checked = controlled(_checked);\n const indeterminate = controlled(_indeterminate);\n const disabled = controlled(_disabled);\n const checkedChange = new Subject<boolean>();\n const indeterminateChange = new Subject<boolean>();\n const tabindex = computed(() => (disabled() ? -1 : 0));\n\n // Setup interactions and form control hooks\n ngpInteractions({ hover: true, press: true, focusVisible: true, disabled });\n ngpFormControl({ id, disabled });\n\n // Host bindings\n attrBinding(element, 'role', 'checkbox');\n attrBinding(element, 'aria-checked', () => (indeterminate() ? 'mixed' : checked()));\n dataBinding(element, 'data-checked', checked);\n dataBinding(element, 'data-indeterminate', indeterminate);\n attrBinding(element, 'aria-disabled', disabled);\n attrBinding(element, 'tabindex', () => tabindex().toString());\n\n // Event listeners\n listener(element, 'click', event => toggle(event));\n listener(element, 'keydown', (event: KeyboardEvent) => {\n if (event.key === 'Enter') {\n // According to WAI ARIA, checkboxes don't activate on enter keypress\n event.preventDefault();\n return;\n }\n\n if (event.key === ' ' || event.key === 'Spacebar') {\n toggle(event);\n }\n });\n\n function toggle(event?: Event): void {\n if (disabled()) {\n return;\n }\n\n // prevent this firing twice in cases where the label is clicked and the checkbox is clicked by the one event\n event?.preventDefault();\n\n const nextChecked = indeterminate() ? true : !checked();\n setChecked(nextChecked);\n\n // if the checkbox was indeterminate, it isn't anymore\n if (indeterminate()) {\n setIndeterminate(false);\n }\n }\n\n function setChecked(value: boolean): void {\n checked.set(value);\n onCheckedChange?.(value);\n checkedChange.next(value);\n }\n\n function setIndeterminate(value: boolean): void {\n indeterminate.set(value);\n onIndeterminateChange?.(value);\n indeterminateChange.next(value);\n }\n\n function setDisabled(value: boolean): void {\n disabled.set(value);\n }\n\n return {\n id,\n checked: deprecatedSetter(checked, 'setChecked'),\n indeterminate: deprecatedSetter(indeterminate, 'setIndeterminate'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n checkedChange,\n indeterminateChange,\n toggle,\n setChecked,\n setIndeterminate,\n setDisabled,\n };\n },\n );\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, output } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpCheckbox, provideCheckboxState } from './checkbox-state';\n\n/**\n * Apply the `ngpCheckbox` directive to an element to that represents the checkbox, such as a `button`.\n */\n@Directive({\n selector: '[ngpCheckbox]',\n providers: [provideCheckboxState({ inherit: false })],\n})\nexport class NgpCheckbox {\n /**\n * The id of the checkbox.\n * @internal\n */\n readonly id = input(uniqueId('ngp-checkbox'));\n\n /**\n * Defines whether the checkbox is checked.\n */\n readonly checked = input<boolean, BooleanInput>(false, {\n alias: 'ngpCheckboxChecked',\n transform: booleanAttribute,\n });\n\n /**\n * The event that is emitted when the checkbox value changes.\n */\n readonly checkedChange = output<boolean>({\n alias: 'ngpCheckboxCheckedChange',\n });\n\n /**\n * Defines whether the checkbox is indeterminate.\n */\n readonly indeterminate = input<boolean, BooleanInput>(false, {\n alias: 'ngpCheckboxIndeterminate',\n transform: booleanAttribute,\n });\n\n /**\n * The event that is emitted when the indeterminate value changes.\n */\n readonly indeterminateChange = output<boolean>({\n alias: 'ngpCheckboxIndeterminateChange',\n });\n\n /**\n * Whether the checkbox is required.\n */\n readonly required = input<boolean, BooleanInput>(false, {\n alias: 'ngpCheckboxRequired',\n transform: booleanAttribute,\n });\n\n /**\n * Defines whether the checkbox is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpCheckboxDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The state of the checkbox.\n */\n protected readonly state = ngpCheckbox({\n id: this.id,\n checked: this.checked,\n indeterminate: this.indeterminate,\n disabled: this.disabled,\n onCheckedChange: value => this.checkedChange.emit(value),\n onIndeterminateChange: value => this.indeterminateChange.emit(value),\n });\n\n toggle(event?: Event): void {\n this.state.toggle(event);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-primitives-checkbox.mjs","sources":["../../../../packages/ng-primitives/checkbox/src/checkbox/checkbox-state.ts","../../../../packages/ng-primitives/checkbox/src/checkbox/checkbox.ts","../../../../packages/ng-primitives/checkbox/src/ng-primitives-checkbox.ts"],"sourcesContent":["import { computed, Signal, signal, WritableSignal } from '@angular/core';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n listener,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Public state surface for the Checkbox primitive.\n */\nexport interface NgpCheckboxState {\n /**\n * The id of the checkbox.\n */\n readonly id: Signal<string>;\n /**\n * Whether the checkbox is checked.\n */\n readonly checked: WritableSignal<boolean>;\n /**\n * Whether the checkbox is indeterminate.\n */\n readonly indeterminate: WritableSignal<boolean>;\n /**\n * Whether the checkbox is disabled.\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * Emits when the checked state changes.\n */\n readonly checkedChange: Observable<boolean>;\n /**\n * Emits when the indeterminate state changes.\n */\n readonly indeterminateChange: Observable<boolean>;\n /**\n * Toggle the checkbox value.\n */\n toggle(event?: Event): void;\n /**\n * Update the checked value.\n */\n setChecked(value: boolean): void;\n /**\n * Update the indeterminate value.\n */\n setIndeterminate(value: boolean): void;\n /**\n * Set the disabled value.\n */\n setDisabled(value: boolean): void;\n}\n\n/**\n * Inputs for configuring the Checkbox primitive.\n */\nexport interface NgpCheckboxProps {\n /**\n * The id of the checkbox.\n */\n readonly id?: Signal<string>;\n /**\n * Whether the checkbox is checked.\n */\n readonly checked?: Signal<boolean>;\n /**\n * Whether the checkbox is indeterminate.\n */\n readonly indeterminate?: Signal<boolean>;\n /**\n * Whether the checkbox is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Callback fired when the checked state changes.\n */\n readonly onCheckedChange?: (checked: boolean) => void;\n /**\n * Callback fired when the indeterminate state changes.\n */\n readonly onIndeterminateChange?: (indeterminate: boolean) => void;\n}\n\nexport const [NgpCheckboxStateToken, ngpCheckbox, injectCheckboxState, provideCheckboxState] =\n createPrimitive(\n 'NgpCheckbox',\n ({\n id = signal(uniqueId('ngp-checkbox')),\n checked: _checked = signal(false),\n indeterminate: _indeterminate = signal(false),\n disabled: _disabled = signal(false),\n onCheckedChange,\n onIndeterminateChange,\n }: NgpCheckboxProps): NgpCheckboxState => {\n const element = injectElementRef();\n const checked = controlled(_checked);\n const indeterminate = controlled(_indeterminate);\n const disabled = controlled(_disabled);\n const checkedChange = emitter<boolean>();\n const indeterminateChange = emitter<boolean>();\n const tabindex = computed(() => (disabled() ? -1 : 0));\n\n // Setup interactions and form control hooks\n ngpInteractions({ hover: true, press: true, focusVisible: true, disabled });\n ngpFormControl({ id, disabled });\n\n // Host bindings\n attrBinding(element, 'role', 'checkbox');\n attrBinding(element, 'aria-checked', () => (indeterminate() ? 'mixed' : checked()));\n dataBinding(element, 'data-checked', checked);\n dataBinding(element, 'data-indeterminate', indeterminate);\n attrBinding(element, 'aria-disabled', disabled);\n attrBinding(element, 'tabindex', () => tabindex().toString());\n\n // Event listeners\n listener(element, 'click', event => toggle(event));\n listener(element, 'keydown', (event: KeyboardEvent) => {\n if (event.key === 'Enter') {\n // According to WAI ARIA, checkboxes don't activate on enter keypress\n event.preventDefault();\n return;\n }\n\n if (event.key === ' ' || event.key === 'Spacebar') {\n toggle(event);\n }\n });\n\n function toggle(event?: Event): void {\n if (disabled()) {\n return;\n }\n\n // prevent this firing twice in cases where the label is clicked and the checkbox is clicked by the one event\n event?.preventDefault();\n\n const nextChecked = indeterminate() ? true : !checked();\n setChecked(nextChecked);\n\n // if the checkbox was indeterminate, it isn't anymore\n if (indeterminate()) {\n setIndeterminate(false);\n }\n }\n\n function setChecked(value: boolean): void {\n checked.set(value);\n onCheckedChange?.(value);\n checkedChange.emit(value);\n }\n\n function setIndeterminate(value: boolean): void {\n indeterminate.set(value);\n onIndeterminateChange?.(value);\n indeterminateChange.emit(value);\n }\n\n function setDisabled(value: boolean): void {\n disabled.set(value);\n }\n\n return {\n id,\n checked: deprecatedSetter(checked, 'setChecked'),\n indeterminate: deprecatedSetter(indeterminate, 'setIndeterminate'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n checkedChange: checkedChange.asObservable(),\n indeterminateChange: indeterminateChange.asObservable(),\n toggle,\n setChecked,\n setIndeterminate,\n setDisabled,\n };\n },\n );\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, output } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpCheckbox, provideCheckboxState } from './checkbox-state';\n\n/**\n * Apply the `ngpCheckbox` directive to an element to that represents the checkbox, such as a `button`.\n */\n@Directive({\n selector: '[ngpCheckbox]',\n providers: [provideCheckboxState({ inherit: false })],\n})\nexport class NgpCheckbox {\n /**\n * The id of the checkbox.\n * @internal\n */\n readonly id = input(uniqueId('ngp-checkbox'));\n\n /**\n * Defines whether the checkbox is checked.\n */\n readonly checked = input<boolean, BooleanInput>(false, {\n alias: 'ngpCheckboxChecked',\n transform: booleanAttribute,\n });\n\n /**\n * The event that is emitted when the checkbox value changes.\n */\n readonly checkedChange = output<boolean>({\n alias: 'ngpCheckboxCheckedChange',\n });\n\n /**\n * Defines whether the checkbox is indeterminate.\n */\n readonly indeterminate = input<boolean, BooleanInput>(false, {\n alias: 'ngpCheckboxIndeterminate',\n transform: booleanAttribute,\n });\n\n /**\n * The event that is emitted when the indeterminate value changes.\n */\n readonly indeterminateChange = output<boolean>({\n alias: 'ngpCheckboxIndeterminateChange',\n });\n\n /**\n * Whether the checkbox is required.\n */\n readonly required = input<boolean, BooleanInput>(false, {\n alias: 'ngpCheckboxRequired',\n transform: booleanAttribute,\n });\n\n /**\n * Defines whether the checkbox is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpCheckboxDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The state of the checkbox.\n */\n protected readonly state = ngpCheckbox({\n id: this.id,\n checked: this.checked,\n indeterminate: this.indeterminate,\n disabled: this.disabled,\n onCheckedChange: value => this.checkedChange.emit(value),\n onIndeterminateChange: value => this.indeterminateChange.emit(value),\n });\n\n toggle(event?: Event): void {\n this.state.toggle(event);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,9 @@
1
1
  import { coerceStringArray } from '@angular/cdk/coercion';
2
2
  import * as i0 from '@angular/core';
3
3
  import { signal, input, booleanAttribute, output, Directive, inject, DOCUMENT } from '@angular/core';
4
- import { ngpHoverInteraction, ngpInteractions } from 'ng-primitives/interactions';
4
+ import { ngpHover, ngpInteractions } from 'ng-primitives/interactions';
5
5
  import { injectElementRef } from 'ng-primitives/internal';
6
- import { createPrimitive, dataBinding, listener } from 'ng-primitives/state';
7
- import { Subject } from 'rxjs';
6
+ import { createPrimitive, emitter, dataBinding, listener } from 'ng-primitives/state';
8
7
 
9
8
  function fileDropFilter(fileList, acceptedTypes, multiple) {
10
9
  const validFiles = Array.from(fileList).filter(file => isFileTypeAccepted(file, acceptedTypes));
@@ -39,12 +38,14 @@ const [NgpFileDropzoneStateToken, ngpFileDropzone, injectFileDropzoneState, prov
39
38
  const element = injectElementRef();
40
39
  const isDragOverState = signal(false, ...(ngDevMode ? [{ debugName: "isDragOverState" }] : []));
41
40
  // Create observables
42
- const selectedSubject = new Subject();
43
- const rejectedSubject = new Subject();
44
- const dragOverSubject = new Subject();
41
+ const selected = emitter();
42
+ const rejected = emitter();
43
+ const dragOver = emitter();
45
44
  // Host bindings
46
45
  dataBinding(element, 'data-dragover', () => (isDragOverState() ? '' : null));
47
46
  dataBinding(element, 'data-disabled', () => (disabled?.() ? '' : null));
47
+ // Setup hover interaction
48
+ ngpHover({ disabled });
48
49
  function onDragEnter(event) {
49
50
  if (disabled?.()) {
50
51
  return;
@@ -52,7 +53,7 @@ const [NgpFileDropzoneStateToken, ngpFileDropzone, injectFileDropzoneState, prov
52
53
  event.preventDefault();
53
54
  event.stopPropagation();
54
55
  isDragOverState.set(true);
55
- dragOverSubject.next(true);
56
+ dragOver.emit(true);
56
57
  onDragOver?.(true);
57
58
  }
58
59
  function onDragOverHandler(event) {
@@ -74,7 +75,7 @@ const [NgpFileDropzoneStateToken, ngpFileDropzone, injectFileDropzoneState, prov
74
75
  event.preventDefault();
75
76
  event.stopPropagation();
76
77
  isDragOverState.set(false);
77
- dragOverSubject.next(false);
78
+ dragOver.emit(false);
78
79
  onDragOver?.(false);
79
80
  }
80
81
  function onDrop(event) {
@@ -83,17 +84,17 @@ const [NgpFileDropzoneStateToken, ngpFileDropzone, injectFileDropzoneState, prov
83
84
  }
84
85
  event.preventDefault();
85
86
  isDragOverState.set(false);
86
- dragOverSubject.next(false);
87
+ dragOver.emit(false);
87
88
  onDragOver?.(false);
88
89
  const fileList = event.dataTransfer?.files;
89
90
  if (fileList) {
90
91
  const filteredFiles = fileDropFilter(fileList, fileTypes?.(), multiple?.() ?? false);
91
92
  if (filteredFiles) {
92
- selectedSubject.next(filteredFiles);
93
+ selected.emit(filteredFiles);
93
94
  onSelected?.(filteredFiles);
94
95
  }
95
96
  else {
96
- rejectedSubject.next();
97
+ rejected.emit();
97
98
  onRejected?.();
98
99
  }
99
100
  }
@@ -109,9 +110,9 @@ const [NgpFileDropzoneStateToken, ngpFileDropzone, injectFileDropzoneState, prov
109
110
  multiple,
110
111
  directory,
111
112
  isDragOver: isDragOverState,
112
- selected: selectedSubject.asObservable(),
113
- rejected: rejectedSubject.asObservable(),
114
- dragOverChanged: dragOverSubject.asObservable(),
113
+ selected: selected.asObservable(),
114
+ rejected: rejected.asObservable(),
115
+ dragOverChanged: dragOver.asObservable(),
115
116
  };
116
117
  });
117
118
 
@@ -184,7 +185,6 @@ class NgpFileDropzone {
184
185
  * Whether the user is currently dragging a file over the file upload.
185
186
  */
186
187
  this.isDragOver = this.state.isDragOver;
187
- ngpHoverInteraction({ disabled: this.disabled });
188
188
  }
189
189
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgpFileDropzone, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
190
190
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: NgpFileDropzone, isStandalone: true, selector: "[ngpFileDropzone]", inputs: { fileTypes: { classPropertyName: "fileTypes", publicName: "ngpFileDropzoneFileTypes", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "ngpFileDropzoneMultiple", isSignal: true, isRequired: false, transformFunction: null }, directory: { classPropertyName: "directory", publicName: "ngpFileDropzoneDirectory", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "ngpFileDropzoneDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "ngpFileDropzoneSelected", rejected: "ngpFileDropzoneRejected", dragOver: "ngpFileDropzoneDragOver" }, providers: [provideFileDropzoneState()], exportAs: ["ngpFileDropzone"], ngImport: i0 }); }
@@ -196,32 +196,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
196
196
  exportAs: 'ngpFileDropzone',
197
197
  providers: [provideFileDropzoneState()],
198
198
  }]
199
- }], ctorParameters: () => [], propDecorators: { fileTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileDropzoneFileTypes", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileDropzoneMultiple", required: false }] }], directory: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileDropzoneDirectory", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileDropzoneDisabled", required: false }] }], selected: [{ type: i0.Output, args: ["ngpFileDropzoneSelected"] }], rejected: [{ type: i0.Output, args: ["ngpFileDropzoneRejected"] }], dragOver: [{ type: i0.Output, args: ["ngpFileDropzoneDragOver"] }] } });
199
+ }], propDecorators: { fileTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileDropzoneFileTypes", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileDropzoneMultiple", required: false }] }], directory: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileDropzoneDirectory", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileDropzoneDisabled", required: false }] }], selected: [{ type: i0.Output, args: ["ngpFileDropzoneSelected"] }], rejected: [{ type: i0.Output, args: ["ngpFileDropzoneRejected"] }], dragOver: [{ type: i0.Output, args: ["ngpFileDropzoneDragOver"] }] } });
200
200
 
201
201
  const [NgpFileUploadStateToken, ngpFileUpload, injectFileUploadState, provideFileUploadState,] = createPrimitive('NgpFileUpload', ({ fileTypes, multiple, directory, dragAndDrop, disabled, onSelected, onCanceled, onRejected, onDragOver, }) => {
202
202
  const element = injectElementRef();
203
203
  const document = inject(DOCUMENT);
204
204
  const isDragOver = signal(false, ...(ngDevMode ? [{ debugName: "isDragOver" }] : []));
205
205
  // Create observables
206
- const selectedSubject = new Subject();
207
- const canceledSubject = new Subject();
208
- const rejectedSubject = new Subject();
209
- const dragOverSubject = new Subject();
206
+ const selected = emitter();
207
+ const canceled = emitter();
208
+ const rejected = emitter();
209
+ const dragOver = emitter();
210
210
  // Host bindings
211
211
  dataBinding(element, 'data-disabled', () => (disabled?.() ? '' : null));
212
212
  dataBinding(element, 'data-dragover', () => (isDragOver() ? '' : null));
213
+ // Setup interactions
214
+ ngpInteractions({
215
+ hover: true,
216
+ press: true,
217
+ focusVisible: true,
218
+ disabled,
219
+ });
213
220
  // Create file input
214
221
  const input = document.createElement('input');
215
222
  input.type = 'file';
216
223
  input.style.display = 'none';
217
224
  input.addEventListener('change', () => {
218
225
  const files = input.files;
219
- selectedSubject.next(files);
226
+ selected.emit(files);
220
227
  onSelected?.(files);
221
228
  input.value = '';
222
229
  });
223
230
  input.addEventListener('cancel', () => {
224
- canceledSubject.next();
231
+ canceled.emit();
225
232
  onCanceled?.();
226
233
  });
227
234
  function showFileDialog() {
@@ -243,7 +250,7 @@ const [NgpFileUploadStateToken, ngpFileUpload, injectFileUploadState, provideFil
243
250
  event.preventDefault();
244
251
  event.stopPropagation();
245
252
  isDragOver.set(true);
246
- dragOverSubject.next(true);
253
+ dragOver.emit(true);
247
254
  onDragOver?.(true);
248
255
  }
249
256
  function onDragOverHandler(event) {
@@ -265,7 +272,7 @@ const [NgpFileUploadStateToken, ngpFileUpload, injectFileUploadState, provideFil
265
272
  event.preventDefault();
266
273
  event.stopPropagation();
267
274
  isDragOver.set(false);
268
- dragOverSubject.next(false);
275
+ dragOver.emit(false);
269
276
  onDragOver?.(false);
270
277
  }
271
278
  function onDrop(event) {
@@ -274,17 +281,17 @@ const [NgpFileUploadStateToken, ngpFileUpload, injectFileUploadState, provideFil
274
281
  }
275
282
  event.preventDefault();
276
283
  isDragOver.set(false);
277
- dragOverSubject.next(false);
284
+ dragOver.emit(false);
278
285
  onDragOver?.(false);
279
286
  const fileList = event.dataTransfer?.files;
280
287
  if (fileList) {
281
288
  const filteredFiles = fileDropFilter(fileList, fileTypes?.(), multiple?.() ?? false);
282
289
  if (filteredFiles) {
283
- selectedSubject.next(filteredFiles);
290
+ selected.emit(filteredFiles);
284
291
  onSelected?.(filteredFiles);
285
292
  }
286
293
  else {
287
- rejectedSubject.next();
294
+ rejected.emit();
288
295
  onRejected?.();
289
296
  }
290
297
  }
@@ -297,10 +304,10 @@ const [NgpFileUploadStateToken, ngpFileUpload, injectFileUploadState, provideFil
297
304
  listener(element, 'drop', onDrop);
298
305
  return {
299
306
  isDragOver,
300
- selected: selectedSubject.asObservable(),
301
- canceled: canceledSubject.asObservable(),
302
- rejected: rejectedSubject.asObservable(),
303
- dragOverChanged: dragOverSubject.asObservable(),
307
+ selected: selected.asObservable(),
308
+ canceled: canceled.asObservable(),
309
+ rejected: rejected.asObservable(),
310
+ dragOverChanged: dragOver.asObservable(),
304
311
  showFileDialog,
305
312
  };
306
313
  });
@@ -390,12 +397,6 @@ class NgpFileUpload {
390
397
  * Whether the user is currently dragging a file over the file upload.
391
398
  */
392
399
  this.isDragOver = this.state.isDragOver;
393
- ngpInteractions({
394
- hover: true,
395
- press: true,
396
- focusVisible: true,
397
- disabled: this.disabled,
398
- });
399
400
  }
400
401
  /**
401
402
  * Show the file dialog.
@@ -413,7 +414,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
413
414
  exportAs: 'ngpFileUpload',
414
415
  providers: [provideFileUploadState()],
415
416
  }]
416
- }], ctorParameters: () => [], propDecorators: { fileTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileUploadFileTypes", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileUploadMultiple", required: false }] }], directory: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileUploadDirectory", required: false }] }], dragAndDrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileUploadDragDrop", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileUploadDisabled", required: false }] }], selected: [{ type: i0.Output, args: ["ngpFileUploadSelected"] }], canceled: [{ type: i0.Output, args: ["ngpFileUploadCanceled"] }], rejected: [{ type: i0.Output, args: ["ngpFileUploadRejected"] }], dragOver: [{ type: i0.Output, args: ["ngpFileUploadDragOver"] }] } });
417
+ }], propDecorators: { fileTypes: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileUploadFileTypes", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileUploadMultiple", required: false }] }], directory: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileUploadDirectory", required: false }] }], dragAndDrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileUploadDragDrop", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngpFileUploadDisabled", required: false }] }], selected: [{ type: i0.Output, args: ["ngpFileUploadSelected"] }], canceled: [{ type: i0.Output, args: ["ngpFileUploadCanceled"] }], rejected: [{ type: i0.Output, args: ["ngpFileUploadRejected"] }], dragOver: [{ type: i0.Output, args: ["ngpFileUploadDragOver"] }] } });
417
418
 
418
419
  /**
419
420
  * Generated bundle index. Do not edit.