@3t-transform/threeteeui 0.1.10 → 0.1.19

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 (110) hide show
  1. package/dist/cjs/{index-dc6cc829.js → index-b8a62ede.js} +88 -2
  2. package/dist/cjs/loader.cjs.js +3 -2
  3. package/dist/cjs/tttx-button.cjs.entry.js +24 -24
  4. package/dist/cjs/tttx-filter.cjs.entry.js +152 -152
  5. package/dist/cjs/tttx-form.cjs.entry.js +363 -363
  6. package/dist/cjs/tttx-icon.cjs.entry.js +11 -11
  7. package/dist/cjs/tttx-keyvalue-block.cjs.entry.js +62 -59
  8. package/dist/cjs/tttx-list.cjs.entry.js +43 -43
  9. package/dist/cjs/tttx-loading-spinner.cjs.entry.js +16 -16
  10. package/dist/cjs/tttx-standalone-input.cjs.entry.js +60 -60
  11. package/dist/cjs/tttx-toolbar.cjs.entry.js +10 -10
  12. package/dist/cjs/tttx.cjs.js +6 -2
  13. package/dist/collection/collection-manifest.json +2 -2
  14. package/dist/collection/components/atoms/tttx-button/tttx-button.js +110 -110
  15. package/dist/collection/components/atoms/tttx-button/tttx-button.stories.js +14 -14
  16. package/dist/collection/components/atoms/tttx-icon/tttx-icon.js +62 -62
  17. package/dist/collection/components/atoms/tttx-icon/tttx-icon.stories.js +22 -22
  18. package/dist/collection/components/atoms/tttx-keyvalue-block/tttx-keyvalue-block.css +2 -0
  19. package/dist/collection/components/atoms/tttx-keyvalue-block/tttx-keyvalue-block.js +111 -108
  20. package/dist/collection/components/atoms/tttx-keyvalue-block/tttx-keyvalue-block.stories.js +38 -38
  21. package/dist/collection/components/atoms/tttx-loading-spinner/tttx-loading-spinner.js +67 -67
  22. package/dist/collection/components/atoms/tttx-loading-spinner/tttx-loading-spinner.stories.js +17 -17
  23. package/dist/collection/components/molecules/tttx-filter/tttx-filter.js +325 -325
  24. package/dist/collection/components/molecules/tttx-filter/tttx-filter.stories.js +89 -89
  25. package/dist/collection/components/molecules/tttx-form/lib/setErrorState.js +35 -35
  26. package/dist/collection/components/molecules/tttx-form/lib/validityCheck.js +58 -58
  27. package/dist/collection/components/molecules/tttx-form/tttx-form.js +364 -364
  28. package/dist/collection/components/molecules/tttx-form/tttx-form.stories.js +127 -127
  29. package/dist/collection/components/molecules/tttx-list/tttx-list.js +105 -105
  30. package/dist/collection/components/molecules/tttx-list/tttx-list.stories.js +43 -43
  31. package/dist/collection/components/molecules/tttx-standalone-input/tttx-standalone-input.js +627 -627
  32. package/dist/collection/components/molecules/tttx-standalone-input/tttx-standalone-input.stories.js +157 -157
  33. package/dist/collection/components/molecules/tttx-toolbar/tttx-toolbar.js +44 -44
  34. package/dist/collection/components/molecules/tttx-toolbar/tttx-toolbar.stories.js +14 -14
  35. package/dist/collection/components/palette.stories.js +7 -7
  36. package/dist/collection/docs/gettingstarted-developer.stories.js +5 -5
  37. package/dist/collection/icons.js +2838 -2838
  38. package/dist/collection/index.js +1 -1
  39. package/dist/collection/shared/domsanitiser.options.js +14 -14
  40. package/dist/components/index.d.ts +9 -0
  41. package/dist/components/index.js +1 -1
  42. package/dist/components/tttx-button.js +48 -48
  43. package/dist/components/tttx-filter.js +184 -184
  44. package/dist/components/tttx-form.js +380 -380
  45. package/dist/components/tttx-icon2.js +28 -28
  46. package/dist/components/tttx-keyvalue-block.js +79 -76
  47. package/dist/components/tttx-list.js +65 -65
  48. package/dist/components/tttx-loading-spinner.js +33 -33
  49. package/dist/components/tttx-standalone-input.js +107 -107
  50. package/dist/components/tttx-toolbar.js +26 -26
  51. package/dist/esm/{index-86faeaab.js → index-e888a5f4.js} +88 -3
  52. package/dist/esm/loader.js +3 -2
  53. package/dist/esm/polyfills/core-js.js +0 -0
  54. package/dist/esm/polyfills/css-shim.js +1 -1
  55. package/dist/esm/polyfills/dom.js +0 -0
  56. package/dist/esm/polyfills/es5-html-element.js +0 -0
  57. package/dist/esm/polyfills/index.js +0 -0
  58. package/dist/esm/polyfills/system.js +0 -0
  59. package/dist/esm/tttx-button.entry.js +24 -24
  60. package/dist/esm/tttx-filter.entry.js +152 -152
  61. package/dist/esm/tttx-form.entry.js +363 -363
  62. package/dist/esm/tttx-icon.entry.js +11 -11
  63. package/dist/esm/tttx-keyvalue-block.entry.js +62 -59
  64. package/dist/esm/tttx-list.entry.js +43 -43
  65. package/dist/esm/tttx-loading-spinner.entry.js +16 -16
  66. package/dist/esm/tttx-standalone-input.entry.js +60 -60
  67. package/dist/esm/tttx-toolbar.entry.js +10 -10
  68. package/dist/esm/tttx.js +3 -2
  69. package/dist/tttx/{p-bdb054b2.entry.js → p-01f4628e.entry.js} +1 -1
  70. package/dist/tttx/{p-8f3badad.entry.js → p-043f9b8a.entry.js} +1 -1
  71. package/dist/tttx/{p-b0eedc78.entry.js → p-34052e38.entry.js} +1 -1
  72. package/dist/tttx/{p-603f6ebe.entry.js → p-41f5b296.entry.js} +1 -1
  73. package/dist/tttx/{p-ae48fe5a.entry.js → p-4cf3e1e0.entry.js} +1 -1
  74. package/dist/tttx/p-6dff6b5a.entry.js +3 -0
  75. package/dist/tttx/p-6f535da9.entry.js +1 -0
  76. package/dist/tttx/{p-e25d5fe2.entry.js → p-96bbf1ed.entry.js} +1 -1
  77. package/dist/tttx/{p-f1d7eb35.entry.js → p-b3a03986.entry.js} +1 -1
  78. package/dist/tttx/p-f764ffc4.js +2 -0
  79. package/dist/tttx/tttx.esm.js +1 -1
  80. package/dist/types/components/atoms/tttx-button/tttx-button.d.ts +10 -10
  81. package/dist/types/components/atoms/tttx-button/tttx-button.stories.d.ts +10 -10
  82. package/dist/types/components/atoms/tttx-icon/tttx-icon.d.ts +5 -5
  83. package/dist/types/components/atoms/tttx-icon/tttx-icon.stories.d.ts +20 -20
  84. package/dist/types/components/atoms/tttx-keyvalue-block/tttx-keyvalue-block.d.ts +7 -7
  85. package/dist/types/components/atoms/tttx-keyvalue-block/tttx-keyvalue-block.stories.d.ts +9 -9
  86. package/dist/types/components/atoms/tttx-loading-spinner/tttx-loading-spinner.d.ts +6 -6
  87. package/dist/types/components/atoms/tttx-loading-spinner/tttx-loading-spinner.stories.d.ts +17 -17
  88. package/dist/types/components/molecules/tttx-filter/tttx-filter.d.ts +37 -37
  89. package/dist/types/components/molecules/tttx-filter/tttx-filter.stories.d.ts +43 -43
  90. package/dist/types/components/molecules/tttx-form/lib/setErrorState.d.ts +13 -13
  91. package/dist/types/components/molecules/tttx-form/lib/validityCheck.d.ts +17 -17
  92. package/dist/types/components/molecules/tttx-form/tttx-form.d.ts +114 -114
  93. package/dist/types/components/molecules/tttx-form/tttx-form.stories.d.ts +13 -13
  94. package/dist/types/components/molecules/tttx-list/tttx-list.d.ts +11 -11
  95. package/dist/types/components/molecules/tttx-list/tttx-list.stories.d.ts +14 -14
  96. package/dist/types/components/molecules/tttx-standalone-input/tttx-standalone-input.d.ts +56 -56
  97. package/dist/types/components/molecules/tttx-standalone-input/tttx-standalone-input.stories.d.ts +123 -123
  98. package/dist/types/components/molecules/tttx-toolbar/tttx-toolbar.d.ts +4 -4
  99. package/dist/types/components/molecules/tttx-toolbar/tttx-toolbar.stories.d.ts +13 -13
  100. package/dist/types/components/palette.stories.d.ts +6 -6
  101. package/dist/types/docs/gettingstarted-developer.stories.d.ts +5 -5
  102. package/dist/types/icons.d.ts +2 -2
  103. package/dist/types/index.d.ts +1 -1
  104. package/dist/types/shared/domsanitiser.options.d.ts +10 -10
  105. package/dist/types/stencil-public-runtime.d.ts +59 -3
  106. package/loader/index.d.ts +9 -0
  107. package/package.json +1 -1
  108. package/dist/tttx/p-12fc0b16.entry.js +0 -3
  109. package/dist/tttx/p-52a47b7c.js +0 -2
  110. package/dist/tttx/p-dcd78796.entry.js +0 -1
@@ -63,6 +63,18 @@ const isComplexType = (o) => {
63
63
  o = typeof o;
64
64
  return o === 'object' || o === 'function';
65
65
  };
66
+ /**
67
+ * Helper method for querying a `meta` tag that contains a nonce value
68
+ * out of a DOM's head.
69
+ *
70
+ * @param doc The DOM containing the `head` to query against
71
+ * @returns The content of the meta tag representing the nonce value, or `undefined` if no tag
72
+ * exists or the tag has no content.
73
+ */
74
+ function queryNonceMetaTagContent(doc) {
75
+ var _a, _b, _c;
76
+ return (_c = (_b = (_a = doc.head) === null || _a === void 0 ? void 0 : _a.querySelector('meta[name="csp-nonce"]')) === null || _b === void 0 ? void 0 : _b.getAttribute('content')) !== null && _c !== void 0 ? _c : undefined;
77
+ }
66
78
  /**
67
79
  * Production h() function based on Preact by
68
80
  * Jason Miller (@developit)
@@ -71,7 +83,6 @@ const isComplexType = (o) => {
71
83
  *
72
84
  * Modified for Stencil's compiler and vdom
73
85
  */
74
- // const stack: any[] = [];
75
86
  // export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, child?: d.ChildType): d.VNode;
76
87
  // export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, ...children: d.ChildType[]): d.VNode;
77
88
  const h = (nodeName, vnodeData, ...children) => {
@@ -130,6 +141,14 @@ const h = (nodeName, vnodeData, ...children) => {
130
141
  }
131
142
  return vnode;
132
143
  };
144
+ /**
145
+ * A utility function for creating a virtual DOM node from a tag and some
146
+ * possible text content.
147
+ *
148
+ * @param tag the tag for this element
149
+ * @param text possible text content for the node
150
+ * @returns a newly-minted virtual DOM node
151
+ */
133
152
  const newVNode = (tag, text) => {
134
153
  const vnode = {
135
154
  $flags$: 0,
@@ -147,6 +166,12 @@ const newVNode = (tag, text) => {
147
166
  return vnode;
148
167
  };
149
168
  const Host = {};
169
+ /**
170
+ * Check whether a given node is a Host node or not
171
+ *
172
+ * @param node the virtual DOM node to check
173
+ * @returns whether it's a Host node or not
174
+ */
150
175
  const isHost = (node) => node && node.$tag$ === Host;
151
176
  /**
152
177
  * Parse a new property value for a given property type.
@@ -235,6 +260,7 @@ const registerStyle = (scopeId, cssText, allowCS) => {
235
260
  styles.set(scopeId, style);
236
261
  };
237
262
  const addStyle = (styleContainerNode, cmpMeta, mode, hostElm) => {
263
+ var _a;
238
264
  let scopeId = getScopeId(cmpMeta);
239
265
  const style = styles.get(scopeId);
240
266
  // if an element is NOT connected then getRootNode() will return the wrong root node
@@ -254,6 +280,11 @@ const addStyle = (styleContainerNode, cmpMeta, mode, hostElm) => {
254
280
  styleElm = doc.createElement('style');
255
281
  styleElm.innerHTML = style;
256
282
  }
283
+ // Apply CSP nonce to the style tag if it exists
284
+ const nonce = (_a = plt.$nonce$) !== null && _a !== void 0 ? _a : queryNonceMetaTagContent(doc);
285
+ if (nonce != null) {
286
+ styleElm.setAttribute('nonce', nonce);
287
+ }
257
288
  styleContainerNode.insertBefore(styleElm, styleContainerNode.querySelector('link'));
258
289
  }
259
290
  if (appliedStyles) {
@@ -488,6 +519,21 @@ const createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {
488
519
  }
489
520
  return elm;
490
521
  };
522
+ /**
523
+ * Create DOM nodes corresponding to a list of {@link d.Vnode} objects and
524
+ * add them to the DOM in the appropriate place.
525
+ *
526
+ * @param parentElm the DOM node which should be used as a parent for the new
527
+ * DOM nodes
528
+ * @param before a child of the `parentElm` which the new children should be
529
+ * inserted before (optional)
530
+ * @param parentVNode the parent virtual DOM node
531
+ * @param vnodes the new child virtual DOM nodes to produce DOM nodes for
532
+ * @param startIdx the index in the child virtual DOM nodes at which to start
533
+ * creating DOM nodes (inclusive)
534
+ * @param endIdx the index in the child virtual DOM nodes at which to stop
535
+ * creating DOM nodes (inclusive)
536
+ */
491
537
  const addVnodes = (parentElm, before, parentVNode, vnodes, startIdx, endIdx) => {
492
538
  let containerElm = (parentElm);
493
539
  let childNode;
@@ -504,6 +550,19 @@ const addVnodes = (parentElm, before, parentVNode, vnodes, startIdx, endIdx) =>
504
550
  }
505
551
  }
506
552
  };
553
+ /**
554
+ * Remove the DOM elements corresponding to a list of {@link d.VNode} objects.
555
+ * This can be used to, for instance, clean up after a list of children which
556
+ * should no longer be shown.
557
+ *
558
+ * This function also handles some of Stencil's slot relocation logic.
559
+ *
560
+ * @param vnodes a list of virtual DOM nodes to remove
561
+ * @param startIdx the index at which to start removing nodes (inclusive)
562
+ * @param endIdx the index at which to stop removing nodes (inclusive)
563
+ * @param vnode a VNode
564
+ * @param elm an element
565
+ */
507
566
  const removeVnodes = (vnodes, startIdx, endIdx, vnode, elm) => {
508
567
  for (; startIdx <= endIdx; ++startIdx) {
509
568
  if ((vnode = vnodes[startIdx])) {
@@ -733,7 +792,8 @@ const updateChildren = (parentElm, oldCh, newVNode, newCh) => {
733
792
  *
734
793
  * So, in other words, if `key` attrs are not set on VNodes which may be
735
794
  * changing order within a `children` array or something along those lines then
736
- * we could obtain a false positive and then have to do needless re-rendering.
795
+ * we could obtain a false negative and then have to do needless re-rendering
796
+ * (i.e. we'd say two VNodes aren't equal when in fact they should be).
737
797
  *
738
798
  * @param leftVNode the first VNode to check
739
799
  * @param rightVNode the second VNode to check
@@ -806,6 +866,18 @@ const callNodeRefs = (vNode) => {
806
866
  vNode.$children$ && vNode.$children$.map(callNodeRefs);
807
867
  }
808
868
  };
869
+ /**
870
+ * The main entry point for Stencil's virtual DOM-based rendering engine
871
+ *
872
+ * Given a {@link d.HostRef} container and some virtual DOM nodes, this
873
+ * function will handle creating a virtual DOM tree with a single root, patching
874
+ * the current virtual DOM tree onto an old one (if any), dealing with slot
875
+ * relocation, and reflecting attributes.
876
+ *
877
+ * @param hostRef data needed to root and render the virtual DOM tree, such as
878
+ * the DOM node into which it should be rendered.
879
+ * @param renderFnResults the virtual DOM nodes to be rendered
880
+ */
809
881
  const renderVdom = (hostRef, renderFnResults) => {
810
882
  const hostElm = hostRef.$hostElement$;
811
883
  const oldVNode = hostRef.$vnode$ || newVNode(null, null);
@@ -1252,6 +1324,7 @@ const disconnectedCallback = (elm) => {
1252
1324
  }
1253
1325
  };
1254
1326
  const bootstrapLazy = (lazyBundles, options = {}) => {
1327
+ var _a;
1255
1328
  const endBootstrap = createTime();
1256
1329
  const cmpTags = [];
1257
1330
  const exclude = options.exclude || [];
@@ -1330,6 +1403,11 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
1330
1403
  {
1331
1404
  visibilityStyle.innerHTML = cmpTags + HYDRATED_CSS;
1332
1405
  visibilityStyle.setAttribute('data-styles', '');
1406
+ // Apply CSP nonce to the style tag if it exists
1407
+ const nonce = (_a = plt.$nonce$) !== null && _a !== void 0 ? _a : queryNonceMetaTagContent(doc);
1408
+ if (nonce != null) {
1409
+ visibilityStyle.setAttribute('nonce', nonce);
1410
+ }
1333
1411
  head.insertBefore(visibilityStyle, metaCharset ? metaCharset.nextSibling : head.firstChild);
1334
1412
  }
1335
1413
  // Process deferred connectedCallbacks now all components have been registered
@@ -1345,6 +1423,13 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
1345
1423
  // Fallback appLoad event
1346
1424
  endBootstrap();
1347
1425
  };
1426
+ /**
1427
+ * Assigns the given value to the nonce property on the runtime platform object.
1428
+ * During runtime, this value is used to set the nonce attribute on all dynamically created script and style tags.
1429
+ * @param nonce The value to be assigned to the platform nonce property.
1430
+ * @returns void
1431
+ */
1432
+ const setNonce = (nonce) => (plt.$nonce$ = nonce);
1348
1433
  const hostRefs = /*@__PURE__*/ new WeakMap();
1349
1434
  const getHostRef = (ref) => hostRefs.get(ref);
1350
1435
  const registerInstance = (lazyInstance, hostRef) => hostRefs.set((hostRef.$lazyInstance$ = lazyInstance), hostRef);
@@ -1458,3 +1543,4 @@ exports.getElement = getElement;
1458
1543
  exports.h = h;
1459
1544
  exports.promiseResolve = promiseResolve;
1460
1545
  exports.registerInstance = registerInstance;
1546
+ exports.setNonce = setNonce;
@@ -2,10 +2,10 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-dc6cc829.js');
5
+ const index = require('./index-b8a62ede.js');
6
6
 
7
7
  /*
8
- Stencil Client Patch Esm v2.20.0 | MIT Licensed | https://stenciljs.com
8
+ Stencil Client Patch Esm v2.22.3 | MIT Licensed | https://stenciljs.com
9
9
  */
10
10
  const patchEsm = () => {
11
11
  return index.promiseResolve();
@@ -18,4 +18,5 @@ const defineCustomElements = (win, options) => {
18
18
  });
19
19
  };
20
20
 
21
+ exports.setNonce = index.setNonce;
21
22
  exports.defineCustomElements = defineCustomElements;
@@ -2,33 +2,33 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-dc6cc829.js');
5
+ const index = require('./index-b8a62ede.js');
6
6
 
7
7
  const tttxButtonCss = ".material-symbols-rounded{font-variation-settings:\"FILL\" 1, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24}.button{font-family:Roboto, serif;box-sizing:border-box;height:36px;min-width:36px;padding:0;margin:0;background:transparent;color:#212121;border:1px solid #c8c8c8;border-radius:4px;text-transform:uppercase;display:flex;justify-content:left;align-items:center;font-size:14px;font-weight:400}.button-content{display:block;padding:0 16px}.icon-left,.icon-right{margin-top:4px}.iconleft{padding-left:8px}.iconleft .button-content{padding-left:4px}.iconright{padding-right:8px}.iconright .button-content{padding-right:4px}.notext{padding:0 6px}.button:hover{background:rgba(17, 17, 17, 0.1);border:1px solid #D5D5D5}.button:active{background:rgba(17, 17, 17, 0.2);border:1px solid #D5D5D5}.primary{background:#1479c6;border:1px solid #1479c6;color:white}.primary:hover{background:#146EB3;border:1px solid #146EB3}.primary:active{background:#1464A2;border:1px solid #1464A2}.borderless{background:transparent;border:none;color:#212121}.borderless:hover{background:rgba(17, 17, 17, 0.1);border:none}.borderless:active{background:rgba(17, 17, 17, 0.2);border:none}.danger{background:#DC0000;border:1px solid #DC0000;color:white}.danger:hover{background:#C60000;border:1px solid #C60000}.danger:active{background:#B00000;border:1px solid #B00000}.disabled{background:#aeaeae;border:none;color:#4c4c4c;cursor:not-allowed}.disabled:hover{background:#aeaeae;border:none;color:#4c4c4c;cursor:not-allowed}.disabled:active{background:#aeaeae;border:none;color:#4c4c4c;cursor:not-allowed}:host{display:inline-block}button{cursor:pointer}tttx-icon{cursor:inherit}.spacingleft{margin-left:8px}";
8
8
 
9
- const TttxButton = class {
10
- constructor(hostRef) {
11
- index.registerInstance(this, hostRef);
12
- this._iconcolor = 'black';
13
- this.notext = undefined;
14
- this.icon = undefined;
15
- this.iconposition = 'left';
16
- this.design = 'default';
17
- }
18
- componentWillLoad() {
19
- this._design = this.design;
20
- const designs = ['primary', 'default', 'disabled', 'danger', 'borderless'];
21
- if (!designs.includes(this.design)) {
22
- this._design = 'default';
23
- }
24
- if (this._design === 'primary' || this._design === 'danger') {
25
- this._iconcolor = 'white';
26
- }
27
- }
28
- render() {
29
- return (index.h(index.Host, null, index.h("button", { class: `button ${this._design} ${this.icon ? 'withicon' : ''} ${this.icon && this.iconposition ? 'icon' + this.iconposition : ''} ${this.notext ? 'notext' : ''}` }, this.icon && this.iconposition === 'left' && (index.h("div", { class: "icon-left" }, index.h("tttx-icon", { icon: this.icon, color: this._iconcolor }))), !this.notext && index.h("div", { class: "button-content" }, index.h("slot", null)), this.icon && this.iconposition === 'right' && (index.h("div", { class: "icon-right" }, index.h("tttx-icon", { icon: this.icon, color: this._iconcolor }))))));
30
- }
31
- };
9
+ const TttxButton = class {
10
+ constructor(hostRef) {
11
+ index.registerInstance(this, hostRef);
12
+ this._iconcolor = 'black';
13
+ this.notext = undefined;
14
+ this.icon = undefined;
15
+ this.iconposition = 'left';
16
+ this.design = 'default';
17
+ }
18
+ componentWillLoad() {
19
+ this._design = this.design;
20
+ const designs = ['primary', 'default', 'disabled', 'danger', 'borderless'];
21
+ if (!designs.includes(this.design)) {
22
+ this._design = 'default';
23
+ }
24
+ if (this._design === 'primary' || this._design === 'danger') {
25
+ this._iconcolor = 'white';
26
+ }
27
+ }
28
+ render() {
29
+ return (index.h(index.Host, null, index.h("button", { class: `button ${this._design} ${this.icon ? 'withicon' : ''} ${this.icon && this.iconposition ? 'icon' + this.iconposition : ''} ${this.notext ? 'notext' : ''}` }, this.icon && this.iconposition === 'left' && (index.h("div", { class: "icon-left" }, index.h("tttx-icon", { icon: this.icon, color: this._iconcolor }))), !this.notext && index.h("div", { class: "button-content" }, index.h("slot", null)), this.icon && this.iconposition === 'right' && (index.h("div", { class: "icon-right" }, index.h("tttx-icon", { icon: this.icon, color: this._iconcolor }))))));
30
+ }
31
+ };
32
32
  TttxButton.style = tttxButtonCss;
33
33
 
34
34
  exports.tttx_button = TttxButton;
@@ -2,161 +2,161 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-dc6cc829.js');
5
+ const index = require('./index-b8a62ede.js');
6
6
 
7
7
  const tttxFilterCss = ".material-symbols-rounded{font-variation-settings:\"FILL\" 1, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24}.material-symbols-rounded{font-family:\"Material Symbols Rounded\", sans-serif;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color:#9e9e9e}.filter-container .filter-button{display:inline-flex;justify-content:center;align-items:center;font-size:14px;font-weight:400;font-family:\"Roboto\", serif;text-transform:uppercase;color:#212121;border:1px solid #d5d5d5;border-radius:4px;background:transparent;height:36px;width:95px;margin:0;padding-right:16px}.filter-container .filter-button .filter-icon{padding-left:8px;padding-right:4px}.filter-container .filter-button.--list-icon{font-size:0;width:36px;height:36px;padding:0}.filter-container .filter-button.--list-icon .filter-icon{padding:0}.filter-container .filter-button.--list-icon:hover{background:#e3e3e3}.filter-container .filter-button.--table-icon{font-size:0;width:36px;height:36px;padding:0;border:none}.filter-container .filter-button.--table-icon .filter-icon{padding:0;width:24px;height:24px}.filter-container .filter-button.--table-icon:hover{background:#e3e3e3;border-radius:50%;width:36px;height:36px}.filter-container .filter-button:hover{background:#e3e3e3}.filter-container .filter-popover-container{display:block;width:196px;border-radius:4px;box-shadow:0px 1px 5px #1111114D;position:absolute}.filter-container .filter-popover-container .filter-header{color:#757575;text-transform:uppercase;font-size:14px;font-weight:500;font-family:\"Roboto\", serif;padding-left:16px;padding-top:12px;padding-bottom:12px;margin:0}.filter-container .filter-popover-container .popover-divider{border:none;width:164px;display:flex;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:8px;height:1px;background-color:#d5d5d5}.filter-container .filter-popover-container .filter-option{display:flex;flex-direction:row;align-items:center;height:36px;padding-left:22px;padding-bottom:4px}.filter-container .filter-popover-container .filter-option .select-all-icon{padding-right:6px}.filter-container .filter-popover-container .filter-option .checkbox-icon{padding-right:8px}.filter-container .filter-popover-container .filter-option .filter-label{padding-left:8px;padding-bottom:3px;font-size:16px;font-weight:500;font-family:\"Roboto\", serif}.filter-container .filter-popover-container .filter-option:first-child{margin-top:8px}.filter-container .filter-popover-container .filter-option:last-child{margin-bottom:8px}.filter-container .filter-popover-container .filter-popover-button-container{display:flex;justify-content:flex-end;align-items:center;padding-bottom:8px}.filter-container .filter-popover-container .filter-popover-button-container .close-button{height:36px;width:74px;background-color:white;border:1px solid #d5d5d5;border-radius:4px;text-transform:uppercase;margin-right:8px;font-size:14px;font-weight:400;font-family:\"Roboto\", serif}.filter-container .filter-popover-container .filter-popover-button-container .apply-button{height:36px;width:73px;background-color:#1479c6;color:white;border-radius:4px;border:none;text-transform:uppercase;margin-right:16px;font-size:14px;font-weight:400;font-family:\"Roboto\", serif}.filter-container .filter-popover-container.--with-search-field{width:252px}.filter-container .filter-popover-container.--with-search-field .popover-divider{width:220px}.filter-container .filter-popover-container.--with-search-field .popover-divider:first-child{top:44px}.filter-container .filter-popover-container.--with-search-field .search-field-container{position:relative;color:#d5d5d5;width:220px;height:36px;padding:0 16px}.filter-container .filter-popover-container.--with-search-field .search-field-container .search-icon{position:absolute;top:50%;padding-left:8px;padding-bottom:9.2px;height:17px;width:17px;transform:translateY(-50%)}.filter-container .filter-popover-container.--with-search-field .search-field-container .search-input{padding-left:36px;border:1px solid #d5d5d5;border-radius:4px;height:36px;width:220px;font-size:16px;font-family:\"Roboto\", serif;font-weight:500;color:#9e9e9e;box-sizing:border-box}.filter-container .filter-popover-container.--with-search-field .search-field-container .search-input:focus-visible,.filter-container .filter-popover-container.--with-search-field .search-field-container .search-input:focus{outline:none;border:1px solid #1479c6}.filter-container .filter-popover-container.--with-search-field .search-field-container .search-input::placeholder{color:#9e9e9e;font-size:16px;font-family:\"Roboto\", serif;font-weight:500}.filter-container .filter-popover-container.--with-search-field .search-field-container .popover-divider{margin-top:8px}.filter-container .filter-popover-container.--with-search-field .filter-option:first-child{padding-top:8px}";
8
8
 
9
- const TttxFilter = class {
10
- constructor(hostRef) {
11
- index.registerInstance(this, hostRef);
12
- this.filterChangeEvent = index.createEvent(this, "filterChangeEvent", 7);
13
- this.filterKey = undefined;
14
- this.filterOptions = [
15
- { optionIcon: 'cancel', optionIconColor: 'darkred', optionText: 'Expired' },
16
- { optionIcon: 'warning', optionIconColor: 'orange', optionText: 'Expiring soon' },
17
- { optionIcon: 'check_circle', optionIconColor: 'green', optionText: 'Active' },
18
- ];
19
- this.showSelectAll = true;
20
- this.showSearchField = false;
21
- this.showOptionIcons = true;
22
- this.filterButtonStyle = 'list filter';
23
- this.filterHeader = 'Qualification status';
24
- this.showPopover = false;
25
- this.selectedFilters = this.filterOptions.map((filterOption) => filterOption.optionText);
26
- this.filterSearchTerm = '';
27
- this.displayedFilterSettings = this.filterOptions;
28
- this.allSelected = true;
29
- }
30
- emitFilterEvent() {
31
- this.filterChangeEvent.emit({
32
- selectedFilters: this.selectedFilters,
33
- filterKey: this.filterKey,
34
- allSelected: this.allSelected,
35
- });
36
- }
37
- onFilterButtonClick() {
38
- this.togglePopover();
39
- }
40
- onCloseButtonClick() {
41
- this.togglePopover();
42
- }
43
- onApplyFilterButtonClick() {
44
- this.emitFilterEvent();
45
- this.togglePopover();
46
- }
47
- onFilterOptionSelected(selectedOption) {
48
- this.allSelected = false;
49
- if (this.selectedFilters.includes(selectedOption)) {
50
- this.selectedFilters = this.selectedFilters.filter((filter) => filter != selectedOption);
51
- }
52
- else {
53
- this.selectedFilters = [...this.selectedFilters, selectedOption];
54
- }
55
- }
56
- togglePopover() {
57
- this.showPopover = !this.showPopover;
58
- // if(!this.showPopover) {
59
- // // this._focussedElementIndex = -1;
60
- // }
61
- }
62
- // Commented out keyboard interaction for now
63
- // @Listen('keyup')
64
- // handleKeyUp(event: KeyboardEvent) {
65
- // const keyboardEventValue = event.key;
66
- // if (document.activeElement.id != `filter__${this.filterKey}`) return;
67
- // if (event.key == " " || event.code == "Space" || event.keyCode == 32) {
68
- // if (this._focussedElementIndex == 0) {
69
- // this.onSelectAllClick()
70
- // } else {
71
- // const options = this.el.shadowRoot.querySelectorAll('.filter-option') as HTMLElement[];
72
- // this.onFilterOptionSelected(options[this._focussedElementIndex].textContent)
73
- // }
74
- // return;
75
- // }
76
- // switch (keyboardEventValue) {
77
- // case 'Enter':
78
- // if(!this.showPopover) {
79
- // this.showPopover=true
80
- // } else {
81
- // this.emitFilterEvent()
82
- // }
83
- // break;
84
- // case 'Escape':
85
- // this.showPopover = false;
86
- // this._focussedElementIndex = -1;
87
- // break;
88
- // case 'ArrowDown':
89
- // this.showPopover = true;
90
- // if (this._focussedElementIndex == -1) {
91
- // this._focussedElementIndex = 0;
92
- // } else {
93
- // const options = this.el.shadowRoot.querySelectorAll('.filter-option') as HTMLElement[];
94
- // const currentOption = options[this._focussedElementIndex] as HTMLElement;
95
- // currentOption.blur();
96
- // // options[this._focussedElementIndex].focus();
97
- // this._focussedElementIndex + 1 < options.length ? this._focussedElementIndex++ : (this._focussedElementIndex = 0);
98
- // }
99
- // break;
100
- // case 'ArrowUp':
101
- // if (this._focussedElementIndex == -1) {
102
- // this.showPopover = true;
103
- // this._focussedElementIndex = 0;
104
- // } else {
105
- // const options = this.el.shadowRoot.querySelectorAll('.filter-option') as HTMLElement[];
106
- // const currentOption = options[this._focussedElementIndex] as HTMLElement;
107
- // currentOption.blur();
108
- // // options[this._focussedElementIndex].focus();
109
- // this._focussedElementIndex > 0 ? this._focussedElementIndex-- : (this._focussedElementIndex = options.length - 1);
110
- // }
111
- // break;
112
- // }
113
- // }
114
- handleFilterChange(event) {
115
- const target = event.target;
116
- this.filterSearchTerm = target.value;
117
- const filteredResults = this.filterOptions.filter((filterOption) => {
118
- const lowercaseOption = filterOption.optionText.toLowerCase();
119
- const filterTerm = this.filterSearchTerm.toLowerCase();
120
- return lowercaseOption.includes(filterTerm);
121
- });
122
- this.displayedFilterSettings = filteredResults;
123
- }
124
- onSelectAllClick() {
125
- this.allSelected = !this.allSelected;
126
- if (this.allSelected) {
127
- this.displayedFilterSettings.forEach((filterSetting) => { this.selectedFilters = [...this.selectedFilters, filterSetting.optionText]; });
128
- }
129
- else {
130
- this.selectedFilters = [];
131
- }
132
- }
133
- getFilterButtonClassName(buttonStyle) {
134
- switch (buttonStyle) {
135
- case 'table icon': {
136
- return '--table-icon';
137
- }
138
- case 'list icon': {
139
- return '--list-icon';
140
- }
141
- default: {
142
- return '';
143
- }
144
- }
145
- }
146
- render() {
147
- const filterPopoverContainerClassNameModifier = this.showSearchField ? '--with-search-field' : '';
148
- const selectAllCheckboxIcon = this.allSelected ? 'check_box' : 'check_box_outline_blank';
149
- const selectAllCheckboxColor = this.allSelected ? 'blue' : 'grey';
150
- const buttonStyleClassNameModifier = this.getFilterButtonClassName(this.filterButtonStyle);
151
- const filterKey = `filter__${this.filterKey}`;
152
- return (index.h(index.Host, { id: filterKey }, index.h("div", { class: 'filter-container' }, index.h("button", { class: `filter-button ${buttonStyleClassNameModifier}`, type: 'button', onClick: this.onFilterButtonClick.bind(this) }, index.h("tttx-icon", { icon: 'filter_list', class: 'filter-icon', color: 'black' }), "Filter"), this.showPopover && (index.h("div", { class: `filter-popover-container ${filterPopoverContainerClassNameModifier}` }, index.h("h4", { class: 'filter-header' }, this.filterHeader), index.h("hr", { class: 'popover-divider' }), this.showSearchField ? (index.h("div", { class: 'search-field-container' }, index.h("tttx-icon", { icon: 'search', class: 'search-icon' }), index.h("input", { type: 'text', class: 'search-input', placeholder: 'Search', value: this.filterSearchTerm, onInput: this.handleFilterChange.bind(this) }), index.h("hr", { class: 'popover-divider' }))) : (''), index.h("div", { class: 'filter-options-container' }, this.showSelectAll ? (index.h("div", { class: 'filter-option', tabIndex: -1, onClick: this.onSelectAllClick.bind(this) }, index.h("tttx-icon", { icon: selectAllCheckboxIcon, color: selectAllCheckboxColor, class: 'select-all-icon' }), index.h("label", { class: 'filter-label' }, "Select all"))) : (''), this.displayedFilterSettings.map((option) => {
153
- const checkboxIcon = this.selectedFilters.includes(option.optionText) ? 'check_box' : 'check_box_outline_blank';
154
- const checkboxColor = this.selectedFilters.includes(option.optionText) ? 'blue' : 'grey';
155
- return index.h("div", { class: 'filter-option', tabIndex: -1, onClick: () => this.onFilterOptionSelected(option.optionText), key: option.optionText }, index.h("tttx-icon", { icon: checkboxIcon, color: checkboxColor, class: 'checkbox-icon' }), this.showOptionIcons && index.h("tttx-icon", { icon: option.optionIcon, color: option.optionIconColor }), index.h("label", { class: 'filter-label' }, option.optionText));
156
- })), index.h("hr", { class: 'popover-divider' }), index.h("div", { class: 'filter-popover-button-container' }, index.h("button", { type: 'button', class: 'close-button', onClick: this.onCloseButtonClick.bind(this) }, "Close"), index.h("button", { type: 'button', class: 'apply-button', onClick: this.onApplyFilterButtonClick.bind(this) }, "Apply")))))));
157
- }
158
- get el() { return index.getElement(this); }
159
- };
9
+ const TttxFilter = class {
10
+ constructor(hostRef) {
11
+ index.registerInstance(this, hostRef);
12
+ this.filterChangeEvent = index.createEvent(this, "filterChangeEvent", 7);
13
+ this.filterKey = undefined;
14
+ this.filterOptions = [
15
+ { optionIcon: 'cancel', optionIconColor: 'darkred', optionText: 'Expired' },
16
+ { optionIcon: 'warning', optionIconColor: 'orange', optionText: 'Expiring soon' },
17
+ { optionIcon: 'check_circle', optionIconColor: 'green', optionText: 'Active' },
18
+ ];
19
+ this.showSelectAll = true;
20
+ this.showSearchField = false;
21
+ this.showOptionIcons = true;
22
+ this.filterButtonStyle = 'list filter';
23
+ this.filterHeader = 'Qualification status';
24
+ this.showPopover = false;
25
+ this.selectedFilters = this.filterOptions.map((filterOption) => filterOption.optionText);
26
+ this.filterSearchTerm = '';
27
+ this.displayedFilterSettings = this.filterOptions;
28
+ this.allSelected = true;
29
+ }
30
+ emitFilterEvent() {
31
+ this.filterChangeEvent.emit({
32
+ selectedFilters: this.selectedFilters,
33
+ filterKey: this.filterKey,
34
+ allSelected: this.allSelected,
35
+ });
36
+ }
37
+ onFilterButtonClick() {
38
+ this.togglePopover();
39
+ }
40
+ onCloseButtonClick() {
41
+ this.togglePopover();
42
+ }
43
+ onApplyFilterButtonClick() {
44
+ this.emitFilterEvent();
45
+ this.togglePopover();
46
+ }
47
+ onFilterOptionSelected(selectedOption) {
48
+ this.allSelected = false;
49
+ if (this.selectedFilters.includes(selectedOption)) {
50
+ this.selectedFilters = this.selectedFilters.filter((filter) => filter != selectedOption);
51
+ }
52
+ else {
53
+ this.selectedFilters = [...this.selectedFilters, selectedOption];
54
+ }
55
+ }
56
+ togglePopover() {
57
+ this.showPopover = !this.showPopover;
58
+ // if(!this.showPopover) {
59
+ // // this._focussedElementIndex = -1;
60
+ // }
61
+ }
62
+ // Commented out keyboard interaction for now
63
+ // @Listen('keyup')
64
+ // handleKeyUp(event: KeyboardEvent) {
65
+ // const keyboardEventValue = event.key;
66
+ // if (document.activeElement.id != `filter__${this.filterKey}`) return;
67
+ // if (event.key == " " || event.code == "Space" || event.keyCode == 32) {
68
+ // if (this._focussedElementIndex == 0) {
69
+ // this.onSelectAllClick()
70
+ // } else {
71
+ // const options = this.el.shadowRoot.querySelectorAll('.filter-option') as HTMLElement[];
72
+ // this.onFilterOptionSelected(options[this._focussedElementIndex].textContent)
73
+ // }
74
+ // return;
75
+ // }
76
+ // switch (keyboardEventValue) {
77
+ // case 'Enter':
78
+ // if(!this.showPopover) {
79
+ // this.showPopover=true
80
+ // } else {
81
+ // this.emitFilterEvent()
82
+ // }
83
+ // break;
84
+ // case 'Escape':
85
+ // this.showPopover = false;
86
+ // this._focussedElementIndex = -1;
87
+ // break;
88
+ // case 'ArrowDown':
89
+ // this.showPopover = true;
90
+ // if (this._focussedElementIndex == -1) {
91
+ // this._focussedElementIndex = 0;
92
+ // } else {
93
+ // const options = this.el.shadowRoot.querySelectorAll('.filter-option') as HTMLElement[];
94
+ // const currentOption = options[this._focussedElementIndex] as HTMLElement;
95
+ // currentOption.blur();
96
+ // // options[this._focussedElementIndex].focus();
97
+ // this._focussedElementIndex + 1 < options.length ? this._focussedElementIndex++ : (this._focussedElementIndex = 0);
98
+ // }
99
+ // break;
100
+ // case 'ArrowUp':
101
+ // if (this._focussedElementIndex == -1) {
102
+ // this.showPopover = true;
103
+ // this._focussedElementIndex = 0;
104
+ // } else {
105
+ // const options = this.el.shadowRoot.querySelectorAll('.filter-option') as HTMLElement[];
106
+ // const currentOption = options[this._focussedElementIndex] as HTMLElement;
107
+ // currentOption.blur();
108
+ // // options[this._focussedElementIndex].focus();
109
+ // this._focussedElementIndex > 0 ? this._focussedElementIndex-- : (this._focussedElementIndex = options.length - 1);
110
+ // }
111
+ // break;
112
+ // }
113
+ // }
114
+ handleFilterChange(event) {
115
+ const target = event.target;
116
+ this.filterSearchTerm = target.value;
117
+ const filteredResults = this.filterOptions.filter((filterOption) => {
118
+ const lowercaseOption = filterOption.optionText.toLowerCase();
119
+ const filterTerm = this.filterSearchTerm.toLowerCase();
120
+ return lowercaseOption.includes(filterTerm);
121
+ });
122
+ this.displayedFilterSettings = filteredResults;
123
+ }
124
+ onSelectAllClick() {
125
+ this.allSelected = !this.allSelected;
126
+ if (this.allSelected) {
127
+ this.displayedFilterSettings.forEach((filterSetting) => { this.selectedFilters = [...this.selectedFilters, filterSetting.optionText]; });
128
+ }
129
+ else {
130
+ this.selectedFilters = [];
131
+ }
132
+ }
133
+ getFilterButtonClassName(buttonStyle) {
134
+ switch (buttonStyle) {
135
+ case 'table icon': {
136
+ return '--table-icon';
137
+ }
138
+ case 'list icon': {
139
+ return '--list-icon';
140
+ }
141
+ default: {
142
+ return '';
143
+ }
144
+ }
145
+ }
146
+ render() {
147
+ const filterPopoverContainerClassNameModifier = this.showSearchField ? '--with-search-field' : '';
148
+ const selectAllCheckboxIcon = this.allSelected ? 'check_box' : 'check_box_outline_blank';
149
+ const selectAllCheckboxColor = this.allSelected ? 'blue' : 'grey';
150
+ const buttonStyleClassNameModifier = this.getFilterButtonClassName(this.filterButtonStyle);
151
+ const filterKey = `filter__${this.filterKey}`;
152
+ return (index.h(index.Host, { id: filterKey }, index.h("div", { class: 'filter-container' }, index.h("button", { class: `filter-button ${buttonStyleClassNameModifier}`, type: 'button', onClick: this.onFilterButtonClick.bind(this) }, index.h("tttx-icon", { icon: 'filter_list', class: 'filter-icon', color: 'black' }), "Filter"), this.showPopover && (index.h("div", { class: `filter-popover-container ${filterPopoverContainerClassNameModifier}` }, index.h("h4", { class: 'filter-header' }, this.filterHeader), index.h("hr", { class: 'popover-divider' }), this.showSearchField ? (index.h("div", { class: 'search-field-container' }, index.h("tttx-icon", { icon: 'search', class: 'search-icon' }), index.h("input", { type: 'text', class: 'search-input', placeholder: 'Search', value: this.filterSearchTerm, onInput: this.handleFilterChange.bind(this) }), index.h("hr", { class: 'popover-divider' }))) : (''), index.h("div", { class: 'filter-options-container' }, this.showSelectAll ? (index.h("div", { class: 'filter-option', tabIndex: -1, onClick: this.onSelectAllClick.bind(this) }, index.h("tttx-icon", { icon: selectAllCheckboxIcon, color: selectAllCheckboxColor, class: 'select-all-icon' }), index.h("label", { class: 'filter-label' }, "Select all"))) : (''), this.displayedFilterSettings.map((option) => {
153
+ const checkboxIcon = this.selectedFilters.includes(option.optionText) ? 'check_box' : 'check_box_outline_blank';
154
+ const checkboxColor = this.selectedFilters.includes(option.optionText) ? 'blue' : 'grey';
155
+ return index.h("div", { class: 'filter-option', tabIndex: -1, onClick: () => this.onFilterOptionSelected(option.optionText), key: option.optionText }, index.h("tttx-icon", { icon: checkboxIcon, color: checkboxColor, class: 'checkbox-icon' }), this.showOptionIcons && index.h("tttx-icon", { icon: option.optionIcon, color: option.optionIconColor }), index.h("label", { class: 'filter-label' }, option.optionText));
156
+ })), index.h("hr", { class: 'popover-divider' }), index.h("div", { class: 'filter-popover-button-container' }, index.h("button", { type: 'button', class: 'close-button', onClick: this.onCloseButtonClick.bind(this) }, "Close"), index.h("button", { type: 'button', class: 'apply-button', onClick: this.onApplyFilterButtonClick.bind(this) }, "Apply")))))));
157
+ }
158
+ get el() { return index.getElement(this); }
159
+ };
160
160
  TttxFilter.style = tttxFilterCss;
161
161
 
162
162
  exports.tttx_filter = TttxFilter;