@radix-ng/primitives 0.21.0 → 0.23.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 (78) hide show
  1. package/accordion/src/accordion-item.directive.d.ts +22 -13
  2. package/accordion/src/accordion-root.directive.d.ts +22 -3
  3. package/aspect-ratio/src/aspect-ratio.directive.d.ts +5 -3
  4. package/avatar/index.d.ts +9 -0
  5. package/avatar/src/avatar-fallback.directive.d.ts +9 -0
  6. package/avatar/src/avatar-image.directive.d.ts +12 -0
  7. package/collapsible/src/collapsible-content.directive.d.ts +0 -3
  8. package/collapsible/src/collapsible-root.directive.d.ts +11 -4
  9. package/compodoc/documentation.json +2174 -3063
  10. package/dropdown-menu/src/dropdown-menu-trigger.directive.d.ts +30 -3
  11. package/esm2022/accordion/src/accordion-item.directive.mjs +23 -14
  12. package/esm2022/accordion/src/accordion-root.directive.mjs +19 -3
  13. package/esm2022/aspect-ratio/src/aspect-ratio.directive.mjs +4 -2
  14. package/esm2022/avatar/index.mjs +27 -1
  15. package/esm2022/avatar/src/avatar-fallback.directive.mjs +10 -1
  16. package/esm2022/avatar/src/avatar-image.directive.mjs +13 -1
  17. package/esm2022/collapsible/src/collapsible-content.directive.mjs +1 -4
  18. package/esm2022/collapsible/src/collapsible-root.directive.mjs +17 -8
  19. package/esm2022/dropdown-menu/src/dropdown-menu-trigger.directive.mjs +35 -4
  20. package/esm2022/label/src/label.directive.mjs +6 -8
  21. package/esm2022/popover/src/popover.utils.mjs +17 -23
  22. package/esm2022/progress/src/progress-indicator.directive.mjs +1 -2
  23. package/esm2022/progress/src/progress-root.directive.mjs +8 -3
  24. package/esm2022/separator/src/separator.directive.mjs +9 -2
  25. package/esm2022/switch/src/switch-input.directive.mjs +4 -1
  26. package/esm2022/switch/src/switch-root.directive.mjs +28 -3
  27. package/esm2022/switch/src/switch-thumb.directive.mjs +4 -1
  28. package/esm2022/tabs/index.mjs +3 -6
  29. package/esm2022/tabs/src/tabs-content.directive.mjs +14 -8
  30. package/esm2022/tabs/src/tabs-list.directive.mjs +9 -6
  31. package/esm2022/tabs/src/tabs-root.directive.mjs +40 -37
  32. package/esm2022/tabs/src/tabs-trigger.directive.mjs +43 -17
  33. package/esm2022/tabs/src/utils.mjs +7 -0
  34. package/esm2022/toggle/src/toggle.directive.mjs +3 -1
  35. package/esm2022/toggle-group/src/toggle-group-item.directive.mjs +4 -3
  36. package/fesm2022/radix-ng-primitives-accordion.mjs +40 -15
  37. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  38. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs +3 -1
  39. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
  40. package/fesm2022/radix-ng-primitives-avatar.mjs +45 -2
  41. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  42. package/fesm2022/radix-ng-primitives-collapsible.mjs +16 -10
  43. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  44. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +34 -3
  45. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +1 -1
  46. package/fesm2022/radix-ng-primitives-label.mjs +5 -7
  47. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
  48. package/fesm2022/radix-ng-primitives-popover.mjs +16 -22
  49. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  50. package/fesm2022/radix-ng-primitives-progress.mjs +7 -3
  51. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-separator.mjs +8 -1
  53. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
  54. package/fesm2022/radix-ng-primitives-switch.mjs +33 -2
  55. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  56. package/fesm2022/radix-ng-primitives-tabs.mjs +109 -109
  57. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-toggle-group.mjs +3 -2
  59. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-toggle.mjs +2 -0
  61. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  62. package/label/src/label.directive.d.ts +5 -7
  63. package/package.json +1 -1
  64. package/progress/src/progress-indicator.directive.d.ts +0 -1
  65. package/progress/src/progress-root.directive.d.ts +7 -2
  66. package/separator/src/separator.directive.d.ts +8 -1
  67. package/switch/src/switch-input.directive.d.ts +3 -0
  68. package/switch/src/switch-root.directive.d.ts +27 -2
  69. package/switch/src/switch-thumb.directive.d.ts +3 -0
  70. package/tabs/index.d.ts +0 -1
  71. package/tabs/src/tabs-content.directive.d.ts +6 -1
  72. package/tabs/src/tabs-list.directive.d.ts +6 -2
  73. package/tabs/src/tabs-root.directive.d.ts +25 -9
  74. package/tabs/src/tabs-trigger.directive.d.ts +13 -3
  75. package/tabs/src/utils.d.ts +2 -0
  76. package/toggle/src/toggle.directive.d.ts +2 -1
  77. package/esm2022/tabs/src/tabs-context.service.mjs +0 -43
  78. package/tabs/src/tabs-context.service.d.ts +0 -22
@@ -12,6 +12,9 @@ const SWITCH_VALUE_ACCESSOR = {
12
12
  multi: true
13
13
  };
14
14
  let idIterator = 0;
15
+ /**
16
+ * @group Components
17
+ */
15
18
  class RdxSwitchRootDirective {
16
19
  constructor() {
17
20
  this.id = input(`rdx-switch-${idIterator++}`);
@@ -19,20 +22,37 @@ class RdxSwitchRootDirective {
19
22
  this.inputId = input(null);
20
23
  /**
21
24
  * When true, indicates that the user must check the switch before the owning form can be submitted.
25
+ *
26
+ * @default false
27
+ * @group Props
22
28
  */
23
29
  this.required = input(false, {
24
30
  transform: booleanAttribute
25
31
  });
26
- this.ariaLabelledBy = input(null, {
32
+ /**
33
+ * @default null
34
+ * @group Props
35
+ */
36
+ this.ariaLabelledBy = input(undefined, {
27
37
  alias: 'aria-labelledby'
28
38
  });
29
- this.ariaLabel = input(null, {
39
+ /**
40
+ * @default null
41
+ * @group Props
42
+ */
43
+ this.ariaLabel = input(undefined, {
30
44
  alias: 'aria-label'
31
45
  });
32
46
  /**
33
47
  * The controlled state of the switch. Must be used in conjunction with onCheckedChange.
48
+ * @defaultValue false
49
+ * @group Props
34
50
  */
35
51
  this.checked = model(false);
52
+ /**
53
+ * @default false
54
+ * @group Props
55
+ */
36
56
  this.defaultChecked = input(false, { transform: booleanAttribute });
37
57
  /**
38
58
  * The state of the switch.
@@ -42,6 +62,8 @@ class RdxSwitchRootDirective {
42
62
  this.checkedState = computed(() => this.checked());
43
63
  /**
44
64
  * When true, prevents the user from interacting with the switch.
65
+ * @default false
66
+ * @group Props
45
67
  */
46
68
  this.disabled = input(false, {
47
69
  transform: booleanAttribute
@@ -50,6 +72,9 @@ class RdxSwitchRootDirective {
50
72
  this.disabledState = computed(() => this.disabled() || this.accessorDisabled());
51
73
  /**
52
74
  * Event handler called when the state of the switch changes.
75
+ *
76
+ * @param {boolean} value - Boolean value indicates that the option is changed.
77
+ * @group Emits
53
78
  */
54
79
  this.onCheckedChange = output();
55
80
  this.defaultCheckedUsed = computed(() => this.defaultChecked());
@@ -119,6 +144,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
119
144
  }]
120
145
  }], ctorParameters: () => [] });
121
146
 
147
+ /**
148
+ * @group Components
149
+ */
122
150
  class RdxSwitchInputDirective {
123
151
  constructor() {
124
152
  this.switchRoot = injectSwitch();
@@ -157,6 +185,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
157
185
  }]
158
186
  }] });
159
187
 
188
+ /**
189
+ * @group Components
190
+ */
160
191
  class RdxSwitchThumbDirective {
161
192
  constructor() {
162
193
  this.switchRoot = injectSwitch();
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-switch.mjs","sources":["../../../packages/primitives/switch/src/switch-root.directive.ts","../../../packages/primitives/switch/src/switch-input.directive.ts","../../../packages/primitives/switch/src/switch-thumb.directive.ts","../../../packages/primitives/switch/index.ts","../../../packages/primitives/switch/radix-ng-primitives-switch.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n Directive,\n effect,\n forwardRef,\n inject,\n InjectionToken,\n input,\n InputSignalWithTransform,\n model,\n ModelSignal,\n output,\n OutputEmitterRef,\n signal\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const RdxSwitchToken = new InjectionToken<RdxSwitchRootDirective>('RdxSwitchToken');\n\nexport function injectSwitch(): RdxSwitchRootDirective {\n return inject(RdxSwitchToken);\n}\n\nexport const SWITCH_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RdxSwitchRootDirective),\n multi: true\n};\n\nexport interface SwitchProps {\n checked?: ModelSignal<boolean>;\n defaultChecked?: InputSignalWithTransform<boolean, BooleanInput>;\n required?: InputSignalWithTransform<boolean, BooleanInput>;\n onCheckedChange?: OutputEmitterRef<boolean>;\n}\n\nlet idIterator = 0;\n\n@Directive({\n selector: 'button[rdxSwitchRoot]',\n exportAs: 'rdxSwitchRoot',\n standalone: true,\n providers: [\n { provide: RdxSwitchToken, useExisting: RdxSwitchRootDirective },\n SWITCH_VALUE_ACCESSOR\n ],\n host: {\n type: 'button',\n '[id]': 'elementId()',\n '[attr.aria-checked]': 'checkedState()',\n '[attr.aria-required]': 'required()',\n '[attr.data-state]': 'checkedState() ? \"checked\" : \"unchecked\"',\n '[attr.data-disabled]': 'disabledState() ? \"true\" : null',\n '[attr.disabled]': 'disabledState() ? disabledState() : null',\n\n '(click)': 'toggle()'\n }\n})\nexport class RdxSwitchRootDirective implements SwitchProps, ControlValueAccessor {\n readonly id = input<string | null>(`rdx-switch-${idIterator++}`);\n\n protected readonly elementId = computed(() => (this.id() ? this.id() : null));\n\n readonly inputId = input<string | null>(null);\n\n /**\n * When true, indicates that the user must check the switch before the owning form can be submitted.\n */\n readonly required = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute\n });\n\n readonly ariaLabelledBy = input<string | null>(null, {\n alias: 'aria-labelledby'\n });\n\n readonly ariaLabel = input<string | null>(null, {\n alias: 'aria-label'\n });\n\n /**\n * The controlled state of the switch. Must be used in conjunction with onCheckedChange.\n */\n readonly checked = model<boolean>(false);\n\n readonly defaultChecked = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * The state of the switch.\n * If `defaultChecked` is provided, it takes precedence over the `checked` state.\n * @ignore\n */\n readonly checkedState = computed(() => this.checked());\n\n /**\n * When true, prevents the user from interacting with the switch.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute\n });\n\n /** @ignore */\n readonly disabledState = computed(() => this.disabled() || this.accessorDisabled());\n\n /**\n * Event handler called when the state of the switch changes.\n */\n readonly onCheckedChange = output<boolean>();\n\n private readonly defaultCheckedUsed = computed(() => this.defaultChecked());\n\n constructor() {\n effect(\n () => {\n if (this.defaultCheckedUsed()) {\n this.checked.set(this.defaultChecked());\n }\n },\n { allowSignalWrites: true }\n );\n }\n\n /**\n * Toggles the checked state of the switch.\n * If the switch is disabled, the function returns early.\n * @ignore\n */\n toggle(): void {\n if (this.disabledState()) {\n return;\n }\n\n this.checked.set(!this.checked());\n\n this.onChange(this.checked());\n this.onCheckedChange.emit(this.checked());\n }\n\n private readonly accessorDisabled = signal(false);\n\n private onChange: (value: any) => void = () => {};\n /** @ignore */\n onTouched: (() => void) | undefined;\n\n /** @ignore */\n writeValue(value: any): void {\n this.checked.set(value);\n }\n\n /** @ignore */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /** @ignore */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @ignore */\n setDisabledState(isDisabled: boolean): void {\n this.accessorDisabled.set(isDisabled);\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectSwitch } from './switch-root.directive';\n\n@Directive({\n selector: 'input[rdxSwitchInput]',\n exportAs: 'rdxSwitchInput',\n standalone: true,\n host: {\n type: 'checkbox',\n role: 'switch',\n tabindex: '-1',\n '[attr.id]': 'switchRoot.inputId()',\n '[attr.defaultChecked]': 'switchRoot.checkedState()',\n '[attr.aria-checked]': 'switchRoot.checkedState()',\n '[attr.aria-hidden]': 'true',\n '[attr.aria-label]': 'switchRoot.ariaLabel()',\n '[attr.aria-labelledby]': 'switchRoot.ariaLabelledBy()',\n '[attr.aria-required]': 'switchRoot.required()',\n '[attr.data-state]': 'switchRoot.checkedState() ? \"checked\" : \"unchecked\"',\n '[attr.data-disabled]': 'switchRoot.disabledState() ? \"true\" : null',\n '[attr.disabled]': 'switchRoot.disabledState() ? switchRoot.disabledState() : null',\n '[attr.value]': 'switchRoot.checkedState() ? \"on\" : \"off\"',\n style: 'transform: translateX(-100%); position: absolute; overflow: hidden; pointerEvents: none; opacity: 0; margin: 0;',\n\n '(blur)': 'onBlur()'\n }\n})\nexport class RdxSwitchInputDirective {\n protected readonly switchRoot = injectSwitch();\n\n /** @ignore */\n protected onBlur() {\n this.switchRoot.onTouched?.();\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectSwitch } from './switch-root.directive';\n\n@Directive({\n selector: 'span[rdxSwitchThumb]',\n exportAs: 'rdxSwitchThumb',\n standalone: true,\n host: {\n '[attr.data-disabled]': 'switchRoot.disabledState() ? \"true\" : null',\n '[attr.data-state]': 'switchRoot.checkedState() ? \"checked\" : \"unchecked\"'\n }\n})\nexport class RdxSwitchThumbDirective {\n protected readonly switchRoot = injectSwitch();\n}\n","import { NgModule } from '@angular/core';\nimport { RdxSwitchInputDirective } from './src/switch-input.directive';\nimport { RdxSwitchRootDirective } from './src/switch-root.directive';\nimport { RdxSwitchThumbDirective } from './src/switch-thumb.directive';\n\nexport * from './src/switch-input.directive';\nexport * from './src/switch-root.directive';\nexport * from './src/switch-thumb.directive';\n\nexport type { SwitchProps } from './src/switch-root.directive';\n\nconst switchImports = [\n RdxSwitchRootDirective,\n RdxSwitchInputDirective,\n RdxSwitchThumbDirective\n];\n\n@NgModule({\n imports: [...switchImports],\n exports: [...switchImports]\n})\nexport class RdxSwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"radix-ng-primitives-switch.mjs","sources":["../../../packages/primitives/switch/src/switch-root.directive.ts","../../../packages/primitives/switch/src/switch-input.directive.ts","../../../packages/primitives/switch/src/switch-thumb.directive.ts","../../../packages/primitives/switch/index.ts","../../../packages/primitives/switch/radix-ng-primitives-switch.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n Directive,\n effect,\n forwardRef,\n inject,\n InjectionToken,\n input,\n InputSignalWithTransform,\n model,\n ModelSignal,\n output,\n OutputEmitterRef,\n signal\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const RdxSwitchToken = new InjectionToken<RdxSwitchRootDirective>('RdxSwitchToken');\n\nexport function injectSwitch(): RdxSwitchRootDirective {\n return inject(RdxSwitchToken);\n}\n\nexport const SWITCH_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RdxSwitchRootDirective),\n multi: true\n};\n\nexport interface SwitchProps {\n checked?: ModelSignal<boolean>;\n defaultChecked?: InputSignalWithTransform<boolean, BooleanInput>;\n required?: InputSignalWithTransform<boolean, BooleanInput>;\n onCheckedChange?: OutputEmitterRef<boolean>;\n}\n\nlet idIterator = 0;\n\n/**\n * @group Components\n */\n@Directive({\n selector: 'button[rdxSwitchRoot]',\n exportAs: 'rdxSwitchRoot',\n standalone: true,\n providers: [\n { provide: RdxSwitchToken, useExisting: RdxSwitchRootDirective },\n SWITCH_VALUE_ACCESSOR\n ],\n host: {\n type: 'button',\n '[id]': 'elementId()',\n '[attr.aria-checked]': 'checkedState()',\n '[attr.aria-required]': 'required()',\n '[attr.data-state]': 'checkedState() ? \"checked\" : \"unchecked\"',\n '[attr.data-disabled]': 'disabledState() ? \"true\" : null',\n '[attr.disabled]': 'disabledState() ? disabledState() : null',\n\n '(click)': 'toggle()'\n }\n})\nexport class RdxSwitchRootDirective implements SwitchProps, ControlValueAccessor {\n readonly id = input<string | null>(`rdx-switch-${idIterator++}`);\n\n protected readonly elementId = computed(() => (this.id() ? this.id() : null));\n\n readonly inputId = input<string | null>(null);\n\n /**\n * When true, indicates that the user must check the switch before the owning form can be submitted.\n *\n * @default false\n * @group Props\n */\n readonly required = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute\n });\n\n /**\n * @default null\n * @group Props\n */\n readonly ariaLabelledBy = input<string | undefined>(undefined, {\n alias: 'aria-labelledby'\n });\n\n /**\n * @default null\n * @group Props\n */\n readonly ariaLabel = input<string | undefined>(undefined, {\n alias: 'aria-label'\n });\n\n /**\n * The controlled state of the switch. Must be used in conjunction with onCheckedChange.\n * @defaultValue false\n * @group Props\n */\n readonly checked = model<boolean>(false);\n\n /**\n * @default false\n * @group Props\n */\n readonly defaultChecked = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /**\n * The state of the switch.\n * If `defaultChecked` is provided, it takes precedence over the `checked` state.\n * @ignore\n */\n readonly checkedState = computed(() => this.checked());\n\n /**\n * When true, prevents the user from interacting with the switch.\n * @default false\n * @group Props\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute\n });\n\n /** @ignore */\n readonly disabledState = computed(() => this.disabled() || this.accessorDisabled());\n\n /**\n * Event handler called when the state of the switch changes.\n *\n * @param {boolean} value - Boolean value indicates that the option is changed.\n * @group Emits\n */\n readonly onCheckedChange = output<boolean>();\n\n private readonly defaultCheckedUsed = computed(() => this.defaultChecked());\n\n constructor() {\n effect(\n () => {\n if (this.defaultCheckedUsed()) {\n this.checked.set(this.defaultChecked());\n }\n },\n { allowSignalWrites: true }\n );\n }\n\n /**\n * Toggles the checked state of the switch.\n * If the switch is disabled, the function returns early.\n * @ignore\n */\n toggle(): void {\n if (this.disabledState()) {\n return;\n }\n\n this.checked.set(!this.checked());\n\n this.onChange(this.checked());\n this.onCheckedChange.emit(this.checked());\n }\n\n private readonly accessorDisabled = signal(false);\n\n private onChange: (value: any) => void = () => {};\n /** @ignore */\n onTouched: (() => void) | undefined;\n\n /** @ignore */\n writeValue(value: any): void {\n this.checked.set(value);\n }\n\n /** @ignore */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /** @ignore */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @ignore */\n setDisabledState(isDisabled: boolean): void {\n this.accessorDisabled.set(isDisabled);\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectSwitch } from './switch-root.directive';\n\n/**\n * @group Components\n */\n@Directive({\n selector: 'input[rdxSwitchInput]',\n exportAs: 'rdxSwitchInput',\n standalone: true,\n host: {\n type: 'checkbox',\n role: 'switch',\n tabindex: '-1',\n '[attr.id]': 'switchRoot.inputId()',\n '[attr.defaultChecked]': 'switchRoot.checkedState()',\n '[attr.aria-checked]': 'switchRoot.checkedState()',\n '[attr.aria-hidden]': 'true',\n '[attr.aria-label]': 'switchRoot.ariaLabel()',\n '[attr.aria-labelledby]': 'switchRoot.ariaLabelledBy()',\n '[attr.aria-required]': 'switchRoot.required()',\n '[attr.data-state]': 'switchRoot.checkedState() ? \"checked\" : \"unchecked\"',\n '[attr.data-disabled]': 'switchRoot.disabledState() ? \"true\" : null',\n '[attr.disabled]': 'switchRoot.disabledState() ? switchRoot.disabledState() : null',\n '[attr.value]': 'switchRoot.checkedState() ? \"on\" : \"off\"',\n style: 'transform: translateX(-100%); position: absolute; overflow: hidden; pointerEvents: none; opacity: 0; margin: 0;',\n\n '(blur)': 'onBlur()'\n }\n})\nexport class RdxSwitchInputDirective {\n protected readonly switchRoot = injectSwitch();\n\n /** @ignore */\n protected onBlur() {\n this.switchRoot.onTouched?.();\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectSwitch } from './switch-root.directive';\n\n/**\n * @group Components\n */\n@Directive({\n selector: 'span[rdxSwitchThumb]',\n exportAs: 'rdxSwitchThumb',\n standalone: true,\n host: {\n '[attr.data-disabled]': 'switchRoot.disabledState() ? \"true\" : null',\n '[attr.data-state]': 'switchRoot.checkedState() ? \"checked\" : \"unchecked\"'\n }\n})\nexport class RdxSwitchThumbDirective {\n protected readonly switchRoot = injectSwitch();\n}\n","import { NgModule } from '@angular/core';\nimport { RdxSwitchInputDirective } from './src/switch-input.directive';\nimport { RdxSwitchRootDirective } from './src/switch-root.directive';\nimport { RdxSwitchThumbDirective } from './src/switch-thumb.directive';\n\nexport * from './src/switch-input.directive';\nexport * from './src/switch-root.directive';\nexport * from './src/switch-thumb.directive';\n\nexport type { SwitchProps } from './src/switch-root.directive';\n\nconst switchImports = [\n RdxSwitchRootDirective,\n RdxSwitchInputDirective,\n RdxSwitchThumbDirective\n];\n\n@NgModule({\n imports: [...switchImports],\n exports: [...switchImports]\n})\nexport class RdxSwitchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,55 +1,83 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, signal, computed, Injectable, inject, input, Directive, EventEmitter, effect, Input, Output, booleanAttribute, NgModule } from '@angular/core';
2
+ import { InjectionToken, model, input, output, Directive, inject, computed, booleanAttribute, effect, NgModule } from '@angular/core';
3
+ import * as i1 from '@radix-ng/primitives/roving-focus';
4
+ import { RdxRovingFocusGroupDirective, RdxRovingFocusItemDirective } from '@radix-ng/primitives/roving-focus';
3
5
 
4
- const TABS_CONTEXT_TOKEN = new InjectionToken('TabsContext');
5
- class RdxTabsContextService {
6
+ const RDX_TABS_ROOT_TOKEN = new InjectionToken('RdxTabsRootDirective');
7
+ class RdxTabsRootDirective {
6
8
  constructor() {
7
- this.baseId = this.generateId();
8
- this.value = signal(undefined);
9
- this.orientation = signal('horizontal');
10
- this.dir = signal(undefined);
11
- this.activationMode = signal('automatic');
12
- this.value$ = computed(() => this.value());
13
- this.orientation$ = computed(() => this.orientation());
14
- this.dir$ = computed(() => this.dir());
15
- this.activationMode$ = computed(() => this.activationMode());
16
- }
17
- setValue(value) {
18
- this.value.set(value);
9
+ /**
10
+ * The controlled value of the tab to activate. Should be used in conjunction with `onValueChange`.
11
+ */
12
+ this.value = model();
13
+ this.defaultValue = input();
14
+ /**
15
+ * When automatic, tabs are activated when receiving focus. When manual, tabs are activated when clicked.
16
+ */
17
+ this.activationMode = input('automatic');
18
+ /**
19
+ * The orientation of the component.
20
+ */
21
+ this.orientation = input('horizontal');
22
+ this.dir = input('ltr');
23
+ /**
24
+ * Event handler called when the value changes.
25
+ */
26
+ this.onValueChange = output();
19
27
  }
20
- setOrientation(orientation) {
21
- this.orientation.set(orientation);
22
- }
23
- setDir(dir) {
24
- this.dir.set(dir);
28
+ ngOnInit() {
29
+ if (this.defaultValue()) {
30
+ this.value.set(this.defaultValue());
31
+ }
25
32
  }
26
- setActivationMode(mode) {
27
- this.activationMode.set(mode);
33
+ select(value) {
34
+ this.value.set(value);
35
+ this.onValueChange.emit(value);
28
36
  }
37
+ /** @ignore */
29
38
  getBaseId() {
30
- return this.baseId;
31
- }
32
- generateId() {
33
39
  return `tabs-${Math.random().toString(36).substr(2, 9)}`;
34
40
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
36
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsContextService, providedIn: 'root' }); }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsRootDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
42
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxTabsRootDirective, isStandalone: true, selector: "[rdxTabsRoot]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, activationMode: { classPropertyName: "activationMode", publicName: "activationMode", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onValueChange: "onValueChange" }, host: { properties: { "attr.data-orientation": "orientation()", "attr.dir": "dir()" } }, providers: [
43
+ { provide: RDX_TABS_ROOT_TOKEN, useExisting: RdxTabsRootDirective }
44
+ ], ngImport: i0 }); }
37
45
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsContextService, decorators: [{
39
- type: Injectable,
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsRootDirective, decorators: [{
47
+ type: Directive,
40
48
  args: [{
41
- providedIn: 'root'
49
+ selector: '[rdxTabsRoot]',
50
+ standalone: true,
51
+ providers: [
52
+ { provide: RDX_TABS_ROOT_TOKEN, useExisting: RdxTabsRootDirective }
53
+ ],
54
+ host: {
55
+ '[attr.data-orientation]': 'orientation()',
56
+ '[attr.dir]': 'dir()'
57
+ }
42
58
  }]
43
59
  }] });
44
60
 
61
+ function makeTriggerId(baseId, value) {
62
+ return `${baseId}-trigger-${value}`;
63
+ }
64
+ function makeContentId(baseId, value) {
65
+ return `${baseId}-content-${value}`;
66
+ }
67
+
45
68
  class RdxTabsContentDirective {
46
69
  constructor() {
47
- this.tabsContext = inject(TABS_CONTEXT_TOKEN);
70
+ this.tabsContext = inject(RDX_TABS_ROOT_TOKEN);
71
+ /**
72
+ * A unique value that associates the content with a trigger.
73
+ */
48
74
  this.value = input.required();
49
- this.selected = computed(() => this.tabsContext.value$() === this.value());
75
+ this.contentId = computed(() => makeContentId(this.tabsContext.getBaseId(), this.value()));
76
+ this.triggerId = computed(() => makeTriggerId(this.tabsContext.getBaseId(), this.value()));
77
+ this.selected = computed(() => this.tabsContext.value() === this.value());
50
78
  }
51
79
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
52
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxTabsContentDirective, isStandalone: true, selector: "[rdxTabsContent]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "role": "tabpanel", "tabindex": "0" }, properties: { "id": "tabsContext.getBaseId()", "attr.aria-labelledby": "tabsContext.getBaseId()", "attr.data-state": "selected() ? \"active\" : \"inactive\"", "attr.data-orientation": "tabsContext.orientation$()", "hidden": "!selected()" } }, ngImport: i0 }); }
80
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxTabsContentDirective, isStandalone: true, selector: "[rdxTabsContent]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "role": "tabpanel", "tabindex": "0" }, properties: { "id": "contentId()", "attr.aria-labelledby": "triggerId()", "attr.data-state": "selected() ? \"active\" : \"inactive\"", "attr.data-orientation": "tabsContext.orientation()", "hidden": "!selected()" } }, ngImport: i0 }); }
53
81
  }
54
82
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsContentDirective, decorators: [{
55
83
  type: Directive,
@@ -59,10 +87,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
59
87
  host: {
60
88
  role: 'tabpanel',
61
89
  tabindex: '0',
62
- '[id]': 'tabsContext.getBaseId()',
63
- '[attr.aria-labelledby]': 'tabsContext.getBaseId()',
90
+ '[id]': 'contentId()',
91
+ '[attr.aria-labelledby]': 'triggerId()',
64
92
  '[attr.data-state]': 'selected() ? "active" : "inactive"',
65
- '[attr.data-orientation]': 'tabsContext.orientation$()',
93
+ '[attr.data-orientation]': 'tabsContext.orientation()',
66
94
  '[hidden]': '!selected()'
67
95
  }
68
96
  }]
@@ -70,91 +98,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
70
98
 
71
99
  class RdxTabsListDirective {
72
100
  constructor() {
73
- this.tabsContext = inject(TABS_CONTEXT_TOKEN);
101
+ this.tabsContext = inject(RDX_TABS_ROOT_TOKEN);
74
102
  }
75
103
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsListDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
76
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxTabsListDirective, isStandalone: true, selector: "[rdxTabsList]", host: { attributes: { "role": "tablist" }, properties: { "attr.aria-orientation": "tabsContext.orientation$()", "attr.data-orientation": "tabsContext.orientation$()" } }, ngImport: i0 }); }
104
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxTabsListDirective, isStandalone: true, selector: "[rdxTabsList]", host: { attributes: { "role": "tablist" }, properties: { "attr.aria-orientation": "tabsContext.orientation()", "attr.data-orientation": "tabsContext.orientation()" } }, hostDirectives: [{ directive: i1.RdxRovingFocusGroupDirective, inputs: ["dir", "dir", "orientation", "orientation", "loop", "loop"] }], ngImport: i0 }); }
77
105
  }
78
106
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsListDirective, decorators: [{
79
107
  type: Directive,
80
108
  args: [{
81
109
  selector: '[rdxTabsList]',
82
110
  standalone: true,
111
+ hostDirectives: [{ directive: RdxRovingFocusGroupDirective, inputs: ['dir', 'orientation', 'loop'] }],
83
112
  host: {
84
113
  role: 'tablist',
85
- '[attr.aria-orientation]': 'tabsContext.orientation$()',
86
- '[attr.data-orientation]': 'tabsContext.orientation$()'
114
+ '[attr.aria-orientation]': 'tabsContext.orientation()',
115
+ '[attr.data-orientation]': 'tabsContext.orientation()'
87
116
  }
88
117
  }]
89
118
  }] });
90
119
 
91
- class RdxTabsRootDirective {
92
- constructor() {
93
- this.tabsContext = inject(TABS_CONTEXT_TOKEN);
94
- this.orientation = 'horizontal';
95
- // Event handler called when the value changes.
96
- this.onValueChange = new EventEmitter();
97
- effect(() => {
98
- const value = this.tabsContext.value$();
99
- if (value !== undefined) {
100
- this.onValueChange.emit(value);
101
- }
102
- });
103
- }
104
- ngOnInit() {
105
- this.tabsContext.setOrientation(this.orientation);
106
- if (this.dir) {
107
- this.tabsContext.setDir(this.dir);
108
- }
109
- if (this.value) {
110
- this.tabsContext.setValue(this.value);
111
- }
112
- else if (this.defaultValue) {
113
- this.tabsContext.setValue(this.defaultValue);
114
- }
115
- }
116
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsRootDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
117
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxTabsRootDirective, isStandalone: true, selector: "[rdxTabsRoot]", inputs: { value: "value", defaultValue: "defaultValue", orientation: "orientation", dir: "dir" }, outputs: { onValueChange: "onValueChange" }, host: { properties: { "attr.data-orientation": "orientation", "attr.dir": "dir" } }, providers: [{ provide: TABS_CONTEXT_TOKEN, useExisting: RdxTabsContextService }], ngImport: i0 }); }
118
- }
119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsRootDirective, decorators: [{
120
- type: Directive,
121
- args: [{
122
- selector: '[rdxTabsRoot]',
123
- standalone: true,
124
- providers: [{ provide: TABS_CONTEXT_TOKEN, useExisting: RdxTabsContextService }],
125
- host: {
126
- '[attr.data-orientation]': 'orientation',
127
- '[attr.dir]': 'dir'
128
- }
129
- }]
130
- }], ctorParameters: () => [], propDecorators: { value: [{
131
- type: Input
132
- }], defaultValue: [{
133
- type: Input
134
- }], orientation: [{
135
- type: Input
136
- }], dir: [{
137
- type: Input
138
- }], onValueChange: [{
139
- type: Output
140
- }] } });
141
-
142
120
  class RdxTabsTriggerDirective {
143
121
  constructor() {
144
- this.tabsContext = inject(TABS_CONTEXT_TOKEN);
145
- // A unique value that associates the trigger with a content.
122
+ this.rdxRovingFocusItemDirective = inject(RdxRovingFocusItemDirective);
123
+ this.tabsContext = inject(RDX_TABS_ROOT_TOKEN);
124
+ /**
125
+ * A unique value that associates the trigger with a content.
126
+ */
146
127
  this.value = input.required();
147
- // When true, prevents the user from interacting with the tab.
128
+ /**
129
+ * When true, prevents the user from interacting with the tab.
130
+ */
148
131
  this.disabled = input(false, {
149
132
  transform: booleanAttribute
150
133
  });
151
- this.contentId = computed(() => `${this.tabsContext.getBaseId()}-content-${this.value()}`);
152
- this.triggerId = computed(() => `${this.tabsContext.getBaseId()}-trigger-${this.value}`);
153
- this.selected = computed(() => this.tabsContext.value$() === this.value());
134
+ this.contentId = computed(() => makeContentId(this.tabsContext.getBaseId(), this.value()));
135
+ this.triggerId = computed(() => makeTriggerId(this.tabsContext.getBaseId(), this.value()));
136
+ this.isSelected = computed(() => this.tabsContext.value() === this.value());
137
+ effect(() => (this.rdxRovingFocusItemDirective.active = this.isSelected()));
154
138
  }
155
139
  onMouseDown(event) {
140
+ // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)
141
+ // but not when the control key is pressed (avoiding MacOS right click)
156
142
  if (!this.disabled() && event.button === 0 && !event.ctrlKey) {
157
- this.tabsContext?.setValue(this.value());
143
+ this.tabsContext?.select(this.value());
158
144
  }
159
145
  else {
160
146
  // prevent focus to avoid accidental activation
@@ -163,30 +149,45 @@ class RdxTabsTriggerDirective {
163
149
  }
164
150
  onKeyDown(event) {
165
151
  if ([' ', 'Enter'].includes(event.key)) {
166
- this.tabsContext?.setValue(this.value());
152
+ this.tabsContext?.select(this.value());
153
+ }
154
+ }
155
+ onFocus() {
156
+ const isAutomaticActivation = this.tabsContext.activationMode() !== 'manual';
157
+ if (!this.isSelected() && !this.disabled() && isAutomaticActivation) {
158
+ this.tabsContext?.select(this.value());
167
159
  }
168
160
  }
169
161
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
170
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxTabsTriggerDirective, isStandalone: true, selector: "[rdxTabsTrigger]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button", "role": "tab" }, listeners: { "mousedown": "onMouseDown($event)", "keydown": "onKeyDown($event)" }, properties: { "id": "triggerId", "attr.aria-selected": "selected()", "attr.aria-controls": "contentId()", "attr.data-disabled": "disabled() ? '' : undefined", "attr.data-state": "selected() ? 'active' : 'inactive'" } }, ngImport: i0 }); }
162
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxTabsTriggerDirective, isStandalone: true, selector: "[rdxTabsTrigger]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button", "role": "tab" }, listeners: { "mousedown": "onMouseDown($event)", "keydown": "onKeyDown($event)", "focus": "onFocus()" }, properties: { "id": "triggerId()", "attr.aria-selected": "isSelected()", "attr.aria-controls": "contentId()", "attr.data-disabled": "disabled() ? '' : undefined", "disabled": "disabled()", "attr.data-state": "isSelected() ? 'active' : 'inactive'", "attr.data-orientation": "tabsContext.orientation()" } }, hostDirectives: [{ directive: i1.RdxRovingFocusItemDirective, inputs: ["focusable", "focusable", "active", "active", "allowShiftKey", "allowShiftKey"] }], ngImport: i0 }); }
171
163
  }
172
164
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsTriggerDirective, decorators: [{
173
165
  type: Directive,
174
166
  args: [{
175
167
  selector: '[rdxTabsTrigger]',
176
168
  standalone: true,
169
+ hostDirectives: [
170
+ {
171
+ directive: RdxRovingFocusItemDirective,
172
+ inputs: ['focusable', 'active', 'allowShiftKey']
173
+ }
174
+ ],
177
175
  host: {
178
176
  type: 'button',
179
177
  role: 'tab',
180
- '[id]': 'triggerId',
181
- '[attr.aria-selected]': 'selected()',
178
+ '[id]': 'triggerId()',
179
+ '[attr.aria-selected]': 'isSelected()',
182
180
  '[attr.aria-controls]': 'contentId()',
183
181
  '[attr.data-disabled]': "disabled() ? '' : undefined",
184
- '[attr.data-state]': "selected() ? 'active' : 'inactive'",
182
+ '[disabled]': 'disabled()',
183
+ '[attr.data-state]': "isSelected() ? 'active' : 'inactive'",
184
+ '[attr.data-orientation]': 'tabsContext.orientation()',
185
185
  '(mousedown)': 'onMouseDown($event)',
186
- '(keydown)': 'onKeyDown($event)'
186
+ '(keydown)': 'onKeyDown($event)',
187
+ '(focus)': 'onFocus()'
187
188
  }
188
189
  }]
189
- }] });
190
+ }], ctorParameters: () => [] });
190
191
 
191
192
  const tabsImports = [
192
193
  RdxTabsRootDirective,
@@ -203,14 +204,13 @@ class RdxTabsModule {
203
204
  RdxTabsContentDirective,
204
205
  RdxTabsListDirective,
205
206
  RdxTabsTriggerDirective] }); }
206
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsModule, providers: [RdxTabsContextService] }); }
207
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsModule }); }
207
208
  }
208
209
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxTabsModule, decorators: [{
209
210
  type: NgModule,
210
211
  args: [{
211
212
  imports: [...tabsImports],
212
- exports: [...tabsImports],
213
- providers: [RdxTabsContextService]
213
+ exports: [...tabsImports]
214
214
  }]
215
215
  }] });
216
216
 
@@ -218,5 +218,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
218
218
  * Generated bundle index. Do not edit.
219
219
  */
220
220
 
221
- export { RdxTabsContentDirective, RdxTabsContextService, RdxTabsListDirective, RdxTabsModule, RdxTabsRootDirective, RdxTabsTriggerDirective, TABS_CONTEXT_TOKEN };
221
+ export { RDX_TABS_ROOT_TOKEN, RdxTabsContentDirective, RdxTabsListDirective, RdxTabsModule, RdxTabsRootDirective, RdxTabsTriggerDirective };
222
222
  //# sourceMappingURL=radix-ng-primitives-tabs.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-tabs.mjs","sources":["../../../packages/primitives/tabs/src/tabs-context.service.ts","../../../packages/primitives/tabs/src/tabs-content.directive.ts","../../../packages/primitives/tabs/src/tabs-list.directive.ts","../../../packages/primitives/tabs/src/tabs-root.directive.ts","../../../packages/primitives/tabs/src/tabs-trigger.directive.ts","../../../packages/primitives/tabs/index.ts","../../../packages/primitives/tabs/radix-ng-primitives-tabs.ts"],"sourcesContent":["import { computed, Injectable, InjectionToken, signal } from '@angular/core';\n\nexport const TABS_CONTEXT_TOKEN = new InjectionToken<RdxTabsContextService>('TabsContext');\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RdxTabsContextService {\n private baseId = this.generateId();\n private value = signal<string | undefined>(undefined);\n private orientation = signal<string>('horizontal');\n private dir = signal<string | undefined>(undefined);\n private activationMode = signal<string>('automatic');\n\n readonly value$ = computed(() => this.value());\n readonly orientation$ = computed(() => this.orientation());\n readonly dir$ = computed(() => this.dir());\n readonly activationMode$ = computed(() => this.activationMode());\n\n setValue(value: string) {\n this.value.set(value);\n }\n\n setOrientation(orientation: string) {\n this.orientation.set(orientation);\n }\n\n setDir(dir: string) {\n this.dir.set(dir);\n }\n\n setActivationMode(mode: string) {\n this.activationMode.set(mode);\n }\n\n getBaseId() {\n return this.baseId;\n }\n\n private generateId() {\n return `tabs-${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n","import { computed, Directive, inject, input } from '@angular/core';\nimport { TABS_CONTEXT_TOKEN } from './tabs-context.service';\n\n@Directive({\n selector: '[rdxTabsContent]',\n standalone: true,\n host: {\n role: 'tabpanel',\n tabindex: '0',\n '[id]': 'tabsContext.getBaseId()',\n '[attr.aria-labelledby]': 'tabsContext.getBaseId()',\n '[attr.data-state]': 'selected() ? \"active\" : \"inactive\"',\n '[attr.data-orientation]': 'tabsContext.orientation$()',\n '[hidden]': '!selected()'\n }\n})\nexport class RdxTabsContentDirective {\n protected readonly tabsContext = inject(TABS_CONTEXT_TOKEN);\n\n readonly value = input.required<string>();\n\n protected readonly selected = computed(() => this.tabsContext.value$() === this.value());\n}\n","import { Directive, inject } from '@angular/core';\nimport { TABS_CONTEXT_TOKEN } from './tabs-context.service';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface TabsListProps {\n // When true, keyboard navigation will loop from last tab to first, and vice versa.\n loop?: boolean;\n}\n\n@Directive({\n selector: '[rdxTabsList]',\n standalone: true,\n host: {\n role: 'tablist',\n '[attr.aria-orientation]': 'tabsContext.orientation$()',\n '[attr.data-orientation]': 'tabsContext.orientation$()'\n }\n})\nexport class RdxTabsListDirective {\n protected readonly tabsContext = inject(TABS_CONTEXT_TOKEN);\n}\n","import { Directive, effect, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { RdxTabsContextService, TABS_CONTEXT_TOKEN } from './tabs-context.service';\n\nexport interface TabsProps {\n /** The value for the selected tab, if controlled */\n value?: string;\n /** The value of the tab to select by default, if uncontrolled */\n defaultValue?: string;\n /** A function called when a new tab is selected */\n onValueChange?: (value: string) => void;\n /**\n * The orientation the tabs are layed out.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n * @defaultValue horizontal\n */\n orientation?: string;\n /**\n * The direction of navigation between toolbar items.\n */\n dir?: string;\n /**\n * Whether a tab is activated automatically or manually.\n * @defaultValue automatic\n * */\n activationMode?: 'automatic' | 'manual';\n}\n\n@Directive({\n selector: '[rdxTabsRoot]',\n standalone: true,\n providers: [{ provide: TABS_CONTEXT_TOKEN, useExisting: RdxTabsContextService }],\n host: {\n '[attr.data-orientation]': 'orientation',\n '[attr.dir]': 'dir'\n }\n})\nexport class RdxTabsRootDirective implements OnInit {\n private readonly tabsContext = inject(TABS_CONTEXT_TOKEN);\n\n @Input() value?: string;\n @Input() defaultValue?: string;\n @Input() orientation = 'horizontal';\n @Input() dir?: string;\n\n // Event handler called when the value changes.\n @Output() onValueChange = new EventEmitter<string>();\n\n constructor() {\n effect(() => {\n const value = this.tabsContext.value$();\n if (value !== undefined) {\n this.onValueChange.emit(value);\n }\n });\n }\n\n ngOnInit() {\n this.tabsContext.setOrientation(this.orientation);\n\n if (this.dir) {\n this.tabsContext.setDir(this.dir);\n }\n\n if (this.value) {\n this.tabsContext.setValue(this.value);\n } else if (this.defaultValue) {\n this.tabsContext.setValue(this.defaultValue);\n }\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, inject, input, InputSignalWithTransform } from '@angular/core';\nimport { TABS_CONTEXT_TOKEN } from './tabs-context.service';\n\ninterface TabsTriggerProps {\n // When true, prevents the user from interacting with the tab.\n disabled: InputSignalWithTransform<boolean, BooleanInput>;\n}\n\n@Directive({\n selector: '[rdxTabsTrigger]',\n standalone: true,\n host: {\n type: 'button',\n role: 'tab',\n '[id]': 'triggerId',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-controls]': 'contentId()',\n '[attr.data-disabled]': \"disabled() ? '' : undefined\",\n '[attr.data-state]': \"selected() ? 'active' : 'inactive'\",\n '(mousedown)': 'onMouseDown($event)',\n '(keydown)': 'onKeyDown($event)'\n }\n})\nexport class RdxTabsTriggerDirective implements TabsTriggerProps {\n protected readonly tabsContext = inject(TABS_CONTEXT_TOKEN);\n\n // A unique value that associates the trigger with a content.\n readonly value = input.required<string>();\n\n // When true, prevents the user from interacting with the tab.\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute\n });\n\n protected readonly contentId = computed(() => `${this.tabsContext.getBaseId()}-content-${this.value()}`);\n protected readonly triggerId = computed(() => `${this.tabsContext.getBaseId()}-trigger-${this.value}`);\n\n protected readonly selected = computed(() => this.tabsContext.value$() === this.value());\n\n protected onMouseDown(event: MouseEvent) {\n if (!this.disabled() && event.button === 0 && !event.ctrlKey) {\n this.tabsContext?.setValue(this.value());\n } else {\n // prevent focus to avoid accidental activation\n event.preventDefault();\n }\n }\n\n protected onKeyDown(event: KeyboardEvent) {\n if ([' ', 'Enter'].includes(event.key)) {\n this.tabsContext?.setValue(this.value());\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxTabsContentDirective } from './src/tabs-content.directive';\nimport { RdxTabsContextService } from './src/tabs-context.service';\nimport { RdxTabsListDirective } from './src/tabs-list.directive';\nimport { RdxTabsRootDirective } from './src/tabs-root.directive';\nimport { RdxTabsTriggerDirective } from './src/tabs-trigger.directive';\n\nexport * from './src/tabs-content.directive';\nexport * from './src/tabs-context.service';\nexport * from './src/tabs-list.directive';\nexport * from './src/tabs-root.directive';\nexport * from './src/tabs-trigger.directive';\n\nconst tabsImports = [\n RdxTabsRootDirective,\n RdxTabsContentDirective,\n RdxTabsListDirective,\n RdxTabsTriggerDirective\n];\n\n@NgModule({\n imports: [...tabsImports],\n exports: [...tabsImports],\n providers: [RdxTabsContextService]\n})\nexport class RdxTabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"radix-ng-primitives-tabs.mjs","sources":["../../../packages/primitives/tabs/src/tabs-root.directive.ts","../../../packages/primitives/tabs/src/utils.ts","../../../packages/primitives/tabs/src/tabs-content.directive.ts","../../../packages/primitives/tabs/src/tabs-list.directive.ts","../../../packages/primitives/tabs/src/tabs-trigger.directive.ts","../../../packages/primitives/tabs/index.ts","../../../packages/primitives/tabs/radix-ng-primitives-tabs.ts"],"sourcesContent":["import { Directive, InjectionToken, input, model, OnInit, output } from '@angular/core';\n\nexport interface TabsProps {\n /** The value for the selected tab, if controlled */\n value?: string;\n /** The value of the tab to select by default, if uncontrolled */\n defaultValue?: string;\n /** A function called when a new tab is selected */\n onValueChange?: (value: string) => void;\n /**\n * The orientation the tabs are layed out.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n * @defaultValue horizontal\n */\n orientation?: string;\n /**\n * The direction of navigation between toolbar items.\n */\n dir?: string;\n /**\n * Whether a tab is activated automatically or manually.\n * @defaultValue automatic\n * */\n activationMode?: 'automatic' | 'manual';\n}\n\nexport type DataOrientation = 'vertical' | 'horizontal';\n\nexport const RDX_TABS_ROOT_TOKEN = new InjectionToken<RdxTabsRootDirective>('RdxTabsRootDirective');\n\n@Directive({\n selector: '[rdxTabsRoot]',\n standalone: true,\n providers: [\n { provide: RDX_TABS_ROOT_TOKEN, useExisting: RdxTabsRootDirective }],\n host: {\n '[attr.data-orientation]': 'orientation()',\n '[attr.dir]': 'dir()'\n }\n})\nexport class RdxTabsRootDirective implements OnInit {\n /**\n * The controlled value of the tab to activate. Should be used in conjunction with `onValueChange`.\n */\n readonly value = model<string>();\n\n readonly defaultValue = input<string>();\n\n /**\n * When automatic, tabs are activated when receiving focus. When manual, tabs are activated when clicked.\n */\n readonly activationMode = input<'automatic' | 'manual'>('automatic');\n\n /**\n * The orientation of the component.\n */\n readonly orientation = input<DataOrientation>('horizontal');\n\n readonly dir = input<string>('ltr');\n\n /**\n * Event handler called when the value changes.\n */\n readonly onValueChange = output<string>();\n\n ngOnInit() {\n if (this.defaultValue()) {\n this.value.set(this.defaultValue());\n }\n }\n\n select(value: string) {\n this.value.set(value);\n this.onValueChange.emit(value);\n }\n\n /** @ignore */\n getBaseId() {\n return `tabs-${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n","export function makeTriggerId(baseId: string, value: string | number) {\n return `${baseId}-trigger-${value}`;\n}\n\nexport function makeContentId(baseId: string, value: string | number) {\n return `${baseId}-content-${value}`;\n}\n","import { computed, Directive, inject, input } from '@angular/core';\nimport { RDX_TABS_ROOT_TOKEN } from './tabs-root.directive';\nimport { makeContentId, makeTriggerId } from './utils';\n\n@Directive({\n selector: '[rdxTabsContent]',\n standalone: true,\n host: {\n role: 'tabpanel',\n tabindex: '0',\n '[id]': 'contentId()',\n '[attr.aria-labelledby]': 'triggerId()',\n '[attr.data-state]': 'selected() ? \"active\" : \"inactive\"',\n '[attr.data-orientation]': 'tabsContext.orientation()',\n '[hidden]': '!selected()'\n }\n})\nexport class RdxTabsContentDirective {\n protected readonly tabsContext = inject(RDX_TABS_ROOT_TOKEN);\n\n /**\n * A unique value that associates the content with a trigger.\n */\n readonly value = input.required<string>();\n\n protected readonly contentId = computed(() => makeContentId(this.tabsContext.getBaseId(), this.value()));\n protected readonly triggerId = computed(() => makeTriggerId(this.tabsContext.getBaseId(), this.value()));\n\n protected readonly selected = computed(() => this.tabsContext.value() === this.value());\n}\n","import { Directive, inject } from '@angular/core';\nimport { RdxRovingFocusGroupDirective } from '@radix-ng/primitives/roving-focus';\nimport { RDX_TABS_ROOT_TOKEN } from './tabs-root.directive';\n\nexport interface TabsListProps {\n // When true, keyboard navigation will loop from last tab to first, and vice versa.\n loop?: boolean;\n}\n\n@Directive({\n selector: '[rdxTabsList]',\n standalone: true,\n hostDirectives: [{ directive: RdxRovingFocusGroupDirective, inputs: ['dir', 'orientation', 'loop'] }],\n host: {\n role: 'tablist',\n '[attr.aria-orientation]': 'tabsContext.orientation()',\n '[attr.data-orientation]': 'tabsContext.orientation()'\n }\n})\nexport class RdxTabsListDirective {\n protected readonly tabsContext = inject(RDX_TABS_ROOT_TOKEN);\n}\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { booleanAttribute, computed, Directive, effect, inject, input, InputSignalWithTransform } from '@angular/core';\nimport { RdxRovingFocusItemDirective } from '@radix-ng/primitives/roving-focus';\nimport { RDX_TABS_ROOT_TOKEN } from './tabs-root.directive';\nimport { makeContentId, makeTriggerId } from './utils';\n\ninterface TabsTriggerProps {\n // When true, prevents the user from interacting with the tab.\n disabled: InputSignalWithTransform<boolean, BooleanInput>;\n}\n\n@Directive({\n selector: '[rdxTabsTrigger]',\n standalone: true,\n hostDirectives: [\n {\n directive: RdxRovingFocusItemDirective,\n inputs: ['focusable', 'active', 'allowShiftKey']\n }\n ],\n\n host: {\n type: 'button',\n role: 'tab',\n '[id]': 'triggerId()',\n '[attr.aria-selected]': 'isSelected()',\n '[attr.aria-controls]': 'contentId()',\n '[attr.data-disabled]': \"disabled() ? '' : undefined\",\n '[disabled]': 'disabled()',\n '[attr.data-state]': \"isSelected() ? 'active' : 'inactive'\",\n '[attr.data-orientation]': 'tabsContext.orientation()',\n '(mousedown)': 'onMouseDown($event)',\n '(keydown)': 'onKeyDown($event)',\n '(focus)': 'onFocus()'\n }\n})\nexport class RdxTabsTriggerDirective implements TabsTriggerProps {\n private readonly rdxRovingFocusItemDirective = inject(RdxRovingFocusItemDirective);\n\n protected readonly tabsContext = inject(RDX_TABS_ROOT_TOKEN);\n\n /**\n * A unique value that associates the trigger with a content.\n */\n readonly value = input.required<string>();\n\n /**\n * When true, prevents the user from interacting with the tab.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute\n });\n\n protected readonly contentId = computed(() => makeContentId(this.tabsContext.getBaseId(), this.value()));\n protected readonly triggerId = computed(() => makeTriggerId(this.tabsContext.getBaseId(), this.value()));\n\n protected readonly isSelected = computed(() => this.tabsContext.value() === this.value());\n\n constructor() {\n effect(() => (this.rdxRovingFocusItemDirective.active = this.isSelected()));\n }\n\n protected onMouseDown(event: MouseEvent) {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!this.disabled() && event.button === 0 && !event.ctrlKey) {\n this.tabsContext?.select(this.value());\n } else {\n // prevent focus to avoid accidental activation\n event.preventDefault();\n }\n }\n\n protected onKeyDown(event: KeyboardEvent) {\n if ([' ', 'Enter'].includes(event.key)) {\n this.tabsContext?.select(this.value());\n }\n }\n\n protected onFocus() {\n const isAutomaticActivation = this.tabsContext.activationMode() !== 'manual';\n if (!this.isSelected() && !this.disabled() && isAutomaticActivation) {\n this.tabsContext?.select(this.value());\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxTabsContentDirective } from './src/tabs-content.directive';\nimport { RdxTabsListDirective } from './src/tabs-list.directive';\nimport { RdxTabsRootDirective } from './src/tabs-root.directive';\nimport { RdxTabsTriggerDirective } from './src/tabs-trigger.directive';\n\nexport * from './src/tabs-content.directive';\nexport * from './src/tabs-list.directive';\nexport * from './src/tabs-root.directive';\nexport * from './src/tabs-trigger.directive';\n\nconst tabsImports = [\n RdxTabsRootDirective,\n RdxTabsContentDirective,\n RdxTabsListDirective,\n RdxTabsTriggerDirective\n];\n\n@NgModule({\n imports: [...tabsImports],\n exports: [...tabsImports]\n})\nexport class RdxTabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -62,7 +62,7 @@ class RdxToggleGroupItemDirective {
62
62
  // TODO
63
63
  }
64
64
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxToggleGroupItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
65
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.11", type: RdxToggleGroupItemDirective, isStandalone: true, selector: "[rdxToggleGroupItem]", inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute] }, host: { attributes: { "role": "radio" }, listeners: { "click": "toggle()" }, properties: { "attr.aria-checked": "checked", "attr.aria-disabled": "disabled || toggleGroup.disabled", "attr.aria-pressed": "undefined", "attr.data-disabled": "disabled || toggleGroup.disabled", "attr.data-state": "checked ? \"on\" : \"off\"", "attr.data-orientation": "toggleGroup.orientation" } }, providers: [{ provide: RdxToggleGroupItemToken, useExisting: RdxToggleGroupItemDirective }], exportAs: ["rdxToggleGroupItem"], usesOnChanges: true, ngImport: i0 }); }
65
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.11", type: RdxToggleGroupItemDirective, isStandalone: true, selector: "[rdxToggleGroupItem]", inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute] }, host: { attributes: { "role": "radio" }, listeners: { "click": "toggle()", "focus": "focus()" }, properties: { "attr.aria-checked": "checked", "attr.aria-disabled": "disabled || toggleGroup.disabled", "attr.aria-pressed": "undefined", "attr.data-disabled": "disabled || toggleGroup.disabled", "attr.data-state": "checked ? \"on\" : \"off\"", "attr.data-orientation": "toggleGroup.orientation" } }, providers: [{ provide: RdxToggleGroupItemToken, useExisting: RdxToggleGroupItemDirective }], exportAs: ["rdxToggleGroupItem"], usesOnChanges: true, ngImport: i0 }); }
66
66
  }
67
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxToggleGroupItemDirective, decorators: [{
68
68
  type: Directive,
@@ -79,7 +79,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
79
79
  '[attr.data-disabled]': 'disabled || toggleGroup.disabled',
80
80
  '[attr.data-state]': 'checked ? "on" : "off"',
81
81
  '[attr.data-orientation]': 'toggleGroup.orientation',
82
- '(click)': 'toggle()'
82
+ '(click)': 'toggle()',
83
+ '(focus)': 'focus()'
83
84
  }
84
85
  }]
85
86
  }], propDecorators: { value: [{