divhunt 2.0.5 → 2.0.6

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 (121) hide show
  1. package/package.json +1 -1
  2. package/addons/render/elements/front/items/self/base/menu/menu.js +0 -96
  3. package/addons/render/elements/front/items/self/base/menu/styles/base.css +0 -116
  4. package/addons/render/elements/front/items/self/base/menu/styles/sizes.css +0 -27
  5. package/addons/render/elements/front/items/self/base/menu/styles/variants.css +0 -99
  6. package/addons/render/elements/front/items/self/base/tag/tag.css +0 -199
  7. package/addons/render/elements/front/items/self/base/tag/tag.js +0 -37
  8. package/addons/render/elements/front/items/self/cards/basic/basic.js +0 -89
  9. package/addons/render/elements/front/items/self/cards/basic/styles/base.css +0 -66
  10. package/addons/render/elements/front/items/self/cards/basic/styles/sizes.css +0 -32
  11. package/addons/render/elements/front/items/self/cards/basic/styles/variants.css +0 -99
  12. package/addons/render/elements/front/items/self/cards/list/list.js +0 -108
  13. package/addons/render/elements/front/items/self/cards/list/styles/base.css +0 -96
  14. package/addons/render/elements/front/items/self/cards/list/styles/sizes.css +0 -32
  15. package/addons/render/elements/front/items/self/cards/list/styles/variants.css +0 -99
  16. package/addons/render/elements/front/items/self/cards/media/media.js +0 -116
  17. package/addons/render/elements/front/items/self/cards/media/styles/base.css +0 -126
  18. package/addons/render/elements/front/items/self/cards/media/styles/sizes.css +0 -49
  19. package/addons/render/elements/front/items/self/cards/media/styles/variants.css +0 -74
  20. package/addons/render/elements/front/items/self/cards/profile/profile.js +0 -95
  21. package/addons/render/elements/front/items/self/cards/profile/styles/base.css +0 -142
  22. package/addons/render/elements/front/items/self/cards/profile/styles/sizes.css +0 -43
  23. package/addons/render/elements/front/items/self/cards/profile/styles/variants.css +0 -131
  24. package/addons/render/elements/front/items/self/cards/stat/stat.js +0 -117
  25. package/addons/render/elements/front/items/self/cards/stat/styles/base.css +0 -97
  26. package/addons/render/elements/front/items/self/cards/stat/styles/sizes.css +0 -49
  27. package/addons/render/elements/front/items/self/cards/stat/styles/variants.css +0 -124
  28. package/addons/render/elements/front/items/self/content/html/html.css +0 -93
  29. package/addons/render/elements/front/items/self/content/html/html.js +0 -40
  30. package/addons/render/elements/front/items/self/content/markdown/markdown.css +0 -200
  31. package/addons/render/elements/front/items/self/content/markdown/markdown.js +0 -120
  32. package/addons/render/elements/front/items/self/data/comments/comments.css +0 -253
  33. package/addons/render/elements/front/items/self/data/comments/comments.js +0 -134
  34. package/addons/render/elements/front/items/self/data/files/files.css +0 -116
  35. package/addons/render/elements/front/items/self/data/files/files.js +0 -85
  36. package/addons/render/elements/front/items/self/data/folders/folders.css +0 -104
  37. package/addons/render/elements/front/items/self/data/folders/folders.js +0 -73
  38. package/addons/render/elements/front/items/self/data/inbox/inbox.css +0 -225
  39. package/addons/render/elements/front/items/self/data/inbox/inbox.js +0 -111
  40. package/addons/render/elements/front/items/self/data/logs/logs.css +0 -133
  41. package/addons/render/elements/front/items/self/data/logs/logs.js +0 -65
  42. package/addons/render/elements/front/items/self/data/plans/plans.css +0 -231
  43. package/addons/render/elements/front/items/self/data/plans/plans.js +0 -104
  44. package/addons/render/elements/front/items/self/data/properties/properties.css +0 -108
  45. package/addons/render/elements/front/items/self/data/properties/properties.js +0 -156
  46. package/addons/render/elements/front/items/self/data/table/table.css +0 -153
  47. package/addons/render/elements/front/items/self/data/table/table.js +0 -106
  48. package/addons/render/elements/front/items/self/data/timeline/timeline.css +0 -127
  49. package/addons/render/elements/front/items/self/data/timeline/timeline.js +0 -57
  50. package/addons/render/elements/front/items/self/feedback/alert/alert.css +0 -258
  51. package/addons/render/elements/front/items/self/feedback/alert/alert.js +0 -67
  52. package/addons/render/elements/front/items/self/feedback/confirm/confirm.css +0 -229
  53. package/addons/render/elements/front/items/self/feedback/confirm/confirm.js +0 -81
  54. package/addons/render/elements/front/items/self/feedback/loader/loader.css +0 -203
  55. package/addons/render/elements/front/items/self/feedback/loader/loader.js +0 -25
  56. package/addons/render/elements/front/items/self/feedback/progress/progress.css +0 -136
  57. package/addons/render/elements/front/items/self/feedback/progress/progress.js +0 -40
  58. package/addons/render/elements/front/items/self/form/button/button.js +0 -105
  59. package/addons/render/elements/front/items/self/form/button/styles/base.css +0 -176
  60. package/addons/render/elements/front/items/self/form/button/styles/sizes.css +0 -78
  61. package/addons/render/elements/front/items/self/form/button/styles/variants.css +0 -421
  62. package/addons/render/elements/front/items/self/form/checkbox/checkbox.js +0 -57
  63. package/addons/render/elements/front/items/self/form/checkbox/styles/base.css +0 -52
  64. package/addons/render/elements/front/items/self/form/checkbox/styles/sizes.css +0 -39
  65. package/addons/render/elements/front/items/self/form/checkbox/styles/variants.css +0 -121
  66. package/addons/render/elements/front/items/self/form/field/field.css +0 -96
  67. package/addons/render/elements/front/items/self/form/field/field.js +0 -39
  68. package/addons/render/elements/front/items/self/form/input/input.css +0 -111
  69. package/addons/render/elements/front/items/self/form/input/input.js +0 -78
  70. package/addons/render/elements/front/items/self/form/input/styles/base.css +0 -26
  71. package/addons/render/elements/front/items/self/form/input/styles/sizes.css +0 -15
  72. package/addons/render/elements/front/items/self/form/input/styles/variants.css +0 -98
  73. package/addons/render/elements/front/items/self/form/radio/radio.js +0 -57
  74. package/addons/render/elements/front/items/self/form/radio/styles/base.css +0 -48
  75. package/addons/render/elements/front/items/self/form/radio/styles/sizes.css +0 -36
  76. package/addons/render/elements/front/items/self/form/radio/styles/variants.css +0 -121
  77. package/addons/render/elements/front/items/self/form/rating/rating.css +0 -95
  78. package/addons/render/elements/front/items/self/form/rating/rating.js +0 -88
  79. package/addons/render/elements/front/items/self/form/section/section.css +0 -107
  80. package/addons/render/elements/front/items/self/form/section/section.js +0 -39
  81. package/addons/render/elements/front/items/self/form/slider/slider.css +0 -244
  82. package/addons/render/elements/front/items/self/form/slider/slider.js +0 -69
  83. package/addons/render/elements/front/items/self/form/textarea/textarea.css +0 -117
  84. package/addons/render/elements/front/items/self/form/textarea/textarea.js +0 -69
  85. package/addons/render/elements/front/items/self/layout/empty/empty.css +0 -154
  86. package/addons/render/elements/front/items/self/layout/empty/empty.js +0 -43
  87. package/addons/render/elements/front/items/self/layout/heading/heading.css +0 -117
  88. package/addons/render/elements/front/items/self/layout/heading/heading.js +0 -47
  89. package/addons/render/elements/front/items/self/layout/hero/hero.js +0 -88
  90. package/addons/render/elements/front/items/self/layout/hero/styles/base.css +0 -81
  91. package/addons/render/elements/front/items/self/layout/hero/styles/sizes.css +0 -24
  92. package/addons/render/elements/front/items/self/layout/hero/styles/variants.css +0 -98
  93. package/addons/render/elements/front/items/self/navigation/breadcrumb/addon/_class/addon.js +0 -9
  94. package/addons/render/elements/front/items/self/navigation/breadcrumb/addon/functions/get.js +0 -22
  95. package/addons/render/elements/front/items/self/navigation/breadcrumb/breadcrumb.css +0 -13
  96. package/addons/render/elements/front/items/self/navigation/breadcrumb/breadcrumb.js +0 -51
  97. package/addons/render/elements/front/items/self/navigation/footer/addon/_class/addon.js +0 -11
  98. package/addons/render/elements/front/items/self/navigation/footer/addon/functions/columns.js +0 -11
  99. package/addons/render/elements/front/items/self/navigation/footer/addon/functions/get.js +0 -34
  100. package/addons/render/elements/front/items/self/navigation/footer/footer.css +0 -283
  101. package/addons/render/elements/front/items/self/navigation/footer/footer.js +0 -139
  102. package/addons/render/elements/front/items/self/navigation/navbar/addon/_class/addon.js +0 -13
  103. package/addons/render/elements/front/items/self/navigation/navbar/addon/functions/active.js +0 -7
  104. package/addons/render/elements/front/items/self/navigation/navbar/addon/functions/get.js +0 -31
  105. package/addons/render/elements/front/items/self/navigation/navbar/navbar.css +0 -140
  106. package/addons/render/elements/front/items/self/navigation/navbar/navbar.js +0 -118
  107. package/addons/render/elements/front/items/self/navigation/pagination/pagination.css +0 -160
  108. package/addons/render/elements/front/items/self/navigation/pagination/pagination.js +0 -131
  109. package/addons/render/elements/front/items/self/navigation/sidebar/addon/_class/addon.js +0 -12
  110. package/addons/render/elements/front/items/self/navigation/sidebar/addon/functions/active.js +0 -7
  111. package/addons/render/elements/front/items/self/navigation/sidebar/addon/functions/get.js +0 -35
  112. package/addons/render/elements/front/items/self/navigation/sidebar/addon/functions/groups.js +0 -10
  113. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.css +0 -278
  114. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.js +0 -85
  115. package/addons/render/elements/front/items/self/navigation/stepper/stepper.css +0 -202
  116. package/addons/render/elements/front/items/self/navigation/stepper/stepper.js +0 -82
  117. package/addons/render/elements/front/items/self/navigation/tabs/addon.js +0 -32
  118. package/addons/render/elements/front/items/self/navigation/tabs/tabs.css +0 -239
  119. package/addons/render/elements/front/items/self/navigation/tabs/tabs.js +0 -76
  120. package/addons/render/elements/front/items/self/preview/html/html.css +0 -377
  121. package/addons/render/elements/front/items/self/preview/html/html.js +0 -107
@@ -1,131 +0,0 @@
1
- import elements from '#elements/load.js';
2
-
3
- elements.ItemAdd({
4
- id: 'pagination',
5
- icon: 'last_page',
6
- name: 'Pagination',
7
- description: 'Pagination component with page numbers, previous/next buttons, and customizable appearance.',
8
- category: 'Navigation',
9
- author: 'Divhunt',
10
- config: {
11
- page: {
12
- type: 'number',
13
- value: 1
14
- },
15
- pages: {
16
- type: 'number',
17
- value: 10
18
- },
19
- visible: {
20
- type: 'number',
21
- value: 5
22
- },
23
- first: {
24
- type: 'boolean',
25
- value: true
26
- },
27
- last: {
28
- type: 'boolean',
29
- value: true
30
- },
31
- prev: {
32
- type: 'boolean',
33
- value: true
34
- },
35
- next: {
36
- type: 'boolean',
37
- value: true
38
- },
39
- variant: {
40
- type: 'array',
41
- value: ['size-m'],
42
- options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'border', 'size-s', 'size-m', 'size-l']
43
- },
44
- onChange: {
45
- type: 'function'
46
- }
47
- },
48
- render: function()
49
- {
50
- this.getPages = () =>
51
- {
52
- const pageList = [];
53
- const half = Math.floor(this.visible / 2);
54
- let start = Math.max(1, this.page - half);
55
- let end = Math.min(this.pages, start + this.visible - 1);
56
-
57
- if (end - start + 1 < this.visible)
58
- {
59
- start = Math.max(1, end - this.visible + 1);
60
- }
61
-
62
- if (start > 1)
63
- {
64
- pageList.push(1);
65
- if (start > 2)
66
- {
67
- pageList.push('...');
68
- }
69
- }
70
-
71
- for (let i = start; i <= end; i++)
72
- {
73
- pageList.push(i);
74
- }
75
-
76
- if (end < this.pages)
77
- {
78
- if (end < this.pages - 1)
79
- {
80
- pageList.push('...');
81
- }
82
- pageList.push(this.pages);
83
- }
84
-
85
- return pageList;
86
- };
87
-
88
- this.goToPage = (pageNum) =>
89
- {
90
- if (pageNum !== '...' && pageNum !== this.page && pageNum >= 1 && pageNum <= this.pages)
91
- {
92
- this.page = pageNum;
93
- if (this.onChange)
94
- {
95
- this.onChange(pageNum);
96
- }
97
- }
98
- };
99
-
100
- this.goToFirst = () => this.goToPage(1);
101
- this.goToLast = () => this.goToPage(this.pages);
102
- this.goToPrev = () => this.goToPage(this.page - 1);
103
- this.goToNext = () => this.goToPage(this.page + 1);
104
-
105
- return `
106
- <div class="holder" :variant="variant.join(' ')">
107
- <button dh-if="first" class="button first" :disabled="page === 1" dh-click="goToFirst">
108
- <i class="icon">first_page</i>
109
- </button>
110
-
111
- <button dh-if="prev" class="button prev" :disabled="page === 1" dh-click="goToPrev">
112
- <i class="icon">chevron_left</i>
113
- </button>
114
-
115
- <div class="pages">
116
- <button dh-for="pageNum in getPages()" class="page" :active="pageNum === page ? 'true' : 'false'" :disabled="pageNum === '...'" dh-click="() => goToPage(pageNum)">
117
- {{ pageNum }}
118
- </button>
119
- </div>
120
-
121
- <button dh-if="next" class="button next" :disabled="page === pages" dh-click="goToNext">
122
- <i class="icon">chevron_right</i>
123
- </button>
124
-
125
- <button dh-if="last" class="button last" :disabled="page === pages" dh-click="goToLast">
126
- <i class="icon">last_page</i>
127
- </button>
128
- </div>
129
- `;
130
- }
131
- });
@@ -1,12 +0,0 @@
1
- const sidebar = divhunt.Addon('sidebar', (addon) =>
2
- {
3
- addon.Field('id', ['string|number']);
4
- addon.Field('type', ['string', 'item']);
5
- addon.Field('group', ['string', '']);
6
- addon.Field('order', ['number', 0]);
7
- addon.Field('icon', ['string', 'folder']);
8
- addon.Field('label', ['string', 'Menu Item']);
9
- addon.Field('href', ['string', '#']);
10
- addon.Field('active', ['boolean', false]);
11
- addon.Field('condition', ['boolean', true]);
12
- });
@@ -1,7 +0,0 @@
1
- sidebar.Fn('active', function(id)
2
- {
3
- Object.values(sidebar.Items()).forEach(item =>
4
- {
5
- item.Set('active', item.Get('id') === id);
6
- });
7
- });
@@ -1,35 +0,0 @@
1
- sidebar.Fn('get', function(filter = {})
2
- {
3
- return Object.values(sidebar.Items())
4
- .filter(item =>
5
- {
6
- if (item.Get('condition') === false)
7
- {
8
- return false;
9
- }
10
-
11
- if (filter.type && item.Get('type') !== filter.type)
12
- {
13
- return false;
14
- }
15
-
16
- if (filter.group && item.Get('group') !== filter.group)
17
- {
18
- return false;
19
- }
20
-
21
- return true;
22
- })
23
- .sort((a, b) => a.Get('order') - b.Get('order'))
24
- .map(item =>
25
- ({
26
- id: item.Get('id'),
27
- type: item.Get('type'),
28
- group: item.Get('group'),
29
- order: item.Get('order'),
30
- icon: item.Get('icon'),
31
- label: item.Get('label'),
32
- href: item.Get('href'),
33
- active: item.Get('active')
34
- }));
35
- });
@@ -1,10 +0,0 @@
1
- sidebar.Fn('groups', function()
2
- {
3
- const groups = sidebar.Fn('get', { type: 'group' });
4
-
5
- return groups.map(group => ({
6
- id: group.id,
7
- label: group.label,
8
- items: this.Fn('get', { type: 'item', group: group.id })
9
- }));
10
- });
@@ -1,278 +0,0 @@
1
- /* Base */
2
- .e-6059377a
3
- {
4
- height: 100%;
5
- }
6
-
7
- .e-6059377a > .holder
8
- {
9
- display: flex;
10
- flex-direction: column;
11
- height: max-content;
12
- width: 250px;
13
- background: transparent;
14
- transition: width 0.2s;
15
- height: 100%;
16
- }
17
-
18
- /* Content */
19
- .e-6059377a > .holder > .content
20
- {
21
- display: flex;
22
- flex-direction: column;
23
- gap: var(--dh-spacing-s);
24
- flex: 1;
25
- overflow-y: auto;
26
- overflow-x: hidden;
27
- }
28
-
29
- /* Group */
30
- .e-6059377a > .holder > .content > .group
31
- {
32
- display: flex;
33
- flex-direction: column;
34
- padding-bottom: var(--dh-spacing-m);
35
- border-bottom: 1px solid var(--dh-bg-3-border);
36
- }
37
-
38
- .e-6059377a > .holder > .content > .group:last-child
39
- {
40
- border-bottom: none;
41
- padding-bottom: 0;
42
- }
43
-
44
- .e-6059377a > .holder > .content > .group > label
45
- {
46
- display: flex;
47
- align-items: center;
48
- height: 28px;
49
- padding: 0 var(--dh-spacing-s);
50
- font-size: 11px;
51
- font-weight: 600;
52
- color: var(--dh-text-2);
53
- text-transform: uppercase;
54
- letter-spacing: 0.5px;
55
- margin-top: var(--dh-spacing-s);
56
- margin-bottom: var(--dh-spacing-x);
57
- }
58
-
59
- .e-6059377a > .holder > .content > .group > .items
60
- {
61
- display: flex;
62
- flex-direction: column;
63
- gap: 2px;
64
- }
65
-
66
- .e-6059377a > .holder > .content > .group > .items > .item
67
- {
68
- display: flex;
69
- align-items: center;
70
- gap: var(--dh-spacing-s);
71
- padding: var(--dh-spacing-s) var(--dh-spacing-m);
72
- color: var(--dh-text-1);
73
- font-size: var(--dh-size-m);
74
- font-weight: 500;
75
- text-decoration: none;
76
- cursor: pointer;
77
- transition: all 0.2s;
78
- border-radius: 0;
79
- }
80
-
81
- .e-6059377a > .holder > .content > .group > .items > .item:hover
82
- {
83
- background: var(--dh-bg-3);
84
- }
85
-
86
- .e-6059377a > .holder > .content > .group > .items > .item:focus-visible
87
- {
88
- outline: 2px solid var(--dh-brand);
89
- outline-offset: 2px;
90
- }
91
-
92
- .e-6059377a > .holder > .content > .group > .items > .item[active]
93
- {
94
- color: var(--dh-brand);
95
- }
96
-
97
- .e-6059377a > .holder > .content > .group > .items > .item > i
98
- {
99
- flex-shrink: 0;
100
- width: 20px;
101
- height: 20px;
102
- font-size: 20px;
103
- color: var(--dh-text-2);
104
- display: flex;
105
- align-items: center;
106
- justify-content: center;
107
- transition: all 0.2s;
108
- }
109
-
110
- .e-6059377a > .holder > .content > .group > .items > .item:hover > i
111
- {
112
- color: var(--dh-text-1);
113
- }
114
-
115
- .e-6059377a > .holder > .content > .group > .items > .item[active] > i
116
- {
117
- color: var(--dh-brand);
118
- }
119
-
120
- .e-6059377a > .holder > .content > .group > .items > .item > span
121
- {
122
- flex: 1;
123
- min-width: 0;
124
- white-space: nowrap;
125
- overflow: hidden;
126
- text-overflow: ellipsis;
127
- }
128
-
129
- /* Variants - Background */
130
- .e-6059377a > .holder[variant*="bg-1"]
131
- {
132
- background: var(--dh-bg-1);
133
- padding: var(--dh-spacing-m);
134
- }
135
-
136
- .e-6059377a > .holder[variant*="bg-2"]
137
- {
138
- background: var(--dh-bg-2);
139
- padding: var(--dh-spacing-m);
140
- }
141
-
142
- .e-6059377a > .holder[variant*="bg-3"]
143
- {
144
- background: var(--dh-bg-3);
145
- padding: var(--dh-spacing-m);
146
- }
147
-
148
- .e-6059377a > .holder[variant*="bg-4"]
149
- {
150
- background: var(--dh-bg-4);
151
- padding: var(--dh-spacing-m);
152
- }
153
-
154
- /* Variants - Border Full */
155
- .e-6059377a > .holder[variant*="bg-1"][variant*="border-full"]
156
- {
157
- border: 1px solid var(--dh-bg-1-border);
158
- }
159
-
160
- .e-6059377a > .holder[variant*="bg-2"][variant*="border-full"]
161
- {
162
- border: 1px solid var(--dh-bg-2-border);
163
- }
164
-
165
- .e-6059377a > .holder[variant*="bg-3"][variant*="border-full"]
166
- {
167
- border: 1px solid var(--dh-bg-3-border);
168
- }
169
-
170
- .e-6059377a > .holder[variant*="bg-4"][variant*="border-full"]
171
- {
172
- border: 1px solid var(--dh-bg-4-border);
173
- }
174
-
175
- .e-6059377a > .holder[variant*="bg-1"][variant*="border-left"]
176
- {
177
- border-left: 1px solid var(--dh-bg-1-border);
178
- }
179
-
180
- .e-6059377a > .holder[variant*="bg-2"][variant*="border-left"]
181
- {
182
- border-left: 1px solid var(--dh-bg-2-border);
183
- }
184
-
185
- .e-6059377a > .holder[variant*="bg-3"][variant*="border-left"]
186
- {
187
- border-left: 1px solid var(--dh-bg-3-border);
188
- }
189
-
190
- .e-6059377a > .holder[variant*="bg-4"][variant*="border-left"]
191
- {
192
- border-left: 1px solid var(--dh-bg-4-border);
193
- }
194
-
195
- .e-6059377a > .holder[variant*="bg-1"][variant*="border-right"]
196
- {
197
- border-right: 1px solid var(--dh-bg-1-border);
198
- }
199
-
200
- .e-6059377a > .holder[variant*="bg-2"][variant*="border-right"]
201
- {
202
- border-right: 1px solid var(--dh-bg-2-border);
203
- }
204
-
205
- .e-6059377a > .holder[variant*="bg-3"][variant*="border-right"]
206
- {
207
- border-right: 1px solid var(--dh-bg-3-border);
208
- }
209
-
210
- .e-6059377a > .holder[variant*="bg-4"][variant*="border-right"]
211
- {
212
- border-right: 1px solid var(--dh-bg-4-border);
213
- }
214
-
215
- /* Variants - Radius */
216
- .e-6059377a > .holder[variant*="radius-s"]
217
- {
218
- border-radius: var(--dh-radius-s);
219
- }
220
-
221
- .e-6059377a > .holder[variant*="radius-m"]
222
- {
223
- border-radius: var(--dh-radius-m);
224
- }
225
-
226
- .e-6059377a > .holder[variant*="radius-l"]
227
- {
228
- border-radius: var(--dh-radius-l);
229
- }
230
-
231
- /* Variants - Size */
232
- .e-6059377a > .holder[variant*="size-s"]
233
- {
234
- width: 220px;
235
- }
236
-
237
- .e-6059377a > .holder[variant*="size-m"]
238
- {
239
- width: 250px;
240
- }
241
-
242
- .e-6059377a > .holder[variant*="size-l"]
243
- {
244
- width: 280px;
245
- }
246
-
247
- .e-6059377a > .holder[variant*="size-full"]
248
- {
249
- width: 100%;
250
- }
251
-
252
- /* Footer */
253
- .e-6059377a > .holder > footer
254
- {
255
- margin-top: auto;
256
- }
257
-
258
- /* Collapsed */
259
- .e-6059377a > .holder[collapsed="true"]
260
- {
261
- width: 64px;
262
- }
263
-
264
-
265
- /* Responsive */
266
- @media (max-width: 768px)
267
- {
268
- .e-6059377a > .holder
269
- {
270
- width: 100%;
271
- max-width: 280px;
272
- }
273
-
274
- .e-6059377a > .holder[collapsed="true"]
275
- {
276
- width: 64px;
277
- }
278
- }
@@ -1,85 +0,0 @@
1
- import elements from '#elements/load.js';
2
-
3
- elements.ItemAdd({
4
- id: 'sidebar',
5
- icon: 'menu',
6
- name: 'Sidebar',
7
- description: 'Collapsible sidebar navigation with header, grouped menu items, nested menus, and footer. Supports expanded and collapsed states.',
8
- category: 'Navigation',
9
- author: 'Divhunt',
10
- config: {
11
- variant: {
12
- type: 'array',
13
- value: ['bg-2', 'size-full'],
14
- options: ['bg-1', 'bg-2', 'bg-3', 'bg-4', 'border-full', 'border-left', 'border-right', 'radius-s', 'radius-m', 'radius-l', 'size-s', 'size-m', 'size-l', 'size-full']
15
- },
16
- groups: {
17
- type: 'array',
18
- value: []
19
- },
20
- collapsed: {
21
- type: 'boolean',
22
- value: false
23
- },
24
- onMenuClick: {
25
- type: 'function'
26
- }
27
- },
28
- render: function()
29
- {
30
- const filterGroups = (allGroups) =>
31
- {
32
- if (!this.groups || this.groups.length === 0)
33
- {
34
- return allGroups;
35
- }
36
-
37
- return allGroups.filter(group => this.groups.includes(group.id));
38
- };
39
-
40
- this.filteredGroups = filterGroups(sidebar.Fn('groups'));
41
-
42
- const update = () =>
43
- {
44
- this.filteredGroups = filterGroups(sidebar.Fn('groups'));
45
- };
46
-
47
- sidebar.ItemOn('added', update, 'sidebar');
48
- sidebar.ItemOn('removed', update, 'sidebar');
49
- sidebar.ItemOn('modified', update, 'sidebar');
50
-
51
- this.handleMenuClick = (item) =>
52
- {
53
- sidebar.Fn('active', item.id);
54
-
55
- if (this.onMenuClick)
56
- {
57
- this.onMenuClick({ item });
58
- }
59
- };
60
-
61
- return `
62
- <div class="holder" :variant="variant.join(' ')" :collapsed="collapsed">
63
- <slot name="top"></slot>
64
-
65
- <nav class="content">
66
- <slot name="content"></slot>
67
-
68
- <div dh-for="group in filteredGroups" class="group">
69
- <label dh-if="group.label">{{ group.label }}</label>
70
- <div class="items">
71
- <a dh-for="item in group.items" :href="item.href" class="item" :active="item.active" dh-click="handleMenuClick(item)">
72
- <i>{{ item.icon }}</i>
73
- <span>{{ item.label }}</span>
74
- </a>
75
- </div>
76
- </div>
77
- </nav>
78
-
79
- <footer>
80
- <slot name="bottom"></slot>
81
- </footer>
82
- </div>
83
- `;
84
- }
85
- });