@ni/ok-components 1.3.7 → 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.
- package/dist/all-components-bundle.js +938 -434
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +3574 -3443
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/custom-elements.json +569 -33
- package/dist/custom-elements.md +85 -12
- package/dist/esm/ts/all-ts.d.ts +1 -0
- package/dist/esm/ts/all-ts.js +1 -0
- package/dist/esm/ts/all-ts.js.map +1 -1
- package/dist/esm/ts/table-column/breakpoint/cell-view/index.d.ts +73 -0
- package/dist/esm/ts/table-column/breakpoint/cell-view/index.js +305 -0
- package/dist/esm/ts/table-column/breakpoint/cell-view/index.js.map +1 -0
- package/dist/esm/ts/table-column/breakpoint/cell-view/styles.d.ts +1 -0
- package/dist/esm/ts/table-column/breakpoint/cell-view/styles.js +48 -0
- package/dist/esm/ts/table-column/breakpoint/cell-view/styles.js.map +1 -0
- package/dist/esm/ts/table-column/breakpoint/cell-view/template.d.ts +2 -0
- package/dist/esm/ts/table-column/breakpoint/cell-view/template.js +55 -0
- package/dist/esm/ts/table-column/breakpoint/cell-view/template.js.map +1 -0
- package/dist/esm/ts/table-column/breakpoint/index.d.ts +36 -0
- package/dist/esm/ts/table-column/breakpoint/index.js +101 -0
- package/dist/esm/ts/table-column/breakpoint/index.js.map +1 -0
- package/dist/esm/ts/table-column/breakpoint/template.d.ts +2 -0
- package/dist/esm/ts/table-column/breakpoint/template.js +8 -0
- package/dist/esm/ts/table-column/breakpoint/template.js.map +1 -0
- package/dist/esm/ts/table-column/breakpoint/testing/ts-table-column-breakpoint.pageobject.d.ts +23 -0
- package/dist/esm/ts/table-column/breakpoint/testing/ts-table-column-breakpoint.pageobject.js +69 -0
- package/dist/esm/ts/table-column/breakpoint/testing/ts-table-column-breakpoint.pageobject.js.map +1 -0
- package/dist/esm/ts/table-column/breakpoint/types.d.ts +32 -0
- package/dist/esm/ts/table-column/breakpoint/types.js +16 -0
- package/dist/esm/ts/table-column/breakpoint/types.js.map +1 -0
- package/package.json +1 -1
package/dist/custom-elements.md
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
## class: `
|
|
1
|
+
## class: `TsIconDynamic`
|
|
2
2
|
|
|
3
3
|
### Superclass
|
|
4
4
|
|
|
5
|
-
| Name
|
|
6
|
-
|
|
|
7
|
-
| `
|
|
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: `
|
|
317
|
+
## class: `ExButton`
|
|
312
318
|
|
|
313
319
|
### Superclass
|
|
314
320
|
|
|
315
|
-
| Name
|
|
316
|
-
|
|
|
317
|
-
| `
|
|
321
|
+
| Name | Module | Package |
|
|
322
|
+
| ------------------- | ------ | ------------------- |
|
|
323
|
+
| `FoundationElement` | | @ni/fast-foundation |
|
|
318
324
|
|
|
319
|
-
|
|
325
|
+
<hr/>
|
|
320
326
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
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/>
|
package/dist/esm/ts/all-ts.d.ts
CHANGED
package/dist/esm/ts/all-ts.js
CHANGED
|
@@ -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"]}
|