@ni/ok-components 1.3.6 → 1.4.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 (31) hide show
  1. package/dist/all-components-bundle.js +962 -433
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +5218 -5078
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/custom-elements.json +569 -33
  6. package/dist/custom-elements.md +85 -12
  7. package/dist/esm/ts/all-ts.d.ts +1 -0
  8. package/dist/esm/ts/all-ts.js +1 -0
  9. package/dist/esm/ts/all-ts.js.map +1 -1
  10. package/dist/esm/ts/table-column/breakpoint/cell-view/index.d.ts +73 -0
  11. package/dist/esm/ts/table-column/breakpoint/cell-view/index.js +305 -0
  12. package/dist/esm/ts/table-column/breakpoint/cell-view/index.js.map +1 -0
  13. package/dist/esm/ts/table-column/breakpoint/cell-view/styles.d.ts +1 -0
  14. package/dist/esm/ts/table-column/breakpoint/cell-view/styles.js +48 -0
  15. package/dist/esm/ts/table-column/breakpoint/cell-view/styles.js.map +1 -0
  16. package/dist/esm/ts/table-column/breakpoint/cell-view/template.d.ts +2 -0
  17. package/dist/esm/ts/table-column/breakpoint/cell-view/template.js +55 -0
  18. package/dist/esm/ts/table-column/breakpoint/cell-view/template.js.map +1 -0
  19. package/dist/esm/ts/table-column/breakpoint/index.d.ts +36 -0
  20. package/dist/esm/ts/table-column/breakpoint/index.js +101 -0
  21. package/dist/esm/ts/table-column/breakpoint/index.js.map +1 -0
  22. package/dist/esm/ts/table-column/breakpoint/template.d.ts +2 -0
  23. package/dist/esm/ts/table-column/breakpoint/template.js +8 -0
  24. package/dist/esm/ts/table-column/breakpoint/template.js.map +1 -0
  25. package/dist/esm/ts/table-column/breakpoint/testing/ts-table-column-breakpoint.pageobject.d.ts +23 -0
  26. package/dist/esm/ts/table-column/breakpoint/testing/ts-table-column-breakpoint.pageobject.js +69 -0
  27. package/dist/esm/ts/table-column/breakpoint/testing/ts-table-column-breakpoint.pageobject.js.map +1 -0
  28. package/dist/esm/ts/table-column/breakpoint/types.d.ts +32 -0
  29. package/dist/esm/ts/table-column/breakpoint/types.js +16 -0
  30. package/dist/esm/ts/table-column/breakpoint/types.js.map +1 -0
  31. package/package.json +2 -2
@@ -1,10 +1,16 @@
1
- ## class: `ExButton`
1
+ ## class: `TsIconDynamic`
2
2
 
3
3
  ### Superclass
4
4
 
5
- | Name | Module | Package |
6
- | ------------------- | ------ | ------------------- |
7
- | `FoundationElement` | | @ni/fast-foundation |
5
+ | Name | Module | Package |
6
+ | ------ | ------ | ---------------------------------------- |
7
+ | `Icon` | | @ni/nimble-components/dist/esm/icon-base |
8
+
9
+ ### Static Methods
10
+
11
+ | Name | Privacy | Description | Parameters | Return | Inherited From |
12
+ | --------------------- | ------- | ----------- | ------------------------------ | ------ | -------------- |
13
+ | `registerIconDynamic` | public | | `tagName: string, url: string` | `void` | |
8
14
 
9
15
  <hr/>
10
16
 
@@ -308,18 +314,85 @@
308
314
 
309
315
  <hr/>
310
316
 
311
- ## class: `TsIconDynamic`
317
+ ## class: `ExButton`
312
318
 
313
319
  ### Superclass
314
320
 
315
- | Name | Module | Package |
316
- | ------ | ------ | ---------------------------------------- |
317
- | `Icon` | | @ni/nimble-components/dist/esm/icon-base |
321
+ | Name | Module | Package |
322
+ | ------------------- | ------ | ------------------- |
323
+ | `FoundationElement` | | @ni/fast-foundation |
318
324
 
319
- ### Static Methods
325
+ <hr/>
320
326
 
321
- | Name | Privacy | Description | Parameters | Return | Inherited From |
322
- | --------------------- | ------- | ----------- | ------------------------------ | ------ | -------------- |
323
- | `registerIconDynamic` | public | | `tagName: string, url: string` | `void` | |
327
+ ## class: `TsTableColumnBreakpoint`
328
+
329
+ ### Superclass
330
+
331
+ | Name | Module | Package |
332
+ | ------------- | ------ | ------------------------------------------------ |
333
+ | `TableColumn` | | @ni/nimble-components/dist/esm/table-column/base |
334
+
335
+ ### Fields
336
+
337
+ | Name | Privacy | Type | Default | Description | Inherited From |
338
+ | ------------------ | ------- | ------------------------ | ----------------------- | ----------- | -------------- |
339
+ | `fieldName` | public | `string \| undefined` | | | |
340
+ | `menuSlot` | public | `string \| undefined` | | | |
341
+ | `position` | public | `BreakpointMenuPosition` | | | |
342
+ | `resizingDisabled` | | `boolean` | `true` | | |
343
+ | `pixelWidth` | | | `singleIconColumnWidth` | | |
344
+ | `minPixelWidth` | | | `singleIconColumnWidth` | | |
345
+
346
+ ### Methods
347
+
348
+ | Name | Privacy | Description | Parameters | Return | Inherited From |
349
+ | ------------------------------ | --------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------ | -------------- |
350
+ | `requestBreakpointStateChange` | public | Programmatically requests a breakpoint state change for a record. | `recordId: string, currentState: BreakpointState, requestedState: BreakpointState` | `void` | |
351
+ | `getColumnInternalsOptions` | protected | | | `ColumnInternalsOptions` | |
352
+ | `fieldNameChanged` | protected | | | `void` | |
353
+ | `menuSlotChanged` | protected | | | `void` | |
354
+ | `positionChanged` | protected | | | `void` | |
355
+
356
+ ### Attributes
357
+
358
+ | Name | Field | Inherited From |
359
+ | ------------ | --------- | -------------- |
360
+ | `field-name` | fieldName | |
361
+ | `menu-slot` | menuSlot | |
362
+ | `position` | position | |
363
+
364
+ <hr/>
365
+
366
+ ## class: `TsTableColumnBreakpointCellView`
367
+
368
+ ### Superclass
369
+
370
+ | Name | Module | Package |
371
+ | --------------- | ------ | ---------------------------------------------------------- |
372
+ | `TableCellView` | | @ni/nimble-components/dist/esm/table-column/base/cell-view |
373
+
374
+ ### Fields
375
+
376
+ | Name | Privacy | Type | Default | Description | Inherited From |
377
+ | ------------------ | ------- | --------------- | ------- | ------------------------------------------ | -------------- |
378
+ | `open` | public | `boolean` | `false` | Specifies whether or not the menu is open. | |
379
+ | `tabbableChildren` | public | `HTMLElement[]` | | | |
380
+
381
+ ### Methods
382
+
383
+ | Name | Privacy | Description | Parameters | Return | Inherited From |
384
+ | --------------------------- | ------- | ----------- | ----------------------------------------------------------------------- | --------- | -------------- |
385
+ | `regionLoadedHandler` | public | | | `void` | |
386
+ | `regionChanged` | public | | `prev: AnchoredRegion \| undefined, _next: AnchoredRegion \| undefined` | `void` | |
387
+ | `buttonChanged` | public | | | `void` | |
388
+ | `focusoutHandler` | public | | `e: FocusEvent` | `boolean` | |
389
+ | `contextMenuKeyDownHandler` | public | | `e: KeyboardEvent` | `boolean` | |
390
+ | `onContextMenuChange` | public | | `event: Event` | `void` | |
391
+
392
+ ### Attributes
393
+
394
+ | Name | Field | Inherited From |
395
+ | ------ | ----- | -------------- |
396
+ | `open` | open | |
324
397
 
325
398
  <hr/>
@@ -1 +1,2 @@
1
1
  import './icon-dynamic';
2
+ import './table-column/breakpoint';
@@ -1,2 +1,3 @@
1
1
  import './icon-dynamic';
2
+ import './table-column/breakpoint';
2
3
  //# sourceMappingURL=all-ts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"all-ts.js","sourceRoot":"","sources":["../../../src/ts/all-ts.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC","sourcesContent":["import './icon-dynamic';\n"]}
1
+ {"version":3,"file":"all-ts.js","sourceRoot":"","sources":["../../../src/ts/all-ts.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AACxB,OAAO,2BAA2B,CAAC","sourcesContent":["import './icon-dynamic';\nimport './table-column/breakpoint';\n"]}
@@ -0,0 +1,73 @@
1
+ import { TableCellView } from '@ni/nimble-components/dist/esm/table-column/base/cell-view';
2
+ import type { AnchoredRegion } from '@ni/nimble-components/dist/esm/anchored-region';
3
+ import { type MenuButtonPosition as BreakpointMenuPosition } from '@ni/nimble-components/dist/esm/menu-button/types';
4
+ import { BreakpointState } from '../types';
5
+ import type { TsTableColumnBreakpointCellRecord, TsTableColumnBreakpointColumnConfig } from '..';
6
+ declare global {
7
+ interface HTMLElementTagNameMap {
8
+ 'ok-ts-table-column-breakpoint-cell-view': TsTableColumnBreakpointCellView;
9
+ }
10
+ }
11
+ /**
12
+ * Cell view for the breakpoint column that renders a clickable breakpoint indicator.
13
+ */
14
+ export declare class TsTableColumnBreakpointCellView extends TableCellView<TsTableColumnBreakpointCellRecord, TsTableColumnBreakpointColumnConfig> {
15
+ private static readonly menuKeyAlias;
16
+ private static readonly contextMenuKeyAlias;
17
+ /** @internal */
18
+ button?: HTMLButtonElement;
19
+ /**
20
+ * Specifies whether or not the menu is open.
21
+ */
22
+ open: boolean;
23
+ /** @internal */
24
+ readonly region?: AnchoredRegion;
25
+ /** @internal */
26
+ readonly slottedMenus?: HTMLElement[];
27
+ private focusLastItemWhenOpened;
28
+ /** @internal */
29
+ private readonly breakpointEnabledString;
30
+ /** @internal */
31
+ private readonly breakpointDisabledString;
32
+ /** @internal */
33
+ private readonly breakpointHitString;
34
+ /** @internal */
35
+ private readonly breakpointConditionalString;
36
+ /** @internal */
37
+ private readonly breakpointHitDisabledString;
38
+ /** @internal */
39
+ private readonly breakpointAddString;
40
+ /** @internal */
41
+ private readonly breakpointRemoveString;
42
+ /** @internal */
43
+ get currentState(): BreakpointState;
44
+ /** @internal */
45
+ get tooltipText(): string;
46
+ /** @internal */
47
+ get ariaLabelText(): string;
48
+ /** @internal */
49
+ get menuPosition(): BreakpointMenuPosition;
50
+ get tabbableChildren(): HTMLElement[];
51
+ /** @internal */
52
+ onButtonClick(event: Event): void;
53
+ /** @internal */
54
+ onContextMenu(event: Event): void;
55
+ /** @internal */
56
+ onKeyDown(event: KeyboardEvent): boolean;
57
+ regionLoadedHandler(): void;
58
+ regionChanged(prev: AnchoredRegion | undefined, _next: AnchoredRegion | undefined): void;
59
+ buttonChanged(): void;
60
+ focusoutHandler(e: FocusEvent): boolean;
61
+ contextMenuKeyDownHandler(e: KeyboardEvent): boolean;
62
+ onContextMenuChange(event: Event): void;
63
+ private getMenu;
64
+ private isSlotElement;
65
+ private focusMenu;
66
+ private focusLastMenuItem;
67
+ private emitToggle;
68
+ private requestContextMenu;
69
+ private openMenuFromColumnSlot;
70
+ private readonly menuChangeHandler;
71
+ private getRequestedStateFromEvent;
72
+ }
73
+ export declare const tsTableColumnBreakpointCellViewTag = "ok-ts-table-column-breakpoint-cell-view";
@@ -0,0 +1,305 @@
1
+ import { __decorate } from "tslib";
2
+ import { DesignSystem } from '@ni/fast-foundation';
3
+ import { TableCellView } from '@ni/nimble-components/dist/esm/table-column/base/cell-view';
4
+ import { attr, observable } from '@ni/fast-element';
5
+ import { MenuButtonPosition } from '@ni/nimble-components/dist/esm/menu-button/types';
6
+ import { template } from './template';
7
+ import { styles } from './styles';
8
+ import { BreakpointState, breakpointCellViewMenuSlotName, breakpointMenuItemStateAttributeName } from '../types';
9
+ /**
10
+ * Cell view for the breakpoint column that renders a clickable breakpoint indicator.
11
+ */
12
+ export class TsTableColumnBreakpointCellView extends TableCellView {
13
+ constructor() {
14
+ super(...arguments);
15
+ /**
16
+ * Specifies whether or not the menu is open.
17
+ */
18
+ this.open = false;
19
+ this.focusLastItemWhenOpened = false;
20
+ /** @internal */
21
+ this.breakpointEnabledString = 'Breakpoint enabled';
22
+ /** @internal */
23
+ this.breakpointDisabledString = 'Breakpoint disabled';
24
+ /** @internal */
25
+ this.breakpointHitString = 'Breakpoint hit';
26
+ /** @internal */
27
+ this.breakpointConditionalString = 'Conditional breakpoint';
28
+ /** @internal */
29
+ this.breakpointHitDisabledString = 'Breakpoint hit (disabled)';
30
+ /** @internal */
31
+ this.breakpointAddString = 'Add breakpoint';
32
+ /** @internal */
33
+ this.breakpointRemoveString = 'Remove breakpoint';
34
+ this.menuChangeHandler = () => {
35
+ this.open = false;
36
+ this.button?.focus();
37
+ };
38
+ }
39
+ /** @internal */
40
+ get currentState() {
41
+ const value = this.cellRecord?.value;
42
+ if (value && Object.values(BreakpointState).includes(value)) {
43
+ return value;
44
+ }
45
+ return BreakpointState.off;
46
+ }
47
+ /** @internal */
48
+ get tooltipText() {
49
+ if (this.currentState === BreakpointState.off) {
50
+ return this.breakpointAddString;
51
+ }
52
+ return this.breakpointRemoveString;
53
+ }
54
+ /** @internal */
55
+ get ariaLabelText() {
56
+ switch (this.currentState) {
57
+ case BreakpointState.enabled:
58
+ return this.breakpointEnabledString;
59
+ case BreakpointState.disabled:
60
+ return this.breakpointDisabledString;
61
+ case BreakpointState.hit:
62
+ return this.breakpointHitString;
63
+ case BreakpointState.conditional:
64
+ return this.breakpointConditionalString;
65
+ case BreakpointState.hitDisabled:
66
+ return this.breakpointHitDisabledString;
67
+ default:
68
+ return this.breakpointAddString;
69
+ }
70
+ }
71
+ /** @internal */
72
+ get menuPosition() {
73
+ return this.columnConfig?.position ?? MenuButtonPosition.auto;
74
+ }
75
+ get tabbableChildren() {
76
+ if (this.button) {
77
+ return [this.button];
78
+ }
79
+ return [];
80
+ }
81
+ /** @internal */
82
+ onButtonClick(event) {
83
+ event.stopPropagation();
84
+ const oldState = this.currentState;
85
+ const newState = oldState === BreakpointState.off
86
+ ? BreakpointState.enabled
87
+ : BreakpointState.off;
88
+ this.emitToggle(oldState, newState);
89
+ }
90
+ /** @internal */
91
+ onContextMenu(event) {
92
+ event.preventDefault();
93
+ event.stopPropagation();
94
+ this.requestContextMenu();
95
+ }
96
+ /** @internal */
97
+ onKeyDown(event) {
98
+ if ((event.key === 'F10' && event.shiftKey)
99
+ || event.key === TsTableColumnBreakpointCellView.menuKeyAlias
100
+ || (event.key === TsTableColumnBreakpointCellView.contextMenuKeyAlias)) {
101
+ event.preventDefault();
102
+ event.stopPropagation();
103
+ this.requestContextMenu();
104
+ return false;
105
+ }
106
+ if (event.key === 'F9' || ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'b')) {
107
+ event.preventDefault();
108
+ event.stopPropagation();
109
+ this.onButtonClick(event);
110
+ return false;
111
+ }
112
+ if (event.key === 'ArrowDown') {
113
+ event.preventDefault();
114
+ event.stopPropagation();
115
+ this.focusLastItemWhenOpened = false;
116
+ this.requestContextMenu();
117
+ return false;
118
+ }
119
+ if (event.key === 'ArrowUp') {
120
+ event.preventDefault();
121
+ event.stopPropagation();
122
+ this.focusLastItemWhenOpened = true;
123
+ this.requestContextMenu();
124
+ return false;
125
+ }
126
+ return true;
127
+ }
128
+ regionLoadedHandler() {
129
+ if (this.focusLastItemWhenOpened) {
130
+ this.focusLastItemWhenOpened = false;
131
+ this.focusLastMenuItem();
132
+ }
133
+ else {
134
+ this.focusMenu();
135
+ }
136
+ }
137
+ regionChanged(prev, _next) {
138
+ if (prev) {
139
+ prev.removeEventListener('change', this.menuChangeHandler, { capture: true });
140
+ }
141
+ if (this.region) {
142
+ this.region.anchorElement = this.button ?? this;
143
+ this.region.addEventListener('change', this.menuChangeHandler, { capture: true });
144
+ }
145
+ }
146
+ buttonChanged() {
147
+ if (this.region) {
148
+ this.region.anchorElement = this.button ?? this;
149
+ }
150
+ }
151
+ focusoutHandler(e) {
152
+ if (!this.open) {
153
+ return true;
154
+ }
155
+ const focusTarget = e.relatedTarget;
156
+ if (!this.contains(focusTarget)
157
+ && !this.region?.contains(focusTarget)
158
+ && !this.getMenu()?.contains(focusTarget)) {
159
+ this.open = false;
160
+ return false;
161
+ }
162
+ return true;
163
+ }
164
+ contextMenuKeyDownHandler(e) {
165
+ switch (e.key) {
166
+ case 'Escape':
167
+ this.open = false;
168
+ this.button?.focus();
169
+ return false;
170
+ default:
171
+ return true;
172
+ }
173
+ }
174
+ onContextMenuChange(event) {
175
+ const requestedState = this.getRequestedStateFromEvent(event);
176
+ if (!requestedState) {
177
+ return;
178
+ }
179
+ const detail = {
180
+ recordId: this.recordId,
181
+ requestedState,
182
+ currentState: this.currentState
183
+ };
184
+ this.$emit('breakpoint-column-state-change-requested', detail);
185
+ }
186
+ getMenu() {
187
+ if (!this.slottedMenus || this.slottedMenus.length === 0) {
188
+ return undefined;
189
+ }
190
+ let currentItem = this.slottedMenus[0];
191
+ while (currentItem) {
192
+ if (currentItem.getAttribute('role') === 'menu') {
193
+ return currentItem;
194
+ }
195
+ if (this.isSlotElement(currentItem)) {
196
+ const firstNode = currentItem.assignedNodes()[0];
197
+ if (firstNode instanceof HTMLElement) {
198
+ currentItem = firstNode;
199
+ }
200
+ else {
201
+ currentItem = undefined;
202
+ }
203
+ }
204
+ else {
205
+ return undefined;
206
+ }
207
+ }
208
+ return undefined;
209
+ }
210
+ isSlotElement(element) {
211
+ return element?.nodeName === 'SLOT';
212
+ }
213
+ focusMenu() {
214
+ this.getMenu()?.focus();
215
+ }
216
+ focusLastMenuItem() {
217
+ const menuItems = this.getMenu()?.querySelectorAll('[role=menuitem]');
218
+ if (menuItems && menuItems.length > 0) {
219
+ const lastMenuItem = menuItems[menuItems.length - 1];
220
+ lastMenuItem.focus();
221
+ }
222
+ }
223
+ emitToggle(oldState, newState) {
224
+ const detail = {
225
+ recordId: this.recordId,
226
+ newState,
227
+ oldState
228
+ };
229
+ this.$emit('breakpoint-column-toggle', detail);
230
+ }
231
+ requestContextMenu() {
232
+ this.openMenuFromColumnSlot();
233
+ }
234
+ openMenuFromColumnSlot() {
235
+ const configuredSlotName = this.columnConfig?.menuSlot;
236
+ if (!configuredSlotName) {
237
+ return;
238
+ }
239
+ const eventDetail = {
240
+ slots: [
241
+ {
242
+ name: configuredSlotName,
243
+ slot: breakpointCellViewMenuSlotName
244
+ }
245
+ ]
246
+ };
247
+ this.$emit('cell-view-slots-request', eventDetail);
248
+ this.open = true;
249
+ }
250
+ getRequestedStateFromEvent(event) {
251
+ const target = event.target;
252
+ if (!(target instanceof HTMLElement)) {
253
+ return undefined;
254
+ }
255
+ const stateElement = target.closest(`[${breakpointMenuItemStateAttributeName}]`);
256
+ if (!stateElement) {
257
+ return undefined;
258
+ }
259
+ const requestedState = stateElement.getAttribute(breakpointMenuItemStateAttributeName);
260
+ if (requestedState && Object.values(BreakpointState).includes(requestedState)) {
261
+ return requestedState;
262
+ }
263
+ return undefined;
264
+ }
265
+ }
266
+ TsTableColumnBreakpointCellView.menuKeyAlias = 'Menu';
267
+ TsTableColumnBreakpointCellView.contextMenuKeyAlias = 'ContextMenu';
268
+ __decorate([
269
+ attr({ mode: 'boolean' })
270
+ ], TsTableColumnBreakpointCellView.prototype, "open", void 0);
271
+ __decorate([
272
+ observable
273
+ ], TsTableColumnBreakpointCellView.prototype, "region", void 0);
274
+ __decorate([
275
+ observable
276
+ ], TsTableColumnBreakpointCellView.prototype, "slottedMenus", void 0);
277
+ __decorate([
278
+ observable
279
+ ], TsTableColumnBreakpointCellView.prototype, "breakpointEnabledString", void 0);
280
+ __decorate([
281
+ observable
282
+ ], TsTableColumnBreakpointCellView.prototype, "breakpointDisabledString", void 0);
283
+ __decorate([
284
+ observable
285
+ ], TsTableColumnBreakpointCellView.prototype, "breakpointHitString", void 0);
286
+ __decorate([
287
+ observable
288
+ ], TsTableColumnBreakpointCellView.prototype, "breakpointConditionalString", void 0);
289
+ __decorate([
290
+ observable
291
+ ], TsTableColumnBreakpointCellView.prototype, "breakpointHitDisabledString", void 0);
292
+ __decorate([
293
+ observable
294
+ ], TsTableColumnBreakpointCellView.prototype, "breakpointAddString", void 0);
295
+ __decorate([
296
+ observable
297
+ ], TsTableColumnBreakpointCellView.prototype, "breakpointRemoveString", void 0);
298
+ const tsTableColumnBreakpointCellView = TsTableColumnBreakpointCellView.compose({
299
+ baseName: 'ts-table-column-breakpoint-cell-view',
300
+ template,
301
+ styles
302
+ });
303
+ DesignSystem.getOrCreate().withPrefix('ok').register(tsTableColumnBreakpointCellView());
304
+ export const tsTableColumnBreakpointCellViewTag = 'ok-ts-table-column-breakpoint-cell-view';
305
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ts/table-column/breakpoint/cell-view/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { DesignSystem } from '@ni/fast-foundation';\nimport { TableCellView } from '@ni/nimble-components/dist/esm/table-column/base/cell-view';\nimport { attr, observable } from '@ni/fast-element';\nimport type { AnchoredRegion } from '@ni/nimble-components/dist/esm/anchored-region';\nimport { MenuButtonPosition, type MenuButtonPosition as BreakpointMenuPosition } from '@ni/nimble-components/dist/esm/menu-button/types';\nimport type { CellViewSlotRequestEventDetail } from '@ni/nimble-components/dist/esm/table/types';\nimport { template } from './template';\nimport { styles } from './styles';\nimport {\n BreakpointState,\n breakpointCellViewMenuSlotName,\n breakpointMenuItemStateAttributeName,\n type BreakpointToggleEventDetail,\n type BreakpointStateChangeRequestedEventDetail\n} from '../types';\nimport type { TsTableColumnBreakpointCellRecord, TsTableColumnBreakpointColumnConfig } from '..';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ok-ts-table-column-breakpoint-cell-view': TsTableColumnBreakpointCellView;\n }\n}\n\n/**\n * Cell view for the breakpoint column that renders a clickable breakpoint indicator.\n */\nexport class TsTableColumnBreakpointCellView extends TableCellView<\n TsTableColumnBreakpointCellRecord,\n TsTableColumnBreakpointColumnConfig\n> {\n private static readonly menuKeyAlias = 'Menu';\n\n private static readonly contextMenuKeyAlias = 'ContextMenu';\n\n /** @internal */\n public button?: HTMLButtonElement;\n\n /**\n * Specifies whether or not the menu is open.\n */\n @attr({ mode: 'boolean' })\n public open = false;\n\n /** @internal */\n @observable\n public readonly region?: AnchoredRegion;\n\n /** @internal */\n @observable\n public readonly slottedMenus?: HTMLElement[];\n\n private focusLastItemWhenOpened = false;\n\n /** @internal */\n @observable\n private readonly breakpointEnabledString = 'Breakpoint enabled';\n\n /** @internal */\n @observable\n private readonly breakpointDisabledString = 'Breakpoint disabled';\n\n /** @internal */\n @observable\n private readonly breakpointHitString = 'Breakpoint hit';\n\n /** @internal */\n @observable\n private readonly breakpointConditionalString = 'Conditional breakpoint';\n\n /** @internal */\n @observable\n private readonly breakpointHitDisabledString = 'Breakpoint hit (disabled)';\n\n /** @internal */\n @observable\n private readonly breakpointAddString = 'Add breakpoint';\n\n /** @internal */\n @observable\n private readonly breakpointRemoveString = 'Remove breakpoint';\n\n /** @internal */\n public get currentState(): BreakpointState {\n const value = this.cellRecord?.value;\n if (value && Object.values(BreakpointState).includes(value as BreakpointState)) {\n return value as BreakpointState;\n }\n return BreakpointState.off;\n }\n\n /** @internal */\n public get tooltipText(): string {\n if (this.currentState === BreakpointState.off) {\n return this.breakpointAddString;\n }\n return this.breakpointRemoveString;\n }\n\n /** @internal */\n public get ariaLabelText(): string {\n switch (this.currentState) {\n case BreakpointState.enabled:\n return this.breakpointEnabledString;\n case BreakpointState.disabled:\n return this.breakpointDisabledString;\n case BreakpointState.hit:\n return this.breakpointHitString;\n case BreakpointState.conditional:\n return this.breakpointConditionalString;\n case BreakpointState.hitDisabled:\n return this.breakpointHitDisabledString;\n default:\n return this.breakpointAddString;\n }\n }\n\n /** @internal */\n public get menuPosition(): BreakpointMenuPosition {\n return this.columnConfig?.position ?? MenuButtonPosition.auto;\n }\n\n public override get tabbableChildren(): HTMLElement[] {\n if (this.button) {\n return [this.button];\n }\n return [];\n }\n\n /** @internal */\n public onButtonClick(event: Event): void {\n event.stopPropagation();\n const oldState = this.currentState;\n const newState = oldState === BreakpointState.off\n ? BreakpointState.enabled\n : BreakpointState.off;\n this.emitToggle(oldState, newState);\n }\n\n /** @internal */\n public onContextMenu(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.requestContextMenu();\n }\n\n /** @internal */\n public onKeyDown(event: KeyboardEvent): boolean {\n if ((event.key === 'F10' && event.shiftKey)\n || event.key === TsTableColumnBreakpointCellView.menuKeyAlias\n || (event.key === TsTableColumnBreakpointCellView.contextMenuKeyAlias)) {\n event.preventDefault();\n event.stopPropagation();\n this.requestContextMenu();\n return false;\n }\n\n if (event.key === 'F9' || ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'b')) {\n event.preventDefault();\n event.stopPropagation();\n this.onButtonClick(event);\n return false;\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n event.stopPropagation();\n this.focusLastItemWhenOpened = false;\n this.requestContextMenu();\n return false;\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n event.stopPropagation();\n this.focusLastItemWhenOpened = true;\n this.requestContextMenu();\n return false;\n }\n\n return true;\n }\n\n public regionLoadedHandler(): void {\n if (this.focusLastItemWhenOpened) {\n this.focusLastItemWhenOpened = false;\n this.focusLastMenuItem();\n } else {\n this.focusMenu();\n }\n }\n\n public regionChanged(prev: AnchoredRegion | undefined, _next: AnchoredRegion | undefined): void {\n if (prev) {\n prev.removeEventListener('change', this.menuChangeHandler, { capture: true });\n }\n\n if (this.region) {\n this.region.anchorElement = this.button ?? this;\n this.region.addEventListener('change', this.menuChangeHandler, { capture: true });\n }\n }\n\n public buttonChanged(): void {\n if (this.region) {\n this.region.anchorElement = this.button ?? this;\n }\n }\n\n public focusoutHandler(e: FocusEvent): boolean {\n if (!this.open) {\n return true;\n }\n\n const focusTarget = e.relatedTarget as HTMLElement;\n if (\n !this.contains(focusTarget)\n && !this.region?.contains(focusTarget)\n && !this.getMenu()?.contains(focusTarget)\n ) {\n this.open = false;\n return false;\n }\n\n return true;\n }\n\n public contextMenuKeyDownHandler(e: KeyboardEvent): boolean {\n switch (e.key) {\n case 'Escape':\n this.open = false;\n this.button?.focus();\n return false;\n default:\n return true;\n }\n }\n\n public onContextMenuChange(event: Event): void {\n const requestedState = this.getRequestedStateFromEvent(event);\n if (!requestedState) {\n return;\n }\n\n const detail: BreakpointStateChangeRequestedEventDetail = {\n recordId: this.recordId!,\n requestedState,\n currentState: this.currentState\n };\n this.$emit('breakpoint-column-state-change-requested', detail);\n }\n\n private getMenu(): HTMLElement | undefined {\n if (!this.slottedMenus || this.slottedMenus.length === 0) {\n return undefined;\n }\n\n let currentItem: HTMLElement | undefined = this.slottedMenus[0];\n while (currentItem) {\n if (currentItem.getAttribute('role') === 'menu') {\n return currentItem;\n }\n\n if (this.isSlotElement(currentItem)) {\n const firstNode = currentItem.assignedNodes()[0];\n if (firstNode instanceof HTMLElement) {\n currentItem = firstNode;\n } else {\n currentItem = undefined;\n }\n } else {\n return undefined;\n }\n }\n\n return undefined;\n }\n\n private isSlotElement(\n element: HTMLElement | undefined\n ): element is HTMLSlotElement {\n return element?.nodeName === 'SLOT';\n }\n\n private focusMenu(): void {\n this.getMenu()?.focus();\n }\n\n private focusLastMenuItem(): void {\n const menuItems = this.getMenu()?.querySelectorAll('[role=menuitem]');\n if (menuItems && menuItems.length > 0) {\n const lastMenuItem = menuItems[menuItems.length - 1] as HTMLElement;\n lastMenuItem.focus();\n }\n }\n\n private emitToggle(\n oldState: BreakpointState,\n newState: BreakpointState\n ): void {\n const detail: BreakpointToggleEventDetail = {\n recordId: this.recordId!,\n newState,\n oldState\n };\n this.$emit('breakpoint-column-toggle', detail);\n }\n\n private requestContextMenu(): void {\n this.openMenuFromColumnSlot();\n }\n\n private openMenuFromColumnSlot(): void {\n const configuredSlotName = this.columnConfig?.menuSlot;\n if (!configuredSlotName) {\n return;\n }\n\n const eventDetail: CellViewSlotRequestEventDetail = {\n slots: [\n {\n name: configuredSlotName,\n slot: breakpointCellViewMenuSlotName\n }\n ]\n };\n this.$emit('cell-view-slots-request', eventDetail);\n this.open = true;\n }\n\n private readonly menuChangeHandler = (): void => {\n this.open = false;\n this.button?.focus();\n };\n\n private getRequestedStateFromEvent(event: Event): BreakpointState | undefined {\n const target = event.target;\n if (!(target instanceof HTMLElement)) {\n return undefined;\n }\n\n const stateElement = target.closest(`[${breakpointMenuItemStateAttributeName}]`);\n if (!stateElement) {\n return undefined;\n }\n\n const requestedState = stateElement.getAttribute(breakpointMenuItemStateAttributeName);\n if (requestedState && Object.values(BreakpointState).includes(requestedState as BreakpointState)) {\n return requestedState as BreakpointState;\n }\n\n return undefined;\n }\n}\n\nconst tsTableColumnBreakpointCellView = TsTableColumnBreakpointCellView.compose({\n baseName: 'ts-table-column-breakpoint-cell-view',\n template,\n styles\n});\nDesignSystem.getOrCreate().withPrefix('ok').register(tsTableColumnBreakpointCellView());\nexport const tsTableColumnBreakpointCellViewTag = 'ok-ts-table-column-breakpoint-cell-view';\n"]}
@@ -0,0 +1 @@
1
+ export declare const styles: import("@ni/fast-element").ElementStyles;
@@ -0,0 +1,48 @@
1
+ import { css } from '@ni/fast-element';
2
+ import { display } from '@ni/nimble-components/dist/esm/utilities/style/display';
3
+ import { borderHoverColor, borderWidth, iconSize, } from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';
4
+ export const styles = css `
5
+ ${display('inline-flex')}
6
+
7
+ :host {
8
+ align-items: center;
9
+ justify-content: center;
10
+ flex-shrink: 0;
11
+ }
12
+
13
+ .breakpoint-button {
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ flex-shrink: 0;
18
+ padding: 0;
19
+ margin: 0;
20
+ border: none;
21
+ background: transparent;
22
+ cursor: pointer;
23
+ outline-offset: -1px;
24
+ width: ${iconSize};
25
+ height: ${iconSize};
26
+ }
27
+
28
+ .breakpoint-button:focus-visible {
29
+ outline: calc(2 * ${borderWidth}) solid ${borderHoverColor};
30
+ outline-offset: -2px;
31
+ }
32
+
33
+ .breakpoint-button svg {
34
+ width: ${iconSize};
35
+ height: ${iconSize};
36
+ }
37
+
38
+ .breakpoint-button.state-off > * {
39
+ opacity: 0;
40
+ }
41
+
42
+ .breakpoint-button.state-off:hover > *,
43
+ .breakpoint-button.state-off:focus-visible > * {
44
+ opacity: 1;
45
+ }
46
+
47
+ `;
48
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../../src/ts/table-column/breakpoint/cell-view/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,wDAAwD,CAAC;AACjF,OAAO,EACH,gBAAgB,EAChB,WAAW,EACX,QAAQ,GACX,MAAM,6DAA6D,CAAC;AAErE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;;iBAmBX,QAAQ;kBACP,QAAQ;;;;4BAIE,WAAW,WAAW,gBAAgB;;;;;iBAKjD,QAAQ;kBACP,QAAQ;;;;;;;;;;;;CAYzB,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport { display } from '@ni/nimble-components/dist/esm/utilities/style/display';\nimport {\n borderHoverColor,\n borderWidth,\n iconSize,\n} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';\n\nexport const styles = css`\n ${display('inline-flex')}\n\n :host {\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .breakpoint-button {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n padding: 0;\n margin: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n outline-offset: -1px;\n width: ${iconSize};\n height: ${iconSize};\n }\n\n .breakpoint-button:focus-visible {\n outline: calc(2 * ${borderWidth}) solid ${borderHoverColor};\n outline-offset: -2px;\n }\n\n .breakpoint-button svg {\n width: ${iconSize};\n height: ${iconSize};\n }\n\n .breakpoint-button.state-off > * {\n opacity: 0;\n }\n\n .breakpoint-button.state-off:hover > *,\n .breakpoint-button.state-off:focus-visible > * {\n opacity: 1;\n }\n\n`;\n"]}
@@ -0,0 +1,2 @@
1
+ import type { TsTableColumnBreakpointCellView } from '.';
2
+ export declare const template: import("@ni/fast-element").ViewTemplate<TsTableColumnBreakpointCellView, any>;