slicejs-web-framework 3.2.2 → 3.2.3

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 (107) hide show
  1. package/.opencode/opencode.json +14 -0
  2. package/LICENSE +21 -21
  3. package/README.md +174 -174
  4. package/Slice/Components/Structural/ContextManager/ContextManager.js +369 -369
  5. package/Slice/Components/Structural/ContextManager/ContextManagerDebugger.js +297 -297
  6. package/Slice/Components/Structural/Controller/Controller.js +1138 -1129
  7. package/Slice/Components/Structural/Controller/allowedValuesValidation.js +52 -0
  8. package/Slice/Components/Structural/Debugger/Debugger.css +619 -619
  9. package/Slice/Components/Structural/Debugger/Debugger.html +72 -72
  10. package/Slice/Components/Structural/Debugger/Debugger.js +1547 -1547
  11. package/Slice/Components/Structural/EventManager/EventManager.js +338 -338
  12. package/Slice/Components/Structural/EventManager/EventManagerDebugger.js +361 -361
  13. package/Slice/Components/Structural/Logger/Log.js +10 -10
  14. package/Slice/Components/Structural/Logger/Logger.js +146 -146
  15. package/Slice/Components/Structural/Router/Router.js +721 -721
  16. package/Slice/Components/Structural/StylesManager/StylesManager.js +78 -78
  17. package/Slice/Components/Structural/StylesManager/ThemeManager/ThemeManager.js +84 -84
  18. package/Slice/Slice.js +542 -542
  19. package/Slice/tests/build-bundled-component-without-category.test.js +103 -103
  20. package/Slice/tests/build-js-only-visual-components.test.js +144 -144
  21. package/Slice/tests/bundle-v2-runtime-contract.test.js +728 -728
  22. package/Slice/tests/props-allowed-values-validation.test.js +119 -0
  23. package/Slice/tests/public-env-runtime-accessors.test.js +44 -44
  24. package/Slice/tests/router-loading-finally.test.js +68 -68
  25. package/api/index.js +286 -286
  26. package/api/middleware/securityMiddleware.js +252 -252
  27. package/api/tests/public-env-resolver.test.js +193 -193
  28. package/api/utils/publicEnvResolver.js +117 -117
  29. package/package.json +38 -38
  30. package/sliceConfig.schema.json +109 -109
  31. package/src/App/index.html +22 -22
  32. package/src/App/index.js +23 -23
  33. package/src/App/style.css +40 -40
  34. package/src/Components/AppComponents/HomePage/HomePage.css +201 -201
  35. package/src/Components/AppComponents/HomePage/HomePage.html +37 -37
  36. package/src/Components/AppComponents/HomePage/HomePage.js +210 -210
  37. package/src/Components/AppComponents/Playground/Playground.css +11 -11
  38. package/src/Components/AppComponents/Playground/Playground.js +111 -111
  39. package/src/Components/Service/FetchManager/FetchManager.js +133 -133
  40. package/src/Components/Service/IndexedDbManager/IndexedDbManager.js +141 -141
  41. package/src/Components/Service/LocalStorageManager/LocalStorageManager.js +45 -45
  42. package/src/Components/Visual/Button/Button.css +47 -47
  43. package/src/Components/Visual/Button/Button.html +5 -5
  44. package/src/Components/Visual/Button/Button.js +92 -92
  45. package/src/Components/Visual/Card/Card.css +68 -68
  46. package/src/Components/Visual/Card/Card.html +7 -7
  47. package/src/Components/Visual/Card/Card.js +107 -107
  48. package/src/Components/Visual/Checkbox/Checkbox.css +87 -87
  49. package/src/Components/Visual/Checkbox/Checkbox.html +8 -8
  50. package/src/Components/Visual/Checkbox/Checkbox.js +86 -86
  51. package/src/Components/Visual/CodeVisualizer/CodeVisualizer.css +129 -129
  52. package/src/Components/Visual/CodeVisualizer/CodeVisualizer.html +3 -3
  53. package/src/Components/Visual/CodeVisualizer/CodeVisualizer.js +262 -262
  54. package/src/Components/Visual/Details/Details.css +70 -70
  55. package/src/Components/Visual/Details/Details.html +9 -9
  56. package/src/Components/Visual/Details/Details.js +76 -76
  57. package/src/Components/Visual/DropDown/DropDown.css +60 -60
  58. package/src/Components/Visual/DropDown/DropDown.html +5 -5
  59. package/src/Components/Visual/DropDown/DropDown.js +63 -63
  60. package/src/Components/Visual/Grid/Grid.css +7 -7
  61. package/src/Components/Visual/Grid/Grid.html +1 -1
  62. package/src/Components/Visual/Grid/Grid.js +57 -57
  63. package/src/Components/Visual/Icon/Icon.css +510 -510
  64. package/src/Components/Visual/Icon/Icon.js +89 -89
  65. package/src/Components/Visual/Icon/slc.json +554 -554
  66. package/src/Components/Visual/Icon/slc.styl +507 -507
  67. package/src/Components/Visual/Icon/slc.svg +1485 -1485
  68. package/src/Components/Visual/Icon/slc.symbol.svg +1058 -1058
  69. package/src/Components/Visual/Input/Input.css +91 -91
  70. package/src/Components/Visual/Input/Input.html +4 -4
  71. package/src/Components/Visual/Input/Input.js +215 -215
  72. package/src/Components/Visual/Layout/Layout.js +49 -49
  73. package/src/Components/Visual/Link/Link.css +8 -8
  74. package/src/Components/Visual/Link/Link.html +1 -1
  75. package/src/Components/Visual/Link/Link.js +63 -63
  76. package/src/Components/Visual/Loading/Loading.css +56 -56
  77. package/src/Components/Visual/Loading/Loading.html +83 -83
  78. package/src/Components/Visual/Loading/Loading.js +38 -38
  79. package/src/Components/Visual/MultiRoute/MultiRoute.js +93 -93
  80. package/src/Components/Visual/Navbar/Navbar.css +115 -115
  81. package/src/Components/Visual/Navbar/Navbar.html +44 -44
  82. package/src/Components/Visual/Navbar/Navbar.js +141 -141
  83. package/src/Components/Visual/NotFound/NotFound.css +116 -116
  84. package/src/Components/Visual/NotFound/NotFound.html +23 -23
  85. package/src/Components/Visual/NotFound/NotFound.js +16 -16
  86. package/src/Components/Visual/Route/Route.js +93 -93
  87. package/src/Components/Visual/Select/Select.css +84 -84
  88. package/src/Components/Visual/Select/Select.html +8 -8
  89. package/src/Components/Visual/Select/Select.js +195 -195
  90. package/src/Components/Visual/Switch/Switch.css +76 -76
  91. package/src/Components/Visual/Switch/Switch.html +8 -8
  92. package/src/Components/Visual/Switch/Switch.js +102 -102
  93. package/src/Components/Visual/TreeItem/TreeItem.css +36 -36
  94. package/src/Components/Visual/TreeItem/TreeItem.html +1 -1
  95. package/src/Components/Visual/TreeItem/TreeItem.js +126 -126
  96. package/src/Components/Visual/TreeView/TreeView.css +8 -8
  97. package/src/Components/Visual/TreeView/TreeView.html +1 -1
  98. package/src/Components/Visual/TreeView/TreeView.js +48 -48
  99. package/src/Components/components.js +27 -27
  100. package/src/Styles/sliceStyles.css +34 -34
  101. package/src/Themes/Dark.css +42 -42
  102. package/src/Themes/Light.css +31 -31
  103. package/src/Themes/Slice.css +47 -47
  104. package/src/routes.js +15 -15
  105. package/src/sliceConfig.json +73 -73
  106. package/src/testing.js +887 -887
  107. package/types/index.d.ts +207 -207
@@ -1,115 +1,115 @@
1
- .slice_nav_header {
2
- font-family: var(--font-family);
3
- width: 100%;
4
- z-index: 1;
5
- box-shadow: 0px 0px 10px #00000050;
6
- background-color: var(--primary-color);
7
- display: flex;
8
- justify-content: space-around;
9
- align-items: center;
10
- }
11
- .direction-row-reverse {
12
- flex-direction: row-reverse;
13
- }
14
- .nav_bar_fixed {
15
- z-index: 100;
16
- width: 100%;
17
- left: 0;
18
- top: 0;
19
- position: fixed;
20
- }
21
- .slice_nav_bar {
22
- transition: transform 0.3s ease;
23
- width: 100%;
24
- justify-content: center;
25
- display: flex;
26
- align-items: center;
27
- left: 0;
28
- top: 0;
29
- }
30
- .nav_bar_menu {
31
- width: 100%;
32
- overflow-y: hidden;
33
- overflow-x: scroll;
34
- display: flex;
35
- align-items: center;
36
- justify-content: center;
37
- list-style: none;
38
- }
39
- .slice_nav_header .item {
40
- cursor: pointer;
41
- font-weight: bold;
42
- text-decoration: none;
43
- color: var(--primary-color-contrast);
44
- border-radius: var(--border-radius-slice);
45
- }
46
- .anim-item {
47
- position: absolute;
48
- top: 100%;
49
- left: 50%;
50
- width: 0%;
51
- height: 2.5px;
52
- border-radius: 5px;
53
- background-color: var(--primary-color-contrast);
54
- transition: width 0.3s ease, left 0.3s ease;
55
- }
56
- .slice_nav_header li {
57
- margin: 25px;
58
- display: flex;
59
- justify-content: center;
60
- position: relative;
61
- }
62
-
63
- .slice_nav_header li:hover .anim-item {
64
- width: 100%;
65
- left: 0;
66
- }
67
- .slice_nav_header .logo_container {
68
- padding: 10px;
69
- }
70
- .logo_container img {
71
- pointer-events: none;
72
- user-select: none;
73
- max-height: 50px;
74
- max-width: 200px;
75
- }
76
- .nav_bar_buttons {
77
- justify-content: flex-end;
78
- display: flex;
79
- }
80
-
81
- .mobile_menu_button,
82
- .mobile_close_menu {
83
- visibility: hidden;
84
- position: absolute;
85
- right: 0px;
86
- margin-right: 25px;
87
- }
88
- .mobile_close_menu {
89
- top: 25px;
90
- }
91
- @media only screen and (max-width: 1020px) {
92
- .slice_nav_bar {
93
- z-index: 1;
94
- list-style: none;
95
- width: 100%;
96
- height: 100%;
97
- position: fixed;
98
- top: 0;
99
- left: 0;
100
- display: flex;
101
- justify-content: center;
102
- align-items: center;
103
- flex-direction: column;
104
- background-color: var(--primary-color);
105
- transform: translateX(100%);
106
- }
107
- .nav_bar_menu,
108
- .nav_bar_buttons {
109
- flex-direction: column;
110
- }
111
- .mobile_menu_button,
112
- .mobile_close_menu {
113
- visibility: visible;
114
- }
115
- }
1
+ .slice_nav_header {
2
+ font-family: var(--font-family);
3
+ width: 100%;
4
+ z-index: 1;
5
+ box-shadow: 0px 0px 10px #00000050;
6
+ background-color: var(--primary-color);
7
+ display: flex;
8
+ justify-content: space-around;
9
+ align-items: center;
10
+ }
11
+ .direction-row-reverse {
12
+ flex-direction: row-reverse;
13
+ }
14
+ .nav_bar_fixed {
15
+ z-index: 100;
16
+ width: 100%;
17
+ left: 0;
18
+ top: 0;
19
+ position: fixed;
20
+ }
21
+ .slice_nav_bar {
22
+ transition: transform 0.3s ease;
23
+ width: 100%;
24
+ justify-content: center;
25
+ display: flex;
26
+ align-items: center;
27
+ left: 0;
28
+ top: 0;
29
+ }
30
+ .nav_bar_menu {
31
+ width: 100%;
32
+ overflow-y: hidden;
33
+ overflow-x: scroll;
34
+ display: flex;
35
+ align-items: center;
36
+ justify-content: center;
37
+ list-style: none;
38
+ }
39
+ .slice_nav_header .item {
40
+ cursor: pointer;
41
+ font-weight: bold;
42
+ text-decoration: none;
43
+ color: var(--primary-color-contrast);
44
+ border-radius: var(--border-radius-slice);
45
+ }
46
+ .anim-item {
47
+ position: absolute;
48
+ top: 100%;
49
+ left: 50%;
50
+ width: 0%;
51
+ height: 2.5px;
52
+ border-radius: 5px;
53
+ background-color: var(--primary-color-contrast);
54
+ transition: width 0.3s ease, left 0.3s ease;
55
+ }
56
+ .slice_nav_header li {
57
+ margin: 25px;
58
+ display: flex;
59
+ justify-content: center;
60
+ position: relative;
61
+ }
62
+
63
+ .slice_nav_header li:hover .anim-item {
64
+ width: 100%;
65
+ left: 0;
66
+ }
67
+ .slice_nav_header .logo_container {
68
+ padding: 10px;
69
+ }
70
+ .logo_container img {
71
+ pointer-events: none;
72
+ user-select: none;
73
+ max-height: 50px;
74
+ max-width: 200px;
75
+ }
76
+ .nav_bar_buttons {
77
+ justify-content: flex-end;
78
+ display: flex;
79
+ }
80
+
81
+ .mobile_menu_button,
82
+ .mobile_close_menu {
83
+ visibility: hidden;
84
+ position: absolute;
85
+ right: 0px;
86
+ margin-right: 25px;
87
+ }
88
+ .mobile_close_menu {
89
+ top: 25px;
90
+ }
91
+ @media only screen and (max-width: 1020px) {
92
+ .slice_nav_bar {
93
+ z-index: 1;
94
+ list-style: none;
95
+ width: 100%;
96
+ height: 100%;
97
+ position: fixed;
98
+ top: 0;
99
+ left: 0;
100
+ display: flex;
101
+ justify-content: center;
102
+ align-items: center;
103
+ flex-direction: column;
104
+ background-color: var(--primary-color);
105
+ transform: translateX(100%);
106
+ }
107
+ .nav_bar_menu,
108
+ .nav_bar_buttons {
109
+ flex-direction: column;
110
+ }
111
+ .mobile_menu_button,
112
+ .mobile_close_menu {
113
+ visibility: visible;
114
+ }
115
+ }
@@ -1,44 +1,44 @@
1
- <header class="slice_nav_header">
2
- <a class="logo_container"></a>
3
- <nav class="slice_nav_bar">
4
- <div class="nav_bar_menu"></div>
5
- <div class="nav_bar_buttons"></div>
6
- <div class="mobile_close_menu">
7
- <svg
8
- class="w-6 h-6 text-gray-800 dark:text-white"
9
- aria-hidden="true"
10
- xmlns="http://www.w3.org/2000/svg"
11
- width="24"
12
- height="24"
13
- fill="none"
14
- viewBox="0 0 24 24"
15
- >
16
- <path
17
- stroke="var(--primary-color-contrast)"
18
- stroke-linecap="round"
19
- stroke-linejoin="round"
20
- stroke-width="2"
21
- d="M6 18 17.94 6M18 18 6.06 6"
22
- />
23
- </svg>
24
- </div>
25
- </nav>
26
- <div class="mobile_menu_button">
27
- <svg
28
- class="w-6 h-6 text-gray-800 dark:text-white"
29
- aria-hidden="true"
30
- xmlns="http://www.w3.org/2000/svg"
31
- width="24"
32
- height="24"
33
- fill="none"
34
- viewBox="0 0 24 24"
35
- >
36
- <path
37
- stroke="var(--primary-color-contrast)"
38
- stroke-linecap="round"
39
- stroke-width="3"
40
- d="M12 6h.01M12 12h.01M12 18h.01"
41
- />
42
- </svg>
43
- </div>
44
- </header>
1
+ <header class="slice_nav_header">
2
+ <a class="logo_container"></a>
3
+ <nav class="slice_nav_bar">
4
+ <div class="nav_bar_menu"></div>
5
+ <div class="nav_bar_buttons"></div>
6
+ <div class="mobile_close_menu">
7
+ <svg
8
+ class="w-6 h-6 text-gray-800 dark:text-white"
9
+ aria-hidden="true"
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ width="24"
12
+ height="24"
13
+ fill="none"
14
+ viewBox="0 0 24 24"
15
+ >
16
+ <path
17
+ stroke="var(--primary-color-contrast)"
18
+ stroke-linecap="round"
19
+ stroke-linejoin="round"
20
+ stroke-width="2"
21
+ d="M6 18 17.94 6M18 18 6.06 6"
22
+ />
23
+ </svg>
24
+ </div>
25
+ </nav>
26
+ <div class="mobile_menu_button">
27
+ <svg
28
+ class="w-6 h-6 text-gray-800 dark:text-white"
29
+ aria-hidden="true"
30
+ xmlns="http://www.w3.org/2000/svg"
31
+ width="24"
32
+ height="24"
33
+ fill="none"
34
+ viewBox="0 0 24 24"
35
+ >
36
+ <path
37
+ stroke="var(--primary-color-contrast)"
38
+ stroke-linecap="round"
39
+ stroke-width="3"
40
+ d="M12 6h.01M12 12h.01M12 18h.01"
41
+ />
42
+ </svg>
43
+ </div>
44
+ </header>
@@ -1,141 +1,141 @@
1
- export default class Navbar extends HTMLElement {
2
- constructor(props) {
3
- super();
4
- slice.attachTemplate(this);
5
-
6
- this.$header = this.querySelector('.slice_nav_header');
7
- this.$navBar = this.querySelector('.slice_nav_bar');
8
- this.$menu = this.querySelector('.nav_bar_menu');
9
- this.$buttonsContainer = this.querySelector('.nav_bar_buttons');
10
- this.$logoContainer = this.querySelector('.logo_container');
11
- this.$mobileMenu = this.querySelector('.slice_mobile_menu');
12
- this.$mobileButton = this.querySelector('.mobile_menu_button');
13
- this.$closeMenu = this.querySelector('.mobile_close_menu');
14
-
15
- this.$mobileButton.addEventListener('click', () => {
16
- this.$navBar.style.transform = 'translateX(0%)';
17
- });
18
-
19
- this.$closeMenu.addEventListener('click', () => {
20
- this.$navBar.style.transform = 'translateX(100%)';
21
- });
22
-
23
- slice.controller.setComponentProps(this, props);
24
- this.debuggerProps = ['logo', 'items'];
25
- }
26
-
27
- async init() {
28
- if (this.items) {
29
- await this.addItems(this.items);
30
- }
31
- if (this.buttons) {
32
- this.buttons.forEach(async (item) => {
33
- await this.addButton(item, this.$buttonsContainer);
34
- });
35
- }
36
-
37
- if (window.screen.width >= 1020 && this.items && this.logo && this.buttons) {
38
- this.$menu.style.maxWidth = '60%';
39
- }
40
- }
41
-
42
- async addItems(items) {
43
- for (let i = 0; i < items.length; i++) {
44
- await this.addItem(items[i], this.$menu);
45
- }
46
- }
47
-
48
- get position() {
49
- return this._position;
50
- }
51
-
52
- set position(value) {
53
- this._position = value;
54
- if (value === 'fixed') {
55
- this.classList.add('nav_bar_fixed');
56
- }
57
- }
58
-
59
- get logo() {
60
- return this._logo;
61
- }
62
-
63
- set logo(value) {
64
- this._logo = value;
65
- const img = document.createElement('img');
66
- img.src = value.src;
67
- this.$logoContainer.appendChild(img);
68
- this.$logoContainer.href = value.path;
69
- }
70
-
71
- get items() {
72
- return this._items;
73
- }
74
-
75
- set items(values) {
76
- this._items = values;
77
- }
78
-
79
- get buttons() {
80
- return this._buttons;
81
- }
82
-
83
- set buttons(values) {
84
- this._buttons = values;
85
- }
86
-
87
- get direction() {
88
- return this._direction;
89
- }
90
-
91
- set direction(value) {
92
- this._direction = value;
93
- if (value === 'reverse') {
94
- this.$header.classList.add('direction-row-reverse');
95
- }
96
- }
97
-
98
- async addItem(value, addTo) {
99
- const item = document.createElement('li');
100
- const hover = document.createElement('div');
101
- hover.classList.add('anim-item');
102
- if (!value.type) {
103
- value.type = 'text';
104
- }
105
- if (value.type === 'text') {
106
- const link = await slice.build('Link', {
107
- text: value.text,
108
- path: value.path,
109
- classes: 'item',
110
- });
111
- item.appendChild(link);
112
- }
113
- if (value.type === 'dropdown') {
114
- const d = await slice.build('DropDown', {
115
- label: value.text,
116
- options: value.options,
117
- });
118
- d.classList.add('item');
119
- item.appendChild(d);
120
- }
121
- item.appendChild(hover);
122
- addTo.appendChild(item);
123
- }
124
-
125
- async addButton(value, addTo) {
126
- if (!value.color) {
127
- value.color = {
128
- label: 'var(--primary-color-rgb)',
129
- button: 'var(--primary-background-color)',
130
- };
131
- }
132
- const button = await slice.build('Button', {
133
- value: value.value,
134
- customColor: value.color,
135
- icon: value.icon,
136
- onClickCallback: value.onClickCallback,
137
- });
138
- addTo.appendChild(button);
139
- }
140
- }
141
- window.customElements.define('slice-nav-bar', Navbar);
1
+ export default class Navbar extends HTMLElement {
2
+ constructor(props) {
3
+ super();
4
+ slice.attachTemplate(this);
5
+
6
+ this.$header = this.querySelector('.slice_nav_header');
7
+ this.$navBar = this.querySelector('.slice_nav_bar');
8
+ this.$menu = this.querySelector('.nav_bar_menu');
9
+ this.$buttonsContainer = this.querySelector('.nav_bar_buttons');
10
+ this.$logoContainer = this.querySelector('.logo_container');
11
+ this.$mobileMenu = this.querySelector('.slice_mobile_menu');
12
+ this.$mobileButton = this.querySelector('.mobile_menu_button');
13
+ this.$closeMenu = this.querySelector('.mobile_close_menu');
14
+
15
+ this.$mobileButton.addEventListener('click', () => {
16
+ this.$navBar.style.transform = 'translateX(0%)';
17
+ });
18
+
19
+ this.$closeMenu.addEventListener('click', () => {
20
+ this.$navBar.style.transform = 'translateX(100%)';
21
+ });
22
+
23
+ slice.controller.setComponentProps(this, props);
24
+ this.debuggerProps = ['logo', 'items'];
25
+ }
26
+
27
+ async init() {
28
+ if (this.items) {
29
+ await this.addItems(this.items);
30
+ }
31
+ if (this.buttons) {
32
+ this.buttons.forEach(async (item) => {
33
+ await this.addButton(item, this.$buttonsContainer);
34
+ });
35
+ }
36
+
37
+ if (window.screen.width >= 1020 && this.items && this.logo && this.buttons) {
38
+ this.$menu.style.maxWidth = '60%';
39
+ }
40
+ }
41
+
42
+ async addItems(items) {
43
+ for (let i = 0; i < items.length; i++) {
44
+ await this.addItem(items[i], this.$menu);
45
+ }
46
+ }
47
+
48
+ get position() {
49
+ return this._position;
50
+ }
51
+
52
+ set position(value) {
53
+ this._position = value;
54
+ if (value === 'fixed') {
55
+ this.classList.add('nav_bar_fixed');
56
+ }
57
+ }
58
+
59
+ get logo() {
60
+ return this._logo;
61
+ }
62
+
63
+ set logo(value) {
64
+ this._logo = value;
65
+ const img = document.createElement('img');
66
+ img.src = value.src;
67
+ this.$logoContainer.appendChild(img);
68
+ this.$logoContainer.href = value.path;
69
+ }
70
+
71
+ get items() {
72
+ return this._items;
73
+ }
74
+
75
+ set items(values) {
76
+ this._items = values;
77
+ }
78
+
79
+ get buttons() {
80
+ return this._buttons;
81
+ }
82
+
83
+ set buttons(values) {
84
+ this._buttons = values;
85
+ }
86
+
87
+ get direction() {
88
+ return this._direction;
89
+ }
90
+
91
+ set direction(value) {
92
+ this._direction = value;
93
+ if (value === 'reverse') {
94
+ this.$header.classList.add('direction-row-reverse');
95
+ }
96
+ }
97
+
98
+ async addItem(value, addTo) {
99
+ const item = document.createElement('li');
100
+ const hover = document.createElement('div');
101
+ hover.classList.add('anim-item');
102
+ if (!value.type) {
103
+ value.type = 'text';
104
+ }
105
+ if (value.type === 'text') {
106
+ const link = await slice.build('Link', {
107
+ text: value.text,
108
+ path: value.path,
109
+ classes: 'item',
110
+ });
111
+ item.appendChild(link);
112
+ }
113
+ if (value.type === 'dropdown') {
114
+ const d = await slice.build('DropDown', {
115
+ label: value.text,
116
+ options: value.options,
117
+ });
118
+ d.classList.add('item');
119
+ item.appendChild(d);
120
+ }
121
+ item.appendChild(hover);
122
+ addTo.appendChild(item);
123
+ }
124
+
125
+ async addButton(value, addTo) {
126
+ if (!value.color) {
127
+ value.color = {
128
+ label: 'var(--primary-color-rgb)',
129
+ button: 'var(--primary-background-color)',
130
+ };
131
+ }
132
+ const button = await slice.build('Button', {
133
+ value: value.value,
134
+ customColor: value.color,
135
+ icon: value.icon,
136
+ onClickCallback: value.onClickCallback,
137
+ });
138
+ addTo.appendChild(button);
139
+ }
140
+ }
141
+ window.customElements.define('slice-nav-bar', Navbar);