@3t-transform/threeteeui 0.1.59 → 0.1.61

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 (52) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/tttx-button.cjs.entry.js +5 -3
  3. package/dist/cjs/tttx-form.cjs.entry.js +1 -1
  4. package/dist/cjs/tttx-select-box.cjs.entry.js +79 -0
  5. package/dist/cjs/tttx-tree-view.cjs.entry.js +92 -0
  6. package/dist/cjs/tttx.cjs.js +1 -1
  7. package/dist/collection/collection-manifest.json +3 -1
  8. package/dist/collection/components/atoms/tttx-button/tttx-button.css +20 -0
  9. package/dist/collection/components/atoms/tttx-button/tttx-button.js +22 -2
  10. package/dist/collection/components/molecules/tttx-form/tttx-form.css +20 -0
  11. package/dist/collection/components/molecules/tttx-select-box/tttx-select-box.css +89 -0
  12. package/dist/collection/components/molecules/tttx-select-box/tttx-select-box.js +235 -0
  13. package/dist/collection/components/molecules/tttx-select-box/tttx-select-box.stories.js +69 -0
  14. package/dist/collection/components/molecules/tttx-tree-view/helper/helper.js +1 -0
  15. package/dist/collection/components/molecules/tttx-tree-view/tttx-tree-view.css +72 -0
  16. package/dist/collection/components/molecules/tttx-tree-view/tttx-tree-view.js +140 -0
  17. package/dist/collection/components/molecules/tttx-tree-view/tttx-tree-view.stories.js +698 -0
  18. package/dist/components/index.d.ts +2 -0
  19. package/dist/components/index.js +2 -0
  20. package/dist/components/tttx-button2.js +6 -3
  21. package/dist/components/tttx-form.js +1 -1
  22. package/dist/components/tttx-select-box.d.ts +11 -0
  23. package/dist/components/tttx-select-box.js +113 -0
  24. package/dist/components/tttx-standalone-input.js +1 -136
  25. package/dist/components/tttx-standalone-input2.js +138 -0
  26. package/dist/components/tttx-tree-view.d.ts +11 -0
  27. package/dist/components/tttx-tree-view.js +120 -0
  28. package/dist/esm/loader.js +1 -1
  29. package/dist/esm/tttx-button.entry.js +5 -3
  30. package/dist/esm/tttx-form.entry.js +1 -1
  31. package/dist/esm/tttx-select-box.entry.js +75 -0
  32. package/dist/esm/tttx-tree-view.entry.js +88 -0
  33. package/dist/esm/tttx.js +1 -1
  34. package/dist/tttx/p-2f066b53.entry.js +1 -0
  35. package/dist/tttx/p-3c7e11d9.entry.js +1 -0
  36. package/dist/tttx/{p-5a4eacd9.entry.js → p-57621fdb.entry.js} +1 -1
  37. package/dist/tttx/p-f94b26dc.entry.js +1 -0
  38. package/dist/tttx/tttx.esm.js +1 -1
  39. package/dist/types/components/atoms/tttx-button/tttx-button.d.ts +1 -0
  40. package/dist/types/components/molecules/tttx-filter/tttx-filter.stories.d.ts +1 -1
  41. package/dist/types/components/molecules/tttx-form/tttx-form.stories.d.ts +1 -1
  42. package/dist/types/components/molecules/tttx-list/tttx-list.stories.d.ts +1 -1
  43. package/dist/types/components/molecules/tttx-select-box/interfaces.d.ts +5 -0
  44. package/dist/types/components/molecules/tttx-select-box/tttx-select-box.d.ts +23 -0
  45. package/dist/types/components/molecules/tttx-select-box/tttx-select-box.stories.d.ts +7 -0
  46. package/dist/types/components/molecules/tttx-sorter/tttx-sorter.stories.d.ts +1 -1
  47. package/dist/types/components/molecules/tttx-tree-view/helper/helper.d.ts +14 -0
  48. package/dist/types/components/molecules/tttx-tree-view/tttx-tree-view.d.ts +14 -0
  49. package/dist/types/components/molecules/tttx-tree-view/tttx-tree-view.stories.d.ts +20 -0
  50. package/dist/types/components.d.ts +53 -0
  51. package/package.json +1 -1
  52. package/dist/tttx/p-28d80500.entry.js +0 -1
@@ -0,0 +1,235 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import { h, Host } from '@stencil/core';
3
+ import * as DOMPurify from 'dompurify';
4
+ import domSanitiserOptions from '../../../shared/domsanitiser.options';
5
+ export class TttxSelectBox {
6
+ constructor() {
7
+ this.optionsData = null;
8
+ this.label = undefined;
9
+ this.inline = undefined;
10
+ this.placeholder = '';
11
+ this.searchEnabled = undefined;
12
+ this.open = false;
13
+ this.selectedItem = undefined;
14
+ this.searchTerm = '';
15
+ }
16
+ handleCloseSelectBox() {
17
+ this.open = false;
18
+ }
19
+ handleBlur() {
20
+ this.open = false;
21
+ this.toggleOpen.emit(false);
22
+ }
23
+ onDropdownClicked() {
24
+ this.open = !this.open;
25
+ this.searchTerm = '';
26
+ this.toggleOpen.emit(this.open);
27
+ }
28
+ onItemSelected(option) {
29
+ this.selectedItem = option;
30
+ this.selectItemEvent.emit(this.selectedItem);
31
+ this.el.blur();
32
+ }
33
+ dropdownSelectorContent() {
34
+ if (!this.selectedItem)
35
+ return h("div", { class: "placeholder" }, this.placeholder);
36
+ return h("div", null, this.selectedItem.label);
37
+ }
38
+ dropdownOption(option) {
39
+ /* istanbul ignore next */
40
+ const hideOption = this.searchEnabled && option.label.toLowerCase().indexOf(this.searchTerm.toLowerCase()) === -1;
41
+ const selected = this.selectedItem && option.value === this.selectedItem.value;
42
+ if (option.html) {
43
+ const sanitisedHTML = DOMPurify.sanitize(option.html, domSanitiserOptions);
44
+ /* istanbul ignore next */
45
+ return (h("div", { class: `dropdown-option ${hideOption ? 'hidden' : ''} ${selected ? 'selected' : ''}`, onClick: this.onItemSelected.bind(this, option), key: option.label, innerHTML: sanitisedHTML }));
46
+ }
47
+ /* istanbul ignore next */
48
+ return (h("div", { class: `dropdown-option ${hideOption ? 'hidden' : ''} ${selected ? 'selected' : ''}`, onClick: this.onItemSelected.bind(this, option), key: option.label }, option.label));
49
+ }
50
+ /* istanbul ignore next */
51
+ handleSearchInput(event) {
52
+ const target = event.target;
53
+ this.searchTerm = target.value;
54
+ }
55
+ render() {
56
+ if (!this.optionsData)
57
+ return;
58
+ const parsedOptionsData = typeof this.optionsData === 'string' ? JSON.parse(this.optionsData) : this.optionsData;
59
+ const chevronIcon = this.open ? 'expand_less' : 'expand_more';
60
+ 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" }, this.searchEnabled &&
61
+ /* istanbul ignore next */
62
+ 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) => {
63
+ return this.dropdownOption(option);
64
+ })))))));
65
+ }
66
+ static get is() { return "tttx-select-box"; }
67
+ static get encapsulation() { return "shadow"; }
68
+ static get originalStyleUrls() {
69
+ return {
70
+ "$": ["tttx-select-box.scss"]
71
+ };
72
+ }
73
+ static get styleUrls() {
74
+ return {
75
+ "$": ["tttx-select-box.css"]
76
+ };
77
+ }
78
+ static get properties() {
79
+ return {
80
+ "optionsData": {
81
+ "type": "string",
82
+ "mutable": false,
83
+ "complexType": {
84
+ "original": "string | SelectItem[]",
85
+ "resolved": "SelectItem[] | string",
86
+ "references": {
87
+ "SelectItem": {
88
+ "location": "import",
89
+ "path": "./interfaces"
90
+ }
91
+ }
92
+ },
93
+ "required": false,
94
+ "optional": false,
95
+ "docs": {
96
+ "tags": [],
97
+ "text": ""
98
+ },
99
+ "attribute": "options-data",
100
+ "reflect": false,
101
+ "defaultValue": "null"
102
+ },
103
+ "label": {
104
+ "type": "string",
105
+ "mutable": false,
106
+ "complexType": {
107
+ "original": "string",
108
+ "resolved": "string",
109
+ "references": {}
110
+ },
111
+ "required": false,
112
+ "optional": false,
113
+ "docs": {
114
+ "tags": [],
115
+ "text": ""
116
+ },
117
+ "attribute": "label",
118
+ "reflect": false
119
+ },
120
+ "inline": {
121
+ "type": "boolean",
122
+ "mutable": false,
123
+ "complexType": {
124
+ "original": "boolean",
125
+ "resolved": "boolean",
126
+ "references": {}
127
+ },
128
+ "required": false,
129
+ "optional": false,
130
+ "docs": {
131
+ "tags": [],
132
+ "text": ""
133
+ },
134
+ "attribute": "inline",
135
+ "reflect": false
136
+ },
137
+ "placeholder": {
138
+ "type": "string",
139
+ "mutable": false,
140
+ "complexType": {
141
+ "original": "string",
142
+ "resolved": "string",
143
+ "references": {}
144
+ },
145
+ "required": false,
146
+ "optional": false,
147
+ "docs": {
148
+ "tags": [],
149
+ "text": ""
150
+ },
151
+ "attribute": "placeholder",
152
+ "reflect": false,
153
+ "defaultValue": "''"
154
+ },
155
+ "searchEnabled": {
156
+ "type": "boolean",
157
+ "mutable": false,
158
+ "complexType": {
159
+ "original": "boolean",
160
+ "resolved": "boolean",
161
+ "references": {}
162
+ },
163
+ "required": false,
164
+ "optional": false,
165
+ "docs": {
166
+ "tags": [],
167
+ "text": ""
168
+ },
169
+ "attribute": "search-enabled",
170
+ "reflect": false
171
+ }
172
+ };
173
+ }
174
+ static get states() {
175
+ return {
176
+ "open": {},
177
+ "selectedItem": {},
178
+ "searchTerm": {}
179
+ };
180
+ }
181
+ static get events() {
182
+ return [{
183
+ "method": "selectItemEvent",
184
+ "name": "selectItemEvent",
185
+ "bubbles": false,
186
+ "cancelable": true,
187
+ "composed": true,
188
+ "docs": {
189
+ "tags": [],
190
+ "text": ""
191
+ },
192
+ "complexType": {
193
+ "original": "SelectItem",
194
+ "resolved": "SelectItem",
195
+ "references": {
196
+ "SelectItem": {
197
+ "location": "import",
198
+ "path": "./interfaces"
199
+ }
200
+ }
201
+ }
202
+ }, {
203
+ "method": "toggleOpen",
204
+ "name": "toggleOpen",
205
+ "bubbles": false,
206
+ "cancelable": true,
207
+ "composed": true,
208
+ "docs": {
209
+ "tags": [],
210
+ "text": ""
211
+ },
212
+ "complexType": {
213
+ "original": "boolean",
214
+ "resolved": "boolean",
215
+ "references": {}
216
+ }
217
+ }];
218
+ }
219
+ static get elementRef() { return "el"; }
220
+ static get listeners() {
221
+ return [{
222
+ "name": "closeSelectBox",
223
+ "method": "handleCloseSelectBox",
224
+ "target": undefined,
225
+ "capture": false,
226
+ "passive": false
227
+ }, {
228
+ "name": "blur",
229
+ "method": "handleBlur",
230
+ "target": undefined,
231
+ "capture": false,
232
+ "passive": false
233
+ }];
234
+ }
235
+ }
@@ -0,0 +1,69 @@
1
+ export default {
2
+ title: 'molecules/Select Box',
3
+ component: 'tttx-select-box',
4
+ };
5
+ const options = [
6
+ { value: 'Bonnie', label: 'Steuber' },
7
+ { value: 'Priscilla', label: 'Lowe' },
8
+ { value: 'Andy', label: 'Thompson-Keebler', html: '<span style="color: red">Thompson-Keebler</span>' },
9
+ { value: 'egg', label: 'egg', html: '<tttx-icon icon="egg" />' },
10
+ { value: 'Terence', label: 'Hyatt' },
11
+ { value: 'Ruben', label: 'Toy' },
12
+ { value: 'Rhiannon', label: 'Hills' },
13
+ { value: 'Trent', label: 'Mueller' },
14
+ { value: 'Penelope', label: 'Mann' },
15
+ { value: 'Oswaldo', label: 'Klocko' },
16
+ { value: 'Jorge', label: 'Lockman' },
17
+ { value: 'Conner', label: 'Feeney' },
18
+ { value: 'Dorian', label: 'Fay' },
19
+ { value: 'Estrella', label: 'Predovic' },
20
+ { value: 'Heidi', label: 'McClure' },
21
+ { value: 'Ronaldo', label: 'Mann' },
22
+ ];
23
+ const TemplateHTMLSelectBox = args => `
24
+ <tttx-select-box
25
+ id="htmlSelectBox"
26
+ options-data='${JSON.stringify(args.optionsData)}'
27
+ label='${args.label}'
28
+ placeholder='${args.placeholder}'
29
+ search-enabled='${args.searchEnabled}'
30
+ inline='${args.inline}'
31
+ ></tttx-select-box>
32
+ <script>
33
+ // Handle case where storybook renders this story twice
34
+ if (!htmlSelectBox.length) {
35
+ htmlSelectBox.addEventListener('toggleOpen', (ev) => { console.log(ev) })
36
+ htmlSelectBox.addEventListener('selectItemEvent', (ev) => { console.log(ev) })
37
+ }
38
+ </script>
39
+ `;
40
+ export const BasicHTMLSelectBox = TemplateHTMLSelectBox.bind({});
41
+ BasicHTMLSelectBox.args = {
42
+ optionsData: options,
43
+ label: 'Label',
44
+ placeholder: 'Placeholder',
45
+ searchEnabled: true,
46
+ inline: false
47
+ };
48
+ const TemplateJSXSelectBox = args => `
49
+ <tttx-select-box
50
+ id='objectSelectBox'
51
+ label='${args.label}'
52
+ placeholder='${args.placeholder}'
53
+ search-enabled='${args.searchEnabled}'
54
+ inline='${args.inline}'
55
+ ></tttx-select-box>
56
+ <script>
57
+ objectSelectBox.optionsData = ${JSON.stringify(args.optionsData)}
58
+ objectSelectBox.addEventListener('toggleOpen', (ev) => { console.log(ev) })
59
+ objectSelectBox.addEventListener('selectItemEvent', (ev) => { console.log(ev) })
60
+ </script>
61
+ `;
62
+ export const BasicJSXSelectBox = TemplateJSXSelectBox.bind({});
63
+ BasicJSXSelectBox.args = {
64
+ optionsData: options,
65
+ label: 'Label',
66
+ placeholder: 'Placeholder',
67
+ searchEnabled: true,
68
+ inline: false
69
+ };
@@ -0,0 +1,72 @@
1
+ .material-symbols-rounded {
2
+ font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 24;
3
+ }
4
+
5
+ .tree-view-element {
6
+ margin-left: -50px;
7
+ }
8
+
9
+ .inline-tree-item {
10
+ display: flex;
11
+ align-items: center;
12
+ }
13
+
14
+ .element {
15
+ display: flex;
16
+ flex-flow: row nowrap;
17
+ justify-content: flex-start;
18
+ align-items: center;
19
+ width: 100%;
20
+ }
21
+
22
+ .element-row {
23
+ min-height: 36px;
24
+ font-family: "Roboto", serif;
25
+ font-size: 16px;
26
+ padding: 8px 0px;
27
+ border-bottom: 1px solid #d5d5d5;
28
+ }
29
+
30
+ .rowHover {
31
+ cursor: pointer;
32
+ }
33
+
34
+ li {
35
+ list-style-type: none;
36
+ }
37
+
38
+ .toggleNode {
39
+ padding-right: 3px;
40
+ }
41
+
42
+ .padding-icon {
43
+ padding: 6px 6px;
44
+ height: 24px;
45
+ width: 24px;
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ }
50
+
51
+ .treeNode {
52
+ font-weight: 500;
53
+ }
54
+
55
+ .treeLeaf {
56
+ font-weight: 400;
57
+ }
58
+
59
+ .right-buttons-container {
60
+ margin-left: auto;
61
+ display: flex;
62
+ }
63
+
64
+ .borderless:active {
65
+ outline-style: none;
66
+ }
67
+
68
+ @media (hover: hover) {
69
+ .rowHover:hover {
70
+ background-color: rgba(17, 17, 17, 0.05);
71
+ }
72
+ }
@@ -0,0 +1,140 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import { h } from '@stencil/core';
3
+ import * as DOMPurify from 'dompurify';
4
+ import domSanitiserOptions from '../../../shared/domsanitiser.options';
5
+ export class TttxTreeView {
6
+ constructor() {
7
+ this.data = undefined;
8
+ this.treeData = undefined;
9
+ }
10
+ onClickHandler(clickName, event, node) {
11
+ event.stopPropagation();
12
+ const returnJsonObject = JSON.stringify(node);
13
+ this.clickEvent.emit({ eventName: clickName, returnJsonObject });
14
+ }
15
+ toggleNode(node, event) {
16
+ event.stopPropagation();
17
+ node.isOpen = !node.isOpen;
18
+ this.treeData = [...this.treeData];
19
+ }
20
+ handleCheckboxChange(node, event) {
21
+ event.stopPropagation();
22
+ node.checked = !node.checked;
23
+ this.updateChildrenCheckStatus(node);
24
+ this.treeData = [...this.treeData];
25
+ }
26
+ updateChildrenCheckStatus(node) {
27
+ if (node.child) {
28
+ node.child.forEach(childNode => {
29
+ childNode.checked = node.checked;
30
+ this.updateChildrenCheckStatus(childNode);
31
+ });
32
+ }
33
+ }
34
+ renderNode(node) {
35
+ let checkboxIcon, checkboxColor;
36
+ if (node.checked) {
37
+ checkboxIcon = 'check_box';
38
+ checkboxColor = 'blue';
39
+ }
40
+ else {
41
+ checkboxIcon = 'check_box_outline_blank';
42
+ checkboxColor = 'grey';
43
+ }
44
+ const rowHoverActive = node.chevronActive ? 'rowHover' : '';
45
+ const expanderIcon = node.isOpen ? 'arrow_drop_down' : 'arrow_right';
46
+ if (node.child && node.child.length > 0) {
47
+ return (h("li", null, h("div", { class: `inline-tree-item element-row ${rowHoverActive}`, onClick: (event) => {
48
+ if (node.chevronActive) {
49
+ event.stopPropagation();
50
+ this.onClickHandler('row', event, node);
51
+ }
52
+ } }, h("tttx-button", { class: "toggleNode", design: "borderless-circle", notext: true, icon: expanderIcon, color: "black", onClick: event => this.toggleNode(node, event) }), this.htmlcode('treeNode', node, checkboxIcon, checkboxColor)), node.isOpen ? (h("ul", null, h("div", { class: "child-node" }, node.child.map(childNode => {
53
+ return this.renderNode(childNode);
54
+ })))) : null));
55
+ }
56
+ else {
57
+ return (h("li", null, h("div", { class: `inline-tree-item element-row ${rowHoverActive}`, onClick: (event) => {
58
+ if (node.chevronActive) {
59
+ event.stopPropagation();
60
+ this.onClickHandler('row', event, node);
61
+ }
62
+ } }, this.htmlcode('treeLeaf', node, checkboxIcon, checkboxColor))));
63
+ }
64
+ }
65
+ htmlcode(type, node, check_box, check_boxColor) {
66
+ const htmlcode = (h("div", { class: 'inline-tree-item element' }, node.hasCheckbox && (h("tttx-button", { design: "borderless-circle", notext: true, icon: check_box, iconcolor: check_boxColor, class: "padding-icon checkbox", onClick: event => this.handleCheckboxChange(node, event) })), !node.html && node.hasIcon && h("tttx-icon", { icon: node.icon, color: node.iconColor, class: "padding-icon" }), !node.html && h("div", { class: type }, node.title), node.html && h("div", { class: type, innerHTML: DOMPurify.sanitize(node.html, domSanitiserOptions) }), (node.menuActive || node.chevronActive) && (h("div", { class: "right-buttons-container" }, node.menuActive && (h("tttx-button", { design: "borderless-circle", notext: true, icon: "more_vert", color: "black", class: "padding-icon menu-button", onClick: (event) => {
67
+ event.stopPropagation();
68
+ this.onClickHandler('menu', event, node);
69
+ } })), node.chevronActive && (h("tttx-icon", { icon: "chevron_right", color: "black", class: "padding-icon chevron-button", onClick: (event) => {
70
+ event.stopPropagation();
71
+ this.onClickHandler('chevron', event, node);
72
+ } }))))));
73
+ return htmlcode;
74
+ }
75
+ render() {
76
+ if (!this.data)
77
+ return;
78
+ this.treeData = typeof this.data === 'string' ? JSON.parse(this.data) : this.data;
79
+ return (h("div", { class: "tree-view-element" }, h("ul", null, this.treeData.map((node) => this.renderNode(node)))));
80
+ }
81
+ static get is() { return "tttx-tree-view"; }
82
+ static get encapsulation() { return "shadow"; }
83
+ static get originalStyleUrls() {
84
+ return {
85
+ "$": ["tttx-tree-view.scss"]
86
+ };
87
+ }
88
+ static get styleUrls() {
89
+ return {
90
+ "$": ["tttx-tree-view.css"]
91
+ };
92
+ }
93
+ static get properties() {
94
+ return {
95
+ "data": {
96
+ "type": "unknown",
97
+ "mutable": true,
98
+ "complexType": {
99
+ "original": "TreeViewItem[]",
100
+ "resolved": "TreeViewItem[]",
101
+ "references": {
102
+ "TreeViewItem": {
103
+ "location": "import",
104
+ "path": "./helper/helper"
105
+ }
106
+ }
107
+ },
108
+ "required": false,
109
+ "optional": false,
110
+ "docs": {
111
+ "tags": [],
112
+ "text": ""
113
+ }
114
+ }
115
+ };
116
+ }
117
+ static get states() {
118
+ return {
119
+ "treeData": {}
120
+ };
121
+ }
122
+ static get events() {
123
+ return [{
124
+ "method": "clickEvent",
125
+ "name": "clickEvent",
126
+ "bubbles": true,
127
+ "cancelable": true,
128
+ "composed": true,
129
+ "docs": {
130
+ "tags": [],
131
+ "text": ""
132
+ },
133
+ "complexType": {
134
+ "original": "any",
135
+ "resolved": "any",
136
+ "references": {}
137
+ }
138
+ }];
139
+ }
140
+ }