@snatuva/primitives 0.0.3 → 0.0.4

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.
package/README.md CHANGED
@@ -42,11 +42,12 @@ import {
42
42
 
43
43
  - `apTabs` — root tabs scope/state provider.
44
44
  - `apTabList` — list container for tab triggers.
45
+ - Optional input: `orientation: 'horizontal' | 'vertical'` (default: 'horizontal')
45
46
  - `apTabTrigger` — interactive tab trigger.
46
47
  - Required input: `tabId: string`
47
48
  - Optional input: `disabled: boolean`
48
49
  - `apTabPanel` — panel region.
49
- - Input: `id` (forwarded to ARIA tab panel primitive value)
50
+ - Required input: `id: string` (used for ARIA relationships and state management)
50
51
  - Optional input: `disabled: boolean`
51
52
  - `apTabContent` — structural directive to conditionally render active panel content.
52
53
  - Required input: `tabId: string`
@@ -62,11 +63,11 @@ import {
62
63
  </div>
63
64
 
64
65
  <!-- Automatically gets role="tabpanel", aria-labelledby, aria-hidden -->
65
- <section apTabPanel id="overview" value="overview">
66
+ <section apTabPanel id="overview">
66
67
  <p>Overview content</p>
67
68
  </section>
68
69
 
69
- <section apTabPanel id="details" value="details">
70
+ <section apTabPanel id="details">
70
71
  <p>Details content</p>
71
72
  </section>
72
73
  </div>
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, computed, Injectable, inject, ElementRef, HostBinding, Input, Directive, Injector, runInInjectionContext, effect, HostListener, ContentChildren, TemplateRef, contentChild, contentChildren, ViewContainerRef } from '@angular/core';
2
+ import { signal, computed, Injectable, Directive, inject, Input, ElementRef, HostBinding, effect, input, TemplateRef, contentChild, contentChildren, ViewContainerRef, Injector, runInInjectionContext } from '@angular/core';
3
3
  import * as i1 from '@angular/aria/tabs';
4
- import { Tab, Tabs, TabPanel, TabList } from '@angular/aria/tabs';
4
+ import { Tabs, TabPanel, Tab, TabList } from '@angular/aria/tabs';
5
5
  import { ComponentHarness } from '@angular/cdk/testing';
6
6
  import { Overlay } from '@angular/cdk/overlay';
7
7
  import { TemplatePortal } from '@angular/cdk/portal';
@@ -26,7 +26,7 @@ class TabsState {
26
26
  this._activeId.set(this._panels()[0]?.id ?? null);
27
27
  }
28
28
  }
29
- select(id) {
29
+ activate(id) {
30
30
  const panel = this._panels().find(p => p.id === id && !p.disabled);
31
31
  if (panel) {
32
32
  this._activeId.set(id);
@@ -39,126 +39,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
39
39
  type: Injectable
40
40
  }] });
41
41
 
42
- class TabTriggerDirective {
43
- tabId = '';
44
- disabled = false;
45
- state = inject(TabsState);
46
- el = inject((ElementRef));
47
- // constructor(@Host() private tabs: TabsDirective) { }
48
- activate() {
49
- this.state.select(this.tabId);
50
- }
51
- focus() {
52
- this.el.nativeElement.focus();
53
- }
54
- // @HostListener('keydown', ['$event'])
55
- // onKeydown(event: KeyboardEvent) {
56
- // this.tabs.handleKeydown(event);
57
- // }
58
- tabindex = '-1';
59
- get id() {
60
- return `ap-tab-${this.tabId}`;
61
- }
62
- get controls() {
63
- return `ap-panel-${this.tabId}`;
64
- }
65
- setActive(isActive) {
66
- this.tabindex = isActive ? '0' : '-1';
67
- }
68
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
69
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: TabTriggerDirective, isStandalone: true, selector: "[apTabTrigger]", inputs: { tabId: "tabId", disabled: "disabled" }, host: { attributes: { "role": "tab" }, listeners: { "click": "activate()" }, properties: { "attr.aria-selected": "state.activeId() === tabId", "attr.aria-disabled": "disabled", "attr.tabindex": "this.tabindex", "attr.id": "this.id", "attr.aria-controls": "this.controls" } }, providers: [
70
- { provide: Tab, useExisting: Tab }
71
- ], hostDirectives: [{ directive: i1.Tab, inputs: ["value", "tabId"] }], ngImport: i0 });
72
- }
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabTriggerDirective, decorators: [{
74
- type: Directive,
75
- args: [{
76
- selector: '[apTabTrigger]',
77
- standalone: true,
78
- host: {
79
- 'role': 'tab',
80
- '[attr.aria-selected]': 'state.activeId() === tabId',
81
- '[attr.aria-disabled]': 'disabled',
82
- '(click)': 'activate()'
83
- },
84
- providers: [
85
- { provide: Tab, useExisting: Tab }
86
- ],
87
- hostDirectives: [{
88
- directive: Tab,
89
- inputs: ['value: tabId']
90
- }]
91
- }]
92
- }], propDecorators: { tabId: [{
93
- type: Input,
94
- args: [{ required: true }]
95
- }], disabled: [{
96
- type: Input
97
- }], tabindex: [{
98
- type: HostBinding,
99
- args: ['attr.tabindex']
100
- }], id: [{
101
- type: HostBinding,
102
- args: ['attr.id']
103
- }], controls: [{
104
- type: HostBinding,
105
- args: ['attr.aria-controls']
106
- }] } });
107
-
108
42
  class TabsDirective {
109
- state;
110
- // state = inject(TabsState);
111
- get activeTab() { return this.state.activeId; }
112
- triggers;
113
- // private readonly keyboard = new TabsKeyboardController();
114
- injector = inject(Injector);
115
- constructor(state) {
116
- this.state = state;
117
- }
118
- ngAfterContentInit() {
119
- const triggers = this.triggers.toArray();
120
- // this.keyboard.init(triggers);
121
- runInInjectionContext(this.injector, () => {
122
- effect(() => {
123
- const id = this.state.activeId();
124
- triggers.forEach(trigger => trigger.setActive(trigger.tabId === id));
125
- if (id) {
126
- // this.keyboard.setActiveById(id);
127
- }
128
- });
129
- });
130
- }
131
- onKeydown(event) {
132
- const triggers = this.triggers.toArray();
133
- const currentIndex = triggers.findIndex(t => t.tabId === this.state.activeId());
134
- let newIndex = currentIndex;
135
- switch (event.key) {
136
- case 'ArrowLeft':
137
- newIndex = currentIndex > 0 ? currentIndex - 1 : triggers.length - 1;
138
- break;
139
- case 'ArrowRight':
140
- newIndex = currentIndex < triggers.length - 1 ? currentIndex + 1 : 0;
141
- break;
142
- case 'Home':
143
- newIndex = 0;
144
- break;
145
- case 'End':
146
- newIndex = triggers.length - 1;
147
- break;
148
- default:
149
- return;
150
- }
151
- event.preventDefault();
152
- const targetTrigger = triggers[newIndex];
153
- if (targetTrigger && !targetTrigger.disabled) {
154
- this.state.select(targetTrigger.tabId);
155
- targetTrigger.focus();
156
- }
157
- }
158
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabsDirective, deps: [{ token: TabsState }], target: i0.ɵɵFactoryTarget.Directive });
159
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: TabsDirective, isStandalone: true, selector: "[apTabs]", host: { listeners: { "keydown": "onKeydown($event)" } }, providers: [
43
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
44
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: TabsDirective, isStandalone: true, selector: "[apTabs]", providers: [
160
45
  TabsState
161
- ], queries: [{ propertyName: "triggers", predicate: TabTriggerDirective, descendants: true }], exportAs: ["apTabs"], hostDirectives: [{ directive: i1.Tabs }], ngImport: i0 });
46
+ ], exportAs: ["apTabs"], hostDirectives: [{ directive: i1.Tabs }], ngImport: i0 });
162
47
  }
163
48
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabsDirective, decorators: [{
164
49
  type: Directive,
@@ -173,13 +58,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
173
58
  directive: Tabs
174
59
  }]
175
60
  }]
176
- }], ctorParameters: () => [{ type: TabsState }], propDecorators: { triggers: [{
177
- type: ContentChildren,
178
- args: [TabTriggerDirective, { descendants: true }]
179
- }], onKeydown: [{
180
- type: HostListener,
181
- args: ['keydown', ['$event']]
182
- }] } });
61
+ }] });
183
62
 
184
63
  class TabPanelDirective {
185
64
  // 1. Inject the host directive instance
@@ -197,17 +76,15 @@ class TabPanelDirective {
197
76
  this.state.unregister(this.ariaPanel.value());
198
77
  }
199
78
  isActive() {
200
- // 3. Compare the active state against the primitive's value
201
79
  return this.state.activeId() === this.ariaPanel.value();
202
80
  }
203
81
  onKeydown(event) {
204
- // Allow escape key to work within panels
205
82
  if (event.key === 'Escape') {
206
83
  event.stopPropagation();
207
84
  }
208
85
  }
209
86
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabPanelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
210
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: TabPanelDirective, isStandalone: true, selector: "[apTabPanel]", inputs: { disabled: "disabled" }, host: { attributes: { "role": "tabpanel" }, listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.aria-labelledby": "`ap-tab-${ariaPanel.value}`", "attr.id": "`ap-panel-${ariaPanel.value}`", "style.display": "isActive() ? \"block\" : \"none\"", "attr.aria-hidden": "!isActive()" } }, exportAs: ["apTabPanel"], hostDirectives: [{ directive: i1.TabPanel, inputs: ["id", "id", "value", "value"] }], ngImport: i0 });
87
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: TabPanelDirective, isStandalone: true, selector: "[apTabPanel]", inputs: { disabled: "disabled" }, host: { attributes: { "role": "tabpanel" }, properties: { "attr.aria-labelledby": "`ap-tab-${ariaPanel.value()}`", "attr.id": "`ap-panel-${ariaPanel.value()}`", "style.display": "isActive() ? \"block\" : \"none\"", "hidden": "!isActive()" } }, exportAs: ["apTabPanel"], hostDirectives: [{ directive: i1.TabPanel, inputs: ["id", "id", "value", "value"] }], ngImport: i0 });
211
88
  }
212
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabPanelDirective, decorators: [{
213
90
  type: Directive,
@@ -217,12 +94,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
217
94
  exportAs: 'apTabPanel',
218
95
  host: {
219
96
  'role': 'tabpanel',
220
- '(keydown)': 'onKeydown($event)',
221
- // Use the ID from the injected ariaPanel
222
- '[attr.aria-labelledby]': '`ap-tab-${ariaPanel.value}`',
223
- '[attr.id]': '`ap-panel-${ariaPanel.value}`',
97
+ '[attr.aria-labelledby]': '`ap-tab-${ariaPanel.value()}`',
98
+ '[attr.id]': '`ap-panel-${ariaPanel.value()}`',
224
99
  '[style.display]': 'isActive() ? "block" : "none"',
225
- '[attr.aria-hidden]': '!isActive()'
100
+ '[hidden]': '!isActive()'
226
101
  },
227
102
  hostDirectives: [{
228
103
  directive: TabPanel,
@@ -235,6 +110,88 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
235
110
  type: Input
236
111
  }] } });
237
112
 
113
+ class TabTriggerDirective {
114
+ tabId = '';
115
+ disabled = false;
116
+ state = inject(TabsState);
117
+ el = inject((ElementRef));
118
+ activate() {
119
+ this.state.activate(this.tabId);
120
+ }
121
+ onKeydown(event) {
122
+ const active = this.state.panels().filter(t => !t.disabled);
123
+ const idx = active.findIndex(t => t.id === this.tabId);
124
+ let next;
125
+ switch (event.key) {
126
+ case 'ArrowRight':
127
+ case 'ArrowDown':
128
+ next = active[(idx + 1) % active.length];
129
+ break;
130
+ case 'ArrowLeft':
131
+ case 'ArrowUp':
132
+ next = active[(idx - 1 + active.length) % active.length];
133
+ break;
134
+ case 'Home':
135
+ next = active[0];
136
+ break;
137
+ case 'End':
138
+ next = active[active.length - 1];
139
+ break;
140
+ }
141
+ if (next) {
142
+ event.preventDefault();
143
+ this.state.activate(next.id);
144
+ this.focus();
145
+ }
146
+ }
147
+ focus() {
148
+ this.el.nativeElement.focus();
149
+ }
150
+ get id() {
151
+ return `ap-tab-${this.tabId}`;
152
+ }
153
+ get controls() {
154
+ return `ap-panel-${this.tabId}`;
155
+ }
156
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
157
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: TabTriggerDirective, isStandalone: true, selector: "[apTabTrigger]", inputs: { tabId: "tabId", disabled: "disabled" }, host: { attributes: { "role": "tab" }, listeners: { "keydown": "onKeydown($event)", "click": "activate()" }, properties: { "attr.aria-selected": "state.activeId() === tabId", "attr.aria-disabled": "disabled", "tabindex": "state.activeId() === tabId ? \"0\" : \"-1\"", "attr.id": "this.id", "attr.aria-controls": "this.controls" } }, providers: [
158
+ { provide: Tab, useExisting: Tab }
159
+ ], hostDirectives: [{ directive: i1.Tab, inputs: ["value", "tabId"] }], ngImport: i0 });
160
+ }
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabTriggerDirective, decorators: [{
162
+ type: Directive,
163
+ args: [{
164
+ selector: '[apTabTrigger]',
165
+ standalone: true,
166
+ host: {
167
+ 'role': 'tab',
168
+ '[attr.aria-selected]': 'state.activeId() === tabId',
169
+ '[attr.aria-disabled]': 'disabled',
170
+ '[tabindex]': 'state.activeId() === tabId ? "0" : "-1"',
171
+ '(keydown)': 'onKeydown($event)',
172
+ '(click)': 'activate()'
173
+ },
174
+ providers: [
175
+ { provide: Tab, useExisting: Tab }
176
+ ],
177
+ hostDirectives: [{
178
+ directive: Tab,
179
+ inputs: ['value: tabId']
180
+ }]
181
+ }]
182
+ }], propDecorators: { tabId: [{
183
+ type: Input,
184
+ args: [{ required: true }]
185
+ }], disabled: [{
186
+ type: Input
187
+ }], id: [{
188
+ type: HostBinding,
189
+ args: ['attr.id']
190
+ }], controls: [{
191
+ type: HostBinding,
192
+ args: ['attr.aria-controls']
193
+ }] } });
194
+
238
195
  class TabContentDirective {
239
196
  tabId;
240
197
  state = inject(TabsState);
@@ -260,8 +217,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
260
217
  }] } });
261
218
 
262
219
  class TabListDirective {
220
+ //TODO: We can use the input() function to create a reactive input for orientation, which will automatically update the aria-orientation attribute when it changes.
221
+ orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
263
222
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabListDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
264
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: TabListDirective, isStandalone: true, selector: "[apTabList]", host: { attributes: { "role": "tablist" } }, hostDirectives: [{ directive: i1.TabList }], ngImport: i0 });
223
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.6", type: TabListDirective, isStandalone: true, selector: "[apTabList]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "tablist" }, properties: { "attr.aria-orientation": "orientation()" } }, hostDirectives: [{ directive: i1.TabList }], ngImport: i0 });
265
224
  }
266
225
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TabListDirective, decorators: [{
267
226
  type: Directive,
@@ -269,13 +228,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
269
228
  selector: '[apTabList]',
270
229
  standalone: true,
271
230
  host: {
272
- 'role': 'tablist'
231
+ 'role': 'tablist',
232
+ '[attr.aria-orientation]': 'orientation()',
273
233
  },
274
234
  hostDirectives: [{
275
235
  directive: TabList
276
236
  }]
277
237
  }]
278
- }] });
238
+ }], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }] } });
279
239
 
280
240
  class TabTriggerHarness extends ComponentHarness {
281
241
  static hostSelector = '[apTabTrigger]';
@@ -1 +1 @@
1
- {"version":3,"file":"snatuva-primitives.mjs","sources":["../../../projects/primitives/src/lib/tabs/tabs.state.ts","../../../projects/primitives/src/lib/tabs/tab-trigger.directive.ts","../../../projects/primitives/src/lib/tabs/tabs.directive.ts","../../../projects/primitives/src/lib/tabs/tab-panel.directive.ts","../../../projects/primitives/src/lib/tabs/tab-content.directive.ts","../../../projects/primitives/src/lib/tabs/tabs-list.directive.ts","../../../projects/primitives/src/lib/tabs/tabs.harness.ts","../../../projects/primitives/src/lib/tooltip/tooltip.state.ts","../../../projects/primitives/src/lib/tooltip/tooltip-trigger.directive.ts","../../../projects/primitives/src/lib/tooltip/tooltip-content.directive.ts","../../../projects/primitives/src/lib/tooltip/tooltip.overlay.ts","../../../projects/primitives/src/lib/tooltip/tooltip.directive.ts","../../../projects/primitives/src/lib/tooltip/tooltip.harness.ts","../../../projects/primitives/src/public-api.ts","../../../projects/primitives/src/snatuva-primitives.ts"],"sourcesContent":["import { signal, computed, Inject, Injectable } from '@angular/core';\n\nexport interface TabPanel {\n id: string;\n disabled: boolean;\n}\n\n@Injectable()\nexport class TabsState {\n private readonly _panels = signal<TabPanel[]>([]);\n private readonly _activeId = signal<string | null>(null);\n\n readonly panels = this._panels.asReadonly();\n readonly activeId = this._activeId.asReadonly();\n\n readonly activePanel = computed(() =>\n this._panels().find(p => p.id === this._activeId())\n );\n\n register(panel: TabPanel): void {\n this._panels.update(p => [...p, panel]);\n\n if (!this._activeId()) {\n this._activeId.set(panel.id);\n }\n }\n\n unregister(id: string): void {\n this._panels.update(p => p.filter(x => x.id !== id));\n\n if (this._activeId() === id) {\n this._activeId.set(this._panels()[0]?.id ?? null);\n }\n }\n\n select(id: string): void {\n const panel = this._panels().find(p => p.id === id && !p.disabled);\n if (panel) {\n this._activeId.set(id);\n }\n }\n}\n","import { Directive, ElementRef, Host, HostBinding, HostListener, inject, Input, input } from '@angular/core';\nimport { FocusableOption } from '@angular/cdk/a11y';\nimport { TabsState } from './tabs.state';\nimport { Tab } from '@angular/aria/tabs';\n\n@Directive({\n selector: '[apTabTrigger]',\n standalone: true,\n host: {\n 'role': 'tab',\n '[attr.aria-selected]': 'state.activeId() === tabId',\n '[attr.aria-disabled]': 'disabled',\n '(click)': 'activate()'\n },\n providers: [\n { provide: Tab, useExisting: Tab }\n ],\n hostDirectives: [{\n directive: Tab,\n inputs: ['value: tabId']\n }]\n})\nexport class TabTriggerDirective implements FocusableOption {\n @Input({ required: true }) tabId: string = '';\n @Input() disabled = false;\n state = inject(TabsState);\n el = inject(ElementRef<HTMLElement>);\n // constructor(@Host() private tabs: TabsDirective) { }\n activate(): void {\n this.state.select(this.tabId);\n }\n\n focus(): void {\n this.el.nativeElement.focus();\n }\n\n // @HostListener('keydown', ['$event'])\n // onKeydown(event: KeyboardEvent) {\n // this.tabs.handleKeydown(event);\n // }\n\n @HostBinding('attr.tabindex')\n tabindex = '-1';\n\n @HostBinding('attr.id')\n get id() {\n return `ap-tab-${this.tabId}`;\n }\n\n @HostBinding('attr.aria-controls')\n get controls() {\n return `ap-panel-${this.tabId}`;\n }\n\n\n setActive(isActive: boolean): void {\n this.tabindex = isActive ? '0' : '-1';\n }\n}\n","import { AfterContentInit, ContentChildren, Directive, effect, HostListener, inject, Injector, QueryList, runInInjectionContext } from '@angular/core';\nimport { TabsState } from './tabs.state';\nimport { TabTriggerDirective } from './tab-trigger.directive';\n// import { TabsKeyboardController } from './tabs.keyboard';\nimport { Tabs } from '@angular/aria/tabs';\n\n@Directive({\n selector: '[apTabs]',\n standalone: true,\n exportAs: 'apTabs',\n providers: [\n TabsState\n ],\n hostDirectives: [{\n directive: Tabs\n }]\n})\nexport class TabsDirective implements AfterContentInit {\n // state = inject(TabsState);\n get activeTab() { return this.state.activeId; }\n @ContentChildren(TabTriggerDirective, { descendants: true })\n private readonly triggers!: QueryList<TabTriggerDirective>;\n\n // private readonly keyboard = new TabsKeyboardController();\n private readonly injector = inject(Injector);\n constructor(public readonly state: TabsState) {\n }\n\n ngAfterContentInit(): void {\n const triggers = this.triggers.toArray();\n\n // this.keyboard.init(triggers);\n\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const id = this.state.activeId();\n\n triggers.forEach(trigger =>\n trigger.setActive(trigger.tabId === id)\n );\n\n if (id) {\n // this.keyboard.setActiveById(id);\n }\n });\n });\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent) {\n const triggers = this.triggers.toArray();\n const currentIndex = triggers.findIndex(t => t.tabId === this.state.activeId());\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n newIndex = currentIndex > 0 ? currentIndex - 1 : triggers.length - 1;\n break;\n case 'ArrowRight':\n newIndex = currentIndex < triggers.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'Home':\n newIndex = 0;\n break;\n case 'End':\n newIndex = triggers.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n const targetTrigger = triggers[newIndex];\n if (targetTrigger && !targetTrigger.disabled) {\n this.state.select(targetTrigger.tabId);\n targetTrigger.focus();\n }\n }\n\n // // onKeydown(event: KeyboardEvent) {\n // // this.keyboard.handleKeydown(event);\n // // }\n\n\n\n}\n","import { Directive, OnInit, OnDestroy, inject, Input } from '@angular/core';\nimport { TabsState } from './tabs.state';\nimport { TabPanel } from '@angular/aria/tabs';\n\n@Directive({\n selector: '[apTabPanel]',\n standalone: true,\n exportAs: 'apTabPanel',\n host: {\n 'role': 'tabpanel',\n '(keydown)': 'onKeydown($event)',\n // Use the ID from the injected ariaPanel\n '[attr.aria-labelledby]': '`ap-tab-${ariaPanel.value}`',\n '[attr.id]': '`ap-panel-${ariaPanel.value}`',\n '[style.display]': 'isActive() ? \"block\" : \"none\"',\n '[attr.aria-hidden]': '!isActive()'\n },\n hostDirectives: [{\n directive: TabPanel,\n // We map the public \"id\" attribute of your directive \n // to the \"value\" property of the TabPanel primitive.\n inputs: ['id', 'value']\n }]\n})\nexport class TabPanelDirective implements OnInit, OnDestroy {\n // 1. Inject the host directive instance\n protected ariaPanel = inject(TabPanel);\n\n @Input() disabled = false;\n private state = inject(TabsState);\n\n ngOnInit(): void {\n // 2. Use ariaPanel.value (which holds the 'id' passed by the user)\n this.state.register({\n id: this.ariaPanel.value() as string,\n disabled: this.disabled\n });\n }\n\n ngOnDestroy(): void {\n this.state.unregister(this.ariaPanel.value() as string);\n }\n\n isActive(): boolean {\n // 3. Compare the active state against the primitive's value\n return this.state.activeId() === this.ariaPanel.value();\n }\n\n onKeydown(event: KeyboardEvent): void {\n // Allow escape key to work within panels\n if (event.key === 'Escape') {\n event.stopPropagation();\n }\n }\n}","import { Directive, Input, TemplateRef, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { TabsState } from './tabs.state';\n\n@Directive({\n selector: '[apTabContent]'\n})\nexport class TabContentDirective {\n @Input({ required: true }) tabId!: string;\n private state = inject(TabsState);\n constructor(\n template: TemplateRef<unknown>,\n vcr: ViewContainerRef\n ) {\n effect(() => {\n vcr.clear();\n\n if (this.state.activeId() === this.tabId) {\n vcr.createEmbeddedView(template);\n }\n });\n }\n}\n","import { Directive } from '@angular/core';\nimport { TabList } from '@angular/aria/tabs';\n\n@Directive({\n selector: '[apTabList]',\n standalone: true,\n host: {\n 'role': 'tablist'\n },\n hostDirectives: [{\n directive: TabList\n }]\n})\nexport class TabListDirective { }","import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\n\nexport class TabTriggerHarness extends ComponentHarness {\n static hostSelector = '[apTabTrigger]';\n\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n\n async isActive(): Promise<boolean> {\n const host = await this.host();\n const ariaSelected = await host.getAttribute('aria-selected');\n return ariaSelected === 'true';\n }\n\n async click(): Promise<void> {\n const host = await this.host();\n return host.click();\n }\n\n async getTabId(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('tabId');\n }\n\n async isDisabled(): Promise<boolean> {\n const host = await this.host();\n const ariaDisabled = await host.getAttribute('aria-disabled');\n return ariaDisabled === 'true';\n }\n}\n\nexport class TabPanelHarness extends ComponentHarness {\n static hostSelector = '[apTabPanel]';\n\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n\n async isActive(): Promise<boolean> {\n const host = await this.host();\n const ariaHidden = await host.getAttribute('aria-hidden');\n return ariaHidden !== 'true';\n }\n\n async getRole(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('role');\n }\n}\n\nexport class TabsHarness extends ComponentHarness {\n static hostSelector = '[apTabs]';\n\n async getTabTriggers(): Promise<TabTriggerHarness[]> {\n return this.locatorForAll(TabTriggerHarness)();\n }\n\n async getTabPanels(): Promise<TabPanelHarness[]> {\n return this.locatorForAll(TabPanelHarness)();\n }\n\n async getActiveTab(): Promise<TabTriggerHarness | null> {\n const triggers = await this.getTabTriggers();\n for (const trigger of triggers) {\n if (await trigger.isActive()) {\n return trigger;\n }\n }\n return null;\n }\n\n async selectTabByText(text: string): Promise<void> {\n const triggers = await this.getTabTriggers();\n for (const trigger of triggers) {\n if ((await trigger.getText()) === text) {\n await trigger.click();\n return;\n }\n }\n throw new Error(`Tab with text \"${text}\" not found`);\n }\n\n async selectTabByIndex(index: number): Promise<void> {\n const triggers = await this.getTabTriggers();\n if (index < 0 || index >= triggers.length) {\n throw new Error(`Tab index ${index} out of range`);\n }\n await triggers[index].click();\n }\n}","import { signal } from '@angular/core';\n\nexport class TooltipState {\n /** Whether tooltip is open */\n readonly open = signal(false);\n /** ID of the tooltip content */\n readonly tooltipId = signal<string | null>(null);\n\n openTooltip() {\n this.open.set(true);\n }\n\n closeTooltip() {\n this.open.set(false);\n }\n\n toggle() {\n this.open.update(v => !v);\n }\n\n setTooltipId(id: string) {\n this.tooltipId.set(id);\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n} from '@angular/core';\nimport { TooltipState } from './tooltip.state';\n\n@Directive({\n selector: '[apTooltipTrigger]',\n standalone: true,\n host: {\n 'role': 'button',\n '[attr.tabindex]': '0',\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(keydown.escape)': 'onEscape()',\n '[attr.aria-describedby]': 'state.tooltipId()',\n '[attr.aria-expanded]': 'state.open()'\n }\n})\nexport class TooltipTriggerDirective {\n readonly state = inject(TooltipState);\n readonly element = inject(ElementRef<HTMLElement>);\n\n onMouseEnter() {\n this.state.openTooltip();\n }\n\n onMouseLeave() {\n this.state.closeTooltip();\n }\n\n onFocus() {\n this.state.openTooltip();\n }\n\n onBlur() {\n this.state.closeTooltip();\n }\n\n onEscape() {\n this.state.closeTooltip();\n }\n}\n\n","import {\n Directive,\n TemplateRef,\n inject,\n Input,\n} from '@angular/core';\n\n@Directive({\n selector: '[apTooltipContent]',\n standalone: true,\n host: {\n 'role': 'tooltip',\n '[id]': 'tooltipId'\n }\n})\nexport class TooltipContentDirective {\n readonly template = inject(TemplateRef<void>);\n @Input() tooltipId: string = `ap-tooltip-${Math.random().toString(36).substr(2, 9)}`;\n}\n","import {\n Overlay,\n OverlayRef\n} from '@angular/cdk/overlay';\nimport { TemplateRef, ViewContainerRef } from '@angular/core';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Observable } from 'rxjs';\n\nexport class TooltipOverlay {\n private overlayRef?: OverlayRef;\n\n constructor(\n private readonly overlay: Overlay,\n private readonly vcr: ViewContainerRef,\n private readonly origin: HTMLElement\n ) { }\n\n attach(template: TemplateRef<unknown>): void {\n if (!this.overlayRef) {\n this.overlayRef = this.createOverlay();\n }\n\n if (!this.overlayRef.hasAttached()) {\n const portal = new TemplatePortal(template, this.vcr);\n this.overlayRef.attach(portal);\n }\n }\n\n detach(): void {\n this.overlayRef?.detach();\n }\n\n destroy(): void {\n this.overlayRef?.dispose();\n }\n\n keydownEvents(): Observable<KeyboardEvent> | null {\n return this.overlayRef?.keydownEvents() ?? null;\n }\n\n private createOverlay(): OverlayRef {\n const positionStrategy =\n this.overlay.position()\n .flexibleConnectedTo(this.origin)\n .withPositions([\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -8\n },\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 8\n }\n ]);\n\n return this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: false\n });\n }\n}\n","import {\n AfterContentInit,\n contentChild,\n contentChildren,\n Directive,\n effect,\n inject,\n Injector,\n OnDestroy,\n runInInjectionContext,\n ViewContainerRef,\n} from '@angular/core';\nimport { TooltipState } from './tooltip.state';\nimport { TooltipContentDirective } from './tooltip-content.directive';\nimport { TooltipTriggerDirective } from './tooltip-trigger.directive';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { TooltipOverlay } from './tooltip.overlay';\nimport { filter, fromEvent, Subject, takeUntil } from 'rxjs';\nimport { DOCUMENT } from '@angular/common';\n\n@Directive({\n selector: '[apTooltip]',\n standalone: true,\n providers: [TooltipState],\n})\nexport class TooltipDirective implements AfterContentInit, OnDestroy {\n\n private readonly destroy$ = new Subject<void>();\n state = inject(TooltipState);\n\n content = contentChild(TooltipContentDirective);\n triggers = contentChildren(TooltipTriggerDirective);\n\n private overlay: TooltipOverlay | null = null;\n\n private readonly overlayService = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly document = inject(DOCUMENT);\n\n constructor() {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n if (!this.state.open()) {\n return;\n }\n\n const sub = fromEvent<KeyboardEvent>(\n this.document,\n 'keydown'\n )\n .pipe(\n filter(e => e.key === 'Escape'),\n takeUntil(this.destroy$)\n )\n .subscribe(() => {\n this.state.closeTooltip();\n });\n\n // Cleanup when tooltip closes\n return () => sub.unsubscribe();\n });\n });\n }\n\n ngAfterContentInit(): void {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const content = this.content();\n const triggers = this.triggers();\n\n // Early return if required elements are missing\n if (!content || triggers.length === 0) {\n return;\n }\n\n this.state.setTooltipId(content.tooltipId);\n\n // Create overlay only once\n if (!this.overlay) {\n const origin = triggers[0].element.nativeElement;\n this.overlay = new TooltipOverlay(\n this.overlayService,\n this.vcr,\n origin\n );\n\n this.overlay\n .keydownEvents()\n ?.pipe(\n filter(event => event.key === 'Escape'),\n takeUntil(this.destroy$)\n )\n .subscribe(() => {\n this.state.closeTooltip();\n });\n }\n\n // Toggle tooltip visibility\n if (this.state.open()) {\n this.showTooltip(content);\n } else {\n this.hideTooltip();\n }\n });\n });\n }\n\n private showTooltip(content: TooltipContentDirective): void {\n if (!this.overlay) return;\n\n // Clear any existing content\n this.vcr.clear();\n console.log('Showing tooltip');\n // Create and attach the tooltip content\n this.vcr.createEmbeddedView(content.template);\n // this.overlay.attach(viewRef);\n }\n\n private hideTooltip(): void {\n this.vcr.clear();\n this.overlay?.detach();\n }\n\n ngOnDestroy(): void {\n this.vcr.clear();\n this.overlay?.destroy();\n this.overlay = null;\n\n this.destroy$.next();\n this.destroy$.complete();\n }\n}","import { ComponentHarness } from '@angular/cdk/testing';\n\nexport class TooltipTriggerHarness extends ComponentHarness {\n static hostSelector = '[apTooltipTrigger]';\n\n async getAriaDescribedBy(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('aria-describedby');\n }\n\n async click(): Promise<void> {\n const host = await this.host();\n return host.click();\n }\n\n async focus(): Promise<void> {\n const host = await this.host();\n return host.focus();\n }\n\n async blur(): Promise<void> {\n const host = await this.host();\n return host.blur();\n }\n}\n\nexport class TooltipContentHarness extends ComponentHarness {\n static hostSelector = '[apTooltipContent]';\n\n async getRole(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('role');\n }\n\n async getId(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('id');\n }\n\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n}\n\nexport class TooltipHarness extends ComponentHarness {\n static hostSelector = '[apTooltip]';\n\n async getTrigger(): Promise<TooltipTriggerHarness> {\n return this.locatorFor(TooltipTriggerHarness)();\n }\n\n async getContent(): Promise<TooltipContentHarness> {\n return this.locatorFor(TooltipContentHarness)();\n }\n\n async isOpen(): Promise<boolean> {\n // Check if content is present or visible\n try {\n const content = await this.getContent();\n return true; // If found, assume open\n } catch {\n return false;\n }\n }\n}","// public-api.ts\n\nexport * from './lib/tabs';\nexport * from './lib/tooltip';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TabsState","i2"],"mappings":"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"}
1
+ {"version":3,"file":"snatuva-primitives.mjs","sources":["../../../projects/primitives/src/lib/tabs/tabs.state.ts","../../../projects/primitives/src/lib/tabs/tabs.directive.ts","../../../projects/primitives/src/lib/tabs/tab-panel.directive.ts","../../../projects/primitives/src/lib/tabs/tab-trigger.directive.ts","../../../projects/primitives/src/lib/tabs/tab-content.directive.ts","../../../projects/primitives/src/lib/tabs/tabs-list.directive.ts","../../../projects/primitives/src/lib/tabs/tabs.harness.ts","../../../projects/primitives/src/lib/tooltip/tooltip.state.ts","../../../projects/primitives/src/lib/tooltip/tooltip-trigger.directive.ts","../../../projects/primitives/src/lib/tooltip/tooltip-content.directive.ts","../../../projects/primitives/src/lib/tooltip/tooltip.overlay.ts","../../../projects/primitives/src/lib/tooltip/tooltip.directive.ts","../../../projects/primitives/src/lib/tooltip/tooltip.harness.ts","../../../projects/primitives/src/public-api.ts","../../../projects/primitives/src/snatuva-primitives.ts"],"sourcesContent":["import { signal, computed, Inject, Injectable } from '@angular/core';\n\nexport interface TabPanel {\n id: string;\n disabled: boolean;\n}\n\n@Injectable()\nexport class TabsState {\n private readonly _panels = signal<TabPanel[]>([]);\n private readonly _activeId = signal<string | null>(null);\n\n readonly panels = this._panels.asReadonly();\n readonly activeId = this._activeId.asReadonly();\n\n readonly activePanel = computed(() =>\n this._panels().find(p => p.id === this._activeId())\n );\n\n register(panel: TabPanel): void {\n this._panels.update(p => [...p, panel]);\n\n if (!this._activeId()) {\n this._activeId.set(panel.id);\n }\n }\n\n unregister(id: string): void {\n this._panels.update(p => p.filter(x => x.id !== id));\n\n if (this._activeId() === id) {\n this._activeId.set(this._panels()[0]?.id ?? null);\n }\n }\n\n activate(id: string): void {\n const panel = this._panels().find(p => p.id === id && !p.disabled);\n if (panel) {\n this._activeId.set(id);\n }\n }\n}\n","import { AfterContentInit, ContentChildren, Directive, effect, HostListener, inject, Injector, QueryList, runInInjectionContext } from '@angular/core';\nimport { TabsState } from './tabs.state';\nimport { TabTriggerDirective } from './tab-trigger.directive';\n// import { TabsKeyboardController } from './tabs.keyboard';\nimport { Tabs } from '@angular/aria/tabs';\n\nexport type SelectionMode = 'follow' | 'explicit';\n\n@Directive({\n selector: '[apTabs]',\n standalone: true,\n exportAs: 'apTabs',\n providers: [\n TabsState\n ],\n hostDirectives: [{\n directive: Tabs\n }]\n})\nexport class TabsDirective { }\n","import { Directive, OnInit, OnDestroy, inject, Input } from '@angular/core';\nimport { TabsState } from './tabs.state';\nimport { TabPanel } from '@angular/aria/tabs';\n\n@Directive({\n selector: '[apTabPanel]',\n standalone: true,\n exportAs: 'apTabPanel',\n host: {\n 'role': 'tabpanel',\n '[attr.aria-labelledby]': '`ap-tab-${ariaPanel.value()}`',\n '[attr.id]': '`ap-panel-${ariaPanel.value()}`',\n '[style.display]': 'isActive() ? \"block\" : \"none\"',\n '[hidden]': '!isActive()'\n },\n hostDirectives: [{\n directive: TabPanel,\n // We map the public \"id\" attribute of your directive \n // to the \"value\" property of the TabPanel primitive.\n inputs: ['id', 'value']\n }]\n})\nexport class TabPanelDirective implements OnInit, OnDestroy {\n // 1. Inject the host directive instance\n protected ariaPanel = inject(TabPanel);\n\n @Input() disabled = false;\n private state = inject(TabsState);\n\n ngOnInit(): void {\n // 2. Use ariaPanel.value (which holds the 'id' passed by the user)\n this.state.register({\n id: this.ariaPanel.value() as string,\n disabled: this.disabled\n });\n }\n\n ngOnDestroy(): void {\n this.state.unregister(this.ariaPanel.value() as string);\n }\n\n isActive(): boolean {\n return this.state.activeId() === this.ariaPanel.value();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.stopPropagation();\n }\n }\n}","import { Directive, ElementRef, HostBinding, inject, Input } from '@angular/core';\nimport { FocusableOption } from '@angular/cdk/a11y';\nimport { TabPanel, TabsState } from './tabs.state';\nimport { Tab } from '@angular/aria/tabs';\n\n@Directive({\n selector: '[apTabTrigger]',\n standalone: true,\n host: {\n 'role': 'tab',\n '[attr.aria-selected]': 'state.activeId() === tabId',\n '[attr.aria-disabled]': 'disabled',\n '[tabindex]': 'state.activeId() === tabId ? \"0\" : \"-1\"',\n '(keydown)': 'onKeydown($event)',\n '(click)': 'activate()'\n },\n providers: [\n { provide: Tab, useExisting: Tab }\n ],\n hostDirectives: [{\n directive: Tab,\n inputs: ['value: tabId']\n }]\n})\nexport class TabTriggerDirective implements FocusableOption {\n @Input({ required: true }) tabId: string = '';\n @Input() disabled = false;\n state = inject(TabsState);\n el = inject(ElementRef<HTMLElement>);\n activate(): void {\n this.state.activate(this.tabId);\n }\n\n onKeydown(event: KeyboardEvent) {\n const active = this.state.panels().filter(t => !t.disabled);\n const idx = active.findIndex(t => t.id === this.tabId);\n let next: TabPanel | undefined;\n switch (event.key) {\n\n case 'ArrowRight':\n case 'ArrowDown':\n next = active[(idx + 1) % active.length]; break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = active[(idx - 1 + active.length) % active.length]; break;\n case 'Home': next = active[0]; break;\n case 'End': next = active[active.length - 1]; break;\n }\n\n if (next) {\n event.preventDefault();\n this.state.activate(next.id);\n this.focus();\n }\n }\n\n focus(): void {\n this.el.nativeElement.focus();\n }\n\n @HostBinding('attr.id')\n get id() {\n return `ap-tab-${this.tabId}`;\n }\n\n @HostBinding('attr.aria-controls')\n get controls() {\n return `ap-panel-${this.tabId}`;\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { TabsState } from './tabs.state';\n\n@Directive({\n selector: '[apTabContent]'\n})\nexport class TabContentDirective {\n @Input({ required: true }) tabId!: string;\n private state = inject(TabsState);\n constructor(\n template: TemplateRef<unknown>,\n vcr: ViewContainerRef\n ) {\n effect(() => {\n vcr.clear();\n\n if (this.state.activeId() === this.tabId) {\n vcr.createEmbeddedView(template);\n }\n });\n }\n}\n","import { Directive, input } from '@angular/core';\nimport { TabList } from '@angular/aria/tabs';\n\n@Directive({\n selector: '[apTabList]',\n standalone: true,\n host: {\n 'role': 'tablist',\n '[attr.aria-orientation]': 'orientation()',\n },\n hostDirectives: [{\n directive: TabList\n }]\n})\nexport class TabListDirective {\n //TODO: We can use the input() function to create a reactive input for orientation, which will automatically update the aria-orientation attribute when it changes.\n orientation = input('horizontal');\n}","import { ComponentHarness } from '@angular/cdk/testing';\n\nexport class TabTriggerHarness extends ComponentHarness {\n static hostSelector = '[apTabTrigger]';\n\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n\n async isActive(): Promise<boolean> {\n const host = await this.host();\n const ariaSelected = await host.getAttribute('aria-selected');\n return ariaSelected === 'true';\n }\n\n async click(): Promise<void> {\n const host = await this.host();\n return host.click();\n }\n\n async getTabId(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('tabId');\n }\n\n async isDisabled(): Promise<boolean> {\n const host = await this.host();\n const ariaDisabled = await host.getAttribute('aria-disabled');\n return ariaDisabled === 'true';\n }\n}\n\nexport class TabPanelHarness extends ComponentHarness {\n static hostSelector = '[apTabPanel]';\n\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n\n async isActive(): Promise<boolean> {\n const host = await this.host();\n const ariaHidden = await host.getAttribute('aria-hidden');\n return ariaHidden !== 'true';\n }\n\n async getRole(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('role');\n }\n}\n\nexport class TabsHarness extends ComponentHarness {\n static hostSelector = '[apTabs]';\n\n async getTabTriggers(): Promise<TabTriggerHarness[]> {\n return this.locatorForAll(TabTriggerHarness)();\n }\n\n async getTabPanels(): Promise<TabPanelHarness[]> {\n return this.locatorForAll(TabPanelHarness)();\n }\n\n async getActiveTab(): Promise<TabTriggerHarness | null> {\n const triggers = await this.getTabTriggers();\n for (const trigger of triggers) {\n if (await trigger.isActive()) {\n return trigger;\n }\n }\n return null;\n }\n\n async selectTabByText(text: string): Promise<void> {\n const triggers = await this.getTabTriggers();\n for (const trigger of triggers) {\n if ((await trigger.getText()) === text) {\n await trigger.click();\n return;\n }\n }\n throw new Error(`Tab with text \"${text}\" not found`);\n }\n\n async selectTabByIndex(index: number): Promise<void> {\n const triggers = await this.getTabTriggers();\n if (index < 0 || index >= triggers.length) {\n throw new Error(`Tab index ${index} out of range`);\n }\n await triggers[index].click();\n }\n}","import { signal } from '@angular/core';\n\nexport class TooltipState {\n /** Whether tooltip is open */\n readonly open = signal(false);\n /** ID of the tooltip content */\n readonly tooltipId = signal<string | null>(null);\n\n openTooltip() {\n this.open.set(true);\n }\n\n closeTooltip() {\n this.open.set(false);\n }\n\n toggle() {\n this.open.update(v => !v);\n }\n\n setTooltipId(id: string) {\n this.tooltipId.set(id);\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n} from '@angular/core';\nimport { TooltipState } from './tooltip.state';\n\n@Directive({\n selector: '[apTooltipTrigger]',\n standalone: true,\n host: {\n 'role': 'button',\n '[attr.tabindex]': '0',\n '(mouseenter)': 'onMouseEnter()',\n '(mouseleave)': 'onMouseLeave()',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(keydown.escape)': 'onEscape()',\n '[attr.aria-describedby]': 'state.tooltipId()',\n '[attr.aria-expanded]': 'state.open()'\n }\n})\nexport class TooltipTriggerDirective {\n readonly state = inject(TooltipState);\n readonly element = inject(ElementRef<HTMLElement>);\n\n onMouseEnter() {\n this.state.openTooltip();\n }\n\n onMouseLeave() {\n this.state.closeTooltip();\n }\n\n onFocus() {\n this.state.openTooltip();\n }\n\n onBlur() {\n this.state.closeTooltip();\n }\n\n onEscape() {\n this.state.closeTooltip();\n }\n}\n\n","import {\n Directive,\n TemplateRef,\n inject,\n Input,\n} from '@angular/core';\n\n@Directive({\n selector: '[apTooltipContent]',\n standalone: true,\n host: {\n 'role': 'tooltip',\n '[id]': 'tooltipId'\n }\n})\nexport class TooltipContentDirective {\n readonly template = inject(TemplateRef<void>);\n @Input() tooltipId: string = `ap-tooltip-${Math.random().toString(36).substr(2, 9)}`;\n}\n","import {\n Overlay,\n OverlayRef\n} from '@angular/cdk/overlay';\nimport { TemplateRef, ViewContainerRef } from '@angular/core';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Observable } from 'rxjs';\n\nexport class TooltipOverlay {\n private overlayRef?: OverlayRef;\n\n constructor(\n private readonly overlay: Overlay,\n private readonly vcr: ViewContainerRef,\n private readonly origin: HTMLElement\n ) { }\n\n attach(template: TemplateRef<unknown>): void {\n if (!this.overlayRef) {\n this.overlayRef = this.createOverlay();\n }\n\n if (!this.overlayRef.hasAttached()) {\n const portal = new TemplatePortal(template, this.vcr);\n this.overlayRef.attach(portal);\n }\n }\n\n detach(): void {\n this.overlayRef?.detach();\n }\n\n destroy(): void {\n this.overlayRef?.dispose();\n }\n\n keydownEvents(): Observable<KeyboardEvent> | null {\n return this.overlayRef?.keydownEvents() ?? null;\n }\n\n private createOverlay(): OverlayRef {\n const positionStrategy =\n this.overlay.position()\n .flexibleConnectedTo(this.origin)\n .withPositions([\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -8\n },\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 8\n }\n ]);\n\n return this.overlay.create({\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: false\n });\n }\n}\n","import {\n AfterContentInit,\n contentChild,\n contentChildren,\n Directive,\n effect,\n inject,\n Injector,\n OnDestroy,\n runInInjectionContext,\n ViewContainerRef,\n} from '@angular/core';\nimport { TooltipState } from './tooltip.state';\nimport { TooltipContentDirective } from './tooltip-content.directive';\nimport { TooltipTriggerDirective } from './tooltip-trigger.directive';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { TooltipOverlay } from './tooltip.overlay';\nimport { filter, fromEvent, Subject, takeUntil } from 'rxjs';\nimport { DOCUMENT } from '@angular/common';\n\n@Directive({\n selector: '[apTooltip]',\n standalone: true,\n providers: [TooltipState],\n})\nexport class TooltipDirective implements AfterContentInit, OnDestroy {\n\n private readonly destroy$ = new Subject<void>();\n state = inject(TooltipState);\n\n content = contentChild(TooltipContentDirective);\n triggers = contentChildren(TooltipTriggerDirective);\n\n private overlay: TooltipOverlay | null = null;\n\n private readonly overlayService = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly document = inject(DOCUMENT);\n\n constructor() {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n if (!this.state.open()) {\n return;\n }\n\n const sub = fromEvent<KeyboardEvent>(\n this.document,\n 'keydown'\n )\n .pipe(\n filter(e => e.key === 'Escape'),\n takeUntil(this.destroy$)\n )\n .subscribe(() => {\n this.state.closeTooltip();\n });\n\n // Cleanup when tooltip closes\n return () => sub.unsubscribe();\n });\n });\n }\n\n ngAfterContentInit(): void {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n const content = this.content();\n const triggers = this.triggers();\n\n // Early return if required elements are missing\n if (!content || triggers.length === 0) {\n return;\n }\n\n this.state.setTooltipId(content.tooltipId);\n\n // Create overlay only once\n if (!this.overlay) {\n const origin = triggers[0].element.nativeElement;\n this.overlay = new TooltipOverlay(\n this.overlayService,\n this.vcr,\n origin\n );\n\n this.overlay\n .keydownEvents()\n ?.pipe(\n filter(event => event.key === 'Escape'),\n takeUntil(this.destroy$)\n )\n .subscribe(() => {\n this.state.closeTooltip();\n });\n }\n\n // Toggle tooltip visibility\n if (this.state.open()) {\n this.showTooltip(content);\n } else {\n this.hideTooltip();\n }\n });\n });\n }\n\n private showTooltip(content: TooltipContentDirective): void {\n if (!this.overlay) return;\n\n // Clear any existing content\n this.vcr.clear();\n console.log('Showing tooltip');\n // Create and attach the tooltip content\n this.vcr.createEmbeddedView(content.template);\n // this.overlay.attach(viewRef);\n }\n\n private hideTooltip(): void {\n this.vcr.clear();\n this.overlay?.detach();\n }\n\n ngOnDestroy(): void {\n this.vcr.clear();\n this.overlay?.destroy();\n this.overlay = null;\n\n this.destroy$.next();\n this.destroy$.complete();\n }\n}","import { ComponentHarness } from '@angular/cdk/testing';\n\nexport class TooltipTriggerHarness extends ComponentHarness {\n static hostSelector = '[apTooltipTrigger]';\n\n async getAriaDescribedBy(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('aria-describedby');\n }\n\n async click(): Promise<void> {\n const host = await this.host();\n return host.click();\n }\n\n async focus(): Promise<void> {\n const host = await this.host();\n return host.focus();\n }\n\n async blur(): Promise<void> {\n const host = await this.host();\n return host.blur();\n }\n}\n\nexport class TooltipContentHarness extends ComponentHarness {\n static hostSelector = '[apTooltipContent]';\n\n async getRole(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('role');\n }\n\n async getId(): Promise<string | null> {\n const host = await this.host();\n return host.getAttribute('id');\n }\n\n async getText(): Promise<string> {\n return (await this.host()).text();\n }\n}\n\nexport class TooltipHarness extends ComponentHarness {\n static hostSelector = '[apTooltip]';\n\n async getTrigger(): Promise<TooltipTriggerHarness> {\n return this.locatorFor(TooltipTriggerHarness)();\n }\n\n async getContent(): Promise<TooltipContentHarness> {\n return this.locatorFor(TooltipContentHarness)();\n }\n\n async isOpen(): Promise<boolean> {\n // Check if content is present or visible\n try {\n const content = await this.getContent();\n return true; // If found, assume open\n } catch {\n return false;\n }\n }\n}","// public-api.ts\n\nexport * from './lib/tabs';\nexport * from './lib/tooltip';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snatuva/primitives",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.2",
6
6
  "@angular/core": "^21.0.2",
@@ -1,10 +1,28 @@
1
1
  import * as i0 from '@angular/core';
2
- import { AfterContentInit, OnInit, OnDestroy, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';
2
+ import { OnInit, OnDestroy, ElementRef, TemplateRef, ViewContainerRef, AfterContentInit } from '@angular/core';
3
3
  import * as i1 from '@angular/aria/tabs';
4
4
  import { TabPanel as TabPanel$1 } from '@angular/aria/tabs';
5
5
  import { FocusableOption } from '@angular/cdk/a11y';
6
6
  import { ComponentHarness } from '@angular/cdk/testing';
7
7
 
8
+ type SelectionMode = 'follow' | 'explicit';
9
+ declare class TabsDirective {
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabsDirective, never>;
11
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TabsDirective, "[apTabs]", ["apTabs"], {}, {}, never, never, true, [{ directive: typeof i1.Tabs; inputs: {}; outputs: {}; }]>;
12
+ }
13
+
14
+ declare class TabPanelDirective implements OnInit, OnDestroy {
15
+ protected ariaPanel: TabPanel$1;
16
+ disabled: boolean;
17
+ private state;
18
+ ngOnInit(): void;
19
+ ngOnDestroy(): void;
20
+ isActive(): boolean;
21
+ onKeydown(event: KeyboardEvent): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabPanelDirective, never>;
23
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TabPanelDirective, "[apTabPanel]", ["apTabPanel"], { "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.TabPanel; inputs: { "id": "id"; "value": "value"; }; outputs: {}; }]>;
24
+ }
25
+
8
26
  interface TabPanel {
9
27
  id: string;
10
28
  disabled: boolean;
@@ -17,46 +35,21 @@ declare class TabsState {
17
35
  readonly activePanel: i0.Signal<TabPanel | undefined>;
18
36
  register(panel: TabPanel): void;
19
37
  unregister(id: string): void;
20
- select(id: string): void;
38
+ activate(id: string): void;
21
39
  static ɵfac: i0.ɵɵFactoryDeclaration<TabsState, never>;
22
40
  static ɵprov: i0.ɵɵInjectableDeclaration<TabsState>;
23
41
  }
24
42
 
25
- declare class TabsDirective implements AfterContentInit {
26
- readonly state: TabsState;
27
- get activeTab(): i0.Signal<string | null>;
28
- private readonly triggers;
29
- private readonly injector;
30
- constructor(state: TabsState);
31
- ngAfterContentInit(): void;
32
- onKeydown(event: KeyboardEvent): void;
33
- static ɵfac: i0.ɵɵFactoryDeclaration<TabsDirective, never>;
34
- static ɵdir: i0.ɵɵDirectiveDeclaration<TabsDirective, "[apTabs]", ["apTabs"], {}, {}, ["triggers"], never, true, [{ directive: typeof i1.Tabs; inputs: {}; outputs: {}; }]>;
35
- }
36
-
37
- declare class TabPanelDirective implements OnInit, OnDestroy {
38
- protected ariaPanel: TabPanel$1;
39
- disabled: boolean;
40
- private state;
41
- ngOnInit(): void;
42
- ngOnDestroy(): void;
43
- isActive(): boolean;
44
- onKeydown(event: KeyboardEvent): void;
45
- static ɵfac: i0.ɵɵFactoryDeclaration<TabPanelDirective, never>;
46
- static ɵdir: i0.ɵɵDirectiveDeclaration<TabPanelDirective, "[apTabPanel]", ["apTabPanel"], { "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.TabPanel; inputs: { "id": "id"; "value": "value"; }; outputs: {}; }]>;
47
- }
48
-
49
43
  declare class TabTriggerDirective implements FocusableOption {
50
44
  tabId: string;
51
45
  disabled: boolean;
52
46
  state: TabsState;
53
47
  el: ElementRef<any>;
54
48
  activate(): void;
49
+ onKeydown(event: KeyboardEvent): void;
55
50
  focus(): void;
56
- tabindex: string;
57
51
  get id(): string;
58
52
  get controls(): string;
59
- setActive(isActive: boolean): void;
60
53
  static ɵfac: i0.ɵɵFactoryDeclaration<TabTriggerDirective, never>;
61
54
  static ɵdir: i0.ɵɵDirectiveDeclaration<TabTriggerDirective, "[apTabTrigger]", never, { "tabId": { "alias": "tabId"; "required": true; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.Tab; inputs: { "value": "tabId"; }; outputs: {}; }]>;
62
55
  }
@@ -70,8 +63,9 @@ declare class TabContentDirective {
70
63
  }
71
64
 
72
65
  declare class TabListDirective {
66
+ orientation: i0.InputSignal<string>;
73
67
  static ɵfac: i0.ɵɵFactoryDeclaration<TabListDirective, never>;
74
- static ɵdir: i0.ɵɵDirectiveDeclaration<TabListDirective, "[apTabList]", never, {}, {}, never, never, true, [{ directive: typeof i1.TabList; inputs: {}; outputs: {}; }]>;
68
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TabListDirective, "[apTabList]", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.TabList; inputs: {}; outputs: {}; }]>;
75
69
  }
76
70
 
77
71
  declare class TabTriggerHarness extends ComponentHarness {
@@ -167,3 +161,4 @@ declare class TooltipHarness extends ComponentHarness {
167
161
  }
168
162
 
169
163
  export { TabContentDirective, TabListDirective, TabPanelDirective, TabPanelHarness, TabTriggerDirective, TabTriggerHarness, TabsDirective, TabsHarness, TooltipContentDirective, TooltipContentHarness, TooltipDirective, TooltipHarness, TooltipState, TooltipTriggerDirective, TooltipTriggerHarness };
164
+ export type { SelectionMode };