ng-primitives 0.57.0 → 0.59.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 (85) hide show
  1. package/button/button/button-state.d.ts +1 -11
  2. package/button/button/button.d.ts +0 -8
  3. package/button/index.d.ts +1 -1
  4. package/combobox/combobox-dropdown/combobox-dropdown.d.ts +3 -3
  5. package/date-picker/date-picker-date-button/date-picker-date-button.d.ts +1 -2
  6. package/date-picker/date-picker-next-month/date-picker-next-month.d.ts +1 -2
  7. package/date-picker/date-picker-previous-month/date-picker-previous-month.d.ts +1 -2
  8. package/fesm2022/ng-primitives-a11y.mjs.map +1 -1
  9. package/fesm2022/ng-primitives-accordion.mjs.map +1 -1
  10. package/fesm2022/ng-primitives-autofill.mjs.map +1 -1
  11. package/fesm2022/ng-primitives-avatar.mjs.map +1 -1
  12. package/fesm2022/ng-primitives-button.mjs +5 -31
  13. package/fesm2022/ng-primitives-button.mjs.map +1 -1
  14. package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
  15. package/fesm2022/ng-primitives-combobox.mjs +1 -2
  16. package/fesm2022/ng-primitives-combobox.mjs.map +1 -1
  17. package/fesm2022/ng-primitives-common.mjs.map +1 -1
  18. package/fesm2022/ng-primitives-date-picker.mjs +7 -16
  19. package/fesm2022/ng-primitives-date-picker.mjs.map +1 -1
  20. package/fesm2022/ng-primitives-date-time-luxon.mjs.map +1 -1
  21. package/fesm2022/ng-primitives-date-time.mjs.map +1 -1
  22. package/fesm2022/ng-primitives-dialog.mjs.map +1 -1
  23. package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
  24. package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -1
  25. package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
  26. package/fesm2022/ng-primitives-input.mjs.map +1 -1
  27. package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
  28. package/fesm2022/ng-primitives-internal.mjs +165 -42
  29. package/fesm2022/ng-primitives-internal.mjs.map +1 -1
  30. package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
  31. package/fesm2022/ng-primitives-menu.mjs.map +1 -1
  32. package/fesm2022/ng-primitives-meter.mjs.map +1 -1
  33. package/fesm2022/ng-primitives-pagination.mjs +11 -22
  34. package/fesm2022/ng-primitives-pagination.mjs.map +1 -1
  35. package/fesm2022/ng-primitives-popover.mjs +4 -2
  36. package/fesm2022/ng-primitives-popover.mjs.map +1 -1
  37. package/fesm2022/ng-primitives-portal.mjs +8 -2
  38. package/fesm2022/ng-primitives-portal.mjs.map +1 -1
  39. package/fesm2022/ng-primitives-progress.mjs.map +1 -1
  40. package/fesm2022/ng-primitives-radio.mjs.map +1 -1
  41. package/fesm2022/ng-primitives-resize.mjs +5 -66
  42. package/fesm2022/ng-primitives-resize.mjs.map +1 -1
  43. package/fesm2022/ng-primitives-roving-focus.mjs.map +1 -1
  44. package/fesm2022/ng-primitives-search.mjs.map +1 -1
  45. package/fesm2022/ng-primitives-select.mjs.map +1 -1
  46. package/fesm2022/ng-primitives-separator.mjs.map +1 -1
  47. package/fesm2022/ng-primitives-slider.mjs.map +1 -1
  48. package/fesm2022/ng-primitives-state.mjs.map +1 -1
  49. package/fesm2022/ng-primitives-switch.mjs.map +1 -1
  50. package/fesm2022/ng-primitives-tabs.mjs +2 -2
  51. package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
  52. package/fesm2022/ng-primitives-textarea.mjs.map +1 -1
  53. package/fesm2022/ng-primitives-toast.mjs.map +1 -1
  54. package/fesm2022/ng-primitives-toggle-group.mjs +2 -2
  55. package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
  56. package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
  57. package/fesm2022/ng-primitives-toolbar.mjs +2 -2
  58. package/fesm2022/ng-primitives-toolbar.mjs.map +1 -1
  59. package/fesm2022/ng-primitives-tooltip.mjs +22 -3
  60. package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
  61. package/fesm2022/ng-primitives-utils.mjs +10 -1
  62. package/fesm2022/ng-primitives-utils.mjs.map +1 -1
  63. package/internal/index.d.ts +4 -1
  64. package/internal/interactions/button.d.ts +14 -0
  65. package/internal/utilities/interaction.d.ts +6 -0
  66. package/internal/utilities/mutation-observer.d.ts +39 -0
  67. package/internal/utilities/overflow.d.ts +13 -0
  68. package/{resize/utils → internal/utilities}/resize.d.ts +13 -2
  69. package/package.json +21 -21
  70. package/pagination/pagination-button/pagination-button.d.ts +1 -2
  71. package/pagination/pagination-first/pagination-first.d.ts +1 -2
  72. package/pagination/pagination-last/pagination-last.d.ts +1 -2
  73. package/pagination/pagination-next/pagination-next.d.ts +1 -2
  74. package/pagination/pagination-previous/pagination-previous.d.ts +1 -2
  75. package/portal/overlay.d.ts +2 -0
  76. package/resize/index.d.ts +1 -1
  77. package/resize/resize/resize.d.ts +3 -4
  78. package/schematics/ng-generate/__snapshots__/index.spec.ts.snap +148 -5
  79. package/schematics/ng-generate/templates/button/button.__fileSuffix@dasherize__.ts.template +148 -5
  80. package/schematics/ng-generate/templates/tooltip/tooltip-trigger.__fileSuffix@dasherize__.ts.template +1 -0
  81. package/tooltip/config/tooltip-config.d.ts +5 -0
  82. package/tooltip/tooltip-trigger/tooltip-trigger.d.ts +13 -3
  83. package/utils/helpers/attributes.d.ts +2 -0
  84. package/utils/index.d.ts +2 -1
  85. package/internal/signals/sync-state.d.ts +0 -2
@@ -1,4 +1,3 @@
1
- import { Signal } from '@angular/core';
2
1
  import type { NgpButton } from './button';
3
2
  /**
4
3
  * The state token for the Button primitive.
@@ -11,17 +10,8 @@ export declare const provideButtonState: (options?: import("ng-primitives/state"
11
10
  /**
12
11
  * Injects the Button state.
13
12
  */
14
- export declare const injectButtonState: <U = NgpButton>(injectOptions?: import("@angular/core").InjectOptions) => Signal<import("ng-primitives/state").State<U>>;
13
+ export declare const injectButtonState: <U = NgpButton>(injectOptions?: import("@angular/core").InjectOptions) => import("@angular/core").Signal<import("ng-primitives/state").State<U>>;
15
14
  /**
16
15
  * The Button state registration function.
17
16
  */
18
17
  export declare const buttonState: <U>(state: U) => import("ng-primitives/state").CreatedState<U>;
19
- interface SyncButton {
20
- disabled: Signal<boolean>;
21
- }
22
- /**
23
- * Sync the button state with control state.
24
- * @param disabled The disabled state of the control.
25
- */
26
- export declare function syncButton({ disabled }: SyncButton): void;
27
- export {};
@@ -1,18 +1,10 @@
1
1
  import { BooleanInput } from '@angular/cdk/coercion';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class NgpButton {
4
- /**
5
- * Get the tag name of the element.
6
- */
7
- private readonly tagName;
8
4
  /**
9
5
  * Whether the button is disabled.
10
6
  */
11
7
  readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, BooleanInput>;
12
- /**
13
- * Detect if this is an HTML button element.
14
- */
15
- protected readonly isButton: boolean;
16
8
  /**
17
9
  * The button state.
18
10
  */
package/button/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { NgpButton } from './button/button';
2
- export { injectButtonState, provideButtonState, syncButton } from './button/button-state';
2
+ export { injectButtonState, provideButtonState } from './button/button-state';
@@ -3,11 +3,11 @@ export declare class NgpComboboxDropdown {
3
3
  /** Access the combobox state. */
4
4
  protected readonly state: import("@angular/core").Signal<import("ng-primitives/state").State<import("ng-primitives/combobox").NgpCombobox>>;
5
5
  /** The dimensions of the combobox. */
6
- protected readonly comboboxDimensions: import("@angular/core").Signal<import("ng-primitives/resize").Dimensions>;
6
+ protected readonly comboboxDimensions: import("@angular/core").Signal<import("ng-primitives/internal").Dimensions>;
7
7
  /** The dimensions of the combobox. */
8
- protected readonly inputDimensions: import("@angular/core").Signal<import("ng-primitives/resize").Dimensions>;
8
+ protected readonly inputDimensions: import("@angular/core").Signal<import("ng-primitives/internal").Dimensions>;
9
9
  /** Store the combobox button dimensions. */
10
- protected readonly buttonDimensions: import("@angular/core").Signal<import("ng-primitives/resize").Dimensions>;
10
+ protected readonly buttonDimensions: import("@angular/core").Signal<import("ng-primitives/internal").Dimensions>;
11
11
  /**
12
12
  * Access the element reference.
13
13
  * @internal
@@ -1,6 +1,5 @@
1
1
  import { OnDestroy } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- import * as i1 from "ng-primitives/button";
4
3
  /**
5
4
  * A button that represents a date in the date picker grid.
6
5
  */
@@ -104,5 +103,5 @@ export declare class NgpDatePickerDateButton<T> implements OnDestroy {
104
103
  */
105
104
  private getDirection;
106
105
  static ɵfac: i0.ɵɵFactoryDeclaration<NgpDatePickerDateButton<any>, never>;
107
- static ɵdir: i0.ɵɵDirectiveDeclaration<NgpDatePickerDateButton<any>, "[ngpDatePickerDateButton]", ["ngpDatePickerDateButton"], {}, {}, never, never, true, [{ directive: typeof i1.NgpButton; inputs: {}; outputs: {}; }]>;
106
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgpDatePickerDateButton<any>, "[ngpDatePickerDateButton]", ["ngpDatePickerDateButton"], {}, {}, never, never, true, never>;
108
107
  }
@@ -1,5 +1,4 @@
1
1
  import * as i0 from "@angular/core";
2
- import * as i1 from "ng-primitives/button";
3
2
  /**
4
3
  * A button that navigates to the next month.
5
4
  */
@@ -35,5 +34,5 @@ export declare class NgpDatePickerNextMonth<T> {
35
34
  */
36
35
  protected navigateToNextMonth(): void;
37
36
  static ɵfac: i0.ɵɵFactoryDeclaration<NgpDatePickerNextMonth<any>, never>;
38
- static ɵdir: i0.ɵɵDirectiveDeclaration<NgpDatePickerNextMonth<any>, "[ngpDatePickerNextMonth]", ["ngpDatePickerNextMonth"], {}, {}, never, never, true, [{ directive: typeof i1.NgpButton; inputs: {}; outputs: {}; }]>;
37
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgpDatePickerNextMonth<any>, "[ngpDatePickerNextMonth]", ["ngpDatePickerNextMonth"], {}, {}, never, never, true, never>;
39
38
  }
@@ -1,5 +1,4 @@
1
1
  import * as i0 from "@angular/core";
2
- import * as i1 from "ng-primitives/button";
3
2
  /**
4
3
  * A button that navigates to the previous month.
5
4
  */
@@ -35,5 +34,5 @@ export declare class NgpDatePickerPreviousMonth<T> {
35
34
  */
36
35
  protected navigateToPreviouMonth(): void;
37
36
  static ɵfac: i0.ɵɵFactoryDeclaration<NgpDatePickerPreviousMonth<any>, never>;
38
- static ɵdir: i0.ɵɵDirectiveDeclaration<NgpDatePickerPreviousMonth<any>, "[ngpDatePickerPreviousMonth]", ["ngpDatePickerPreviousMonth"], {}, {}, never, never, true, [{ directive: typeof i1.NgpButton; inputs: {}; outputs: {}; }]>;
37
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgpDatePickerPreviousMonth<any>, "[ngpDatePickerPreviousMonth]", ["ngpDatePickerPreviousMonth"], {}, {}, never, never, true, never>;
39
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-a11y.mjs","sources":["../../../../packages/ng-primitives/a11y/src/active-descendant/active-descendant.ts","../../../../packages/ng-primitives/a11y/src/visually-hidden/visually-hidden-state.ts","../../../../packages/ng-primitives/a11y/src/visually-hidden/visually-hidden.ts","../../../../packages/ng-primitives/a11y/src/ng-primitives-a11y.ts"],"sourcesContent":["import { computed, effect, ElementRef, Signal, signal } from '@angular/core';\n\ninterface ActiveDescendantManagerOptions<T extends NgpActivatable> {\n /**\n * The disabled state of the active descendant group.\n * @default false\n */\n disabled?: Signal<boolean>;\n /**\n * The items in the active descendant group.\n */\n items: Signal<T[]>;\n /**\n * Whether active descendant should wrap around.\n * @default false\n */\n wrap?: Signal<boolean>;\n}\n\nexport interface NgpActivatable {\n /**\n * The id of the item.\n */\n id: Signal<string>;\n /**\n * Whether the item is disabled.\n */\n disabled?: Signal<boolean>;\n /**\n * The element that represents the item.\n */\n elementRef: ElementRef<HTMLElement>;\n}\n\nexport function activeDescendantManager<T extends NgpActivatable>(\n options: ActiveDescendantManagerOptions<T>,\n) {\n const sortedOptions = () =>\n options\n .items()\n .slice()\n .sort((a, b) => {\n const aElement = a.elementRef.nativeElement;\n const bElement = b.elementRef.nativeElement;\n return aElement.compareDocumentPosition(bElement) & Node.DOCUMENT_POSITION_FOLLOWING\n ? -1\n : 1;\n });\n\n const activeIndex = signal<number>(0);\n const activeItem = computed<T | undefined>(() => sortedOptions()?.[activeIndex()]);\n const disabled = computed(\n () => options.disabled?.() || options.items().every(item => item.disabled?.()),\n );\n\n // any time the item list changes, check if the active index is still valid\n effect(() => {\n const items = sortedOptions();\n if (activeIndex() >= items.length || activeIndex() < 0) {\n activeIndex.set(items.findIndex(item => !item.disabled?.()));\n }\n if (activeIndex() === -1 && items.length > 0) {\n activeIndex.set(0);\n }\n if (disabled() || items.length === 0) {\n activeIndex.set(-1);\n }\n });\n\n const activeDescendant = computed(() => {\n const item = activeItem();\n\n if (disabled() || !item) {\n return undefined;\n }\n\n return item.id();\n });\n\n /**\n * Activate an item in the active descendant group.\n * @param item The item to activate.\n */\n const activate = (item: T | undefined) => {\n if (item === undefined) {\n activeIndex.set(-1);\n return;\n }\n\n if (disabled() || item.disabled?.()) {\n return;\n }\n\n activeIndex.set(sortedOptions().indexOf(item));\n };\n\n /**\n * Activate the first enabled item in the active descendant group.\n */\n const first = () => {\n const item = sortedOptions().findIndex(item => !item.disabled?.());\n\n if (item) {\n activeIndex.set(item);\n }\n };\n\n /**\n * Activate the last enabled item in the active descendant group.\n */\n const last = () => {\n const item = sortedOptions()\n .reverse()\n .findIndex(item => !item.disabled?.());\n\n if (item !== -1) {\n activeIndex.set(sortedOptions().length - 1 - item);\n }\n };\n\n const findNextIndex = (\n items: NgpActivatable[],\n currentIndex: number,\n direction: 1 | -1,\n wrap: boolean,\n ): number | undefined => {\n let index = (currentIndex + direction + items.length) % items.length;\n\n while (index !== currentIndex) {\n const item = items[index];\n if (item && !item.disabled?.()) {\n return index;\n }\n index = (index + direction + items.length) % items.length;\n\n if (\n !wrap &&\n ((direction === 1 && index === 0) || (direction === -1 && index === items.length - 1))\n ) {\n break;\n }\n }\n\n return undefined;\n };\n\n /**\n * Activate the next enabled item in the active descendant group.\n */\n const next = () => {\n const items = sortedOptions();\n const nextIndex = findNextIndex(items, activeIndex(), 1, options.wrap?.() ?? false);\n\n if (nextIndex !== undefined) {\n activeIndex.set(nextIndex);\n }\n };\n\n /**\n * Activate the previous enabled item in the active descendant group.\n */\n const previous = () => {\n const items = sortedOptions();\n const prevIndex = findNextIndex(items, activeIndex(), -1, options.wrap?.() ?? false);\n\n if (prevIndex !== undefined) {\n activeIndex.set(prevIndex);\n }\n };\n\n /**\n * Reset the active descendant group, clearing the active index.\n */\n const reset = () => {\n activeIndex.set(-1);\n };\n\n return {\n activeDescendant,\n activeItem,\n activate,\n first,\n last,\n next,\n previous,\n reset,\n };\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpVisuallyHidden } from './visually-hidden';\n\n/**\n * The state token for the VisuallyHidden primitive.\n */\nexport const NgpVisuallyHiddenStateToken = createStateToken<NgpVisuallyHidden>('VisuallyHidden');\n\n/**\n * Provides the VisuallyHidden state.\n */\nexport const provideVisuallyHiddenState = createStateProvider(NgpVisuallyHiddenStateToken);\n\n/**\n * Injects the VisuallyHidden state.\n */\nexport const injectVisuallyHiddenState = createStateInjector<NgpVisuallyHidden>(\n NgpVisuallyHiddenStateToken,\n);\n\n/**\n * The VisuallyHidden state registration function.\n */\nexport const visuallyHiddenState = createState(NgpVisuallyHiddenStateToken);\n","import { Directive, computed, signal } from '@angular/core';\nimport { provideVisuallyHiddenState, visuallyHiddenState } from './visually-hidden-state';\n\n/**\n * Hide an element visually while keeping it present in the DOM.\n */\n@Directive({\n selector: '[ngpVisuallyHidden]',\n exportAs: 'ngpVisuallyHidden',\n providers: [provideVisuallyHiddenState()],\n host: {\n '[style]': 'style()',\n },\n})\nexport class NgpVisuallyHidden {\n /**\n * Whether the element is hidden.\n */\n protected readonly hidden = signal<boolean>(true);\n\n protected readonly style = computed(() => {\n if (!this.hidden()) {\n return {};\n }\n\n return {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n padding: '0',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n wordWrap: 'normal',\n outline: '0',\n '-webkit-appearance': 'none',\n '-moz-appearance': 'none',\n 'inset-inline-start': '0',\n };\n });\n\n protected readonly state = visuallyHiddenState<NgpVisuallyHidden>(this);\n\n /**\n * Set the element visibility.\n * @param visible\n */\n setVisibility(visible: boolean): void {\n this.hidden.set(!visible);\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-a11y.mjs","sources":["../../../../packages/ng-primitives/a11y/src/active-descendant/active-descendant.ts","../../../../packages/ng-primitives/a11y/src/visually-hidden/visually-hidden-state.ts","../../../../packages/ng-primitives/a11y/src/visually-hidden/visually-hidden.ts","../../../../packages/ng-primitives/a11y/src/ng-primitives-a11y.ts"],"sourcesContent":["import { computed, effect, ElementRef, Signal, signal } from '@angular/core';\n\ninterface ActiveDescendantManagerOptions<T extends NgpActivatable> {\n /**\n * The disabled state of the active descendant group.\n * @default false\n */\n disabled?: Signal<boolean>;\n /**\n * The items in the active descendant group.\n */\n items: Signal<T[]>;\n /**\n * Whether active descendant should wrap around.\n * @default false\n */\n wrap?: Signal<boolean>;\n}\n\nexport interface NgpActivatable {\n /**\n * The id of the item.\n */\n id: Signal<string>;\n /**\n * Whether the item is disabled.\n */\n disabled?: Signal<boolean>;\n /**\n * The element that represents the item.\n */\n elementRef: ElementRef<HTMLElement>;\n}\n\nexport function activeDescendantManager<T extends NgpActivatable>(\n options: ActiveDescendantManagerOptions<T>,\n) {\n const sortedOptions = () =>\n options\n .items()\n .slice()\n .sort((a, b) => {\n const aElement = a.elementRef.nativeElement;\n const bElement = b.elementRef.nativeElement;\n return aElement.compareDocumentPosition(bElement) & Node.DOCUMENT_POSITION_FOLLOWING\n ? -1\n : 1;\n });\n\n const activeIndex = signal<number>(0);\n const activeItem = computed<T | undefined>(() => sortedOptions()?.[activeIndex()]);\n const disabled = computed(\n () => options.disabled?.() || options.items().every(item => item.disabled?.()),\n );\n\n // any time the item list changes, check if the active index is still valid\n effect(() => {\n const items = sortedOptions();\n if (activeIndex() >= items.length || activeIndex() < 0) {\n activeIndex.set(items.findIndex(item => !item.disabled?.()));\n }\n if (activeIndex() === -1 && items.length > 0) {\n activeIndex.set(0);\n }\n if (disabled() || items.length === 0) {\n activeIndex.set(-1);\n }\n });\n\n const activeDescendant = computed(() => {\n const item = activeItem();\n\n if (disabled() || !item) {\n return undefined;\n }\n\n return item.id();\n });\n\n /**\n * Activate an item in the active descendant group.\n * @param item The item to activate.\n */\n const activate = (item: T | undefined) => {\n if (item === undefined) {\n activeIndex.set(-1);\n return;\n }\n\n if (disabled() || item.disabled?.()) {\n return;\n }\n\n activeIndex.set(sortedOptions().indexOf(item));\n };\n\n /**\n * Activate the first enabled item in the active descendant group.\n */\n const first = () => {\n const item = sortedOptions().findIndex(item => !item.disabled?.());\n\n if (item) {\n activeIndex.set(item);\n }\n };\n\n /**\n * Activate the last enabled item in the active descendant group.\n */\n const last = () => {\n const item = sortedOptions()\n .reverse()\n .findIndex(item => !item.disabled?.());\n\n if (item !== -1) {\n activeIndex.set(sortedOptions().length - 1 - item);\n }\n };\n\n const findNextIndex = (\n items: NgpActivatable[],\n currentIndex: number,\n direction: 1 | -1,\n wrap: boolean,\n ): number | undefined => {\n let index = (currentIndex + direction + items.length) % items.length;\n\n while (index !== currentIndex) {\n const item = items[index];\n if (item && !item.disabled?.()) {\n return index;\n }\n index = (index + direction + items.length) % items.length;\n\n if (\n !wrap &&\n ((direction === 1 && index === 0) || (direction === -1 && index === items.length - 1))\n ) {\n break;\n }\n }\n\n return undefined;\n };\n\n /**\n * Activate the next enabled item in the active descendant group.\n */\n const next = () => {\n const items = sortedOptions();\n const nextIndex = findNextIndex(items, activeIndex(), 1, options.wrap?.() ?? false);\n\n if (nextIndex !== undefined) {\n activeIndex.set(nextIndex);\n }\n };\n\n /**\n * Activate the previous enabled item in the active descendant group.\n */\n const previous = () => {\n const items = sortedOptions();\n const prevIndex = findNextIndex(items, activeIndex(), -1, options.wrap?.() ?? false);\n\n if (prevIndex !== undefined) {\n activeIndex.set(prevIndex);\n }\n };\n\n /**\n * Reset the active descendant group, clearing the active index.\n */\n const reset = () => {\n activeIndex.set(-1);\n };\n\n return {\n activeDescendant,\n activeItem,\n activate,\n first,\n last,\n next,\n previous,\n reset,\n };\n}\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpVisuallyHidden } from './visually-hidden';\n\n/**\n * The state token for the VisuallyHidden primitive.\n */\nexport const NgpVisuallyHiddenStateToken = createStateToken<NgpVisuallyHidden>('VisuallyHidden');\n\n/**\n * Provides the VisuallyHidden state.\n */\nexport const provideVisuallyHiddenState = createStateProvider(NgpVisuallyHiddenStateToken);\n\n/**\n * Injects the VisuallyHidden state.\n */\nexport const injectVisuallyHiddenState = createStateInjector<NgpVisuallyHidden>(\n NgpVisuallyHiddenStateToken,\n);\n\n/**\n * The VisuallyHidden state registration function.\n */\nexport const visuallyHiddenState = createState(NgpVisuallyHiddenStateToken);\n","import { Directive, computed, signal } from '@angular/core';\nimport { provideVisuallyHiddenState, visuallyHiddenState } from './visually-hidden-state';\n\n/**\n * Hide an element visually while keeping it present in the DOM.\n */\n@Directive({\n selector: '[ngpVisuallyHidden]',\n exportAs: 'ngpVisuallyHidden',\n providers: [provideVisuallyHiddenState()],\n host: {\n '[style]': 'style()',\n },\n})\nexport class NgpVisuallyHidden {\n /**\n * Whether the element is hidden.\n */\n protected readonly hidden = signal<boolean>(true);\n\n protected readonly style = computed(() => {\n if (!this.hidden()) {\n return {};\n }\n\n return {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n padding: '0',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n wordWrap: 'normal',\n outline: '0',\n '-webkit-appearance': 'none',\n '-moz-appearance': 'none',\n 'inset-inline-start': '0',\n };\n });\n\n protected readonly state = visuallyHiddenState<NgpVisuallyHidden>(this);\n\n /**\n * Set the element visibility.\n * @param visible\n */\n setVisibility(visible: boolean): void {\n this.hidden.set(!visible);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-accordion.mjs","sources":["../../../../packages/ng-primitives/accordion/src/accordion-item/accordion-item-state.ts","../../../../packages/ng-primitives/accordion/src/accordion/accordion-state.ts","../../../../packages/ng-primitives/accordion/src/accordion-content/accordion-content.ts","../../../../packages/ng-primitives/accordion/src/accordion-item/accordion-item.ts","../../../../packages/ng-primitives/accordion/src/accordion-trigger/accordion-trigger.ts","../../../../packages/ng-primitives/accordion/src/config/accordion-config.ts","../../../../packages/ng-primitives/accordion/src/accordion/accordion.ts","../../../../packages/ng-primitives/accordion/src/ng-primitives-accordion.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpAccordionItem } from './accordion-item';\n\n/**\n * The state token for the AccordionItem primitive.\n */\nexport const NgpAccordionItemStateToken =\n createStateToken<NgpAccordionItem<unknown>>('AccordionItem');\n\n/**\n * Provides the AccordionItem state.\n */\nexport const provideAccordionItemState = createStateProvider(NgpAccordionItemStateToken);\n\n/**\n * Injects the AccordionItem state.\n */\nexport const injectAccordionItemState = createStateInjector<NgpAccordionItem<unknown>>(\n NgpAccordionItemStateToken,\n);\n\n/**\n * The AccordionItem state registration function.\n */\nexport const accordionItemState = createState(NgpAccordionItemStateToken);\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpAccordion } from './accordion';\n\n/**\n * The state token for the Accordion primitive.\n */\nexport const NgpAccordionStateToken = createStateToken<NgpAccordion<unknown>>('Accordion');\n\n/**\n * Provides the Accordion state.\n */\nexport const provideAccordionState = createStateProvider(NgpAccordionStateToken);\n\n/**\n * Injects the Accordion state.\n */\nexport const injectAccordionState =\n createStateInjector<NgpAccordion<unknown>>(NgpAccordionStateToken);\n\n/**\n * The Accordion state registration function.\n */\nexport const accordionState = createState(NgpAccordionStateToken);\n","import { afterRenderEffect, Directive, input, signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectAccordionItemState } from '../accordion-item/accordion-item-state';\nimport type { NgpAccordion } from '../accordion/accordion';\nimport { injectAccordionState } from '../accordion/accordion-state';\n\n/**\n * Apply the `ngpAccordionContent` directive to an element that represents the content of an accordion item.\n */\n@Directive({\n selector: '[ngpAccordionContent]',\n exportAs: 'ngpAccordionContent',\n host: {\n role: 'region',\n '[id]': 'id()',\n '[attr.data-orientation]': 'accordion().orientation()',\n '[attr.data-open]': 'accordionItem().open() ? \"\" : null',\n '[attr.data-closed]': 'accordionItem().open() ? null : \"\"',\n '[attr.aria-labelledby]': 'accordionItem().triggerId()',\n '[style.--ngp-accordion-content-width.px]': 'width()',\n '[style.--ngp-accordion-content-height.px]': 'height()',\n },\n})\nexport class NgpAccordionContent<T> {\n /**\n * Access the accordion content element reference\n */\n private readonly elementRef = injectElementRef();\n\n /**\n * Access the accordion\n */\n protected readonly accordion = injectAccordionState<NgpAccordion<T>>();\n\n /**\n * Access the accordion item\n */\n protected readonly accordionItem = injectAccordionItemState();\n\n /**\n * The id of the content region\n */\n readonly id = input<string>(uniqueId('ngp-accordion-content'));\n\n /**\n * The content width\n */\n readonly width = signal<number>(0);\n\n /**\n * The content height\n */\n readonly height = signal<number>(0);\n\n constructor() {\n this.accordionItem().content.set(this);\n\n afterRenderEffect(() => {\n if (this.accordionItem().open()) {\n this.width.set(this.elementRef.nativeElement.scrollWidth);\n this.height.set(this.elementRef.nativeElement.scrollHeight);\n }\n });\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, OnInit, booleanAttribute, computed, input, signal } from '@angular/core';\nimport { NgpAccordionContent } from '../accordion-content/accordion-content';\nimport { NgpAccordionTrigger } from '../accordion-trigger/accordion-trigger';\nimport { NgpAccordion } from '../accordion/accordion';\nimport { injectAccordionState } from '../accordion/accordion-state';\nimport { accordionItemState, provideAccordionItemState } from './accordion-item-state';\n\n/**\n * Apply the `ngpAccordionItem` directive to an element that represents an accordion item.\n */\n@Directive({\n selector: '[ngpAccordionItem]',\n exportAs: 'ngpAccordionItem',\n providers: [provideAccordionItemState()],\n host: {\n '[attr.data-orientation]': 'accordion().orientation()',\n '[attr.data-open]': 'state.open() ? \"\" : null',\n '[attr.data-disabled]': 'state.disabled() || accordion().disabled() ? \"\" : null',\n },\n})\nexport class NgpAccordionItem<T> implements OnInit {\n /**\n * Access the accordion.\n */\n protected readonly accordion = injectAccordionState<NgpAccordion<T>>();\n\n /**\n * The value of the accordion item.\n */\n readonly value = input<T>(undefined, {\n alias: 'ngpAccordionItemValue',\n });\n\n /**\n * Whether the accordion item is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpAccordionItemDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Access the accordion trigger\n * @internal\n */\n readonly trigger = signal<NgpAccordionTrigger<T> | undefined>(undefined);\n\n /**\n * Access the accordion content\n * @internal\n */\n readonly content = signal<NgpAccordionContent<T> | undefined>(undefined);\n\n /**\n * Whether the accordion item is expanded.\n */\n readonly open = computed<boolean>(() => this.accordion().isOpen(this.state.value()!));\n\n /**\n * The trigger id.\n */\n readonly triggerId = computed(() => this.trigger()?.id());\n\n /**\n * The content id.\n */\n readonly contentId = computed(() => this.content()?.id());\n\n /**\n * The accordion item state.\n */\n private readonly state = accordionItemState<NgpAccordionItem<T>>(this);\n\n ngOnInit(): void {\n if (!this.state.value()) {\n throw new Error('The accordion item value is required');\n }\n }\n}\n","import { Directive, HOST_TAG_NAME, HostListener, inject, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { NgpAccordionItem } from '../accordion-item/accordion-item';\nimport { injectAccordionItemState } from '../accordion-item/accordion-item-state';\nimport { NgpAccordion } from '../accordion/accordion';\nimport { injectAccordionState } from '../accordion/accordion-state';\n\n/**\n * Apply the `ngpAccordionTrigger` directive to an element that represents the trigger for an accordion item, such as a button.\n */\n@Directive({\n selector: '[ngpAccordionTrigger]',\n exportAs: 'ngpAccordionTrigger',\n host: {\n '[id]': 'id()',\n '[attr.type]': 'tagName === \"button\" ? \"button\" : null',\n '[attr.data-orientation]': 'accordion().orientation()',\n '[attr.data-open]': 'accordionItem().open() ? \"\" : null',\n '[attr.data-disabled]': 'accordionItem().disabled() || accordion().disabled() ? \"\" : null',\n '[attr.aria-controls]': 'accordionItem().contentId()',\n '[attr.aria-expanded]': 'accordionItem().open()',\n },\n})\nexport class NgpAccordionTrigger<T> {\n /**\n * The tag name of the element.\n */\n protected readonly tagName = inject(HOST_TAG_NAME);\n\n /**\n * Access the parent accordion.\n */\n protected readonly accordion = injectAccordionState<NgpAccordion<T>>();\n\n /**\n * The item instance.\n */\n protected readonly accordionItem = injectAccordionItemState<NgpAccordionItem<T>>();\n\n /**\n * The id of the trigger.\n */\n readonly id = input<string>(uniqueId('ngp-accordion-trigger'));\n\n constructor() {\n this.accordionItem().trigger.set(this);\n }\n\n /**\n * Toggle the accordion item.\n */\n @HostListener('click')\n toggle(): void {\n if (this.accordionItem().disabled() || this.accordion().disabled()) {\n return;\n }\n\n this.accordion().toggle(this.accordionItem().value()!);\n }\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\nimport { NgpAccordionType } from '../accordion/accordion';\n\nexport interface NgpAccordionConfig {\n /**\n * The default type of the accordion\n * @default 'single'\n */\n type: NgpAccordionType;\n /**\n * Whether the accordion is collapsible\n * @default false\n */\n collapsible: boolean;\n /**\n * The default orientation of the accordion\n * @default 'vertical'\n */\n orientation: 'vertical' | 'horizontal';\n}\n\nexport const defaultAccordionConfig: NgpAccordionConfig = {\n type: 'single',\n collapsible: false,\n orientation: 'vertical',\n};\n\nexport const NgpAccordionConfigToken = new InjectionToken<NgpAccordionConfig>(\n 'NgpAccordionConfigToken',\n);\n\n/**\n * Provide the default Accordion configuration\n * @param config The Accordion configuration\n * @returns The provider\n */\nexport function provideAccordionConfig(config: Partial<NgpAccordionConfig>): Provider[] {\n return [\n {\n provide: NgpAccordionConfigToken,\n useValue: { ...defaultAccordionConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Accordion configuration\n * @returns The global Accordion configuration\n */\nexport function injectAccordionConfig(): NgpAccordionConfig {\n return inject(NgpAccordionConfigToken, { optional: true }) ?? defaultAccordionConfig;\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, output } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { injectAccordionConfig } from '../config/accordion-config';\nimport { accordionState, provideAccordionState } from './accordion-state';\n\n/**\n * Apply the `ngpAccordion` directive to an element that represents the group of accordion items.\n */\n@Directive({\n selector: '[ngpAccordion]',\n exportAs: 'ngpAccordion',\n providers: [provideAccordionState()],\n host: {\n '[attr.data-orientation]': 'state.orientation()',\n '[attr.data-disabled]': 'state.disabled() ? \"\" : null',\n },\n})\nexport class NgpAccordion<T> {\n /**\n * Access the global accordion configuration.\n */\n private readonly config = injectAccordionConfig();\n\n /**\n * The type of the accordion.\n */\n readonly type = input<NgpAccordionType>(this.config.type, {\n alias: 'ngpAccordionType',\n });\n\n /**\n * Whether the accordion is collapsible.\n */\n readonly collapsible = input<boolean, BooleanInput>(this.config.collapsible, {\n alias: 'ngpAccordionCollapsible',\n transform: booleanAttribute,\n });\n\n /**\n * The value of the accordion.\n */\n readonly value = input<T | T[] | null>(null, {\n alias: 'ngpAccordionValue',\n });\n\n /**\n * Event emitted when the accordion value changes.\n */\n readonly valueChange = output<T | T[] | null>({\n alias: 'ngpAccordionValueChange',\n });\n\n /**\n * Whether the accordion is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpAccordionDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The accordion orientation.\n */\n readonly orientation = input<NgpOrientation>(this.config.orientation, {\n alias: 'ngpAccordionOrientation',\n });\n\n /**\n * The accordion state.\n */\n private readonly state = accordionState<NgpAccordion<T>>(this);\n\n /**\n * @param value The value to check.\n * @returns Whether the value is open.\n * @internal\n */\n isOpen(value: T): boolean {\n if (this.state.type() === 'multiple') {\n return (this.state.value() as T[] | null)?.includes(value) ?? false;\n }\n\n return this.state.value() === value;\n }\n\n toggle(value: T): void {\n const isOpen = this.isOpen(value);\n\n // if we are in single mode and the value is already open and the accordion is not collapsible, do nothing\n if (this.state.type() === 'single' && isOpen && !this.state.collapsible()) {\n return;\n }\n\n // if we are in single mode then toggle the value\n if (this.state.type() === 'single') {\n const newValue = isOpen ? null : value;\n this.state.value.set(newValue);\n this.valueChange.emit(newValue);\n return;\n }\n\n // if we are in multiple mode then toggle the value\n let values = (this.state.value() as T[]) ?? [];\n\n if (isOpen) {\n values = values.filter(v => v !== value);\n } else {\n values = [...values, value];\n }\n this.state.value.set(values);\n this.valueChange.emit(values);\n }\n}\n\nexport type NgpAccordionType = 'single' | 'multiple';\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-accordion.mjs","sources":["../../../../packages/ng-primitives/accordion/src/accordion-item/accordion-item-state.ts","../../../../packages/ng-primitives/accordion/src/accordion/accordion-state.ts","../../../../packages/ng-primitives/accordion/src/accordion-content/accordion-content.ts","../../../../packages/ng-primitives/accordion/src/accordion-item/accordion-item.ts","../../../../packages/ng-primitives/accordion/src/accordion-trigger/accordion-trigger.ts","../../../../packages/ng-primitives/accordion/src/config/accordion-config.ts","../../../../packages/ng-primitives/accordion/src/accordion/accordion.ts","../../../../packages/ng-primitives/accordion/src/ng-primitives-accordion.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpAccordionItem } from './accordion-item';\n\n/**\n * The state token for the AccordionItem primitive.\n */\nexport const NgpAccordionItemStateToken =\n createStateToken<NgpAccordionItem<unknown>>('AccordionItem');\n\n/**\n * Provides the AccordionItem state.\n */\nexport const provideAccordionItemState = createStateProvider(NgpAccordionItemStateToken);\n\n/**\n * Injects the AccordionItem state.\n */\nexport const injectAccordionItemState = createStateInjector<NgpAccordionItem<unknown>>(\n NgpAccordionItemStateToken,\n);\n\n/**\n * The AccordionItem state registration function.\n */\nexport const accordionItemState = createState(NgpAccordionItemStateToken);\n","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpAccordion } from './accordion';\n\n/**\n * The state token for the Accordion primitive.\n */\nexport const NgpAccordionStateToken = createStateToken<NgpAccordion<unknown>>('Accordion');\n\n/**\n * Provides the Accordion state.\n */\nexport const provideAccordionState = createStateProvider(NgpAccordionStateToken);\n\n/**\n * Injects the Accordion state.\n */\nexport const injectAccordionState =\n createStateInjector<NgpAccordion<unknown>>(NgpAccordionStateToken);\n\n/**\n * The Accordion state registration function.\n */\nexport const accordionState = createState(NgpAccordionStateToken);\n","import { afterRenderEffect, Directive, input, signal } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { injectAccordionItemState } from '../accordion-item/accordion-item-state';\nimport type { NgpAccordion } from '../accordion/accordion';\nimport { injectAccordionState } from '../accordion/accordion-state';\n\n/**\n * Apply the `ngpAccordionContent` directive to an element that represents the content of an accordion item.\n */\n@Directive({\n selector: '[ngpAccordionContent]',\n exportAs: 'ngpAccordionContent',\n host: {\n role: 'region',\n '[id]': 'id()',\n '[attr.data-orientation]': 'accordion().orientation()',\n '[attr.data-open]': 'accordionItem().open() ? \"\" : null',\n '[attr.data-closed]': 'accordionItem().open() ? null : \"\"',\n '[attr.aria-labelledby]': 'accordionItem().triggerId()',\n '[style.--ngp-accordion-content-width.px]': 'width()',\n '[style.--ngp-accordion-content-height.px]': 'height()',\n },\n})\nexport class NgpAccordionContent<T> {\n /**\n * Access the accordion content element reference\n */\n private readonly elementRef = injectElementRef();\n\n /**\n * Access the accordion\n */\n protected readonly accordion = injectAccordionState<NgpAccordion<T>>();\n\n /**\n * Access the accordion item\n */\n protected readonly accordionItem = injectAccordionItemState();\n\n /**\n * The id of the content region\n */\n readonly id = input<string>(uniqueId('ngp-accordion-content'));\n\n /**\n * The content width\n */\n readonly width = signal<number>(0);\n\n /**\n * The content height\n */\n readonly height = signal<number>(0);\n\n constructor() {\n this.accordionItem().content.set(this);\n\n afterRenderEffect(() => {\n if (this.accordionItem().open()) {\n this.width.set(this.elementRef.nativeElement.scrollWidth);\n this.height.set(this.elementRef.nativeElement.scrollHeight);\n }\n });\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, OnInit, booleanAttribute, computed, input, signal } from '@angular/core';\nimport { NgpAccordionContent } from '../accordion-content/accordion-content';\nimport { NgpAccordionTrigger } from '../accordion-trigger/accordion-trigger';\nimport { NgpAccordion } from '../accordion/accordion';\nimport { injectAccordionState } from '../accordion/accordion-state';\nimport { accordionItemState, provideAccordionItemState } from './accordion-item-state';\n\n/**\n * Apply the `ngpAccordionItem` directive to an element that represents an accordion item.\n */\n@Directive({\n selector: '[ngpAccordionItem]',\n exportAs: 'ngpAccordionItem',\n providers: [provideAccordionItemState()],\n host: {\n '[attr.data-orientation]': 'accordion().orientation()',\n '[attr.data-open]': 'state.open() ? \"\" : null',\n '[attr.data-disabled]': 'state.disabled() || accordion().disabled() ? \"\" : null',\n },\n})\nexport class NgpAccordionItem<T> implements OnInit {\n /**\n * Access the accordion.\n */\n protected readonly accordion = injectAccordionState<NgpAccordion<T>>();\n\n /**\n * The value of the accordion item.\n */\n readonly value = input<T>(undefined, {\n alias: 'ngpAccordionItemValue',\n });\n\n /**\n * Whether the accordion item is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpAccordionItemDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * Access the accordion trigger\n * @internal\n */\n readonly trigger = signal<NgpAccordionTrigger<T> | undefined>(undefined);\n\n /**\n * Access the accordion content\n * @internal\n */\n readonly content = signal<NgpAccordionContent<T> | undefined>(undefined);\n\n /**\n * Whether the accordion item is expanded.\n */\n readonly open = computed<boolean>(() => this.accordion().isOpen(this.state.value()!));\n\n /**\n * The trigger id.\n */\n readonly triggerId = computed(() => this.trigger()?.id());\n\n /**\n * The content id.\n */\n readonly contentId = computed(() => this.content()?.id());\n\n /**\n * The accordion item state.\n */\n private readonly state = accordionItemState<NgpAccordionItem<T>>(this);\n\n ngOnInit(): void {\n if (!this.state.value()) {\n throw new Error('The accordion item value is required');\n }\n }\n}\n","import { Directive, HOST_TAG_NAME, HostListener, inject, input } from '@angular/core';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { NgpAccordionItem } from '../accordion-item/accordion-item';\nimport { injectAccordionItemState } from '../accordion-item/accordion-item-state';\nimport { NgpAccordion } from '../accordion/accordion';\nimport { injectAccordionState } from '../accordion/accordion-state';\n\n/**\n * Apply the `ngpAccordionTrigger` directive to an element that represents the trigger for an accordion item, such as a button.\n */\n@Directive({\n selector: '[ngpAccordionTrigger]',\n exportAs: 'ngpAccordionTrigger',\n host: {\n '[id]': 'id()',\n '[attr.type]': 'tagName === \"button\" ? \"button\" : null',\n '[attr.data-orientation]': 'accordion().orientation()',\n '[attr.data-open]': 'accordionItem().open() ? \"\" : null',\n '[attr.data-disabled]': 'accordionItem().disabled() || accordion().disabled() ? \"\" : null',\n '[attr.aria-controls]': 'accordionItem().contentId()',\n '[attr.aria-expanded]': 'accordionItem().open()',\n },\n})\nexport class NgpAccordionTrigger<T> {\n /**\n * The tag name of the element.\n */\n protected readonly tagName = inject(HOST_TAG_NAME);\n\n /**\n * Access the parent accordion.\n */\n protected readonly accordion = injectAccordionState<NgpAccordion<T>>();\n\n /**\n * The item instance.\n */\n protected readonly accordionItem = injectAccordionItemState<NgpAccordionItem<T>>();\n\n /**\n * The id of the trigger.\n */\n readonly id = input<string>(uniqueId('ngp-accordion-trigger'));\n\n constructor() {\n this.accordionItem().trigger.set(this);\n }\n\n /**\n * Toggle the accordion item.\n */\n @HostListener('click')\n toggle(): void {\n if (this.accordionItem().disabled() || this.accordion().disabled()) {\n return;\n }\n\n this.accordion().toggle(this.accordionItem().value()!);\n }\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\nimport { NgpAccordionType } from '../accordion/accordion';\n\nexport interface NgpAccordionConfig {\n /**\n * The default type of the accordion\n * @default 'single'\n */\n type: NgpAccordionType;\n /**\n * Whether the accordion is collapsible\n * @default false\n */\n collapsible: boolean;\n /**\n * The default orientation of the accordion\n * @default 'vertical'\n */\n orientation: 'vertical' | 'horizontal';\n}\n\nexport const defaultAccordionConfig: NgpAccordionConfig = {\n type: 'single',\n collapsible: false,\n orientation: 'vertical',\n};\n\nexport const NgpAccordionConfigToken = new InjectionToken<NgpAccordionConfig>(\n 'NgpAccordionConfigToken',\n);\n\n/**\n * Provide the default Accordion configuration\n * @param config The Accordion configuration\n * @returns The provider\n */\nexport function provideAccordionConfig(config: Partial<NgpAccordionConfig>): Provider[] {\n return [\n {\n provide: NgpAccordionConfigToken,\n useValue: { ...defaultAccordionConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the Accordion configuration\n * @returns The global Accordion configuration\n */\nexport function injectAccordionConfig(): NgpAccordionConfig {\n return inject(NgpAccordionConfigToken, { optional: true }) ?? defaultAccordionConfig;\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, output } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { injectAccordionConfig } from '../config/accordion-config';\nimport { accordionState, provideAccordionState } from './accordion-state';\n\n/**\n * Apply the `ngpAccordion` directive to an element that represents the group of accordion items.\n */\n@Directive({\n selector: '[ngpAccordion]',\n exportAs: 'ngpAccordion',\n providers: [provideAccordionState()],\n host: {\n '[attr.data-orientation]': 'state.orientation()',\n '[attr.data-disabled]': 'state.disabled() ? \"\" : null',\n },\n})\nexport class NgpAccordion<T> {\n /**\n * Access the global accordion configuration.\n */\n private readonly config = injectAccordionConfig();\n\n /**\n * The type of the accordion.\n */\n readonly type = input<NgpAccordionType>(this.config.type, {\n alias: 'ngpAccordionType',\n });\n\n /**\n * Whether the accordion is collapsible.\n */\n readonly collapsible = input<boolean, BooleanInput>(this.config.collapsible, {\n alias: 'ngpAccordionCollapsible',\n transform: booleanAttribute,\n });\n\n /**\n * The value of the accordion.\n */\n readonly value = input<T | T[] | null>(null, {\n alias: 'ngpAccordionValue',\n });\n\n /**\n * Event emitted when the accordion value changes.\n */\n readonly valueChange = output<T | T[] | null>({\n alias: 'ngpAccordionValueChange',\n });\n\n /**\n * Whether the accordion is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpAccordionDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The accordion orientation.\n */\n readonly orientation = input<NgpOrientation>(this.config.orientation, {\n alias: 'ngpAccordionOrientation',\n });\n\n /**\n * The accordion state.\n */\n private readonly state = accordionState<NgpAccordion<T>>(this);\n\n /**\n * @param value The value to check.\n * @returns Whether the value is open.\n * @internal\n */\n isOpen(value: T): boolean {\n if (this.state.type() === 'multiple') {\n return (this.state.value() as T[] | null)?.includes(value) ?? false;\n }\n\n return this.state.value() === value;\n }\n\n toggle(value: T): void {\n const isOpen = this.isOpen(value);\n\n // if we are in single mode and the value is already open and the accordion is not collapsible, do nothing\n if (this.state.type() === 'single' && isOpen && !this.state.collapsible()) {\n return;\n }\n\n // if we are in single mode then toggle the value\n if (this.state.type() === 'single') {\n const newValue = isOpen ? null : value;\n this.state.value.set(newValue);\n this.valueChange.emit(newValue);\n return;\n }\n\n // if we are in multiple mode then toggle the value\n let values = (this.state.value() as T[]) ?? [];\n\n if (isOpen) {\n values = values.filter(v => v !== value);\n } else {\n values = [...values, value];\n }\n this.state.value.set(values);\n this.valueChange.emit(values);\n }\n}\n\nexport type NgpAccordionType = 'single' | 'multiple';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-autofill.mjs","sources":["../../../../packages/ng-primitives/autofill/src/autofill/autofill.ts","../../../../packages/ng-primitives/autofill/src/ng-primitives-autofill.ts"],"sourcesContent":["import { Directive, HostListener, output, signal } from '@angular/core';\nimport { injectStyleInjector } from 'ng-primitives/internal';\n\n@Directive({\n selector: '[ngpAutofill]',\n exportAs: 'ngpAutofill',\n host: {\n '[attr.data-autofill]': 'autofilled() ? \"\" : null',\n },\n})\nexport class NgpAutofill {\n /**\n * Access the style injector.\n */\n private readonly styleInjector = injectStyleInjector();\n\n /**\n * Store the autofill state.\n */\n protected readonly autofilled = signal(false);\n\n /**\n * Emit when the autofill state changes.\n */\n readonly autofillChange = output<boolean>({\n alias: 'ngpAutofill',\n });\n\n constructor() {\n // This technique is based on that used by the Angular CDK\n // https://github.com/angular/components/blob/main/src/cdk/text-field/_index.scss\n this.styleInjector.add(\n 'ngp-autofill',\n `\n @keyframes ngp-autofill-start { }\n @keyframes ngp-autofill-end {}\n\n [data-autofill]:-webkit-autofill {\n animation: ngp-autofill-start 0s 1ms;\n }\n\n [data-autofill]:not(:-webkit-autofill) {\n animation: ngp-autofill-end 0s 1ms;\n }\n `,\n );\n }\n\n @HostListener('animationstart', ['$event'])\n protected onAnimationStart(event: AnimationEvent): void {\n if (event.animationName === 'ngp-autofill-start') {\n this.autofilled.set(true);\n this.autofillChange.emit(true);\n }\n\n if (event.animationName === 'ngp-autofill-end') {\n this.autofilled.set(false);\n this.autofillChange.emit(false);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAUa,WAAW,CAAA;AAkBtB,IAAA,WAAA,GAAA;AAjBA;;AAEG;QACc,IAAa,CAAA,aAAA,GAAG,mBAAmB,EAAE;AAEtD;;AAEG;AACgB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAE7C;;AAEG;QACM,IAAc,CAAA,cAAA,GAAG,MAAM,CAAU;AACxC,YAAA,KAAK,EAAE,aAAa;AACrB,SAAA,CAAC;;;AAKA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,cAAc,EACd;;;;;;;;;;;AAWC,MAAA,CAAA,CACF;;AAIO,IAAA,gBAAgB,CAAC,KAAqB,EAAA;AAC9C,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,oBAAoB,EAAE;AAChD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGhC,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,kBAAkB,EAAE;AAC9C,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;;;+GA/CxB,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAPvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,IAAI,EAAE;AACJ,wBAAA,sBAAsB,EAAE,0BAA0B;AACnD,qBAAA;AACF,iBAAA;wDAwCW,gBAAgB,EAAA,CAAA;sBADzB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AChD5C;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-primitives-autofill.mjs","sources":["../../../../packages/ng-primitives/autofill/src/autofill/autofill.ts","../../../../packages/ng-primitives/autofill/src/ng-primitives-autofill.ts"],"sourcesContent":["import { Directive, HostListener, output, signal } from '@angular/core';\nimport { injectStyleInjector } from 'ng-primitives/internal';\n\n@Directive({\n selector: '[ngpAutofill]',\n exportAs: 'ngpAutofill',\n host: {\n '[attr.data-autofill]': 'autofilled() ? \"\" : null',\n },\n})\nexport class NgpAutofill {\n /**\n * Access the style injector.\n */\n private readonly styleInjector = injectStyleInjector();\n\n /**\n * Store the autofill state.\n */\n protected readonly autofilled = signal(false);\n\n /**\n * Emit when the autofill state changes.\n */\n readonly autofillChange = output<boolean>({\n alias: 'ngpAutofill',\n });\n\n constructor() {\n // This technique is based on that used by the Angular CDK\n // https://github.com/angular/components/blob/main/src/cdk/text-field/_index.scss\n this.styleInjector.add(\n 'ngp-autofill',\n `\n @keyframes ngp-autofill-start { }\n @keyframes ngp-autofill-end {}\n\n [data-autofill]:-webkit-autofill {\n animation: ngp-autofill-start 0s 1ms;\n }\n\n [data-autofill]:not(:-webkit-autofill) {\n animation: ngp-autofill-end 0s 1ms;\n }\n `,\n );\n }\n\n @HostListener('animationstart', ['$event'])\n protected onAnimationStart(event: AnimationEvent): void {\n if (event.animationName === 'ngp-autofill-start') {\n this.autofilled.set(true);\n this.autofillChange.emit(true);\n }\n\n if (event.animationName === 'ngp-autofill-end') {\n this.autofilled.set(false);\n this.autofillChange.emit(false);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAUa,WAAW,CAAA;AAkBtB,IAAA,WAAA,GAAA;AAjBA;;AAEG;QACc,IAAA,CAAA,aAAa,GAAG,mBAAmB,EAAE;AAEtD;;AAEG;AACgB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAE7C;;AAEG;QACM,IAAA,CAAA,cAAc,GAAG,MAAM,CAAU;AACxC,YAAA,KAAK,EAAE,aAAa;AACrB,SAAA,CAAC;;;AAKA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,cAAc,EACd;;;;;;;;;;;AAWC,MAAA,CAAA,CACF;IACH;AAGU,IAAA,gBAAgB,CAAC,KAAqB,EAAA;AAC9C,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,oBAAoB,EAAE;AAChD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC;AAEA,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,kBAAkB,EAAE;AAC9C,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC;IACF;+GAjDW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAPvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,IAAI,EAAE;AACJ,wBAAA,sBAAsB,EAAE,0BAA0B;AACnD,qBAAA;AACF,iBAAA;wDAwCW,gBAAgB,EAAA,CAAA;sBADzB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AChD5C;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-avatar.mjs","sources":["../../../../packages/ng-primitives/avatar/src/avatar/avatar-state.ts","../../../../packages/ng-primitives/avatar/src/avatar/avatar.ts","../../../../packages/ng-primitives/avatar/src/config/avatar-config.ts","../../../../packages/ng-primitives/avatar/src/avatar-fallback/avatar-fallback.ts","../../../../packages/ng-primitives/avatar/src/avatar-image/avatar-image.ts","../../../../packages/ng-primitives/avatar/src/ng-primitives-avatar.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpAvatar } from './avatar';\n\n/**\n * The state token for the Avatar primitive.\n */\nexport const NgpAvatarStateToken = createStateToken<NgpAvatar>('Avatar');\n\n/**\n * Provides the Avatar state.\n */\nexport const provideAvatarState = createStateProvider(NgpAvatarStateToken);\n\n/**\n * Injects the Avatar state.\n */\nexport const injectAvatarState = createStateInjector<NgpAvatar>(NgpAvatarStateToken);\n\n/**\n * The Avatar state registration function.\n */\nexport const avatarState = createState(NgpAvatarStateToken);\n","import { Directive, signal } from '@angular/core';\nimport { NgpFocusVisible, NgpHover, NgpPress } from 'ng-primitives/interactions';\nimport { avatarState, provideAvatarState } from './avatar-state';\n\n/**\n * Apply the `ngpAvatar` directive to an element that represents the avatar. This directive is a container for the image and/or fallback.\n */\n@Directive({\n selector: '[ngpAvatar]',\n exportAs: 'ngpAvatar',\n providers: [provideAvatarState()],\n host: {\n '[attr.data-status]': 'status()',\n },\n hostDirectives: [NgpHover, NgpFocusVisible, NgpPress],\n})\nexport class NgpAvatar {\n /**\n * Store the current status of the avatar.\n * @internal\n */\n readonly status = signal(NgpAvatarStatus.Idle);\n\n /**\n * The avatar state.\n */\n protected readonly state = avatarState<NgpAvatar>(this);\n\n /**\n * Set the avatar status.\n * @param status The status to set.\n * @internal\n */\n setStatus(status: NgpAvatarStatus): void {\n this.status.set(status);\n }\n}\n\nexport enum NgpAvatarStatus {\n Idle = 'idle',\n Loading = 'loading',\n Loaded = 'loaded',\n Error = 'error',\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\n\nexport interface NgpAvatarConfig {\n /**\n * Define a delay before the fallback is shown. This is useful to only show the fallback for those with slower connections.\n * @default 0\n */\n delay: number;\n}\n\nexport const defaultAvatarConfig: NgpAvatarConfig = {\n delay: 0,\n};\n\nexport const NgpAvatarConfigToken = new InjectionToken<NgpAvatarConfig>('NgpAvatarConfigToken');\n\n/**\n * Provide the avatar config\n * @param config The avatar config\n * @returns The provider\n */\nexport function provideAvatarConfig(config: Partial<NgpAvatarConfig>): Provider[] {\n return [\n {\n provide: NgpAvatarConfigToken,\n useValue: { ...defaultAvatarConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the avatar config\n * @returns The global avatar config\n */\nexport function injectAvatarConfig(): NgpAvatarConfig {\n return inject(NgpAvatarConfigToken, { optional: true }) ?? defaultAvatarConfig;\n}\n","import { NumberInput } from '@angular/cdk/coercion';\nimport { computed, Directive, input, numberAttribute, OnInit, signal } from '@angular/core';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { NgpAvatarStatus } from '../avatar/avatar';\nimport { injectAvatarState } from '../avatar/avatar-state';\nimport { injectAvatarConfig } from '../config/avatar-config';\n\n/**\n * Apply the `ngpAvatarFallback` directive to an element that represents the user in the absence of an image. This is typically the user's initials.\n */\n@Directive({\n selector: '[ngpAvatarFallback]',\n exportAs: 'ngpAvatarFallback',\n host: {\n '[style.display]': 'visible() ? null : \"none\"',\n },\n})\nexport class NgpAvatarFallback implements OnInit {\n /**\n * Access the avatar\n */\n private readonly avatar = injectAvatarState();\n\n /**\n * Access the global configuration.\n */\n private readonly config = injectAvatarConfig();\n\n /**\n * Access the disposable utilities.\n */\n private readonly disposables = injectDisposables();\n\n /**\n * Define a delay before the fallback is shown. This is useful to only show the fallback for those with slower connections.\n * @default 0\n */\n readonly delay = input<number, NumberInput>(this.config.delay, {\n alias: 'ngpAvatarFallbackDelay',\n transform: numberAttribute,\n });\n\n /**\n * Determine if this element should be hidden.\n * @returns True if the element should be visible\n */\n protected readonly visible = computed(\n () =>\n // we need to check if the element can render and if the avatar is not in a loaded state\n this.delayElapsed() && this.avatar().status() !== NgpAvatarStatus.Loaded,\n );\n\n /**\n * Determine the delay has elapsed, and we can show the fallback.\n */\n private delayElapsed = signal(false);\n\n ngOnInit(): void {\n this.disposables.setTimeout(() => this.delayElapsed.set(true), this.delay());\n }\n}\n","import { Directive, ElementRef, HostListener, inject, OnInit } from '@angular/core';\nimport { injectVisuallyHiddenState, NgpVisuallyHidden } from 'ng-primitives/a11y';\nimport { NgpAvatarStatus } from '../avatar/avatar';\nimport { injectAvatarState } from '../avatar/avatar-state';\n\n/**\n * Apply the `ngpAvatarImage` directive to an element that represents the avatar image. This would typically be an `img` element or a `div` with a background image.\n */\n@Directive({\n selector: 'img[ngpAvatarImage]',\n exportAs: 'ngpAvatarImage',\n hostDirectives: [NgpVisuallyHidden],\n})\nexport class NgpAvatarImage implements OnInit {\n /**\n * Control the visibility of the image.\n */\n protected readonly visuallyHidden = injectVisuallyHiddenState();\n\n /**\n * Access the avatar\n */\n private readonly avatar = injectAvatarState();\n\n /**\n * Access the image element ref.\n */\n private readonly elementRef = inject<ElementRef<HTMLImageElement>>(ElementRef);\n\n ngOnInit(): void {\n // mark the avatar as loading\n this.setState(NgpAvatarStatus.Loading);\n\n // if there is no src, we can report this as an error\n if (!this.elementRef.nativeElement.src) {\n this.setState(NgpAvatarStatus.Error);\n }\n\n // if the image has already loaded, we can report this to the avatar\n if (this.elementRef.nativeElement.complete) {\n this.setState(NgpAvatarStatus.Loaded);\n }\n }\n\n @HostListener('load')\n protected onLoad(): void {\n this.setState(NgpAvatarStatus.Loaded);\n }\n\n @HostListener('error')\n protected onError(): void {\n this.setState(NgpAvatarStatus.Error);\n }\n\n private setState(state: NgpAvatarStatus) {\n this.avatar().setStatus(state);\n\n // if the state is loaded then we should make the image visible\n this.visuallyHidden().setVisibility(state === NgpAvatarStatus.Loaded);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":";;;;;;;;;AAQA;;AAEG;AACI,MAAM,mBAAmB,GAAG,gBAAgB,CAAY,QAAQ,CAAC;AAExE;;AAEG;MACU,kBAAkB,GAAG,mBAAmB,CAAC,mBAAmB;AAEzE;;AAEG;MACU,iBAAiB,GAAG,mBAAmB,CAAY,mBAAmB;AAEnF;;AAEG;AACI,MAAM,WAAW,GAAG,WAAW,CAAC,mBAAmB,CAAC;;ACtB3D;;AAEG;MAUU,SAAS,CAAA;AATtB,IAAA,WAAA,GAAA;AAUE;;;AAGG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;AAE9C;;AAEG;AACgB,QAAA,IAAA,CAAA,KAAK,GAAG,WAAW,CAAY,IAAI,CAAC;AAUxD;AARC;;;;AAIG;AACH,IAAA,SAAS,CAAC,MAAuB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;;+GAlBd,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAT,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,SAAS,EANT,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAC,kBAAkB,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAMtB,SAAS,EAAA,UAAA,EAAA,CAAA;kBATrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,SAAS,EAAE,CAAC,kBAAkB,EAAE,CAAC;AACjC,oBAAA,IAAI,EAAE;AACJ,wBAAA,oBAAoB,EAAE,UAAU;AACjC,qBAAA;AACD,oBAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,CAAC;AACtD,iBAAA;;IAuBW;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EALW,eAAe,KAAf,eAAe,GAK1B,EAAA,CAAA,CAAA;;ACjCM,MAAM,mBAAmB,GAAoB;AAClD,IAAA,KAAK,EAAE,CAAC;CACT;AAEM,MAAM,oBAAoB,GAAG,IAAI,cAAc,CAAkB,sBAAsB,CAAC;AAE/F;;;;AAIG;AACG,SAAU,mBAAmB,CAAC,MAAgC,EAAA;IAClE,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,oBAAoB;AAC7B,YAAA,QAAQ,EAAE,EAAE,GAAG,mBAAmB,EAAE,GAAG,MAAM,EAAE;AAChD,SAAA;KACF;AACH;AAEA;;;AAGG;SACa,kBAAkB,GAAA;AAChC,IAAA,OAAO,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,mBAAmB;AAChF;;AC7BA;;AAEG;MAQU,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;AAQE;;AAEG;QACc,IAAM,CAAA,MAAA,GAAG,iBAAiB,EAAE;AAE7C;;AAEG;QACc,IAAM,CAAA,MAAA,GAAG,kBAAkB,EAAE;AAE9C;;AAEG;QACc,IAAW,CAAA,WAAA,GAAG,iBAAiB,EAAE;AAElD;;;AAGG;QACM,IAAK,CAAA,KAAA,GAAG,KAAK,CAAsB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC7D,YAAA,KAAK,EAAE,wBAAwB;AAC/B,YAAA,SAAS,EAAE,eAAe;AAC3B,SAAA,CAAC;AAEF;;;AAGG;AACgB,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CACnC;;AAEE,QAAA,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,eAAe,CAAC,MAAM,CAC3E;AAED;;AAEG;AACK,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAKrC;IAHC,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;+GAzCnE,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,iBAAiB,EAAE,2BAA2B;AAC/C,qBAAA;AACF,iBAAA;;;ACXD;;AAEG;MAMU,cAAc,CAAA;AAL3B,IAAA,WAAA,GAAA;AAME;;AAEG;QACgB,IAAc,CAAA,cAAA,GAAG,yBAAyB,EAAE;AAE/D;;AAEG;QACc,IAAM,CAAA,MAAA,GAAG,iBAAiB,EAAE;AAE7C;;AAEG;AACc,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA+B,UAAU,CAAC;AAiC/E;IA/BC,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC;;QAGtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC;;;QAItC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC1C,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC;;;IAK/B,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC;;IAI7B,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC;;AAG9B,IAAA,QAAQ,CAAC,KAAsB,EAAA;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;;AAG9B,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,KAAK,KAAK,eAAe,CAAC,MAAM,CAAC;;+GA7C5D,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,cAAc,EAAE,CAAC,iBAAiB,CAAC;AACpC,iBAAA;8BAiCW,MAAM,EAAA,CAAA;sBADf,YAAY;uBAAC,MAAM;gBAMV,OAAO,EAAA,CAAA;sBADhB,YAAY;uBAAC,OAAO;;;ACjDvB;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-primitives-avatar.mjs","sources":["../../../../packages/ng-primitives/avatar/src/avatar/avatar-state.ts","../../../../packages/ng-primitives/avatar/src/avatar/avatar.ts","../../../../packages/ng-primitives/avatar/src/config/avatar-config.ts","../../../../packages/ng-primitives/avatar/src/avatar-fallback/avatar-fallback.ts","../../../../packages/ng-primitives/avatar/src/avatar-image/avatar-image.ts","../../../../packages/ng-primitives/avatar/src/ng-primitives-avatar.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpAvatar } from './avatar';\n\n/**\n * The state token for the Avatar primitive.\n */\nexport const NgpAvatarStateToken = createStateToken<NgpAvatar>('Avatar');\n\n/**\n * Provides the Avatar state.\n */\nexport const provideAvatarState = createStateProvider(NgpAvatarStateToken);\n\n/**\n * Injects the Avatar state.\n */\nexport const injectAvatarState = createStateInjector<NgpAvatar>(NgpAvatarStateToken);\n\n/**\n * The Avatar state registration function.\n */\nexport const avatarState = createState(NgpAvatarStateToken);\n","import { Directive, signal } from '@angular/core';\nimport { NgpFocusVisible, NgpHover, NgpPress } from 'ng-primitives/interactions';\nimport { avatarState, provideAvatarState } from './avatar-state';\n\n/**\n * Apply the `ngpAvatar` directive to an element that represents the avatar. This directive is a container for the image and/or fallback.\n */\n@Directive({\n selector: '[ngpAvatar]',\n exportAs: 'ngpAvatar',\n providers: [provideAvatarState()],\n host: {\n '[attr.data-status]': 'status()',\n },\n hostDirectives: [NgpHover, NgpFocusVisible, NgpPress],\n})\nexport class NgpAvatar {\n /**\n * Store the current status of the avatar.\n * @internal\n */\n readonly status = signal(NgpAvatarStatus.Idle);\n\n /**\n * The avatar state.\n */\n protected readonly state = avatarState<NgpAvatar>(this);\n\n /**\n * Set the avatar status.\n * @param status The status to set.\n * @internal\n */\n setStatus(status: NgpAvatarStatus): void {\n this.status.set(status);\n }\n}\n\nexport enum NgpAvatarStatus {\n Idle = 'idle',\n Loading = 'loading',\n Loaded = 'loaded',\n Error = 'error',\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\n\nexport interface NgpAvatarConfig {\n /**\n * Define a delay before the fallback is shown. This is useful to only show the fallback for those with slower connections.\n * @default 0\n */\n delay: number;\n}\n\nexport const defaultAvatarConfig: NgpAvatarConfig = {\n delay: 0,\n};\n\nexport const NgpAvatarConfigToken = new InjectionToken<NgpAvatarConfig>('NgpAvatarConfigToken');\n\n/**\n * Provide the avatar config\n * @param config The avatar config\n * @returns The provider\n */\nexport function provideAvatarConfig(config: Partial<NgpAvatarConfig>): Provider[] {\n return [\n {\n provide: NgpAvatarConfigToken,\n useValue: { ...defaultAvatarConfig, ...config },\n },\n ];\n}\n\n/**\n * Inject the avatar config\n * @returns The global avatar config\n */\nexport function injectAvatarConfig(): NgpAvatarConfig {\n return inject(NgpAvatarConfigToken, { optional: true }) ?? defaultAvatarConfig;\n}\n","import { NumberInput } from '@angular/cdk/coercion';\nimport { computed, Directive, input, numberAttribute, OnInit, signal } from '@angular/core';\nimport { injectDisposables } from 'ng-primitives/utils';\nimport { NgpAvatarStatus } from '../avatar/avatar';\nimport { injectAvatarState } from '../avatar/avatar-state';\nimport { injectAvatarConfig } from '../config/avatar-config';\n\n/**\n * Apply the `ngpAvatarFallback` directive to an element that represents the user in the absence of an image. This is typically the user's initials.\n */\n@Directive({\n selector: '[ngpAvatarFallback]',\n exportAs: 'ngpAvatarFallback',\n host: {\n '[style.display]': 'visible() ? null : \"none\"',\n },\n})\nexport class NgpAvatarFallback implements OnInit {\n /**\n * Access the avatar\n */\n private readonly avatar = injectAvatarState();\n\n /**\n * Access the global configuration.\n */\n private readonly config = injectAvatarConfig();\n\n /**\n * Access the disposable utilities.\n */\n private readonly disposables = injectDisposables();\n\n /**\n * Define a delay before the fallback is shown. This is useful to only show the fallback for those with slower connections.\n * @default 0\n */\n readonly delay = input<number, NumberInput>(this.config.delay, {\n alias: 'ngpAvatarFallbackDelay',\n transform: numberAttribute,\n });\n\n /**\n * Determine if this element should be hidden.\n * @returns True if the element should be visible\n */\n protected readonly visible = computed(\n () =>\n // we need to check if the element can render and if the avatar is not in a loaded state\n this.delayElapsed() && this.avatar().status() !== NgpAvatarStatus.Loaded,\n );\n\n /**\n * Determine the delay has elapsed, and we can show the fallback.\n */\n private delayElapsed = signal(false);\n\n ngOnInit(): void {\n this.disposables.setTimeout(() => this.delayElapsed.set(true), this.delay());\n }\n}\n","import { Directive, ElementRef, HostListener, inject, OnInit } from '@angular/core';\nimport { injectVisuallyHiddenState, NgpVisuallyHidden } from 'ng-primitives/a11y';\nimport { NgpAvatarStatus } from '../avatar/avatar';\nimport { injectAvatarState } from '../avatar/avatar-state';\n\n/**\n * Apply the `ngpAvatarImage` directive to an element that represents the avatar image. This would typically be an `img` element or a `div` with a background image.\n */\n@Directive({\n selector: 'img[ngpAvatarImage]',\n exportAs: 'ngpAvatarImage',\n hostDirectives: [NgpVisuallyHidden],\n})\nexport class NgpAvatarImage implements OnInit {\n /**\n * Control the visibility of the image.\n */\n protected readonly visuallyHidden = injectVisuallyHiddenState();\n\n /**\n * Access the avatar\n */\n private readonly avatar = injectAvatarState();\n\n /**\n * Access the image element ref.\n */\n private readonly elementRef = inject<ElementRef<HTMLImageElement>>(ElementRef);\n\n ngOnInit(): void {\n // mark the avatar as loading\n this.setState(NgpAvatarStatus.Loading);\n\n // if there is no src, we can report this as an error\n if (!this.elementRef.nativeElement.src) {\n this.setState(NgpAvatarStatus.Error);\n }\n\n // if the image has already loaded, we can report this to the avatar\n if (this.elementRef.nativeElement.complete) {\n this.setState(NgpAvatarStatus.Loaded);\n }\n }\n\n @HostListener('load')\n protected onLoad(): void {\n this.setState(NgpAvatarStatus.Loaded);\n }\n\n @HostListener('error')\n protected onError(): void {\n this.setState(NgpAvatarStatus.Error);\n }\n\n private setState(state: NgpAvatarStatus) {\n this.avatar().setStatus(state);\n\n // if the state is loaded then we should make the image visible\n this.visuallyHidden().setVisibility(state === NgpAvatarStatus.Loaded);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, HOST_TAG_NAME, input, booleanAttribute, Directive } from '@angular/core';
3
- import { syncState, setupInteractions } from 'ng-primitives/internal';
2
+ import { input, booleanAttribute, Directive } from '@angular/core';
3
+ import { setupButton } from 'ng-primitives/internal';
4
4
  import { createStateToken, createStateProvider, createStateInjector, createState } from 'ng-primitives/state';
5
5
 
6
6
  /**
@@ -19,45 +19,23 @@ const injectButtonState = createStateInjector(NgpButtonStateToken);
19
19
  * The Button state registration function.
20
20
  */
21
21
  const buttonState = createState(NgpButtonStateToken);
22
- /**
23
- * Sync the button state with control state.
24
- * @param disabled The disabled state of the control.
25
- */
26
- function syncButton({ disabled }) {
27
- const button = injectButtonState();
28
- syncState(disabled, button().disabled);
29
- }
30
22
 
31
23
  class NgpButton {
32
24
  constructor() {
33
- /**
34
- * Get the tag name of the element.
35
- */
36
- this.tagName = inject(HOST_TAG_NAME);
37
25
  /**
38
26
  * Whether the button is disabled.
39
27
  */
40
28
  this.disabled = input(false, {
41
29
  transform: booleanAttribute,
42
30
  });
43
- /**
44
- * Detect if this is an HTML button element.
45
- */
46
- this.isButton = this.tagName.toLowerCase() === 'button';
47
31
  /**
48
32
  * The button state.
49
33
  */
50
34
  this.state = buttonState(this);
51
- // setup the hover, press, and focus-visible listeners
52
- setupInteractions({
53
- disabled: this.state.disabled,
54
- hover: true,
55
- press: true,
56
- focusVisible: true,
57
- });
35
+ setupButton({ disabled: this.state.disabled });
58
36
  }
59
37
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NgpButton, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
60
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.11", type: NgpButton, isStandalone: true, selector: "[ngpButton]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-disabled": "state.disabled() ? \"\" : null", "attr.disabled": "isButton && state.disabled() ? true : null" } }, providers: [provideButtonState({ inherit: false })], exportAs: ["ngpButton"], ngImport: i0 }); }
38
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.11", type: NgpButton, isStandalone: true, selector: "[ngpButton]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideButtonState({ inherit: false })], exportAs: ["ngpButton"], ngImport: i0 }); }
61
39
  }
62
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImport: i0, type: NgpButton, decorators: [{
63
41
  type: Directive,
@@ -65,10 +43,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
65
43
  selector: '[ngpButton]',
66
44
  exportAs: 'ngpButton',
67
45
  providers: [provideButtonState({ inherit: false })],
68
- host: {
69
- '[attr.data-disabled]': 'state.disabled() ? "" : null',
70
- '[attr.disabled]': 'isButton && state.disabled() ? true : null',
71
- },
72
46
  }]
73
47
  }], ctorParameters: () => [] });
74
48
 
@@ -76,5 +50,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.11", ngImpo
76
50
  * Generated bundle index. Do not edit.
77
51
  */
78
52
 
79
- export { NgpButton, injectButtonState, provideButtonState, syncButton };
53
+ export { NgpButton, injectButtonState, provideButtonState };
80
54
  //# sourceMappingURL=ng-primitives-button.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-primitives-button.mjs","sources":["../../../../packages/ng-primitives/button/src/button/button-state.ts","../../../../packages/ng-primitives/button/src/button/button.ts","../../../../packages/ng-primitives/button/src/ng-primitives-button.ts"],"sourcesContent":["import { Signal } from '@angular/core';\nimport { syncState } from 'ng-primitives/internal';\nimport {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpButton } from './button';\n\n/**\n * The state token for the Button primitive.\n */\nexport const NgpButtonStateToken = createStateToken<NgpButton>('Button');\n\n/**\n * Provides the Button state.\n */\nexport const provideButtonState = createStateProvider(NgpButtonStateToken);\n\n/**\n * Injects the Button state.\n */\nexport const injectButtonState = createStateInjector<NgpButton>(NgpButtonStateToken);\n\n/**\n * The Button state registration function.\n */\nexport const buttonState = createState(NgpButtonStateToken);\n\ninterface SyncButton {\n disabled: Signal<boolean>;\n}\n\n/**\n * Sync the button state with control state.\n * @param disabled The disabled state of the control.\n */\nexport function syncButton({ disabled }: SyncButton) {\n const button = injectButtonState();\n syncState(disabled, button().disabled);\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, HOST_TAG_NAME, inject, input } from '@angular/core';\nimport { setupInteractions } from 'ng-primitives/internal';\nimport { buttonState, provideButtonState } from './button-state';\n\n@Directive({\n selector: '[ngpButton]',\n exportAs: 'ngpButton',\n providers: [provideButtonState({ inherit: false })],\n host: {\n '[attr.data-disabled]': 'state.disabled() ? \"\" : null',\n '[attr.disabled]': 'isButton && state.disabled() ? true : null',\n },\n})\nexport class NgpButton {\n /**\n * Get the tag name of the element.\n */\n private readonly tagName = inject(HOST_TAG_NAME);\n\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Detect if this is an HTML button element.\n */\n protected readonly isButton = this.tagName.toLowerCase() === 'button';\n\n /**\n * The button state.\n */\n protected readonly state = buttonState<NgpButton>(this);\n\n constructor() {\n // setup the hover, press, and focus-visible listeners\n setupInteractions({\n disabled: this.state.disabled,\n hover: true,\n press: true,\n focusVisible: true,\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAUA;;AAEG;AACI,MAAM,mBAAmB,GAAG,gBAAgB,CAAY,QAAQ,CAAC;AAExE;;AAEG;MACU,kBAAkB,GAAG,mBAAmB,CAAC,mBAAmB;AAEzE;;AAEG;MACU,iBAAiB,GAAG,mBAAmB,CAAY,mBAAmB;AAEnF;;AAEG;AACI,MAAM,WAAW,GAAG,WAAW,CAAC,mBAAmB,CAAC;AAM3D;;;AAGG;AACa,SAAA,UAAU,CAAC,EAAE,QAAQ,EAAc,EAAA;AACjD,IAAA,MAAM,MAAM,GAAG,iBAAiB,EAAE;IAClC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC;AACxC;;MC3Ba,SAAS,CAAA;AAuBpB,IAAA,WAAA,GAAA;AAtBA;;AAEG;AACc,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAEhD;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAE;AACtD,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAC;AAEF;;AAEG;QACgB,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,QAAQ;AAErE;;AAEG;AACgB,QAAA,IAAA,CAAA,KAAK,GAAG,WAAW,CAAY,IAAI,CAAC;;AAIrD,QAAA,iBAAiB,CAAC;AAChB,YAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC7B,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC;;+GA9BO,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,gCAAA,EAAA,eAAA,EAAA,4CAAA,EAAA,EAAA,EAAA,SAAA,EANT,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAMxC,SAAS,EAAA,UAAA,EAAA,CAAA;kBATrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,WAAW;oBACrB,SAAS,EAAE,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACnD,oBAAA,IAAI,EAAE;AACJ,wBAAA,sBAAsB,EAAE,8BAA8B;AACtD,wBAAA,iBAAiB,EAAE,4CAA4C;AAChE,qBAAA;AACF,iBAAA;;;ACbD;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-primitives-button.mjs","sources":["../../../../packages/ng-primitives/button/src/button/button-state.ts","../../../../packages/ng-primitives/button/src/button/button.ts","../../../../packages/ng-primitives/button/src/ng-primitives-button.ts"],"sourcesContent":["import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpButton } from './button';\n\n/**\n * The state token for the Button primitive.\n */\nexport const NgpButtonStateToken = createStateToken<NgpButton>('Button');\n\n/**\n * Provides the Button state.\n */\nexport const provideButtonState = createStateProvider(NgpButtonStateToken);\n\n/**\n * Injects the Button state.\n */\nexport const injectButtonState = createStateInjector<NgpButton>(NgpButtonStateToken);\n\n/**\n * The Button state registration function.\n */\nexport const buttonState = createState(NgpButtonStateToken);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, Directive, input } from '@angular/core';\nimport { setupButton } from 'ng-primitives/internal';\nimport { buttonState, provideButtonState } from './button-state';\n\n@Directive({\n selector: '[ngpButton]',\n exportAs: 'ngpButton',\n providers: [provideButtonState({ inherit: false })],\n})\nexport class NgpButton {\n /**\n * Whether the button is disabled.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * The button state.\n */\n protected readonly state = buttonState<NgpButton>(this);\n\n constructor() {\n setupButton({ disabled: this.state.disabled });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAQA;;AAEG;AACI,MAAM,mBAAmB,GAAG,gBAAgB,CAAY,QAAQ,CAAC;AAExE;;AAEG;MACU,kBAAkB,GAAG,mBAAmB,CAAC,mBAAmB;AAEzE;;AAEG;MACU,iBAAiB,GAAG,mBAAmB,CAAY,mBAAmB;AAEnF;;AAEG;AACI,MAAM,WAAW,GAAG,WAAW,CAAC,mBAAmB,CAAC;;MChB9C,SAAS,CAAA;AAapB,IAAA,WAAA,GAAA;AAZA;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,EAAE;AACtD,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAC;AAEF;;AAEG;AACgB,QAAA,IAAA,CAAA,KAAK,GAAG,WAAW,CAAY,IAAI,CAAC;QAGrD,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAChD;+GAfW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFT,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAExC,SAAS,EAAA,UAAA,EAAA,CAAA;kBALrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,WAAW;oBACrB,SAAS,EAAE,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACpD,iBAAA;;;ACTD;;AAEG;;;;"}
@@ -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 {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpCheckbox } from './checkbox';\n\n/**\n * The state token for the Checkbox primitive.\n */\nexport const NgpCheckboxStateToken = createStateToken<NgpCheckbox>('Checkbox');\n\n/**\n * Provides the Checkbox state.\n */\nexport const provideCheckboxState = createStateProvider(NgpCheckboxStateToken);\n\n/**\n * Injects the Checkbox state.\n */\nexport const injectCheckboxState = createStateInjector<NgpCheckbox>(NgpCheckboxStateToken);\n\n/**\n * The Checkbox state registration function.\n */\nexport const checkboxState = createState(NgpCheckboxStateToken);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, HostListener, booleanAttribute, input, output } from '@angular/core';\nimport { setupFormControl } from 'ng-primitives/form-field';\nimport { setupInteractions } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { checkboxState, 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()],\n host: {\n role: 'checkbox',\n '[attr.aria-checked]': 'state.indeterminate() ? \"mixed\" : state.checked()',\n '[attr.data-checked]': 'state.checked() ? \"\" : null',\n '[attr.data-indeterminate]': 'state.indeterminate() ? \"\" : null',\n '[attr.aria-disabled]': 'state.disabled()',\n '[tabindex]': 'state.disabled() ? -1 : 0',\n },\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 = checkboxState<NgpCheckbox>(this);\n\n constructor() {\n setupFormControl({ id: this.state.id, disabled: this.state.disabled });\n setupInteractions({\n hover: true,\n press: true,\n focusVisible: true,\n disabled: this.state.disabled,\n });\n }\n\n @HostListener('keydown.enter', ['$event'])\n protected onEnter(event: KeyboardEvent): void {\n // According to WAI ARIA, Checkboxes don't activate on enter keypress\n event.preventDefault();\n }\n\n @HostListener('click', ['$event'])\n @HostListener('keydown.space', ['$event'])\n toggle(event?: Event): void {\n if (this.state.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 checked = this.state.indeterminate() ? true : !this.state.checked();\n this.state.checked.set(checked);\n this.checkedChange.emit(checked);\n\n // if the checkbox was indeterminate, it isn't anymore\n if (this.state.indeterminate()) {\n this.state.indeterminate.set(false);\n this.indeterminateChange.emit(false);\n }\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 {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpCheckbox } from './checkbox';\n\n/**\n * The state token for the Checkbox primitive.\n */\nexport const NgpCheckboxStateToken = createStateToken<NgpCheckbox>('Checkbox');\n\n/**\n * Provides the Checkbox state.\n */\nexport const provideCheckboxState = createStateProvider(NgpCheckboxStateToken);\n\n/**\n * Injects the Checkbox state.\n */\nexport const injectCheckboxState = createStateInjector<NgpCheckbox>(NgpCheckboxStateToken);\n\n/**\n * The Checkbox state registration function.\n */\nexport const checkboxState = createState(NgpCheckboxStateToken);\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { Directive, HostListener, booleanAttribute, input, output } from '@angular/core';\nimport { setupFormControl } from 'ng-primitives/form-field';\nimport { setupInteractions } from 'ng-primitives/internal';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { checkboxState, 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()],\n host: {\n role: 'checkbox',\n '[attr.aria-checked]': 'state.indeterminate() ? \"mixed\" : state.checked()',\n '[attr.data-checked]': 'state.checked() ? \"\" : null',\n '[attr.data-indeterminate]': 'state.indeterminate() ? \"\" : null',\n '[attr.aria-disabled]': 'state.disabled()',\n '[tabindex]': 'state.disabled() ? -1 : 0',\n },\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 = checkboxState<NgpCheckbox>(this);\n\n constructor() {\n setupFormControl({ id: this.state.id, disabled: this.state.disabled });\n setupInteractions({\n hover: true,\n press: true,\n focusVisible: true,\n disabled: this.state.disabled,\n });\n }\n\n @HostListener('keydown.enter', ['$event'])\n protected onEnter(event: KeyboardEvent): void {\n // According to WAI ARIA, Checkboxes don't activate on enter keypress\n event.preventDefault();\n }\n\n @HostListener('click', ['$event'])\n @HostListener('keydown.space', ['$event'])\n toggle(event?: Event): void {\n if (this.state.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 checked = this.state.indeterminate() ? true : !this.state.checked();\n this.state.checked.set(checked);\n this.checkedChange.emit(checked);\n\n // if the checkbox was indeterminate, it isn't anymore\n if (this.state.indeterminate()) {\n this.state.indeterminate.set(false);\n this.indeterminateChange.emit(false);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, Directive, computed, HostListener, booleanAttribute, inject, ViewContainerRef, TemplateRef, Injector, signal, output, afterRenderEffect } from '@angular/core';
3
- import { injectElementRef, setupInteractions } from 'ng-primitives/internal';
4
- import { observeResize } from 'ng-primitives/resize';
3
+ import { observeResize, injectElementRef, setupInteractions } from 'ng-primitives/internal';
5
4
  import { uniqueId } from 'ng-primitives/utils';
6
5
  import { createStateToken, createStateProvider, createStateInjector, createState } from 'ng-primitives/state';
7
6
  import { setupFormControl } from 'ng-primitives/form-field';