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,231 +0,0 @@
1
- /* Base */
2
- .e-693ada14 > .holder
3
- {
4
- display: grid;
5
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
6
- gap: var(--dh-spacing-l);
7
- }
8
-
9
- .e-693ada14 > .holder > .plan
10
- {
11
- display: flex;
12
- flex-direction: column;
13
- gap: var(--dh-spacing-l);
14
- padding: var(--dh-spacing-l);
15
- background: var(--dh-bg-2);
16
- border-radius: var(--dh-radius-l);
17
- position: relative;
18
- transition: all 0.2s ease;
19
- }
20
-
21
- .e-693ada14 > .holder > .plan:hover
22
- {
23
- transform: translateY(-4px);
24
- }
25
-
26
- .e-693ada14 > .holder > .plan > .badge
27
- {
28
- position: absolute;
29
- top: var(--dh-spacing-m);
30
- right: var(--dh-spacing-m);
31
- padding: var(--dh-spacing-x) var(--dh-spacing-s);
32
- background: var(--dh-brand);
33
- color: white;
34
- font-size: 11px;
35
- font-weight: 600;
36
- border-radius: var(--dh-radius-s);
37
- text-transform: uppercase;
38
- }
39
-
40
- .e-693ada14 > .holder > .plan > .header
41
- {
42
- display: flex;
43
- flex-direction: column;
44
- gap: var(--dh-spacing-x);
45
- }
46
-
47
- .e-693ada14 > .holder > .plan > .header > .name
48
- {
49
- font-size: var(--dh-size-l);
50
- font-weight: 600;
51
- color: var(--dh-text-1);
52
- margin: 0;
53
- }
54
-
55
- .e-693ada14 > .holder > .plan > .header > .description
56
- {
57
- font-size: var(--dh-size-s);
58
- color: var(--dh-text-2);
59
- }
60
-
61
- .e-693ada14 > .holder > .plan > .pricing
62
- {
63
- display: flex;
64
- flex-direction: column;
65
- gap: var(--dh-spacing-x);
66
- }
67
-
68
- .e-693ada14 > .holder > .plan > .pricing > .price-wrapper
69
- {
70
- display: flex;
71
- align-items: baseline;
72
- gap: var(--dh-spacing-s);
73
- }
74
-
75
- .e-693ada14 > .holder > .plan > .pricing > .price-wrapper > .old-price
76
- {
77
- font-size: 24px;
78
- font-weight: 600;
79
- color: var(--dh-text-2);
80
- text-decoration: line-through;
81
- opacity: 0.6;
82
- }
83
-
84
- .e-693ada14 > .holder > .plan > .pricing > .price-wrapper > .price
85
- {
86
- font-size: 48px;
87
- font-weight: 700;
88
- color: var(--dh-text-1);
89
- }
90
-
91
- .e-693ada14 > .holder > .plan > .pricing > .price-wrapper > .period
92
- {
93
- font-size: var(--dh-size-m);
94
- color: var(--dh-text-2);
95
- }
96
-
97
- .e-693ada14 > .holder > .plan > .pricing > .discount
98
- {
99
- font-size: var(--dh-size-s);
100
- font-weight: 600;
101
- color: var(--dh-green);
102
- padding: var(--dh-spacing-x) var(--dh-spacing-s);
103
- background: var(--dh-green);
104
- background: rgba(76, 175, 80, 0.15);
105
- border-radius: var(--dh-radius-s);
106
- width: fit-content;
107
- }
108
-
109
- .e-693ada14 > .holder > .plan > .features
110
- {
111
- display: flex;
112
- flex-direction: column;
113
- gap: var(--dh-spacing-m);
114
- flex: 1;
115
- }
116
-
117
- .e-693ada14 > .holder > .plan > .features > .feature
118
- {
119
- display: flex;
120
- align-items: center;
121
- gap: var(--dh-spacing-s);
122
- }
123
-
124
- .e-693ada14 > .holder > .plan > .features > .feature > .icon
125
- {
126
- font-size: 20px;
127
- flex-shrink: 0;
128
- }
129
-
130
- .e-693ada14 > .holder > .plan > .features > .feature[included="true"] > .icon
131
- {
132
- color: var(--dh-green);
133
- }
134
-
135
- .e-693ada14 > .holder > .plan > .features > .feature[included="false"] > .icon
136
- {
137
- color: var(--dh-text-2);
138
- opacity: 0.5;
139
- }
140
-
141
- .e-693ada14 > .holder > .plan > .features > .feature > .text
142
- {
143
- color: var(--dh-text-1);
144
- font-size: var(--dh-size-m);
145
- }
146
-
147
- .e-693ada14 > .holder > .plan > .features > .feature[included="false"] > .text
148
- {
149
- color: var(--dh-text-2);
150
- opacity: 0.7;
151
- }
152
-
153
- .e-693ada14 > .holder > .plan[highlighted="true"]
154
- {
155
- border: 2px solid var(--dh-brand);
156
- box-shadow: 0 0 0 4px var(--dh-brand-opacity);
157
- }
158
-
159
- /* Variants - Border */
160
- .e-693ada14 > .holder[variant*="border"] > .plan
161
- {
162
- border: 1px solid var(--dh-bg-2-border);
163
- }
164
-
165
- /* Variants - Background */
166
- .e-693ada14 > .holder[variant*="bg-1"] > .plan
167
- {
168
- background: var(--dh-bg-1);
169
- border: 1px solid var(--dh-bg-1-border);
170
- }
171
-
172
- .e-693ada14 > .holder[variant*="bg-2"] > .plan
173
- {
174
- background: var(--dh-bg-2);
175
- border: 1px solid var(--dh-bg-2-border);
176
- }
177
-
178
- .e-693ada14 > .holder[variant*="bg-3"] > .plan
179
- {
180
- background: var(--dh-bg-3);
181
- border: 1px solid var(--dh-bg-3-border);
182
- }
183
-
184
- /* Variants - Sizes */
185
- .e-693ada14 > .holder[variant*="size-s"] > .plan
186
- {
187
- padding: var(--dh-spacing-m);
188
- gap: var(--dh-spacing-m);
189
- }
190
-
191
- .e-693ada14 > .holder[variant*="size-s"] > .plan > .pricing > .price-wrapper > .old-price
192
- {
193
- font-size: 18px;
194
- }
195
-
196
- .e-693ada14 > .holder[variant*="size-s"] > .plan > .pricing > .price-wrapper > .price
197
- {
198
- font-size: 36px;
199
- }
200
-
201
- .e-693ada14 > .holder[variant*="size-m"] > .plan
202
- {
203
- padding: var(--dh-spacing-l);
204
- gap: var(--dh-spacing-l);
205
- }
206
-
207
- .e-693ada14 > .holder[variant*="size-m"] > .plan > .pricing > .price-wrapper > .old-price
208
- {
209
- font-size: 24px;
210
- }
211
-
212
- .e-693ada14 > .holder[variant*="size-m"] > .plan > .pricing > .price-wrapper > .price
213
- {
214
- font-size: 48px;
215
- }
216
-
217
- .e-693ada14 > .holder[variant*="size-l"] > .plan
218
- {
219
- padding: calc(var(--dh-spacing-l) * 1.5);
220
- gap: calc(var(--dh-spacing-l) * 1.5);
221
- }
222
-
223
- .e-693ada14 > .holder[variant*="size-l"] > .plan > .pricing > .price-wrapper > .old-price
224
- {
225
- font-size: 32px;
226
- }
227
-
228
- .e-693ada14 > .holder[variant*="size-l"] > .plan > .pricing > .price-wrapper > .price
229
- {
230
- font-size: 64px;
231
- }
@@ -1,104 +0,0 @@
1
- import elements from '#elements/load.js';
2
-
3
- elements.ItemAdd({
4
- id: 'plans',
5
- icon: 'credit_card',
6
- name: 'Plans',
7
- description: 'Pricing plan cards with features and call-to-action.',
8
- category: 'Data',
9
- author: 'Divhunt',
10
- config: {
11
- plans: {
12
- type: 'array',
13
- value: [
14
- {
15
- name: 'Starter',
16
- price: '$9',
17
- oldPrice: '',
18
- period: 'month',
19
- description: 'Perfect for individuals',
20
- discount: '',
21
- features: [
22
- { text: '5 Projects', included: true },
23
- { text: '10GB Storage', included: true },
24
- { text: 'Basic Support', included: true },
25
- { text: 'Advanced Analytics', included: false },
26
- { text: 'Custom Domain', included: false }
27
- ],
28
- button: 'Get Started',
29
- highlighted: false
30
- },
31
- {
32
- name: 'Pro',
33
- price: '$29',
34
- oldPrice: '$36',
35
- period: 'month',
36
- description: 'Best for professionals',
37
- discount: 'Save 20%',
38
- features: [
39
- { text: 'Unlimited Projects', included: true },
40
- { text: '100GB Storage', included: true },
41
- { text: 'Priority Support', included: true },
42
- { text: 'Advanced Analytics', included: true },
43
- { text: 'Custom Domain', included: false }
44
- ],
45
- button: 'Get Started',
46
- highlighted: true
47
- },
48
- {
49
- name: 'Enterprise',
50
- price: '$99',
51
- oldPrice: '',
52
- period: 'month',
53
- description: 'For large teams',
54
- discount: '',
55
- features: [
56
- { text: 'Unlimited Projects', included: true },
57
- { text: 'Unlimited Storage', included: true },
58
- { text: '24/7 Support', included: true },
59
- { text: 'Advanced Analytics', included: true },
60
- { text: 'Custom Domain', included: true }
61
- ],
62
- button: 'Contact Sales',
63
- highlighted: false
64
- }
65
- ]
66
- },
67
- variant: {
68
- type: 'array',
69
- value: ['border'],
70
- options: ['border', 'bg-1', 'bg-2', 'bg-3', 'size-s', 'size-m', 'size-l']
71
- }
72
- },
73
- render: function()
74
- {
75
- return `
76
- <div class="holder" :variant="variant.join(' ')">
77
- <div dh-for="plan in plans" class="plan" :highlighted="plan.highlighted">
78
- <div dh-if="plan.highlighted" class="badge">Popular</div>
79
- <div class="header">
80
- <h3 class="name">{{ plan.name }}</h3>
81
- <div class="description">{{ plan.description }}</div>
82
- </div>
83
- <div class="pricing">
84
- <div class="price-wrapper">
85
- <span dh-if="plan.oldPrice" class="old-price">{{ plan.oldPrice }}</span>
86
- <span class="price">{{ plan.price }}</span>
87
- <span class="period">/{{ plan.period }}</span>
88
- </div>
89
- <div dh-if="plan.discount" class="discount">{{ plan.discount }}</div>
90
- </div>
91
- <div class="features">
92
- <div dh-for="feature in plan.features" class="feature" :included="feature.included">
93
- <i class="icon">{{ feature.included ? 'check_circle' : 'cancel' }}</i>
94
- <span class="text">{{ feature.text }}</span>
95
- </div>
96
- </div>
97
- <e-button :variant="plan.highlighted ? ['brand', 'block'] : ['outline', 'block']">
98
- {{ plan.button }}
99
- </e-button>
100
- </div>
101
- </div>
102
- `;
103
- }
104
- });
@@ -1,108 +0,0 @@
1
- .e-12113837 > .holder
2
- {
3
- display: flex;
4
- flex-direction: column;
5
- background: var(--dh-bg-1);
6
- border-radius: var(--dh-radius-l);
7
- overflow: hidden;
8
- font-size: var(--dh-size-s);
9
- }
10
-
11
- .e-12113837 > .holder > .item
12
- {
13
- display: flex;
14
- flex-direction: column;
15
- gap: 2px;
16
- padding: var(--dh-spacing-s) var(--dh-spacing-m);
17
- border-bottom: 1px solid var(--dh-bg-2-border);
18
- }
19
-
20
- .e-12113837 > .holder > .item:last-child
21
- {
22
- border-bottom: none;
23
- }
24
-
25
- .e-12113837 > .holder > .item > .head
26
- {
27
- display: flex;
28
- align-items: center;
29
- gap: var(--dh-spacing-s);
30
- }
31
-
32
- .e-12113837 > .holder > .item > .head > .name
33
- {
34
- font-weight: 600;
35
- color: var(--dh-brand);
36
- }
37
-
38
- .e-12113837 > .holder > .item > .head > .type
39
- {
40
- color: var(--dh-blue);
41
- }
42
-
43
- .e-12113837 > .holder > .item > .head > .required
44
- {
45
- color: var(--dh-red);
46
- }
47
-
48
- .e-12113837 > .holder > .item > .head > .default
49
- {
50
- color: var(--dh-text-2);
51
- margin-left: auto;
52
- }
53
-
54
- .e-12113837 > .holder > .item > .description
55
- {
56
- color: var(--dh-text-2);
57
- line-height: 1.4;
58
- }
59
-
60
- .e-12113837 > .holder > .item > .options
61
- {
62
- display: flex;
63
- flex-wrap: wrap;
64
- gap: var(--dh-spacing-x);
65
- font-size: 10px;
66
- }
67
-
68
- .e-12113837 > .holder > .item > .options > .option
69
- {
70
- color: var(--dh-text-2);
71
- background: var(--dh-bg-3);
72
- padding: 2px 6px;
73
- border-radius: var(--dh-radius-s);
74
- cursor: pointer;
75
- transition: background 0.15s ease, color 0.15s ease;
76
- }
77
-
78
- .e-12113837 > .holder > .item > .options > .option:hover
79
- {
80
- background: var(--dh-bg-4);
81
- }
82
-
83
- .e-12113837 > .holder > .item > .options > .option[active="true"]
84
- {
85
- background: var(--dh-brand);
86
- color: white;
87
- }
88
-
89
- /* Variants */
90
- .e-12113837 > .holder[variant*="border"]
91
- {
92
- border: 1px solid var(--dh-bg-2-border);
93
- }
94
-
95
- .e-12113837 > .holder[variant*="bg-2"]
96
- {
97
- background: var(--dh-bg-2);
98
- }
99
-
100
- .e-12113837 > .holder[variant*="bg-3"]
101
- {
102
- background: var(--dh-bg-3);
103
- }
104
-
105
- .e-12113837 > .holder[variant*="size-s"] > .item
106
- {
107
- padding: var(--dh-spacing-x) var(--dh-spacing-s);
108
- }
@@ -1,156 +0,0 @@
1
- import elements from '#elements/load.js';
2
-
3
- elements.ItemAdd({
4
- id: 'properties',
5
- icon: 'list_alt',
6
- name: 'Properties',
7
- description: 'Displays a list of properties with name, type, default value, and options.',
8
- category: 'Data',
9
- author: 'Divhunt',
10
- config: {
11
- config: {
12
- type: 'object',
13
- value: {}
14
- },
15
- variant: {
16
- type: 'array',
17
- value: ['bg-1', 'border'],
18
- options: ['bg-1', 'bg-2', 'bg-3', 'border', 'size-s', 'size-m']
19
- },
20
- _change: {
21
- type: 'function'
22
- }
23
- },
24
- render: function()
25
- {
26
- if(!this.initialized)
27
- {
28
- this.initialized = true;
29
- this.config = divhunt.DataConfig(this.config);
30
- this.state = divhunt.DataDefine({}, this.config);
31
- }
32
-
33
- this.items = Object.entries(this.config).map(([name, definition]) =>
34
- {
35
- return {name, ...definition};
36
- });
37
-
38
- this.isMultiple = (item) =>
39
- {
40
- return Array.isArray(item.value);
41
- };
42
-
43
- this.formatValue = (value) =>
44
- {
45
- if(value === undefined || value === null)
46
- {
47
- return '—';
48
- }
49
-
50
- if(typeof value === 'boolean')
51
- {
52
- return value ? 'true' : 'false';
53
- }
54
-
55
- if(Array.isArray(value))
56
- {
57
- return JSON.stringify(value);
58
- }
59
-
60
- if(typeof value === 'object')
61
- {
62
- return JSON.stringify(value);
63
- }
64
-
65
- return String(value);
66
- };
67
-
68
- this.isActive = (item, option) =>
69
- {
70
- const value = this.state[item.name];
71
-
72
- if(Array.isArray(value))
73
- {
74
- return value.includes(option);
75
- }
76
-
77
- return value === option;
78
- };
79
-
80
- this.isEditable = (item) =>
81
- {
82
- return (item.type === 'string' || item.type === 'number') && !item.options;
83
- };
84
-
85
- this.getValue = (item) =>
86
- {
87
- const value = this.state[item.name];
88
- return value !== undefined && value !== null ? String(value) : '';
89
- };
90
-
91
- this.onInput = (item, e) =>
92
- {
93
- let value = e.target.innerText;
94
-
95
- if(item.type === 'number')
96
- {
97
- value = value === '' ? undefined : Number(value);
98
- }
99
-
100
- this.config[item.name].value = value || undefined;
101
- this.state = divhunt.DataDefine({}, this.config);
102
-
103
- if(this._change)
104
- {
105
- this._change({ ...this.state });
106
- }
107
- };
108
-
109
- this.toggle = (item, option) =>
110
- {
111
- if(this.isMultiple(item))
112
- {
113
- const current = this.state[item.name] || [];
114
-
115
- if(current.includes(option))
116
- {
117
- this.config[item.name].value = current.filter(v => v !== option);
118
- }
119
- else
120
- {
121
- this.config[item.name].value = [...current, option];
122
- }
123
- }
124
- else
125
- {
126
- const current = this.state[item.name];
127
- this.config[item.name].value = current === option ? undefined : option;
128
- }
129
-
130
- this.state = divhunt.DataDefine({}, this.config);
131
-
132
- if(this._change)
133
- {
134
- this._change({ ...this.state });
135
- }
136
- };
137
-
138
- return `
139
- <div class="holder" :variant="variant.join(' ')">
140
- <div dh-for="item in items" class="item">
141
- <div class="head">
142
- <span class="name">{{ item.name }}</span>
143
- <span class="type">{{ item.type }}</span>
144
- <span dh-if="item.required" class="required">required</span>
145
- <span dh-if="!isEditable(item) && item.value !== undefined" class="default">{{ formatValue(item.value) }}</span>
146
- <span dh-if="isEditable(item)" class="default editable" contenteditable="true" dh-change="(e) => onInput(item, e)">{{ getValue(item) }}</span>
147
- </div>
148
- <div dh-if="item.description" class="description">{{ item.description }}</div>
149
- <div dh-if="item.options && item.options.length" class="options">
150
- <span dh-for="option in item.options" class="option" :active="isActive(item, option)" dh-click="() => toggle(item, option)">{{ option }}</span>
151
- </div>
152
- </div>
153
- </div>
154
- `;
155
- }
156
- });