@ni/ok-components 1.6.9 → 1.8.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.
@@ -1750,6 +1750,14 @@
1750
1750
  "privacy": "public",
1751
1751
  "default": "false"
1752
1752
  },
1753
+ {
1754
+ "kind": "field",
1755
+ "name": "size",
1756
+ "type": {
1757
+ "text": "FvSummaryPanelSizeType"
1758
+ },
1759
+ "privacy": "public"
1760
+ },
1753
1761
  {
1754
1762
  "kind": "field",
1755
1763
  "name": "editItemsButtonLabel",
@@ -1759,9 +1767,39 @@
1759
1767
  "privacy": "public",
1760
1768
  "default": "'Configure'"
1761
1769
  },
1770
+ {
1771
+ "kind": "field",
1772
+ "name": "summaryItemsResizeObserver",
1773
+ "type": {
1774
+ "text": "ResizeObserver"
1775
+ },
1776
+ "privacy": "private",
1777
+ "readonly": true,
1778
+ "default": "new ResizeObserver(() => this.updateOverflow())"
1779
+ },
1780
+ {
1781
+ "kind": "method",
1782
+ "name": "observeSummaryItems",
1783
+ "privacy": "private",
1784
+ "return": {
1785
+ "type": {
1786
+ "text": "void"
1787
+ }
1788
+ }
1789
+ },
1762
1790
  {
1763
1791
  "kind": "method",
1764
- "name": "syncTileLegacyStyle",
1792
+ "name": "updateOverflow",
1793
+ "privacy": "private",
1794
+ "return": {
1795
+ "type": {
1796
+ "text": "void"
1797
+ }
1798
+ }
1799
+ },
1800
+ {
1801
+ "kind": "method",
1802
+ "name": "syncTileAttributes",
1765
1803
  "privacy": "private",
1766
1804
  "return": {
1767
1805
  "type": {
@@ -1795,6 +1833,13 @@
1795
1833
  "default": "false",
1796
1834
  "fieldName": "legacyStyle"
1797
1835
  },
1836
+ {
1837
+ "name": "size",
1838
+ "type": {
1839
+ "text": "FvSummaryPanelSizeType"
1840
+ },
1841
+ "fieldName": "size"
1842
+ },
1798
1843
  {
1799
1844
  "name": "edit-items-button-label",
1800
1845
  "type": {
@@ -1819,6 +1864,14 @@
1819
1864
  }
1820
1865
  ],
1821
1866
  "exports": [
1867
+ {
1868
+ "kind": "js",
1869
+ "name": "FvSummaryPanelSize",
1870
+ "declaration": {
1871
+ "name": "FvSummaryPanelSize",
1872
+ "module": "./types"
1873
+ }
1874
+ },
1822
1875
  {
1823
1876
  "kind": "js",
1824
1877
  "name": "FvSummaryPanel",
@@ -1837,6 +1890,30 @@
1837
1890
  }
1838
1891
  ]
1839
1892
  },
1893
+ {
1894
+ "kind": "javascript-module",
1895
+ "path": "src/fv/summary-panel/types.ts",
1896
+ "declarations": [
1897
+ {
1898
+ "kind": "variable",
1899
+ "name": "FvSummaryPanelSize",
1900
+ "type": {
1901
+ "text": "{\n default: 'default',\n compact: 'compact'\n}"
1902
+ },
1903
+ "default": "{ default: 'default', compact: 'compact' }"
1904
+ }
1905
+ ],
1906
+ "exports": [
1907
+ {
1908
+ "kind": "js",
1909
+ "name": "FvSummaryPanelSize",
1910
+ "declaration": {
1911
+ "name": "FvSummaryPanelSize",
1912
+ "module": "src/fv/summary-panel/types.ts"
1913
+ }
1914
+ }
1915
+ ]
1916
+ },
1840
1917
  {
1841
1918
  "kind": "javascript-module",
1842
1919
  "path": "src/fv/summary-panel-tile/index.ts",
@@ -1873,6 +1950,14 @@
1873
1950
  "privacy": "public",
1874
1951
  "default": "false"
1875
1952
  },
1953
+ {
1954
+ "kind": "field",
1955
+ "name": "size",
1956
+ "type": {
1957
+ "text": "FvSummaryPanelSizeType"
1958
+ },
1959
+ "privacy": "public"
1960
+ },
1876
1961
  {
1877
1962
  "kind": "field",
1878
1963
  "name": "selected",
@@ -1926,6 +2011,13 @@
1926
2011
  "default": "false",
1927
2012
  "fieldName": "legacyStyle"
1928
2013
  },
2014
+ {
2015
+ "name": "size",
2016
+ "type": {
2017
+ "text": "FvSummaryPanelSizeType"
2018
+ },
2019
+ "fieldName": "size"
2020
+ },
1929
2021
  {
1930
2022
  "name": "selected",
1931
2023
  "type": {
@@ -318,11 +318,12 @@
318
318
 
319
319
  ### Fields
320
320
 
321
- | Name | Privacy | Type | Default | Description | Inherited From |
322
- | ---------------------- | ------- | --------- | ------------- | ----------- | -------------- |
323
- | `showEditItemsButton` | public | `boolean` | `false` | | |
324
- | `legacyStyle` | public | `boolean` | `false` | | |
325
- | `editItemsButtonLabel` | public | `string` | `'Configure'` | | |
321
+ | Name | Privacy | Type | Default | Description | Inherited From |
322
+ | ---------------------- | ------- | ------------------------ | ------------- | ----------- | -------------- |
323
+ | `showEditItemsButton` | public | `boolean` | `false` | | |
324
+ | `legacyStyle` | public | `boolean` | `false` | | |
325
+ | `size` | public | `FvSummaryPanelSizeType` | | | |
326
+ | `editItemsButtonLabel` | public | `string` | `'Configure'` | | |
326
327
 
327
328
  ### Events
328
329
 
@@ -336,6 +337,7 @@
336
337
  | ------------------------- | -------------------- | -------------- |
337
338
  | `show-edit-items-button` | showEditItemsButton | |
338
339
  | `legacy-style` | legacyStyle | |
340
+ | `size` | size | |
339
341
  | `edit-items-button-label` | editItemsButtonLabel | |
340
342
 
341
343
  <hr/>
@@ -355,6 +357,7 @@
355
357
  | `count` | public | `string` | `''` | | |
356
358
  | `label` | public | `string` | `''` | | |
357
359
  | `legacyStyle` | public | `boolean` | `false` | | |
360
+ | `size` | public | `FvSummaryPanelSizeType` | | | |
358
361
  | `selected` | public | `boolean` | `false` | | |
359
362
  | `textPosition` | public | `FvSummaryPanelTileTextPositionType` | | | |
360
363
 
@@ -365,6 +368,7 @@
365
368
  | `count` | count | |
366
369
  | `label` | label | |
367
370
  | `legacy-style` | legacyStyle | |
371
+ | `size` | size | |
368
372
  | `selected` | selected | |
369
373
  | `text-position` | textPosition | |
370
374
 
@@ -1,6 +1,8 @@
1
1
  import { FoundationElement } from '@ni/fast-foundation';
2
2
  import '@ni/nimble-components/dist/esm/button';
3
3
  import '@ni/nimble-components/dist/esm/icons/cog';
4
+ import { type FvSummaryPanelSize as FvSummaryPanelSizeType } from './types';
5
+ export { FvSummaryPanelSize } from './types';
4
6
  declare global {
5
7
  interface HTMLElementTagNameMap {
6
8
  'ok-fv-summary-panel': FvSummaryPanel;
@@ -12,15 +14,30 @@ declare global {
12
14
  export declare class FvSummaryPanel extends FoundationElement {
13
15
  showEditItemsButton: boolean;
14
16
  legacyStyle: boolean;
17
+ size: FvSummaryPanelSizeType;
18
+ /** @internal */
19
+ hasOverflow: boolean;
20
+ /** @internal */
21
+ readonly summaryItems: HTMLElement;
15
22
  editItemsButtonLabel: string;
23
+ private readonly summaryItemsResizeObserver;
24
+ constructor();
16
25
  /** @internal */
17
26
  connectedCallback(): void;
18
27
  /** @internal */
28
+ disconnectedCallback(): void;
29
+ /** @internal */
19
30
  legacyStyleChanged(): void;
20
31
  /** @internal */
32
+ sizeChanged(): void;
33
+ /** @internal */
21
34
  handleEditItemsClick(): void;
22
35
  /** @internal */
23
36
  handleItemsSlotChange(): void;
24
- private syncTileLegacyStyle;
37
+ /** @internal */
38
+ handleItemsScroll(): void;
39
+ private observeSummaryItems;
40
+ private updateOverflow;
41
+ private syncTileAttributes;
25
42
  }
26
43
  export declare const fvSummaryPanelTag = "ok-fv-summary-panel";
@@ -1,29 +1,49 @@
1
1
  import { __decorate } from "tslib";
2
- import { attr } from '@ni/fast-element';
2
+ import { attr, observable } from '@ni/fast-element';
3
3
  import { DesignSystem, FoundationElement } from '@ni/fast-foundation';
4
4
  import '@ni/nimble-components/dist/esm/button';
5
5
  import '@ni/nimble-components/dist/esm/icons/cog';
6
6
  import { styles } from './styles';
7
7
  import { template } from './template';
8
+ import { FvSummaryPanelSize } from './types';
9
+ export { FvSummaryPanelSize } from './types';
8
10
  /**
9
11
  * A layout container for summary tiles with an optional edit-items affordance.
10
12
  */
11
13
  export class FvSummaryPanel extends FoundationElement {
12
14
  constructor() {
13
- super(...arguments);
15
+ super();
14
16
  this.showEditItemsButton = false;
15
17
  this.legacyStyle = false;
18
+ this.size = FvSummaryPanelSize.default;
19
+ /** @internal */
20
+ this.hasOverflow = false;
16
21
  this.editItemsButtonLabel = 'Configure';
22
+ this.summaryItemsResizeObserver = new ResizeObserver(() => this.updateOverflow());
17
23
  }
18
24
  /** @internal */
19
25
  connectedCallback() {
20
26
  super.connectedCallback();
21
- this.syncTileLegacyStyle();
27
+ this.syncTileAttributes();
28
+ this.observeSummaryItems();
29
+ }
30
+ /** @internal */
31
+ disconnectedCallback() {
32
+ super.disconnectedCallback();
33
+ this.summaryItemsResizeObserver.disconnect();
22
34
  }
23
35
  /** @internal */
24
36
  legacyStyleChanged() {
25
37
  if (this.$fastController.isConnected) {
26
- this.syncTileLegacyStyle();
38
+ this.syncTileAttributes();
39
+ this.updateOverflow();
40
+ }
41
+ }
42
+ /** @internal */
43
+ sizeChanged() {
44
+ if (this.$fastController.isConnected) {
45
+ this.syncTileAttributes();
46
+ this.updateOverflow();
27
47
  }
28
48
  }
29
49
  /** @internal */
@@ -35,9 +55,31 @@ export class FvSummaryPanel extends FoundationElement {
35
55
  }
36
56
  /** @internal */
37
57
  handleItemsSlotChange() {
38
- this.syncTileLegacyStyle();
58
+ this.syncTileAttributes();
59
+ this.observeSummaryItems();
60
+ }
61
+ /** @internal */
62
+ handleItemsScroll() {
63
+ this.updateOverflow();
39
64
  }
40
- syncTileLegacyStyle() {
65
+ observeSummaryItems() {
66
+ this.summaryItemsResizeObserver.disconnect();
67
+ this.summaryItemsResizeObserver.observe(this.summaryItems);
68
+ for (const element of this.shadowRoot?.querySelector('slot')?.assignedElements({ flatten: true }) ?? []) {
69
+ this.summaryItemsResizeObserver.observe(element);
70
+ }
71
+ this.updateOverflow();
72
+ }
73
+ updateOverflow() {
74
+ const maxScrollDistance = this.summaryItems.scrollWidth - this.summaryItems.clientWidth;
75
+ const scrollPosition = getComputedStyle(this.summaryItems).direction === 'rtl'
76
+ ? Math.abs(this.summaryItems.scrollLeft)
77
+ : this.summaryItems.scrollLeft;
78
+ this.hasOverflow = this.size === FvSummaryPanelSize.compact
79
+ && maxScrollDistance - scrollPosition > 0;
80
+ this.summaryItems.classList.toggle('has-overflow', this.hasOverflow);
81
+ }
82
+ syncTileAttributes() {
41
83
  for (const element of this.shadowRoot?.querySelector('slot')?.assignedElements({ flatten: true }) ?? []) {
42
84
  if (element.localName !== 'ok-fv-summary-panel-tile') {
43
85
  continue;
@@ -48,6 +90,12 @@ export class FvSummaryPanel extends FoundationElement {
48
90
  else {
49
91
  element.removeAttribute('legacy-style');
50
92
  }
93
+ if (this.size === FvSummaryPanelSize.compact) {
94
+ element.setAttribute('size', FvSummaryPanelSize.compact);
95
+ }
96
+ else {
97
+ element.removeAttribute('size');
98
+ }
51
99
  }
52
100
  }
53
101
  }
@@ -57,6 +105,12 @@ __decorate([
57
105
  __decorate([
58
106
  attr({ attribute: 'legacy-style', mode: 'boolean' })
59
107
  ], FvSummaryPanel.prototype, "legacyStyle", void 0);
108
+ __decorate([
109
+ attr
110
+ ], FvSummaryPanel.prototype, "size", void 0);
111
+ __decorate([
112
+ observable
113
+ ], FvSummaryPanel.prototype, "hasOverflow", void 0);
60
114
  __decorate([
61
115
  attr({ attribute: 'edit-items-button-label' })
62
116
  ], FvSummaryPanel.prototype, "editItemsButtonLabel", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,uCAAuC,CAAC;AAC/C,OAAO,0CAA0C,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,iBAAiB;IAArD;;QAEW,wBAAmB,GAAG,KAAK,CAAC;QAG5B,gBAAW,GAAG,KAAK,CAAC;QAGpB,yBAAoB,GAAG,WAAW,CAAC;IAyC9C,CAAC;IAvCG,gBAAgB;IACA,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAED,gBAAgB;IACT,kBAAkB;QACrB,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,gBAAgB;IACT,oBAAoB;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE;YAC7C,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC,CAAC;IACR,CAAC;IAED,gBAAgB;IACT,qBAAqB;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAEO,mBAAmB;QACvB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACtG,IAAI,OAAO,CAAC,SAAS,KAAK,0BAA0B,EAAE,CAAC;gBACnD,SAAS;YACb,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC;IACL,CAAC;CACJ;AA/CU;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;2DAC5B;AAG5B;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;mDAC1B;AAGpB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC;4DACL;AA2C9C,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,CAAC;IAC5C,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC","sourcesContent":["import { attr } from '@ni/fast-element';\nimport { DesignSystem, FoundationElement } from '@ni/fast-foundation';\nimport '@ni/nimble-components/dist/esm/button';\nimport '@ni/nimble-components/dist/esm/icons/cog';\nimport { styles } from './styles';\nimport { template } from './template';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ok-fv-summary-panel': FvSummaryPanel;\n }\n}\n\n/**\n * A layout container for summary tiles with an optional edit-items affordance.\n */\nexport class FvSummaryPanel extends FoundationElement {\n @attr({ attribute: 'show-edit-items-button', mode: 'boolean' })\n public showEditItemsButton = false;\n\n @attr({ attribute: 'legacy-style', mode: 'boolean' })\n public legacyStyle = false;\n\n @attr({ attribute: 'edit-items-button-label' })\n public editItemsButtonLabel = 'Configure';\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n this.syncTileLegacyStyle();\n }\n\n /** @internal */\n public legacyStyleChanged(): void {\n if (this.$fastController.isConnected) {\n this.syncTileLegacyStyle();\n }\n }\n\n /** @internal */\n public handleEditItemsClick(): void {\n this.dispatchEvent(new CustomEvent('edit-items', {\n bubbles: true,\n composed: true\n }));\n }\n\n /** @internal */\n public handleItemsSlotChange(): void {\n this.syncTileLegacyStyle();\n }\n\n private syncTileLegacyStyle(): void {\n for (const element of this.shadowRoot?.querySelector('slot')?.assignedElements({ flatten: true }) ?? []) {\n if (element.localName !== 'ok-fv-summary-panel-tile') {\n continue;\n }\n\n if (this.legacyStyle) {\n element.setAttribute('legacy-style', '');\n } else {\n element.removeAttribute('legacy-style');\n }\n }\n }\n}\n\nconst okFvSummaryPanel = FvSummaryPanel.compose({\n baseName: 'fv-summary-panel',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('ok').register(okFvSummaryPanel());\nexport const fvSummaryPanelTag = 'ok-fv-summary-panel';"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,uCAAuC,CAAC;AAC/C,OAAO,0CAA0C,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAqD,MAAM,SAAS,CAAC;AAEhG,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAQ7C;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,iBAAiB;IAsBjD;QACI,KAAK,EAAE,CAAC;QArBL,wBAAmB,GAAG,KAAK,CAAC;QAG5B,gBAAW,GAAG,KAAK,CAAC;QAGpB,SAAI,GAA2B,kBAAkB,CAAC,OAAO,CAAC;QAEjE,gBAAgB;QAET,gBAAW,GAAG,KAAK,CAAC;QAMpB,yBAAoB,GAAG,WAAW,CAAC;QAMtC,IAAI,CAAC,0BAA0B,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,gBAAgB;IACA,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAED,gBAAgB;IACA,oBAAoB;QAChC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,CAAC;IACjD,CAAC;IAED,gBAAgB;IACT,kBAAkB;QACrB,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,gBAAgB;IACT,WAAW;QACd,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,gBAAgB;IACT,oBAAoB;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,YAAY,EAAE;YAC7C,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACjB,CAAC,CAAC,CAAC;IACR,CAAC;IAED,gBAAgB;IACT,qBAAqB;QACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAED,gBAAgB;IACT,iBAAiB;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,mBAAmB;QACvB,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACtG,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,cAAc;QAClB,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QACxF,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,KAAK,KAAK;YAC1E,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO;eACpD,iBAAiB,GAAG,cAAc,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACzE,CAAC;IAEO,kBAAkB;QACtB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACtG,IAAI,OAAO,CAAC,SAAS,KAAK,0BAA0B,EAAE,CAAC;gBACnD,SAAS;YACb,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC3C,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;QACL,CAAC;IACL,CAAC;CACJ;AA/GU;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;2DAC5B;AAG5B;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;mDAC1B;AAGpB;IADN,IAAI;4CAC4D;AAI1D;IADN,UAAU;mDACgB;AAMpB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC;4DACL;AAiG9C,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,CAAC;IAC5C,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC","sourcesContent":["import { attr, observable } from '@ni/fast-element';\nimport { DesignSystem, FoundationElement } from '@ni/fast-foundation';\nimport '@ni/nimble-components/dist/esm/button';\nimport '@ni/nimble-components/dist/esm/icons/cog';\nimport { styles } from './styles';\nimport { template } from './template';\nimport { FvSummaryPanelSize, type FvSummaryPanelSize as FvSummaryPanelSizeType } from './types';\n\nexport { FvSummaryPanelSize } from './types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ok-fv-summary-panel': FvSummaryPanel;\n }\n}\n\n/**\n * A layout container for summary tiles with an optional edit-items affordance.\n */\nexport class FvSummaryPanel extends FoundationElement {\n @attr({ attribute: 'show-edit-items-button', mode: 'boolean' })\n public showEditItemsButton = false;\n\n @attr({ attribute: 'legacy-style', mode: 'boolean' })\n public legacyStyle = false;\n\n @attr\n public size: FvSummaryPanelSizeType = FvSummaryPanelSize.default;\n\n /** @internal */\n @observable\n public hasOverflow = false;\n\n /** @internal */\n public readonly summaryItems!: HTMLElement;\n\n @attr({ attribute: 'edit-items-button-label' })\n public editItemsButtonLabel = 'Configure';\n\n private readonly summaryItemsResizeObserver: ResizeObserver;\n\n public constructor() {\n super();\n this.summaryItemsResizeObserver = new ResizeObserver(() => this.updateOverflow());\n }\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n this.syncTileAttributes();\n this.observeSummaryItems();\n }\n\n /** @internal */\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.summaryItemsResizeObserver.disconnect();\n }\n\n /** @internal */\n public legacyStyleChanged(): void {\n if (this.$fastController.isConnected) {\n this.syncTileAttributes();\n this.updateOverflow();\n }\n }\n\n /** @internal */\n public sizeChanged(): void {\n if (this.$fastController.isConnected) {\n this.syncTileAttributes();\n this.updateOverflow();\n }\n }\n\n /** @internal */\n public handleEditItemsClick(): void {\n this.dispatchEvent(new CustomEvent('edit-items', {\n bubbles: true,\n composed: true\n }));\n }\n\n /** @internal */\n public handleItemsSlotChange(): void {\n this.syncTileAttributes();\n this.observeSummaryItems();\n }\n\n /** @internal */\n public handleItemsScroll(): void {\n this.updateOverflow();\n }\n\n private observeSummaryItems(): void {\n this.summaryItemsResizeObserver.disconnect();\n this.summaryItemsResizeObserver.observe(this.summaryItems);\n for (const element of this.shadowRoot?.querySelector('slot')?.assignedElements({ flatten: true }) ?? []) {\n this.summaryItemsResizeObserver.observe(element);\n }\n this.updateOverflow();\n }\n\n private updateOverflow(): void {\n const maxScrollDistance = this.summaryItems.scrollWidth - this.summaryItems.clientWidth;\n const scrollPosition = getComputedStyle(this.summaryItems).direction === 'rtl'\n ? Math.abs(this.summaryItems.scrollLeft)\n : this.summaryItems.scrollLeft;\n this.hasOverflow = this.size === FvSummaryPanelSize.compact\n && maxScrollDistance - scrollPosition > 0;\n this.summaryItems.classList.toggle('has-overflow', this.hasOverflow);\n }\n\n private syncTileAttributes(): void {\n for (const element of this.shadowRoot?.querySelector('slot')?.assignedElements({ flatten: true }) ?? []) {\n if (element.localName !== 'ok-fv-summary-panel-tile') {\n continue;\n }\n\n if (this.legacyStyle) {\n element.setAttribute('legacy-style', '');\n } else {\n element.removeAttribute('legacy-style');\n }\n\n if (this.size === FvSummaryPanelSize.compact) {\n element.setAttribute('size', FvSummaryPanelSize.compact);\n } else {\n element.removeAttribute('size');\n }\n }\n }\n}\n\nconst okFvSummaryPanel = FvSummaryPanel.compose({\n baseName: 'fv-summary-panel',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('ok').register(okFvSummaryPanel());\nexport const fvSummaryPanelTag = 'ok-fv-summary-panel';"]}
@@ -1,5 +1,5 @@
1
1
  import { css } from '@ni/fast-element';
2
- import { standardPadding } from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';
2
+ import { mediumPadding, smallPadding, standardPadding } from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';
3
3
  import { display } from '../../utilities/style/display';
4
4
  export const styles = css `
5
5
  @layer base, hover, focusVisible, active, disabled, top;
@@ -26,6 +26,25 @@ export const styles = css `
26
26
  display: none;
27
27
  }
28
28
 
29
+ :host([size='compact']) .summary-item-container {
30
+ flex-wrap: nowrap;
31
+ box-sizing: border-box;
32
+ overflow-x: auto;
33
+ overflow-y: hidden;
34
+ gap: ${mediumPadding};
35
+ padding: calc(${standardPadding} - ${smallPadding});
36
+ scrollbar-width: none;
37
+ }
38
+
39
+ :host([size='compact']) .summary-item-container.has-overflow {
40
+ -webkit-mask-image: linear-gradient(to right, black calc(100% - 48px), transparent);
41
+ mask-image: linear-gradient(to right, black calc(100% - 48px), transparent);
42
+ }
43
+
44
+ :host([size='compact']) .summary-item-container::-webkit-scrollbar {
45
+ display: none;
46
+ }
47
+
29
48
  .edit-items-button {
30
49
  align-self: start;
31
50
  justify-self: end;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;UAIf,OAAO,CAAC,OAAO,CAAC;;;;;;0BAMA,eAAe;;;;;;;mBAOtB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BjC,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport { standardPadding } from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';\nimport { display } from '../../utilities/style/display';\n\nexport const styles = css`\n @layer base, hover, focusVisible, active, disabled, top;\n\n @layer base {\n ${display('block')}\n\n .summary-panel {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: flex-start;\n column-gap: ${standardPadding};\n }\n\n .summary-item-container {\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n gap: ${standardPadding};\n min-width: 0;\n }\n\n .summary-item-container:empty {\n display: none;\n }\n\n .edit-items-button {\n align-self: start;\n justify-self: end;\n }\n\n ::slotted(*) {\n flex: 0 0 auto;\n }\n }\n\n @layer hover {}\n\n @layer focusVisible {}\n\n @layer active {}\n\n @layer disabled {}\n\n @layer top {}\n`;"]}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EACH,aAAa,EACb,YAAY,EACZ,eAAe,EAClB,MAAM,6DAA6D,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;UAIf,OAAO,CAAC,OAAO,CAAC;;;;;;0BAMA,eAAe;;;;;;;mBAOtB,eAAe;;;;;;;;;;;;;mBAaf,aAAa;4BACJ,eAAe,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC5D,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport {\n mediumPadding,\n smallPadding,\n standardPadding\n} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';\nimport { display } from '../../utilities/style/display';\n\nexport const styles = css`\n @layer base, hover, focusVisible, active, disabled, top;\n\n @layer base {\n ${display('block')}\n\n .summary-panel {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: flex-start;\n column-gap: ${standardPadding};\n }\n\n .summary-item-container {\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n gap: ${standardPadding};\n min-width: 0;\n }\n\n .summary-item-container:empty {\n display: none;\n }\n\n :host([size='compact']) .summary-item-container {\n flex-wrap: nowrap;\n box-sizing: border-box;\n overflow-x: auto;\n overflow-y: hidden;\n gap: ${mediumPadding};\n padding: calc(${standardPadding} - ${smallPadding});\n scrollbar-width: none;\n }\n\n :host([size='compact']) .summary-item-container.has-overflow {\n -webkit-mask-image: linear-gradient(to right, black calc(100% - 48px), transparent);\n mask-image: linear-gradient(to right, black calc(100% - 48px), transparent);\n }\n\n :host([size='compact']) .summary-item-container::-webkit-scrollbar {\n display: none;\n }\n\n .edit-items-button {\n align-self: start;\n justify-self: end;\n }\n\n ::slotted(*) {\n flex: 0 0 auto;\n }\n }\n\n @layer hover {}\n\n @layer focusVisible {}\n\n @layer active {}\n\n @layer disabled {}\n\n @layer top {}\n`;"]}
@@ -1,10 +1,15 @@
1
- import { html, when } from '@ni/fast-element';
1
+ import { html, ref, when } from '@ni/fast-element';
2
2
  import { buttonTag } from '@ni/nimble-components/dist/esm/button';
3
3
  import { ButtonAppearance } from '@ni/nimble-components/dist/esm/button/types';
4
4
  import { iconCogTag } from '@ni/nimble-components/dist/esm/icons/cog';
5
5
  export const template = html `
6
6
  <section class="summary-panel" part="panel">
7
- <div class="summary-item-container" part="items">
7
+ <div
8
+ ${ref('summaryItems')}
9
+ class="summary-item-container"
10
+ part="items"
11
+ @scroll="${x => x.handleItemsScroll()}"
12
+ >
8
13
  <slot @slotchange="${x => x.handleItemsSlotChange()}"></slot>
9
14
  </div>
10
15
  ${when(x => x.showEditItemsButton, html `
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAGtE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAgB;;;iCAGX,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE;;UAErD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAgB;eAChD,SAAS;;;8BAGM,gBAAgB,CAAC,KAAK;;yBAE3B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;8BACtB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;0BAC/B,CAAC,CAAC,EAAE;IACV,CAAC,CAAC,oBAAoB,EAAE,CAAC;IACzB,OAAO,IAAI,CAAC;AAChB,CAAC;;kBAEC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;mBAC1B,UAAU,mBAAmB,UAAU;gBAC1C,SAAS;SAChB,CAAC;;CAET,CAAC","sourcesContent":["import { html, when } from '@ni/fast-element';\nimport { buttonTag } from '@ni/nimble-components/dist/esm/button';\nimport { ButtonAppearance } from '@ni/nimble-components/dist/esm/button/types';\nimport { iconCogTag } from '@ni/nimble-components/dist/esm/icons/cog';\nimport type { FvSummaryPanel } from '.';\n\nexport const template = html<FvSummaryPanel>`\n <section class=\"summary-panel\" part=\"panel\">\n <div class=\"summary-item-container\" part=\"items\">\n <slot @slotchange=\"${x => x.handleItemsSlotChange()}\"></slot>\n </div>\n ${when(x => x.showEditItemsButton, html<FvSummaryPanel>`\n <${buttonTag}\n class=\"edit-items-button\"\n part=\"edit-items-button\"\n appearance=\"${ButtonAppearance.ghost}\"\n content-hidden\n title=\"${x => x.editItemsButtonLabel}\"\n aria-label=\"${x => x.editItemsButtonLabel}\"\n @click=\"${x => {\n x.handleEditItemsClick();\n return true;\n }}\"\n >\n ${x => x.editItemsButtonLabel}\n <${iconCogTag} slot=\"start\"></${iconCogTag}>\n </${buttonTag}>\n `)}\n </section>\n`;"]}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAGtE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAgB;;;cAG9B,GAAG,CAAC,cAAc,CAAC;;;uBAGV,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE;;iCAEhB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE;;UAErD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAgB;eAChD,SAAS;;;8BAGM,gBAAgB,CAAC,KAAK;;yBAE3B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;8BACtB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;0BAC/B,CAAC,CAAC,EAAE;IACV,CAAC,CAAC,oBAAoB,EAAE,CAAC;IACzB,OAAO,IAAI,CAAC;AAChB,CAAC;;kBAEC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;mBAC1B,UAAU,mBAAmB,UAAU;gBAC1C,SAAS;SAChB,CAAC;;CAET,CAAC","sourcesContent":["import { html, ref, when } from '@ni/fast-element';\nimport { buttonTag } from '@ni/nimble-components/dist/esm/button';\nimport { ButtonAppearance } from '@ni/nimble-components/dist/esm/button/types';\nimport { iconCogTag } from '@ni/nimble-components/dist/esm/icons/cog';\nimport type { FvSummaryPanel } from '.';\n\nexport const template = html<FvSummaryPanel>`\n <section class=\"summary-panel\" part=\"panel\">\n <div\n ${ref('summaryItems')}\n class=\"summary-item-container\"\n part=\"items\"\n @scroll=\"${x => x.handleItemsScroll()}\"\n >\n <slot @slotchange=\"${x => x.handleItemsSlotChange()}\"></slot>\n </div>\n ${when(x => x.showEditItemsButton, html<FvSummaryPanel>`\n <${buttonTag}\n class=\"edit-items-button\"\n part=\"edit-items-button\"\n appearance=\"${ButtonAppearance.ghost}\"\n content-hidden\n title=\"${x => x.editItemsButtonLabel}\"\n aria-label=\"${x => x.editItemsButtonLabel}\"\n @click=\"${x => {\n x.handleEditItemsClick();\n return true;\n }}\"\n >\n ${x => x.editItemsButtonLabel}\n <${iconCogTag} slot=\"start\"></${iconCogTag}>\n </${buttonTag}>\n `)}\n </section>\n`;"]}
@@ -0,0 +1,5 @@
1
+ export declare const FvSummaryPanelSize: {
2
+ readonly default: "default";
3
+ readonly compact: "compact";
4
+ };
5
+ export type FvSummaryPanelSize = (typeof FvSummaryPanelSize)[keyof typeof FvSummaryPanelSize];
@@ -0,0 +1,5 @@
1
+ export const FvSummaryPanelSize = {
2
+ default: 'default',
3
+ compact: 'compact'
4
+ };
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAC9B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACZ,CAAC","sourcesContent":["export const FvSummaryPanelSize = {\n default: 'default',\n compact: 'compact'\n} as const;\n\nexport type FvSummaryPanelSize = (typeof FvSummaryPanelSize)[keyof typeof FvSummaryPanelSize];"]}
@@ -1,4 +1,5 @@
1
1
  import { FoundationElement } from '@ni/fast-foundation';
2
+ import { type FvSummaryPanelSize as FvSummaryPanelSizeType } from '../summary-panel/types';
2
3
  import { type FvSummaryPanelTileTextPosition as FvSummaryPanelTileTextPositionType } from './types';
3
4
  declare global {
4
5
  interface HTMLElementTagNameMap {
@@ -12,6 +13,7 @@ export declare class FvSummaryPanelTile extends FoundationElement {
12
13
  count: string;
13
14
  label: string;
14
15
  legacyStyle: boolean;
16
+ size: FvSummaryPanelSizeType;
15
17
  selected: boolean;
16
18
  textPosition: FvSummaryPanelTileTextPositionType;
17
19
  /** @internal */
@@ -3,6 +3,7 @@ import { attr } from '@ni/fast-element';
3
3
  import { DesignSystem, FoundationElement } from '@ni/fast-foundation';
4
4
  import { styles } from './styles';
5
5
  import { template } from './template';
6
+ import { FvSummaryPanelSize } from '../summary-panel/types';
6
7
  import { FvSummaryPanelTileTextPosition } from './types';
7
8
  /**
8
9
  * A clickable summary tile for displaying a large value with a compact label.
@@ -13,6 +14,7 @@ export class FvSummaryPanelTile extends FoundationElement {
13
14
  this.count = '';
14
15
  this.label = '';
15
16
  this.legacyStyle = false;
17
+ this.size = FvSummaryPanelSize.default;
16
18
  this.selected = false;
17
19
  this.textPosition = FvSummaryPanelTileTextPosition.beside;
18
20
  }
@@ -43,6 +45,9 @@ __decorate([
43
45
  __decorate([
44
46
  attr({ attribute: 'legacy-style', mode: 'boolean' })
45
47
  ], FvSummaryPanelTile.prototype, "legacyStyle", void 0);
48
+ __decorate([
49
+ attr
50
+ ], FvSummaryPanelTile.prototype, "size", void 0);
46
51
  __decorate([
47
52
  attr({ mode: 'boolean' })
48
53
  ], FvSummaryPanelTile.prototype, "selected", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel-tile/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACH,8BAA8B,EAEjC,MAAM,SAAS,CAAC;AAQjB;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,iBAAiB;IAAzD;;QAEW,UAAK,GAAG,EAAE,CAAC;QAGX,UAAK,GAAG,EAAE,CAAC;QAGX,gBAAW,GAAG,KAAK,CAAC;QAGpB,aAAQ,GAAG,KAAK,CAAC;QAGjB,iBAAY,GAAuC,8BAA8B,CAAC,MAAM,CAAC;IAoBpG,CAAC;IAlBG,gBAAgB;IACA,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACpC,CAAC;IAED,gBAAgB;IACT,kBAAkB;QACrB,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACpC,CAAC;IAEO,wBAAwB;QAC5B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;CACJ;AAhCU;IADN,IAAI;iDACa;AAGX;IADN,IAAI;iDACa;AAGX;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;uDAC1B;AAGpB;IADN,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;oDACF;AAGjB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;wDAC2D;AAsBpG,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,OAAO,CAAC;IACpD,QAAQ,EAAE,uBAAuB;IACjC,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC","sourcesContent":["import { attr } from '@ni/fast-element';\nimport { DesignSystem, FoundationElement } from '@ni/fast-foundation';\nimport { styles } from './styles';\nimport { template } from './template';\nimport {\n FvSummaryPanelTileTextPosition,\n type FvSummaryPanelTileTextPosition as FvSummaryPanelTileTextPositionType\n} from './types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ok-fv-summary-panel-tile': FvSummaryPanelTile;\n }\n}\n\n/**\n * A clickable summary tile for displaying a large value with a compact label.\n */\nexport class FvSummaryPanelTile extends FoundationElement {\n @attr\n public count = '';\n\n @attr\n public label = '';\n\n @attr({ attribute: 'legacy-style', mode: 'boolean' })\n public legacyStyle = false;\n\n @attr({ mode: 'boolean' })\n public selected = false;\n\n @attr({ attribute: 'text-position' })\n public textPosition: FvSummaryPanelTileTextPositionType = FvSummaryPanelTileTextPosition.beside;\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n this.syncLegacyStyleAttribute();\n }\n\n /** @internal */\n public legacyStyleChanged(): void {\n this.syncLegacyStyleAttribute();\n }\n\n private syncLegacyStyleAttribute(): void {\n if (this.legacyStyle) {\n this.setAttribute('legacy-style', '');\n } else {\n this.removeAttribute('legacy-style');\n }\n }\n}\n\nconst okFvSummaryPanelTile = FvSummaryPanelTile.compose({\n baseName: 'fv-summary-panel-tile',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('ok').register(okFvSummaryPanelTile());\nexport const fvSummaryPanelTileTag = 'ok-fv-summary-panel-tile';"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel-tile/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAqD,MAAM,wBAAwB,CAAC;AAC/G,OAAO,EACH,8BAA8B,EAEjC,MAAM,SAAS,CAAC;AAQjB;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,iBAAiB;IAAzD;;QAEW,UAAK,GAAG,EAAE,CAAC;QAGX,UAAK,GAAG,EAAE,CAAC;QAGX,gBAAW,GAAG,KAAK,CAAC;QAGpB,SAAI,GAA2B,kBAAkB,CAAC,OAAO,CAAC;QAG1D,aAAQ,GAAG,KAAK,CAAC;QAGjB,iBAAY,GAAuC,8BAA8B,CAAC,MAAM,CAAC;IAoBpG,CAAC;IAlBG,gBAAgB;IACA,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACpC,CAAC;IAED,gBAAgB;IACT,kBAAkB;QACrB,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACpC,CAAC;IAEO,wBAAwB;QAC5B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;CACJ;AAnCU;IADN,IAAI;iDACa;AAGX;IADN,IAAI;iDACa;AAGX;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;uDAC1B;AAGpB;IADN,IAAI;gDAC4D;AAG1D;IADN,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;oDACF;AAGjB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;wDAC2D;AAsBpG,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,OAAO,CAAC;IACpD,QAAQ,EAAE,uBAAuB;IACjC,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC","sourcesContent":["import { attr } from '@ni/fast-element';\nimport { DesignSystem, FoundationElement } from '@ni/fast-foundation';\nimport { styles } from './styles';\nimport { template } from './template';\nimport { FvSummaryPanelSize, type FvSummaryPanelSize as FvSummaryPanelSizeType } from '../summary-panel/types';\nimport {\n FvSummaryPanelTileTextPosition,\n type FvSummaryPanelTileTextPosition as FvSummaryPanelTileTextPositionType\n} from './types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ok-fv-summary-panel-tile': FvSummaryPanelTile;\n }\n}\n\n/**\n * A clickable summary tile for displaying a large value with a compact label.\n */\nexport class FvSummaryPanelTile extends FoundationElement {\n @attr\n public count = '';\n\n @attr\n public label = '';\n\n @attr({ attribute: 'legacy-style', mode: 'boolean' })\n public legacyStyle = false;\n\n @attr\n public size: FvSummaryPanelSizeType = FvSummaryPanelSize.default;\n\n @attr({ mode: 'boolean' })\n public selected = false;\n\n @attr({ attribute: 'text-position' })\n public textPosition: FvSummaryPanelTileTextPositionType = FvSummaryPanelTileTextPosition.beside;\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n this.syncLegacyStyleAttribute();\n }\n\n /** @internal */\n public legacyStyleChanged(): void {\n this.syncLegacyStyleAttribute();\n }\n\n private syncLegacyStyleAttribute(): void {\n if (this.legacyStyle) {\n this.setAttribute('legacy-style', '');\n } else {\n this.removeAttribute('legacy-style');\n }\n }\n}\n\nconst okFvSummaryPanelTile = FvSummaryPanelTile.compose({\n baseName: 'fv-summary-panel-tile',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('ok').register(okFvSummaryPanelTile());\nexport const fvSummaryPanelTileTag = 'ok-fv-summary-panel-tile';"]}
@@ -77,6 +77,24 @@ export const styles = css `
77
77
  text-transform: uppercase;
78
78
  white-space: nowrap;
79
79
  }
80
+
81
+ :host([size='compact']) .summary-panel-tile-content {
82
+ gap: 6px;
83
+ margin: 10px 14px;
84
+ }
85
+
86
+ :host([size='compact']) .count {
87
+ font-size: 24px;
88
+ line-height: normal;
89
+ }
90
+
91
+ :host([size='compact']) .summary-panel-tile-content.beside .count {
92
+ padding-right: 0;
93
+ }
94
+
95
+ :host([size='compact']) .label {
96
+ font-size: 11px;
97
+ }
80
98
  }
81
99
 
82
100
  @layer hover {
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel-tile/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EACH,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,eAAe,EACf,mBAAmB,EACtB,MAAM,6DAA6D,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;UAIf,OAAO,CAAC,cAAc,CAAC;;;;;;;;;;;qCAWI,UAAU;;;4DAGa,gBAAgB;;;;;;;;;;;uCAWrC,UAAU;;;;gCAIjB,eAAe;;;+BAGhB,UAAU;+BACV,UAAU;;;;;;mBAMtB,aAAa;sBACV,YAAY,SAAS,YAAY,MAAM,eAAe;oBACxD,QAAQ;;;;;;mBAMT,YAAY;;;;;qBAKV,mBAAmB;;;;;;;;6BAQX,aAAa;;;;;;;;;;;;;;;;oCAgBN,gBAAgB;;;;;;;;;;;;;;;;8BAgBtB,mBAAmB,CAAC,iBAAiB;;;;;sBAK7C,mBAAmB,CAAC,iBAAiB;4BAC/B,gBAAgB;;;;8BAId,mBAAmB,CAAC,iBAAiB;;;;4BAIvC,gBAAgB;;;;;;;;gCAQZ,gBAAgB;;;;;;;;;;;;;;;CAe/C,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport {\n bodyFont,\n borderHoverColor,\n cardBorderColor,\n elevation2BoxShadow,\n largePadding,\n mediumPadding,\n smallPadding,\n smallDelay,\n standardPadding,\n titlePlus2FontColor\n} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';\nimport { display } from '../../utilities/style/display';\n\nexport const styles = css`\n @layer base, hover, focusVisible, active, disabled, top;\n\n @layer base {\n ${display('inline-block')}\n\n :host {\n min-width: max-content;\n }\n\n :host(:not([legacy-style])) .summary-panel-tile {\n position: relative;\n border-radius: 8px;\n overflow: clip;\n box-shadow: none;\n transition: box-shadow ${smallDelay} ease-in-out;\n --ni-private-card-button-background-hover-color: transparent;\n --ni-private-card-button-background-active-color: transparent;\n --ni-private-card-button-border-active-color: ${borderHoverColor};\n }\n\n :host(:not([legacy-style])) .summary-panel-tile::after {\n content: '';\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n border: 2px solid transparent;\n border-radius: inherit;\n pointer-events: none;\n transition: border-color ${smallDelay} ease-in-out;\n }\n\n :host(:not([legacy-style])) .summary-panel-tile::part(control) {\n border: 2px solid ${cardBorderColor};\n border-radius: 8px;\n transition:\n border-color ${smallDelay} ease-in-out,\n border-width ${smallDelay} ease-in-out;\n }\n\n .summary-panel-tile-content {\n display: flex;\n align-items: center;\n gap: ${mediumPadding};\n margin: ${largePadding} calc(${largePadding} + ${standardPadding});\n font: ${bodyFont};\n }\n\n .summary-panel-tile-content.under {\n flex-direction: column;\n align-items: center;\n gap: ${smallPadding};\n text-align: center;\n }\n\n .count {\n color: ${titlePlus2FontColor};\n font-size: 32px;\n font-weight: 400;\n line-height: 40px;\n white-space: nowrap;\n }\n\n .summary-panel-tile-content.beside .count {\n padding-right: ${mediumPadding};\n }\n\n .summary-panel-tile-content.under .count {\n padding-right: 0;\n }\n\n .label {\n font-weight: 600;\n text-transform: uppercase;\n white-space: nowrap;\n }\n }\n\n @layer hover {\n :host(:not([legacy-style])) .summary-panel-tile:hover {\n box-shadow: 0 0 0 2px ${borderHoverColor};\n }\n\n :host(:not([legacy-style])) .summary-panel-tile::part(control):hover {\n border-color: transparent;\n }\n }\n\n @layer focusVisible {}\n\n @layer active {\n :host(:not([legacy-style])) .summary-panel-tile:active {\n box-shadow: none;\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected] {\n box-shadow: var(${elevation2BoxShadow.cssCustomProperty});\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected]:hover {\n box-shadow:\n var(${elevation2BoxShadow.cssCustomProperty}),\n 0 0 0 2px ${borderHoverColor};\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected]:active {\n box-shadow: var(${elevation2BoxShadow.cssCustomProperty});\n }\n\n :host(:not([legacy-style])) .summary-panel-tile:active::after {\n border-color: ${borderHoverColor};\n }\n\n :host(:not([legacy-style])) .summary-panel-tile::part(control):active {\n border: 2px solid transparent;\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected]::part(control) {\n border: 2px solid ${borderHoverColor};\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected]::part(control):hover {\n border: 2px solid transparent;\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected]::part(control):active {\n border: 2px solid transparent;\n }\n }\n\n @layer disabled {}\n\n @layer top {}\n`;"]}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/fv/summary-panel-tile/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EACH,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,eAAe,EACf,mBAAmB,EACtB,MAAM,6DAA6D,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;UAIf,OAAO,CAAC,cAAc,CAAC;;;;;;;;;;;qCAWI,UAAU;;;4DAGa,gBAAgB;;;;;;;;;;;uCAWrC,UAAU;;;;gCAIjB,eAAe;;;+BAGhB,UAAU;+BACV,UAAU;;;;;;mBAMtB,aAAa;sBACV,YAAY,SAAS,YAAY,MAAM,eAAe;oBACxD,QAAQ;;;;;;mBAMT,YAAY;;;;;qBAKV,mBAAmB;;;;;;;;6BAQX,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAkCN,gBAAgB;;;;;;;;;;;;;;;;8BAgBtB,mBAAmB,CAAC,iBAAiB;;;;;sBAK7C,mBAAmB,CAAC,iBAAiB;4BAC/B,gBAAgB;;;;8BAId,mBAAmB,CAAC,iBAAiB;;;;4BAIvC,gBAAgB;;;;;;;;gCAQZ,gBAAgB;;;;;;;;;;;;;;;CAe/C,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport {\n bodyFont,\n borderHoverColor,\n cardBorderColor,\n elevation2BoxShadow,\n largePadding,\n mediumPadding,\n smallPadding,\n smallDelay,\n standardPadding,\n titlePlus2FontColor\n} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';\nimport { display } from '../../utilities/style/display';\n\nexport const styles = css`\n @layer base, hover, focusVisible, active, disabled, top;\n\n @layer base {\n ${display('inline-block')}\n\n :host {\n min-width: max-content;\n }\n\n :host(:not([legacy-style])) .summary-panel-tile {\n position: relative;\n border-radius: 8px;\n overflow: clip;\n box-shadow: none;\n transition: box-shadow ${smallDelay} ease-in-out;\n --ni-private-card-button-background-hover-color: transparent;\n --ni-private-card-button-background-active-color: transparent;\n --ni-private-card-button-border-active-color: ${borderHoverColor};\n }\n\n :host(:not([legacy-style])) .summary-panel-tile::after {\n content: '';\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n border: 2px solid transparent;\n border-radius: inherit;\n pointer-events: none;\n transition: border-color ${smallDelay} ease-in-out;\n }\n\n :host(:not([legacy-style])) .summary-panel-tile::part(control) {\n border: 2px solid ${cardBorderColor};\n border-radius: 8px;\n transition:\n border-color ${smallDelay} ease-in-out,\n border-width ${smallDelay} ease-in-out;\n }\n\n .summary-panel-tile-content {\n display: flex;\n align-items: center;\n gap: ${mediumPadding};\n margin: ${largePadding} calc(${largePadding} + ${standardPadding});\n font: ${bodyFont};\n }\n\n .summary-panel-tile-content.under {\n flex-direction: column;\n align-items: center;\n gap: ${smallPadding};\n text-align: center;\n }\n\n .count {\n color: ${titlePlus2FontColor};\n font-size: 32px;\n font-weight: 400;\n line-height: 40px;\n white-space: nowrap;\n }\n\n .summary-panel-tile-content.beside .count {\n padding-right: ${mediumPadding};\n }\n\n .summary-panel-tile-content.under .count {\n padding-right: 0;\n }\n\n .label {\n font-weight: 600;\n text-transform: uppercase;\n white-space: nowrap;\n }\n\n :host([size='compact']) .summary-panel-tile-content {\n gap: 6px;\n margin: 10px 14px;\n }\n\n :host([size='compact']) .count {\n font-size: 24px;\n line-height: normal;\n }\n\n :host([size='compact']) .summary-panel-tile-content.beside .count {\n padding-right: 0;\n }\n\n :host([size='compact']) .label {\n font-size: 11px;\n }\n }\n\n @layer hover {\n :host(:not([legacy-style])) .summary-panel-tile:hover {\n box-shadow: 0 0 0 2px ${borderHoverColor};\n }\n\n :host(:not([legacy-style])) .summary-panel-tile::part(control):hover {\n border-color: transparent;\n }\n }\n\n @layer focusVisible {}\n\n @layer active {\n :host(:not([legacy-style])) .summary-panel-tile:active {\n box-shadow: none;\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected] {\n box-shadow: var(${elevation2BoxShadow.cssCustomProperty});\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected]:hover {\n box-shadow:\n var(${elevation2BoxShadow.cssCustomProperty}),\n 0 0 0 2px ${borderHoverColor};\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected]:active {\n box-shadow: var(${elevation2BoxShadow.cssCustomProperty});\n }\n\n :host(:not([legacy-style])) .summary-panel-tile:active::after {\n border-color: ${borderHoverColor};\n }\n\n :host(:not([legacy-style])) .summary-panel-tile::part(control):active {\n border: 2px solid transparent;\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected]::part(control) {\n border: 2px solid ${borderHoverColor};\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected]::part(control):hover {\n border: 2px solid transparent;\n }\n\n :host(:not([legacy-style])) .summary-panel-tile[selected]::part(control):active {\n border: 2px solid transparent;\n }\n }\n\n @layer disabled {}\n\n @layer top {}\n`;"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ni/ok-components",
3
- "version": "1.6.9",
3
+ "version": "1.8.0",
4
4
  "description": "NI Ok Components",
5
5
  "scripts": {
6
6
  "build": "npm run build:components && npm run build:cem",
@@ -43,8 +43,8 @@
43
43
  "@ni/fast-element": "^10.1.2",
44
44
  "@ni/fast-foundation": "^10.2.5",
45
45
  "@ni/fast-web-utilities": "^10.0.0",
46
- "@ni/nimble-components": "^35.12.7",
47
- "@ni/spright-components": "^6.21.9",
46
+ "@ni/nimble-components": "^35.13.0",
47
+ "@ni/spright-components": "^6.22.0",
48
48
  "tslib": "^2.2.0"
49
49
  },
50
50
  "devDependencies": {