neko-ui 2.9.2 → 2.9.4

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 (415) hide show
  1. package/es/avatar/favicon.svg +0 -0
  2. package/es/avatar/group.js +17 -18
  3. package/es/avatar/group.js.map +1 -1
  4. package/es/avatar/index.js +1 -2
  5. package/es/avatar/index.js.map +1 -1
  6. package/es/avatar/style.js +1 -2
  7. package/es/avatar/style.js.map +1 -1
  8. package/es/back-top/index.js +1 -2
  9. package/es/back-top/index.js.map +1 -1
  10. package/es/back-top/style.js +1 -2
  11. package/es/back-top/style.js.map +1 -1
  12. package/es/basic-config/index.js +1 -2
  13. package/es/basic-config/index.js.map +1 -1
  14. package/es/button/index.js +1 -2
  15. package/es/button/index.js.map +1 -1
  16. package/es/button/style.js +1 -2
  17. package/es/button/style.js.map +1 -1
  18. package/es/capture-screen/index.js +1 -2
  19. package/es/capture-screen/index.js.map +1 -1
  20. package/es/capture-screen/style.js +1 -2
  21. package/es/capture-screen/style.js.map +1 -1
  22. package/es/carousel/index.js +1 -2
  23. package/es/carousel/index.js.map +1 -1
  24. package/es/carousel/style.js +1 -2
  25. package/es/carousel/style.js.map +1 -1
  26. package/es/checkbox/index.js +1 -2
  27. package/es/checkbox/index.js.map +1 -1
  28. package/es/checkbox/style.js +1 -2
  29. package/es/checkbox/style.js.map +1 -1
  30. package/es/code/index.d.ts +6 -2
  31. package/es/code/index.js +1 -2
  32. package/es/code/index.js.map +1 -1
  33. package/es/code/style.js +25 -26
  34. package/es/code/style.js.map +1 -1
  35. package/es/code/worker.js +1 -2
  36. package/es/code/worker.js.map +1 -1
  37. package/es/color-palette/index.js +1 -2
  38. package/es/color-palette/index.js.map +1 -1
  39. package/es/color-palette/style.js +1 -2
  40. package/es/color-palette/style.js.map +1 -1
  41. package/es/color-picker/index.js +1 -2
  42. package/es/color-picker/index.js.map +1 -1
  43. package/es/color-picker/style.js +1 -2
  44. package/es/color-picker/style.js.map +1 -1
  45. package/es/cron/begin-interval.js +1 -2
  46. package/es/cron/begin-interval.js.map +1 -1
  47. package/es/cron/day.js +1 -2
  48. package/es/cron/day.js.map +1 -1
  49. package/es/cron/hour.js +1 -2
  50. package/es/cron/hour.js.map +1 -1
  51. package/es/cron/index.js +1 -2
  52. package/es/cron/index.js.map +1 -1
  53. package/es/cron/item.js +1 -2
  54. package/es/cron/item.js.map +1 -1
  55. package/es/cron/minute.js +1 -2
  56. package/es/cron/minute.js.map +1 -1
  57. package/es/cron/month.js +1 -2
  58. package/es/cron/month.js.map +1 -1
  59. package/es/cron/period.js +1 -2
  60. package/es/cron/period.js.map +1 -1
  61. package/es/cron/second.js +1 -2
  62. package/es/cron/second.js.map +1 -1
  63. package/es/cron/some.js +1 -2
  64. package/es/cron/some.js.map +1 -1
  65. package/es/cron/style.js +1 -2
  66. package/es/cron/style.js.map +1 -1
  67. package/es/cron/week.js +1 -2
  68. package/es/cron/week.js.map +1 -1
  69. package/es/cron/year.js +1 -2
  70. package/es/cron/year.js.map +1 -1
  71. package/es/date-picker/date.js +1 -2
  72. package/es/date-picker/date.js.map +1 -1
  73. package/es/date-picker/dayjs.js +1 -2
  74. package/es/date-picker/dayjs.js.map +1 -1
  75. package/es/date-picker/index.js +1 -2
  76. package/es/date-picker/index.js.map +1 -1
  77. package/es/date-picker/month.js +1 -2
  78. package/es/date-picker/month.js.map +1 -1
  79. package/es/date-picker/panel.js +1 -2
  80. package/es/date-picker/panel.js.map +1 -1
  81. package/es/date-picker/style.js +1 -2
  82. package/es/date-picker/style.js.map +1 -1
  83. package/es/date-picker/time.js +1 -2
  84. package/es/date-picker/time.js.map +1 -1
  85. package/es/date-picker/year.js +1 -2
  86. package/es/date-picker/year.js.map +1 -1
  87. package/es/dropdown/index.js +1 -2
  88. package/es/dropdown/index.js.map +1 -1
  89. package/es/empty/index.js +1 -2
  90. package/es/empty/index.js.map +1 -1
  91. package/es/from-schema/index.js +1 -2
  92. package/es/from-schema/index.js.map +1 -1
  93. package/es/get-options/index.js +1 -2
  94. package/es/get-options/index.js.map +1 -1
  95. package/es/highlight-text/index.js +1 -2
  96. package/es/highlight-text/index.js.map +1 -1
  97. package/es/img/index.js +1 -2
  98. package/es/img/index.js.map +1 -1
  99. package/es/img/lazy.js +1 -2
  100. package/es/img/lazy.js.map +1 -1
  101. package/es/img/style.js +1 -2
  102. package/es/img/style.js.map +1 -1
  103. package/es/index.js +1 -2
  104. package/es/index.js.map +1 -1
  105. package/es/input/index.js +1 -2
  106. package/es/input/index.js.map +1 -1
  107. package/es/input/style.js +1 -2
  108. package/es/input/style.js.map +1 -1
  109. package/es/input-number/index.js +1 -2
  110. package/es/input-number/index.js.map +1 -1
  111. package/es/katex/index.js +1 -2
  112. package/es/katex/index.js.map +1 -1
  113. package/es/md/common.d.ts +4 -0
  114. package/es/md/common.js +1 -0
  115. package/es/md/common.js.map +1 -0
  116. package/es/md/index.d.ts +1 -0
  117. package/es/md/index.js +1 -2
  118. package/es/md/index.js.map +1 -1
  119. package/es/md/worker.d.ts +9 -1
  120. package/es/md/worker.js +1 -2
  121. package/es/md/worker.js.map +1 -1
  122. package/es/md-style/index.js +1 -2
  123. package/es/md-style/index.js.map +1 -1
  124. package/es/menu/index.js +1 -2
  125. package/es/menu/index.js.map +1 -1
  126. package/es/menu/style.js +1 -2
  127. package/es/menu/style.js.map +1 -1
  128. package/es/modal/hooks.js +1 -2
  129. package/es/modal/hooks.js.map +1 -1
  130. package/es/modal/index.js +1 -2
  131. package/es/modal/index.js.map +1 -1
  132. package/es/modal/store.js +1 -2
  133. package/es/modal/store.js.map +1 -1
  134. package/es/modal/style.js +1 -2
  135. package/es/modal/style.js.map +1 -1
  136. package/es/notification/index.js +1 -2
  137. package/es/notification/index.js.map +1 -1
  138. package/es/notification/notification.js +1 -2
  139. package/es/notification/notification.js.map +1 -1
  140. package/es/notification/queque.js +1 -2
  141. package/es/notification/queque.js.map +1 -1
  142. package/es/notification/styles.js +1 -2
  143. package/es/notification/styles.js.map +1 -1
  144. package/es/pagination/index.js +1 -2
  145. package/es/pagination/index.js.map +1 -1
  146. package/es/pagination/styles.js +1 -2
  147. package/es/pagination/styles.js.map +1 -1
  148. package/es/popover/index.js +1 -2
  149. package/es/popover/index.js.map +1 -1
  150. package/es/popover/style.js +1 -2
  151. package/es/popover/style.js.map +1 -1
  152. package/es/prism/index.d.ts +0 -1
  153. package/es/prism/index.js +1 -2
  154. package/es/prism/index.js.map +1 -1
  155. package/es/provider/index.js +1 -2
  156. package/es/provider/index.js.map +1 -1
  157. package/es/qrcode/index.js +1 -2
  158. package/es/qrcode/index.js.map +1 -1
  159. package/es/qrcode/qrcode.js +1 -2
  160. package/es/qrcode/qrcode.js.map +1 -1
  161. package/es/radio/index.js +1 -2
  162. package/es/radio/index.js.map +1 -1
  163. package/es/radio/style.js +1 -2
  164. package/es/radio/style.js.map +1 -1
  165. package/es/segmented/index.js +1 -12
  166. package/es/segmented/index.js.map +1 -1
  167. package/es/segmented/style.js +1 -2
  168. package/es/segmented/style.js.map +1 -1
  169. package/es/select/index.js +1 -2
  170. package/es/select/index.js.map +1 -1
  171. package/es/select/style.js +1 -2
  172. package/es/select/style.js.map +1 -1
  173. package/es/skeleton/index.js +2 -25
  174. package/es/skeleton/index.js.map +1 -1
  175. package/es/spin/index.js +1 -2
  176. package/es/spin/index.js.map +1 -1
  177. package/es/switch/index.js +1 -2
  178. package/es/switch/index.js.map +1 -1
  179. package/es/switch/style.js +1 -2
  180. package/es/switch/style.js.map +1 -1
  181. package/es/table/index.js +1 -2
  182. package/es/table/index.js.map +1 -1
  183. package/es/table/styles.js +1 -2
  184. package/es/table/styles.js.map +1 -1
  185. package/es/tabs/index.js +1 -12
  186. package/es/tabs/index.js.map +1 -1
  187. package/es/tabs/style.d.ts +2 -2
  188. package/es/tabs/style.js +32 -33
  189. package/es/tabs/style.js.map +1 -1
  190. package/es/tag/index.js +1 -2
  191. package/es/tag/index.js.map +1 -1
  192. package/es/tag/style.js +1 -2
  193. package/es/tag/style.js.map +1 -1
  194. package/es/theme/index.js +1 -2
  195. package/es/theme/index.js.map +1 -1
  196. package/es/tree/index.js +1 -2
  197. package/es/tree/index.js.map +1 -1
  198. package/es/tree/register.js +1 -2
  199. package/es/tree/register.js.map +1 -1
  200. package/es/tree/style.js +1 -2
  201. package/es/tree/style.js.map +1 -1
  202. package/es/tree/type.js +1 -2
  203. package/es/tree/type.js.map +1 -1
  204. package/es/typography/index.js +1 -2
  205. package/es/typography/index.js.map +1 -1
  206. package/lib/avatar/favicon.svg +0 -0
  207. package/lib/avatar/group.js +18 -19
  208. package/lib/avatar/group.js.map +1 -1
  209. package/lib/avatar/index.js +3 -4
  210. package/lib/avatar/index.js.map +1 -1
  211. package/lib/avatar/style.js +3 -4
  212. package/lib/avatar/style.js.map +1 -1
  213. package/lib/back-top/index.js +1 -2
  214. package/lib/back-top/index.js.map +1 -1
  215. package/lib/back-top/style.js +1 -2
  216. package/lib/back-top/style.js.map +1 -1
  217. package/lib/basic-config/index.js +1 -2
  218. package/lib/basic-config/index.js.map +1 -1
  219. package/lib/button/index.js +1 -2
  220. package/lib/button/index.js.map +1 -1
  221. package/lib/button/style.js +1 -2
  222. package/lib/button/style.js.map +1 -1
  223. package/lib/capture-screen/index.js +1 -2
  224. package/lib/capture-screen/index.js.map +1 -1
  225. package/lib/capture-screen/style.js +1 -2
  226. package/lib/capture-screen/style.js.map +1 -1
  227. package/lib/carousel/index.js +1 -2
  228. package/lib/carousel/index.js.map +1 -1
  229. package/lib/carousel/style.js +1 -2
  230. package/lib/carousel/style.js.map +1 -1
  231. package/lib/checkbox/index.js +1 -2
  232. package/lib/checkbox/index.js.map +1 -1
  233. package/lib/checkbox/style.js +1 -2
  234. package/lib/checkbox/style.js.map +1 -1
  235. package/lib/code/index.d.ts +6 -2
  236. package/lib/code/index.js +1 -2
  237. package/lib/code/index.js.map +1 -1
  238. package/lib/code/style.js +26 -27
  239. package/lib/code/style.js.map +1 -1
  240. package/lib/code/worker.js +2 -3
  241. package/lib/code/worker.js.map +1 -1
  242. package/lib/color-palette/index.js +1 -2
  243. package/lib/color-palette/index.js.map +1 -1
  244. package/lib/color-palette/style.js +3 -4
  245. package/lib/color-palette/style.js.map +1 -1
  246. package/lib/color-picker/index.js +1 -2
  247. package/lib/color-picker/index.js.map +1 -1
  248. package/lib/color-picker/style.js +1 -2
  249. package/lib/color-picker/style.js.map +1 -1
  250. package/lib/cron/begin-interval.js +1 -2
  251. package/lib/cron/begin-interval.js.map +1 -1
  252. package/lib/cron/day.js +1 -2
  253. package/lib/cron/day.js.map +1 -1
  254. package/lib/cron/hour.js +1 -2
  255. package/lib/cron/hour.js.map +1 -1
  256. package/lib/cron/index.js +1 -2
  257. package/lib/cron/index.js.map +1 -1
  258. package/lib/cron/item.js +1 -2
  259. package/lib/cron/item.js.map +1 -1
  260. package/lib/cron/minute.js +1 -2
  261. package/lib/cron/minute.js.map +1 -1
  262. package/lib/cron/month.js +1 -2
  263. package/lib/cron/month.js.map +1 -1
  264. package/lib/cron/period.js +1 -2
  265. package/lib/cron/period.js.map +1 -1
  266. package/lib/cron/second.js +1 -2
  267. package/lib/cron/second.js.map +1 -1
  268. package/lib/cron/some.js +1 -2
  269. package/lib/cron/some.js.map +1 -1
  270. package/lib/cron/style.js +4 -5
  271. package/lib/cron/style.js.map +1 -1
  272. package/lib/cron/week.js +1 -2
  273. package/lib/cron/week.js.map +1 -1
  274. package/lib/cron/year.js +1 -2
  275. package/lib/cron/year.js.map +1 -1
  276. package/lib/date-picker/date.js +1 -2
  277. package/lib/date-picker/date.js.map +1 -1
  278. package/lib/date-picker/dayjs.js +1 -2
  279. package/lib/date-picker/dayjs.js.map +1 -1
  280. package/lib/date-picker/index.js +1 -2
  281. package/lib/date-picker/index.js.map +1 -1
  282. package/lib/date-picker/month.js +1 -2
  283. package/lib/date-picker/month.js.map +1 -1
  284. package/lib/date-picker/panel.js +1 -2
  285. package/lib/date-picker/panel.js.map +1 -1
  286. package/lib/date-picker/style.js +1 -2
  287. package/lib/date-picker/style.js.map +1 -1
  288. package/lib/date-picker/time.js +1 -2
  289. package/lib/date-picker/time.js.map +1 -1
  290. package/lib/date-picker/year.js +1 -2
  291. package/lib/date-picker/year.js.map +1 -1
  292. package/lib/dropdown/index.js +1 -2
  293. package/lib/dropdown/index.js.map +1 -1
  294. package/lib/empty/index.js +1 -2
  295. package/lib/empty/index.js.map +1 -1
  296. package/lib/from-schema/index.js +1 -2
  297. package/lib/from-schema/index.js.map +1 -1
  298. package/lib/get-options/index.js +1 -2
  299. package/lib/get-options/index.js.map +1 -1
  300. package/lib/highlight-text/index.js +2 -3
  301. package/lib/highlight-text/index.js.map +1 -1
  302. package/lib/img/index.js +1 -2
  303. package/lib/img/index.js.map +1 -1
  304. package/lib/img/lazy.js +1 -2
  305. package/lib/img/lazy.js.map +1 -1
  306. package/lib/img/style.js +3 -4
  307. package/lib/img/style.js.map +1 -1
  308. package/lib/index.js +1 -2
  309. package/lib/index.js.map +1 -1
  310. package/lib/input/index.js +1 -2
  311. package/lib/input/index.js.map +1 -1
  312. package/lib/input/style.js +1 -2
  313. package/lib/input/style.js.map +1 -1
  314. package/lib/input-number/index.js +2 -3
  315. package/lib/input-number/index.js.map +1 -1
  316. package/lib/katex/index.js +1 -2
  317. package/lib/katex/index.js.map +1 -1
  318. package/lib/md/common.d.ts +4 -0
  319. package/lib/md/common.js +1 -0
  320. package/lib/md/common.js.map +1 -0
  321. package/lib/md/index.d.ts +1 -0
  322. package/lib/md/index.js +1 -2
  323. package/lib/md/index.js.map +1 -1
  324. package/lib/md/worker.d.ts +9 -1
  325. package/lib/md/worker.js +1 -2
  326. package/lib/md/worker.js.map +1 -1
  327. package/lib/md-style/index.js +2 -3
  328. package/lib/md-style/index.js.map +1 -1
  329. package/lib/menu/index.js +1 -2
  330. package/lib/menu/index.js.map +1 -1
  331. package/lib/menu/style.js +1 -2
  332. package/lib/menu/style.js.map +1 -1
  333. package/lib/modal/hooks.js +1 -2
  334. package/lib/modal/hooks.js.map +1 -1
  335. package/lib/modal/index.js +1 -2
  336. package/lib/modal/index.js.map +1 -1
  337. package/lib/modal/store.js +1 -2
  338. package/lib/modal/store.js.map +1 -1
  339. package/lib/modal/style.js +1 -2
  340. package/lib/modal/style.js.map +1 -1
  341. package/lib/notification/index.js +1 -2
  342. package/lib/notification/index.js.map +1 -1
  343. package/lib/notification/notification.js +1 -2
  344. package/lib/notification/notification.js.map +1 -1
  345. package/lib/notification/queque.js +1 -2
  346. package/lib/notification/queque.js.map +1 -1
  347. package/lib/notification/styles.js +1 -2
  348. package/lib/notification/styles.js.map +1 -1
  349. package/lib/pagination/index.js +1 -2
  350. package/lib/pagination/index.js.map +1 -1
  351. package/lib/pagination/styles.js +1 -2
  352. package/lib/pagination/styles.js.map +1 -1
  353. package/lib/popover/index.js +1 -2
  354. package/lib/popover/index.js.map +1 -1
  355. package/lib/popover/style.js +3 -4
  356. package/lib/popover/style.js.map +1 -1
  357. package/lib/prism/index.d.ts +0 -1
  358. package/lib/prism/index.js +1 -2
  359. package/lib/prism/index.js.map +1 -1
  360. package/lib/provider/index.js +1 -2
  361. package/lib/provider/index.js.map +1 -1
  362. package/lib/qrcode/index.js +1 -2
  363. package/lib/qrcode/index.js.map +1 -1
  364. package/lib/qrcode/qrcode.js +1 -2
  365. package/lib/qrcode/qrcode.js.map +1 -1
  366. package/lib/radio/index.js +1 -2
  367. package/lib/radio/index.js.map +1 -1
  368. package/lib/radio/style.js +1 -2
  369. package/lib/radio/style.js.map +1 -1
  370. package/lib/segmented/index.js +1 -12
  371. package/lib/segmented/index.js.map +1 -1
  372. package/lib/segmented/style.js +1 -2
  373. package/lib/segmented/style.js.map +1 -1
  374. package/lib/select/index.js +1 -2
  375. package/lib/select/index.js.map +1 -1
  376. package/lib/select/style.js +1 -2
  377. package/lib/select/style.js.map +1 -1
  378. package/lib/skeleton/index.js +2 -25
  379. package/lib/skeleton/index.js.map +1 -1
  380. package/lib/spin/index.js +2 -3
  381. package/lib/spin/index.js.map +1 -1
  382. package/lib/switch/index.js +1 -2
  383. package/lib/switch/index.js.map +1 -1
  384. package/lib/switch/style.js +1 -2
  385. package/lib/switch/style.js.map +1 -1
  386. package/lib/table/index.js +1 -2
  387. package/lib/table/index.js.map +1 -1
  388. package/lib/table/styles.js +1 -2
  389. package/lib/table/styles.js.map +1 -1
  390. package/lib/tabs/index.js +1 -12
  391. package/lib/tabs/index.js.map +1 -1
  392. package/lib/tabs/style.d.ts +2 -2
  393. package/lib/tabs/style.js +32 -33
  394. package/lib/tabs/style.js.map +1 -1
  395. package/lib/tag/index.js +3 -4
  396. package/lib/tag/index.js.map +1 -1
  397. package/lib/tag/style.js +1 -2
  398. package/lib/tag/style.js.map +1 -1
  399. package/lib/theme/index.js +1 -2
  400. package/lib/theme/index.js.map +1 -1
  401. package/lib/tree/index.js +1 -2
  402. package/lib/tree/index.js.map +1 -1
  403. package/lib/tree/register.js +1 -2
  404. package/lib/tree/register.js.map +1 -1
  405. package/lib/tree/style.js +1 -2
  406. package/lib/tree/style.js.map +1 -1
  407. package/lib/tree/type.js +1 -2
  408. package/lib/tree/type.js.map +1 -1
  409. package/lib/typography/index.js +7 -8
  410. package/lib/typography/index.js.map +1 -1
  411. package/package.json +8 -8
  412. package/umd/index.js +4187 -1
  413. package/umd/js/074a85150a9f6a97.js +1 -0
  414. package/es/cron/api.md +0 -27
  415. package/lib/cron/api.md +0 -27
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/tabs/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n For,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n untrack,\n} from 'solid-js';\nimport { isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BaseOption, BasicConfig, ButtonElement, CustomElement } from '..';\nimport { clearAttribute, FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme, { block } from '../theme';\n\nimport { addCss, btnCss, style } from './style';\n\nimport '../button';\n\nexport interface TabsProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值(指定值时为受控模式,配合onChange使用) */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 选项数据 */\n items?: (TabOption | string)[];\n /** 标签页居中 */\n centered?: boolean;\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 标签页的显示类型\n * @default 'line'\n */\n type?: 'line' | 'card';\n /** 值修改时的回调方法 */\n onChange?(val: string, item: TabOption, e: Event): void;\n /** 显示添加按钮 */\n add?: boolean;\n /** 删除和添加时的回调方法 */\n onEdit?: (type: 'add' | 'remove', item: TabOption, e: Event) => void;\n /** 给标签页左右添加的附加内容 */\n extra?: {\n left?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n right?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n };\n /** 动画\n * @since 2.8.2\n * @default false\n */\n animated?: boolean;\n}\n\nexport interface TabOption extends Omit<BaseOption, 'options'> {\n /** 内容 */\n content?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n /** 标签可关闭 */\n closable?: boolean;\n}\n\nfunction Tabs(props: TabsProps) {\n const { baseStyle, isDark } = theme;\n let box: HTMLDivElement | undefined;\n let add: ButtonElement | undefined;\n const [value, setValue] = createSignal<string | number>();\n const [offsetStyle, setOffsetStyle] = createSignal('');\n const [wrap, setWrap] = createSignal({ left: false, right: false });\n let wrapRef: HTMLDivElement | undefined;\n\n const cssVar = createMemo(() => {\n if (isDark()) {\n return css`\n :host {\n --tab-current-bg: var(--component-bg);\n --tab-bg: rgb(255 255 255 / 4%);\n }\n `;\n }\n\n return css`\n :host {\n --tab-bg: var(--primary-details-bg);\n --tab-current-bg: var(--component-bg);\n }\n `;\n });\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n const items = createMemo<TabOption[]>(() => {\n return getOptions(props.items, fieldNames());\n });\n const current = createMemo(() => {\n return items().find((o) => o[fieldNames().value] === value());\n });\n\n function onChange(item: TabOption, e: Event) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value];\n\n if (props.value === void 0) {\n setValue(next);\n }\n if (isFunction(props.onChange)) {\n props.onChange(next, item, e);\n }\n }\n }\n function onKeyUp(item: TabOption, e: KeyboardEvent) {\n if (e.key === 'Enter') {\n onChange(item, e);\n }\n }\n function handleEdit(type: 'remove' | 'add', item: TabOption | undefined, e: Event) {\n e.stopPropagation();\n e.preventDefault();\n if (isFunction(props.onEdit)) {\n props.onEdit(type, item, e);\n }\n }\n function handleWheel(e?: WheelEvent) {\n if (wrapRef) {\n const pwid = box!.offsetWidth;\n const addWid = add?.offsetWidth || 0;\n const scrollWidth = wrapRef.scrollWidth;\n\n if (scrollWidth > pwid - addWid) {\n let deltaY = 0;\n\n if (e) {\n if (!passiveSupported) {\n e.stopPropagation();\n e.preventDefault();\n }\n deltaY = e.deltaX !== 0 ? e.deltaX : e.deltaY;\n }\n const nl = wrapRef.scrollLeft + deltaY;\n\n wrapRef.scrollTo({\n left: nl,\n });\n setWrap({\n left: nl > 0,\n right: scrollWidth > nl + wrapRef.offsetWidth,\n });\n } else {\n setWrap({\n left: false,\n right: false,\n });\n }\n const el = untrack(current)?.ref;\n\n setOffsetStyle(\n `.tabs {--w: ${el.offsetWidth}px;--left: ${\n el.offsetLeft - wrapRef.scrollLeft + wrapRef.offsetLeft\n }px;--s:${wrapRef.scrollLeft}px}`,\n );\n }\n }\n createEffect(() => {\n let _val = untrack(value);\n\n if (props.value !== void 0) {\n _val = props.value;\n } else if (props.defaultValue !== void 0) {\n _val = props.defaultValue;\n } else if (items()[0]) {\n _val = items()[0][fieldNames().value];\n }\n if (_val !== untrack(value)) {\n setValue(_val);\n }\n });\n\n createEffect(() => {\n let timer: NodeJS.Timeout | undefined, whellTimer: NodeJS.Timeout | undefined;\n const el = current()?.ref;\n\n if (el) {\n timer = setTimeout(() => {\n clearTimeout(timer);\n if (wrapRef) {\n setWrap({\n left: false,\n right: false,\n });\n wrapRef.scrollTo({\n left: el.offsetLeft - wrapRef.offsetLeft,\n behavior: 'smooth',\n });\n }\n\n setOffsetStyle(\n `.tabs {--w: ${el.offsetWidth}px;--left: ${\n el.offsetLeft - wrapRef!.scrollLeft + wrapRef!.offsetLeft\n }px;--s:${wrapRef!.scrollLeft}px}`,\n );\n whellTimer = setTimeout(() => {\n clearTimeout(whellTimer);\n handleWheel();\n }, 300);\n }, 0);\n } else {\n setOffsetStyle('');\n }\n onCleanup(() => {\n clearTimeout(timer);\n clearTimeout(whellTimer);\n });\n });\n const [ani, setAni] = createSignal('slide-in');\n\n createEffect(() => {\n if (props.animated) {\n setAni('slide-in');\n }\n return current()?.content;\n });\n const left = createMemo(() =>\n isFunction(props.extra?.left) ? (props.extra.left() as JSX.Element) : props.extra?.left,\n );\n const right = createMemo(() =>\n isFunction(props.extra?.right) ? (props.extra.right() as JSX.Element) : props.extra?.right,\n );\n const content = createMemo(() => {\n const _content = current()?.content;\n\n return isFunction(_content) ? (_content() as JSX.Element) : _content;\n });\n\n function onAnimationEnd() {\n if (props.animated) {\n setAni('');\n }\n }\n onMount(() => {\n box?.addEventListener('wheel', handleWheel, {\n passive: passiveSupported,\n });\n });\n onCleanup(() => {\n box?.removeEventListener('wheel', handleWheel, false);\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={cssVar()} />\n <style textContent={style} />\n <style textContent={offsetStyle()} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <div\n ref={box}\n class={cx('tabs', props.type, props.class)}\n classList={{\n centered: props.centered,\n }}\n aria-disabled={props.disabled}\n >\n <Show when={left()}>{left()}</Show>\n <div\n ref={wrapRef}\n class=\"items\"\n classList={{\n 'warp-left': wrap().left,\n 'warp-right': wrap().right,\n }}\n >\n <For each={items()}>\n {(item, i) => {\n const readOnly = createMemo(() => props.disabled || item.disabled);\n const { icon, value: val, label } = fieldNames();\n const isActive = createMemo(() => value() !== void 0 && item[val] === value());\n\n return (\n <n-button\n link={true}\n type={isActive() ? 'primary' : 'default'}\n class={cx('tab', item.class)}\n classList={{\n active: isActive(),\n 'first-active': isActive() && i() === 0,\n }}\n tabindex={readOnly() ? -1 : 0}\n onKeyUp={onKeyUp.bind(null, item)}\n onClick={onChange.bind(null, item)}\n disabled={readOnly()}\n icon={item[icon]}\n ref={items()[i()].ref}\n css={btnCss}\n >\n {item[label]}\n <Show when={item.closable}>\n <span class=\"remove\" onClick={handleEdit.bind(null, 'remove', item)}>\n ⛌\n </span>\n </Show>\n </n-button>\n );\n }}\n </For>\n </div>\n <Show when={props.add}>\n <n-button\n ref={add}\n link={true}\n class=\"tab add\"\n css={addCss}\n onClick={handleEdit.bind(null, 'add', void 0)}\n >\n +\n </n-button>\n </Show>\n <Show when={right()}>{right()}</Show>\n </div>\n <Show when={current()?.content}>\n <div\n class=\"content\"\n classList={{\n [ani()]: props.animated,\n }}\n onAnimationEnd={onAnimationEnd}\n >\n {content()}\n </div>\n </Show>\n </>\n );\n}\n\nexport type TabsElement = CustomElement<TabsProps, 'onChange' | 'onEdit'>;\n\ncustomElement<TabsProps>(\n 'n-tabs',\n {\n class: void 0,\n css: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n centered: void 0,\n items: [],\n type: 'line' as TabsProps['type'],\n fieldNames: void 0,\n add: void 0,\n extra: void 0,\n animated: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onChange(next: string, item: TabOption, e: Event) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [next, item, e],\n }),\n );\n },\n onEdit(type: 'add' | 'remove', item: TabOption, e: Event) {\n el.dispatchEvent(\n new CustomEvent('edit', {\n detail: [type, item, e],\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['css', 'fieldNames', 'items', 'extra']);\n });\n return (\n <>\n <style textContent={block} />\n <Tabs {...props} />\n </>\n );\n },\n);\nexport default Tabs;\n"],"names":["Tabs","props","box","add","wrapRef","baseStyle","isDark","theme","value","setValue","createSignal","offsetStyle","setOffsetStyle","wrap","setWrap","left","right","cssVar","createMemo","css","fieldNames","Object","assign","FieldName","items","getOptions","current","find","o","onChange","item","e","disabled","next","isFunction","onKeyUp","key","handleEdit","type","stopPropagation","preventDefault","onEdit","handleWheel","pwid","offsetWidth","addWid","scrollWidth","deltaY","passiveSupported","deltaX","nl","scrollLeft","scrollTo","el","untrack","ref","offsetLeft","createEffect","_val","defaultValue","timer","whellTimer","setTimeout","clearTimeout","behavior","onCleanup","ani","setAni","animated","content","extra","_content","onAnimationEnd","onMount","addEventListener","passive","removeEventListener","style","Show","For","i","readOnly","icon","val","label","isActive","bind","btnCss","closable","cx","class","addCss","centered","customElement","_","opt","element","mergeProps","dispatchEvent","CustomEvent","detail","clearAttribute","block"],"mappings":"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"}
1
+ {"version":3,"sources":["components/tabs/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n For,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n untrack,\n} from 'solid-js';\nimport { isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BaseOption, BasicConfig, ButtonElement, CustomElement } from '..';\nimport { clearAttribute, FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme, { block } from '../theme';\n\nimport { addCss, btnCss, style } from './style';\n\nimport '../button';\n\nexport interface TabsProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值(指定值时为受控模式,配合onChange使用) */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 选项数据 */\n items?: (TabOption | string)[];\n /** 标签页居中 */\n centered?: boolean;\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 标签页的显示类型\n * @default 'line'\n */\n type?: 'line' | 'card';\n /** 值修改时的回调方法 */\n onChange?(val: string, item: TabOption, e: Event): void;\n /** 显示添加按钮 */\n add?: boolean;\n /** 删除和添加时的回调方法 */\n onEdit?: (type: 'add' | 'remove', item: TabOption, e: Event) => void;\n /** 给标签页左右添加的附加内容 */\n extra?: {\n left?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n right?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n };\n /** 动画\n * @since 2.8.2\n * @default false\n */\n animated?: boolean;\n}\n\nexport interface TabOption extends Omit<BaseOption, 'options'> {\n /** 内容 */\n content?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n /** 标签可关闭 */\n closable?: boolean;\n}\n\nfunction Tabs(props: TabsProps) {\n const { baseStyle, isDark } = theme;\n let box: HTMLDivElement | undefined;\n let add: ButtonElement | undefined;\n const [value, setValue] = createSignal<string | number>();\n const [offsetStyle, setOffsetStyle] = createSignal('');\n const [wrap, setWrap] = createSignal({ left: false, right: false });\n let wrapRef: HTMLDivElement | undefined;\n\n const cssVar = createMemo(() => {\n const dark = isDark();\n\n return css({\n ':host': {\n '--tab-bg': dark ? 'rgb(255 255 255 / 4%)' : 'var(--primary-details-bg)',\n '--tab-current-bg': dark ? 'var(--component-bg)' : 'var(--component-bg)',\n },\n });\n });\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n const items = createMemo<TabOption[]>(() => {\n return getOptions(props.items, fieldNames());\n });\n const current = createMemo(() => {\n return items().find((o) => o[fieldNames().value] === value());\n });\n\n function onChange(item: TabOption, e: Event) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value];\n\n if (props.value === void 0) {\n setValue(next);\n }\n if (isFunction(props.onChange)) {\n props.onChange(next, item, e);\n }\n }\n }\n function onKeyUp(item: TabOption, e: KeyboardEvent) {\n if (e.key === 'Enter') {\n onChange(item, e);\n }\n }\n function handleEdit(type: 'remove' | 'add', item: TabOption | undefined, e: Event) {\n e.stopPropagation();\n e.preventDefault();\n if (isFunction(props.onEdit)) {\n props.onEdit(type, item, e);\n }\n }\n function handleWheel(e?: WheelEvent) {\n if (wrapRef) {\n const pwid = box!.offsetWidth;\n const addWid = add?.offsetWidth || 0;\n const scrollWidth = wrapRef.scrollWidth;\n\n if (scrollWidth > pwid - addWid) {\n let deltaY = 0;\n\n if (e) {\n if (!passiveSupported) {\n e.stopPropagation();\n e.preventDefault();\n }\n deltaY = e.deltaX !== 0 ? e.deltaX : e.deltaY;\n }\n const nl = wrapRef.scrollLeft + deltaY;\n\n wrapRef.scrollTo({\n left: nl,\n });\n setWrap({\n left: nl > 0,\n right: scrollWidth > nl + wrapRef.offsetWidth,\n });\n } else {\n setWrap({\n left: false,\n right: false,\n });\n }\n const el = untrack(current)?.ref;\n\n setOffsetStyle(\n `.tabs {--w: ${el.offsetWidth}px;--left: ${\n el.offsetLeft - wrapRef.scrollLeft + wrapRef.offsetLeft\n }px;--s:${wrapRef.scrollLeft}px}`,\n );\n }\n }\n createEffect(() => {\n let _val = untrack(value);\n\n if (props.value !== void 0) {\n _val = props.value;\n } else if (props.defaultValue !== void 0) {\n _val = props.defaultValue;\n } else if (items()[0]) {\n _val = items()[0][fieldNames().value];\n }\n if (_val !== untrack(value)) {\n setValue(_val);\n }\n });\n\n createEffect(() => {\n let timer: NodeJS.Timeout | undefined, whellTimer: NodeJS.Timeout | undefined;\n const el = current()?.ref;\n\n if (el) {\n timer = setTimeout(() => {\n clearTimeout(timer);\n if (wrapRef) {\n setWrap({\n left: false,\n right: false,\n });\n wrapRef.scrollTo({\n left: el.offsetLeft - wrapRef.offsetLeft,\n behavior: 'smooth',\n });\n }\n\n setOffsetStyle(\n `.tabs {--w: ${el.offsetWidth}px;--left: ${\n el.offsetLeft - wrapRef!.scrollLeft + wrapRef!.offsetLeft\n }px;--s:${wrapRef!.scrollLeft}px}`,\n );\n whellTimer = setTimeout(() => {\n clearTimeout(whellTimer);\n handleWheel();\n }, 300);\n }, 0);\n } else {\n setOffsetStyle('');\n }\n onCleanup(() => {\n clearTimeout(timer);\n clearTimeout(whellTimer);\n });\n });\n const [ani, setAni] = createSignal('slide-in');\n\n createEffect(() => {\n if (props.animated) {\n setAni('slide-in');\n }\n return current()?.content;\n });\n const left = createMemo(() =>\n isFunction(props.extra?.left) ? (props.extra.left() as JSX.Element) : props.extra?.left,\n );\n const right = createMemo(() =>\n isFunction(props.extra?.right) ? (props.extra.right() as JSX.Element) : props.extra?.right,\n );\n const content = createMemo(() => {\n const _content = current()?.content;\n\n return isFunction(_content) ? (_content() as JSX.Element) : _content;\n });\n\n function onAnimationEnd() {\n if (props.animated) {\n setAni('');\n }\n }\n onMount(() => {\n box?.addEventListener('wheel', handleWheel, {\n passive: passiveSupported,\n });\n });\n onCleanup(() => {\n box?.removeEventListener('wheel', handleWheel, false);\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={cssVar()} />\n <style textContent={style} />\n <style textContent={offsetStyle()} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <div\n ref={box}\n class={cx('tabs', props.type, props.class)}\n classList={{\n centered: props.centered,\n }}\n aria-disabled={props.disabled}\n >\n <Show when={left()}>{left()}</Show>\n <div\n ref={wrapRef}\n class=\"items\"\n classList={{\n 'warp-left': wrap().left,\n 'warp-right': wrap().right,\n }}\n >\n <For each={items()}>\n {(item, i) => {\n const readOnly = createMemo(() => props.disabled || item.disabled);\n const { icon, value: val, label } = fieldNames();\n const isActive = createMemo(() => value() !== void 0 && item[val] === value());\n\n return (\n <n-button\n link={true}\n type={isActive() ? 'primary' : 'default'}\n class={cx('tab', item.class)}\n classList={{\n active: isActive(),\n 'first-active': isActive() && i() === 0,\n }}\n tabindex={readOnly() ? -1 : 0}\n onKeyUp={onKeyUp.bind(null, item)}\n onClick={onChange.bind(null, item)}\n disabled={readOnly()}\n icon={item[icon]}\n ref={items()[i()].ref}\n css={btnCss}\n >\n {item[label]}\n <Show when={item.closable}>\n <span class=\"remove\" onClick={handleEdit.bind(null, 'remove', item)}>\n ⛌\n </span>\n </Show>\n </n-button>\n );\n }}\n </For>\n </div>\n <Show when={props.add}>\n <n-button\n ref={add}\n link={true}\n class=\"tab add\"\n css={addCss}\n onClick={handleEdit.bind(null, 'add', void 0)}\n >\n +\n </n-button>\n </Show>\n <Show when={right()}>{right()}</Show>\n </div>\n <Show when={current()?.content}>\n <div\n class=\"content\"\n classList={{\n [ani()]: props.animated,\n }}\n onAnimationEnd={onAnimationEnd}\n >\n {content()}\n </div>\n </Show>\n </>\n );\n}\n\nexport type TabsElement = CustomElement<TabsProps, 'onChange' | 'onEdit'>;\n\ncustomElement<TabsProps>(\n 'n-tabs',\n {\n class: void 0,\n css: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n centered: void 0,\n items: [],\n type: 'line' as TabsProps['type'],\n fieldNames: void 0,\n add: void 0,\n extra: void 0,\n animated: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onChange(next: string, item: TabOption, e: Event) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [next, item, e],\n }),\n );\n },\n onEdit(type: 'add' | 'remove', item: TabOption, e: Event) {\n el.dispatchEvent(\n new CustomEvent('edit', {\n detail: [type, item, e],\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['css', 'fieldNames', 'items', 'extra']);\n });\n return (\n <>\n <style textContent={block} />\n <Tabs {...props} />\n </>\n );\n },\n);\nexport default Tabs;\n"],"names":["Tabs","props","box","add","wrapRef","baseStyle","isDark","theme","value","setValue","createSignal","offsetStyle","setOffsetStyle","wrap","setWrap","left","right","cssVar","createMemo","dark","css","fieldNames","Object","assign","FieldName","items","getOptions","current","find","o","onChange","item","e","disabled","next","isFunction","onKeyUp","key","handleEdit","type","stopPropagation","preventDefault","onEdit","handleWheel","pwid","offsetWidth","addWid","scrollWidth","deltaY","passiveSupported","deltaX","nl","scrollLeft","scrollTo","el","untrack","ref","offsetLeft","createEffect","_val","defaultValue","timer","whellTimer","setTimeout","clearTimeout","behavior","onCleanup","ani","setAni","animated","content","extra","_content","onAnimationEnd","onMount","addEventListener","passive","removeEventListener","style","Show","For","i","readOnly","icon","val","label","isActive","bind","btnCss","closable","cx","class","addCss","centered","customElement","_","opt","element","mergeProps","dispatchEvent","CustomEvent","detail","clearAttribute","block"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export declare const style: string;
2
- export declare const btnCss: string;
3
1
  export declare const addCss: string;
2
+ export declare const btnCss: string;
3
+ export declare const style: string;
package/lib/tabs/style.js CHANGED
@@ -1,4 +1,26 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(i,n){for(var r in n)Object.defineProperty(i,r,{enumerable:!0,get:n[r]})}(exports,{addCss:function(){return t},btnCss:function(){return r},style:function(){return n}});const i=require("@moneko/css"),n=(0,i.css)`
1
+ "use strict";function i(i,n){for(var r in n)Object.defineProperty(i,r,{enumerable:!0,get:n[r]})}Object.defineProperty(exports,"__esModule",{value:!0}),i(exports,{addCss:function(){return r},btnCss:function(){return t},style:function(){return o}});const n=require("@moneko/css"),r=(0,n.css)`
2
+ .btn {
3
+ padding: 4px;
4
+ font-size: var(--font-size-lg);
5
+ }
6
+ `,t=(0,n.css)`
7
+ .remove {
8
+ display: inline-block;
9
+ font-size: 12px;
10
+ font-weight: 400;
11
+ color: var(--text-secondary);
12
+ transition: color var(--transition-timing-function) var(--transition-duration);
13
+ margin-inline-start: 8px;
14
+
15
+ &:hover {
16
+ color: var(--error-color);
17
+ }
18
+ }
19
+
20
+ .btn:has(.remove) {
21
+ padding-inline-end: 10px;
22
+ }
23
+ `,o=(0,n.css)`
2
24
  :host {
3
25
  display: block;
4
26
  font-size: var(--font-size);
@@ -44,18 +66,6 @@
44
66
  animation: slide-in var(--transition-timing-function) var(--transition-duration);
45
67
  }
46
68
 
47
- @keyframes slide-in {
48
- 0% {
49
- opacity: 0;
50
- transform: translateY(16px);
51
- }
52
-
53
- 100% {
54
- opacity: 1;
55
- transform: translateY(0);
56
- }
57
- }
58
-
59
69
  .items {
60
70
  position: relative;
61
71
  display: flex;
@@ -140,27 +150,16 @@
140
150
  .warp-right::after {
141
151
  opacity: 1;
142
152
  }
143
- `,r=(0,i.css)`
144
- .remove {
145
- display: inline-block;
146
- font-size: 12px;
147
- font-weight: 400;
148
- color: var(--text-secondary);
149
- transition: color var(--transition-timing-function) var(--transition-duration);
150
- margin-inline-start: 8px;
151
153
 
152
- &:hover {
153
- color: var(--error-color);
154
+ @keyframes slide-in {
155
+ 0% {
156
+ opacity: 0;
157
+ transform: translateY(16px);
154
158
  }
155
- }
156
159
 
157
- .btn:has(.remove) {
158
- padding-inline-end: 10px;
159
- }
160
- `,t=(0,i.css)`
161
- .btn {
162
- padding: 4px;
163
- font-size: var(--font-size-lg);
160
+ 100% {
161
+ opacity: 1;
162
+ transform: translateY(0);
163
+ }
164
164
  }
165
- `;
166
- //# sourceMappingURL=style.js.map
165
+ `;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/tabs/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n :host {\n display: block;\n font-size: var(--font-size);\n }\n\n [aria-disabled='true'] {\n --primary-color: var(--disable-color);\n }\n\n .tabs {\n position: relative;\n display: flex;\n align-items: center;\n gap: 4px;\n box-sizing: border-box;\n max-inline-size: 100%;\n\n &::before {\n position: absolute;\n inset-block-end: 0;\n inset-inline-start: 0;\n content: '';\n display: block;\n inline-size: 100%;\n border-block-end: var(--border-base);\n }\n }\n\n .centered {\n justify-content: center;\n }\n\n .tab {\n cursor: pointer;\n position: relative;\n }\n\n .content {\n padding: 16px 0;\n }\n\n .slide-in {\n animation: slide-in var(--transition-timing-function) var(--transition-duration);\n }\n\n @keyframes slide-in {\n 0% {\n opacity: 0;\n transform: translateY(16px);\n }\n\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .items {\n position: relative;\n display: flex;\n column-gap: 4px;\n max-inline-size: calc(100% - 38px);\n overflow-x: scroll;\n\n &::after,\n &::before {\n inset-block: 0;\n inline-size: 30px;\n position: absolute;\n z-index: 1;\n opacity: 0;\n transition: opacity var(--transition-duration);\n content: '';\n pointer-events: none;\n }\n\n &::before {\n inset-inline-start: var(--s, 0);\n box-shadow: inset 10px 0 8px -8px rgb(0 0 0 / 8%);\n }\n\n &::after {\n inset-inline-end: 0;\n transform: translateX(var(--s, 0));\n box-shadow: inset -10px 0 8px -8px rgb(0 0 0 / 8%);\n }\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .line {\n &::after {\n position: absolute;\n display: block;\n border-radius: 1px;\n background-color: var(--primary-color);\n content: '';\n inline-size: var(--w);\n inset-inline-start: var(--left);\n block-size: 2px;\n inset-block-end: -0.5px;\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: inline-size, block-size, inset-inline-start, background-color;\n }\n }\n\n .card {\n gap: 4px;\n\n .tab {\n display: block;\n border: var(--border-base);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n background-color: var(--tab-bg);\n transition:\n border-color var(--transition-timing-function) var(--transition-duration),\n background-color var(--transition-timing-function) var(--transition-duration);\n\n &.active {\n background-color: var(--tab-current-bg);\n border-block-end-color: var(--tab-current-bg);\n }\n }\n }\n\n .tab.add {\n position: sticky;\n background-color: initial;\n inset-inline-end: 0;\n }\n\n .warp-left::before {\n opacity: 1;\n }\n\n .warp-right::after {\n opacity: 1;\n }\n`;\n\nexport const btnCss = css`\n .remove {\n display: inline-block;\n font-size: 12px;\n font-weight: 400;\n color: var(--text-secondary);\n transition: color var(--transition-timing-function) var(--transition-duration);\n margin-inline-start: 8px;\n\n &:hover {\n color: var(--error-color);\n }\n }\n\n .btn:has(.remove) {\n padding-inline-end: 10px;\n }\n`;\n\nexport const addCss = css`\n .btn {\n padding: 4px;\n font-size: var(--font-size-lg);\n }\n`;\n"],"names":["addCss","btnCss","style","css"],"mappings":"+JAqKaA,MAAM,mBAANA,GAnBAC,MAAM,mBAANA,GAhJAC,KAAK,mBAALA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8IzB,CAAC,CAEYF,EAASE,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;AAiB1B,CAAC,CAEYH,EAASG,GAAAA,KAAG,CAAA,CAAC;;;;;AAK1B,CAAC"}
1
+ {"version":3,"sources":["components/tabs/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const addCss = css`\n .btn {\n padding: 4px;\n font-size: var(--font-size-lg);\n }\n`;\n\nexport const btnCss = css`\n .remove {\n display: inline-block;\n font-size: 12px;\n font-weight: 400;\n color: var(--text-secondary);\n transition: color var(--transition-timing-function) var(--transition-duration);\n margin-inline-start: 8px;\n\n &:hover {\n color: var(--error-color);\n }\n }\n\n .btn:has(.remove) {\n padding-inline-end: 10px;\n }\n`;\n\nexport const style = css`\n :host {\n display: block;\n font-size: var(--font-size);\n }\n\n [aria-disabled='true'] {\n --primary-color: var(--disable-color);\n }\n\n .tabs {\n position: relative;\n display: flex;\n align-items: center;\n gap: 4px;\n box-sizing: border-box;\n max-inline-size: 100%;\n\n &::before {\n position: absolute;\n inset-block-end: 0;\n inset-inline-start: 0;\n content: '';\n display: block;\n inline-size: 100%;\n border-block-end: var(--border-base);\n }\n }\n\n .centered {\n justify-content: center;\n }\n\n .tab {\n cursor: pointer;\n position: relative;\n }\n\n .content {\n padding: 16px 0;\n }\n\n .slide-in {\n animation: slide-in var(--transition-timing-function) var(--transition-duration);\n }\n\n .items {\n position: relative;\n display: flex;\n column-gap: 4px;\n max-inline-size: calc(100% - 38px);\n overflow-x: scroll;\n\n &::after,\n &::before {\n inset-block: 0;\n inline-size: 30px;\n position: absolute;\n z-index: 1;\n opacity: 0;\n transition: opacity var(--transition-duration);\n content: '';\n pointer-events: none;\n }\n\n &::before {\n inset-inline-start: var(--s, 0);\n box-shadow: inset 10px 0 8px -8px rgb(0 0 0 / 8%);\n }\n\n &::after {\n inset-inline-end: 0;\n transform: translateX(var(--s, 0));\n box-shadow: inset -10px 0 8px -8px rgb(0 0 0 / 8%);\n }\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .line {\n &::after {\n position: absolute;\n display: block;\n border-radius: 1px;\n background-color: var(--primary-color);\n content: '';\n inline-size: var(--w);\n inset-inline-start: var(--left);\n block-size: 2px;\n inset-block-end: -0.5px;\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: inline-size, block-size, inset-inline-start, background-color;\n }\n }\n\n .card {\n gap: 4px;\n\n .tab {\n display: block;\n border: var(--border-base);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n background-color: var(--tab-bg);\n transition:\n border-color var(--transition-timing-function) var(--transition-duration),\n background-color var(--transition-timing-function) var(--transition-duration);\n\n &.active {\n background-color: var(--tab-current-bg);\n border-block-end-color: var(--tab-current-bg);\n }\n }\n }\n\n .tab.add {\n position: sticky;\n background-color: initial;\n inset-inline-end: 0;\n }\n\n .warp-left::before {\n opacity: 1;\n }\n\n .warp-right::after {\n opacity: 1;\n }\n\n @keyframes slide-in {\n 0% {\n opacity: 0;\n transform: translateY(16px);\n }\n\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n }\n`;\n"],"names":["addCss","btnCss","style","css"],"mappings":"kKAEaA,MAAM,mBAANA,GAOAC,MAAM,mBAANA,GAmBAC,KAAK,mBAALA,qBA5BO,eAEPF,EAASG,GAAAA,KAAG,CAAA,CAAC;;;;;AAK1B,CAAC,CAEYF,EAASE,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;AAiB1B,CAAC,CAEYD,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8IzB,CAAC"}
package/lib/tag/index.js CHANGED
@@ -1,6 +1,5 @@
1
- "use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return h}});const t=require("solid-js/web"),r=require("solid-js"),n=(e=require("@moneko/common/lib/isFunction"))&&e.__esModule?e:{default:e},o=require("@moneko/css"),l=require("solid-element"),s=require("../basic-config"),c=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=a(void 0);if(r&&r.has(e))return r.get(e);var n={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if("default"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var s=o?Object.getOwnPropertyDescriptor(e,l):null;s&&(s.get||s.set)?Object.defineProperty(n,l,s):n[l]=e[l]}return n.default=e,r&&r.set(e,n),n}(require("../theme")),i=require("./style");function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(a=function(e){return e?r:t})(e)}const u=(0,t.template)("<style> "),d=(0,t.template)("<style>"),p=(0,t.template)('<span class="icon">'),f=(0,t.template)('<span class="close">'),m=(0,t.template)("<span>");function g(e){let{baseStyle:l,isDark:s}=c.default,[a,g]=(0,r.splitProps)(e,["class","css","onClose","color","icon","closeIcon","bordered","type","disabled"]),[h,b]=(0,r.createSignal)(!0),v=(0,r.createMemo)(()=>a.color?(0,o.css)`
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return b}});const e=require("solid-js/web"),t=require("solid-js"),r=i(require("@moneko/common/lib/isFunction")),n=require("@moneko/css"),o=require("solid-element"),l=require("../basic-config"),s=u(require("../theme")),c=require("./style");function i(e){return e&&e.__esModule?e:{default:e}}function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(a=function(e){return e?r:t})(e)}function u(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=a(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if("default"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var s=o?Object.getOwnPropertyDescriptor(e,l):null;s&&(s.get||s.set)?Object.defineProperty(n,l,s):n[l]=e[l]}return n.default=e,r&&r.set(e,n),n}const d=(0,e.template)("<style> "),p=(0,e.template)("<style>"),f=(0,e.template)('<span class="icon">'),m=(0,e.template)('<span class="close">'),g=(0,e.template)("<span>");function h(o){let{baseStyle:l,isDark:i}=s.default,[a,u]=(0,t.splitProps)(o,["class","css","onClose","color","icon","closeIcon","bordered","type","disabled"]),[h,b]=(0,t.createSignal)(!0),v=(0,t.createMemo)(()=>a.color?(0,n.css)`
2
2
  :host {
3
- ${(0,c.generateColor)(a.color,{dark:s(),name:"tag-custom"})}
3
+ ${(0,s.generateColor)(a.color,{dark:i(),name:"tag-custom"})}
4
4
  }
5
- `:"");function y(e){(0,n.default)(a.onClose)&&a.onClose(e),b(!1)}return(0,t.createComponent)(r.Show,{get when(){return h()},get children(){return[(()=>{let e=u(),r=e.firstChild;return(0,t.effect)(()=>r.data=l()),e})(),(()=>{let e=u(),r=e.firstChild;return(0,t.effect)(()=>r.data=v()),e})(),(()=>{let e=d();return e.textContent=i.style,e})(),(0,t.createComponent)(r.Show,{get when(){return a.css},get children(){let e=u(),r=e.firstChild;return(0,t.effect)(()=>r.data=(0,o.css)(a.css)),e}}),(()=>{let e=m();return(0,t.spread)(e,(0,t.mergeProps)(g,{get class(){return(0,o.cx)("tag",a.type)},get classList(){return{"tag-custom":!!a.color,bordered:a.bordered,disabled:a.disabled}}}),!1,!0),(0,t.insert)(e,(0,t.createComponent)(r.Show,{get when(){return a.icon},get children(){let e=p();return(0,t.insert)(e,()=>a.icon),e}}),null),(0,t.insert)(e,()=>g.children,null),(0,t.insert)(e,(0,t.createComponent)(r.Show,{get when(){return a.closeIcon},get children(){let e=f();return(0,t.addEventListener)(e,"click",y,!0),(0,t.insert)(e,()=>!0===a.closeIcon?"⛌":a.closeIcon),e}}),null),e})()]}})}(0,l.customElement)("n-tag",{class:void 0,css:void 0,color:void 0,icon:void 0,closeIcon:void 0,onClose:void 0,bordered:!0,disabled:void 0,type:void 0},(e,n)=>{let o=n.element,l=(0,r.mergeProps)({css:o.css,children:[...o.childNodes.values()],onClose(e){o.dispatchEvent(new CustomEvent("close",{detail:e}))}},e);return(0,r.createEffect)(()=>{o.replaceChildren(),(0,s.clearAttribute)(o,["css"])}),[(()=>{let e=d();return e.textContent=c.inline,e})(),(0,t.createComponent)(g,l)]});const h=g;(0,t.delegateEvents)(["click"]);
6
- //# sourceMappingURL=index.js.map
5
+ `:"");function y(e){(0,r.default)(a.onClose)&&a.onClose(e),b(!1)}return(0,e.createComponent)(t.Show,{get when(){return h()},get children(){return[(()=>{let t=d(),r=t.firstChild;return(0,e.effect)(()=>r.data=l()),t})(),(()=>{let t=d(),r=t.firstChild;return(0,e.effect)(()=>r.data=v()),t})(),(()=>{let e=p();return e.textContent=c.style,e})(),(0,e.createComponent)(t.Show,{get when(){return a.css},get children(){let t=d(),r=t.firstChild;return(0,e.effect)(()=>r.data=(0,n.css)(a.css)),t}}),(()=>{let r=g();return(0,e.spread)(r,(0,e.mergeProps)(u,{get class(){return(0,n.cx)("tag",a.type)},get classList(){return{"tag-custom":!!a.color,bordered:a.bordered,disabled:a.disabled}}}),!1,!0),(0,e.insert)(r,(0,e.createComponent)(t.Show,{get when(){return a.icon},get children(){let t=f();return(0,e.insert)(t,()=>a.icon),t}}),null),(0,e.insert)(r,()=>u.children,null),(0,e.insert)(r,(0,e.createComponent)(t.Show,{get when(){return a.closeIcon},get children(){let t=m();return(0,e.addEventListener)(t,"click",y,!0),(0,e.insert)(t,()=>!0===a.closeIcon?"⛌":a.closeIcon),t}}),null),r})()]}})}(0,o.customElement)("n-tag",{class:void 0,css:void 0,color:void 0,icon:void 0,closeIcon:void 0,onClose:void 0,bordered:!0,disabled:void 0,type:void 0},(r,n)=>{let o=n.element,c=(0,t.mergeProps)({css:o.css,children:[...o.childNodes.values()],onClose(e){o.dispatchEvent(new CustomEvent("close",{detail:e}))}},r);return(0,t.createEffect)(()=>{o.replaceChildren(),(0,l.clearAttribute)(o,["css"])}),[(()=>{let e=p();return e.textContent=s.inline,e})(),(0,e.createComponent)(h,c)]});const b=h;(0,e.delegateEvents)(["click"]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/tag/index.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, mergeProps, Show, splitProps } from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { CustomElement } from '..';\nimport { clearAttribute } from '../basic-config';\nimport theme, { generateColor, inline } from '../theme';\n\nimport { style } from './style';\n\nexport interface TagProps {\n /** 自定义样式表 */\n css?: string;\n /** 自定义类名 */\n class?: string;\n /** 自定义颜色 */\n color?: string;\n /** 图标 */\n icon?: JSX.Element;\n /** 内置类型(状态) */\n type?: 'primary' | 'success' | 'error' | 'warning';\n /** 自定义关闭图标 */\n closeIcon?: JSX.Element | boolean;\n /** 显示边框\n * @default true\n */\n bordered?: boolean;\n /** 禁用 */\n disabled?: boolean;\n /** 关闭时的回调方法 */\n onClose?: (e: MouseEvent) => void;\n children?: JSX.Element;\n}\n\nfunction Tag(props: TagProps) {\n const { baseStyle, isDark } = theme;\n const [local, other] = splitProps(props, [\n 'class',\n 'css',\n 'onClose',\n 'color',\n 'icon',\n 'closeIcon',\n 'bordered',\n 'type',\n 'disabled',\n ]);\n const [show, setShow] = createSignal(true);\n\n const customColor = createMemo(() => {\n if (local.color) {\n return css`\n :host {\n ${generateColor(local.color, {\n dark: isDark(),\n name: 'tag-custom',\n })}\n }\n `;\n }\n return '';\n });\n\n function onClose(e: Event) {\n if (isFunction(local.onClose)) {\n local.onClose(e);\n }\n setShow(false);\n }\n\n return (\n <Show when={show()}>\n <style textContent={baseStyle()} />\n <style textContent={customColor()} />\n <style textContent={style} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <span\n {...other}\n class={cx('tag', local.type)}\n classList={{\n 'tag-custom': !!local.color,\n bordered: local.bordered,\n disabled: local.disabled,\n }}\n >\n <Show when={local.icon}>\n <span class=\"icon\">{local.icon}</span>\n </Show>\n {other.children}\n <Show when={local.closeIcon}>\n <span class=\"close\" onClick={onClose}>\n {local.closeIcon === true ? '⛌' : local.closeIcon}\n </span>\n </Show>\n </span>\n </Show>\n );\n}\n\nexport type TagElement = CustomElement<TagProps, 'onClose'>;\n\ncustomElement<TagProps>(\n 'n-tag',\n {\n class: void 0,\n css: void 0,\n color: void 0,\n icon: void 0,\n closeIcon: void 0,\n onClose: void 0,\n bordered: true,\n disabled: void 0,\n type: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n children: [...el.childNodes.values()],\n onClose(e: Event) {\n el.dispatchEvent(\n new CustomEvent('close', {\n detail: e,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.replaceChildren();\n clearAttribute(el, ['css']);\n });\n\n return (\n <>\n <style textContent={inline} />\n <Tag {...props} />\n </>\n );\n },\n);\n\nexport default Tag;\n"],"names":["Tag","props","baseStyle","isDark","theme","local","other","splitProps","show","setShow","createSignal","customColor","createMemo","color","css","generateColor","dark","name","onClose","e","isFunction","Show","style","cx","type","bordered","disabled","icon","children","closeIcon","customElement","class","_","opt","el","element","mergeProps","childNodes","values","dispatchEvent","CustomEvent","detail","createEffect","replaceChildren","clearAttribute","inline"],"mappings":"wGAoJA,+CAAA,+CApJqF,yBAC1D,wEACH,yBACM,2BAGC,yeACc,uBAEvB,qTA0BtB,SAASA,EAAIC,CAAe,EAC1B,GAAM,CAAEC,UAAAA,CAAS,CAAEC,OAAAA,CAAM,CAAE,CAAGC,SAAK,CAC7B,CAACC,EAAOC,EAAM,CAAGC,GAAAA,YAAU,EAACN,EAAO,CACvC,QACA,MACA,UACA,QACA,OACA,YACA,WACA,OACA,WACD,EACK,CAACO,EAAMC,EAAQ,CAAGC,GAAAA,cAAY,EAAC,CAAA,GAE/BC,EAAcC,GAAAA,YAAU,EAAC,IAC7B,AAAIP,EAAMQ,KAAK,CACNC,GAAAA,KAAG,CAAA,CAAC;;UAEP,EAAEC,GAAAA,eAAa,EAACV,EAAMQ,KAAK,CAAE,CAC3BG,KAAMb,IACNc,KAAM,YACR,GAAG;;MAEP,CAAC,CAEI,IAGT,SAASC,EAAQC,CAAQ,EACnBC,GAAAA,SAAU,EAACf,EAAMa,OAAO,GAC1Bb,EAAMa,OAAO,CAACC,GAEhBV,EAAQ,CAAA,EACV,CAEA,4BACGY,MAAI,oBAAOb,wFACUN,wEACAS,gDACAW,OAAK,6BACxBD,MAAI,oBAAOhB,EAAMS,GAAG,wEACCA,GAAAA,KAAG,EAACT,EAAMS,GAAG,8DAG7BR,qBACGiB,GAAAA,IAAE,EAAC,MAAOlB,EAAMmB,IAAI,yBAChB,CACT,aAAc,CAAC,CAACnB,EAAMQ,KAAK,CAC3BY,SAAUpB,EAAMoB,QAAQ,CACxBC,SAAUrB,EAAMqB,QAAQ,AAC1B,iDAECL,MAAI,oBAAOhB,EAAMsB,IAAI,oDACAtB,EAAMsB,IAAI,gCAE/BrB,EAAMsB,QAAQ,4CACdP,MAAI,oBAAOhB,EAAMwB,SAAS,kEACIX,yBAC1Bb,AAAoB,CAAA,IAApBA,EAAMwB,SAAS,CAAY,IAAMxB,EAAMwB,SAAS,sBAM7D,CAIAC,GAAAA,eAAa,EACX,QACA,CACEC,MAAO,KAAK,EACZjB,IAAK,KAAK,EACVD,MAAO,KAAK,EACZc,KAAM,KAAK,EACXE,UAAW,KAAK,EAChBX,QAAS,KAAK,EACdO,SAAU,CAAA,EACVC,SAAU,KAAK,EACfF,KAAM,KAAK,CACb,EACA,CAACQ,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBlC,EAAQmC,GAAAA,YAAU,EACtB,CACEtB,IAAKoB,EAAGpB,GAAG,CACXc,SAAU,IAAIM,EAAGG,UAAU,CAACC,MAAM,GAAG,CACrCpB,QAAQC,CAAQ,EACde,EAAGK,aAAa,CACd,IAAIC,YAAY,QAAS,CACvBC,OAAQtB,CACV,GAEJ,CACF,EACAa,GAQF,MALAU,GAAAA,cAAY,EAAC,KACXR,EAAGS,eAAe,GAClBC,GAAAA,gBAAc,EAACV,EAAI,CAAC,MAAM,CAC5B,yCAIwBW,QAAM,6BACzB7C,EAAQC,GAGf,SAGF,EAAeD"}
1
+ {"version":3,"sources":["components/tag/index.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, mergeProps, Show, splitProps } from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { CustomElement } from '..';\nimport { clearAttribute } from '../basic-config';\nimport theme, { generateColor, inline } from '../theme';\n\nimport { style } from './style';\n\nexport interface TagProps {\n /** 自定义样式表 */\n css?: string;\n /** 自定义类名 */\n class?: string;\n /** 自定义颜色 */\n color?: string;\n /** 图标 */\n icon?: JSX.Element;\n /** 内置类型(状态) */\n type?: 'primary' | 'success' | 'error' | 'warning';\n /** 自定义关闭图标 */\n closeIcon?: JSX.Element | boolean;\n /** 显示边框\n * @default true\n */\n bordered?: boolean;\n /** 禁用 */\n disabled?: boolean;\n /** 关闭时的回调方法 */\n onClose?: (e: MouseEvent) => void;\n children?: JSX.Element;\n}\n\nfunction Tag(props: TagProps) {\n const { baseStyle, isDark } = theme;\n const [local, other] = splitProps(props, [\n 'class',\n 'css',\n 'onClose',\n 'color',\n 'icon',\n 'closeIcon',\n 'bordered',\n 'type',\n 'disabled',\n ]);\n const [show, setShow] = createSignal(true);\n\n const customColor = createMemo(() => {\n if (local.color) {\n return css`\n :host {\n ${generateColor(local.color, {\n dark: isDark(),\n name: 'tag-custom',\n })}\n }\n `;\n }\n return '';\n });\n\n function onClose(e: Event) {\n if (isFunction(local.onClose)) {\n local.onClose(e);\n }\n setShow(false);\n }\n\n return (\n <Show when={show()}>\n <style textContent={baseStyle()} />\n <style textContent={customColor()} />\n <style textContent={style} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <span\n {...other}\n class={cx('tag', local.type)}\n classList={{\n 'tag-custom': !!local.color,\n bordered: local.bordered,\n disabled: local.disabled,\n }}\n >\n <Show when={local.icon}>\n <span class=\"icon\">{local.icon}</span>\n </Show>\n {other.children}\n <Show when={local.closeIcon}>\n <span class=\"close\" onClick={onClose}>\n {local.closeIcon === true ? '⛌' : local.closeIcon}\n </span>\n </Show>\n </span>\n </Show>\n );\n}\n\nexport type TagElement = CustomElement<TagProps, 'onClose'>;\n\ncustomElement<TagProps>(\n 'n-tag',\n {\n class: void 0,\n css: void 0,\n color: void 0,\n icon: void 0,\n closeIcon: void 0,\n onClose: void 0,\n bordered: true,\n disabled: void 0,\n type: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n children: [...el.childNodes.values()],\n onClose(e: Event) {\n el.dispatchEvent(\n new CustomEvent('close', {\n detail: e,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.replaceChildren();\n clearAttribute(el, ['css']);\n });\n\n return (\n <>\n <style textContent={inline} />\n <Tag {...props} />\n </>\n );\n },\n);\n\nexport default Tag;\n"],"names":["Tag","props","baseStyle","isDark","theme","local","other","splitProps","show","setShow","createSignal","customColor","createMemo","color","css","generateColor","dark","name","onClose","e","isFunction","Show","style","cx","type","bordered","disabled","icon","children","closeIcon","customElement","class","_","opt","el","element","mergeProps","childNodes","values","dispatchEvent","CustomEvent","detail","createEffect","replaceChildren","clearAttribute","inline"],"mappings":"kGAoJA,+CAAA,+CApJqF,wBAC1D,4CACH,yBACM,2BAGC,+BACc,uBAEvB,ozBA0BtB,SAASA,EAAIC,CAAe,EAC1B,GAAM,CAAEC,UAAAA,CAAS,CAAEC,OAAAA,CAAM,CAAE,CAAGC,SAAK,CAC7B,CAACC,EAAOC,EAAM,CAAGC,GAAAA,YAAU,EAACN,EAAO,CACvC,QACA,MACA,UACA,QACA,OACA,YACA,WACA,OACA,WACD,EACK,CAACO,EAAMC,EAAQ,CAAGC,GAAAA,cAAY,EAAC,CAAA,GAE/BC,EAAcC,GAAAA,YAAU,EAAC,IAC7B,AAAIP,EAAMQ,KAAK,CACNC,GAAAA,KAAG,CAAA,CAAC;;UAEP,EAAEC,GAAAA,eAAa,EAACV,EAAMQ,KAAK,CAAE,CAC3BG,KAAMb,IACNc,KAAM,YACR,GAAG;;MAEP,CAAC,CAEI,IAGT,SAASC,EAAQC,CAAQ,EACnBC,GAAAA,SAAU,EAACf,EAAMa,OAAO,GAC1Bb,EAAMa,OAAO,CAACC,GAEhBV,EAAQ,CAAA,EACV,CAEA,4BACGY,MAAI,oBAAOb,wFACUN,wEACAS,gDACAW,OAAK,6BACxBD,MAAI,oBAAOhB,EAAMS,GAAG,wEACCA,GAAAA,KAAG,EAACT,EAAMS,GAAG,8DAG7BR,qBACGiB,GAAAA,IAAE,EAAC,MAAOlB,EAAMmB,IAAI,yBAChB,CACT,aAAc,CAAC,CAACnB,EAAMQ,KAAK,CAC3BY,SAAUpB,EAAMoB,QAAQ,CACxBC,SAAUrB,EAAMqB,QAAQ,AAC1B,iDAECL,MAAI,oBAAOhB,EAAMsB,IAAI,oDACAtB,EAAMsB,IAAI,gCAE/BrB,EAAMsB,QAAQ,4CACdP,MAAI,oBAAOhB,EAAMwB,SAAS,kEACIX,yBAC1Bb,AAAoB,CAAA,IAApBA,EAAMwB,SAAS,CAAY,IAAMxB,EAAMwB,SAAS,sBAM7D,CAIAC,GAAAA,eAAa,EACX,QACA,CACEC,MAAO,KAAK,EACZjB,IAAK,KAAK,EACVD,MAAO,KAAK,EACZc,KAAM,KAAK,EACXE,UAAW,KAAK,EAChBX,QAAS,KAAK,EACdO,SAAU,CAAA,EACVC,SAAU,KAAK,EACfF,KAAM,KAAK,CACb,EACA,CAACQ,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBlC,EAAQmC,GAAAA,YAAU,EACtB,CACEtB,IAAKoB,EAAGpB,GAAG,CACXc,SAAU,IAAIM,EAAGG,UAAU,CAACC,MAAM,GAAG,CACrCpB,QAAQC,CAAQ,EACde,EAAGK,aAAa,CACd,IAAIC,YAAY,QAAS,CACvBC,OAAQtB,CACV,GAEJ,CACF,EACAa,GAQF,MALAU,GAAAA,cAAY,EAAC,KACXR,EAAGS,eAAe,GAClBC,GAAAA,gBAAc,EAACV,EAAI,CAAC,MAAM,CAC5B,yCAIwBW,QAAM,6BACzB7C,EAAQC,GAGf,SAGF,EAAeD"}
package/lib/tag/style.js CHANGED
@@ -49,5 +49,4 @@
49
49
  --border-color: var(--disable-border);
50
50
  --component-bg: var(--disable-bg);
51
51
  }
52
- `;
53
- //# sourceMappingURL=style.js.map
52
+ `;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/tag/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n :host {\n display: inline-block;\n }\n\n .tag {\n display: flex;\n align-items: center;\n overflow: hidden;\n border-radius: calc(var(--border-radius) / 1.5);\n padding: 0 8px;\n font-size: var(--font-size-sm);\n color: var(--text-color);\n background-color: var(--component-bg);\n gap: 5px;\n line-height: 20px;\n\n a {\n text-decoration: unset;\n color: inherit;\n }\n }\n\n .icon {\n font-size: var(--font-size-sm);\n line-height: var(--font-size-sm);\n }\n\n .bordered {\n border: 1px solid var(--border-color);\n }\n\n .close {\n font-size: var(--font-size-sm);\n cursor: pointer;\n opacity: 0.5;\n transition: var(--transition-duration) var(--transition-timing-function) opacity;\n user-select: none;\n\n &:hover {\n opacity: 1;\n }\n }\n\n ${['primary', 'success', 'error', 'warning', 'tag-custom']\n .map(\n (s) =>\n `.${s} {--text-color: var(--${s}-color);--border-color: var(--${s}-secondary-bg);--component-bg: var(--${s}-details-bg);}`,\n )\n .join('')}\n\n .disabled {\n --text-color: var(--disable-color);\n --border-color: var(--disable-border);\n --component-bg: var(--disable-bg);\n }\n`;\n"],"names":["style","css","map","s","join"],"mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CvB,EAAE,CAAC,UAAW,UAAW,QAAS,UAAW,aAAa,CACvDC,GAAG,CACF,AAACC,GACC,CAAC,CAAC,EAAEA,EAAE,sBAAsB,EAAEA,EAAE,8BAA8B,EAAEA,EAAE,qCAAqC,EAAEA,EAAE,cAAc,CAAC,EAE7HC,IAAI,CAAC,IAAI;;;;;;;AAOd,CAAC"}
1
+ {"version":3,"sources":["components/tag/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n :host {\n display: inline-block;\n }\n\n .tag {\n display: flex;\n align-items: center;\n overflow: hidden;\n border-radius: calc(var(--border-radius) / 1.5);\n padding: 0 8px;\n font-size: var(--font-size-sm);\n color: var(--text-color);\n background-color: var(--component-bg);\n gap: 5px;\n line-height: 20px;\n\n a {\n text-decoration: unset;\n color: inherit;\n }\n }\n\n .icon {\n font-size: var(--font-size-sm);\n line-height: var(--font-size-sm);\n }\n\n .bordered {\n border: 1px solid var(--border-color);\n }\n\n .close {\n font-size: var(--font-size-sm);\n cursor: pointer;\n opacity: 0.5;\n transition: var(--transition-duration) var(--transition-timing-function) opacity;\n user-select: none;\n\n &:hover {\n opacity: 1;\n }\n }\n\n ${['primary', 'success', 'error', 'warning', 'tag-custom']\n .map(\n (s) =>\n `.${s} {--text-color: var(--${s}-color);--border-color: var(--${s}-secondary-bg);--component-bg: var(--${s}-details-bg);}`,\n )\n .join('')}\n\n .disabled {\n --text-color: var(--disable-color);\n --border-color: var(--disable-border);\n --component-bg: var(--disable-bg);\n }\n`;\n"],"names":["style","css","map","s","join"],"mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CvB,EAAE,CAAC,UAAW,UAAW,QAAS,UAAW,aAAa,CACvDC,GAAG,CACF,AAACC,GACC,CAAC,CAAC,EAAEA,EAAE,sBAAsB,EAAEA,EAAE,8BAA8B,EAAEA,EAAE,qCAAqC,EAAEA,EAAE,cAAc,CAAC,EAE7HC,IAAI,CAAC,IAAI;;;;;;;AAOd,CAAC"}
@@ -1,2 +1 @@
1
- "use strict";var e,r;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,r){for(var o in r)Object.defineProperty(e,o,{enumerable:!0,get:r[o]})}(exports,{ColorScheme:function(){return e},block:function(){return b},default:function(){return d},generateColor:function(){return l},inline:function(){return m},toneColor:function(){return c.toneColor}});const o=require("solid-js"),a=s(require("@moneko/common/lib/colorParse")),t=s(require("@moneko/common/lib/mixColor")),n=s(require("@moneko/common/lib/toneColor")),i=require("@moneko/css"),c=require("@moneko/common");function s(e){return e&&e.__esModule?e:{default:e}}function l(e,r){let o=(0,n.default)(e,r.dark),i=(0,a.default)(o[5]),c=(0,a.default)(e);return{[`--${r.name}-text`]:i.setAlpha(.65).toRgbaString(),[`--${r.name}-secondary`]:i.setAlpha(.45).toRgbaString(),[`--${r.name}-heading`]:o[5],[`--${r.name}-active`]:o[30],[`--${r.name}-color`]:o[40],[`--${r.name}-hover`]:(0,t.default)(o[40],o[30],15),[`--${r.name}-secondary-bg`]:o[70],[`--${r.name}-border`]:o[80],[`--${r.name}-outline`]:(0,t.default)(o[90],o[40],5),[`--${r.name}-selection`]:o[90],[`--${r.name}-notify-bg`]:(0,a.default)(o[90]).setAlpha(.8).toRgbaString(),[`--on-${r.name}-selection`]:o[10],[`--${r.name}-shadow`]:c.setAlpha(.12).toRgbaString(),[`--${r.name}-shadow-1`]:c.setAlpha(.08).toRgbaString(),[`--${r.name}-shadow-2`]:c.setAlpha(.05).toRgbaString(),[`--${r.name}-details-bg`]:o[95],[`--${r.name}-component-bg`]:o[98],[`--${r.name}-bg`]:o[99],[`--on-${r.name}-bg`]:o[5]}}(r=e||(e={})).light="light",r.dark="dark",r.auto="auto";const m=(0,i.css)({":host":{display:"inline-flex"}}),b=(0,i.css)({":host":{display:"block"}}),d=(0,o.createRoot)(function(){let r=(0,i.css)({":root,:host":{"--scrollbar-size":"4px","--font-size":"14px","--font-size-sm":"12px","--font-size-xs":"10px","--font-size-lg":"16px","--border-base":"1px solid var(--border-color)","--border-radius":"8px","--text-color":"var(--primary-text)","--text-secondary":"var(--primary-secondary)","--text-heading":"var(--primary-heading)","--text-selection":"var(--primary-selection)","--transition-duration":"0.3s","--mask-bg":"rgb(0 0 0 / 5%)","--modal-component-bg":"rgb(255 255 255 / 80%)","--modal-box-shadow":"0 5px 35px rgb(0 0 0 / 10%)","--notification-box-shadow":"0 4px 16px rgb(0 0 0 / 5%)","--transition-timing-function":"cubic-bezier(0.645, 0.045, 0.355, 1)",fontSize:"var(--font-size)",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji', Helvetica, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans'",color:"var(--text-color, rgb(0 0 0 / 65%))",lineHeight:1.8},'[disabled]:not([disabled="false"]):not(n-img)':{cursor:"not-allowed",color:"var(--disable-color)"},"::selection":{backgroundColor:"var(--text-selection)"},"::-webkit-scrollbar":{inlineSize:"var(--scrollbar-size)",blockSize:"var(--scrollbar-size)"}}),a=e[localStorage.getItem("color-scheme")]||"auto",t=window.matchMedia("(prefers-color-scheme: dark)"),[n,c]=(0,o.createSignal)(a),[s,m]=(0,o.createSignal)(t.matches),[b,d]=(0,o.createSignal)({primary:"#5794ff",warning:"#faad14",error:"#ff4d4f",success:"#52c41a"}),[g,u]=(0,o.createSignal)({primary:"#4d81dc",warning:"#bb8314",error:"#901c22",success:"#419418"}),p=(0,o.createMemo)(()=>l(b().primary,{name:"primary"})),f=(0,o.createMemo)(()=>l(g().primary,{name:"primary",dark:!0})),h=(0,o.createMemo)(()=>l(b().warning,{name:"warning"})),y=(0,o.createMemo)(()=>l(g().warning,{name:"warning",dark:!0})),x=(0,o.createMemo)(()=>l(b().success,{name:"success"})),S=(0,o.createMemo)(()=>l(g().success,{name:"success",dark:!0})),v=(0,o.createMemo)(()=>l(b().error,{name:"error"})),$=(0,o.createMemo)(()=>l(g().error,{name:"error",dark:!0}));function k(e){let o="";for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&(o+=`${r}:${e[r]};`);return`${r}:root,:host{${o}}`}let w=(0,o.createMemo)(()=>k(Object.assign({},p(),h(),x(),v(),{"--bg":"transparent","--disable-color":"rgb(0 0 0 / 25%)","--disable-bg":"rgb(0 0 0 / 4%)","--disable-border":"#d9d9d9","--border-color":"var(--primary-border)","--component-bg":"var(--primary-bg)"}))),M=(0,o.createMemo)(()=>k(Object.assign({},f(),y(),S(),$(),{"--bg":"#1c1c1c","--disable-color":"rgb(255 255 255 / 25%)","--disable-bg":"rgb(255 255 255 / 8%)","--disable-border":"#424242","--border-color":"#303030","--component-bg":"#141414","--primary-shadow":"rgb(0 0 0 / 12%)","--primary-selection":"rgb(255 255 255 / 5%)","--primary-details-bg":"rgb(255 255 255 / 3%)","--primary-component-bg":"#000","--modal-component-bg":"rgb(30 30 30 / 80%)"})));function z(e){m(e.matches)}(0,o.createEffect)(()=>{let e=n();m("dark"===e||"auto"===e&&t.matches)});let C=(0,o.createMemo)(()=>s()?M():w());return(0,o.createEffect)(()=>{"auto"===n()?t.addEventListener("change",z):t.removeEventListener("change",z),localStorage.setItem("color-scheme",n())}),{baseStyle:C,dark:g,setDark:u,light:b,setLight:d,scheme:n,setScheme:c,isDark:s}},(0,o.getOwner)());
2
- //# sourceMappingURL=index.js.map
1
+ "use strict";var e;function r(e,r){for(var o in r)Object.defineProperty(e,o,{enumerable:!0,get:r[o]})}Object.defineProperty(exports,"__esModule",{value:!0}),r(exports,{ColorScheme:function(){return e},block:function(){return d},default:function(){return g},generateColor:function(){return l},inline:function(){return b},toneColor:function(){return c.toneColor}});const o=require("solid-js"),a=s(require("@moneko/common/lib/colorParse")),t=s(require("@moneko/common/lib/mixColor")),n=s(require("@moneko/common/lib/toneColor")),i=require("@moneko/css"),c=require("@moneko/common");function s(e){return e&&e.__esModule?e:{default:e}}function l(e,r){let o=(0,n.default)(e,r.dark),i=(0,a.default)(o[5]),c=(0,a.default)(e);return{[`--${r.name}-text`]:i.setAlpha(.65).toRgbaString(),[`--${r.name}-secondary`]:i.setAlpha(.45).toRgbaString(),[`--${r.name}-heading`]:o[5],[`--${r.name}-active`]:o[30],[`--${r.name}-color`]:o[40],[`--${r.name}-hover`]:(0,t.default)(o[40],o[30],15),[`--${r.name}-secondary-bg`]:o[70],[`--${r.name}-border`]:o[80],[`--${r.name}-outline`]:(0,t.default)(o[90],o[40],5),[`--${r.name}-selection`]:o[90],[`--${r.name}-notify-bg`]:(0,a.default)(o[90]).setAlpha(.8).toRgbaString(),[`--on-${r.name}-selection`]:o[10],[`--${r.name}-shadow`]:c.setAlpha(.12).toRgbaString(),[`--${r.name}-shadow-1`]:c.setAlpha(.08).toRgbaString(),[`--${r.name}-shadow-2`]:c.setAlpha(.05).toRgbaString(),[`--${r.name}-details-bg`]:o[95],[`--${r.name}-component-bg`]:o[98],[`--${r.name}-bg`]:o[99],[`--on-${r.name}-bg`]:o[5]}}function m(){let r=(0,i.css)({":root,:host":{"--scrollbar-size":"4px","--font-size":"14px","--font-size-sm":"12px","--font-size-xs":"10px","--font-size-lg":"16px","--border-base":"1px solid var(--border-color)","--border-radius":"8px","--text-color":"var(--primary-text)","--text-secondary":"var(--primary-secondary)","--text-heading":"var(--primary-heading)","--text-selection":"var(--primary-selection)","--transition-duration":"0.3s","--mask-bg":"rgb(0 0 0 / 5%)","--modal-component-bg":"rgb(255 255 255 / 80%)","--modal-box-shadow":"0 5px 35px rgb(0 0 0 / 10%)","--notification-box-shadow":"0 4px 16px rgb(0 0 0 / 5%)","--transition-timing-function":"cubic-bezier(0.645, 0.045, 0.355, 1)",fontSize:"var(--font-size)",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji', Helvetica, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans'",color:"var(--text-color, rgb(0 0 0 / 65%))",lineHeight:1.8},'[disabled]:not([disabled="false"]):not(n-img)':{cursor:"not-allowed",color:"var(--disable-color)"},"::selection":{backgroundColor:"var(--text-selection)"},"::-webkit-scrollbar":{inlineSize:"var(--scrollbar-size)",blockSize:"var(--scrollbar-size)"}}),a=e[localStorage.getItem("color-scheme")]||"auto",t=window.matchMedia("(prefers-color-scheme: dark)"),[n,c]=(0,o.createSignal)(a),[s,m]=(0,o.createSignal)(t.matches),[b,d]=(0,o.createSignal)({primary:"#5794ff",warning:"#faad14",error:"#ff4d4f",success:"#52c41a"}),[g,u]=(0,o.createSignal)({primary:"#4d81dc",warning:"#bb8314",error:"#901c22",success:"#419418"}),p=(0,o.createMemo)(()=>l(b().primary,{name:"primary"})),f=(0,o.createMemo)(()=>l(g().primary,{name:"primary",dark:!0})),h=(0,o.createMemo)(()=>l(b().warning,{name:"warning"})),y=(0,o.createMemo)(()=>l(g().warning,{name:"warning",dark:!0})),x=(0,o.createMemo)(()=>l(b().success,{name:"success"})),S=(0,o.createMemo)(()=>l(g().success,{name:"success",dark:!0})),v=(0,o.createMemo)(()=>l(b().error,{name:"error"})),$=(0,o.createMemo)(()=>l(g().error,{name:"error",dark:!0}));function k(e){let o="";for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&(o+=`${r}:${e[r]};`);return`${r}:root,:host{${o}}`}let w=(0,o.createMemo)(()=>k(Object.assign({},p(),h(),x(),v(),{"--bg":"transparent","--disable-color":"rgb(0 0 0 / 25%)","--disable-bg":"rgb(0 0 0 / 4%)","--disable-border":"#d9d9d9","--border-color":"var(--primary-border)","--component-bg":"var(--primary-bg)"}))),M=(0,o.createMemo)(()=>k(Object.assign({},f(),y(),S(),$(),{"--bg":"#1c1c1c","--disable-color":"rgb(255 255 255 / 25%)","--disable-bg":"rgb(255 255 255 / 8%)","--disable-border":"#424242","--border-color":"#303030","--component-bg":"#141414","--primary-shadow":"rgb(0 0 0 / 12%)","--primary-selection":"rgb(255 255 255 / 5%)","--primary-details-bg":"rgb(255 255 255 / 3%)","--primary-component-bg":"#000","--modal-component-bg":"rgb(30 30 30 / 80%)"})));function z(e){m(e.matches)}(0,o.createEffect)(()=>{let e=n();m("dark"===e||"auto"===e&&t.matches)});let C=(0,o.createMemo)(()=>s()?M():w());return(0,o.createEffect)(()=>{"auto"===n()?t.addEventListener("change",z):t.removeEventListener("change",z),localStorage.setItem("color-scheme",n())}),{baseStyle:C,dark:g,setDark:u,light:b,setLight:d,scheme:n,setScheme:c,isDark:s}}!function(e){e.light="light",e.dark="dark",e.auto="auto"}(e||(e={}));const b=(0,i.css)({":host":{display:"inline-flex"}}),d=(0,i.css)({":host":{display:"block"}}),g=(0,o.createRoot)(m,(0,o.getOwner)());
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/theme/index.ts"],"sourcesContent":["import {\n type Accessor,\n createEffect,\n createMemo,\n createRoot,\n createSignal,\n getOwner,\n type Setter,\n} from 'solid-js';\nimport { colorParse, mixColor, toneColor } from '@moneko/common';\nimport { css, type CSSObject } from '@moneko/css';\nexport { toneColor } from '@moneko/common';\n\n/** 生成主题色调\n * @param {string} base 基础颜色\n * @param {ThemeOption} option 配置项\n * @returns {Record<string, string>} 主题色调\n */\nexport function generateColor(base: string, option: ThemeOption): Record<string, string> {\n const obj = toneColor(base, option.dark);\n const textColor = colorParse(obj[5]);\n const baseColor = colorParse(base);\n\n return {\n [`--${option.name}-text`]: textColor.setAlpha(0.65).toRgbaString(),\n [`--${option.name}-secondary`]: textColor.setAlpha(0.45).toRgbaString(),\n [`--${option.name}-heading`]: obj[5],\n [`--${option.name}-active`]: obj[30],\n [`--${option.name}-color`]: obj[40],\n [`--${option.name}-hover`]: mixColor(obj[40], obj[30], 15),\n [`--${option.name}-secondary-bg`]: obj[70],\n [`--${option.name}-border`]: obj[80],\n [`--${option.name}-outline`]: mixColor(obj[90], obj[40], 5),\n [`--${option.name}-selection`]: obj[90],\n [`--${option.name}-notify-bg`]: colorParse(obj[90]).setAlpha(0.8).toRgbaString(),\n [`--on-${option.name}-selection`]: obj[10],\n [`--${option.name}-shadow`]: baseColor.setAlpha(0.12).toRgbaString(),\n [`--${option.name}-shadow-1`]: baseColor.setAlpha(0.08).toRgbaString(),\n [`--${option.name}-shadow-2`]: baseColor.setAlpha(0.05).toRgbaString(),\n [`--${option.name}-details-bg`]: obj[95],\n [`--${option.name}-component-bg`]: obj[98],\n [`--${option.name}-bg`]: obj[99],\n [`--on-${option.name}-bg`]: obj[5],\n };\n}\n\n/** 颜色模式 */\nexport enum ColorScheme {\n /** 明亮 */\n light = 'light',\n /** 暗黑 */\n dark = 'dark',\n /** 跟随系统 */\n auto = 'auto',\n}\n\nfunction createTheme() {\n const baseTokens = css({\n ':root,:host': {\n '--scrollbar-size': '4px',\n '--font-size': '14px',\n '--font-size-sm': '12px',\n '--font-size-xs': '10px',\n '--font-size-lg': '16px',\n '--border-base': '1px solid var(--border-color)',\n '--border-radius': '8px',\n '--text-color': 'var(--primary-text)',\n '--text-secondary': 'var(--primary-secondary)',\n '--text-heading': 'var(--primary-heading)',\n '--text-selection': 'var(--primary-selection)',\n '--transition-duration': '0.3s',\n '--mask-bg': 'rgb(0 0 0 / 5%)',\n '--modal-component-bg': 'rgb(255 255 255 / 80%)',\n '--modal-box-shadow': '0 5px 35px rgb(0 0 0 / 10%)',\n '--notification-box-shadow': '0 4px 16px rgb(0 0 0 / 5%)',\n '--transition-timing-function': 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n fontSize: 'var(--font-size)',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji', Helvetica, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans'\",\n color: 'var(--text-color, rgb(0 0 0 / 65%))',\n lineHeight: 1.8,\n },\n '[disabled]:not([disabled=\"false\"]):not(n-img)': {\n cursor: 'not-allowed',\n color: 'var(--disable-color)',\n },\n '::selection': {\n backgroundColor: 'var(--text-selection)',\n },\n '::-webkit-scrollbar': {\n inlineSize: 'var(--scrollbar-size)',\n blockSize: 'var(--scrollbar-size)',\n },\n });\n const preset =\n ColorScheme[localStorage.getItem('color-scheme') as keyof typeof ColorScheme] || 'auto';\n /** 检测 prefers-color-scheme 媒体查询是否为 light 模式 */\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const [scheme, setScheme] = createSignal<keyof typeof ColorScheme>(preset);\n const [isDark, setIsDark] = createSignal(media.matches);\n const [light, setLight] = createSignal({\n primary: '#5794ff',\n warning: '#faad14',\n error: '#ff4d4f',\n success: '#52c41a',\n });\n const [dark, setDark] = createSignal({\n primary: '#4d81dc',\n warning: '#bb8314',\n error: '#901c22',\n success: '#419418',\n });\n const primary = createMemo(() => generateColor(light().primary, { name: 'primary' }));\n const darkPrimary = createMemo(() =>\n generateColor(dark().primary, { name: 'primary', dark: true }),\n );\n const warning = createMemo(() => generateColor(light().warning, { name: 'warning' }));\n const darkWarning = createMemo(() =>\n generateColor(dark().warning, { name: 'warning', dark: true }),\n );\n const success = createMemo(() => generateColor(light().success, { name: 'success' }));\n const darkSuccess = createMemo(() =>\n generateColor(dark().success, { name: 'success', dark: true }),\n );\n const error = createMemo(() => generateColor(light().error, { name: 'error' }));\n const darkError = createMemo(() => generateColor(dark().error, { name: 'error', dark: true }));\n\n function getHostCss(tokens: CSSObject) {\n let str = '';\n\n for (const key in tokens) {\n if (Object.prototype.hasOwnProperty.call(tokens, key)) {\n str += `${key}:${tokens[key]};`;\n }\n }\n return `${baseTokens}:root,:host{${str}}`;\n }\n const lightCss = createMemo(() => {\n const tokens = Object.assign({}, primary(), warning(), success(), error(), {\n '--bg': 'transparent',\n '--disable-color': 'rgb(0 0 0 / 25%)',\n '--disable-bg': 'rgb(0 0 0 / 4%)',\n '--disable-border': '#d9d9d9',\n '--border-color': 'var(--primary-border)',\n '--component-bg': 'var(--primary-bg)',\n });\n\n return getHostCss(tokens);\n });\n const darkCss = createMemo(() => {\n const tokens = Object.assign({}, darkPrimary(), darkWarning(), darkSuccess(), darkError(), {\n '--bg': '#1c1c1c',\n '--disable-color': 'rgb(255 255 255 / 25%)',\n '--disable-bg': 'rgb(255 255 255 / 8%)',\n '--disable-border': '#424242',\n '--border-color': '#303030',\n '--component-bg': '#141414',\n '--primary-shadow': 'rgb(0 0 0 / 12%)',\n '--primary-selection': 'rgb(255 255 255 / 5%)',\n '--primary-details-bg': 'rgb(255 255 255 / 3%)',\n '--primary-component-bg': '#000',\n '--modal-component-bg': 'rgb(30 30 30 / 80%)',\n });\n\n return getHostCss(tokens);\n });\n\n function update(e: MediaQueryListEvent) {\n setIsDark(e.matches);\n }\n createEffect(() => {\n const _ = scheme();\n\n setIsDark(_ === 'dark' || (_ === 'auto' && media.matches));\n });\n const baseStyle = createMemo(() => (isDark() ? darkCss() : lightCss()));\n\n createEffect(() => {\n if (scheme() === 'auto') {\n // 监听 prefers-color-scheme 媒体查询变化,自动更新颜色方案\n media.addEventListener('change', update);\n } else {\n media.removeEventListener('change', update);\n }\n localStorage.setItem('color-scheme', scheme());\n });\n\n return {\n baseStyle,\n dark,\n setDark,\n light,\n setLight,\n scheme,\n setScheme,\n isDark,\n };\n}\n\n/** API */\nexport interface Theme {\n /** 亮色样式的主要色 */\n light: Accessor<Color>;\n /** 设置亮色样式的主要色 */\n setLight: Setter<Color>;\n /** 黑色样式的主要色 */\n dark: Accessor<Color>;\n /** 设置黑色样式的主要色 */\n setDark: Setter<Color>;\n /** 颜色模式\n * @default 'auto'\n */\n scheme: Accessor<keyof typeof ColorScheme>;\n /** 设置颜色模式 */\n setScheme: Setter<keyof typeof ColorScheme>;\n /** 是否为色模式 */\n isDark: Accessor<boolean>;\n /** 基本都样式表, 响应 scheme 变化 */\n baseStyle: Accessor<string>;\n}\n\n/** 主要色 */\ninterface Color {\n /** 主要\n * @default '#5794ff'\n */\n primary: string;\n /** 警告\n * @default '#faad14'\n */\n warning: string;\n /** 错误\n * @default '#ff4d4f'\n */\n error: string;\n /** 成功\n * @default '#52c41a'\n */\n success: string;\n}\n\nexport interface ThemeOption {\n /** 是否采用暗色算法\n * @default false\n */\n dark?: boolean;\n /** 颜色名称 */\n name: string;\n}\n\nexport const inline = css({\n ':host': {\n display: 'inline-flex',\n },\n});\nexport const block = css({\n ':host': {\n display: 'block',\n },\n});\nexport default createRoot<Theme>(createTheme, getOwner());\n"],"names":["ColorScheme","block","generateColor","inline","toneColor","base","option","obj","dark","textColor","colorParse","baseColor","name","setAlpha","toRgbaString","mixColor","css","display","createRoot","baseTokens","fontSize","fontFamily","color","lineHeight","cursor","backgroundColor","inlineSize","blockSize","preset","localStorage","getItem","media","window","matchMedia","scheme","setScheme","createSignal","isDark","setIsDark","matches","light","setLight","primary","warning","error","success","setDark","createMemo","darkPrimary","darkWarning","darkSuccess","darkError","getHostCss","tokens","str","key","Object","prototype","hasOwnProperty","call","lightCss","assign","darkCss","update","e","createEffect","_","baseStyle","addEventListener","removeEventListener","setItem","getOwner"],"mappings":"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"}
1
+ {"version":3,"sources":["components/theme/index.ts"],"sourcesContent":["import {\n type Accessor,\n createEffect,\n createMemo,\n createRoot,\n createSignal,\n getOwner,\n type Setter,\n} from 'solid-js';\nimport { colorParse, mixColor, toneColor } from '@moneko/common';\nimport { css, type CSSObject } from '@moneko/css';\nexport { toneColor } from '@moneko/common';\n\n/** 生成主题色调\n * @param {string} base 基础颜色\n * @param {ThemeOption} option 配置项\n * @returns {Record<string, string>} 主题色调\n */\nexport function generateColor(base: string, option: ThemeOption): Record<string, string> {\n const obj = toneColor(base, option.dark);\n const textColor = colorParse(obj[5]);\n const baseColor = colorParse(base);\n\n return {\n [`--${option.name}-text`]: textColor.setAlpha(0.65).toRgbaString(),\n [`--${option.name}-secondary`]: textColor.setAlpha(0.45).toRgbaString(),\n [`--${option.name}-heading`]: obj[5],\n [`--${option.name}-active`]: obj[30],\n [`--${option.name}-color`]: obj[40],\n [`--${option.name}-hover`]: mixColor(obj[40], obj[30], 15),\n [`--${option.name}-secondary-bg`]: obj[70],\n [`--${option.name}-border`]: obj[80],\n [`--${option.name}-outline`]: mixColor(obj[90], obj[40], 5),\n [`--${option.name}-selection`]: obj[90],\n [`--${option.name}-notify-bg`]: colorParse(obj[90]).setAlpha(0.8).toRgbaString(),\n [`--on-${option.name}-selection`]: obj[10],\n [`--${option.name}-shadow`]: baseColor.setAlpha(0.12).toRgbaString(),\n [`--${option.name}-shadow-1`]: baseColor.setAlpha(0.08).toRgbaString(),\n [`--${option.name}-shadow-2`]: baseColor.setAlpha(0.05).toRgbaString(),\n [`--${option.name}-details-bg`]: obj[95],\n [`--${option.name}-component-bg`]: obj[98],\n [`--${option.name}-bg`]: obj[99],\n [`--on-${option.name}-bg`]: obj[5],\n };\n}\n\n/** 颜色模式 */\nexport enum ColorScheme {\n /** 明亮 */\n light = 'light',\n /** 暗黑 */\n dark = 'dark',\n /** 跟随系统 */\n auto = 'auto',\n}\n\nfunction createTheme() {\n const baseTokens = css({\n ':root,:host': {\n '--scrollbar-size': '4px',\n '--font-size': '14px',\n '--font-size-sm': '12px',\n '--font-size-xs': '10px',\n '--font-size-lg': '16px',\n '--border-base': '1px solid var(--border-color)',\n '--border-radius': '8px',\n '--text-color': 'var(--primary-text)',\n '--text-secondary': 'var(--primary-secondary)',\n '--text-heading': 'var(--primary-heading)',\n '--text-selection': 'var(--primary-selection)',\n '--transition-duration': '0.3s',\n '--mask-bg': 'rgb(0 0 0 / 5%)',\n '--modal-component-bg': 'rgb(255 255 255 / 80%)',\n '--modal-box-shadow': '0 5px 35px rgb(0 0 0 / 10%)',\n '--notification-box-shadow': '0 4px 16px rgb(0 0 0 / 5%)',\n '--transition-timing-function': 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n fontSize: 'var(--font-size)',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji', Helvetica, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans'\",\n color: 'var(--text-color, rgb(0 0 0 / 65%))',\n lineHeight: 1.8,\n },\n '[disabled]:not([disabled=\"false\"]):not(n-img)': {\n cursor: 'not-allowed',\n color: 'var(--disable-color)',\n },\n '::selection': {\n backgroundColor: 'var(--text-selection)',\n },\n '::-webkit-scrollbar': {\n inlineSize: 'var(--scrollbar-size)',\n blockSize: 'var(--scrollbar-size)',\n },\n });\n const preset =\n ColorScheme[localStorage.getItem('color-scheme') as keyof typeof ColorScheme] || 'auto';\n /** 检测 prefers-color-scheme 媒体查询是否为 light 模式 */\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const [scheme, setScheme] = createSignal<keyof typeof ColorScheme>(preset);\n const [isDark, setIsDark] = createSignal(media.matches);\n const [light, setLight] = createSignal({\n primary: '#5794ff',\n warning: '#faad14',\n error: '#ff4d4f',\n success: '#52c41a',\n });\n const [dark, setDark] = createSignal({\n primary: '#4d81dc',\n warning: '#bb8314',\n error: '#901c22',\n success: '#419418',\n });\n const primary = createMemo(() => generateColor(light().primary, { name: 'primary' }));\n const darkPrimary = createMemo(() =>\n generateColor(dark().primary, { name: 'primary', dark: true }),\n );\n const warning = createMemo(() => generateColor(light().warning, { name: 'warning' }));\n const darkWarning = createMemo(() =>\n generateColor(dark().warning, { name: 'warning', dark: true }),\n );\n const success = createMemo(() => generateColor(light().success, { name: 'success' }));\n const darkSuccess = createMemo(() =>\n generateColor(dark().success, { name: 'success', dark: true }),\n );\n const error = createMemo(() => generateColor(light().error, { name: 'error' }));\n const darkError = createMemo(() => generateColor(dark().error, { name: 'error', dark: true }));\n\n function getHostCss(tokens: CSSObject) {\n let str = '';\n\n for (const key in tokens) {\n if (Object.prototype.hasOwnProperty.call(tokens, key)) {\n str += `${key}:${tokens[key]};`;\n }\n }\n return `${baseTokens}:root,:host{${str}}`;\n }\n const lightCss = createMemo(() => {\n const tokens = Object.assign({}, primary(), warning(), success(), error(), {\n '--bg': 'transparent',\n '--disable-color': 'rgb(0 0 0 / 25%)',\n '--disable-bg': 'rgb(0 0 0 / 4%)',\n '--disable-border': '#d9d9d9',\n '--border-color': 'var(--primary-border)',\n '--component-bg': 'var(--primary-bg)',\n });\n\n return getHostCss(tokens);\n });\n const darkCss = createMemo(() => {\n const tokens = Object.assign({}, darkPrimary(), darkWarning(), darkSuccess(), darkError(), {\n '--bg': '#1c1c1c',\n '--disable-color': 'rgb(255 255 255 / 25%)',\n '--disable-bg': 'rgb(255 255 255 / 8%)',\n '--disable-border': '#424242',\n '--border-color': '#303030',\n '--component-bg': '#141414',\n '--primary-shadow': 'rgb(0 0 0 / 12%)',\n '--primary-selection': 'rgb(255 255 255 / 5%)',\n '--primary-details-bg': 'rgb(255 255 255 / 3%)',\n '--primary-component-bg': '#000',\n '--modal-component-bg': 'rgb(30 30 30 / 80%)',\n });\n\n return getHostCss(tokens);\n });\n\n function update(e: MediaQueryListEvent) {\n setIsDark(e.matches);\n }\n createEffect(() => {\n const _ = scheme();\n\n setIsDark(_ === 'dark' || (_ === 'auto' && media.matches));\n });\n const baseStyle = createMemo(() => (isDark() ? darkCss() : lightCss()));\n\n createEffect(() => {\n if (scheme() === 'auto') {\n // 监听 prefers-color-scheme 媒体查询变化,自动更新颜色方案\n media.addEventListener('change', update);\n } else {\n media.removeEventListener('change', update);\n }\n localStorage.setItem('color-scheme', scheme());\n });\n\n return {\n baseStyle,\n dark,\n setDark,\n light,\n setLight,\n scheme,\n setScheme,\n isDark,\n };\n}\n\n/** API */\nexport interface Theme {\n /** 亮色样式的主要色 */\n light: Accessor<Color>;\n /** 设置亮色样式的主要色 */\n setLight: Setter<Color>;\n /** 黑色样式的主要色 */\n dark: Accessor<Color>;\n /** 设置黑色样式的主要色 */\n setDark: Setter<Color>;\n /** 颜色模式\n * @default 'auto'\n */\n scheme: Accessor<keyof typeof ColorScheme>;\n /** 设置颜色模式 */\n setScheme: Setter<keyof typeof ColorScheme>;\n /** 是否为色模式 */\n isDark: Accessor<boolean>;\n /** 基本都样式表, 响应 scheme 变化 */\n baseStyle: Accessor<string>;\n}\n\n/** 主要色 */\ninterface Color {\n /** 主要\n * @default '#5794ff'\n */\n primary: string;\n /** 警告\n * @default '#faad14'\n */\n warning: string;\n /** 错误\n * @default '#ff4d4f'\n */\n error: string;\n /** 成功\n * @default '#52c41a'\n */\n success: string;\n}\n\nexport interface ThemeOption {\n /** 是否采用暗色算法\n * @default false\n */\n dark?: boolean;\n /** 颜色名称 */\n name: string;\n}\n\nexport const inline = css({\n ':host': {\n display: 'inline-flex',\n },\n});\nexport const block = css({\n ':host': {\n display: 'block',\n },\n});\nexport default createRoot<Theme>(createTheme, getOwner());\n"],"names":["block","generateColor","inline","toneColor","base","option","obj","dark","textColor","colorParse","baseColor","name","setAlpha","toRgbaString","mixColor","createTheme","baseTokens","css","fontSize","fontFamily","color","lineHeight","cursor","backgroundColor","inlineSize","blockSize","preset","ColorScheme","localStorage","getItem","media","window","matchMedia","scheme","setScheme","createSignal","isDark","setIsDark","matches","light","setLight","primary","warning","error","success","setDark","createMemo","darkPrimary","darkWarning","darkSuccess","darkError","getHostCss","tokens","str","key","Object","prototype","hasOwnProperty","call","lightCss","assign","darkCss","update","e","createEffect","_","baseStyle","addEventListener","removeEventListener","setItem","display","createRoot","getOwner"],"mappings":"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"}
package/lib/tree/index.js CHANGED
@@ -1,2 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return g}});const e=require("solid-js/web"),t=require("solid-js"),l=c(require("@moneko/common/lib/frameCallback")),n=c(require("@moneko/common/lib/isFunction")),r=c(require("@moneko/common/lib/isString")),i=require("@moneko/css"),o=c(require("../from-schema")),a=c(require("../theme")),s=require("./style");function c(e){return e&&e.__esModule?e:{default:e}}require("./register"),function(e,t){Object.keys(e).forEach(function(l){"default"===l||Object.prototype.hasOwnProperty.call(t,l)||Object.defineProperty(t,l,{enumerable:!0,get:function(){return e[l]}})})}(require("./type"),exports);const u=(0,e.template)('<li class="row">'),d=(0,e.template)('<span class="title">'),f=(0,e.template)('<span class="sub-title">'),h=(0,e.template)("<style> "),p=(0,e.template)("<style>"),m=(0,e.template)('<ul class="tree">'),g=function(c){let g;let y={small:6,normal:8,large:10},{baseStyle:v}=a.default,[$,b]=(0,t.createSignal)([]),[k,_]=(0,t.createSignal)([]),C={key:"key",name:"name",title:"title",subTitle:"subTitle",children:"children",description:"description"},w=(0,t.createMemo)(()=>Object.assign(C,c.fieldNames)),q=(0,t.createMemo)(()=>"rtl"===c.direction),S=(0,t.createMemo)(()=>void 0!==c.value&&null!==c.value?Array.isArray(c.value)?c.value:[c.value]:[]),j=Symbol("path"),O=Symbol("path-end");return(0,t.createEffect)(()=>{let e=c.fromSchema?(0,o.default)(c.data):(0,r.default)(c.data)?function(e){let t=w(),l=t.key,n=t.title,r=t.children,i=/[^\s|`│├└]/,o=e.trim().split("\n"),a=[{[n]:o[0],[l]:o[0]}];for(let e=1;e<o.length;e++){let t=o[e].search(i);if(-1===t)continue;let s={[n]:o[e].slice(t+3),depth:t};for(;a.length&&t<=(a[a.length-1].depth||0);)a.pop();if(!a.length)return[];let c=a[a.length-1];c[r]||(c[r]=[]),s[l]=`${c[l]}-${s[n]}-${t}-${e}`,c[r].push(s),a.push(s)}return[a[0]]}(c.data):c.data;b([...new Set(function e(t,l=0){let n=t.length-1,r=t[n],i=t[0],o=[],a=w(),s=a.key,c=a.children;for(let a=0,u=t.length;a<u;a++){let u=t[a],d=a===n;delete u[j],delete u[O],(0===a||d)&&(u[j]=i[s]+(1===t.length?"":`>${r[s]}`),d&&(u[O]=""),o.push(u[j])),u[c]&&(o=o.concat(e(u[c],l+1)))}return o}(e))]),_(e)}),(0,t.createEffect)(()=>{let e=$(),t=c.size||"normal";(0,l.default)(()=>{let l=e.length;if(g&&l){let n=y[t];for(let t=0;t<l;t++){let l=g.querySelectorAll(`li[data-path="${e[t]}"]`);if(l.length){let e=l[0].getBoundingClientRect(),r=e.height/2+n;if(l.length>1){let{bottom:i,height:o,top:a}=l[1].getBoundingClientRect();r=0===t?a-e.top:i-e.top-o/2+n,l[1].style.setProperty("--c","none")}else 0===t&&l[0].style.setProperty("--c","none");(1!==l.length||0!==t)&&l[0].style.setProperty("--line",`${Math.abs(r)}px`)}}}})}),[(()=>{let t=h(),l=t.firstChild;return(0,e.effect)(()=>l.data=v()),t})(),(()=>{let e=p();return e.textContent=s.style,e})(),(0,e.createComponent)(t.Show,{get when(){return c.css},get children(){let t=h(),l=t.firstChild;return(0,e.effect)(()=>l.data=(0,i.css)(c.css)),t}}),(()=>{let l=m(),r=g;return"function"==typeof r?(0,e.use)(r,l):g=l,(0,e.insert)(l,()=>(function l(r,i=0){return(0,e.createComponent)(t.For,{each:r,children:r=>{let o=w(),a=r[o.title],s=r[o.key],h=r[o.name],p=r[o.subTitle],m=r[o.children],g=h!==a&&h?[h,a]:[a];return[(()=>{let l=u();return l.$$dblclick=e=>c.onRowDoubleClick?.(e,s,r),l.$$click=e=>{!function(e,t){let l=w();(function(e,t){if(!c.readonly&&(0,n.default)(c.onChange)){let l=[...S()];if(c.multiple){let t=l.indexOf(e);-1===t?l.push(e):l.splice(t,1)}else l=c.toggle&&l[0]===e?[]:[e];c.onChange(c.multiple?l:l[0],t)}})(t[l.key],t),c.onRowClick?.(e,t[l.key],t)}(e,r)},(0,e.insert)(l,()=>(function(e,t,l){let n=c.renderRow?.(e,t,l)||[t,l];return q()?n.reverse():n})(r,(()=>{let t=d();return(0,e.insert)(t,()=>(q()?g.reverse():g).join(": ")),t})(),(0,e.createComponent)(t.Show,{when:p,get children(){let t=f();return(0,e.insert)(t,p),t}}))),(0,e.effect)(t=>{let o=!!S().includes(s),a=!!(c.readonly||!(0,n.default)(c.onChange)),u=i?{"--depth":`${2*i}em`}:void 0,d=r[O],f=r[j];return o!==t._v$&&l.classList.toggle("active",t._v$=o),a!==t._v$2&&l.classList.toggle("non",t._v$2=a),t._v$3=(0,e.style)(l,u,t._v$3),d!==t._v$4&&(0,e.setAttribute)(l,"data-path-end",t._v$4=d),f!==t._v$5&&(0,e.setAttribute)(l,"data-path",t._v$5=f),t},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0}),l})(),(0,e.createComponent)(t.Show,{when:m,get children(){return l(m,i+1)}})]}})})(k())),(0,e.effect)(t=>(0,e.classList)(l,{[c.size||"normal"]:!0,[c.class]:!!c.class,rtl:q()},t)),l})()]};(0,e.delegateEvents)(["click","dblclick"]);
2
- //# sourceMappingURL=index.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return v}});const e=require("solid-js/web"),t=require("solid-js"),l=u(require("@moneko/common/lib/frameCallback")),n=u(require("@moneko/common/lib/isFunction")),r=u(require("@moneko/common/lib/isString")),i=require("@moneko/css"),o=u(require("../from-schema")),a=u(require("../theme")),s=require("./style");function c(e,t){return Object.keys(e).forEach(function(l){"default"===l||Object.prototype.hasOwnProperty.call(t,l)||Object.defineProperty(t,l,{enumerable:!0,get:function(){return e[l]}})}),e}function u(e){return e&&e.__esModule?e:{default:e}}require("./register"),c(require("./type"),exports);const d=(0,e.template)('<li class="row">'),f=(0,e.template)('<span class="title">'),h=(0,e.template)('<span class="sub-title">'),p=(0,e.template)("<style> "),m=(0,e.template)("<style>"),g=(0,e.template)('<ul class="tree">');function y(c){let u;let y={small:6,normal:8,large:10},{baseStyle:v}=a.default,[$,b]=(0,t.createSignal)([]),[k,_]=(0,t.createSignal)([]),C={key:"key",name:"name",title:"title",subTitle:"subTitle",children:"children",description:"description"},w=(0,t.createMemo)(()=>Object.assign(C,c.fieldNames)),q=(0,t.createMemo)(()=>"rtl"===c.direction),S=(0,t.createMemo)(()=>void 0!==c.value&&null!==c.value?Array.isArray(c.value)?c.value:[c.value]:[]),j=Symbol("path"),O=Symbol("path-end");return(0,t.createEffect)(()=>{let e=c.fromSchema?(0,o.default)(c.data):(0,r.default)(c.data)?function(e){let t=w(),l=t.key,n=t.title,r=t.children,i=/[^\s|`│├└]/,o=e.trim().split("\n"),a=[{[n]:o[0],[l]:o[0]}];for(let e=1;e<o.length;e++){let t=o[e].search(i);if(-1===t)continue;let s={[n]:o[e].slice(t+3),depth:t};for(;a.length&&t<=(a[a.length-1].depth||0);)a.pop();if(!a.length)return[];let c=a[a.length-1];c[r]||(c[r]=[]),s[l]=`${c[l]}-${s[n]}-${t}-${e}`,c[r].push(s),a.push(s)}return[a[0]]}(c.data):c.data;b([...new Set(function e(t,l=0){let n=t.length-1,r=t[n],i=t[0],o=[],a=w(),s=a.key,c=a.children;for(let a=0,u=t.length;a<u;a++){let u=t[a],d=a===n;delete u[j],delete u[O],(0===a||d)&&(u[j]=i[s]+(1===t.length?"":`>${r[s]}`),d&&(u[O]=""),o.push(u[j])),u[c]&&(o=o.concat(e(u[c],l+1)))}return o}(e))]),_(e)}),(0,t.createEffect)(()=>{let e=$(),t=c.size||"normal";(0,l.default)(()=>{let l=e.length;if(u&&l){let n=y[t];for(let t=0;t<l;t++){let l=u.querySelectorAll(`li[data-path="${e[t]}"]`);if(l.length){let e=l[0].getBoundingClientRect(),r=e.height/2+n;if(l.length>1){let{bottom:i,height:o,top:a}=l[1].getBoundingClientRect();r=0===t?a-e.top:i-e.top-o/2+n,l[1].style.setProperty("--c","none")}else 0===t&&l[0].style.setProperty("--c","none");(1!==l.length||0!==t)&&l[0].style.setProperty("--line",`${Math.abs(r)}px`)}}}})}),[(()=>{let t=p(),l=t.firstChild;return(0,e.effect)(()=>l.data=v()),t})(),(()=>{let e=m();return e.textContent=s.style,e})(),(0,e.createComponent)(t.Show,{get when(){return c.css},get children(){let t=p(),l=t.firstChild;return(0,e.effect)(()=>l.data=(0,i.css)(c.css)),t}}),(()=>{let l=g(),r=u;return"function"==typeof r?(0,e.use)(r,l):u=l,(0,e.insert)(l,()=>(function l(r,i=0){return(0,e.createComponent)(t.For,{each:r,children:r=>{let o=w(),a=r[o.title],s=r[o.key],u=r[o.name],p=r[o.subTitle],m=r[o.children],g=u!==a&&u?[u,a]:[a];return[(()=>{let l=d();return l.$$dblclick=e=>c.onRowDoubleClick?.(e,s,r),l.$$click=e=>{!function(e,t){let l=w();(function(e,t){if(!c.readonly&&(0,n.default)(c.onChange)){let l=[...S()];if(c.multiple){let t=l.indexOf(e);-1===t?l.push(e):l.splice(t,1)}else l=c.toggle&&l[0]===e?[]:[e];c.onChange(c.multiple?l:l[0],t)}})(t[l.key],t),c.onRowClick?.(e,t[l.key],t)}(e,r)},(0,e.insert)(l,()=>(function(e,t,l){let n=c.renderRow?.(e,t,l)||[t,l];return q()?n.reverse():n})(r,(()=>{let t=f();return(0,e.insert)(t,()=>(q()?g.reverse():g).join(": ")),t})(),(0,e.createComponent)(t.Show,{when:p,get children(){let t=h();return(0,e.insert)(t,p),t}}))),(0,e.effect)(t=>{let o=!!S().includes(s),a=!!(c.readonly||!(0,n.default)(c.onChange)),u=i?{"--depth":`${2*i}em`}:void 0,d=r[O],f=r[j];return o!==t._v$&&l.classList.toggle("active",t._v$=o),a!==t._v$2&&l.classList.toggle("non",t._v$2=a),t._v$3=(0,e.style)(l,u,t._v$3),d!==t._v$4&&(0,e.setAttribute)(l,"data-path-end",t._v$4=d),f!==t._v$5&&(0,e.setAttribute)(l,"data-path",t._v$5=f),t},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0}),l})(),(0,e.createComponent)(t.Show,{when:m,get children(){return l(m,i+1)}})]}})})(k())),(0,e.effect)(t=>(0,e.classList)(l,{[c.size||"normal"]:!0,[c.class]:!!c.class,rtl:q()},t)),l})()]}const v=y;(0,e.delegateEvents)(["click","dblclick"]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/tree/index.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, For, Show } from 'solid-js';\nimport { frameCallback, isFunction, isString } from '@moneko/common';\nimport { css } from '@moneko/css';\n\nimport schema from '../from-schema';\nimport theme from '../theme';\n\nimport { style } from './style';\nimport type {\n TreeData,\n TreeMultipleProps,\n TreeMultipleSchemaProps,\n TreeMultipleStringProps,\n TreeProps,\n TreeSchemaProps,\n TreeStack,\n TreeStringProps,\n} from './type';\n\nimport './register';\n\nfunction Tree(\n _:\n | TreeProps\n | TreeMultipleProps\n | TreeMultipleSchemaProps\n | TreeSchemaProps\n | TreeMultipleStringProps\n | TreeStringProps,\n) {\n const sizeCnt = {\n small: 6,\n normal: 8,\n large: 10,\n };\n const { baseStyle } = theme;\n let el: HTMLUListElement | undefined;\n const [lines, setLines] = createSignal<string[]>([]);\n const [treeData, setTreeData] = createSignal<TreeData[]>([]);\n const normalFieldNames = {\n key: 'key' as const,\n name: 'name' as const,\n title: 'title' as const,\n subTitle: 'subTitle' as const,\n children: 'children' as const,\n description: 'description' as const,\n };\n const fieldNames = createMemo(() => Object.assign(normalFieldNames, _.fieldNames));\n const rtl = createMemo(() => _.direction === 'rtl');\n const current = createMemo(() => {\n if (_.value !== void 0 && _.value !== null) {\n return Array.isArray(_.value) ? _.value : [_.value];\n }\n return [];\n });\n const path = Symbol('path');\n const pathEnd = Symbol('path-end');\n\n function countLineLen(tree: TreeData[], depth = 0) {\n const lastIdx = tree.length - 1;\n const last = tree[lastIdx];\n const frist = tree[0];\n let line: string[] = [];\n const fields = fieldNames();\n const key = fields.key;\n const children = fields.children;\n\n for (let i = 0, len = tree.length; i < len; i++) {\n const item = tree[i],\n isLast = i === lastIdx;\n\n delete item[path];\n delete item[pathEnd];\n if (i === 0 || isLast) {\n item[path] = frist[key] + (tree.length === 1 ? '' : `>${last[key]}`);\n if (isLast) {\n item[pathEnd] = '';\n }\n line.push(item[path]);\n }\n if (item[children]) {\n line = line.concat(countLineLen(item[children], depth + 1));\n }\n }\n return line;\n }\n\n function parseTree(str: string): TreeData[] {\n const fields = fieldNames();\n const key = fields.key;\n const title = fields.title;\n const children = fields.children;\n const depthRegex = /[^\\s|`│├└]/;\n const rows = str.trim().split('\\n');\n const stack: TreeStack[] = [{ [title]: rows[0], [key]: rows[0] }];\n\n for (let i = 1; i < rows.length; i++) {\n const depth = rows[i].search(depthRegex);\n\n if (depth === -1) {\n continue;\n }\n const node: Partial<TreeData> = {\n [title]: rows[i].slice(depth + 3),\n depth,\n };\n\n while (stack.length && depth <= (stack[stack.length - 1].depth || 0)) {\n stack.pop();\n }\n if (!stack.length) {\n return [];\n }\n const parent = stack[stack.length - 1];\n\n if (!parent[children]) {\n parent[children] = [];\n }\n node[key] = `${parent[key]}-${node[title]}-${depth}-${i}`;\n parent[children].push(node as TreeData);\n stack.push(node as TreeData);\n }\n\n return [stack[0]];\n }\n\n function handleChange(key: string, item: TreeData) {\n if (!_.readonly && isFunction(_.onChange)) {\n let _current = [...current()];\n\n if (_.multiple) {\n const idx = _current.indexOf(key);\n\n if (idx === -1) {\n _current.push(key);\n } else {\n _current.splice(idx, 1);\n }\n } else if (_.toggle && _current[0] === key) {\n _current = [];\n } else {\n _current = [key];\n }\n _.onChange(_.multiple ? _current : _current[0], item);\n }\n }\n function handleClick(e: MouseEvent, item: TreeData) {\n const fields = fieldNames();\n\n handleChange(item[fields.key], item);\n _.onRowClick?.(e, item[fields.key] as never, item as TreeData<never>);\n }\n function renderItem(item: TreeData, title: JSX.Element, subTitle?: JSX.Element): JSX.Element[] {\n const row = _.renderRow?.(item, title, subTitle) || [title, subTitle];\n\n return rtl() ? row.reverse() : row;\n }\n\n function renderTreeRow(list: TreeData[], depth = 0): JSX.Element {\n return (\n <For each={list}>\n {(item) => {\n const fields = fieldNames();\n const title = item[fields.title];\n const key = item[fields.key];\n const name = item[fields.name];\n const subTitle = item[fields.subTitle];\n const children = item[fields.children];\n const _title = name === title || !name ? [title] : [name, title];\n\n return (\n <>\n <li\n class=\"row\"\n classList={{\n active: current().includes(key),\n non: _.readonly || !isFunction(_.onChange),\n }}\n onClick={(e) => {\n handleClick(e, item);\n }}\n onDblClick={(e) => _.onRowDoubleClick?.(e, key, item)}\n style={depth ? { '--depth': `${depth * 2}em` } : void 0}\n data-path-end={item[pathEnd]}\n data-path={item[path]}\n >\n {renderItem(\n item,\n <span class=\"title\">{(rtl() ? _title.reverse() : _title).join(': ')}</span>,\n <Show when={subTitle}>\n <span class=\"sub-title\">{subTitle}</span>\n </Show>,\n )}\n </li>\n <Show when={children}>{renderTreeRow(children!, depth + 1)}</Show>\n </>\n );\n }}\n </For>\n );\n }\n createEffect(() => {\n const data = _.fromSchema ? schema(_.data) : isString(_.data) ? parseTree(_.data) : _.data;\n\n setLines([...new Set(countLineLen(data))]);\n setTreeData(data);\n });\n\n createEffect(() => {\n const list = lines();\n const size = _.size || 'normal';\n\n frameCallback(() => {\n const len = list.length;\n\n if (el && len) {\n const prefixSize = sizeCnt[size];\n\n for (let i = 0; i < len; i++) {\n const al: NodeListOf<HTMLLIElement> = el.querySelectorAll(`li[data-path=\"${list[i]}\"]`);\n\n if (al.length) {\n const rect1 = al[0].getBoundingClientRect();\n let sideLen = rect1.height / 2 + prefixSize;\n\n if (al.length > 1) {\n const { bottom, height, top } = al[1].getBoundingClientRect();\n\n sideLen = i === 0 ? top - rect1.top : bottom - rect1.top - height / 2 + prefixSize;\n al[1].style.setProperty('--c', 'none');\n } else if (i === 0) {\n al[0].style.setProperty('--c', 'none');\n }\n if (al.length !== 1 || i !== 0) {\n al[0].style.setProperty('--line', `${Math.abs(sideLen)}px`);\n }\n }\n }\n }\n });\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={style} />\n <Show when={_.css}>\n <style textContent={css(_.css)} />\n </Show>\n <ul\n ref={el}\n class=\"tree\"\n classList={{\n [_.size || 'normal']: true,\n [_.class!]: !!_.class,\n rtl: rtl(),\n }}\n >\n {renderTreeRow(treeData())}\n </ul>\n </>\n );\n}\n\nexport * from './type';\nexport default Tree;\n"],"names":["_","el","sizeCnt","small","normal","large","baseStyle","theme","lines","setLines","createSignal","treeData","setTreeData","normalFieldNames","key","name","title","subTitle","children","description","fieldNames","createMemo","Object","assign","rtl","direction","current","value","Array","isArray","path","Symbol","pathEnd","createEffect","data","fromSchema","schema","isString","parseTree","str","fields","depthRegex","rows","trim","split","stack","i","length","depth","search","node","slice","pop","parent","push","Set","countLineLen","tree","lastIdx","last","frist","line","len","item","isLast","concat","list","size","frameCallback","prefixSize","al","querySelectorAll","rect1","getBoundingClientRect","sideLen","height","bottom","top","style","setProperty","Math","abs","Show","css","renderTreeRow","For","_title","e","onRowDoubleClick","handleClick","handleChange","readonly","isFunction","onChange","_current","multiple","idx","indexOf","splice","toggle","onRowClick","renderItem","row","renderRow","reverse","join","includes","class"],"mappings":"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"}
1
+ {"version":3,"sources":["components/tree/index.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, For, Show } from 'solid-js';\nimport { frameCallback, isFunction, isString } from '@moneko/common';\nimport { css } from '@moneko/css';\n\nimport schema from '../from-schema';\nimport theme from '../theme';\n\nimport { style } from './style';\nimport type {\n TreeData,\n TreeMultipleProps,\n TreeMultipleSchemaProps,\n TreeMultipleStringProps,\n TreeProps,\n TreeSchemaProps,\n TreeStack,\n TreeStringProps,\n} from './type';\n\nimport './register';\n\nfunction Tree(\n _:\n | TreeProps\n | TreeMultipleProps\n | TreeMultipleSchemaProps\n | TreeSchemaProps\n | TreeMultipleStringProps\n | TreeStringProps,\n) {\n const sizeCnt = {\n small: 6,\n normal: 8,\n large: 10,\n };\n const { baseStyle } = theme;\n let el: HTMLUListElement | undefined;\n const [lines, setLines] = createSignal<string[]>([]);\n const [treeData, setTreeData] = createSignal<TreeData[]>([]);\n const normalFieldNames = {\n key: 'key' as const,\n name: 'name' as const,\n title: 'title' as const,\n subTitle: 'subTitle' as const,\n children: 'children' as const,\n description: 'description' as const,\n };\n const fieldNames = createMemo(() => Object.assign(normalFieldNames, _.fieldNames));\n const rtl = createMemo(() => _.direction === 'rtl');\n const current = createMemo(() => {\n if (_.value !== void 0 && _.value !== null) {\n return Array.isArray(_.value) ? _.value : [_.value];\n }\n return [];\n });\n const path = Symbol('path');\n const pathEnd = Symbol('path-end');\n\n function countLineLen(tree: TreeData[], depth = 0) {\n const lastIdx = tree.length - 1;\n const last = tree[lastIdx];\n const frist = tree[0];\n let line: string[] = [];\n const fields = fieldNames();\n const key = fields.key;\n const children = fields.children;\n\n for (let i = 0, len = tree.length; i < len; i++) {\n const item = tree[i],\n isLast = i === lastIdx;\n\n delete item[path];\n delete item[pathEnd];\n if (i === 0 || isLast) {\n item[path] = frist[key] + (tree.length === 1 ? '' : `>${last[key]}`);\n if (isLast) {\n item[pathEnd] = '';\n }\n line.push(item[path]);\n }\n if (item[children]) {\n line = line.concat(countLineLen(item[children], depth + 1));\n }\n }\n return line;\n }\n\n function parseTree(str: string): TreeData[] {\n const fields = fieldNames();\n const key = fields.key;\n const title = fields.title;\n const children = fields.children;\n const depthRegex = /[^\\s|`│├└]/;\n const rows = str.trim().split('\\n');\n const stack: TreeStack[] = [{ [title]: rows[0], [key]: rows[0] }];\n\n for (let i = 1; i < rows.length; i++) {\n const depth = rows[i].search(depthRegex);\n\n if (depth === -1) {\n continue;\n }\n const node: Partial<TreeData> = {\n [title]: rows[i].slice(depth + 3),\n depth,\n };\n\n while (stack.length && depth <= (stack[stack.length - 1].depth || 0)) {\n stack.pop();\n }\n if (!stack.length) {\n return [];\n }\n const parent = stack[stack.length - 1];\n\n if (!parent[children]) {\n parent[children] = [];\n }\n node[key] = `${parent[key]}-${node[title]}-${depth}-${i}`;\n parent[children].push(node as TreeData);\n stack.push(node as TreeData);\n }\n\n return [stack[0]];\n }\n\n function handleChange(key: string, item: TreeData) {\n if (!_.readonly && isFunction(_.onChange)) {\n let _current = [...current()];\n\n if (_.multiple) {\n const idx = _current.indexOf(key);\n\n if (idx === -1) {\n _current.push(key);\n } else {\n _current.splice(idx, 1);\n }\n } else if (_.toggle && _current[0] === key) {\n _current = [];\n } else {\n _current = [key];\n }\n _.onChange(_.multiple ? _current : _current[0], item);\n }\n }\n function handleClick(e: MouseEvent, item: TreeData) {\n const fields = fieldNames();\n\n handleChange(item[fields.key], item);\n _.onRowClick?.(e, item[fields.key] as never, item as TreeData<never>);\n }\n function renderItem(item: TreeData, title: JSX.Element, subTitle?: JSX.Element): JSX.Element[] {\n const row = _.renderRow?.(item, title, subTitle) || [title, subTitle];\n\n return rtl() ? row.reverse() : row;\n }\n\n function renderTreeRow(list: TreeData[], depth = 0): JSX.Element {\n return (\n <For each={list}>\n {(item) => {\n const fields = fieldNames();\n const title = item[fields.title];\n const key = item[fields.key];\n const name = item[fields.name];\n const subTitle = item[fields.subTitle];\n const children = item[fields.children];\n const _title = name === title || !name ? [title] : [name, title];\n\n return (\n <>\n <li\n class=\"row\"\n classList={{\n active: current().includes(key),\n non: _.readonly || !isFunction(_.onChange),\n }}\n onClick={(e) => {\n handleClick(e, item);\n }}\n onDblClick={(e) => _.onRowDoubleClick?.(e, key, item)}\n style={depth ? { '--depth': `${depth * 2}em` } : void 0}\n data-path-end={item[pathEnd]}\n data-path={item[path]}\n >\n {renderItem(\n item,\n <span class=\"title\">{(rtl() ? _title.reverse() : _title).join(': ')}</span>,\n <Show when={subTitle}>\n <span class=\"sub-title\">{subTitle}</span>\n </Show>,\n )}\n </li>\n <Show when={children}>{renderTreeRow(children!, depth + 1)}</Show>\n </>\n );\n }}\n </For>\n );\n }\n createEffect(() => {\n const data = _.fromSchema ? schema(_.data) : isString(_.data) ? parseTree(_.data) : _.data;\n\n setLines([...new Set(countLineLen(data))]);\n setTreeData(data);\n });\n\n createEffect(() => {\n const list = lines();\n const size = _.size || 'normal';\n\n frameCallback(() => {\n const len = list.length;\n\n if (el && len) {\n const prefixSize = sizeCnt[size];\n\n for (let i = 0; i < len; i++) {\n const al: NodeListOf<HTMLLIElement> = el.querySelectorAll(`li[data-path=\"${list[i]}\"]`);\n\n if (al.length) {\n const rect1 = al[0].getBoundingClientRect();\n let sideLen = rect1.height / 2 + prefixSize;\n\n if (al.length > 1) {\n const { bottom, height, top } = al[1].getBoundingClientRect();\n\n sideLen = i === 0 ? top - rect1.top : bottom - rect1.top - height / 2 + prefixSize;\n al[1].style.setProperty('--c', 'none');\n } else if (i === 0) {\n al[0].style.setProperty('--c', 'none');\n }\n if (al.length !== 1 || i !== 0) {\n al[0].style.setProperty('--line', `${Math.abs(sideLen)}px`);\n }\n }\n }\n }\n });\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={style} />\n <Show when={_.css}>\n <style textContent={css(_.css)} />\n </Show>\n <ul\n ref={el}\n class=\"tree\"\n classList={{\n [_.size || 'normal']: true,\n [_.class!]: !!_.class,\n rtl: rtl(),\n }}\n >\n {renderTreeRow(treeData())}\n </ul>\n </>\n );\n}\n\nexport * from './type';\nexport default Tree;\n"],"names":["Tree","_","el","sizeCnt","small","normal","large","baseStyle","theme","lines","setLines","createSignal","treeData","setTreeData","normalFieldNames","key","name","title","subTitle","children","description","fieldNames","createMemo","Object","assign","rtl","direction","current","value","Array","isArray","path","Symbol","pathEnd","createEffect","data","fromSchema","schema","isString","parseTree","str","fields","depthRegex","rows","trim","split","stack","i","length","depth","search","node","slice","pop","parent","push","Set","countLineLen","tree","lastIdx","last","frist","line","len","item","isLast","concat","list","size","frameCallback","prefixSize","al","querySelectorAll","rect1","getBoundingClientRect","sideLen","height","bottom","top","style","setProperty","Math","abs","Show","css","renderTreeRow","For","_title","e","onRowDoubleClick","handleClick","handleChange","readonly","isFunction","onChange","_current","multiple","idx","indexOf","splice","toggle","onRowClick","renderItem","row","renderRow","reverse","join","includes","class"],"mappings":"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"}
@@ -1,2 +1 @@
1
- "use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0});const t=require("solid-js/web"),o=require("solid-js"),i=require("solid-element"),l=require("../basic-config"),d=require("../theme"),r=(e=require("./index"))&&e.__esModule?e:{default:e},n=(0,t.template)("<style>");(0,i.customElement)("n-tree",{fieldNames:{},fromSchema:void 0,size:void 0,data:[],multiple:void 0,value:void 0,onChange:void 0,class:void 0,css:void 0,readonly:void 0,toggle:void 0,direction:void 0,onRowClick:void 0,onRowDoubleClick:void 0,renderRow:void 0},(e,i)=>{let a=i.element,s=(0,o.mergeProps)({data:a.data,value:a.value,multiple:a.multiple,fromSchema:a.fromSchema,size:a.size,css:a.css,readonly:a.readonly,toggle:a.toggle,direction:a.direction,onChange(e,t){a.dispatchEvent(new CustomEvent("change",{detail:[e,t]}))},onRowClick(e,t,o){a.dispatchEvent(new CustomEvent("rowclick",{detail:[e,t,o]}))},onRowDoubleClick(e,t,o){a.dispatchEvent(new CustomEvent("rowdoubleclick",{detail:[e,t,o]}))}},e);return(0,o.createEffect)(()=>{(0,l.clearAttribute)(a,["css","fieldNames","data"])}),[(()=>{let e=n();return e.textContent=d.block,e})(),(0,t.createComponent)(r.default,s)]});
2
- //# sourceMappingURL=register.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e=require("solid-js/web"),t=require("solid-js"),o=require("solid-element"),i=require("../basic-config"),l=require("../theme"),n=d(require("./index"));function d(e){return e&&e.__esModule?e:{default:e}}const r=(0,e.template)("<style>");(0,o.customElement)("n-tree",{fieldNames:{},fromSchema:void 0,size:void 0,data:[],multiple:void 0,value:void 0,onChange:void 0,class:void 0,css:void 0,readonly:void 0,toggle:void 0,direction:void 0,onRowClick:void 0,onRowDoubleClick:void 0,renderRow:void 0},(o,d)=>{let a=d.element,s=(0,t.mergeProps)({data:a.data,value:a.value,multiple:a.multiple,fromSchema:a.fromSchema,size:a.size,css:a.css,readonly:a.readonly,toggle:a.toggle,direction:a.direction,onChange(e,t){a.dispatchEvent(new CustomEvent("change",{detail:[e,t]}))},onRowClick(e,t,o){a.dispatchEvent(new CustomEvent("rowclick",{detail:[e,t,o]}))},onRowDoubleClick(e,t,o){a.dispatchEvent(new CustomEvent("rowdoubleclick",{detail:[e,t,o]}))}},o);return(0,t.createEffect)(()=>{(0,i.clearAttribute)(a,["css","fieldNames","data"])}),[(()=>{let e=r();return e.textContent=l.block,e})(),(0,e.createComponent)(n.default,s)]});
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/tree/register.tsx"],"sourcesContent":["import { createEffect, mergeProps } from 'solid-js';\nimport { customElement } from 'solid-element';\n\nimport { clearAttribute } from '../basic-config';\nimport { block } from '../theme';\n\nimport Tree from './index';\nimport type { TreeData, TreeProps } from './type';\n\ncustomElement<TreeProps>(\n 'n-tree',\n {\n fieldNames: {},\n fromSchema: void 0,\n size: void 0,\n data: [],\n multiple: void 0,\n value: void 0,\n onChange: void 0,\n class: void 0,\n css: void 0,\n readonly: void 0,\n toggle: void 0,\n direction: void 0,\n onRowClick: void 0,\n onRowDoubleClick: void 0,\n renderRow: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n data: el.data,\n value: el.value,\n multiple: el.multiple,\n fromSchema: el.fromSchema,\n size: el.size,\n css: el.css,\n readonly: el.readonly,\n toggle: el.toggle,\n direction: el.direction,\n onChange(key: string, item: TreeData) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [key, item],\n }),\n );\n },\n onRowClick(e: MouseEvent, key: string, item: TreeData) {\n el.dispatchEvent(\n new CustomEvent('rowclick', {\n detail: [e, key, item],\n }),\n );\n },\n onRowDoubleClick(e: MouseEvent, key: string, item: TreeData) {\n el.dispatchEvent(\n new CustomEvent('rowdoubleclick', {\n detail: [e, key, item],\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['css', 'fieldNames', 'data']);\n });\n return (\n <>\n <style textContent={block} />\n <Tree {...props} />\n </>\n );\n },\n);\n"],"names":["customElement","fieldNames","fromSchema","size","data","multiple","value","onChange","class","css","readonly","toggle","direction","onRowClick","onRowDoubleClick","renderRow","_","opt","el","element","props","mergeProps","key","item","dispatchEvent","CustomEvent","detail","e","createEffect","clearAttribute","block","Tree"],"mappings":"oHAAyC,sBACX,2BAEC,6BACT,yBAEL,oEAGjBA,GAAAA,eAAa,EACX,SACA,CACEC,WAAY,CAAC,EACbC,WAAY,KAAK,EACjBC,KAAM,KAAK,EACXC,KAAM,EAAE,CACRC,SAAU,KAAK,EACfC,MAAO,KAAK,EACZC,SAAU,KAAK,EACfC,MAAO,KAAK,EACZC,IAAK,KAAK,EACVC,SAAU,KAAK,EACfC,OAAQ,KAAK,EACbC,UAAW,KAAK,EAChBC,WAAY,KAAK,EACjBC,iBAAkB,KAAK,EACvBC,UAAW,KAAK,CAClB,EACA,CAACC,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBC,EAAQC,GAAAA,YAAU,EACtB,CACEjB,KAAMc,EAAGd,IAAI,CACbE,MAAOY,EAAGZ,KAAK,CACfD,SAAUa,EAAGb,QAAQ,CACrBH,WAAYgB,EAAGhB,UAAU,CACzBC,KAAMe,EAAGf,IAAI,CACbM,IAAKS,EAAGT,GAAG,CACXC,SAAUQ,EAAGR,QAAQ,CACrBC,OAAQO,EAAGP,MAAM,CACjBC,UAAWM,EAAGN,SAAS,CACvBL,SAASe,CAAW,CAAEC,CAAc,EAClCL,EAAGM,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQ,CAACJ,EAAKC,EAAK,AACrB,GAEJ,EACAV,WAAWc,CAAa,CAAEL,CAAW,CAAEC,CAAc,EACnDL,EAAGM,aAAa,CACd,IAAIC,YAAY,WAAY,CAC1BC,OAAQ,CAACC,EAAGL,EAAKC,EAAK,AACxB,GAEJ,EACAT,iBAAiBa,CAAa,CAAEL,CAAW,CAAEC,CAAc,EACzDL,EAAGM,aAAa,CACd,IAAIC,YAAY,iBAAkB,CAChCC,OAAQ,CAACC,EAAGL,EAAKC,EAAK,AACxB,GAEJ,CACF,EACAP,GAMF,MAHAY,GAAAA,cAAY,EAAC,KACXC,GAAAA,gBAAc,EAACX,EAAI,CAAC,MAAO,aAAc,OAAO,CAClD,yCAGwBY,OAAK,6BACxBC,SAAI,CAAKX,GAGhB"}
1
+ {"version":3,"sources":["components/tree/register.tsx"],"sourcesContent":["import { createEffect, mergeProps } from 'solid-js';\nimport { customElement } from 'solid-element';\n\nimport { clearAttribute } from '../basic-config';\nimport { block } from '../theme';\n\nimport Tree from './index';\nimport type { TreeData, TreeProps } from './type';\n\ncustomElement<TreeProps>(\n 'n-tree',\n {\n fieldNames: {},\n fromSchema: void 0,\n size: void 0,\n data: [],\n multiple: void 0,\n value: void 0,\n onChange: void 0,\n class: void 0,\n css: void 0,\n readonly: void 0,\n toggle: void 0,\n direction: void 0,\n onRowClick: void 0,\n onRowDoubleClick: void 0,\n renderRow: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n data: el.data,\n value: el.value,\n multiple: el.multiple,\n fromSchema: el.fromSchema,\n size: el.size,\n css: el.css,\n readonly: el.readonly,\n toggle: el.toggle,\n direction: el.direction,\n onChange(key: string, item: TreeData) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [key, item],\n }),\n );\n },\n onRowClick(e: MouseEvent, key: string, item: TreeData) {\n el.dispatchEvent(\n new CustomEvent('rowclick', {\n detail: [e, key, item],\n }),\n );\n },\n onRowDoubleClick(e: MouseEvent, key: string, item: TreeData) {\n el.dispatchEvent(\n new CustomEvent('rowdoubleclick', {\n detail: [e, key, item],\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['css', 'fieldNames', 'data']);\n });\n return (\n <>\n <style textContent={block} />\n <Tree {...props} />\n </>\n );\n },\n);\n"],"names":["customElement","fieldNames","fromSchema","size","data","multiple","value","onChange","class","css","readonly","toggle","direction","onRowClick","onRowDoubleClick","renderRow","_","opt","el","element","props","mergeProps","key","item","dispatchEvent","CustomEvent","detail","e","createEffect","clearAttribute","block","Tree"],"mappings":"8GAAyC,sBACX,2BAEC,6BACT,wBAEL,iGAGjBA,GAAAA,eAAa,EACX,SACA,CACEC,WAAY,CAAC,EACbC,WAAY,KAAK,EACjBC,KAAM,KAAK,EACXC,KAAM,EAAE,CACRC,SAAU,KAAK,EACfC,MAAO,KAAK,EACZC,SAAU,KAAK,EACfC,MAAO,KAAK,EACZC,IAAK,KAAK,EACVC,SAAU,KAAK,EACfC,OAAQ,KAAK,EACbC,UAAW,KAAK,EAChBC,WAAY,KAAK,EACjBC,iBAAkB,KAAK,EACvBC,UAAW,KAAK,CAClB,EACA,CAACC,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBC,EAAQC,GAAAA,YAAU,EACtB,CACEjB,KAAMc,EAAGd,IAAI,CACbE,MAAOY,EAAGZ,KAAK,CACfD,SAAUa,EAAGb,QAAQ,CACrBH,WAAYgB,EAAGhB,UAAU,CACzBC,KAAMe,EAAGf,IAAI,CACbM,IAAKS,EAAGT,GAAG,CACXC,SAAUQ,EAAGR,QAAQ,CACrBC,OAAQO,EAAGP,MAAM,CACjBC,UAAWM,EAAGN,SAAS,CACvBL,SAASe,CAAW,CAAEC,CAAc,EAClCL,EAAGM,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQ,CAACJ,EAAKC,EAAK,AACrB,GAEJ,EACAV,WAAWc,CAAa,CAAEL,CAAW,CAAEC,CAAc,EACnDL,EAAGM,aAAa,CACd,IAAIC,YAAY,WAAY,CAC1BC,OAAQ,CAACC,EAAGL,EAAKC,EAAK,AACxB,GAEJ,EACAT,iBAAiBa,CAAa,CAAEL,CAAW,CAAEC,CAAc,EACzDL,EAAGM,aAAa,CACd,IAAIC,YAAY,iBAAkB,CAChCC,OAAQ,CAACC,EAAGL,EAAKC,EAAK,AACxB,GAEJ,CACF,EACAP,GAMF,MAHAY,GAAAA,cAAY,EAAC,KACXC,GAAAA,gBAAc,EAACX,EAAI,CAAC,MAAO,aAAc,OAAO,CAClD,yCAGwBY,OAAK,6BACxBC,SAAI,CAAKX,GAGhB"}
package/lib/tree/style.js CHANGED
@@ -160,5 +160,4 @@
160
160
  padding: 0 10px;
161
161
  font-size: 12px;
162
162
  }
163
- `;
164
- //# sourceMappingURL=style.js.map
163
+ `;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/tree/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .tree {\n --size: 8px;\n\n padding-inline-start: 2em;\n inline-size: 100%;\n box-sizing: border-box;\n }\n\n .row {\n position: relative;\n z-index: 0;\n display: flex;\n align-items: baseline;\n border-radius: var(--border-radius);\n padding: 2px 10px;\n color: var(--text-color);\n background-color: var(--component-bg);\n list-style: none;\n box-shadow: 0 0 0 1px var(--border-color);\n margin-inline-start: var(--depth);\n margin-block-end: var(--size);\n cursor: pointer;\n box-sizing: border-box;\n min-inline-size: 160px;\n inline-size: fit-content;\n }\n\n .row.non {\n cursor: auto;\n }\n\n .row::before,\n .row::after {\n position: absolute;\n pointer-events: none;\n z-index: -1;\n inset-inline-start: 0;\n transition-property: border-color;\n }\n\n .row:not(:first-of-type, :last-of-type, [data-path-end])::before {\n content: '';\n inset-inline-start: -1em;\n inset-block-start: 50%;\n inline-size: 1em;\n block-size: 100%;\n border-block-start: 1px solid var(--border-color);\n box-sizing: border-box;\n }\n\n .row[data-path] {\n --r: 0 0 0 var(--border-radius);\n --c: '';\n\n &::after {\n border-style: solid;\n border-width: 0 0 1px 1px;\n border-color: var(--border-color);\n border-radius: var(--r);\n content: var(--c);\n inline-size: 1em;\n inset-block-start: calc(var(--size) * -1);\n inset-inline-start: -1em;\n block-size: var(--line);\n box-sizing: border-box;\n }\n }\n\n .row:first-of-type {\n --r: var(--border-radius) 0 0 var(--border-radius);\n\n &[data-path]::after {\n border-width: 1px 0 1px 1px;\n inset-block-start: 15px;\n }\n }\n\n .row:last-of-type {\n margin-block-end: 0;\n }\n\n .title {\n font-size: 14px;\n font-weight: normal;\n }\n\n .sub-title {\n padding: 0 var(--size);\n font-size: 10px;\n color: var(--text-secondary);\n font-style: italic;\n text-transform: capitalize;\n opacity: 0.5;\n }\n\n .row.active {\n color: var(--primary-color);\n background-color: var(--primary-selection);\n box-shadow: 0 0 0 1px var(--primary-border);\n text-shadow: 2px 2px 2px var(--primary-outline);\n }\n\n .rtl {\n direction: rtl;\n }\n\n .rtl .row {\n flex-direction: row-reverse;\n justify-content: flex-end;\n\n &::before,\n &::after {\n transform: scaleX(-1);\n }\n }\n\n .normal {\n --size: 8px;\n }\n\n .small {\n --size: 6px;\n }\n\n .small .row {\n padding: 1px 9px;\n\n &:first-of-type[data-path]::after {\n inset-block-start: 12px;\n }\n }\n\n .small .title {\n font-size: 13px;\n }\n\n .small .sub-title {\n padding: 0 4px;\n font-size: 9px;\n }\n\n .large {\n --size: 10px;\n }\n\n .large .row {\n padding: 3px 12px;\n\n &:first-of-type[data-path]::after {\n inset-block-start: 17px;\n }\n }\n\n .large .title {\n font-size: 15px;\n }\n\n .large .sub-title {\n padding: 0 10px;\n font-size: 12px;\n }\n`;\n"],"names":["style","css"],"mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKzB,CAAC"}
1
+ {"version":3,"sources":["components/tree/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .tree {\n --size: 8px;\n\n padding-inline-start: 2em;\n inline-size: 100%;\n box-sizing: border-box;\n }\n\n .row {\n position: relative;\n z-index: 0;\n display: flex;\n align-items: baseline;\n border-radius: var(--border-radius);\n padding: 2px 10px;\n color: var(--text-color);\n background-color: var(--component-bg);\n list-style: none;\n box-shadow: 0 0 0 1px var(--border-color);\n margin-inline-start: var(--depth);\n margin-block-end: var(--size);\n cursor: pointer;\n box-sizing: border-box;\n min-inline-size: 160px;\n inline-size: fit-content;\n }\n\n .row.non {\n cursor: auto;\n }\n\n .row::before,\n .row::after {\n position: absolute;\n pointer-events: none;\n z-index: -1;\n inset-inline-start: 0;\n transition-property: border-color;\n }\n\n .row:not(:first-of-type, :last-of-type, [data-path-end])::before {\n content: '';\n inset-inline-start: -1em;\n inset-block-start: 50%;\n inline-size: 1em;\n block-size: 100%;\n border-block-start: 1px solid var(--border-color);\n box-sizing: border-box;\n }\n\n .row[data-path] {\n --r: 0 0 0 var(--border-radius);\n --c: '';\n\n &::after {\n border-style: solid;\n border-width: 0 0 1px 1px;\n border-color: var(--border-color);\n border-radius: var(--r);\n content: var(--c);\n inline-size: 1em;\n inset-block-start: calc(var(--size) * -1);\n inset-inline-start: -1em;\n block-size: var(--line);\n box-sizing: border-box;\n }\n }\n\n .row:first-of-type {\n --r: var(--border-radius) 0 0 var(--border-radius);\n\n &[data-path]::after {\n border-width: 1px 0 1px 1px;\n inset-block-start: 15px;\n }\n }\n\n .row:last-of-type {\n margin-block-end: 0;\n }\n\n .title {\n font-size: 14px;\n font-weight: normal;\n }\n\n .sub-title {\n padding: 0 var(--size);\n font-size: 10px;\n color: var(--text-secondary);\n font-style: italic;\n text-transform: capitalize;\n opacity: 0.5;\n }\n\n .row.active {\n color: var(--primary-color);\n background-color: var(--primary-selection);\n box-shadow: 0 0 0 1px var(--primary-border);\n text-shadow: 2px 2px 2px var(--primary-outline);\n }\n\n .rtl {\n direction: rtl;\n }\n\n .rtl .row {\n flex-direction: row-reverse;\n justify-content: flex-end;\n\n &::before,\n &::after {\n transform: scaleX(-1);\n }\n }\n\n .normal {\n --size: 8px;\n }\n\n .small {\n --size: 6px;\n }\n\n .small .row {\n padding: 1px 9px;\n\n &:first-of-type[data-path]::after {\n inset-block-start: 12px;\n }\n }\n\n .small .title {\n font-size: 13px;\n }\n\n .small .sub-title {\n padding: 0 4px;\n font-size: 9px;\n }\n\n .large {\n --size: 10px;\n }\n\n .large .row {\n padding: 3px 12px;\n\n &:first-of-type[data-path]::after {\n inset-block-start: 17px;\n }\n }\n\n .large .title {\n font-size: 15px;\n }\n\n .large .sub-title {\n padding: 0 10px;\n font-size: 12px;\n }\n`;\n"],"names":["style","css"],"mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKzB,CAAC"}
package/lib/tree/type.js CHANGED
@@ -1,2 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});
2
- //# sourceMappingURL=type.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/tree/type.ts"],"names":[],"mappings":""}
1
+ {"version":3,"sources":[],"names":[],"mappings":""}