@3t-transform/threeteeui 0.2.71 → 0.2.73

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 (45) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/tttx-dialog-box.cjs.entry.js +5 -4
  3. package/dist/cjs/tttx-select-box.cjs.entry.js +3 -4
  4. package/dist/cjs/tttx-tabs.cjs.entry.js +97 -0
  5. package/dist/cjs/tttx.cjs.js +1 -1
  6. package/dist/collection/collection-manifest.json +1 -0
  7. package/dist/collection/components/molecules/tttx-dialog-box/tttx-dialog-box.css +8 -1
  8. package/dist/collection/components/molecules/tttx-dialog-box/tttx-dialog-box.js +22 -3
  9. package/dist/collection/components/molecules/tttx-select-box/tttx-select-box.css +5 -2
  10. package/dist/collection/components/molecules/tttx-select-box/tttx-select-box.js +2 -3
  11. package/dist/collection/components/molecules/tttx-select-box/tttx-select-box.stories.js +1 -0
  12. package/dist/collection/components/molecules/tttx-tabs/tttx-tabs.css +46 -0
  13. package/dist/collection/components/molecules/tttx-tabs/tttx-tabs.js +237 -0
  14. package/dist/collection/components/molecules/tttx-tabs/tttx-tabs.stories.js +91 -0
  15. package/dist/collection/components/molecules/tttx-tree-view/tttx-tree-view.stories.js +45 -0
  16. package/dist/components/index.d.ts +1 -0
  17. package/dist/components/index.js +1 -0
  18. package/dist/components/tttx-dialog-box.js +6 -4
  19. package/dist/components/tttx-select-box.js +3 -4
  20. package/dist/components/tttx-tabs.d.ts +11 -0
  21. package/dist/components/tttx-tabs.js +121 -0
  22. package/dist/esm/loader.js +1 -1
  23. package/dist/esm/tttx-dialog-box.entry.js +5 -4
  24. package/dist/esm/tttx-select-box.entry.js +3 -4
  25. package/dist/esm/tttx-tabs.entry.js +93 -0
  26. package/dist/esm/tttx.js +1 -1
  27. package/dist/tttx/p-67c342d7.entry.js +1 -0
  28. package/dist/tttx/p-d9444b12.entry.js +1 -0
  29. package/dist/tttx/p-f34bface.entry.js +1 -0
  30. package/dist/tttx/tttx.esm.js +1 -1
  31. package/dist/types/components/atoms/tttx-qrcode/tttx-qrcode.d.ts +1 -1
  32. package/dist/types/components/molecules/tttx-dialog-box/tttx-dialog-box.d.ts +1 -0
  33. package/dist/types/components/molecules/tttx-form/tttx-form.d.ts +1 -2
  34. package/dist/types/components/molecules/tttx-select-box/tttx-select-box.d.ts +1 -2
  35. package/dist/types/components/molecules/tttx-tabs/interfaces.d.ts +8 -0
  36. package/dist/types/components/molecules/tttx-tabs/tttx-tabs.d.ts +23 -0
  37. package/dist/types/components/molecules/tttx-tabs/tttx-tabs.stories.d.ts +13 -0
  38. package/dist/types/components/molecules/tttx-tree-view/helper/helper.d.ts +2 -2
  39. package/dist/types/components/molecules/tttx-tree-view/tttx-tree-view.stories.d.ts +2 -0
  40. package/dist/types/components.d.ts +31 -0
  41. package/package.json +17 -14
  42. package/dist/collection/docs/gettingstarted-developer.stories.js +0 -9
  43. package/dist/tttx/p-27bc0666.entry.js +0 -1
  44. package/dist/tttx/p-d77e74fd.entry.js +0 -1
  45. package/dist/types/docs/gettingstarted-developer.stories.d.ts +0 -5
@@ -0,0 +1,237 @@
1
+ import { Host, h } from '@stencil/core';
2
+ import * as DOMPurify from 'dompurify';
3
+ import domSanitiserOptions from '../../../shared/domsanitiser.options';
4
+ export class TttxTabs {
5
+ constructor() {
6
+ this.tabFocus = 0;
7
+ this.tabsName = undefined;
8
+ this.navigation = undefined;
9
+ this.wide = undefined;
10
+ this.tabs = undefined;
11
+ this._tabs = undefined;
12
+ }
13
+ onDataChange() {
14
+ if (!this.tabs) {
15
+ return;
16
+ }
17
+ if (typeof this.tabs === 'string') {
18
+ this._tabs = JSON.parse(this.tabs);
19
+ }
20
+ else {
21
+ this._tabs = [...this.tabs];
22
+ }
23
+ this.tabFocus = this._tabs.findIndex(tab => tab.tabIndex !== -1);
24
+ }
25
+ componentWillLoad() {
26
+ // dynamic constructor: any props can be added later
27
+ this.onDataChange();
28
+ }
29
+ handleTabClick(tab) {
30
+ this.tabClick.emit({ tabId: tab.id });
31
+ }
32
+ handleLeftNavigation() {
33
+ this.leftNavigation.emit();
34
+ }
35
+ handleRightNavigation() {
36
+ this.rightNavigation.emit();
37
+ }
38
+ handleKeyDown(event) {
39
+ const orientation = this.tabList.getAttribute('aria-orientation'); // horizontal by default
40
+ const previous = orientation && orientation === 'vertical' ? 'ArrowUp' : 'ArrowLeft';
41
+ const next = orientation && orientation === 'vertical' ? 'ArrowDown' : 'ArrowRight';
42
+ if (event.key === previous || event.key === next) {
43
+ // Make the previous tab deselectable
44
+ this._tabs[this.tabFocus].tabIndex = -1;
45
+ if (event.key === previous) {
46
+ this.tabFocus--;
47
+ // If we're at the start, move to the end
48
+ if (this.tabFocus < 0) {
49
+ this.tabFocus = this._tabs.length - 1;
50
+ }
51
+ }
52
+ else if (event.key === next) {
53
+ this.tabFocus++;
54
+ // If we're at the end, go to the start
55
+ if (this.tabFocus >= this._tabs.length) {
56
+ this.tabFocus = 0;
57
+ }
58
+ }
59
+ // Make the next tab selectable
60
+ this._tabs[this.tabFocus].tabIndex = 0;
61
+ this.tabList.querySelectorAll('[role="tab"]')[this.tabFocus].focus();
62
+ this._tabs = [...this._tabs];
63
+ }
64
+ else if (event.code === 'Space' || event.code === 'Enter') {
65
+ this.tabClick.emit({ tabId: this._tabs[this.tabFocus].id });
66
+ }
67
+ }
68
+ render() {
69
+ if (!this.tabs || this.tabs.length == 0) {
70
+ return;
71
+ }
72
+ return (h(Host, null, h("div", null, h("div", { class: "tab-bar", role: "tablist", "aria-label": this.tabsName, ref: el => (this.tabList = el) }, this.navigation && (h("div", { class: "left-navigation", tabindex: "0", onClick: this.handleLeftNavigation.bind(this) }, h("tttx-icon", { icon: "navigate_before", color: "black" }))), h("div", { class: 'tabs-container' + (this.wide ? ' wide' : '') }, this._tabs.map(tab => {
73
+ return (h("a", { key: tab.id, id: tab.id, role: "tab", "aria-controls": tab.controls, tabindex: tab.tabIndex, "aria-selected": tab.selected, onClick: () => {
74
+ this.handleTabClick(tab);
75
+ } }, tab.tabName));
76
+ })), this.navigation && (h("div", { class: "right-navigation", tabindex: "0", onClick: this.handleRightNavigation.bind(this) }, h("tttx-icon", { icon: "navigate_next", color: "black" })))), this._tabs.map(tab => {
77
+ return (h("article", { key: tab.id, id: tab.controls, role: "tabpanel", tabindex: "0", "aria-labelledby": tab.id, "aria-expanded": tab.selected, innerHTML: DOMPurify.sanitize(tab.pageContent, domSanitiserOptions), hidden: !tab.selected }));
78
+ }))));
79
+ }
80
+ static get is() { return "tttx-tabs"; }
81
+ static get encapsulation() { return "scoped"; }
82
+ static get originalStyleUrls() {
83
+ return {
84
+ "$": ["tttx-tabs.scss"]
85
+ };
86
+ }
87
+ static get styleUrls() {
88
+ return {
89
+ "$": ["tttx-tabs.css"]
90
+ };
91
+ }
92
+ static get properties() {
93
+ return {
94
+ "tabsName": {
95
+ "type": "string",
96
+ "mutable": false,
97
+ "complexType": {
98
+ "original": "string",
99
+ "resolved": "string",
100
+ "references": {}
101
+ },
102
+ "required": false,
103
+ "optional": false,
104
+ "docs": {
105
+ "tags": [],
106
+ "text": ""
107
+ },
108
+ "attribute": "tabs-name",
109
+ "reflect": false
110
+ },
111
+ "navigation": {
112
+ "type": "boolean",
113
+ "mutable": false,
114
+ "complexType": {
115
+ "original": "boolean",
116
+ "resolved": "boolean",
117
+ "references": {}
118
+ },
119
+ "required": false,
120
+ "optional": false,
121
+ "docs": {
122
+ "tags": [],
123
+ "text": ""
124
+ },
125
+ "attribute": "navigation",
126
+ "reflect": false
127
+ },
128
+ "wide": {
129
+ "type": "boolean",
130
+ "mutable": false,
131
+ "complexType": {
132
+ "original": "boolean",
133
+ "resolved": "boolean",
134
+ "references": {}
135
+ },
136
+ "required": false,
137
+ "optional": false,
138
+ "docs": {
139
+ "tags": [],
140
+ "text": ""
141
+ },
142
+ "attribute": "wide",
143
+ "reflect": false
144
+ },
145
+ "tabs": {
146
+ "type": "string",
147
+ "mutable": false,
148
+ "complexType": {
149
+ "original": "string | Tab[]",
150
+ "resolved": "Tab[] | string",
151
+ "references": {
152
+ "Tab": {
153
+ "location": "import",
154
+ "path": "./interfaces"
155
+ }
156
+ }
157
+ },
158
+ "required": false,
159
+ "optional": false,
160
+ "docs": {
161
+ "tags": [],
162
+ "text": ""
163
+ },
164
+ "attribute": "tabs",
165
+ "reflect": false
166
+ }
167
+ };
168
+ }
169
+ static get states() {
170
+ return {
171
+ "_tabs": {}
172
+ };
173
+ }
174
+ static get events() {
175
+ return [{
176
+ "method": "tabClick",
177
+ "name": "tabClick",
178
+ "bubbles": true,
179
+ "cancelable": true,
180
+ "composed": true,
181
+ "docs": {
182
+ "tags": [],
183
+ "text": ""
184
+ },
185
+ "complexType": {
186
+ "original": "{ tabId: string }",
187
+ "resolved": "{ tabId: string; }",
188
+ "references": {}
189
+ }
190
+ }, {
191
+ "method": "leftNavigation",
192
+ "name": "leftNavigation",
193
+ "bubbles": true,
194
+ "cancelable": true,
195
+ "composed": true,
196
+ "docs": {
197
+ "tags": [],
198
+ "text": ""
199
+ },
200
+ "complexType": {
201
+ "original": "any",
202
+ "resolved": "any",
203
+ "references": {}
204
+ }
205
+ }, {
206
+ "method": "rightNavigation",
207
+ "name": "rightNavigation",
208
+ "bubbles": true,
209
+ "cancelable": true,
210
+ "composed": true,
211
+ "docs": {
212
+ "tags": [],
213
+ "text": ""
214
+ },
215
+ "complexType": {
216
+ "original": "any",
217
+ "resolved": "any",
218
+ "references": {}
219
+ }
220
+ }];
221
+ }
222
+ static get watchers() {
223
+ return [{
224
+ "propName": "tabs",
225
+ "methodName": "onDataChange"
226
+ }];
227
+ }
228
+ static get listeners() {
229
+ return [{
230
+ "name": "keydown",
231
+ "method": "handleKeyDown",
232
+ "target": undefined,
233
+ "capture": false,
234
+ "passive": false
235
+ }];
236
+ }
237
+ }
@@ -0,0 +1,91 @@
1
+ import { withActions } from '@storybook/addon-actions/decorator';
2
+ export default {
3
+ title: 'molecules/Tabs',
4
+ component: 'tttx-tabs',
5
+ parameters: {
6
+ actions: {
7
+ handles: ['tabClick', 'leftNavigation', 'rightNavigation'],
8
+ },
9
+ },
10
+ decorators: [withActions],
11
+ };
12
+ const Default = ({ tabsName, navigation, wide, tabs }) => `
13
+ <tttx-tabs
14
+ tabsName='${tabsName}'
15
+ navigation='${navigation}'
16
+ wide='${wide}'
17
+ tabs='${JSON.stringify(tabs)}'
18
+ ></tttx-tabs>
19
+ `;
20
+ export const DefaultTabs = Default.bind({});
21
+ DefaultTabs.args = {
22
+ tabsName: 'Default tabs',
23
+ navigation: false,
24
+ wide: true,
25
+ tabs: [
26
+ {
27
+ id: 'profileTab',
28
+ tabName: 'Profile',
29
+ controls: 'profile',
30
+ selected: true,
31
+ tabIndex: 0,
32
+ pageContent: '<h1>Profile page / component</h1>',
33
+ },
34
+ {
35
+ id: 'complianceTab',
36
+ tabName: 'Compliance',
37
+ controls: 'compliance',
38
+ selected: false,
39
+ tabIndex: -1,
40
+ pageContent: '<h1>Compliance page / component</h1>',
41
+ },
42
+ {
43
+ id: 'competenceTab',
44
+ tabName: 'Competence',
45
+ controls: 'competence',
46
+ selected: false,
47
+ tabIndex: -1,
48
+ pageContent: '<h1>Competence page / component</h1>',
49
+ },
50
+ ],
51
+ };
52
+ const TabsWithNavigation = ({ tabsName, navigation, wide, tabs }) => `
53
+ <tttx-tabs
54
+ tabsName='${tabsName}'
55
+ navigation='${navigation}'
56
+ wide='${wide}'
57
+ tabs='${JSON.stringify(tabs)}'
58
+ ></tttx-tabs>
59
+ `;
60
+ export const NavigationTabs = TabsWithNavigation.bind({});
61
+ NavigationTabs.args = {
62
+ tabsName: 'Navigation tabs',
63
+ navigation: true,
64
+ wide: false,
65
+ tabs: [
66
+ {
67
+ id: 'firstTab',
68
+ tabName: 'Tab one',
69
+ controls: 'one',
70
+ selected: true,
71
+ tabIndex: 0,
72
+ pageContent: '',
73
+ },
74
+ {
75
+ id: 'secondTab',
76
+ tabName: 'Tab two',
77
+ controls: 'two',
78
+ selected: false,
79
+ tabIndex: -1,
80
+ pageContent: '',
81
+ },
82
+ {
83
+ id: 'thirdTab',
84
+ tabName: 'Tab three',
85
+ controls: 'three',
86
+ selected: false,
87
+ tabIndex: -1,
88
+ pageContent: '',
89
+ },
90
+ ],
91
+ };
@@ -1,4 +1,6 @@
1
1
  import { withActions } from '@storybook/addon-actions/decorator';
2
+ //import fs from 'fs';
3
+ //import path from 'path';
2
4
  export default {
3
5
  title: 'molecules/Tree View',
4
6
  component: 'tttx-tree-view',
@@ -696,3 +698,46 @@ CheckBoxAndIcons.args = {
696
698
  },
697
699
  ],
698
700
  };
701
+ // ----------- Skills passport examples -----------
702
+ const convertNode = (node) => {
703
+ let children = [];
704
+ if (node.Groups) {
705
+ children = node.Groups.map((child) => convertNode(child));
706
+ }
707
+ if (node.Requirements) {
708
+ children = children.concat(node.Requirements.map((child) => convertNode(child)));
709
+ }
710
+ return {
711
+ id: node.Name,
712
+ title: node.Name,
713
+ child: children,
714
+ isOpen: true,
715
+ };
716
+ };
717
+ const convertNodes = (nodes) => {
718
+ return nodes.Groups.map((node) => convertNode(node));
719
+ };
720
+ // Requirements list example 1
721
+ export const RequirementsList1 = TttxTreeViewStory.bind({});
722
+ import requirementsListData1 from './story-data/example1.json';
723
+ const convertedData1 = {
724
+ id: requirementsListData1.tagId,
725
+ title: requirementsListData1.listName,
726
+ child: convertNodes(requirementsListData1),
727
+ isOpen: true
728
+ };
729
+ RequirementsList1.args = {
730
+ data: [convertedData1],
731
+ };
732
+ // Requirements list example 2
733
+ export const RequirementsList2 = TttxTreeViewStory.bind({});
734
+ import requirementsListData2 from './story-data/example2.json';
735
+ const convertedData2 = {
736
+ id: requirementsListData2.tagId,
737
+ title: requirementsListData2.listName,
738
+ child: convertNodes(requirementsListData2),
739
+ isOpen: true
740
+ };
741
+ RequirementsList2.args = {
742
+ data: [convertedData2],
743
+ };
@@ -11,6 +11,7 @@ export { TttxQrCode as TttxQrcode } from '../types/components/atoms/tttx-qrcode/
11
11
  export { TttxSelectBox as TttxSelectBox } from '../types/components/molecules/tttx-select-box/tttx-select-box';
12
12
  export { TttxSorter as TttxSorter } from '../types/components/molecules/tttx-sorter/tttx-sorter';
13
13
  export { TttxInput as TttxStandaloneInput } from '../types/components/molecules/tttx-standalone-input/tttx-standalone-input';
14
+ export { TttxTabs as TttxTabs } from '../types/components/molecules/tttx-tabs/tttx-tabs';
14
15
  export { TttxTag as TttxTag } from '../types/components/atoms/tttx-tag/tttx-tag';
15
16
  export { TttxToolbar as TttxToolbar } from '../types/components/molecules/tttx-toolbar/tttx-toolbar';
16
17
  export { TttxTreeView as TttxTreeView } from '../types/components/molecules/tttx-tree-view/tttx-tree-view';
@@ -11,6 +11,7 @@ export { TttxQrcode, defineCustomElement as defineCustomElementTttxQrcode } from
11
11
  export { TttxSelectBox, defineCustomElement as defineCustomElementTttxSelectBox } from './tttx-select-box.js';
12
12
  export { TttxSorter, defineCustomElement as defineCustomElementTttxSorter } from './tttx-sorter.js';
13
13
  export { TttxStandaloneInput, defineCustomElement as defineCustomElementTttxStandaloneInput } from './tttx-standalone-input.js';
14
+ export { TttxTabs, defineCustomElement as defineCustomElementTttxTabs } from './tttx-tabs.js';
14
15
  export { TttxTag, defineCustomElement as defineCustomElementTttxTag } from './tttx-tag.js';
15
16
  export { TttxToolbar, defineCustomElement as defineCustomElementTttxToolbar } from './tttx-toolbar.js';
16
17
  export { TttxTreeView, defineCustomElement as defineCustomElementTttxTreeView } from './tttx-tree-view.js';
@@ -3,7 +3,7 @@ import { p as purify, d as domSanitiserOptions } from './domsanitiser.options.js
3
3
  import { d as defineCustomElement$3 } from './tttx-button2.js';
4
4
  import { d as defineCustomElement$2 } from './tttx-icon2.js';
5
5
 
6
- const tttxDialogBoxCss = ".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}h3{margin-block-start:0em;margin-block-end:0em}.dialog-box{background-color:#ffffff;border:1px solid #d5d5d5;border-radius:4px;box-shadow:0px 1px 5px #1111114d;padding:0}dialog::backdrop{background-color:#75757580}.dialog-box.small{width:400px;min-height:200px}.dialog-box.regular{width:600px;min-height:200px}.dialog-box.large{width:900px;min-height:200px}.dialog-box.mobile{max-width:424px;width:calc(100vw - 20px)}.dialog-box-clickable{cursor:pointer}.contents{display:flex;flex-direction:column;min-height:inherit}.dialog-box-padding{padding:8px 16px}.dialog-box-align-right{margin-left:auto;display:flex}.dialog-box-header-box{border-bottom:1px solid #d5d5d5;display:flex;flex-direction:row;height:36px}.dialog-box-header{display:flex;align-items:center;width:100%}.dialog-box-title{font-size:18;font-weight:500;font-family:\"Roboto\", serif}.dialog-box-icon{padding-right:8px;width:24px;height:24px}.dialog-box-icon-close{margin-left:auto;padding-top:3px;width:24px;height:24px}.dialog-box-content{font-size:16;font-weight:400;font-family:\"Roboto\", serif}.dialog-box-body{overflow:hidden;text-overflow:ellipsis}.dialog-box-body-box{padding:16px}.dialog-box-footer-box{display:flex;flex-direction:row;margin-top:auto;border-top:1px solid #d5d5d5;height:36px}.dialog-box-footer{display:flex;align-items:center;width:100%}.dialog-box-spacing-button{margin-right:8px}.dialog-box-header-box.info{border-bottom:1px solid #1479c6}.dialog-box-header-box.success{border-bottom:1px solid #a2bb31}.dialog-box-header-box.warning{border-bottom:1px solid #f59500}.dialog-box-header-box.critical{border-bottom:1px solid #dc0000}";
6
+ const tttxDialogBoxCss = ".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}h3{margin-block-start:0em;margin-block-end:0em}.dialog-box{background-color:#ffffff;border:1px solid #d5d5d5;border-radius:4px;box-shadow:0px 1px 5px #1111114d;padding:0}.overflow-visible{overflow:visible}.overflow-hidden{overflow:hidden}dialog::backdrop{background-color:#75757580}.dialog-box.small{width:400px;min-height:200px}.dialog-box.regular{width:600px;min-height:200px}.dialog-box.large{width:900px;min-height:200px}.dialog-box.mobile{max-width:424px;width:calc(100vw - 20px)}.dialog-box-clickable{cursor:pointer}.contents{display:flex;flex-direction:column;min-height:inherit}.dialog-box-padding{padding:8px 16px}.dialog-box-align-right{margin-left:auto;display:flex}.dialog-box-header-box{border-bottom:1px solid #d5d5d5;display:flex;flex-direction:row;height:36px}.dialog-box-header{display:flex;align-items:center;width:100%}.dialog-box-title{font-size:18;font-weight:500;font-family:\"Roboto\", serif}.dialog-box-icon{padding-right:8px;width:24px;height:24px}.dialog-box-icon-close{margin-left:auto;padding-top:3px;width:24px;height:24px}.dialog-box-content{font-size:16;font-weight:400;font-family:\"Roboto\", serif}.dialog-box-body{text-overflow:ellipsis}.dialog-box-body-box{padding:16px}.dialog-box-footer-box{display:flex;flex-direction:row;margin-top:auto;border-top:1px solid #d5d5d5;height:36px}.dialog-box-footer{display:flex;align-items:center;width:100%}.dialog-box-spacing-button{margin-right:8px}.dialog-box-header-box.info{border-bottom:1px solid #1479c6}.dialog-box-header-box.success{border-bottom:1px solid #a2bb31}.dialog-box-header-box.warning{border-bottom:1px solid #f59500}.dialog-box-header-box.critical{border-bottom:1px solid #dc0000}";
7
7
 
8
8
  const TttxDialogBox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
9
9
  constructor() {
@@ -15,6 +15,7 @@ const TttxDialogBox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
15
15
  this.data = undefined;
16
16
  this.size = 'regular';
17
17
  this.open = false;
18
+ this.allowOverflow = false;
18
19
  this.elementSize = undefined;
19
20
  }
20
21
  handleResize() {
@@ -57,10 +58,10 @@ const TttxDialogBox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
57
58
  renderContent(content) {
58
59
  if (content.isCustomHtml) {
59
60
  const cleanHTML = purify.sanitize(content.customHtml, domSanitiserOptions);
60
- return (h("div", { class: "dialog-box-body" }, h("div", { innerHTML: cleanHTML })));
61
+ return (h("div", { class: `dialog-box-body ${!this.allowOverflow ? 'overflow-hidden' : ''}` }, h("div", { innerHTML: cleanHTML })));
61
62
  }
62
63
  else {
63
- return (h("div", { class: "dialog-box-body" }, h("span", { class: "dialog-box-content" }, content.contentText)));
64
+ return (h("div", { class: `dialog-box-body ${!this.allowOverflow ? 'overflow-hidden' : ''}` }, h("span", { class: "dialog-box-content" }, content.contentText)));
64
65
  }
65
66
  }
66
67
  renderFooter(footer) {
@@ -88,7 +89,7 @@ const TttxDialogBox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
88
89
  else {
89
90
  this._data = this.data;
90
91
  }
91
- return (h("dialog", { class: `dialog-box ${this.elementSize}` }, h("div", { class: "contents" }, h("div", { class: `dialog-box-padding dialog-box-header-box ${this._data.type || ''}` }, this.renderHeader(this._data.header)), h("div", { class: "dialog-box-padding dialog-box-body-box" }, this.renderContent(this._data.body)), h("div", { class: "dialog-box-padding dialog-box-footer-box" }, this.renderFooter(this._data.footer)))));
92
+ return (h("dialog", { class: `dialog-box ${this.allowOverflow ? 'overflow-visible' : ''} ${this.elementSize}` }, h("div", { class: "contents" }, h("div", { class: `dialog-box-padding dialog-box-header-box ${this._data.type || ''}` }, this.renderHeader(this._data.header)), h("div", { class: "dialog-box-padding dialog-box-body-box" }, this.renderContent(this._data.body)), h("div", { class: "dialog-box-padding dialog-box-footer-box" }, this.renderFooter(this._data.footer)))));
92
93
  }
93
94
  get el() { return this; }
94
95
  static get style() { return tttxDialogBoxCss; }
@@ -96,6 +97,7 @@ const TttxDialogBox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
96
97
  "data": [1025],
97
98
  "size": [1],
98
99
  "open": [1028],
100
+ "allowOverflow": [4, "allow-overflow"],
99
101
  "elementSize": [32]
100
102
  }, [[9, "resize", "handleResize"]]]);
101
103
  function defineCustomElement$1() {
@@ -3,7 +3,7 @@ import { p as purify, d as domSanitiserOptions } from './domsanitiser.options.js
3
3
  import { d as defineCustomElement$3 } from './tttx-icon2.js';
4
4
  import { d as defineCustomElement$2 } from './tttx-standalone-input2.js';
5
5
 
6
- const tttxSelectBoxCss = ".material-symbols-rounded{font-variation-settings:\"FILL\" 1, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24}:host{display:flex;gap:4px}.label{font-size:16px;font-style:normal;font-weight:500;line-height:normal}:host(.inline) .label{padding-top:8px}:host(.block){flex-direction:column}.dropdown-container{position:relative;display:flex;flex-direction:column;width:100%}.dropdown-container:focus-visible{outline:none}.dropdown-container:focus .dropdown-selector{border:1px solid #1479c6}.dropdown-selector,.dropdown-body{display:flex;border-radius:4px;background-color:white}.dropdown-selector{align-items:center;gap:8px;padding:8px 8px 8px 16px;cursor:pointer;border:1px solid #d5d5d5}.dropdown-selector-chevron{margin-left:auto;height:24px}.dropdown-body{display:flex;position:fixed;z-index:1000;flex-direction:column;top:inherit;margin-top:45px;box-shadow:0px 1px 5px #1111114D;padding-bottom:8px;border:1px solid #d5d5d5}.dropdown-body.search{max-height:410px}.dropdown-options-list{display:flex;flex-direction:column;overflow-y:auto;max-height:368px}.dropdown-option{padding:8px 8px 8px 16px;cursor:pointer}.dropdown-option:hover{background-color:#1111110d}.dropdown-option:active,.dropdown-option.selected{background-color:#ebfbfc}.placeholder{color:#9e9e9e}.searchbox{padding:8px 16px 0 16px}.searchbox tttx-standalone-input{margin-top:-4px}.hidden{display:none}";
6
+ const tttxSelectBoxCss = ".material-symbols-rounded{font-variation-settings:\"FILL\" 1, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24}:host{display:flex;gap:4px}.label{font-size:16px;font-style:normal;font-weight:500;line-height:normal}:host(.inline) .label{padding-top:8px}:host(.block){flex-direction:column}.dropdown-container{position:relative;display:flex;flex-direction:column;width:100%}.dropdown-container:focus-visible{outline:none}.dropdown-container:focus .dropdown-selector{border:1px solid #1479c6}.dropdown-selector,.dropdown-body{display:flex;border-radius:4px;background-color:white}.dropdown-selector{align-items:center;gap:8px;padding:8px 8px 8px 16px;cursor:pointer;border:1px solid #d5d5d5}.dropdown-selector-chevron{margin-left:auto;height:24px}.dropdown-selector-chevron>tttx-icon{cursor:pointer}.dropdown-body{display:flex;position:absolute;flex-direction:column;top:inherit;margin-top:45px;box-shadow:0px 1px 5px #1111114D;padding-bottom:8px;border:1px solid #d5d5d5}.dropdown-body.search{max-height:410px}.dropdown-options-list{display:flex;flex-direction:column;overflow-y:auto;max-height:368px}.dropdown-option{padding:8px 8px 8px 16px;cursor:pointer}.dropdown-option:hover{background-color:#1111110d}.dropdown-option:active,.dropdown-option.selected{background-color:#ebfbfc}.placeholder{color:#9e9e9e}.searchbox{padding:8px 16px 0 16px}.searchbox tttx-standalone-input{margin-top:-4px}.hidden{display:none}";
7
7
 
8
8
  const TttxSelectBox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
9
9
  constructor() {
@@ -37,11 +37,10 @@ const TttxSelectBox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
37
37
  this.open = false;
38
38
  this.toggleOpen.emit(false);
39
39
  }
40
- onDropdownClicked(event) {
40
+ onDropdownClicked() {
41
41
  this.open = !this.open;
42
42
  this.searchTerm = '';
43
43
  this.toggleOpen.emit(this.open);
44
- this.dropDownWidth = event.target.offsetWidth;
45
44
  }
46
45
  onItemSelected(option) {
47
46
  this.selectedItem = option;
@@ -75,7 +74,7 @@ const TttxSelectBox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
75
74
  return;
76
75
  const parsedOptionsData = typeof this.optionsData === 'string' ? JSON.parse(this.optionsData) : this.optionsData;
77
76
  const chevronIcon = this.open ? 'expand_less' : 'expand_more';
78
- return (h(Host, { class: this.inline ? 'inline' : 'block' }, this.label && h("div", { class: "label" }, this.label), h("div", { tabindex: "0", class: "dropdown-container" }, h("div", { class: "dropdown-selector", onClick: this.onDropdownClicked.bind(this) }, this.dropdownSelectorContent(), h("div", { class: "dropdown-selector-chevron" }, h("tttx-icon", { icon: chevronIcon, color: "black" }))), this.open && (h("div", { class: "dropdown-body", style: { 'width': `${this.dropDownWidth}px` } }, this.searchEnabled &&
77
+ return (h(Host, { class: this.inline ? 'inline' : 'block' }, this.label && h("div", { class: "label" }, this.label), h("div", { tabindex: "0", class: "dropdown-container" }, h("div", { class: "dropdown-selector", onClick: this.onDropdownClicked.bind(this) }, this.dropdownSelectorContent(), h("div", { class: "dropdown-selector-chevron" }, h("tttx-icon", { icon: chevronIcon, color: "black" }))), this.open && (h("div", { class: "dropdown-body", style: { 'width': `${this.el.offsetWidth}px` } }, this.searchEnabled &&
79
78
  /* istanbul ignore next */
80
79
  h("div", { class: "searchbox" }, h("tttx-standalone-input", { type: "text", label: "", required: true, showerrorbubble: false, iconleft: 'search', onInput: this.handleSearchInput.bind(this) })), h("div", { class: "dropdown-options-list" }, parsedOptionsData.map((option) => {
81
80
  return this.dropdownOption(option);
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface TttxTabs extends Components.TttxTabs, HTMLElement {}
4
+ export const TttxTabs: {
5
+ prototype: TttxTabs;
6
+ new (): TttxTabs;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,121 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
+ import { p as purify, d as domSanitiserOptions } from './domsanitiser.options.js';
3
+ import { d as defineCustomElement$2 } from './tttx-icon2.js';
4
+
5
+ const tttxTabsCss = ".material-symbols-rounded.sc-tttx-tabs{font-variation-settings:\"FILL\" 1, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24}.sc-tttx-tabs-h{display:block}.tab-bar.sc-tttx-tabs{display:flex;height:52px}.tab-bar.sc-tttx-tabs>.left-navigation.sc-tttx-tabs,.tab-bar.sc-tttx-tabs>.right-navigation.sc-tttx-tabs{padding:14px 8px;cursor:pointer}.tab-bar.sc-tttx-tabs>.left-navigation.sc-tttx-tabs>*.sc-tttx-tabs,.tab-bar.sc-tttx-tabs>.right-navigation.sc-tttx-tabs>*.sc-tttx-tabs{height:24px;width:24px;cursor:pointer}.tab-bar.sc-tttx-tabs>.tabs-container.sc-tttx-tabs{display:flex;border-bottom:1px solid #d5d5d5}.tab-bar.sc-tttx-tabs>.tabs-container.wide.sc-tttx-tabs{flex-grow:1}.tab-bar.sc-tttx-tabs>.tabs-container.sc-tttx-tabs>*[role=tab].sc-tttx-tabs{padding:18px 16px;line-height:16px;font-size:14px;font-weight:500;text-transform:uppercase;user-select:none;color:#757575;cursor:pointer}.tab-bar.sc-tttx-tabs>.tabs-container.sc-tttx-tabs>*[role=tab].sc-tttx-tabs:hover{background-color:rgba(17, 17, 17, 0.05)}.tab-bar.sc-tttx-tabs>.tabs-container.sc-tttx-tabs>*[role=tab][aria-selected].sc-tttx-tabs{color:#212121;cursor:default;border-bottom:3px solid #1579c6}";
6
+
7
+ const TttxTabs$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
8
+ constructor() {
9
+ super();
10
+ this.__registerHost();
11
+ this.tabClick = createEvent(this, "tabClick", 7);
12
+ this.leftNavigation = createEvent(this, "leftNavigation", 7);
13
+ this.rightNavigation = createEvent(this, "rightNavigation", 7);
14
+ this.tabFocus = 0;
15
+ this.tabsName = undefined;
16
+ this.navigation = undefined;
17
+ this.wide = undefined;
18
+ this.tabs = undefined;
19
+ this._tabs = undefined;
20
+ }
21
+ onDataChange() {
22
+ if (!this.tabs) {
23
+ return;
24
+ }
25
+ if (typeof this.tabs === 'string') {
26
+ this._tabs = JSON.parse(this.tabs);
27
+ }
28
+ else {
29
+ this._tabs = [...this.tabs];
30
+ }
31
+ this.tabFocus = this._tabs.findIndex(tab => tab.tabIndex !== -1);
32
+ }
33
+ componentWillLoad() {
34
+ // dynamic constructor: any props can be added later
35
+ this.onDataChange();
36
+ }
37
+ handleTabClick(tab) {
38
+ this.tabClick.emit({ tabId: tab.id });
39
+ }
40
+ handleLeftNavigation() {
41
+ this.leftNavigation.emit();
42
+ }
43
+ handleRightNavigation() {
44
+ this.rightNavigation.emit();
45
+ }
46
+ handleKeyDown(event) {
47
+ const orientation = this.tabList.getAttribute('aria-orientation'); // horizontal by default
48
+ const previous = orientation && orientation === 'vertical' ? 'ArrowUp' : 'ArrowLeft';
49
+ const next = orientation && orientation === 'vertical' ? 'ArrowDown' : 'ArrowRight';
50
+ if (event.key === previous || event.key === next) {
51
+ // Make the previous tab deselectable
52
+ this._tabs[this.tabFocus].tabIndex = -1;
53
+ if (event.key === previous) {
54
+ this.tabFocus--;
55
+ // If we're at the start, move to the end
56
+ if (this.tabFocus < 0) {
57
+ this.tabFocus = this._tabs.length - 1;
58
+ }
59
+ }
60
+ else if (event.key === next) {
61
+ this.tabFocus++;
62
+ // If we're at the end, go to the start
63
+ if (this.tabFocus >= this._tabs.length) {
64
+ this.tabFocus = 0;
65
+ }
66
+ }
67
+ // Make the next tab selectable
68
+ this._tabs[this.tabFocus].tabIndex = 0;
69
+ this.tabList.querySelectorAll('[role="tab"]')[this.tabFocus].focus();
70
+ this._tabs = [...this._tabs];
71
+ }
72
+ else if (event.code === 'Space' || event.code === 'Enter') {
73
+ this.tabClick.emit({ tabId: this._tabs[this.tabFocus].id });
74
+ }
75
+ }
76
+ render() {
77
+ if (!this.tabs || this.tabs.length == 0) {
78
+ return;
79
+ }
80
+ return (h(Host, null, h("div", null, h("div", { class: "tab-bar", role: "tablist", "aria-label": this.tabsName, ref: el => (this.tabList = el) }, this.navigation && (h("div", { class: "left-navigation", tabindex: "0", onClick: this.handleLeftNavigation.bind(this) }, h("tttx-icon", { icon: "navigate_before", color: "black" }))), h("div", { class: 'tabs-container' + (this.wide ? ' wide' : '') }, this._tabs.map(tab => {
81
+ return (h("a", { key: tab.id, id: tab.id, role: "tab", "aria-controls": tab.controls, tabindex: tab.tabIndex, "aria-selected": tab.selected, onClick: () => {
82
+ this.handleTabClick(tab);
83
+ } }, tab.tabName));
84
+ })), this.navigation && (h("div", { class: "right-navigation", tabindex: "0", onClick: this.handleRightNavigation.bind(this) }, h("tttx-icon", { icon: "navigate_next", color: "black" })))), this._tabs.map(tab => {
85
+ return (h("article", { key: tab.id, id: tab.controls, role: "tabpanel", tabindex: "0", "aria-labelledby": tab.id, "aria-expanded": tab.selected, innerHTML: purify.sanitize(tab.pageContent, domSanitiserOptions), hidden: !tab.selected }));
86
+ }))));
87
+ }
88
+ static get watchers() { return {
89
+ "tabs": ["onDataChange"]
90
+ }; }
91
+ static get style() { return tttxTabsCss; }
92
+ }, [2, "tttx-tabs", {
93
+ "tabsName": [1, "tabs-name"],
94
+ "navigation": [4],
95
+ "wide": [4],
96
+ "tabs": [1],
97
+ "_tabs": [32]
98
+ }, [[0, "keydown", "handleKeyDown"]]]);
99
+ function defineCustomElement$1() {
100
+ if (typeof customElements === "undefined") {
101
+ return;
102
+ }
103
+ const components = ["tttx-tabs", "tttx-icon"];
104
+ components.forEach(tagName => { switch (tagName) {
105
+ case "tttx-tabs":
106
+ if (!customElements.get(tagName)) {
107
+ customElements.define(tagName, TttxTabs$1);
108
+ }
109
+ break;
110
+ case "tttx-icon":
111
+ if (!customElements.get(tagName)) {
112
+ defineCustomElement$2();
113
+ }
114
+ break;
115
+ } });
116
+ }
117
+
118
+ const TttxTabs = TttxTabs$1;
119
+ const defineCustomElement = defineCustomElement$1;
120
+
121
+ export { TttxTabs, defineCustomElement };
@@ -11,7 +11,7 @@ const patchEsm = () => {
11
11
  const defineCustomElements = (win, options) => {
12
12
  if (typeof window === 'undefined') return Promise.resolve();
13
13
  return patchEsm().then(() => {
14
- return bootstrapLazy([["tttx-dialog-box",[[1,"tttx-dialog-box",{"data":[1025],"size":[1],"open":[1028],"elementSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-select-box",[[1,"tttx-select-box",{"optionsData":[1,"options-data"],"label":[1],"inline":[4],"placeholder":[1],"searchEnabled":[4,"search-enabled"],"selectedValue":[1,"selected-value"],"open":[32],"selectedItem":[32],"searchTerm":[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["tttx-tree-view",[[1,"tttx-tree-view",{"data":[1040],"treeData":[32]}]]],["tttx-filter",[[1,"tttx-filter",{"filterKey":[1,"filter-key"],"filterOptions":[1,"filter-options"],"showSelectAll":[4,"show-select-all"],"showSearchField":[4,"show-search-field"],"showOptionIcons":[4,"show-option-icons"],"filterButtonStyle":[1,"filter-button-style"],"filterHeader":[1,"filter-header"],"defaultFilterOptions":[1,"default-filter-options"],"popoverWidth":[1,"popover-width"],"showPopover":[32],"displayedFilterSettings":[32],"selectedFilters":[32],"filterSearchTerm":[32],"allSelected":[32]},[[0,"closeFilter","handleCloseFilter"]]]]],["tttx-list",[[1,"tttx-list",{"data":[1025],"name":[1],"_data":[32]}]]],["tttx-sorter",[[1,"tttx-sorter",{"sorterKey":[1,"sorter-key"],"defaultSortDirection":[1,"default-sort-direction"],"fieldOptionsData":[1,"field-options-data"],"defaultOption":[1,"default-option"],"selectedField":[32],"sortDirection":[32],"dropdownExpand":[32],"dropdownOptions":[32]},[[0,"closeSorter","handleCloseSorter"]]]]],["tttx-form",[[1,"tttx-form",{"formschema":[1032],"data":[1032],"submit":[64]}]]],["tttx-keyvalue-block",[[1,"tttx-keyvalue-block",{"keyvalues":[8],"horizontal":[4]}]]],["tttx-loading-spinner",[[1,"tttx-loading-spinner",{"loadingMessage":[1028,"loading-message"],"size":[1025]}]]],["tttx-qrcode",[[1,"tttx-qrcode",{"link":[1025],"size":[1026]}]]],["tttx-tag",[[1,"tttx-tag",{"text":[1],"color":[1]}]]],["tttx-toolbar",[[1,"tttx-toolbar",{"border":[4],"viewSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-icon",[[1,"tttx-icon",{"icon":[1],"color":[1]}]]],["tttx-standalone-input",[[2,"tttx-standalone-input",{"label":[1],"secondarylabel":[1],"showerrormsg":[4],"showerrorbubble":[4],"errormsg":[1],"iconleft":[1],"iconleftcolor":[1],"iconright":[1],"iconrightcolor":[1],"inputicon":[1],"inputiconcolor":[1],"inline":[4],"inputautocapitalize":[1],"inputautofocus":[4],"inputkeyhint":[1],"inputindex":[8],"inputtitle":[1],"autocomplete":[1],"checked":[4],"disabled":[4],"max":[8],"maxlength":[8],"min":[8],"minlength":[8],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[8],"required":[4],"step":[8],"type":[1],"value":[1032]}]]],["tttx-button",[[1,"tttx-button",{"notext":[4],"icon":[1],"iconposition":[1],"iconcolor":[1025],"design":[1]}]]]], options);
14
+ return bootstrapLazy([["tttx-dialog-box",[[1,"tttx-dialog-box",{"data":[1025],"size":[1],"open":[1028],"allowOverflow":[4,"allow-overflow"],"elementSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-select-box",[[1,"tttx-select-box",{"optionsData":[1,"options-data"],"label":[1],"inline":[4],"placeholder":[1],"searchEnabled":[4,"search-enabled"],"selectedValue":[1,"selected-value"],"open":[32],"selectedItem":[32],"searchTerm":[32]},[[0,"closeSelectBox","handleCloseSelectBox"],[0,"blur","handleBlur"]]]]],["tttx-tree-view",[[1,"tttx-tree-view",{"data":[1040],"treeData":[32]}]]],["tttx-filter",[[1,"tttx-filter",{"filterKey":[1,"filter-key"],"filterOptions":[1,"filter-options"],"showSelectAll":[4,"show-select-all"],"showSearchField":[4,"show-search-field"],"showOptionIcons":[4,"show-option-icons"],"filterButtonStyle":[1,"filter-button-style"],"filterHeader":[1,"filter-header"],"defaultFilterOptions":[1,"default-filter-options"],"popoverWidth":[1,"popover-width"],"showPopover":[32],"displayedFilterSettings":[32],"selectedFilters":[32],"filterSearchTerm":[32],"allSelected":[32]},[[0,"closeFilter","handleCloseFilter"]]]]],["tttx-list",[[1,"tttx-list",{"data":[1025],"name":[1],"_data":[32]}]]],["tttx-sorter",[[1,"tttx-sorter",{"sorterKey":[1,"sorter-key"],"defaultSortDirection":[1,"default-sort-direction"],"fieldOptionsData":[1,"field-options-data"],"defaultOption":[1,"default-option"],"selectedField":[32],"sortDirection":[32],"dropdownExpand":[32],"dropdownOptions":[32]},[[0,"closeSorter","handleCloseSorter"]]]]],["tttx-tabs",[[2,"tttx-tabs",{"tabsName":[1,"tabs-name"],"navigation":[4],"wide":[4],"tabs":[1],"_tabs":[32]},[[0,"keydown","handleKeyDown"]]]]],["tttx-form",[[1,"tttx-form",{"formschema":[1032],"data":[1032],"submit":[64]}]]],["tttx-keyvalue-block",[[1,"tttx-keyvalue-block",{"keyvalues":[8],"horizontal":[4]}]]],["tttx-loading-spinner",[[1,"tttx-loading-spinner",{"loadingMessage":[1028,"loading-message"],"size":[1025]}]]],["tttx-qrcode",[[1,"tttx-qrcode",{"link":[1025],"size":[1026]}]]],["tttx-tag",[[1,"tttx-tag",{"text":[1],"color":[1]}]]],["tttx-toolbar",[[1,"tttx-toolbar",{"border":[4],"viewSize":[32]},[[9,"resize","handleResize"]]]]],["tttx-icon",[[1,"tttx-icon",{"icon":[1],"color":[1]}]]],["tttx-standalone-input",[[2,"tttx-standalone-input",{"label":[1],"secondarylabel":[1],"showerrormsg":[4],"showerrorbubble":[4],"errormsg":[1],"iconleft":[1],"iconleftcolor":[1],"iconright":[1],"iconrightcolor":[1],"inputicon":[1],"inputiconcolor":[1],"inline":[4],"inputautocapitalize":[1],"inputautofocus":[4],"inputkeyhint":[1],"inputindex":[8],"inputtitle":[1],"autocomplete":[1],"checked":[4],"disabled":[4],"max":[8],"maxlength":[8],"min":[8],"minlength":[8],"name":[1],"pattern":[1],"placeholder":[1],"readonly":[8],"required":[4],"step":[8],"type":[1],"value":[1032]}]]],["tttx-button",[[1,"tttx-button",{"notext":[4],"icon":[1],"iconposition":[1],"iconcolor":[1025],"design":[1]}]]]], options);
15
15
  });
16
16
  };
17
17