divhunt 2.0.4 → 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 (125) hide show
  1. package/addons/render/assets/back/functions/import.js +44 -0
  2. package/addons/render/assets/back/load.js +2 -0
  3. package/package.json +3 -3
  4. package/addons/render/elements/front/items/self/base/menu/menu.js +0 -96
  5. package/addons/render/elements/front/items/self/base/menu/styles/base.css +0 -116
  6. package/addons/render/elements/front/items/self/base/menu/styles/sizes.css +0 -27
  7. package/addons/render/elements/front/items/self/base/menu/styles/variants.css +0 -99
  8. package/addons/render/elements/front/items/self/base/tag/tag.css +0 -199
  9. package/addons/render/elements/front/items/self/base/tag/tag.js +0 -37
  10. package/addons/render/elements/front/items/self/cards/basic/basic.js +0 -89
  11. package/addons/render/elements/front/items/self/cards/basic/styles/base.css +0 -66
  12. package/addons/render/elements/front/items/self/cards/basic/styles/sizes.css +0 -32
  13. package/addons/render/elements/front/items/self/cards/basic/styles/variants.css +0 -99
  14. package/addons/render/elements/front/items/self/cards/list/list.js +0 -108
  15. package/addons/render/elements/front/items/self/cards/list/styles/base.css +0 -96
  16. package/addons/render/elements/front/items/self/cards/list/styles/sizes.css +0 -32
  17. package/addons/render/elements/front/items/self/cards/list/styles/variants.css +0 -99
  18. package/addons/render/elements/front/items/self/cards/media/media.js +0 -116
  19. package/addons/render/elements/front/items/self/cards/media/styles/base.css +0 -126
  20. package/addons/render/elements/front/items/self/cards/media/styles/sizes.css +0 -49
  21. package/addons/render/elements/front/items/self/cards/media/styles/variants.css +0 -74
  22. package/addons/render/elements/front/items/self/cards/profile/profile.js +0 -95
  23. package/addons/render/elements/front/items/self/cards/profile/styles/base.css +0 -142
  24. package/addons/render/elements/front/items/self/cards/profile/styles/sizes.css +0 -43
  25. package/addons/render/elements/front/items/self/cards/profile/styles/variants.css +0 -131
  26. package/addons/render/elements/front/items/self/cards/stat/stat.js +0 -117
  27. package/addons/render/elements/front/items/self/cards/stat/styles/base.css +0 -97
  28. package/addons/render/elements/front/items/self/cards/stat/styles/sizes.css +0 -49
  29. package/addons/render/elements/front/items/self/cards/stat/styles/variants.css +0 -124
  30. package/addons/render/elements/front/items/self/content/html/html.css +0 -93
  31. package/addons/render/elements/front/items/self/content/html/html.js +0 -40
  32. package/addons/render/elements/front/items/self/content/markdown/markdown.css +0 -200
  33. package/addons/render/elements/front/items/self/content/markdown/markdown.js +0 -120
  34. package/addons/render/elements/front/items/self/data/comments/comments.css +0 -253
  35. package/addons/render/elements/front/items/self/data/comments/comments.js +0 -134
  36. package/addons/render/elements/front/items/self/data/files/files.css +0 -116
  37. package/addons/render/elements/front/items/self/data/files/files.js +0 -85
  38. package/addons/render/elements/front/items/self/data/folders/folders.css +0 -104
  39. package/addons/render/elements/front/items/self/data/folders/folders.js +0 -73
  40. package/addons/render/elements/front/items/self/data/inbox/inbox.css +0 -225
  41. package/addons/render/elements/front/items/self/data/inbox/inbox.js +0 -111
  42. package/addons/render/elements/front/items/self/data/logs/logs.css +0 -133
  43. package/addons/render/elements/front/items/self/data/logs/logs.js +0 -65
  44. package/addons/render/elements/front/items/self/data/plans/plans.css +0 -231
  45. package/addons/render/elements/front/items/self/data/plans/plans.js +0 -104
  46. package/addons/render/elements/front/items/self/data/properties/properties.css +0 -108
  47. package/addons/render/elements/front/items/self/data/properties/properties.js +0 -156
  48. package/addons/render/elements/front/items/self/data/table/table.css +0 -153
  49. package/addons/render/elements/front/items/self/data/table/table.js +0 -106
  50. package/addons/render/elements/front/items/self/data/timeline/timeline.css +0 -127
  51. package/addons/render/elements/front/items/self/data/timeline/timeline.js +0 -57
  52. package/addons/render/elements/front/items/self/feedback/alert/alert.css +0 -258
  53. package/addons/render/elements/front/items/self/feedback/alert/alert.js +0 -67
  54. package/addons/render/elements/front/items/self/feedback/confirm/confirm.css +0 -229
  55. package/addons/render/elements/front/items/self/feedback/confirm/confirm.js +0 -81
  56. package/addons/render/elements/front/items/self/feedback/loader/loader.css +0 -203
  57. package/addons/render/elements/front/items/self/feedback/loader/loader.js +0 -25
  58. package/addons/render/elements/front/items/self/feedback/progress/progress.css +0 -136
  59. package/addons/render/elements/front/items/self/feedback/progress/progress.js +0 -40
  60. package/addons/render/elements/front/items/self/form/button/button.js +0 -105
  61. package/addons/render/elements/front/items/self/form/button/styles/base.css +0 -176
  62. package/addons/render/elements/front/items/self/form/button/styles/sizes.css +0 -78
  63. package/addons/render/elements/front/items/self/form/button/styles/variants.css +0 -421
  64. package/addons/render/elements/front/items/self/form/checkbox/checkbox.js +0 -57
  65. package/addons/render/elements/front/items/self/form/checkbox/styles/base.css +0 -52
  66. package/addons/render/elements/front/items/self/form/checkbox/styles/sizes.css +0 -39
  67. package/addons/render/elements/front/items/self/form/checkbox/styles/variants.css +0 -121
  68. package/addons/render/elements/front/items/self/form/field/field.css +0 -96
  69. package/addons/render/elements/front/items/self/form/field/field.js +0 -39
  70. package/addons/render/elements/front/items/self/form/input/input.css +0 -111
  71. package/addons/render/elements/front/items/self/form/input/input.js +0 -78
  72. package/addons/render/elements/front/items/self/form/input/styles/base.css +0 -26
  73. package/addons/render/elements/front/items/self/form/input/styles/sizes.css +0 -15
  74. package/addons/render/elements/front/items/self/form/input/styles/variants.css +0 -98
  75. package/addons/render/elements/front/items/self/form/radio/radio.js +0 -57
  76. package/addons/render/elements/front/items/self/form/radio/styles/base.css +0 -48
  77. package/addons/render/elements/front/items/self/form/radio/styles/sizes.css +0 -36
  78. package/addons/render/elements/front/items/self/form/radio/styles/variants.css +0 -121
  79. package/addons/render/elements/front/items/self/form/rating/rating.css +0 -95
  80. package/addons/render/elements/front/items/self/form/rating/rating.js +0 -88
  81. package/addons/render/elements/front/items/self/form/section/section.css +0 -107
  82. package/addons/render/elements/front/items/self/form/section/section.js +0 -39
  83. package/addons/render/elements/front/items/self/form/slider/slider.css +0 -244
  84. package/addons/render/elements/front/items/self/form/slider/slider.js +0 -69
  85. package/addons/render/elements/front/items/self/form/textarea/textarea.css +0 -117
  86. package/addons/render/elements/front/items/self/form/textarea/textarea.js +0 -69
  87. package/addons/render/elements/front/items/self/layout/empty/empty.css +0 -154
  88. package/addons/render/elements/front/items/self/layout/empty/empty.js +0 -43
  89. package/addons/render/elements/front/items/self/layout/heading/heading.css +0 -117
  90. package/addons/render/elements/front/items/self/layout/heading/heading.js +0 -47
  91. package/addons/render/elements/front/items/self/layout/hero/hero.js +0 -88
  92. package/addons/render/elements/front/items/self/layout/hero/styles/base.css +0 -81
  93. package/addons/render/elements/front/items/self/layout/hero/styles/sizes.css +0 -24
  94. package/addons/render/elements/front/items/self/layout/hero/styles/variants.css +0 -98
  95. package/addons/render/elements/front/items/self/navigation/breadcrumb/addon/_class/addon.js +0 -9
  96. package/addons/render/elements/front/items/self/navigation/breadcrumb/addon/functions/get.js +0 -22
  97. package/addons/render/elements/front/items/self/navigation/breadcrumb/breadcrumb.css +0 -13
  98. package/addons/render/elements/front/items/self/navigation/breadcrumb/breadcrumb.js +0 -51
  99. package/addons/render/elements/front/items/self/navigation/footer/addon/_class/addon.js +0 -11
  100. package/addons/render/elements/front/items/self/navigation/footer/addon/functions/columns.js +0 -11
  101. package/addons/render/elements/front/items/self/navigation/footer/addon/functions/get.js +0 -34
  102. package/addons/render/elements/front/items/self/navigation/footer/footer.css +0 -283
  103. package/addons/render/elements/front/items/self/navigation/footer/footer.js +0 -139
  104. package/addons/render/elements/front/items/self/navigation/navbar/addon/_class/addon.js +0 -13
  105. package/addons/render/elements/front/items/self/navigation/navbar/addon/functions/active.js +0 -7
  106. package/addons/render/elements/front/items/self/navigation/navbar/addon/functions/get.js +0 -31
  107. package/addons/render/elements/front/items/self/navigation/navbar/navbar.css +0 -140
  108. package/addons/render/elements/front/items/self/navigation/navbar/navbar.js +0 -118
  109. package/addons/render/elements/front/items/self/navigation/pagination/pagination.css +0 -160
  110. package/addons/render/elements/front/items/self/navigation/pagination/pagination.js +0 -131
  111. package/addons/render/elements/front/items/self/navigation/sidebar/addon/_class/addon.js +0 -12
  112. package/addons/render/elements/front/items/self/navigation/sidebar/addon/functions/active.js +0 -7
  113. package/addons/render/elements/front/items/self/navigation/sidebar/addon/functions/get.js +0 -35
  114. package/addons/render/elements/front/items/self/navigation/sidebar/addon/functions/groups.js +0 -10
  115. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.css +0 -278
  116. package/addons/render/elements/front/items/self/navigation/sidebar/sidebar.js +0 -85
  117. package/addons/render/elements/front/items/self/navigation/stepper/stepper.css +0 -202
  118. package/addons/render/elements/front/items/self/navigation/stepper/stepper.js +0 -82
  119. package/addons/render/elements/front/items/self/navigation/tabs/addon.js +0 -32
  120. package/addons/render/elements/front/items/self/navigation/tabs/tabs.css +0 -239
  121. package/addons/render/elements/front/items/self/navigation/tabs/tabs.js +0 -76
  122. package/addons/render/elements/front/items/self/preview/html/html.css +0 -377
  123. package/addons/render/elements/front/items/self/preview/html/html.js +0 -107
  124. package/lib/LICENSE.txt +0 -40
  125. /package/lib/{load.back.js → load.js} +0 -0
@@ -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
- });
@@ -1,153 +0,0 @@
1
- /* Base */
2
- .e-696e3b78 > .holder
3
- {
4
- display: flex;
5
- flex-direction: column;
6
- background: var(--dh-bg-1);
7
- border-radius: var(--dh-radius-l);
8
- overflow: hidden;
9
- }
10
-
11
- /* Header */
12
- .e-696e3b78 > .holder > .header
13
- {
14
- display: flex;
15
- background: var(--dh-bg-2);
16
- border-bottom: 1px solid var(--dh-bg-2-border);
17
- }
18
-
19
- .e-696e3b78 > .holder > .header > .cell
20
- {
21
- display: flex;
22
- align-items: center;
23
- gap: var(--dh-spacing-x);
24
- padding: var(--dh-spacing-m);
25
- flex: 1;
26
- min-width: 0;
27
- font-weight: 600;
28
- font-size: var(--dh-size-s);
29
- color: var(--dh-text-2);
30
- text-transform: uppercase;
31
- letter-spacing: 0.5px;
32
- user-select: none;
33
- }
34
-
35
- .e-696e3b78 > .holder > .header > .cell > .sort-icon
36
- {
37
- font-size: 18px;
38
- opacity: 0.5;
39
- cursor: pointer;
40
- transition: opacity 0.2s ease;
41
- }
42
-
43
- .e-696e3b78 > .holder > .header > .cell:hover > .sort-icon
44
- {
45
- opacity: 1;
46
- }
47
-
48
- /* Body */
49
- .e-696e3b78 > .holder > .body
50
- {
51
- display: flex;
52
- flex-direction: column;
53
- }
54
-
55
- .e-696e3b78 > .holder > .body > .row
56
- {
57
- display: flex;
58
- border-bottom: 1px solid var(--dh-bg-2-border);
59
- transition: background 0.2s ease;
60
- }
61
-
62
- .e-696e3b78 > .holder > .body > .row:last-child
63
- {
64
- border-bottom: none;
65
- }
66
-
67
- .e-696e3b78 > .holder > .body > .row > .cell
68
- {
69
- display: flex;
70
- align-items: center;
71
- padding: var(--dh-spacing-m);
72
- flex: 1;
73
- min-width: 0;
74
- font-size: var(--dh-size-m);
75
- color: var(--dh-text-1);
76
- white-space: nowrap;
77
- overflow: hidden;
78
- text-overflow: ellipsis;
79
- }
80
-
81
- /* Variants - Size */
82
- .e-696e3b78 > .holder[variant*="size-s"] > .header > .cell,
83
- .e-696e3b78 > .holder[variant*="size-s"] > .body > .row > .cell
84
- {
85
- padding: var(--dh-spacing-s) var(--dh-spacing-m);
86
- font-size: var(--dh-size-s);
87
- }
88
-
89
- .e-696e3b78 > .holder[variant*="size-l"] > .header > .cell,
90
- .e-696e3b78 > .holder[variant*="size-l"] > .body > .row > .cell
91
- {
92
- padding: var(--dh-spacing-l) var(--dh-spacing-m);
93
- }
94
-
95
- /* Variants - Border */
96
- .e-696e3b78 > .holder[variant*="border"]
97
- {
98
- border: 1px solid var(--dh-bg-2-border);
99
- }
100
-
101
- /* Variants - Background */
102
- .e-696e3b78 > .holder[variant*="bg-1"] { background: var(--dh-bg-1); }
103
- .e-696e3b78 > .holder[variant*="bg-2"] { background: var(--dh-bg-2); }
104
- .e-696e3b78 > .holder[variant*="bg-3"] { background: var(--dh-bg-3); }
105
-
106
- .e-696e3b78 > .holder[variant*="bg-2"] > .header { background: var(--dh-bg-3); }
107
- .e-696e3b78 > .holder[variant*="bg-3"] > .header { background: var(--dh-bg-4); }
108
-
109
- /* Variants - Striped */
110
- .e-696e3b78 > .holder[variant*="striped"] > .body > .row:nth-child(even)
111
- {
112
- background: var(--dh-bg-2);
113
- }
114
-
115
- /* Variants - Hover */
116
- .e-696e3b78 > .holder[variant*="hover"] > .body > .row
117
- {
118
- cursor: pointer;
119
- }
120
-
121
- .e-696e3b78 > .holder[variant*="hover"] > .body > .row:hover
122
- {
123
- background: var(--dh-bg-2);
124
- }
125
-
126
- .e-696e3b78 > .holder[variant*="striped"][variant*="hover"] > .body > .row:hover
127
- {
128
- background: var(--dh-bg-3);
129
- }
130
-
131
- /* Variants - Compact */
132
- .e-696e3b78 > .holder[variant*="compact"] > .header > .cell,
133
- .e-696e3b78 > .holder[variant*="compact"] > .body > .row > .cell
134
- {
135
- padding: var(--dh-spacing-s) var(--dh-spacing-m);
136
- }
137
-
138
- .e-696e3b78 > .holder[variant*="compact"] > .body > .row > .cell
139
- {
140
- font-size: var(--dh-size-s);
141
- }
142
-
143
- /* Empty State */
144
- .e-696e3b78 > .holder > .body:empty::after
145
- {
146
- content: 'No data available';
147
- display: flex;
148
- align-items: center;
149
- justify-content: center;
150
- padding: var(--dh-spacing-l);
151
- color: var(--dh-text-2);
152
- font-size: var(--dh-size-m);
153
- }
@@ -1,106 +0,0 @@
1
- import elements from '#elements/load.js';
2
-
3
- elements.ItemAdd({
4
- id: 'table',
5
- icon: 'table_chart',
6
- name: 'Table',
7
- description: 'Data table with columns, rows, sorting, and row actions. Supports dynamic column definitions and custom cell rendering.',
8
- category: 'Data',
9
- author: 'Divhunt',
10
- config: {
11
- columns: {
12
- type: 'array',
13
- value: [
14
- { id: 'name', label: 'Name' },
15
- { id: 'email', label: 'Email' },
16
- { id: 'role', label: 'Role' },
17
- { id: 'status', label: 'Status' }
18
- ]
19
- },
20
- rows: {
21
- type: 'array',
22
- value: [
23
- { name: 'John Doe', email: 'john@example.com', role: 'Admin', status: 'Active' },
24
- { name: 'Jane Smith', email: 'jane@example.com', role: 'Editor', status: 'Active' },
25
- { name: 'Bob Wilson', email: 'bob@example.com', role: 'Viewer', status: 'Inactive' }
26
- ]
27
- },
28
- variant: {
29
- type: 'array',
30
- value: ['border', 'hover', 'size-m'],
31
- options: ['border', 'bg-1', 'bg-2', 'bg-3', 'striped', 'compact', 'hover', 'size-s', 'size-m', 'size-l']
32
- },
33
- sortable: {
34
- type: 'boolean',
35
- value: false
36
- },
37
- onRowClick: {
38
- type: 'function'
39
- },
40
- onSort: {
41
- type: 'function'
42
- }
43
- },
44
- render: function()
45
- {
46
- this.sortColumn = null;
47
- this.sortDirection = 'asc';
48
-
49
- this.handleSort = (column) =>
50
- {
51
- if (!this.sortable) return;
52
-
53
- if (this.sortColumn === column.id)
54
- {
55
- this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';
56
- }
57
- else
58
- {
59
- this.sortColumn = column.id;
60
- this.sortDirection = 'asc';
61
- }
62
-
63
- if (this.onSort)
64
- {
65
- this.onSort({ column: column.id, direction: this.sortDirection });
66
- }
67
- };
68
-
69
- this.handleRowClick = (row, index) =>
70
- {
71
- if (this.onRowClick)
72
- {
73
- this.onRowClick({ row, index });
74
- }
75
- };
76
-
77
- this.getSortIcon = (columnId) =>
78
- {
79
- if (this.sortColumn !== columnId) return 'unfold_more';
80
- return this.sortDirection === 'asc' ? 'expand_less' : 'expand_more';
81
- };
82
-
83
- this.getCellValue = (row, columnId) =>
84
- {
85
- return row[columnId] !== undefined ? row[columnId] : '';
86
- };
87
-
88
- return `
89
- <div class="holder" :variant="variant.join(' ')">
90
- <div class="header">
91
- <div dh-for="column in columns" class="cell" :style="column.width ? 'width:' + column.width : ''" dh-click="handleSort(column)">
92
- <span class="label">{{ column.label }}</span>
93
- <i dh-if="sortable" class="icon sort-icon">{{ getSortIcon(column.id) }}</i>
94
- </div>
95
- </div>
96
- <div class="body">
97
- <div dh-for="row, index in rows" class="row" dh-click="handleRowClick(row, index)">
98
- <div dh-for="column in columns" class="cell" :style="column.width ? 'width:' + column.width : ''">
99
- {{ getCellValue(row, column.id) }}
100
- </div>
101
- </div>
102
- </div>
103
- </div>
104
- `;
105
- }
106
- });
@@ -1,127 +0,0 @@
1
- /* Base */
2
- .e-338c43a9 > .holder
3
- {
4
- display: flex;
5
- flex-direction: column;
6
- }
7
-
8
- .e-338c43a9 > .holder > .item
9
- {
10
- display: flex;
11
- gap: var(--dh-spacing-l);
12
- position: relative;
13
- padding-bottom: calc(var(--dh-spacing-l) * 2);
14
- }
15
-
16
- .e-338c43a9 > .holder > .item:last-child
17
- {
18
- padding-bottom: 0;
19
- }
20
-
21
- .e-338c43a9 > .holder > .item::before
22
- {
23
- content: '';
24
- position: absolute;
25
- left: 20px;
26
- top: 44px;
27
- bottom: 0;
28
- width: 2px;
29
- background: var(--dh-bg-4);
30
- }
31
-
32
- .e-338c43a9 > .holder > .item:last-child::before
33
- {
34
- display: none;
35
- }
36
-
37
- .e-338c43a9 > .holder > .item > .marker
38
- {
39
- flex-shrink: 0;
40
- width: 40px;
41
- height: 40px;
42
- border-radius: 50%;
43
- background: var(--dh-brand);
44
- display: flex;
45
- align-items: center;
46
- justify-content: center;
47
- position: relative;
48
- z-index: 1;
49
- }
50
-
51
- .e-338c43a9 > .holder > .item > .marker > .icon
52
- {
53
- font-size: 20px;
54
- color: white;
55
- }
56
-
57
- .e-338c43a9 > .holder > .item > .content
58
- {
59
- flex: 1;
60
- padding-top: var(--dh-spacing-x);
61
- }
62
-
63
- .e-338c43a9 > .holder > .item > .content > .title
64
- {
65
- font-size: var(--dh-size-m);
66
- font-weight: 700;
67
- color: var(--dh-text-1);
68
- margin: 0 0 var(--dh-spacing-x) 0;
69
- }
70
-
71
- .e-338c43a9 > .holder > .item > .content > .description
72
- {
73
- font-size: var(--dh-size-s);
74
- color: var(--dh-text-2);
75
- line-height: 1.6;
76
- margin: 0 0 var(--dh-spacing-x) 0;
77
- }
78
-
79
- .e-338c43a9 > .holder > .item > .content > .date
80
- {
81
- font-size: 11px;
82
- color: var(--dh-text-2);
83
- font-weight: 600;
84
- }
85
-
86
- /* Variants - Colors */
87
- .e-338c43a9 > .holder[variant*="brand"] > .item > .marker
88
- {
89
- background: var(--dh-brand);
90
- }
91
-
92
- .e-338c43a9 > .holder[variant*="blue"] > .item > .marker
93
- {
94
- background: var(--dh-blue);
95
- }
96
-
97
- .e-338c43a9 > .holder[variant*="red"] > .item > .marker
98
- {
99
- background: var(--dh-red);
100
- }
101
-
102
- .e-338c43a9 > .holder[variant*="orange"] > .item > .marker
103
- {
104
- background: var(--dh-orange);
105
- }
106
-
107
- .e-338c43a9 > .holder[variant*="green"] > .item > .marker
108
- {
109
- background: var(--dh-green);
110
- }
111
-
112
- /* Variants - Alternate */
113
- .e-338c43a9 > .holder[variant*="alternate"] > .item:nth-child(even)
114
- {
115
- flex-direction: row-reverse;
116
- }
117
-
118
- .e-338c43a9 > .holder[variant*="alternate"] > .item:nth-child(even) > .content
119
- {
120
- text-align: right;
121
- }
122
-
123
- .e-338c43a9 > .holder[variant*="alternate"] > .item:nth-child(even)::before
124
- {
125
- left: auto;
126
- right: 20px;
127
- }
@@ -1,57 +0,0 @@
1
- import elements from '#elements/load.js';
2
-
3
- elements.ItemAdd({
4
- id: 'timeline',
5
- icon: 'timeline',
6
- name: 'Timeline',
7
- description: 'Vertical timeline for displaying events, history, or progress.',
8
- category: 'Data',
9
- author: 'Divhunt',
10
- config: {
11
- items: {
12
- type: 'array',
13
- value: [
14
- {
15
- icon: 'check_circle',
16
- title: 'Project Started',
17
- description: 'Initial project setup and planning completed',
18
- date: 'Jan 15, 2024'
19
- },
20
- {
21
- icon: 'code',
22
- title: 'Development Phase',
23
- description: 'Core features implemented and tested',
24
- date: 'Feb 20, 2024'
25
- },
26
- {
27
- icon: 'rocket_launch',
28
- title: 'Launch',
29
- description: 'Product successfully launched to production',
30
- date: 'Mar 10, 2024'
31
- }
32
- ]
33
- },
34
- variant: {
35
- type: 'array',
36
- value: ['brand'],
37
- options: ['brand', 'blue', 'red', 'orange', 'green', 'alternate']
38
- }
39
- },
40
- render: function()
41
- {
42
- return `
43
- <div class="holder" :variant="variant.join(' ')">
44
- <div dh-for="item in items" class="item">
45
- <div class="marker">
46
- <i class="icon">{{ item.icon }}</i>
47
- </div>
48
- <div class="content">
49
- <h4 class="title">{{ item.title }}</h4>
50
- <p dh-if="item.description" class="description">{{ item.description }}</p>
51
- <span dh-if="item.date" class="date">{{ item.date }}</span>
52
- </div>
53
- </div>
54
- </div>
55
- `;
56
- }
57
- });