funda-ui 1.0.272

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 (246) hide show
  1. package/BackToTop/index.css +34 -0
  2. package/BackToTop/index.d.ts +11 -0
  3. package/BackToTop/index.js +458 -0
  4. package/CascadingSelect/index.css +159 -0
  5. package/CascadingSelect/index.d.ts +56 -0
  6. package/CascadingSelect/index.js +958 -0
  7. package/CascadingSelectE2E/index.css +159 -0
  8. package/CascadingSelectE2E/index.d.ts +60 -0
  9. package/CascadingSelectE2E/index.js +1126 -0
  10. package/Checkbox/index.d.ts +30 -0
  11. package/Checkbox/index.js +226 -0
  12. package/ColorPicker/index.css +38 -0
  13. package/ColorPicker/index.d.ts +27 -0
  14. package/ColorPicker/index.js +246 -0
  15. package/DigitalClock/index.d.ts +7 -0
  16. package/DigitalClock/index.js +208 -0
  17. package/DropdownMenu/index.css +127 -0
  18. package/DropdownMenu/index.d.ts +37 -0
  19. package/DropdownMenu/index.js +237 -0
  20. package/DynamicFields/index.d.ts +26 -0
  21. package/DynamicFields/index.js +412 -0
  22. package/File/index.d.ts +36 -0
  23. package/File/index.js +473 -0
  24. package/Input/index.d.ts +42 -0
  25. package/Input/index.js +286 -0
  26. package/LiveSearch/index.d.ts +37 -0
  27. package/LiveSearch/index.js +1195 -0
  28. package/ModalDialog/index.d.ts +60 -0
  29. package/ModalDialog/index.js +725 -0
  30. package/ModeSwitch/index.d.ts +17 -0
  31. package/ModeSwitch/index.js +202 -0
  32. package/MultiFuncSelect/index.css +178 -0
  33. package/MultiFuncSelect/index.d.ts +67 -0
  34. package/MultiFuncSelect/index.js +1826 -0
  35. package/MultilevelDropdownMenu/index.css +35 -0
  36. package/MultilevelDropdownMenu/index.d.ts +25 -0
  37. package/MultilevelDropdownMenu/index.js +464 -0
  38. package/Pagination/index.d.ts +49 -0
  39. package/Pagination/index.js +341 -0
  40. package/README.md +108 -0
  41. package/Radio/index.d.ts +31 -0
  42. package/Radio/index.js +246 -0
  43. package/RangeSlider/index.css +149 -0
  44. package/RangeSlider/index.d.ts +21 -0
  45. package/RangeSlider/index.js +730 -0
  46. package/ScrollReveal/index.css +23 -0
  47. package/ScrollReveal/index.d.ts +21 -0
  48. package/ScrollReveal/index.js +216 -0
  49. package/Scrollbar/index.css +168 -0
  50. package/Scrollbar/index.d.ts +15 -0
  51. package/Scrollbar/index.js +605 -0
  52. package/SearchBar/index.d.ts +32 -0
  53. package/SearchBar/index.js +246 -0
  54. package/Select/index.d.ts +34 -0
  55. package/Select/index.js +331 -0
  56. package/ShowMoreLess/index.css +23 -0
  57. package/ShowMoreLess/index.d.ts +30 -0
  58. package/ShowMoreLess/index.js +202 -0
  59. package/Switch/index.d.ts +29 -0
  60. package/Switch/index.js +211 -0
  61. package/Table/index.css +533 -0
  62. package/Table/index.d.ts +25 -0
  63. package/Table/index.js +2113 -0
  64. package/Tabs/index.d.ts +3 -0
  65. package/Tabs/index.js +323 -0
  66. package/TagInput/index.css +90 -0
  67. package/TagInput/index.d.ts +28 -0
  68. package/TagInput/index.js +370 -0
  69. package/Textarea/index.d.ts +30 -0
  70. package/Textarea/index.js +242 -0
  71. package/Toast/index.css +95 -0
  72. package/Toast/index.d.ts +35 -0
  73. package/Toast/index.js +340 -0
  74. package/Tooltip/index.css +240 -0
  75. package/Tooltip/index.d.ts +19 -0
  76. package/Tooltip/index.js +200 -0
  77. package/Tree/index.css +225 -0
  78. package/Tree/index.d.ts +37 -0
  79. package/Tree/index.js +1406 -0
  80. package/all.d.ts +33 -0
  81. package/all.js +35 -0
  82. package/lib/cjs/BackToTop/index.d.ts +11 -0
  83. package/lib/cjs/BackToTop/index.js +458 -0
  84. package/lib/cjs/CascadingSelect/index.d.ts +56 -0
  85. package/lib/cjs/CascadingSelect/index.js +958 -0
  86. package/lib/cjs/CascadingSelectE2E/index.d.ts +60 -0
  87. package/lib/cjs/CascadingSelectE2E/index.js +1126 -0
  88. package/lib/cjs/Checkbox/index.d.ts +30 -0
  89. package/lib/cjs/Checkbox/index.js +226 -0
  90. package/lib/cjs/ColorPicker/index.d.ts +27 -0
  91. package/lib/cjs/ColorPicker/index.js +246 -0
  92. package/lib/cjs/DigitalClock/index.d.ts +7 -0
  93. package/lib/cjs/DigitalClock/index.js +208 -0
  94. package/lib/cjs/DropdownMenu/index.d.ts +37 -0
  95. package/lib/cjs/DropdownMenu/index.js +237 -0
  96. package/lib/cjs/DynamicFields/index.d.ts +26 -0
  97. package/lib/cjs/DynamicFields/index.js +412 -0
  98. package/lib/cjs/File/index.d.ts +36 -0
  99. package/lib/cjs/File/index.js +473 -0
  100. package/lib/cjs/Input/index.d.ts +42 -0
  101. package/lib/cjs/Input/index.js +286 -0
  102. package/lib/cjs/LiveSearch/index.d.ts +37 -0
  103. package/lib/cjs/LiveSearch/index.js +1195 -0
  104. package/lib/cjs/ModalDialog/index.d.ts +60 -0
  105. package/lib/cjs/ModalDialog/index.js +725 -0
  106. package/lib/cjs/ModeSwitch/index.d.ts +17 -0
  107. package/lib/cjs/ModeSwitch/index.js +202 -0
  108. package/lib/cjs/MultiFuncSelect/index.d.ts +67 -0
  109. package/lib/cjs/MultiFuncSelect/index.js +1826 -0
  110. package/lib/cjs/MultilevelDropdownMenu/index.d.ts +25 -0
  111. package/lib/cjs/MultilevelDropdownMenu/index.js +464 -0
  112. package/lib/cjs/Pagination/index.d.ts +49 -0
  113. package/lib/cjs/Pagination/index.js +341 -0
  114. package/lib/cjs/Radio/index.d.ts +31 -0
  115. package/lib/cjs/Radio/index.js +246 -0
  116. package/lib/cjs/RangeSlider/index.d.ts +21 -0
  117. package/lib/cjs/RangeSlider/index.js +730 -0
  118. package/lib/cjs/ScrollReveal/index.d.ts +21 -0
  119. package/lib/cjs/ScrollReveal/index.js +216 -0
  120. package/lib/cjs/Scrollbar/index.d.ts +15 -0
  121. package/lib/cjs/Scrollbar/index.js +605 -0
  122. package/lib/cjs/SearchBar/index.d.ts +32 -0
  123. package/lib/cjs/SearchBar/index.js +246 -0
  124. package/lib/cjs/Select/index.d.ts +34 -0
  125. package/lib/cjs/Select/index.js +331 -0
  126. package/lib/cjs/ShowMoreLess/index.d.ts +30 -0
  127. package/lib/cjs/ShowMoreLess/index.js +202 -0
  128. package/lib/cjs/Switch/index.d.ts +29 -0
  129. package/lib/cjs/Switch/index.js +211 -0
  130. package/lib/cjs/Table/index.d.ts +25 -0
  131. package/lib/cjs/Table/index.js +2113 -0
  132. package/lib/cjs/Tabs/index.d.ts +3 -0
  133. package/lib/cjs/Tabs/index.js +323 -0
  134. package/lib/cjs/TagInput/index.d.ts +28 -0
  135. package/lib/cjs/TagInput/index.js +370 -0
  136. package/lib/cjs/Textarea/index.d.ts +30 -0
  137. package/lib/cjs/Textarea/index.js +242 -0
  138. package/lib/cjs/Toast/index.d.ts +35 -0
  139. package/lib/cjs/Toast/index.js +340 -0
  140. package/lib/cjs/Tooltip/index.d.ts +19 -0
  141. package/lib/cjs/Tooltip/index.js +200 -0
  142. package/lib/cjs/Tree/index.d.ts +37 -0
  143. package/lib/cjs/Tree/index.js +1406 -0
  144. package/lib/cjs/index.d.ts +33 -0
  145. package/lib/cjs/index.js +35 -0
  146. package/lib/css/BackToTop/index.css +34 -0
  147. package/lib/css/CascadingSelect/index.css +159 -0
  148. package/lib/css/CascadingSelectE2E/index.css +159 -0
  149. package/lib/css/ColorPicker/index.css +38 -0
  150. package/lib/css/DropdownMenu/index.css +127 -0
  151. package/lib/css/MultiFuncSelect/index.css +178 -0
  152. package/lib/css/MultilevelDropdownMenu/index.css +35 -0
  153. package/lib/css/RangeSlider/index.css +149 -0
  154. package/lib/css/ScrollReveal/index.css +23 -0
  155. package/lib/css/Scrollbar/index.css +168 -0
  156. package/lib/css/ShowMoreLess/index.css +23 -0
  157. package/lib/css/Table/index.css +533 -0
  158. package/lib/css/TagInput/index.css +90 -0
  159. package/lib/css/Toast/index.css +95 -0
  160. package/lib/css/Tooltip/index.css +240 -0
  161. package/lib/css/Tree/index.css +225 -0
  162. package/lib/esm/BackToTop/index.scss +47 -0
  163. package/lib/esm/BackToTop/index.tsx +182 -0
  164. package/lib/esm/BackToTop/utils/easing.js +200 -0
  165. package/lib/esm/BackToTop/utils/performance.js +52 -0
  166. package/lib/esm/CascadingSelect/Group.tsx +39 -0
  167. package/lib/esm/CascadingSelect/index.scss +214 -0
  168. package/lib/esm/CascadingSelect/index.tsx +922 -0
  169. package/lib/esm/CascadingSelect/utils/performance.js +52 -0
  170. package/lib/esm/CascadingSelectE2E/Group.tsx +39 -0
  171. package/lib/esm/CascadingSelectE2E/index.scss +214 -0
  172. package/lib/esm/CascadingSelectE2E/index.tsx +1091 -0
  173. package/lib/esm/CascadingSelectE2E/utils/performance.js +52 -0
  174. package/lib/esm/Checkbox/index.tsx +160 -0
  175. package/lib/esm/ColorPicker/index.scss +48 -0
  176. package/lib/esm/ColorPicker/index.tsx +187 -0
  177. package/lib/esm/DigitalClock/index.tsx +72 -0
  178. package/lib/esm/DigitalClock/utils/useInterval.js +43 -0
  179. package/lib/esm/DropdownMenu/Option.tsx +27 -0
  180. package/lib/esm/DropdownMenu/index.scss +180 -0
  181. package/lib/esm/DropdownMenu/index.tsx +148 -0
  182. package/lib/esm/DynamicFields/index.tsx +386 -0
  183. package/lib/esm/File/index.tsx +302 -0
  184. package/lib/esm/Input/index.tsx +233 -0
  185. package/lib/esm/LiveSearch/index.tsx +582 -0
  186. package/lib/esm/LiveSearch/utils/performance.js +52 -0
  187. package/lib/esm/LiveSearch/utils/useThrottle.js +36 -0
  188. package/lib/esm/ModalDialog/index.tsx +479 -0
  189. package/lib/esm/ModalDialog/plugins/BSL/bodyScrollLock.es6.js +262 -0
  190. package/lib/esm/ModalDialog/plugins/BSL/index.ts +2 -0
  191. package/lib/esm/ModeSwitch/index.tsx +82 -0
  192. package/lib/esm/MultiFuncSelect/index.scss +269 -0
  193. package/lib/esm/MultiFuncSelect/index.tsx +1597 -0
  194. package/lib/esm/MultiFuncSelect/utils/performance.js +52 -0
  195. package/lib/esm/MultiFuncSelect/utils/tree.js +103 -0
  196. package/lib/esm/MultiFuncSelect/utils/useThrottle.js +36 -0
  197. package/lib/esm/MultilevelDropdownMenu/MenuList.tsx +230 -0
  198. package/lib/esm/MultilevelDropdownMenu/index.scss +75 -0
  199. package/lib/esm/MultilevelDropdownMenu/index.tsx +71 -0
  200. package/lib/esm/MultilevelDropdownMenu/utils/dom.js +81 -0
  201. package/lib/esm/Pagination/index.tsx +230 -0
  202. package/lib/esm/Pagination/pagination-navigators.tsx +60 -0
  203. package/lib/esm/Radio/index.tsx +201 -0
  204. package/lib/esm/RangeSlider/index.scss +184 -0
  205. package/lib/esm/RangeSlider/index.tsx +223 -0
  206. package/lib/esm/ScrollReveal/index.scss +27 -0
  207. package/lib/esm/ScrollReveal/index.tsx +146 -0
  208. package/lib/esm/Scrollbar/index.scss +217 -0
  209. package/lib/esm/Scrollbar/index.tsx +497 -0
  210. package/lib/esm/Scrollbar/utils/performance.js +52 -0
  211. package/lib/esm/SearchBar/index.tsx +181 -0
  212. package/lib/esm/Select/index.tsx +276 -0
  213. package/lib/esm/ShowMoreLess/index.scss +27 -0
  214. package/lib/esm/ShowMoreLess/index.tsx +144 -0
  215. package/lib/esm/Switch/index.tsx +143 -0
  216. package/lib/esm/Table/TableColgroup.tsx +29 -0
  217. package/lib/esm/Table/TableField.tsx +40 -0
  218. package/lib/esm/Table/TableFieldRow.tsx +212 -0
  219. package/lib/esm/Table/TableHeaders.tsx +146 -0
  220. package/lib/esm/Table/TableRow.tsx +127 -0
  221. package/lib/esm/Table/TableSummaries.tsx +36 -0
  222. package/lib/esm/Table/index.scss +364 -0
  223. package/lib/esm/Table/index.tsx +576 -0
  224. package/lib/esm/Table/table-utils.ts +65 -0
  225. package/lib/esm/Table/utils/dom.js +81 -0
  226. package/lib/esm/Table/utils/performance.js +52 -0
  227. package/lib/esm/Tabs/TabList.tsx +42 -0
  228. package/lib/esm/Tabs/TabPanel.tsx +34 -0
  229. package/lib/esm/Tabs/Tabs.tsx +232 -0
  230. package/lib/esm/Tabs/index.tsx +3 -0
  231. package/lib/esm/TagInput/index.scss +125 -0
  232. package/lib/esm/TagInput/index.tsx +314 -0
  233. package/lib/esm/Textarea/index.tsx +178 -0
  234. package/lib/esm/Toast/Item.tsx +75 -0
  235. package/lib/esm/Toast/index.scss +120 -0
  236. package/lib/esm/Toast/index.tsx +249 -0
  237. package/lib/esm/Tooltip/index.scss +327 -0
  238. package/lib/esm/Tooltip/index.tsx +142 -0
  239. package/lib/esm/Tree/TreeList.tsx +503 -0
  240. package/lib/esm/Tree/index.scss +375 -0
  241. package/lib/esm/Tree/index.tsx +301 -0
  242. package/lib/esm/Tree/init-height.tsx +27 -0
  243. package/lib/esm/Tree/utils/convert-tree.js +29 -0
  244. package/lib/esm/Tree/utils/dom.js +81 -0
  245. package/lib/esm/index.js +31 -0
  246. package/package.json +40 -0
@@ -0,0 +1,375 @@
1
+ /* ======================================================
2
+ <!-- Tree -->
3
+ /* ====================================================== */
4
+
5
+ .tree-diagram-default {
6
+
7
+ --tree-padding-x: 1rem;
8
+ --tree-padding-y: 0.5rem;
9
+ --tree-font-line-height: 1.5;
10
+ --tree-dis-top: 1rem;
11
+ --tree-font-size: 0.875rem;
12
+ --tree-ident: var(--tree-font-size);
13
+ --tree-dis-start: -var(--tree-ident);
14
+ --tree-border-color: #ddd;
15
+ --tree-font-bg: #f6f6f6;
16
+ --tree-font-active-bg: #f0f8ff;
17
+ --tree-checkbox-indeterminate-color: #bbbbbb;
18
+ --tree-link-min-width: 150px;
19
+
20
+
21
+ position: relative;
22
+ display: flex;
23
+ flex-wrap: wrap;
24
+ align-items: center;
25
+ justify-content: space-between;
26
+ padding: 0.5rem 0;
27
+ outline: none; /* When using "tabindex" please set */
28
+
29
+ ul, li {
30
+ list-style: none;
31
+ }
32
+
33
+ .tree-diagram-default-nav {
34
+ display: flex;
35
+ flex-direction: column;
36
+ padding-left: 0;
37
+ margin-bottom: 0;
38
+ list-style: none;
39
+
40
+ .nav-link {
41
+ position: relative;
42
+ display: block;
43
+ min-width: var(--tree-link-min-width);
44
+ padding: var(--tree-padding-y) var(--tree-padding-x);
45
+ font-size: var(--tree-font-size);
46
+ font-weight: 400;
47
+ color: inherit;
48
+ text-decoration: none;
49
+ transition: .1s ease-in-out;
50
+ padding-left: calc(var(--tree-padding-x)*2);
51
+ z-index: 1;
52
+
53
+ > span {
54
+ transition: .1s ease-in-out;
55
+ display: inline-block;
56
+ border-radius: 2px;
57
+
58
+ var.loading-icon {
59
+ position: absolute;
60
+ margin-left: .2em;
61
+ }
62
+ }
63
+
64
+
65
+ &:hover span {
66
+ background-color: var(--tree-font-bg);
67
+ }
68
+
69
+ &.selected span {
70
+ background-color: var(--tree-font-active-bg);
71
+ }
72
+
73
+ &.loading {
74
+
75
+ > span {
76
+ var.loading-icon {
77
+ display: inline-block;
78
+ }
79
+ }
80
+
81
+ }
82
+
83
+ }
84
+
85
+
86
+ var.loading-icon {
87
+ display: none;
88
+
89
+ svg {
90
+ animation: tree-diagram-ring 1.2s linear infinite;
91
+ }
92
+ }
93
+
94
+
95
+
96
+ .checkbox-trigger {
97
+ display: none;
98
+ position: absolute;
99
+ left: calc(var(--tree-padding-x) + 1.5em);
100
+ top: calc(var(--tree-dis-top) - 8px);
101
+ z-index: 2;
102
+
103
+ > div {
104
+ display: inline-block;
105
+
106
+ .form-check {
107
+ min-height: auto;
108
+ margin-bottom: 0;
109
+
110
+ [type=checkbox]:indeterminate {
111
+ background-color: var(--tree-checkbox-indeterminate-color);
112
+ border-color: var(--tree-checkbox-indeterminate-color);
113
+ }
114
+
115
+ }
116
+ }
117
+ }
118
+
119
+
120
+
121
+ .arrow {
122
+ cursor: pointer;
123
+ transition: .1s ease-in-out;
124
+ display: inline-block;
125
+ text-align: center;
126
+ position: absolute;
127
+ left: calc(var(--tree-padding-x) + 0.2em);
128
+ top: calc(var(--tree-dis-top) - 5px);
129
+ transform: translateY(-50%) rotate(0deg);
130
+ z-index: 2;
131
+ width: 10px;
132
+ height: 10px;
133
+ transform-origin: 50% 125%;
134
+
135
+ > var > svg {
136
+ transition: .1s ease-in-out;
137
+ }
138
+
139
+ var.default-icon {
140
+ > span {
141
+
142
+ &:last-child {
143
+ display: none;
144
+ }
145
+
146
+ }
147
+ }
148
+
149
+ &.loading {
150
+ var.default-icon {
151
+ display: none;
152
+ }
153
+ var.loading-icon {
154
+ display: inline-block;
155
+ }
156
+ }
157
+
158
+ &:hover {
159
+ opacity: .5;
160
+
161
+ > var > svg {
162
+ transform: scale(1.4);
163
+ }
164
+ }
165
+
166
+ }
167
+
168
+
169
+ li {
170
+ position: relative;
171
+ padding-left: .2em;
172
+
173
+ i {
174
+ font-style: normal;
175
+ }
176
+
177
+ > a {
178
+
179
+ &:hover {
180
+
181
+ }
182
+ }
183
+
184
+
185
+ &.active {
186
+
187
+ > .arrow:not(.custom-icons) {
188
+ transform: translateY(-50%) rotate(90deg);
189
+ }
190
+
191
+ > .arrow.custom-icons var.default-icon > span {
192
+
193
+ &:first-child {
194
+ display: none;
195
+ }
196
+
197
+ &:last-child {
198
+ display: block;
199
+ }
200
+
201
+ }
202
+ }
203
+
204
+ &.active > a {
205
+
206
+ }
207
+
208
+ }
209
+
210
+ > li {
211
+
212
+ ul {
213
+ transition: max-height 0.25s ease;
214
+ overflow: hidden;
215
+ position: relative;
216
+ }
217
+ }
218
+
219
+ /* Default height for sub items */
220
+ > li:not(.active) {
221
+
222
+ ul {
223
+ max-height: 0;
224
+ }
225
+ }
226
+
227
+
228
+ > li ul ul {
229
+ margin-top: auto;
230
+ }
231
+
232
+ }
233
+
234
+ /*------ line ------*/
235
+ &.show-line .tree-diagram-default-nav {
236
+
237
+ li {
238
+ &::before,
239
+ &::after {
240
+ content: "";
241
+ position: absolute;
242
+ top: calc(0px - var(--tree-dis-top));
243
+ left: var(--tree-dis-start);
244
+ border-left-width: 1px;
245
+ border-left-style: solid;
246
+ border-left-color: var(--tree-border-color);
247
+ border-bottom-width: 1px;
248
+ border-bottom-style: solid;
249
+ border-bottom-color: var(--tree-border-color);
250
+
251
+ width: var(--tree-ident);
252
+ pointer-events: none;
253
+ }
254
+
255
+ &::before {
256
+ height: calc(var(--tree-font-size)*var(--tree-font-line-height) + var(--tree-padding-y) + var(--tree-padding-y));
257
+ }
258
+
259
+ &::after {
260
+ height: 100%;
261
+ border-bottom-width: 0;
262
+ }
263
+
264
+ &:last-child::after {
265
+ display: none;
266
+ }
267
+
268
+ }
269
+
270
+ > li {
271
+ &:first-child::before {
272
+ border-left-width: 0;
273
+ }
274
+ &:first-child::after {
275
+ top: calc(var(--tree-font-size)*var(--tree-font-line-height));
276
+ }
277
+
278
+ }
279
+
280
+ }
281
+
282
+ &.show-line.line--dotted .tree-diagram-default-nav {
283
+ li {
284
+ &::before,
285
+ &::after {
286
+ border-left-style: dotted;
287
+ border-bottom-style: dotted;
288
+ }
289
+ }
290
+ }
291
+
292
+ &.show-line.line--dashed .tree-diagram-default-nav {
293
+ li {
294
+ &::before,
295
+ &::after {
296
+ border-left-style: dashed;
297
+ border-bottom-style: dashed;
298
+ }
299
+ }
300
+ }
301
+
302
+ &.show-line.line--double .tree-diagram-default-nav {
303
+ li {
304
+ &::before,
305
+ &::after {
306
+ border-left-style: double;
307
+ border-bottom-style: double;
308
+ }
309
+ }
310
+ }
311
+
312
+
313
+ &.show-line.line--solid .tree-diagram-default-nav {
314
+ li {
315
+ &::before,
316
+ &::after {
317
+ border-left-style: solid;
318
+ border-bottom-style: solid;
319
+ }
320
+ }
321
+ }
322
+
323
+
324
+ /*------ has checkbox ------*/
325
+ &.has-checkbox {
326
+ .checkbox-trigger {
327
+ display: inline-block;
328
+ }
329
+
330
+ .tree-diagram-default-nav {
331
+ .nav-link {
332
+ padding-left: calc(var(--tree-padding-x) + 2.7em);
333
+ }
334
+ }
335
+
336
+ }
337
+
338
+ /*------ hide arrow ------*/
339
+ &.hide-arrow {
340
+ .arrow {
341
+ display: none;
342
+ }
343
+
344
+ .tree-diagram-default-nav {
345
+ .nav-link {
346
+ padding-left: var(--tree-padding-x);
347
+ }
348
+ }
349
+
350
+ }
351
+
352
+ &.hide-arrow.has-checkbox {
353
+
354
+ .tree-diagram-default-nav {
355
+ .checkbox-trigger {
356
+ left: calc(var(--tree-padding-x) + 0.5em);
357
+ }
358
+ .nav-link {
359
+ padding-left: calc(var(--tree-padding-x) + 1.5em);
360
+ }
361
+ }
362
+
363
+ }
364
+
365
+ }
366
+
367
+ @keyframes tree-diagram-ring {
368
+ 0% {
369
+ transform: rotate(0deg);
370
+ }
371
+
372
+ 100% {
373
+ transform: rotate(360deg);
374
+ }
375
+ }
@@ -0,0 +1,301 @@
1
+ import React, { useState, useEffect, useRef, useId } from 'react';
2
+
3
+ import TreeList from './TreeList';
4
+ import { initUlHeight, initAsyncItems } from './init-height';
5
+ import { type } from 'os';
6
+
7
+ declare module 'react' {
8
+ interface ReactI18NextChildren<T> {
9
+ children?: any;
10
+ }
11
+ }
12
+
13
+
14
+ interface DataNode {
15
+ key: React.Key;
16
+ title: string;
17
+ link?: string;
18
+ active?: boolean;
19
+ checked?: boolean;
20
+ heading?: string;
21
+ icon?: string;
22
+ slug?: string;
23
+ childrenAsync?: boolean;
24
+ children?: DataNode[];
25
+ }
26
+
27
+ interface fetchConfig {
28
+ fetchFuncAsync?: any | undefined;
29
+ fetchFuncMethod?: string | undefined;
30
+ fetchFuncMethodParams?: any[] | undefined;
31
+ fetchCallback?: (data: any) => void;
32
+ }
33
+
34
+
35
+
36
+ type TreeProps = {
37
+ /** Set TreeNode display Checkbox or not */
38
+ checkable?: boolean;
39
+ /** Shows a connecting line */
40
+ showLine?: boolean;
41
+ /** Specifies what kind of line to display */
42
+ lineStyle?: string;
43
+ /** Mutually exclusive alternate expansion between the first levels */
44
+ alternateCollapse?: boolean;
45
+ /** set an arrow */
46
+ arrow?: React.ReactNode;
47
+ /** Set collapse/expand icon */
48
+ arrowIcons?: React.ReactNode[];
49
+ /** Disable arrow */
50
+ disableArrow?: boolean;
51
+ /** Disable the collapse effect */
52
+ disableCollapse?: boolean;
53
+ /** The class name of the tree. */
54
+ treeClassName?: string;
55
+ /** The class name of the child on <ul>. */
56
+ childClassName?: string;
57
+ /** Specify data of Cascading DropDown List as a JSON string format. */
58
+ data?: any[any];
59
+ /** -- */
60
+ id?: string;
61
+ onSelect?: (e: any, val: any, func: Function) => void;
62
+ onCollapse?: (e: any, val: any, func: Function) => void;
63
+ onCheck?: (val: any) => void;
64
+ };
65
+
66
+ const Tree = (props: TreeProps) => {
67
+ const {
68
+ id,
69
+ checkable,
70
+ showLine,
71
+ lineStyle,
72
+ alternateCollapse,
73
+ disableArrow,
74
+ disableCollapse,
75
+ arrow,
76
+ arrowIcons,
77
+ treeClassName,
78
+ childClassName,
79
+ data,
80
+ onSelect,
81
+ onCollapse,
82
+ onCheck
83
+ } = props;
84
+
85
+
86
+ const uniqueID = useId().replace(/\:/g, "-");
87
+ const idRes = id || uniqueID;
88
+ const rootRef = useRef<any>(null);
89
+ const [val, setVal] = useState<DataNode[] | null>(null);
90
+ const [checkedPrint, setCheckedPrint] = useState<any[]>([]);
91
+ const [checkedData, setCheckedData] = useState<any[]>([]);
92
+ const expandClassName = `${showLine ? 'show-line' : ''} ${disableArrow ? 'hide-arrow' : ''} ${disableCollapse ? 'collapse-disabled' : ''} ${lineStyle ? `line--${lineStyle}` : ''} ${checkable ? 'has-checkbox' : ''}`;
93
+
94
+
95
+
96
+ const updateTreeData = (list: DataNode[] | null, key: React.Key, children: DataNode[]): DataNode[] => {
97
+
98
+ return list ? list.map((node) => {
99
+ if (node.key === key) {
100
+ return {
101
+ ...node,
102
+ children
103
+ };
104
+ }
105
+ if (node.children) {
106
+ return {
107
+ ...node,
108
+ children: updateTreeData(node.children, key, children)
109
+ };
110
+ }
111
+ return node;
112
+ }) : [];
113
+ }
114
+
115
+
116
+ async function fetchData(fetch: fetchConfig, params: any) {
117
+
118
+ if (typeof fetch.fetchFuncAsync === 'object') {
119
+ const response: any = await fetch.fetchFuncAsync[`${fetch.fetchFuncMethod}`](...params.split(','));
120
+ let _ORGIN_DATA = response.data;
121
+
122
+ if ( Array.isArray(_ORGIN_DATA) && _ORGIN_DATA.length > 0 ) {
123
+ // reset data structure
124
+ if (typeof (fetch.fetchCallback) === 'function') {
125
+ _ORGIN_DATA = fetch.fetchCallback(_ORGIN_DATA);
126
+ }
127
+
128
+ // Determine whether the data structure matches
129
+ if ( _ORGIN_DATA.length > 0 && typeof _ORGIN_DATA[0].title === 'undefined' ) {
130
+ console.warn( 'The data structure does not match, please refer to the example in the component documentation.' );
131
+ _ORGIN_DATA = [];
132
+ }
133
+
134
+
135
+ return _ORGIN_DATA;
136
+
137
+ } else {
138
+ return [];
139
+ }
140
+
141
+
142
+ } else {
143
+ return [];
144
+ }
145
+
146
+
147
+ }
148
+
149
+
150
+
151
+ function addKey(obj: DataNode[], depth: string, init: number) {
152
+ obj.forEach((item: any, index: number) => {
153
+ item.key = `${depth}-${index}`.substring(1);
154
+ if (item.children) {
155
+ addKey(item.children, `${depth}-${index}`, init + 1);
156
+ }
157
+ });
158
+ }
159
+
160
+
161
+ function initCheckboxesVal(obj: DataNode[]) {
162
+ obj.forEach((item: any) => {
163
+ if ( item.checked === true ) setCheckedPrint((prevState) => [{
164
+ name: `checkbox-${idRes}-${item.key}`,
165
+ key: item.key,
166
+ slug: item.slug,
167
+ link: item.link
168
+ }, ...prevState]);
169
+
170
+ if (item.children) {
171
+ initCheckboxesVal(item.children);
172
+ }
173
+ });
174
+ }
175
+
176
+ function initCheckboxesData(obj: DataNode[]) {
177
+ obj.forEach((item: any) => {
178
+ setCheckedData((prevState) => [{
179
+ key: item.key,
180
+ checked: item.checked === true,
181
+ indeterminate: false
182
+ }, ...prevState]);
183
+
184
+ if (item.children) {
185
+ initCheckboxesData(item.children);
186
+ }
187
+ });
188
+ }
189
+
190
+
191
+ function initDefaultValue(key: React.Key | null, fetch: fetchConfig | null = null, firstRender: boolean = false) {
192
+
193
+ if ( firstRender ) {
194
+ addKey(data, '', 0);
195
+ setVal(data);
196
+
197
+ // Initialize default value of checkboxes
198
+ if ( checkable ) {
199
+ initCheckboxesVal(data);
200
+ initCheckboxesData(data);
201
+ }
202
+
203
+ return;
204
+ }
205
+
206
+ if (fetch && typeof fetch.fetchFuncAsync === 'object') {
207
+ //
208
+ const _params: any[] = fetch.fetchFuncMethodParams || [];
209
+ fetchData(fetch, (_params).join(',')).then( (response: any) => {
210
+
211
+ const _childrenData: DataNode[] = response;
212
+
213
+ if ( _childrenData.length > 0 ) {
214
+ // add children to node
215
+ const _newData: DataNode[] = updateTreeData(val, key ? key : '', _childrenData);
216
+
217
+ // update data
218
+ addKey(_newData, '', 0);
219
+ setVal(_newData);
220
+
221
+ // Initialize default value of checkboxes
222
+ if ( checkable ) {
223
+ _childrenData.forEach((newitem: any) => {
224
+ setCheckedData((prevState) => [{
225
+ key: newitem.key,
226
+ checked: newitem.checked === true,
227
+ indeterminate: false
228
+ }, ...prevState]);
229
+ });
230
+ }
231
+
232
+ }
233
+
234
+ // loading status
235
+ setTimeout(() => {
236
+ [].slice.call(rootRef.current.querySelectorAll('.arrow.async-ready, .nav-link.async-ready')).forEach( (node: any) => {
237
+ node.classList.remove('loading');
238
+ if ( node.parentElement.querySelector('ul') !== null ) {
239
+ node.classList.remove('async-ready');
240
+ node.click();
241
+ }
242
+ });
243
+
244
+
245
+ // init <ul> height
246
+ // Initialize async items
247
+ const ul: any = [].slice.call(rootRef.current.querySelectorAll('ul'));
248
+ initAsyncItems(ul as never).then(() => {
249
+ initUlHeight(ul);
250
+ });
251
+
252
+ }, 500);
253
+
254
+
255
+
256
+ });
257
+ }
258
+
259
+ }
260
+
261
+
262
+ useEffect(() => {
263
+ initDefaultValue(null, null, true);
264
+ }, [data]);
265
+
266
+
267
+ return (
268
+ <>
269
+
270
+ <nav tabIndex={0} id={idRes} ref={rootRef} className={treeClassName ? `tree-diagram__wrapper ${treeClassName} ${expandClassName}` : `tree-diagram__wrapper tree-diagram-default ${expandClassName}`}>
271
+
272
+
273
+ <TreeList
274
+ rootNode={rootRef}
275
+ checkboxNamePrefix={idRes}
276
+ alternateCollapse={alternateCollapse}
277
+ first={true}
278
+ disableArrow={disableArrow}
279
+ disableCollapse={disableCollapse}
280
+ arrow={arrow}
281
+ arrowIcons={arrowIcons}
282
+ data={val}
283
+ childClassName={childClassName || 'tree-diagram-default-nav'}
284
+ onSelect={onSelect}
285
+ onCollapse={onCollapse}
286
+ onCheck={onCheck}
287
+ evInitValue={initDefaultValue}
288
+ updateCheckedPrint={setCheckedPrint}
289
+ getCheckedPrint={checkedPrint}
290
+ updategetCheckedData={setCheckedData}
291
+ getCheckedData={checkedData}
292
+
293
+ />
294
+
295
+ </nav>
296
+
297
+ </>
298
+ )
299
+ };
300
+
301
+ export default Tree;
@@ -0,0 +1,27 @@
1
+ const initUlHeight = (inputUl: HTMLAllCollection) => {
2
+ [].slice.call(inputUl).forEach(function(el: HTMLUListElement){
3
+ if (typeof el.dataset.maxwidth === 'undefined') {
4
+ const _li = [].slice.call(el.querySelectorAll('li'));
5
+ let _allHeight: number = 0;
6
+ _li.forEach(function(li: HTMLLIElement){
7
+ _allHeight += li.scrollHeight;
8
+ });
9
+ el.dataset.maxwidth = `${_allHeight}px`;
10
+ el.style.maxHeight = `${_allHeight}px`;
11
+ } else {
12
+ el.style.maxHeight = el.dataset.maxwidth;
13
+ }
14
+
15
+ });
16
+ };
17
+
18
+ const initAsyncItems = async (inputUl: HTMLAllCollection) => {
19
+ [].slice.call(inputUl).forEach(function(el: HTMLUListElement){
20
+ el.removeAttribute('data-maxwidth');
21
+ });
22
+ };
23
+
24
+ export {
25
+ initUlHeight,
26
+ initAsyncItems
27
+ };