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/md/index.tsx"],"sourcesContent":["import { createEffect, For, Match, mergeProps, onCleanup, Show, Switch } from 'solid-js';\nimport { frameCallback } 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 mdStyle from '../md-style';\nimport theme, { block } from '../theme';\n\nimport '../code';\nimport '../img';\n\nfunction MD(_props: MdProps) {\n let renderer: marked.Renderer | undefined;\n let ref: HTMLDivElement | undefined;\n const { baseStyle } = theme;\n const props = mergeProps(\n {\n webWorker: false,\n pictureViewer: true,\n lazyPicture: true,\n text: '',\n tools: ['copy'],\n getAnchorContainer: () => window as unknown as HTMLElement,\n },\n _props,\n );\n\n function initWorker() {\n return new Worker('https://cdn.jsdelivr.net/npm/neko-ui@latest/es/md/worker.js');\n }\n // eslint-disable-next-line solid/reactivity\n let worker: Worker | undefined = props.webWorker ? initWorker() : void 0;\n\n function update(e: { data: string }) {\n if (ref) {\n ref.innerHTML = e.data;\n }\n }\n async function postMessage(opt: {\n text: string;\n pictureViewer?: boolean;\n lazyPicture?: boolean;\n langToolbar?: string[];\n }) {\n const { text, pictureViewer, lazyPicture, langToolbar, ...options } = opt;\n const marked = (await import('marked-completed')).default;\n\n if (!renderer) {\n renderer = new marked.Renderer();\n\n renderer.katexBlock = (code: string) => {\n return `<n-katex display-mode=\"true\">${code}</n-katex>`;\n };\n renderer.katexInline = (code: string) => {\n return `<n-katex>${code}</n-katex>`;\n };\n }\n\n renderer.image = (src: string, title: string, alt: string) => {\n return `<n-img lazy=\"${lazyPicture}\" disabled=\"${!pictureViewer}\" role=\"img\" src=\"${src}\" alt=\"${alt}\" ${title ? `title=\"${title}\"` : ''}></n-img>`;\n };\n const toolbar = !!langToolbar?.length;\n\n renderer.code = function (code: string, lang: string) {\n if (lang === 'treeview') {\n return `<n-tree data=\"${code}\" />`;\n }\n\n return `<n-code class=\"n-code\" toolbar=\"${toolbar}\" language=\"${lang}\">${code}</n-code>`;\n };\n\n update({\n data: marked(text, {\n renderer: renderer,\n langToolbar: langToolbar,\n headerPrefix: '# ',\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n ...options,\n }),\n });\n }\n createEffect(() => {\n if (props.webWorker) {\n if (!worker) {\n worker = initWorker();\n }\n worker.addEventListener('message', update);\n }\n });\n\n createEffect(() => {\n if (worker) {\n worker.postMessage(\n JSON.stringify({\n text: props.text,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n }),\n );\n } else {\n const call = () =>\n postMessage({\n text: props.text,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n });\n\n frameCallback(call);\n }\n });\n onCleanup(() => {\n if (worker) {\n worker.removeEventListener('message', update);\n worker.terminate();\n }\n });\n let list: HTMLAnchorElement[] = [];\n let heading: HTMLHeadingElement[] = [];\n const active: HTMLAnchorElement[] = [];\n\n function handleAnchor(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n const a = e.target as HTMLAnchorElement;\n\n if (a.hash) {\n ref?.querySelector(decodeURIComponent(a.hash))?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n list.forEach((item) => {\n item.classList.remove('active');\n });\n a.classList.add('active');\n } else {\n window.open(a.href);\n }\n }\n function observerEntry(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n const id = entry.target.getAttribute('id');\n const all = entry.target.querySelectorAll('a');\n let a: HTMLAnchorElement | undefined;\n\n list.forEach((l) => {\n if (l.hash === `#${id}`) {\n a = l;\n } else if (!l.hash) {\n all.forEach((e) => {\n if (e.href === l.href) {\n a = l;\n }\n });\n }\n });\n if (a) {\n const idx = active.indexOf(a);\n\n active.forEach((e) => {\n e.classList.remove('active');\n });\n if (entry.isIntersecting) {\n active.push(a);\n } else if (idx !== -1) {\n active.splice(idx, 1);\n }\n if (active[0]) {\n active[0].classList.add('active');\n active[0].offsetParent?.scrollTo({\n top: active[0].offsetTop,\n });\n }\n }\n });\n }\n createEffect(() => {\n let observer: IntersectionObserver;\n\n if (ref && props.text.startsWith('[TOC]')) {\n list = [...ref.querySelectorAll<HTMLAnchorElement>('.n-md-toc a[href]')];\n heading = [...ref.querySelectorAll<HTMLHeadingElement>('h1, h2, h3, h4, h5, h6')];\n observer = new IntersectionObserver(observerEntry, {\n rootMargin: '-50px 0px',\n threshold: 0.5,\n });\n heading.forEach((e) => {\n observer.observe(e);\n });\n list.forEach((e) => {\n e.addEventListener('click', handleAnchor);\n });\n }\n onCleanup(() => {\n if (observer) {\n heading.forEach((e) => {\n observer.unobserve(e);\n });\n observer.disconnect();\n }\n list.forEach((e) => {\n e.removeEventListener('click', handleAnchor);\n });\n });\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={mdStyle} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <Switch>\n <Match when={(props.children || []).length > 0}>\n <article class=\"n-md-box\" part=\"box\">\n <div class=\"n-md-body\" part=\"body\">\n <For each={props.children as []}>{(e) => e}</For>\n </div>\n </article>\n </Match>\n <Match when={props.text}>\n <article ref={ref} class={cx('n-md-box', props.class)} part=\"box\" />\n </Match>\n </Switch>\n </>\n );\n}\n\nexport interface MdProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** md内容 */\n text?: string;\n /** 开启图片查看器\n * @since 2.0.8\n * @default true\n */\n pictureViewer?: boolean;\n /** 开启图片懒加载\n * @since 2.8.3\n * @default true\n */\n lazyPicture?: boolean;\n /** 开启代码块工具条\n * @default ['copy']\n */\n tools?: 'copy'[];\n /** 指定滚动的容器\n * @default () => window\n */\n getAnchorContainer?: () => HTMLElement;\n /** 不进行解析\n * @default false\n */\n notRender?: boolean;\n children?: JSX.Element;\n /**\n * 使用 web worker\n */\n webWorker?: boolean;\n}\n\nexport type MdElement = CustomElement<MdProps>;\n\ncustomElement<MdProps>(\n 'n-md',\n {\n class: void 0,\n pictureViewer: void 0,\n lazyPicture: void 0,\n text: void 0,\n tools: void 0,\n getAnchorContainer: void 0,\n css: void 0,\n children: void 0,\n notRender: void 0,\n webWorker: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n text: (!_.notRender && el.textContent) || el.text,\n css: el.css,\n tools: el.tools,\n getAnchorContainer: el.getAnchorContainer,\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['css', 'text']);\n el.replaceChildren();\n });\n return (\n <>\n <style textContent={block} />\n <MD {...props} />\n </>\n );\n },\n);\nexport default MD;\n"],"names":["createEffect","For","Match","mergeProps","onCleanup","Show","Switch","frameCallback","css","cx","customElement","clearAttribute","mdStyle","theme","block","MD","_props","renderer","ref","baseStyle","props","webWorker","pictureViewer","lazyPicture","text","tools","getAnchorContainer","window","initWorker","Worker","worker","update","e","innerHTML","data","postMessage","opt","langToolbar","options","marked","default","Renderer","katexBlock","code","katexInline","image","src","title","alt","toolbar","length","lang","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","addEventListener","JSON","stringify","removeEventListener","terminate","list","heading","active","handleAnchor","preventDefault","stopPropagation","a","target","hash","querySelector","decodeURIComponent","scrollIntoView","behavior","forEach","item","classList","remove","add","open","href","observerEntry","entries","entry","id","getAttribute","all","querySelectorAll","l","idx","indexOf","isIntersecting","push","splice","offsetParent","scrollTo","top","offsetTop","observer","startsWith","IntersectionObserver","rootMargin","threshold","observe","unobserve","disconnect","children","class","notRender","_","el","element","textContent","replaceChildren"],"mappings":"qtBAAA,QAASA,gBAAAA,CAAY,CAAEC,OAAAA,CAAG,CAAEC,SAAAA,CAAK,CAAEC,cAAAA,CAAU,CAAEC,aAAAA,CAAS,CAAEC,QAAAA,CAAI,CAAEC,UAAAA,CAAM,KAAQ,UAAW,AACzF,QAASC,MAAqB,kCAAiB,AAC/C,QAASC,OAAAA,CAAG,CAAEC,MAAAA,CAAE,KAAQ,aAAc,AACtC,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAG9C,QAASC,kBAAAA,CAAc,KAAQ,iBAAkB,AACjD,QAAOC,MAAa,aAAc,AAClC,QAAOC,GAASC,SAAAA,CAAK,KAAQ,UAAW,AAExC,OAAO,SAAU,AACjB,OAAO,QAAS,CAEhB,SAASC,EAAGC,CAAe,MACrBC,EACAC,EACJ,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGN,EAChBO,EAAQjB,EACZ,CACEkB,UAAW,CAAA,EACXC,cAAe,CAAA,EACfC,YAAa,CAAA,EACbC,KAAM,GACNC,MAAO,CAAC,OAAO,CACfC,mBAAoB,IAAMC,MAC5B,EACAX,GAGF,SAASY,IACP,OAAO,IAAIC,OAAO,8DACpB,CAEA,IAAIC,EAA6BV,EAAMC,SAAS,CAAGO,IAAe,KAAK,EAEvE,SAASG,EAAOC,CAAmB,EAC7Bd,GACFA,CAAAA,EAAIe,SAAS,CAAGD,EAAEE,IAAI,AAAD,CAEzB,UACeC,mBAAf,UAA2BC,CAK1B,EACC,GAAM,CAAEZ,KAAAA,CAAI,CAAEF,cAAAA,CAAa,CAAEC,YAAAA,CAAW,CAAEc,YAAAA,CAAW,CAAc,CAAGD,EAAZE,qIAAYF,GAA9DZ,OAAMF,gBAAeC,cAAac,gBACpCE,EAAS,AAAC,CAAA,MAAM,MAAM,CAAC,mBAAkB,EAAGC,OAAO,CAEpDvB,IAGHA,AAFAA,CAAAA,EAAW,IAAIsB,EAAOE,QAAQ,AAAC,EAEtBC,UAAU,CAAG,AAACC,GACd,CAAC,6BAA6B,EAAEA,EAAK,UAAU,CAAC,CAEzD1B,EAAS2B,WAAW,CAAG,AAACD,GACf,CAAC,SAAS,EAAEA,EAAK,UAAU,CAAC,EAIvC1B,EAAS4B,KAAK,CAAG,CAACC,EAAaC,EAAeC,IACrC,CAAC,aAAa,EAAEzB,EAAY,YAAY,EAAE,CAACD,EAAc,kBAAkB,EAAEwB,EAAI,OAAO,EAAEE,EAAI,EAAE,EAAED,EAAQ,CAAC,OAAO,EAAEA,EAAM,CAAC,CAAC,CAAG,GAAG,SAAS,CAAC,CAErJ,IAAME,EAAU,CAAC,QAACZ,SAAAA,EAAaa,MAAM,CAErCjC,CAAAA,EAAS0B,IAAI,CAAG,SAAUA,CAAY,CAAEQ,CAAY,QAClD,AAAIA,AAAS,aAATA,EACK,CAAC,cAAc,EAAER,EAAK,IAAI,CAAC,CAG7B,CAAC,gCAAgC,EAAEM,EAAQ,YAAY,EAAEE,EAAK,EAAE,EAAER,EAAK,SAAS,CAAC,AAC1F,EAEAZ,EAAO,CACLG,KAAMK,EAAOf,EAAM,GACjBP,SAAUA,EACVoB,YAAaA,EACbe,aAAc,KACdC,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,MAAO,CAAA,GACJnB,GAEP,EACF,GA9CeH,qMA+CfnC,EAAa,KACPoB,EAAMC,SAAS,GACZS,GACHA,CAAAA,EAASF,GAAW,EAEtBE,EAAO4B,gBAAgB,CAAC,UAAW3B,GAEvC,GAEA/B,EAAa,KACP8B,EACFA,EAAOK,WAAW,CAChBwB,KAAKC,SAAS,CAAC,CACbpC,KAAMJ,EAAMI,IAAI,CAChBa,YAAajB,EAAMK,KAAK,CACxBH,cAAeF,EAAME,aAAa,CAClCC,YAAaH,EAAMG,WAAW,AAChC,IAWFhB,EARa,IACX4B,UApEqBC,CAK1B,SALcD,0BAoEG,CACVX,KAAMJ,EAAMI,IAAI,CAChBa,YAAajB,EAAMK,KAAK,CACxBH,cAAeF,EAAME,aAAa,CAClCC,YAAaH,EAAMG,WAAW,AAChC,GAIN,GACAnB,EAAU,KACJ0B,IACFA,EAAO+B,mBAAmB,CAAC,UAAW9B,GACtCD,EAAOgC,SAAS,GAEpB,GACA,IAAIC,EAA4B,EAAE,CAC9BC,EAAgC,EAAE,CAChCC,EAA8B,EAAE,CAEtC,SAASC,EAAalC,CAAQ,EAC5BA,EAAEmC,cAAc,GAChBnC,EAAEoC,eAAe,GACjB,IAAMC,EAAIrC,EAAEsC,MAAM,CAElB,GAAID,EAAEE,IAAI,CAAE,KACVrD,QAAAA,UAAAA,EAAAA,EAAKsD,aAAa,CAACC,mBAAmBJ,EAAEE,IAAI,KAA5CrD,EAAgDwD,cAAc,CAAC,CAC7DC,SAAU,SACV7D,MAAO,SACT,GACAiD,EAAKa,OAAO,CAAC,AAACC,IACZA,EAAKC,SAAS,CAACC,MAAM,CAAC,SACxB,GACAV,EAAES,SAAS,CAACE,GAAG,CAAC,SAClB,MACErD,OAAOsD,IAAI,CAACZ,EAAEa,IAAI,CAEtB,CACA,SAASC,EAAcC,CAAoC,EACzDA,EAAQR,OAAO,CAAC,AAACS,QAGXhB,EAFJ,IAAMiB,EAAKD,EAAMf,MAAM,CAACiB,YAAY,CAAC,MAC/BC,EAAMH,EAAMf,MAAM,CAACmB,gBAAgB,CAAC,KAc1C,GAXA1B,EAAKa,OAAO,CAAC,AAACc,IACRA,EAAEnB,IAAI,GAAK,CAAC,CAAC,EAAEe,EAAG,CAAC,CACrBjB,EAAIqB,EACMA,EAAEnB,IAAI,EAChBiB,EAAIZ,OAAO,CAAC,AAAC5C,IACPA,EAAEkD,IAAI,GAAKQ,EAAER,IAAI,EACnBb,CAAAA,EAAIqB,CAAAA,CAER,EAEJ,GACIrB,EAAG,CACL,IAAMsB,EAAM1B,EAAO2B,OAAO,CAACvB,GAU3B,GARAJ,EAAOW,OAAO,CAAC,AAAC5C,IACdA,EAAE8C,SAAS,CAACC,MAAM,CAAC,SACrB,GACIM,EAAMQ,cAAc,CACtB5B,EAAO6B,IAAI,CAACzB,GACK,KAARsB,GACT1B,EAAO8B,MAAM,CAACJ,EAAK,GAEjB1B,CAAM,CAAC,EAAE,CAAE,KAEbA,EADAA,CAAM,CAAC,EAAE,CAACa,SAAS,CAACE,GAAG,CAAC,iBACxBf,EAAAA,CAAM,CAAC,EAAE,CAAC+B,YAAY,GAAtB/B,EAAwBgC,QAAQ,CAAC,CAC/BC,IAAKjC,CAAM,CAAC,EAAE,CAACkC,SAAS,AAC1B,EACF,CACF,CACF,EACF,CA+BA,OA9BAnG,EAAa,KACX,IAAIoG,EAEAlF,GAAOE,EAAMI,IAAI,CAAC6E,UAAU,CAAC,WAC/BtC,EAAO,IAAI7C,EAAIuE,gBAAgB,CAAoB,qBAAqB,CACxEzB,EAAU,IAAI9C,EAAIuE,gBAAgB,CAAqB,0BAA0B,CACjFW,EAAW,IAAIE,qBAAqBnB,EAAe,CACjDoB,WAAY,YACZC,UAAW,EACb,GACAxC,EAAQY,OAAO,CAAC,AAAC5C,IACfoE,EAASK,OAAO,CAACzE,EACnB,GACA+B,EAAKa,OAAO,CAAC,AAAC5C,IACZA,EAAE0B,gBAAgB,CAAC,QAASQ,EAC9B,IAEF9D,EAAU,KACJgG,IACFpC,EAAQY,OAAO,CAAC,AAAC5C,IACfoE,EAASM,SAAS,CAAC1E,EACrB,GACAoE,EAASO,UAAU,IAErB5C,EAAKa,OAAO,CAAC,AAAC5C,IACZA,EAAE6B,mBAAmB,CAAC,QAASK,EACjC,EACF,EACF,uDAIwB/C,gDACAP,UACnBP,qBAAWe,EAAMZ,GAAG,8DACCA,EAAIY,EAAMZ,GAAG,UAElCF,2BACEJ,oBAAY,AAACkB,CAAAA,EAAMwF,QAAQ,EAAI,EAAE,AAAD,EAAG1D,MAAM,CAAG,oDAGtCjD,qBAAUmB,EAAMwF,QAAQ,WAAS,AAAC5E,GAAMA,YAI9C9B,qBAAYkB,EAAMI,IAAI,6BACPN,oCAAAA,cAAYT,EAAG,WAAYW,EAAMyF,KAAK,aAK9D,CAwCAnG,EACE,OACA,CACEmG,MAAO,KAAK,EACZvF,cAAe,KAAK,EACpBC,YAAa,KAAK,EAClBC,KAAM,KAAK,EACXC,MAAO,KAAK,EACZC,mBAAoB,KAAK,EACzBlB,IAAK,KAAK,EACVoG,SAAU,KAAK,EACfE,UAAW,KAAK,EAChBzF,UAAW,KAAK,CAClB,EACA,CAAC0F,EAAG3E,KACF,IAAM4E,EAAK5E,EAAI6E,OAAO,CAChB7F,EAAQjB,EACZ,CACEqB,KAAM,AAAC,CAACuF,EAAED,SAAS,EAAIE,EAAGE,WAAW,EAAKF,EAAGxF,IAAI,CACjDhB,IAAKwG,EAAGxG,GAAG,CACXiB,MAAOuF,EAAGvF,KAAK,CACfC,mBAAoBsF,EAAGtF,kBAAkB,AAC3C,EACAqF,GAOF,OAJA/G,EAAa,KACXW,EAAeqG,EAAI,CAAC,MAAO,OAAO,EAClCA,EAAGG,eAAe,EACpB,yCAGwBrG,UACnBC,EAAOK,GAGd,EAEF,gBAAeL,CAAG"}
1
+ {"version":3,"sources":["components/md/index.tsx"],"sourcesContent":["import {\n createEffect,\n createResource,\n For,\n Match,\n mergeProps,\n onCleanup,\n Show,\n Switch,\n} from 'solid-js';\nimport { frameCallback } 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 mdStyle from '../md-style';\nimport theme, { block } from '../theme';\n\nimport { code, image, katexBlock, katexInline } from './common';\nimport { create, dispose, type WorkerMessage } from './worker';\n\nimport '../code';\nimport '../img';\n\nfunction MD(_props: MdProps) {\n let renderer: marked.Renderer | undefined;\n let ref: HTMLDivElement | undefined;\n const { baseStyle } = theme;\n const props = mergeProps(\n {\n webWorker: false,\n pictureViewer: true,\n lazyPicture: true,\n text: '',\n tools: ['copy'],\n getAnchorContainer: () => window as unknown as HTMLElement,\n },\n _props,\n );\n\n async function createWorker(enable: boolean) {\n return enable ? new Worker(await create()) : Promise.resolve(void 0);\n }\n const [worker, { mutate }] = createResource(false, createWorker);\n\n function update(e: { data: string }) {\n if (ref) {\n ref.innerHTML = e.data;\n }\n }\n async function postMessage(opt: WorkerMessage) {\n const { text, lazyPicture, pictureViewer, langToolbar, ...options } = opt;\n const marked = (await import('marked-completed')).default;\n\n if (!renderer) {\n renderer = new marked.Renderer();\n renderer.katexBlock = katexBlock;\n renderer.katexInline = katexInline;\n }\n renderer.image = image(lazyPicture, pictureViewer);\n renderer.code = code(langToolbar);\n update({\n data: marked(text, {\n renderer: renderer,\n langToolbar: langToolbar,\n headerPrefix: '# ',\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n ...options,\n }),\n });\n }\n createEffect(() => {\n createWorker(props.webWorker).then((res) => {\n if (res) {\n res.addEventListener('message', update);\n }\n mutate(res);\n });\n });\n\n createEffect(() => {\n if (props.webWorker) {\n const webWorker = worker();\n\n if (webWorker) {\n webWorker.postMessage({\n text: props.text,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n });\n }\n } else {\n const call = () =>\n postMessage({\n text: props.text,\n langToolbar: props.tools,\n pictureViewer: props.pictureViewer,\n lazyPicture: props.lazyPicture,\n });\n\n frameCallback(call);\n }\n });\n onCleanup(() => {\n if (props.webWorker) {\n const webWorker = worker();\n\n if (webWorker) {\n webWorker.removeEventListener('message', update);\n webWorker.terminate();\n }\n dispose();\n }\n });\n let list: HTMLAnchorElement[] = [];\n let heading: HTMLHeadingElement[] = [];\n const active: HTMLAnchorElement[] = [];\n\n function handleAnchor(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n const a = e.target as HTMLAnchorElement;\n\n if (a.hash) {\n ref?.querySelector(decodeURIComponent(a.hash))?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n list.forEach((item) => {\n item.classList.remove('active');\n });\n a.classList.add('active');\n } else {\n window.open(a.href);\n }\n }\n function observerEntry(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n const id = entry.target.getAttribute('id');\n const all = entry.target.querySelectorAll('a');\n let a: HTMLAnchorElement | undefined;\n\n list.forEach((l) => {\n if (l.hash === `#${id}`) {\n a = l;\n } else if (!l.hash) {\n all.forEach((e) => {\n if (e.href === l.href) {\n a = l;\n }\n });\n }\n });\n if (a) {\n const idx = active.indexOf(a);\n\n active.forEach((e) => {\n e.classList.remove('active');\n });\n if (entry.isIntersecting) {\n active.push(a);\n } else if (idx !== -1) {\n active.splice(idx, 1);\n }\n if (active[0]) {\n active[0].classList.add('active');\n active[0].offsetParent?.scrollTo({\n top: active[0].offsetTop,\n });\n }\n }\n });\n }\n createEffect(() => {\n let observer: IntersectionObserver;\n\n if (ref && props.text.startsWith('[TOC]')) {\n list = [...ref.querySelectorAll<HTMLAnchorElement>('.n-md-toc a[href]')];\n heading = [...ref.querySelectorAll<HTMLHeadingElement>('h1, h2, h3, h4, h5, h6')];\n observer = new IntersectionObserver(observerEntry, {\n rootMargin: '-50px 0px',\n threshold: 0.5,\n });\n heading.forEach((e) => {\n observer.observe(e);\n });\n list.forEach((e) => {\n e.addEventListener('click', handleAnchor);\n });\n }\n onCleanup(() => {\n if (observer) {\n heading.forEach((e) => {\n observer.unobserve(e);\n });\n observer.disconnect();\n }\n list.forEach((e) => {\n e.removeEventListener('click', handleAnchor);\n });\n });\n });\n\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={mdStyle} />\n <Show when={props.css}>\n <style textContent={css(props.css)} />\n </Show>\n <Switch>\n <Match when={(props.children || []).length > 0}>\n <article class=\"n-md-box\" part=\"box\">\n <div class=\"n-md-body\" part=\"body\">\n <For each={props.children as []}>{(e) => e}</For>\n </div>\n </article>\n </Match>\n <Match when={props.text}>\n <article ref={ref} class={cx('n-md-box', props.class)} part=\"box\" />\n </Match>\n </Switch>\n </>\n );\n}\n\nexport interface MdProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** md内容 */\n text?: string;\n /** 开启图片查看器\n * @since 2.0.8\n * @default true\n */\n pictureViewer?: boolean;\n /** 开启图片懒加载\n * @since 2.8.3\n * @default true\n */\n lazyPicture?: boolean;\n /** 开启代码块工具条\n * @default ['copy']\n */\n tools?: 'copy'[];\n /** 指定滚动的容器\n * @default () => window\n */\n getAnchorContainer?: () => HTMLElement;\n /** 不进行解析\n * @default false\n */\n notRender?: boolean;\n children?: JSX.Element;\n /**\n * 使用 web worker\n * @default true\n */\n webWorker?: boolean;\n}\n\nexport type MdElement = CustomElement<MdProps>;\n\ncustomElement<MdProps>(\n 'n-md',\n {\n class: void 0,\n pictureViewer: void 0,\n lazyPicture: void 0,\n text: void 0,\n tools: void 0,\n getAnchorContainer: void 0,\n css: void 0,\n children: void 0,\n notRender: void 0,\n webWorker: true,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n text: (!_.notRender && el.textContent) || el.text,\n css: el.css,\n tools: el.tools,\n getAnchorContainer: el.getAnchorContainer,\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['css', 'text']);\n el.replaceChildren();\n });\n return (\n <>\n <style textContent={block} />\n <MD {...props} />\n </>\n );\n },\n);\nexport default MD;\n"],"names":["createEffect","createResource","For","Match","mergeProps","onCleanup","Show","Switch","frameCallback","css","cx","customElement","clearAttribute","mdStyle","theme","block","code","image","katexBlock","katexInline","create","dispose","MD","_props","renderer","ref","baseStyle","props","webWorker","pictureViewer","lazyPicture","text","tools","getAnchorContainer","window","createWorker","enable","Worker","Promise","resolve","worker","mutate","update","e","innerHTML","data","postMessage","opt","langToolbar","options","marked","default","Renderer","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","then","res","addEventListener","removeEventListener","terminate","list","heading","active","handleAnchor","preventDefault","stopPropagation","a","target","hash","querySelector","decodeURIComponent","scrollIntoView","behavior","forEach","item","classList","remove","add","open","href","observerEntry","entries","entry","id","getAttribute","all","querySelectorAll","l","idx","indexOf","isIntersecting","push","splice","offsetParent","scrollTo","top","offsetTop","observer","startsWith","IntersectionObserver","rootMargin","threshold","observe","unobserve","disconnect","children","length","class","notRender","_","el","element","textContent","replaceChildren"],"mappings":"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"}
package/es/md/worker.d.ts CHANGED
@@ -1 +1,9 @@
1
- export {};
1
+ import type { MarkedOptions } from 'marked-completed';
2
+ export interface WorkerMessage extends MarkedOptions {
3
+ text: string;
4
+ id?: string;
5
+ pictureViewer?: boolean;
6
+ lazyPicture?: boolean;
7
+ }
8
+ export declare function create(): Promise<string>;
9
+ export declare function dispose(): boolean;
package/es/md/worker.js CHANGED
@@ -1,2 +1 @@
1
- function e(){return(e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}self.importScripts("https://cdn.jsdelivr.net/npm/marked-completed/marked.min.js"),self.addEventListener("message",function(t){let n;try{let r=JSON.parse(t.data),{text:a,pictureViewer:l,lazyPicture:o,langToolbar:i}=r,s=function(e,t){if(null==e)return{};var n,r,a={},l=Object.keys(e);for(r=0;r<l.length;r++)n=l[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(r,["text","pictureViewer","lazyPicture","langToolbar"]),c=new self.marked.Renderer;c.katexBlock=function(e){return`<n-katex display-mode="true">${e}</n-katex>`},c.katexInline=function(e){return`<n-katex>${e}</n-katex>`},c.image=(e,t,n)=>`<n-img lazy="${o}" disabled="${!l}" role="img" src="${e}" alt="${n}" ${t?`title="${t}"`:""}></n-img>`;let d=!!(null==i?void 0:i.length);c.code=function(e,t){return"treeview"===t?`<n-tree data="${e}" />`:`<n-code class="n-code" toolbar="${d}" language="${t}">${encodeURIComponent(e)}</n-code>`},n=self.marked(a,e({renderer:c,langToolbar:i,headerPrefix:"# ",breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0,xhtml:!0},s))}catch(e){n=e}self.postMessage(n)},!1);export{};
2
- //# sourceMappingURL=worker.js.map
1
+ let e,t;function r(e,t,r,n,a,i,c){try{var o=e[i](c),l=o.value}catch(e){r(e);return}o.done?t(l):Promise.resolve(l).then(n,a)}function n(e){return function(){var t=this,n=arguments;return new Promise(function(a,i){var c=e.apply(t,n);function o(e){r(c,a,i,o,l,"next",e)}function l(e){r(c,a,i,o,l,"throw",e)}o(void 0)})}}import{code as a,image as i,katexBlock as c,katexInline as o}from"./common";function l(){return(l=n(function*(){let e=(yield import("marked-completed?raw")).default;return URL.createObjectURL(new Blob([e],{type:"application/javascript"}))})).apply(this,arguments)}let p=0;export function create(){return s.apply(this,arguments)}function s(){return(s=n(function*(){return p++,e||(e=yield function(){return l.apply(this,arguments)}()),t||(t=URL.createObjectURL(new Blob([`(${(function(){let e;self.importScripts("MARKED_URL"),self.addEventListener("message",function(t){let r;try{e||((e=new self.marked.Renderer).katexBlock("'"),e.katexInline("'")),e.image(..."'"),e.code(..."'"),r=self.marked(t.data.text,Object.assign({renderer:e,headerPrefix:"# ",breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0,xhtml:!0},t.data))}catch(e){r=e.message}self.postMessage(r)},!1)}).toString().replace("MARKED_URL",e).replace('katexBlock("\'")',`katexBlock=${c}`).replace('katexInline("\'")',`katexInline=${o}`).replace('image(..."\'")',`image=(${i})(t.data.lazyPicture, t.data.pictureViewer)`).replace('code(..."\'")',`code=(${a})(t.data.langToolbar)`)})(self)`],{type:"application/javascript"}))),t})).apply(this,arguments)}export function dispose(){let r=--p<=0;return r&&(URL.revokeObjectURL(e),e=null,URL.revokeObjectURL(t),t=null),r}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/md/worker.ts"],"sourcesContent":["import type { MarkedOptions } from 'marked-completed';\n\nself.importScripts('https://cdn.jsdelivr.net/npm/marked-completed/marked.min.js');\n\nfunction onMessage(e: MessageEvent<string>) {\n let result;\n\n try {\n const { text, pictureViewer, lazyPicture, langToolbar, ...options } = JSON.parse(e.data) as {\n text: string;\n pictureViewer?: boolean;\n lazyPicture?: boolean;\n langToolbar?: string[];\n } & MarkedOptions;\n const renderer = new self.marked.Renderer();\n\n renderer.katexBlock = function (code: string) {\n return `<n-katex display-mode=\"true\">${code}</n-katex>`;\n };\n renderer.katexInline = function (code: string) {\n return `<n-katex>${code}</n-katex>`;\n };\n renderer.image = (src: string, title: string, alt: string) => {\n return `<n-img lazy=\"${lazyPicture}\" disabled=\"${!pictureViewer}\" role=\"img\" src=\"${src}\" alt=\"${alt}\" ${title ? `title=\"${title}\"` : ''}></n-img>`;\n };\n const toolbar = !!langToolbar?.length;\n\n renderer.code = function (code: string, lang: string) {\n if (lang === 'treeview') {\n return `<n-tree data=\"${code}\" />`;\n }\n\n return `<n-code class=\"n-code\" toolbar=\"${toolbar}\" language=\"${lang}\">${encodeURIComponent(code)}</n-code>`;\n };\n\n result = self.marked(text, {\n renderer: renderer,\n langToolbar: langToolbar,\n headerPrefix: '# ',\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n ...options,\n });\n } catch (error) {\n result = error;\n }\n self.postMessage(result);\n}\n\nself.addEventListener('message', onMessage, false);\n"],"names":["self","importScripts","addEventListener","e","result","JSON","parse","data","text","pictureViewer","lazyPicture","langToolbar","options","renderer","marked","Renderer","katexBlock","code","katexInline","image","src","title","alt","toolbar","length","lang","encodeURIComponent","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","error","postMessage"],"mappings":"+MAEAA,KAAKC,aAAa,CAAC,+DAkDnBD,KAAKE,gBAAgB,CAAC,UAhDtB,SAAmBC,CAAuB,EACxC,IAAIC,EAEJ,GAAI,CACF,IAAsEC,EAAAA,KAAKC,KAAK,CAACH,EAAEI,IAAI,EAAjF,CAAEC,KAAAA,CAAI,CAAEC,cAAAA,CAAa,CAAEC,YAAAA,CAAW,CAAEC,YAAAA,CAAW,CAAc,CAAGN,EAAZO,uIAAYP,GAA9DG,OAAMC,gBAAeC,cAAaC,gBAMpCE,EAAW,IAAIb,KAAKc,MAAM,CAACC,QAAQ,AAEzCF,CAAAA,EAASG,UAAU,CAAG,SAAUC,CAAY,EAC1C,MAAO,CAAC,6BAA6B,EAAEA,EAAK,UAAU,CAAC,AACzD,EACAJ,EAASK,WAAW,CAAG,SAAUD,CAAY,EAC3C,MAAO,CAAC,SAAS,EAAEA,EAAK,UAAU,CAAC,AACrC,EACAJ,EAASM,KAAK,CAAG,CAACC,EAAaC,EAAeC,IACrC,CAAC,aAAa,EAAEZ,EAAY,YAAY,EAAE,CAACD,EAAc,kBAAkB,EAAEW,EAAI,OAAO,EAAEE,EAAI,EAAE,EAAED,EAAQ,CAAC,OAAO,EAAEA,EAAM,CAAC,CAAC,CAAG,GAAG,SAAS,CAAC,CAErJ,IAAME,EAAU,CAAC,QAACZ,SAAAA,EAAaa,MAAM,CAErCX,CAAAA,EAASI,IAAI,CAAG,SAAUA,CAAY,CAAEQ,CAAY,QAClD,AAAIA,AAAS,aAATA,EACK,CAAC,cAAc,EAAER,EAAK,IAAI,CAAC,CAG7B,CAAC,gCAAgC,EAAEM,EAAQ,YAAY,EAAEE,EAAK,EAAE,EAAEC,mBAAmBT,GAAM,SAAS,CAAC,AAC9G,EAEAb,EAASJ,KAAKc,MAAM,CAACN,EAAM,GACzBK,SAAUA,EACVF,YAAaA,EACbgB,aAAc,KACdC,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,MAAO,CAAA,GACJpB,GAEP,CAAE,MAAOqB,EAAO,CACd7B,EAAS6B,CACX,CACAjC,KAAKkC,WAAW,CAAC9B,EACnB,EAE4C,CAAA"}
1
+ {"version":3,"sources":["components/md/worker.ts"],"sourcesContent":["import type { MarkedOptions, Renderer } from 'marked-completed';\n\nimport { code, image, katexBlock, katexInline } from './common';\n\nexport interface WorkerMessage extends MarkedOptions {\n text: string;\n id?: string;\n pictureViewer?: boolean;\n lazyPicture?: boolean;\n}\n\nlet MARKED_URL: string | null, WORKER_URL: string | null;\n\nasync function createMarked() {\n const markedRaw = (await import('marked-completed?raw')).default;\n\n return URL.createObjectURL(\n new Blob([markedRaw], {\n type: 'application/javascript',\n }),\n );\n}\nfunction createURL() {\n function worker() {\n self.importScripts('MARKED_URL');\n let renderer: Renderer;\n\n function onMessage(t: MessageEvent<WorkerMessage>) {\n let result: string;\n\n try {\n if (!renderer) {\n renderer = new self.marked.Renderer();\n renderer.katexBlock(\"'\");\n renderer.katexInline(\"'\");\n }\n renderer.image(...(\"'\" as unknown as [string, string, string]));\n renderer.code(...(\"'\" as unknown as [string, string, false]));\n result = self.marked(\n t.data.text,\n Object.assign(\n {\n renderer: renderer,\n headerPrefix: '# ',\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n },\n t.data,\n ),\n );\n } catch (error) {\n result = (error as Error).message;\n }\n self.postMessage(result);\n }\n self.addEventListener('message', onMessage, false);\n }\n\n return URL.createObjectURL(\n new Blob(\n [\n `(${worker.toString().replace('MARKED_URL', MARKED_URL!).replace(`katexBlock(\"'\")`, `katexBlock=${katexBlock}`).replace(`katexInline(\"'\")`, `katexInline=${katexInline}`).replace(`image(...\"'\")`, `image=(${image})(t.data.lazyPicture, t.data.pictureViewer)`).replace(`code(...\"'\")`, `code=(${code})(t.data.langToolbar)`)})(self)`,\n ],\n {\n type: 'application/javascript',\n },\n ),\n );\n}\nlet count = 0;\n\nexport async function create() {\n count++;\n if (!MARKED_URL) {\n MARKED_URL = await createMarked();\n }\n if (!WORKER_URL) {\n WORKER_URL = createURL();\n }\n return WORKER_URL;\n}\n\nexport function dispose() {\n count--;\n const empty = count <= 0;\n\n if (empty) {\n URL.revokeObjectURL(MARKED_URL!);\n MARKED_URL = null;\n URL.revokeObjectURL(WORKER_URL!);\n WORKER_URL = null;\n }\n return empty;\n}\n"],"names":["MARKED_URL","WORKER_URL","code","image","katexBlock","katexInline","createMarked","markedRaw","default","URL","createObjectURL","Blob","type","count","create","worker","renderer","self","importScripts","addEventListener","t","result","marked","Renderer","data","text","Object","assign","headerPrefix","breaks","pedantic","smartLists","smartypants","xhtml","error","message","postMessage","toString","replace","dispose","empty","revokeObjectURL"],"mappings":"IAWIA,EAA2BC,uTAT/B,OAASC,QAAAA,CAAI,CAAEC,SAAAA,CAAK,CAAEC,cAAAA,CAAU,CAAEC,eAAAA,CAAW,KAAQ,UAAW,UAWjDC,WAAAA,EAAf,EAAA,YACE,IAAMC,EAAY,AAAC,CAAA,MAAM,MAAM,CAAC,uBAAsB,EAAGC,OAAO,CAEhE,OAAOC,IAAIC,eAAe,CACxB,IAAIC,KAAK,CAACJ,EAAU,CAAE,CACpBK,KAAM,wBACR,GAEJ,0BAmDA,IAAIC,EAAQ,CAEZ,iBAAsBC,gBAAAA,iCAAAA,WAAAA,EAAf,EAAA,YAQL,OAPAD,IACKb,GACHA,CAAAA,EAAa,MAAMM,kBAhERA,0BAgEqB,EAE7BL,GACHA,CAAAA,EAnBKQ,IAAIC,eAAe,CACxB,IAAIC,KACF,CACE,CAAC,CAAC,EAAEI,AAzCV,CAAA,eAEMC,EADJC,KAAKC,aAAa,CAAC,cAkCnBD,KAAKE,gBAAgB,CAAC,UA/BtB,SAAmBC,CAA8B,EAC/C,IAAIC,EAEJ,GAAI,CACGL,IAEHA,AADAA,CAAAA,EAAW,IAAIC,KAAKK,MAAM,CAACC,QAAQ,AAAC,EAC3BnB,UAAU,CAAC,KACpBY,EAASX,WAAW,CAAC,MAEvBW,EAASb,KAAK,IAAK,KACnBa,EAASd,IAAI,IAAK,KAClBmB,EAASJ,KAAKK,MAAM,CAClBF,EAAEI,IAAI,CAACC,IAAI,CACXC,OAAOC,MAAM,CACX,CACEX,SAAUA,EACVY,aAAc,KACdC,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,MAAO,CAAA,CACT,EACAb,EAAEI,IAAI,EAGZ,CAAE,MAAOU,EAAO,CACdb,EAAS,AAACa,EAAgBC,OAAO,AACnC,CACAlB,KAAKmB,WAAW,CAACf,EACnB,EAC4C,CAAA,EAC9C,CAAA,EAKiBgB,QAAQ,GAAGC,OAAO,CAAC,aAActC,GAAasC,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAElC,EAAW,CAAC,EAAEkC,OAAO,CAAC,oBAAoB,CAAC,YAAY,EAAEjC,EAAY,CAAC,EAAEiC,OAAO,CAAC,iBAAiB,CAAC,OAAO,EAAEnC,EAAM,2CAA2C,CAAC,EAAEmC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAEpC,EAAK,qBAAqB,CAAC,EAAE,OAAO,CAAC,CACxU,CACD,CACEU,KAAM,wBACR,GAYqB,EAElBX,CACT,0BAEA,OAAO,SAASsC,UAEd,IAAMC,EAAQ3B,EAAAA,GAAS,EAQvB,OANI2B,IACF/B,IAAIgC,eAAe,CAACzC,GACpBA,EAAa,KACbS,IAAIgC,eAAe,CAACxC,GACpBA,EAAa,MAERuC,CACT"}
@@ -566,5 +566,4 @@ import{css as o}from"@moneko/css";let r=o`
566
566
  }
567
567
  }
568
568
  }
569
- `;export default r;
570
- //# sourceMappingURL=index.js.map
569
+ `;export default r;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/md-style/index.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nconst mdStyle = css`\n :host,\n :root {\n --table-heading-bg: var(--border-color);\n }\n\n .n-photo-header > span,\n .n-md-body,\n .n-md-toc {\n backdrop-filter: blur(10px);\n }\n\n .n-md-box:not(.site-doc-main) {\n position: relative;\n display: flex;\n margin: 0 auto;\n max-inline-size: 1280px;\n flex-direction: row-reverse;\n gap: 16px;\n }\n\n .n-md-toc,\n .n-md-body {\n border-radius: var(--border-radius);\n background-color: var(--component-bg);\n box-shadow: 0 2px 8px 0 var(--primary-shadow);\n }\n\n .n-md-body {\n overflow: hidden;\n margin: 0 auto 24px;\n padding: 24px;\n color: var(--text-color);\n max-inline-size: 100%;\n box-sizing: border-box;\n overflow-wrap: break-word;\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: background-color;\n flex: 1;\n }\n\n .n-md-body .n-md-body,\n .n-md-body n-md {\n overflow: visible;\n margin: 0;\n padding: 0;\n background-color: unset;\n backdrop-filter: none;\n box-shadow: none;\n }\n\n .n-md-body:has(div:only-child:empty) {\n margin: 0;\n padding: 0;\n background-color: unset;\n backdrop-filter: none;\n box-shadow: none;\n }\n\n a {\n position: relative;\n text-decoration: none;\n color: var(--text-color);\n }\n\n a:visited {\n color: var(--text-secondary);\n }\n\n a:hover {\n color: var(--primary-hover, #80b3ff);\n }\n\n p {\n padding: 0;\n font-size: var(--font-size);\n line-height: 1.8;\n vertical-align: baseline;\n word-wrap: break-word;\n word-break: break-word;\n\n /* content-visibility: auto;\n contain-intrinsic-size: 32px; */\n margin-block-end: 1em;\n }\n\n ol {\n margin: 0;\n padding: 0 0 0 24px;\n font-size: var(--font-size);\n }\n\n .n-md-toc {\n position: sticky;\n inset-block-start: 24px;\n inset-inline-end: 0;\n z-index: 10;\n display: block;\n overflow-y: auto;\n margin: 0 0 24px;\n padding: 16px;\n max-inline-size: 200px;\n block-size: fit-content;\n max-block-size: calc(100vb - 132px);\n box-sizing: border-box;\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: border-color, background-color, box-shadow;\n }\n\n .n-md-toc li,\n .n-md-toc ol {\n display: grid;\n inline-size: fit-content;\n max-inline-size: 100%;\n font-size: var(--font-size-sm);\n list-style: none;\n }\n\n .n-md-toc li a {\n overflow: hidden;\n max-inline-size: 100%;\n font-size: var(--font-size-sm);\n text-overflow: ellipsis;\n text-decoration: none;\n white-space: nowrap;\n color: var(--text-color);\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: color;\n }\n\n .n-md-toc .active,\n .n-md-toc .active a {\n color: var(--primary-color, #5794ff);\n text-shadow: 0 1px var(--primary-shadow);\n }\n\n .n-md-toc a[href^='http'],\n .n-md-toc a[href^='\\/\\/'],\n .n-md-body table a[href^='http'] {\n &:not(:has(img, n-img))::after {\n content: ' ⎋';\n opacity: 0.3;\n }\n }\n\n a[href^='mailto:']::after {\n content: ' 📧';\n opacity: 0.4;\n }\n\n a[href]:has(img, n-img)::before {\n content: none !important;\n }\n\n a[href]:not(.site-pagination-link)::before {\n position: absolute;\n inset-block-end: 0;\n inset-inline-start: 0;\n inline-size: 100%;\n block-size: 2px;\n background-color: var(--primary-hover, #80b3ff);\n transform: scaleX(0);\n transform-origin: center;\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: transform, background-color;\n opacity: 0.5;\n content: '';\n }\n\n a:hover::before {\n transform: scaleX(1);\n }\n\n th img[src*='browser-logos'] {\n display: block;\n inline-size: 32px;\n block-size: 32px;\n }\n\n h1::before,\n h2::before,\n h3::before,\n h4::before,\n h5::before,\n h6::before {\n color: var(--primary-color, #5794ff);\n content: attr(data-prefix);\n }\n\n h1[data-prefix]::before,\n h2[data-prefix]::before,\n h3[data-prefix]::before,\n h4[data-prefix]::before,\n h5[data-prefix]::before,\n h6[data-prefix]::before {\n color: var(--primary-color, #5794ff);\n content: attr(data-prefix) !important;\n }\n\n code:not([class]),\n mark {\n border-radius: var(--border-radius);\n padding: 2px 7px;\n font-size: 90%;\n color: var(--primary-heading);\n background-color: var(--text-selection);\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: background-color, color;\n }\n\n [data-prefix] code,\n [data-prefix] mark {\n font-size: 60%;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5 {\n margin-block: 1em;\n font-weight: 500;\n color: var(--text-heading);\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: border-color, background-color, box-shadow, color;\n }\n\n table,\n tr th,\n tr td,\n blockquote,\n blockquote::after,\n blockquote::before,\n blockquote p {\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n }\n\n dl {\n padding: 0;\n margin-block-end: 1em;\n }\n\n h1 {\n font-size: 1.6em;\n line-height: 54px;\n }\n\n h2 {\n font-size: 1.5em;\n line-height: 42px;\n counter-increment: section;\n }\n\n h2::before {\n content: counter(section) '. ';\n }\n\n h1,\n h2 {\n border-block-end: 1px dotted var(--border-color);\n padding-block-end: 10px;\n }\n\n h3 {\n font-size: 1.4em;\n line-height: 30px;\n }\n\n h4 {\n font-size: 1.3em;\n line-height: 28px;\n }\n\n h5 {\n font-size: 1.2em;\n list-style: none;\n }\n\n hr {\n margin: 16px 0;\n border: 0 none;\n padding: 0;\n block-size: 2px;\n text-align: start;\n color: var(--text-color);\n background-color: var(--border-color);\n }\n\n p img,\n p n-img {\n position: relative;\n display: flex;\n overflow: hidden;\n margin: auto;\n max-inline-size: 100%;\n inline-size: fit-content;\n cursor: pointer;\n }\n\n n-img::part(img) {\n min-inline-size: 24px;\n }\n\n ul {\n font-size: var(--font-size);\n }\n\n dl dt {\n margin-block-start: 16px;\n padding: 10px 0;\n font-size: 1em;\n font-weight: bold;\n font-style: italic;\n }\n\n dl dd {\n margin-block-end: 16px;\n margin-inline-start: 0;\n padding: 0 16px;\n }\n\n table {\n overflow: hidden;\n margin-block-end: 16px;\n border-block-end: 1px solid var(--table-heading-bg);\n inline-size: 100%;\n max-inline-size: 100%;\n border-spacing: 0;\n transition-property: border-color;\n word-break: break-all;\n }\n\n table:last-child {\n margin-block-end: 0;\n }\n\n table tbody tr:nth-child(2n) {\n background-color: var(--primary-details-bg);\n }\n\n table tbody tr:hover {\n background-color: var(--primary-selection);\n }\n\n table tr th {\n font-weight: 500;\n min-inline-size: 54px;\n color: var(--text-heading);\n background-color: var(--table-heading-bg);\n transition-property: background-color, color;\n }\n\n table tr th,\n table td {\n padding: 8px 16px;\n }\n\n tr:first-child th:first-child {\n border-start-start-radius: var(--border-radius);\n }\n\n tr:first-child th:last-child {\n border-start-end-radius: var(--border-radius);\n }\n\n blockquote {\n position: relative;\n margin: 30px 48px;\n border-radius: var(--border-radius);\n padding: 16px;\n font-weight: 500;\n background-color: var(--primary-selection);\n transition-property: background-color;\n }\n\n blockquote::before,\n blockquote::after {\n position: absolute;\n font-size: 56px;\n font-family: sans-serif;\n color: var(--primary-active);\n transition-property: color;\n content: '❞';\n line-height: 1;\n }\n\n blockquote::before {\n inset-block-start: -8px;\n inset-inline-start: 0;\n transform: translateX(-44px) rotate(180deg);\n }\n\n blockquote::after {\n inset-inline-end: 0;\n inset-block-end: -8px;\n transform: translateX(44px);\n }\n\n blockquote.n-tip {\n margin: 16px 0 16px 8px;\n border-inline-start: 4px solid var(--primary-color, #5794ff);\n }\n\n blockquote.n-tip::after {\n content: none;\n }\n\n blockquote.n-tip::before {\n inset-block-start: 18px;\n inset-inline-start: -12px;\n border-radius: 100%;\n inline-size: 20px;\n block-size: 20px;\n font-size: 14px;\n font-weight: bold;\n text-align: center;\n color: #fff;\n background-color: var(--primary-color, #5794ff);\n transform: none;\n content: '!';\n line-height: 20px;\n }\n\n blockquote cite {\n font-size: var(--font-size);\n color: var(--cite-color, #bfbfbf);\n line-height: 20px;\n }\n\n blockquote cite::before {\n content: '\\\\2014 \\\\00A0';\n }\n\n blockquote p {\n margin: auto 0;\n font-size: var(--font-size);\n line-height: 24px;\n transition-property: color;\n }\n\n details {\n overflow: hidden;\n border-inline-start: 5px solid var(--primary-hover, #5794ff);\n border-radius: var(--border-radius);\n padding: 12px 24px;\n background: var(--primary-details-bg);\n box-sizing: border-box;\n user-select: none;\n box-shadow: 0 2px 8px 0 var(--primary-shadow, rgb(0 0 0 / 5%));\n }\n\n details,\n details summary {\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: background-color, transform, border-color;\n }\n\n details:not(:last-of-type) {\n margin-block-end: 16px;\n }\n\n details > summary,\n details > summary ~ * {\n font-size: var(--font-size);\n font-weight: normal;\n font-style: normal;\n line-height: 1.4;\n transition-property: background-color, transform, border-color, margin;\n }\n\n details > summary:not(:last-of-type) details > summary ~ *:not(:last-of-type) {\n margin-block-end: 16px;\n }\n\n details > summary {\n font-weight: 500;\n outline: none;\n cursor: pointer;\n transform: translateX(-18px);\n }\n\n details > summary::-webkit-details-marker,\n details > summary::marker {\n display: none;\n color: transparent;\n }\n\n details > summary::before {\n display: inline-block;\n margin-inline-end: 4px;\n inline-size: 14px;\n font-weight: lighter;\n text-align: center;\n opacity: 0.5;\n content: '⛌';\n transform: rotate(45deg);\n }\n\n details[open] {\n user-select: auto;\n }\n\n details[open] > details {\n margin-block-start: 10px;\n }\n\n details[open] > summary {\n margin-block-end: 10px;\n }\n\n details[open] > summary::before {\n transform: rotate(0);\n }\n\n .katex-display {\n overflow-x: auto;\n }\n\n .n-photo-header {\n display: flex;\n flex-wrap: wrap;\n padding: 16px;\n gap: 16px;\n }\n\n .n-photo-header > span {\n border-radius: 8px;\n padding: 4px 10px;\n font-size: 14px;\n font-weight: lighter;\n background-color: rgb(0 0 0 / 20%);\n }\n\n .n-code {\n display: block;\n margin-block-end: 16px;\n }\n\n .n-code:last-child {\n margin-block-end: 0;\n }\n\n @media screen and (width <= 1100px) {\n .n-md-box,\n .n-md-box:not(.site-doc-main),\n .n-md-body {\n max-inline-size: auto;\n }\n\n .n-md-toc {\n position: fixed;\n inset-inline-end: 16px;\n transform: translateX(100%);\n transition: transform var(--transition-duration) var(--transition-timing-function);\n\n &:hover {\n transform: translateX(0);\n }\n }\n }\n`;\n\nexport default mdStyle;\n"],"names":["css","mdStyle"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,CAElC,IAAMC,EAAUD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwjBpB,CAAC,AAED,gBAAeC,CAAQ"}
1
+ {"version":3,"sources":["components/md-style/index.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nconst mdStyle = css`\n :host,\n :root {\n --table-heading-bg: var(--border-color);\n }\n\n .n-photo-header > span,\n .n-md-body,\n .n-md-toc {\n backdrop-filter: blur(10px);\n }\n\n .n-md-box:not(.site-doc-main) {\n position: relative;\n display: flex;\n margin: 0 auto;\n max-inline-size: 1280px;\n flex-direction: row-reverse;\n gap: 16px;\n }\n\n .n-md-toc,\n .n-md-body {\n border-radius: var(--border-radius);\n background-color: var(--component-bg);\n box-shadow: 0 2px 8px 0 var(--primary-shadow);\n }\n\n .n-md-body {\n overflow: hidden;\n margin: 0 auto 24px;\n padding: 24px;\n color: var(--text-color);\n max-inline-size: 100%;\n box-sizing: border-box;\n overflow-wrap: break-word;\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: background-color;\n flex: 1;\n }\n\n .n-md-body .n-md-body,\n .n-md-body n-md {\n overflow: visible;\n margin: 0;\n padding: 0;\n background-color: unset;\n backdrop-filter: none;\n box-shadow: none;\n }\n\n .n-md-body:has(div:only-child:empty) {\n margin: 0;\n padding: 0;\n background-color: unset;\n backdrop-filter: none;\n box-shadow: none;\n }\n\n a {\n position: relative;\n text-decoration: none;\n color: var(--text-color);\n }\n\n a:visited {\n color: var(--text-secondary);\n }\n\n a:hover {\n color: var(--primary-hover, #80b3ff);\n }\n\n p {\n padding: 0;\n font-size: var(--font-size);\n line-height: 1.8;\n vertical-align: baseline;\n word-wrap: break-word;\n word-break: break-word;\n\n /* content-visibility: auto;\n contain-intrinsic-size: 32px; */\n margin-block-end: 1em;\n }\n\n ol {\n margin: 0;\n padding: 0 0 0 24px;\n font-size: var(--font-size);\n }\n\n .n-md-toc {\n position: sticky;\n inset-block-start: 24px;\n inset-inline-end: 0;\n z-index: 10;\n display: block;\n overflow-y: auto;\n margin: 0 0 24px;\n padding: 16px;\n max-inline-size: 200px;\n block-size: fit-content;\n max-block-size: calc(100vb - 132px);\n box-sizing: border-box;\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: border-color, background-color, box-shadow;\n }\n\n .n-md-toc li,\n .n-md-toc ol {\n display: grid;\n inline-size: fit-content;\n max-inline-size: 100%;\n font-size: var(--font-size-sm);\n list-style: none;\n }\n\n .n-md-toc li a {\n overflow: hidden;\n max-inline-size: 100%;\n font-size: var(--font-size-sm);\n text-overflow: ellipsis;\n text-decoration: none;\n white-space: nowrap;\n color: var(--text-color);\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: color;\n }\n\n .n-md-toc .active,\n .n-md-toc .active a {\n color: var(--primary-color, #5794ff);\n text-shadow: 0 1px var(--primary-shadow);\n }\n\n .n-md-toc a[href^='http'],\n .n-md-toc a[href^='\\/\\/'],\n .n-md-body table a[href^='http'] {\n &:not(:has(img, n-img))::after {\n content: ' ⎋';\n opacity: 0.3;\n }\n }\n\n a[href^='mailto:']::after {\n content: ' 📧';\n opacity: 0.4;\n }\n\n a[href]:has(img, n-img)::before {\n content: none !important;\n }\n\n a[href]:not(.site-pagination-link)::before {\n position: absolute;\n inset-block-end: 0;\n inset-inline-start: 0;\n inline-size: 100%;\n block-size: 2px;\n background-color: var(--primary-hover, #80b3ff);\n transform: scaleX(0);\n transform-origin: center;\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: transform, background-color;\n opacity: 0.5;\n content: '';\n }\n\n a:hover::before {\n transform: scaleX(1);\n }\n\n th img[src*='browser-logos'] {\n display: block;\n inline-size: 32px;\n block-size: 32px;\n }\n\n h1::before,\n h2::before,\n h3::before,\n h4::before,\n h5::before,\n h6::before {\n color: var(--primary-color, #5794ff);\n content: attr(data-prefix);\n }\n\n h1[data-prefix]::before,\n h2[data-prefix]::before,\n h3[data-prefix]::before,\n h4[data-prefix]::before,\n h5[data-prefix]::before,\n h6[data-prefix]::before {\n color: var(--primary-color, #5794ff);\n content: attr(data-prefix) !important;\n }\n\n code:not([class]),\n mark {\n border-radius: var(--border-radius);\n padding: 2px 7px;\n font-size: 90%;\n color: var(--primary-heading);\n background-color: var(--text-selection);\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: background-color, color;\n }\n\n [data-prefix] code,\n [data-prefix] mark {\n font-size: 60%;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5 {\n margin-block: 1em;\n font-weight: 500;\n color: var(--text-heading);\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: border-color, background-color, box-shadow, color;\n }\n\n table,\n tr th,\n tr td,\n blockquote,\n blockquote::after,\n blockquote::before,\n blockquote p {\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n }\n\n dl {\n padding: 0;\n margin-block-end: 1em;\n }\n\n h1 {\n font-size: 1.6em;\n line-height: 54px;\n }\n\n h2 {\n font-size: 1.5em;\n line-height: 42px;\n counter-increment: section;\n }\n\n h2::before {\n content: counter(section) '. ';\n }\n\n h1,\n h2 {\n border-block-end: 1px dotted var(--border-color);\n padding-block-end: 10px;\n }\n\n h3 {\n font-size: 1.4em;\n line-height: 30px;\n }\n\n h4 {\n font-size: 1.3em;\n line-height: 28px;\n }\n\n h5 {\n font-size: 1.2em;\n list-style: none;\n }\n\n hr {\n margin: 16px 0;\n border: 0 none;\n padding: 0;\n block-size: 2px;\n text-align: start;\n color: var(--text-color);\n background-color: var(--border-color);\n }\n\n p img,\n p n-img {\n position: relative;\n display: flex;\n overflow: hidden;\n margin: auto;\n max-inline-size: 100%;\n inline-size: fit-content;\n cursor: pointer;\n }\n\n n-img::part(img) {\n min-inline-size: 24px;\n }\n\n ul {\n font-size: var(--font-size);\n }\n\n dl dt {\n margin-block-start: 16px;\n padding: 10px 0;\n font-size: 1em;\n font-weight: bold;\n font-style: italic;\n }\n\n dl dd {\n margin-block-end: 16px;\n margin-inline-start: 0;\n padding: 0 16px;\n }\n\n table {\n overflow: hidden;\n margin-block-end: 16px;\n border-block-end: 1px solid var(--table-heading-bg);\n inline-size: 100%;\n max-inline-size: 100%;\n border-spacing: 0;\n transition-property: border-color;\n word-break: break-all;\n }\n\n table:last-child {\n margin-block-end: 0;\n }\n\n table tbody tr:nth-child(2n) {\n background-color: var(--primary-details-bg);\n }\n\n table tbody tr:hover {\n background-color: var(--primary-selection);\n }\n\n table tr th {\n font-weight: 500;\n min-inline-size: 54px;\n color: var(--text-heading);\n background-color: var(--table-heading-bg);\n transition-property: background-color, color;\n }\n\n table tr th,\n table td {\n padding: 8px 16px;\n }\n\n tr:first-child th:first-child {\n border-start-start-radius: var(--border-radius);\n }\n\n tr:first-child th:last-child {\n border-start-end-radius: var(--border-radius);\n }\n\n blockquote {\n position: relative;\n margin: 30px 48px;\n border-radius: var(--border-radius);\n padding: 16px;\n font-weight: 500;\n background-color: var(--primary-selection);\n transition-property: background-color;\n }\n\n blockquote::before,\n blockquote::after {\n position: absolute;\n font-size: 56px;\n font-family: sans-serif;\n color: var(--primary-active);\n transition-property: color;\n content: '❞';\n line-height: 1;\n }\n\n blockquote::before {\n inset-block-start: -8px;\n inset-inline-start: 0;\n transform: translateX(-44px) rotate(180deg);\n }\n\n blockquote::after {\n inset-inline-end: 0;\n inset-block-end: -8px;\n transform: translateX(44px);\n }\n\n blockquote.n-tip {\n margin: 16px 0 16px 8px;\n border-inline-start: 4px solid var(--primary-color, #5794ff);\n }\n\n blockquote.n-tip::after {\n content: none;\n }\n\n blockquote.n-tip::before {\n inset-block-start: 18px;\n inset-inline-start: -12px;\n border-radius: 100%;\n inline-size: 20px;\n block-size: 20px;\n font-size: 14px;\n font-weight: bold;\n text-align: center;\n color: #fff;\n background-color: var(--primary-color, #5794ff);\n transform: none;\n content: '!';\n line-height: 20px;\n }\n\n blockquote cite {\n font-size: var(--font-size);\n color: var(--cite-color, #bfbfbf);\n line-height: 20px;\n }\n\n blockquote cite::before {\n content: '\\\\2014 \\\\00A0';\n }\n\n blockquote p {\n margin: auto 0;\n font-size: var(--font-size);\n line-height: 24px;\n transition-property: color;\n }\n\n details {\n overflow: hidden;\n border-inline-start: 5px solid var(--primary-hover, #5794ff);\n border-radius: var(--border-radius);\n padding: 12px 24px;\n background: var(--primary-details-bg);\n box-sizing: border-box;\n user-select: none;\n box-shadow: 0 2px 8px 0 var(--primary-shadow, rgb(0 0 0 / 5%));\n }\n\n details,\n details summary {\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: background-color, transform, border-color;\n }\n\n details:not(:last-of-type) {\n margin-block-end: 16px;\n }\n\n details > summary,\n details > summary ~ * {\n font-size: var(--font-size);\n font-weight: normal;\n font-style: normal;\n line-height: 1.4;\n transition-property: background-color, transform, border-color, margin;\n }\n\n details > summary:not(:last-of-type) details > summary ~ *:not(:last-of-type) {\n margin-block-end: 16px;\n }\n\n details > summary {\n font-weight: 500;\n outline: none;\n cursor: pointer;\n transform: translateX(-18px);\n }\n\n details > summary::-webkit-details-marker,\n details > summary::marker {\n display: none;\n color: transparent;\n }\n\n details > summary::before {\n display: inline-block;\n margin-inline-end: 4px;\n inline-size: 14px;\n font-weight: lighter;\n text-align: center;\n opacity: 0.5;\n content: '⛌';\n transform: rotate(45deg);\n }\n\n details[open] {\n user-select: auto;\n }\n\n details[open] > details {\n margin-block-start: 10px;\n }\n\n details[open] > summary {\n margin-block-end: 10px;\n }\n\n details[open] > summary::before {\n transform: rotate(0);\n }\n\n .katex-display {\n overflow-x: auto;\n }\n\n .n-photo-header {\n display: flex;\n flex-wrap: wrap;\n padding: 16px;\n gap: 16px;\n }\n\n .n-photo-header > span {\n border-radius: 8px;\n padding: 4px 10px;\n font-size: 14px;\n font-weight: lighter;\n background-color: rgb(0 0 0 / 20%);\n }\n\n .n-code {\n display: block;\n margin-block-end: 16px;\n }\n\n .n-code:last-child {\n margin-block-end: 0;\n }\n\n @media screen and (width <= 1100px) {\n .n-md-box,\n .n-md-box:not(.site-doc-main),\n .n-md-body {\n max-inline-size: auto;\n }\n\n .n-md-toc {\n position: fixed;\n inset-inline-end: 16px;\n transform: translateX(100%);\n transition: transform var(--transition-duration) var(--transition-timing-function);\n\n &:hover {\n transform: translateX(0);\n }\n }\n }\n`;\n\nexport default mdStyle;\n"],"names":["css","mdStyle"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,CAElC,IAAMC,EAAUD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwjBpB,CAAC,AAED,gBAAeC,CAAQ"}
package/es/menu/index.js CHANGED
@@ -1,2 +1 @@
1
- import{use as e}from"solid-js/web";import{template as t}from"solid-js/web";import{spread as s}from"solid-js/web";import{setAttribute as i}from"solid-js/web";import{memo as l}from"solid-js/web";import{insert as o}from"solid-js/web";import{effect as n}from"solid-js/web";import{delegateEvents as r}from"solid-js/web";import{createComponent as a}from"solid-js/web";import{className as d}from"solid-js/web";import{addEventListener as u}from"solid-js/web";let m=t('<span class="menu-icon" part="icon">'),f=t('<span class="menu-suffix" part="suffix">'),c=t('<div class="sub-menu-children" part="sub-menu-children"><div>'),p=t('<div part="sub-menu"><span class="sub-menu-title"><span class="menu-arrow">'),v=t('<div><span class="menu-group-title">'),g=t('<div part="item">'),h=t("<style> "),b=t("<style>"),y=t('<section class="menu" part="menu">');import{createEffect as C,createMemo as w,createSignal as N,For as $,Match as _,mergeProps as j,Show as A,splitProps as k,Switch as x,untrack as T}from"solid-js";import O from"@moneko/common/lib/frameCallback";import E from"@moneko/common/lib/isFunction";import{css as H,cx as K}from"@moneko/css";import{customElement as L}from"solid-element";import{clearAttribute as D,FieldName as P}from"../basic-config";import q from"../get-options";import F,{block as S}from"../theme";import{style as V}from"./style";function z(t){let r;let{isDark:j,baseStyle:L}=F,[D,S]=k(t,["class","css","items","fieldNames","value","disabled","toggle","multiple","onChange","onOpenChange","openKeys"]),[z,B]=N([]),[G,I]=N([]),J=w(()=>`:host {--sub-menu-bg: ${j()?"rgb(255 255 255 / 1%)":"rgb(0 0 0 / 1%)"} ;}`),M=w(()=>Object.assign({},P,D.fieldNames)),Q=w(()=>q(D.items,M()));function R(e){e.preventDefault(),e.stopPropagation()}function U(e,t){if(t.preventDefault(),!e.disabled&&!D.disabled){let t=[...z()],s=e[M().value];if(D.multiple){let e=t.indexOf(s);-1===e?t.push(s):t.splice(e,1)}else t=D.toggle&&t[0]===s?[]:[s];E(D.onChange)&&D.onChange(D.multiple?t:t[0],e),void 0===D.value&&B(t)}}function W(t){return a($,{get each(){return t.list},children:s=>{function r(){return[a(A,{get when(){return s[t.fieldNames.icon]},get children(){let e=m();return o(e,()=>s[t.fieldNames.icon]),e}}),l(()=>s[t.fieldNames.label]),(()=>{let e=f();return o(e,()=>s[t.fieldNames.suffix]),e})()]}function h(){let i=w(()=>G().includes(s[t.fieldNames.value])),[l,m]=N(T(i));function f(e){R(e);let i=G();i=i.includes(s[t.fieldNames.value])?i.filter(e=>e!==s[t.fieldNames.value]):i.concat(s[t.fieldNames.value]),E(D.onOpenChange)&&D.onOpenChange(i),void 0===D.openKeys&&I(i)}function v(){let l;let[r,d]=N();function f(){i()||m(!1)}return C(()=>{d((null==l?void 0:l.offsetHeight)||0)}),(()=>{let i=c(),d=i.firstChild,m=l;return u(i,"animationend",f),"function"==typeof m?e(m,d):l=d,o(d,a(W,{get fieldNames(){return t.fieldNames},get list(){return s[t.fieldNames.children]}})),n(()=>(r(),i.style.setProperty("--h",`${r()}px`))),i})()}return C(()=>{i()&&m(!0)}),(()=>{let e=p(),t=e.firstChild,m=t.firstChild;return u(e,"mousedown",R,!0),u(t,"click",f,!0),o(t,a(r,{}),m),o(e,a(A,{get when(){return l()},get children(){return a(v,{})}}),null),n(t=>{let l=K("sub-menu",s.class),o=!!i(),n=!i();return l!==t._v$&&d(e,t._v$=l),o!==t._v$2&&e.classList.toggle("sub-menu-open",t._v$2=o),n!==t._v$3&&e.classList.toggle("sub-menu-close",t._v$3=n),t},{_v$:void 0,_v$2:void 0,_v$3:void 0}),e})()}return a(x,{get fallback(){return(()=>{let e=g();return u(e,"click",U.bind(null,s),!0),u(e,"mousedown",R,!0),o(e,a(r,{})),n(l=>{let o=K("menu-item",s.class,s.type),n=s.handleClosed,r=D.disabled||s.disabled,a=z().includes(s[t.fieldNames.value]);return o!==l._v$4&&d(e,l._v$4=o),n!==l._v$5&&i(e,"handle-closed",l._v$5=n),r!==l._v$6&&i(e,"aria-disabled",l._v$6=r),a!==l._v$7&&i(e,"aria-selected",l._v$7=a),l},{_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0}),e})()},get children(){return[a(_,{get when(){return Array.isArray(s[t.fieldNames.children])},get children(){return a(h,{})}}),a(_,{get when(){return Array.isArray(s[t.fieldNames.options])},get children(){let e=v(),i=e.firstChild;return u(e,"mousedown",R,!0),o(i,a(r,{})),o(e,a(W,{get fieldNames(){return t.fieldNames},get list(){return s[t.fieldNames.options]}}),null),n(()=>d(e,K("menu-group",s.class))),e}})]}})}})}return C(()=>{void 0!==D.value&&null!==D.value?B(Array.isArray(D.value)?D.value:[D.value]):B([])}),C(()=>{Array.isArray(D.openKeys)&&I(D.openKeys)}),C(()=>{Array.isArray(z())&&z().length&&O(()=>{let e=null==r?void 0:r.querySelector("[aria-selected=true]");if(e&&r){let t=e.offsetTop-r.offsetTop;t<r.scrollTop?r.scrollTo({top:t,behavior:"smooth"}):e.offsetTop+e.offsetHeight>r.scrollTop+r.offsetHeight+r.offsetTop&&r.scrollTo({top:t-r.offsetHeight+e.offsetHeight,behavior:"smooth"})}})}),[(()=>{let e=h(),t=e.firstChild;return n(()=>t.data=L()),e})(),(()=>{let e=b();return e.textContent=V,e})(),(()=>{let e=h(),t=e.firstChild;return n(()=>t.data=J()),e})(),a(A,{get when(){return D.css},get children(){let e=h(),t=e.firstChild;return n(()=>t.data=H(D.css)),e}}),(()=>{let t=y(),i=r;return"function"==typeof i?e(i,t):r=t,s(t,S,!1,!0),o(t,a(W,{get fieldNames(){return M()},get list(){return Q()}})),t})()]}L("n-menu",{class:void 0,css:void 0,disabled:void 0,value:void 0,defaultValue:void 0,onOpenChange:void 0,openKeys:void 0,fieldNames:void 0,multiple:void 0,toggle:void 0,onChange:void 0,items:[]},(e,t)=>{let s=t.element,i=j({css:s.css,onChange(e,t){s.dispatchEvent(new CustomEvent("change",{detail:[e,t]}))},onOpenChange(e){s.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return C(()=>{D(s,["css","items","fieldNames"])}),[(()=>{let e=b();return e.textContent=S,e})(),a(z,i)]});export default z;r(["click","mousedown"]);
2
- //# sourceMappingURL=index.js.map
1
+ import{use as e}from"solid-js/web";import{template as t}from"solid-js/web";import{spread as s}from"solid-js/web";import{setAttribute as i}from"solid-js/web";import{memo as l}from"solid-js/web";import{insert as o}from"solid-js/web";import{effect as n}from"solid-js/web";import{delegateEvents as r}from"solid-js/web";import{createComponent as a}from"solid-js/web";import{className as d}from"solid-js/web";import{addEventListener as u}from"solid-js/web";let m=t('<span class="menu-icon" part="icon">'),f=t('<span class="menu-suffix" part="suffix">'),c=t('<div class="sub-menu-children" part="sub-menu-children"><div>'),p=t('<div part="sub-menu"><span class="sub-menu-title"><span class="menu-arrow">'),v=t('<div><span class="menu-group-title">'),g=t('<div part="item">'),h=t("<style> "),b=t("<style>"),y=t('<section class="menu" part="menu">');import{createEffect as C,createMemo as w,createSignal as N,For as $,Match as _,mergeProps as j,Show as A,splitProps as k,Switch as x,untrack as T}from"solid-js";import O from"@moneko/common/lib/frameCallback";import E from"@moneko/common/lib/isFunction";import{css as H,cx as K}from"@moneko/css";import{customElement as L}from"solid-element";import{clearAttribute as D,FieldName as P}from"../basic-config";import q from"../get-options";import F,{block as S}from"../theme";import{style as V}from"./style";function z(t){let r;let{isDark:j,baseStyle:L}=F,[D,S]=k(t,["class","css","items","fieldNames","value","disabled","toggle","multiple","onChange","onOpenChange","openKeys"]),[z,B]=N([]),[G,I]=N([]),J=w(()=>`:host {--sub-menu-bg: ${j()?"rgb(255 255 255 / 1%)":"rgb(0 0 0 / 1%)"} ;}`),M=w(()=>Object.assign({},P,D.fieldNames)),Q=w(()=>q(D.items,M()));function R(e){e.preventDefault(),e.stopPropagation()}function U(e,t){if(t.preventDefault(),!e.disabled&&!D.disabled){let t=[...z()],s=e[M().value];if(D.multiple){let e=t.indexOf(s);-1===e?t.push(s):t.splice(e,1)}else t=D.toggle&&t[0]===s?[]:[s];E(D.onChange)&&D.onChange(D.multiple?t:t[0],e),void 0===D.value&&B(t)}}function W(t){return a($,{get each(){return t.list},children:s=>{function r(){return[a(A,{get when(){return s[t.fieldNames.icon]},get children(){let e=m();return o(e,()=>s[t.fieldNames.icon]),e}}),l(()=>s[t.fieldNames.label]),(()=>{let e=f();return o(e,()=>s[t.fieldNames.suffix]),e})()]}function h(){let i=w(()=>G().includes(s[t.fieldNames.value])),[l,m]=N(T(i));function f(e){R(e);let i=G();i=i.includes(s[t.fieldNames.value])?i.filter(e=>e!==s[t.fieldNames.value]):i.concat(s[t.fieldNames.value]),E(D.onOpenChange)&&D.onOpenChange(i),void 0===D.openKeys&&I(i)}function v(){let l;let[r,d]=N();function f(){i()||m(!1)}return C(()=>{d((null==l?void 0:l.offsetHeight)||0)}),(()=>{let i=c(),d=i.firstChild,m=l;return u(i,"animationend",f),"function"==typeof m?e(m,d):l=d,o(d,a(W,{get fieldNames(){return t.fieldNames},get list(){return s[t.fieldNames.children]}})),n(()=>(r(),i.style.setProperty("--h",`${r()}px`))),i})()}return C(()=>{i()&&m(!0)}),(()=>{let e=p(),t=e.firstChild,m=t.firstChild;return u(e,"mousedown",R,!0),u(t,"click",f,!0),o(t,a(r,{}),m),o(e,a(A,{get when(){return l()},get children(){return a(v,{})}}),null),n(t=>{let l=K("sub-menu",s.class),o=!!i(),n=!i();return l!==t._v$&&d(e,t._v$=l),o!==t._v$2&&e.classList.toggle("sub-menu-open",t._v$2=o),n!==t._v$3&&e.classList.toggle("sub-menu-close",t._v$3=n),t},{_v$:void 0,_v$2:void 0,_v$3:void 0}),e})()}return a(x,{get fallback(){return(()=>{let e=g();return u(e,"click",U.bind(null,s),!0),u(e,"mousedown",R,!0),o(e,a(r,{})),n(l=>{let o=K("menu-item",s.class,s.type),n=s.handleClosed,r=D.disabled||s.disabled,a=z().includes(s[t.fieldNames.value]);return o!==l._v$4&&d(e,l._v$4=o),n!==l._v$5&&i(e,"handle-closed",l._v$5=n),r!==l._v$6&&i(e,"aria-disabled",l._v$6=r),a!==l._v$7&&i(e,"aria-selected",l._v$7=a),l},{_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0}),e})()},get children(){return[a(_,{get when(){return Array.isArray(s[t.fieldNames.children])},get children(){return a(h,{})}}),a(_,{get when(){return Array.isArray(s[t.fieldNames.options])},get children(){let e=v(),i=e.firstChild;return u(e,"mousedown",R,!0),o(i,a(r,{})),o(e,a(W,{get fieldNames(){return t.fieldNames},get list(){return s[t.fieldNames.options]}}),null),n(()=>d(e,K("menu-group",s.class))),e}})]}})}})}return C(()=>{void 0!==D.value&&null!==D.value?B(Array.isArray(D.value)?D.value:[D.value]):B([])}),C(()=>{Array.isArray(D.openKeys)&&I(D.openKeys)}),C(()=>{Array.isArray(z())&&z().length&&O(()=>{let e=null==r?void 0:r.querySelector("[aria-selected=true]");if(e&&r){let t=e.offsetTop-r.offsetTop;t<r.scrollTop?r.scrollTo({top:t,behavior:"smooth"}):e.offsetTop+e.offsetHeight>r.scrollTop+r.offsetHeight+r.offsetTop&&r.scrollTo({top:t-r.offsetHeight+e.offsetHeight,behavior:"smooth"})}})}),[(()=>{let e=h(),t=e.firstChild;return n(()=>t.data=L()),e})(),(()=>{let e=b();return e.textContent=V,e})(),(()=>{let e=h(),t=e.firstChild;return n(()=>t.data=J()),e})(),a(A,{get when(){return D.css},get children(){let e=h(),t=e.firstChild;return n(()=>t.data=H(D.css)),e}}),(()=>{let t=y(),i=r;return"function"==typeof i?e(i,t):r=t,s(t,S,!1,!0),o(t,a(W,{get fieldNames(){return M()},get list(){return Q()}})),t})()]}L("n-menu",{class:void 0,css:void 0,disabled:void 0,value:void 0,defaultValue:void 0,onOpenChange:void 0,openKeys:void 0,fieldNames:void 0,multiple:void 0,toggle:void 0,onChange:void 0,items:[]},(e,t)=>{let s=t.element,i=j({css:s.css,onChange(e,t){s.dispatchEvent(new CustomEvent("change",{detail:[e,t]}))},onOpenChange(e){s.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return C(()=>{D(s,["css","items","fieldNames"])}),[(()=>{let e=b();return e.textContent=S,e})(),a(z,i)]});export default z;r(["click","mousedown"]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/menu/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n For,\n Match,\n mergeProps,\n Show,\n splitProps,\n Switch,\n untrack,\n} from 'solid-js';\nimport { frameCallback, isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BaseOption, BasicConfig, CustomElement } from '..';\nimport { clearAttribute, FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme, { block } from '../theme';\n\nimport { style } from './style';\n\nfunction Menu(props: MenuProps | MenuMultipleProps) {\n let ref: HTMLDivElement | undefined;\n const { isDark, baseStyle } = theme;\n const [local, other] = splitProps(props, [\n 'class',\n 'css',\n 'items',\n 'fieldNames',\n 'value',\n 'disabled',\n 'toggle',\n 'multiple',\n 'onChange',\n 'onOpenChange',\n 'openKeys',\n ]);\n const [value, setValue] = createSignal<(string | number)[]>([]);\n const [openKeys, setOpenKeys] = createSignal<(string | number)[]>([]);\n const cssVar = createMemo(\n () => `:host {--sub-menu-bg: ${isDark() ? 'rgb(255 255 255 / 1%)' : 'rgb(0 0 0 / 1%)'} ;}`,\n );\n const fieldNames = createMemo(() => Object.assign({}, FieldName, local.fieldNames));\n const options = createMemo(() => getOptions(local.items, fieldNames()));\n\n function preventDefault(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n function change(item: MenuOption, e: MouseEvent) {\n e.preventDefault();\n if (!item.disabled && !local.disabled) {\n let _value = [...value()];\n const key = item[fieldNames().value]!;\n\n if (local.multiple) {\n const idx = _value.indexOf(key);\n\n if (idx === -1) {\n _value.push(key);\n } else {\n _value.splice(idx, 1);\n }\n } else if (local.toggle && _value[0] === key) {\n _value = [];\n } else {\n _value = [key];\n }\n if (isFunction(local.onChange)) {\n local.onChange((local.multiple ? _value : _value[0]) as never, item);\n }\n if (typeof local.value === 'undefined') {\n setValue(_value);\n }\n }\n }\n\n interface RenderMenuProps {\n list: MenuOption[];\n fieldNames: { [key in keyof typeof FieldName]: string };\n }\n function RenderMenu(_: RenderMenuProps) {\n return (\n <For each={_.list}>\n {(item) => {\n function RowTitle() {\n return (\n <>\n <Show when={item[_.fieldNames.icon]}>\n <span class=\"menu-icon\" part=\"icon\">\n {item[_.fieldNames.icon]}\n </span>\n </Show>\n {item[_.fieldNames.label]}\n <span class=\"menu-suffix\" part=\"suffix\">\n {item[_.fieldNames.suffix]}\n </span>\n </>\n );\n }\n\n function SubMenu() {\n const isOpen = createMemo(() => openKeys().includes(item[_.fieldNames.value]));\n const [show, setShow] = createSignal<boolean>(untrack(isOpen));\n\n createEffect(() => {\n if (isOpen()) {\n setShow(true);\n }\n });\n function handleOpen(e: MouseEvent) {\n preventDefault(e);\n let _openKeys = openKeys();\n\n if (_openKeys.includes(item[_.fieldNames.value])) {\n _openKeys = _openKeys.filter((v) => v !== item[_.fieldNames.value]);\n } else {\n _openKeys = _openKeys.concat(item[_.fieldNames.value]);\n }\n\n if (isFunction(local.onOpenChange)) {\n local.onOpenChange(_openKeys);\n }\n if (local.openKeys === void 0) {\n setOpenKeys(_openKeys);\n }\n }\n function Child() {\n let el: HTMLDivElement | undefined;\n const [hei, setHei] = createSignal();\n\n createEffect(() => {\n setHei(el?.offsetHeight || 0);\n });\n function onAnimationEnd() {\n if (!isOpen()) {\n setShow(false);\n }\n }\n return (\n <div\n class=\"sub-menu-children\"\n part=\"sub-menu-children\"\n style={{\n '--h': `${hei()}px`,\n }}\n onAnimationEnd={onAnimationEnd}\n >\n <div ref={el}>\n <RenderMenu fieldNames={_.fieldNames} list={item[_.fieldNames.children]} />\n </div>\n </div>\n );\n }\n\n return (\n <div\n class={cx('sub-menu', item.class)}\n classList={{\n 'sub-menu-open': isOpen(),\n 'sub-menu-close': !isOpen(),\n }}\n part=\"sub-menu\"\n onMouseDown={preventDefault}\n >\n <span class=\"sub-menu-title\" onClick={handleOpen}>\n <RowTitle />\n <span class=\"menu-arrow\" />\n </span>\n <Show when={show()}>\n <Child />\n </Show>\n </div>\n );\n }\n return (\n <Switch\n fallback={\n <div\n class={cx('menu-item', item.class, item.type)}\n part=\"item\"\n handle-closed={item.handleClosed}\n aria-disabled={local.disabled || item.disabled}\n aria-selected={value().includes(item[_.fieldNames.value])}\n onMouseDown={preventDefault}\n onClick={change.bind(null, item)}\n >\n <RowTitle />\n </div>\n }\n >\n <Match when={Array.isArray(item[_.fieldNames.children])}>\n <SubMenu />\n </Match>\n <Match when={Array.isArray(item[_.fieldNames.options])}>\n <div class={cx('menu-group', item.class)} onMouseDown={preventDefault}>\n <span class=\"menu-group-title\">\n <RowTitle />\n </span>\n <RenderMenu fieldNames={_.fieldNames} list={item[_.fieldNames.options]} />\n </div>\n </Match>\n </Switch>\n );\n }}\n </For>\n );\n }\n\n createEffect(() => {\n if (local.value !== void 0 && local.value !== null) {\n setValue(Array.isArray(local.value) ? local.value : [local.value]);\n } else {\n setValue([]);\n }\n });\n createEffect(() => {\n if (Array.isArray(local.openKeys)) {\n setOpenKeys(local.openKeys);\n }\n });\n\n createEffect(() => {\n if (Array.isArray(value()) && value().length) {\n frameCallback(() => {\n const el = ref?.querySelector<HTMLElement>('[aria-selected=true]');\n\n if (el && ref) {\n const next = el.offsetTop - ref.offsetTop;\n\n if (next < ref.scrollTop) {\n ref.scrollTo({\n top: next,\n behavior: 'smooth',\n });\n } else if (\n el.offsetTop + el.offsetHeight >\n ref.scrollTop + ref.offsetHeight + ref.offsetTop\n ) {\n ref.scrollTo({\n top: next - ref.offsetHeight + el.offsetHeight,\n behavior: 'smooth',\n });\n }\n }\n });\n }\n });\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={style} />\n <style textContent={cssVar()} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <section ref={ref} class=\"menu\" part=\"menu\" {...other}>\n <RenderMenu fieldNames={fieldNames()} list={options()} />\n </section>\n </>\n );\n}\n\nexport interface BaseMenuProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 菜单展开的keys */\n openKeys?: (string | number)[];\n /** 菜单展开时触发的方法 */\n onOpenChange?: (keys: (string | number)[]) => void;\n /** 选项数据 */\n items?: (string | MenuOption)[];\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 不可用状态 */\n disabled?: boolean;\n /** 可以取消 */\n toggle?: boolean;\n}\n\nexport interface MenuProps extends BaseMenuProps {\n /** 值修改时的回调方法 */\n onChange?(val: string | number, item: MenuOption): void;\n /** 值 */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 可多选\n * @default false\n */\n multiple?: false | never;\n}\n\nexport interface MenuMultipleProps extends BaseMenuProps {\n /** 可多选\n * @default true\n */\n multiple: true;\n /** 值修改时的回调方法 */\n onChange?(val: (string | number)[], item: MenuOption): void;\n /** 值 */\n value?: (string | number)[];\n /** 默认值 */\n defaultValue?: (string | number)[];\n}\n\n/** 菜单选项 */\nexport interface MenuOption extends Omit<BaseOption, 'children' | 'options'> {\n /** 图标 */\n icon?: JSX.Element;\n /** 内置类型(状态) */\n type?: 'primary' | 'success' | 'error' | 'warning';\n /** 自定义颜色 */\n color?: string;\n /** 子菜单 */\n children?: (string | MenuOption)[];\n /** 分组子选项 */\n options?: (string | MenuOption)[];\n}\n\nexport type MenuElement = CustomElement<MenuProps, 'onChange' | 'onOpenChange'>;\nexport type MenuMultipleElement = CustomElement<MenuMultipleProps, 'onChange' | 'onOpenChange'>;\n\ncustomElement<MenuProps>(\n 'n-menu',\n {\n class: void 0,\n css: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n onOpenChange: void 0,\n openKeys: void 0,\n fieldNames: void 0,\n multiple: void 0,\n toggle: void 0,\n onChange: void 0,\n items: [],\n },\n (_, opt) => {\n const el = opt.element;\n const defaultProps: Partial<MenuProps> = {\n css: el.css,\n onChange(key, item) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [key, item],\n }),\n );\n },\n onOpenChange(keys) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: keys,\n }),\n );\n },\n };\n const props = mergeProps(defaultProps, _);\n\n createEffect(() => {\n clearAttribute(el, ['css', 'items', 'fieldNames']);\n });\n return (\n <>\n <style textContent={block} />\n <Menu {...props} />\n </>\n );\n },\n);\n\nexport default Menu;\n"],"names":["createEffect","createMemo","createSignal","For","Match","mergeProps","Show","splitProps","Switch","untrack","frameCallback","isFunction","css","cx","customElement","clearAttribute","FieldName","getOptions","theme","block","style","Menu","props","ref","isDark","baseStyle","local","other","value","setValue","openKeys","setOpenKeys","cssVar","fieldNames","Object","assign","options","items","preventDefault","e","stopPropagation","change","item","disabled","_value","key","multiple","idx","indexOf","push","splice","toggle","onChange","RenderMenu","_","list","RowTitle","icon","label","suffix","SubMenu","isOpen","includes","show","setShow","handleOpen","_openKeys","filter","v","concat","onOpenChange","Child","el","hei","setHei","onAnimationEnd","offsetHeight","children","class","bind","type","handleClosed","Array","isArray","length","querySelector","next","offsetTop","scrollTop","scrollTo","top","behavior","defaultValue","opt","element","dispatchEvent","CustomEvent","detail","keys"],"mappings":"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"}
1
+ {"version":3,"sources":["components/menu/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n For,\n Match,\n mergeProps,\n Show,\n splitProps,\n Switch,\n untrack,\n} from 'solid-js';\nimport { frameCallback, isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BaseOption, BasicConfig, CustomElement } from '..';\nimport { clearAttribute, FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme, { block } from '../theme';\n\nimport { style } from './style';\n\nfunction Menu(props: MenuProps | MenuMultipleProps) {\n let ref: HTMLDivElement | undefined;\n const { isDark, baseStyle } = theme;\n const [local, other] = splitProps(props, [\n 'class',\n 'css',\n 'items',\n 'fieldNames',\n 'value',\n 'disabled',\n 'toggle',\n 'multiple',\n 'onChange',\n 'onOpenChange',\n 'openKeys',\n ]);\n const [value, setValue] = createSignal<(string | number)[]>([]);\n const [openKeys, setOpenKeys] = createSignal<(string | number)[]>([]);\n const cssVar = createMemo(\n () => `:host {--sub-menu-bg: ${isDark() ? 'rgb(255 255 255 / 1%)' : 'rgb(0 0 0 / 1%)'} ;}`,\n );\n const fieldNames = createMemo(() => Object.assign({}, FieldName, local.fieldNames));\n const options = createMemo(() => getOptions(local.items, fieldNames()));\n\n function preventDefault(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n function change(item: MenuOption, e: MouseEvent) {\n e.preventDefault();\n if (!item.disabled && !local.disabled) {\n let _value = [...value()];\n const key = item[fieldNames().value]!;\n\n if (local.multiple) {\n const idx = _value.indexOf(key);\n\n if (idx === -1) {\n _value.push(key);\n } else {\n _value.splice(idx, 1);\n }\n } else if (local.toggle && _value[0] === key) {\n _value = [];\n } else {\n _value = [key];\n }\n if (isFunction(local.onChange)) {\n local.onChange((local.multiple ? _value : _value[0]) as never, item);\n }\n if (typeof local.value === 'undefined') {\n setValue(_value);\n }\n }\n }\n\n interface RenderMenuProps {\n list: MenuOption[];\n fieldNames: { [key in keyof typeof FieldName]: string };\n }\n function RenderMenu(_: RenderMenuProps) {\n return (\n <For each={_.list}>\n {(item) => {\n function RowTitle() {\n return (\n <>\n <Show when={item[_.fieldNames.icon]}>\n <span class=\"menu-icon\" part=\"icon\">\n {item[_.fieldNames.icon]}\n </span>\n </Show>\n {item[_.fieldNames.label]}\n <span class=\"menu-suffix\" part=\"suffix\">\n {item[_.fieldNames.suffix]}\n </span>\n </>\n );\n }\n\n function SubMenu() {\n const isOpen = createMemo(() => openKeys().includes(item[_.fieldNames.value]));\n const [show, setShow] = createSignal<boolean>(untrack(isOpen));\n\n createEffect(() => {\n if (isOpen()) {\n setShow(true);\n }\n });\n function handleOpen(e: MouseEvent) {\n preventDefault(e);\n let _openKeys = openKeys();\n\n if (_openKeys.includes(item[_.fieldNames.value])) {\n _openKeys = _openKeys.filter((v) => v !== item[_.fieldNames.value]);\n } else {\n _openKeys = _openKeys.concat(item[_.fieldNames.value]);\n }\n\n if (isFunction(local.onOpenChange)) {\n local.onOpenChange(_openKeys);\n }\n if (local.openKeys === void 0) {\n setOpenKeys(_openKeys);\n }\n }\n function Child() {\n let el: HTMLDivElement | undefined;\n const [hei, setHei] = createSignal();\n\n createEffect(() => {\n setHei(el?.offsetHeight || 0);\n });\n function onAnimationEnd() {\n if (!isOpen()) {\n setShow(false);\n }\n }\n return (\n <div\n class=\"sub-menu-children\"\n part=\"sub-menu-children\"\n style={{\n '--h': `${hei()}px`,\n }}\n onAnimationEnd={onAnimationEnd}\n >\n <div ref={el}>\n <RenderMenu fieldNames={_.fieldNames} list={item[_.fieldNames.children]} />\n </div>\n </div>\n );\n }\n\n return (\n <div\n class={cx('sub-menu', item.class)}\n classList={{\n 'sub-menu-open': isOpen(),\n 'sub-menu-close': !isOpen(),\n }}\n part=\"sub-menu\"\n onMouseDown={preventDefault}\n >\n <span class=\"sub-menu-title\" onClick={handleOpen}>\n <RowTitle />\n <span class=\"menu-arrow\" />\n </span>\n <Show when={show()}>\n <Child />\n </Show>\n </div>\n );\n }\n return (\n <Switch\n fallback={\n <div\n class={cx('menu-item', item.class, item.type)}\n part=\"item\"\n handle-closed={item.handleClosed}\n aria-disabled={local.disabled || item.disabled}\n aria-selected={value().includes(item[_.fieldNames.value])}\n onMouseDown={preventDefault}\n onClick={change.bind(null, item)}\n >\n <RowTitle />\n </div>\n }\n >\n <Match when={Array.isArray(item[_.fieldNames.children])}>\n <SubMenu />\n </Match>\n <Match when={Array.isArray(item[_.fieldNames.options])}>\n <div class={cx('menu-group', item.class)} onMouseDown={preventDefault}>\n <span class=\"menu-group-title\">\n <RowTitle />\n </span>\n <RenderMenu fieldNames={_.fieldNames} list={item[_.fieldNames.options]} />\n </div>\n </Match>\n </Switch>\n );\n }}\n </For>\n );\n }\n\n createEffect(() => {\n if (local.value !== void 0 && local.value !== null) {\n setValue(Array.isArray(local.value) ? local.value : [local.value]);\n } else {\n setValue([]);\n }\n });\n createEffect(() => {\n if (Array.isArray(local.openKeys)) {\n setOpenKeys(local.openKeys);\n }\n });\n\n createEffect(() => {\n if (Array.isArray(value()) && value().length) {\n frameCallback(() => {\n const el = ref?.querySelector<HTMLElement>('[aria-selected=true]');\n\n if (el && ref) {\n const next = el.offsetTop - ref.offsetTop;\n\n if (next < ref.scrollTop) {\n ref.scrollTo({\n top: next,\n behavior: 'smooth',\n });\n } else if (\n el.offsetTop + el.offsetHeight >\n ref.scrollTop + ref.offsetHeight + ref.offsetTop\n ) {\n ref.scrollTo({\n top: next - ref.offsetHeight + el.offsetHeight,\n behavior: 'smooth',\n });\n }\n }\n });\n }\n });\n return (\n <>\n <style textContent={baseStyle()} />\n <style textContent={style} />\n <style textContent={cssVar()} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <section ref={ref} class=\"menu\" part=\"menu\" {...other}>\n <RenderMenu fieldNames={fieldNames()} list={options()} />\n </section>\n </>\n );\n}\n\nexport interface BaseMenuProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 菜单展开的keys */\n openKeys?: (string | number)[];\n /** 菜单展开时触发的方法 */\n onOpenChange?: (keys: (string | number)[]) => void;\n /** 选项数据 */\n items?: (string | MenuOption)[];\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 不可用状态 */\n disabled?: boolean;\n /** 可以取消 */\n toggle?: boolean;\n}\n\nexport interface MenuProps extends BaseMenuProps {\n /** 值修改时的回调方法 */\n onChange?(val: string | number, item: MenuOption): void;\n /** 值 */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 可多选\n * @default false\n */\n multiple?: false | never;\n}\n\nexport interface MenuMultipleProps extends BaseMenuProps {\n /** 可多选\n * @default true\n */\n multiple: true;\n /** 值修改时的回调方法 */\n onChange?(val: (string | number)[], item: MenuOption): void;\n /** 值 */\n value?: (string | number)[];\n /** 默认值 */\n defaultValue?: (string | number)[];\n}\n\n/** 菜单选项 */\nexport interface MenuOption extends Omit<BaseOption, 'children' | 'options'> {\n /** 图标 */\n icon?: JSX.Element;\n /** 内置类型(状态) */\n type?: 'primary' | 'success' | 'error' | 'warning';\n /** 自定义颜色 */\n color?: string;\n /** 子菜单 */\n children?: (string | MenuOption)[];\n /** 分组子选项 */\n options?: (string | MenuOption)[];\n}\n\nexport type MenuElement = CustomElement<MenuProps, 'onChange' | 'onOpenChange'>;\nexport type MenuMultipleElement = CustomElement<MenuMultipleProps, 'onChange' | 'onOpenChange'>;\n\ncustomElement<MenuProps>(\n 'n-menu',\n {\n class: void 0,\n css: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n onOpenChange: void 0,\n openKeys: void 0,\n fieldNames: void 0,\n multiple: void 0,\n toggle: void 0,\n onChange: void 0,\n items: [],\n },\n (_, opt) => {\n const el = opt.element;\n const defaultProps: Partial<MenuProps> = {\n css: el.css,\n onChange(key, item) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [key, item],\n }),\n );\n },\n onOpenChange(keys) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: keys,\n }),\n );\n },\n };\n const props = mergeProps(defaultProps, _);\n\n createEffect(() => {\n clearAttribute(el, ['css', 'items', 'fieldNames']);\n });\n return (\n <>\n <style textContent={block} />\n <Menu {...props} />\n </>\n );\n },\n);\n\nexport default Menu;\n"],"names":["createEffect","createMemo","createSignal","For","Match","mergeProps","Show","splitProps","Switch","untrack","frameCallback","isFunction","css","cx","customElement","clearAttribute","FieldName","getOptions","theme","block","style","Menu","props","ref","isDark","baseStyle","local","other","value","setValue","openKeys","setOpenKeys","cssVar","fieldNames","Object","assign","options","items","preventDefault","e","stopPropagation","change","item","disabled","_value","key","multiple","idx","indexOf","push","splice","toggle","onChange","RenderMenu","_","list","RowTitle","icon","label","suffix","SubMenu","isOpen","includes","show","setShow","handleOpen","_openKeys","filter","v","concat","onOpenChange","Child","el","hei","setHei","onAnimationEnd","offsetHeight","children","class","bind","type","handleClosed","Array","isArray","length","querySelector","next","offsetTop","scrollTop","scrollTo","top","behavior","defaultValue","opt","element","dispatchEvent","CustomEvent","detail","keys"],"mappings":"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"}
package/es/menu/style.js CHANGED
@@ -209,5 +209,4 @@ import{css as r}from"@moneko/css";export const style=r`
209
209
  opacity: 0;
210
210
  }
211
211
  }
212
- `;
213
- //# sourceMappingURL=style.js.map
212
+ `;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/menu/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .menu {\n --menu-selection: var(--primary-selection);\n\n max-block-size: 100%;\n display: block;\n overflow-y: auto;\n color: var(--text-color);\n\n ${['primary', 'success', 'error', 'warning']\n .map(\n (s) =>\n `.${s} {--text-color: var(--${s}-color);--text-heading: var(--${s}-color);--text-secondary: var(--${s}-secondary);--component-bg: var(--${s}-details-bg);--menu-selection: var(--${s}-selection);}`,\n )\n .join('')}\n }\n\n .menu-item,\n .menu-group,\n .sub-menu {\n border-radius: calc(var(--border-radius) / 1.5);\n transition:\n 0.3s background-color var(--transition-timing-function),\n 0.3s color var(--transition-timing-function);\n box-sizing: border-box;\n line-height: 1.57;\n }\n\n .menu-icon {\n font-size: var(--font-size);\n }\n\n .menu-group {\n position: relative;\n }\n\n .menu-group-title {\n position: sticky;\n z-index: 1;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px;\n font-size: 12px;\n color: var(--text-secondary);\n inset-block-start: -2px;\n column-gap: 5px;\n }\n\n .menu-suffix {\n text-align: end;\n color: var(--text-secondary);\n flex: 1;\n }\n\n .sub-menu-title {\n display: flex;\n align-items: center;\n border-radius: calc(var(--border-radius) / 1.5);\n padding: 5px 12px;\n column-gap: 5px;\n transition: box-shadow var(--transition-duration) var(--transition-timing-function);\n\n &:hover:not(&[aria-disabled]:not([aria-disabled='false'])) {\n &:not([aria-selected='true'], .error) {\n background-color: var(--disable-bg);\n }\n }\n\n > .menu-arrow {\n position: relative;\n display: block;\n inline-size: 12px;\n block-size: 1.5px;\n pointer-events: none;\n color: var(--text-color);\n opacity: 0.5;\n margin-inline-start: 5px;\n\n &::after,\n &::before {\n position: absolute;\n border-radius: 2px;\n background-color: currentcolor;\n transition:\n transform var(--transition-duration) var(--transition-timing-function),\n color var(--transition-duration) var(--transition-timing-function);\n inline-size: 6px;\n block-size: 1.5px;\n content: '';\n }\n }\n }\n\n .sub-menu {\n cursor: pointer;\n\n &:has([aria-selected='true']) > span {\n color: var(--text-heading);\n }\n }\n\n .sub-menu-children {\n border-radius: calc(var(--border-radius) / 1.5);\n background-color: var(--sub-menu-bg);\n transform-origin: top;\n\n > div {\n padding: 5px 12px;\n }\n }\n\n .sub-menu-open {\n > .sub-menu-children {\n animation: menu-open var(--transition-duration) var(--transition-timing-function) forwards;\n }\n\n > span.sub-menu-title {\n box-shadow: 0 10px 5px 0 rgb(0 0 0 / 1%);\n\n > .menu-arrow {\n &::after {\n transform: rotate(-45deg) translate3d(-1.5px, -1px, 1px);\n }\n\n &::before {\n transform: rotate(45deg) translate3d(1.5px, -1px, 1px);\n }\n }\n }\n }\n\n .sub-menu-close {\n > .sub-menu-children {\n animation: menu-close var(--transition-duration) var(--transition-timing-function) forwards;\n }\n\n > span.sub-menu-title {\n box-shadow: 0 0 0 0 rgb(0 0 0 / 0%);\n\n > .menu-arrow {\n &::after {\n transform: rotate(45deg) translate3d(-1px, 2px, 1px);\n }\n\n &::before {\n transform: rotate(-45deg) translate3d(1px, 2px, 1px);\n }\n }\n }\n }\n\n .menu-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px 12px;\n cursor: pointer;\n column-gap: 5px;\n color: var(--text-color);\n\n &:hover:not(&[aria-disabled]:not([aria-disabled='false'])) {\n &:not([aria-selected='true']) {\n color: var(--text-heading);\n background-color: var(--disable-bg);\n }\n }\n\n &[aria-disabled]:not([aria-disabled='false']) {\n cursor: not-allowed;\n color: var(--disable-color);\n }\n\n &[aria-selected='true'] {\n color: var(--text-heading);\n background-color: var(--menu-selection);\n\n & + & {\n border-start-end-radius: 0;\n border-start-start-radius: 0;\n }\n\n &:has(+ &[aria-selected='true']) {\n border-end-end-radius: 0;\n border-end-start-radius: 0;\n }\n }\n }\n\n @keyframes menu-open {\n from {\n transform: scaleY(0);\n block-size: 0;\n opacity: 0;\n }\n\n to {\n transform: scaleY(1);\n block-size: var(--h);\n opacity: 1;\n }\n }\n\n @keyframes menu-close {\n from {\n transform: scaleY(1);\n block-size: var(--h);\n opacity: 1;\n }\n\n to {\n transform: scaleY(0);\n block-size: 0;\n opacity: 0;\n }\n }\n`;\n"],"names":["css","style","map","s","join"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,MAAQD,CAAG,CAAC;;;;;;;;;IASrB,EAAE,CAAC,UAAW,UAAW,QAAS,UAAU,CACzCE,GAAG,CACF,AAACC,GACC,CAAC,CAAC,EAAEA,EAAE,sBAAsB,EAAEA,EAAE,8BAA8B,EAAEA,EAAE,gCAAgC,EAAEA,EAAE,kCAAkC,EAAEA,EAAE,qCAAqC,EAAEA,EAAE,aAAa,CAAC,EAEtMC,IAAI,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0MhB,CAAC,AAAC"}
1
+ {"version":3,"sources":["components/menu/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .menu {\n --menu-selection: var(--primary-selection);\n\n max-block-size: 100%;\n display: block;\n overflow-y: auto;\n color: var(--text-color);\n\n ${['primary', 'success', 'error', 'warning']\n .map(\n (s) =>\n `.${s} {--text-color: var(--${s}-color);--text-heading: var(--${s}-color);--text-secondary: var(--${s}-secondary);--component-bg: var(--${s}-details-bg);--menu-selection: var(--${s}-selection);}`,\n )\n .join('')}\n }\n\n .menu-item,\n .menu-group,\n .sub-menu {\n border-radius: calc(var(--border-radius) / 1.5);\n transition:\n 0.3s background-color var(--transition-timing-function),\n 0.3s color var(--transition-timing-function);\n box-sizing: border-box;\n line-height: 1.57;\n }\n\n .menu-icon {\n font-size: var(--font-size);\n }\n\n .menu-group {\n position: relative;\n }\n\n .menu-group-title {\n position: sticky;\n z-index: 1;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px;\n font-size: 12px;\n color: var(--text-secondary);\n inset-block-start: -2px;\n column-gap: 5px;\n }\n\n .menu-suffix {\n text-align: end;\n color: var(--text-secondary);\n flex: 1;\n }\n\n .sub-menu-title {\n display: flex;\n align-items: center;\n border-radius: calc(var(--border-radius) / 1.5);\n padding: 5px 12px;\n column-gap: 5px;\n transition: box-shadow var(--transition-duration) var(--transition-timing-function);\n\n &:hover:not(&[aria-disabled]:not([aria-disabled='false'])) {\n &:not([aria-selected='true'], .error) {\n background-color: var(--disable-bg);\n }\n }\n\n > .menu-arrow {\n position: relative;\n display: block;\n inline-size: 12px;\n block-size: 1.5px;\n pointer-events: none;\n color: var(--text-color);\n opacity: 0.5;\n margin-inline-start: 5px;\n\n &::after,\n &::before {\n position: absolute;\n border-radius: 2px;\n background-color: currentcolor;\n transition:\n transform var(--transition-duration) var(--transition-timing-function),\n color var(--transition-duration) var(--transition-timing-function);\n inline-size: 6px;\n block-size: 1.5px;\n content: '';\n }\n }\n }\n\n .sub-menu {\n cursor: pointer;\n\n &:has([aria-selected='true']) > span {\n color: var(--text-heading);\n }\n }\n\n .sub-menu-children {\n border-radius: calc(var(--border-radius) / 1.5);\n background-color: var(--sub-menu-bg);\n transform-origin: top;\n\n > div {\n padding: 5px 12px;\n }\n }\n\n .sub-menu-open {\n > .sub-menu-children {\n animation: menu-open var(--transition-duration) var(--transition-timing-function) forwards;\n }\n\n > span.sub-menu-title {\n box-shadow: 0 10px 5px 0 rgb(0 0 0 / 1%);\n\n > .menu-arrow {\n &::after {\n transform: rotate(-45deg) translate3d(-1.5px, -1px, 1px);\n }\n\n &::before {\n transform: rotate(45deg) translate3d(1.5px, -1px, 1px);\n }\n }\n }\n }\n\n .sub-menu-close {\n > .sub-menu-children {\n animation: menu-close var(--transition-duration) var(--transition-timing-function) forwards;\n }\n\n > span.sub-menu-title {\n box-shadow: 0 0 0 0 rgb(0 0 0 / 0%);\n\n > .menu-arrow {\n &::after {\n transform: rotate(45deg) translate3d(-1px, 2px, 1px);\n }\n\n &::before {\n transform: rotate(-45deg) translate3d(1px, 2px, 1px);\n }\n }\n }\n }\n\n .menu-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px 12px;\n cursor: pointer;\n column-gap: 5px;\n color: var(--text-color);\n\n &:hover:not(&[aria-disabled]:not([aria-disabled='false'])) {\n &:not([aria-selected='true']) {\n color: var(--text-heading);\n background-color: var(--disable-bg);\n }\n }\n\n &[aria-disabled]:not([aria-disabled='false']) {\n cursor: not-allowed;\n color: var(--disable-color);\n }\n\n &[aria-selected='true'] {\n color: var(--text-heading);\n background-color: var(--menu-selection);\n\n & + & {\n border-start-end-radius: 0;\n border-start-start-radius: 0;\n }\n\n &:has(+ &[aria-selected='true']) {\n border-end-end-radius: 0;\n border-end-start-radius: 0;\n }\n }\n }\n\n @keyframes menu-open {\n from {\n transform: scaleY(0);\n block-size: 0;\n opacity: 0;\n }\n\n to {\n transform: scaleY(1);\n block-size: var(--h);\n opacity: 1;\n }\n }\n\n @keyframes menu-close {\n from {\n transform: scaleY(1);\n block-size: var(--h);\n opacity: 1;\n }\n\n to {\n transform: scaleY(0);\n block-size: 0;\n opacity: 0;\n }\n }\n`;\n"],"names":["css","style","map","s","join"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,MAAQD,CAAG,CAAC;;;;;;;;;IASrB,EAAE,CAAC,UAAW,UAAW,QAAS,UAAU,CACzCE,GAAG,CACF,AAACC,GACC,CAAC,CAAC,EAAEA,EAAE,sBAAsB,EAAEA,EAAE,8BAA8B,EAAEA,EAAE,gCAAgC,EAAEA,EAAE,kCAAkC,EAAEA,EAAE,qCAAqC,EAAEA,EAAE,aAAa,CAAC,EAEtMC,IAAI,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0MhB,CAAC,AAAC"}
package/es/modal/hooks.js CHANGED
@@ -1,2 +1 @@
1
- export default{open:o=>{console.log(o)}};
2
- //# sourceMappingURL=hooks.js.map
1
+ export default{open:e=>{}};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/modal/hooks.ts"],"sourcesContent":["import { type ModalProps } from '.';\n\nconst open = (options: ModalProps) => {\n // eslint-disable-next-line no-console\n console.log(options);\n};\n\nexport default {\n open: open,\n};\n"],"names":["open","options","console","log"],"mappings":"AAOA,cAAe,CACbA,KANW,AAACC,IAEZC,QAAQC,GAAG,CAACF,EACd,CAIA,CAAE"}
1
+ {"version":3,"sources":["components/modal/hooks.ts"],"sourcesContent":["import { type ModalProps } from '.';\n\nconst open = (options: ModalProps) => {\n // eslint-disable-next-line no-console\n console.log(options);\n};\n\nexport default {\n open: open,\n};\n"],"names":["open","options"],"mappings":"AAOA,cAAe,CACbA,KANW,AAACC,IAGd,CAIA,CAAE"}
package/es/modal/index.js CHANGED
@@ -1,2 +1 @@
1
- var e;function t(){return(t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e}).apply(this,arguments)}import{use as o}from"solid-js/web";import{template as n}from"solid-js/web";import"solid-js/web";import{insert as l}from"solid-js/web";import{getOwner as s}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as r}from"solid-js/web";import{createComponent as c}from"solid-js/web";import{addEventListener as a}from"solid-js/web";let d=n('<span class="modal-close">'),m=n('<n-button class="modal-close">',!0,!1),p=n("<style> "),u=n("<style>"),v=n(`<n-button class="modal-close">⛌`,!0,!1),f=n('<div class="portal"><div class="modal-content"><div class="modal-header"><strong class="modal-title"></strong></div><div class="modal-body">');import{createEffect as g,createMemo as h,createSignal as b,mergeProps as w,onCleanup as y,Show as k,untrack as C}from"solid-js";import{Portal as j}from"solid-js/web";import{customElement as $}from"solid-element";import{clearAttribute as E}from"../basic-config";import O from"./store";import{style as _}from"./style";import"../button";export var OpenState;function L(e){let n;let r=document.documentElement,{setNum:w}=O,[$,E]=b("closed"),[L,x]=b({x:0,y:0,width:0,height:0}),I=h(()=>{let{x:e,y:t,width:o,height:n}=L();return`.portal { --y: ${-(t-n/2)}px;--x: ${-(e-o/2)}px;}`});function S(t){E(t),null==e.onOpenChange||e.onOpenChange.call(e,t)}function B(e){e.preventDefault()}function D(t){B(t),"keydown"===t.type?e.escClosable&&"Escape"===t.key&&S("closeing"):S("closeing")}function H(){"closeing"===$()&&S("closed")}function P(t){B(t),e.maskClosable&&t.target===n&&S("closeing")}function W(e){x(o=>t({},o,{x:r.clientWidth/2-e.clientX,y:r.clientHeight/2-e.clientY}))}g(()=>{void 0!==e.open&&e.open!==C($)&&E(e.open)}),g(()=>{"open"===$()?(w(e=>e+1),r.addEventListener("mousewheel",B,{passive:!1}),e.escClosable&&r.addEventListener("keydown",D,!1)):"closeing"===$()?w(e=>e-1):r.addEventListener("click",W,!0),y(()=>{r.removeEventListener("mousewheel",B,!1),r.removeEventListener("keydown",D,!1),r.removeEventListener("click",W,!0)})});let X=h(()=>null===e.closeIcon||!1===e.closeIcon?null:["function","object"].includes(typeof e.closeIcon)?()=>(()=>{let t=d();return l(t,()=>e.closeIcon),t})():()=>(()=>{let t=m();return a(t,"click",D,!0),t.danger=!0,t.circle=!0,t.flat=!0,t._$owner=s(),l(t,()=>e.closeIcon),t})());return c(k,{get when(){return"closed"!==$()},get children(){return c(j,{useShadow:!0,get children(){return[(()=>{let e=p(),t=e.firstChild;return i(()=>t.data=I()),e})(),(()=>{let e=u();return e.textContent=_,e})(),(()=>{let t=f(),r=n,d=t.firstChild,m=d.firstChild,p=m.firstChild,u=m.nextSibling;return a(t,"click",P,!0),a(t,"animationend",H),"function"==typeof r?o(r,t):n=t,l(p,()=>e.title),l(d,c(k,{get when(){return void 0===e.closeIcon},get fallback(){return X()},get children(){let e=v();return a(e,"click",D,!0),e.danger=!0,e.circle=!0,e.flat=!0,e._$owner=s(),e}}),u),l(u,()=>e.content),i(o=>{let n=!("open"!==$()),l="open"!==$(),s=!!e.maskBlur;return n!==o._v$&&t.classList.toggle("open",o._v$=n),l!==o._v$2&&t.classList.toggle("closeing",o._v$2=l),s!==o._v$3&&t.classList.toggle("mask-blur",o._v$3=s),o},{_v$:void 0,_v$2:void 0,_v$3:void 0}),t})()]}})}})}(e=OpenState||(OpenState={})).closed="closed",e.closeing="closeing",e.open="open",$("n-modal",{open:"closed",maskClosable:!0,escClosable:!0,onOpenChange:void 0,closeIcon:void 0,content:void 0,title:void 0,maskBlur:void 0},(e,t)=>{let o=t.element,n=w({onOpenChange(e){t.element.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return g(()=>{E(o,["content"])}),c(L,n)});export default L;r(["click"]);
2
- //# sourceMappingURL=index.js.map
1
+ var e;function t(){return(t=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e}).apply(this,arguments)}import{use as o}from"solid-js/web";import{template as n}from"solid-js/web";import"solid-js/web";import{insert as l}from"solid-js/web";import{getOwner as s}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as r}from"solid-js/web";import{createComponent as c}from"solid-js/web";import{addEventListener as a}from"solid-js/web";let d=n('<span class="modal-close">'),m=n('<n-button class="modal-close">',!0,!1),p=n("<style> "),u=n("<style>"),v=n(`<n-button class="modal-close">⛌`,!0,!1),f=n('<div class="portal"><div class="modal-content"><div class="modal-header"><strong class="modal-title"></strong></div><div class="modal-body">');import{createEffect as g,createMemo as h,createSignal as b,mergeProps as w,onCleanup as y,Show as k,untrack as C}from"solid-js";import{Portal as j}from"solid-js/web";import{customElement as $}from"solid-element";import{clearAttribute as E}from"../basic-config";import O from"./store";import{style as _}from"./style";import"../button";export var OpenState;function L(e){let n;let r=document.documentElement,{setNum:w}=O,[$,E]=b("closed"),[L,x]=b({x:0,y:0,width:0,height:0}),I=h(()=>{let{x:e,y:t,width:o,height:n}=L();return`.portal { --y: ${-(t-n/2)}px;--x: ${-(e-o/2)}px;}`});function S(t){E(t),null==e.onOpenChange||e.onOpenChange.call(e,t)}function B(e){e.preventDefault()}function D(t){B(t),"keydown"===t.type?e.escClosable&&"Escape"===t.key&&S("closeing"):S("closeing")}function H(){"closeing"===$()&&S("closed")}function P(t){B(t),e.maskClosable&&t.target===n&&S("closeing")}function W(e){x(o=>t({},o,{x:r.clientWidth/2-e.clientX,y:r.clientHeight/2-e.clientY}))}g(()=>{void 0!==e.open&&e.open!==C($)&&E(e.open)}),g(()=>{"open"===$()?(w(e=>e+1),r.addEventListener("mousewheel",B,{passive:!1}),e.escClosable&&r.addEventListener("keydown",D,!1)):"closeing"===$()?w(e=>e-1):r.addEventListener("click",W,!0),y(()=>{r.removeEventListener("mousewheel",B,!1),r.removeEventListener("keydown",D,!1),r.removeEventListener("click",W,!0)})});let X=h(()=>null===e.closeIcon||!1===e.closeIcon?null:["function","object"].includes(typeof e.closeIcon)?()=>(()=>{let t=d();return l(t,()=>e.closeIcon),t})():()=>(()=>{let t=m();return a(t,"click",D,!0),t.danger=!0,t.circle=!0,t.flat=!0,t._$owner=s(),l(t,()=>e.closeIcon),t})());return c(k,{get when(){return"closed"!==$()},get children(){return c(j,{useShadow:!0,get children(){return[(()=>{let e=p(),t=e.firstChild;return i(()=>t.data=I()),e})(),(()=>{let e=u();return e.textContent=_,e})(),(()=>{let t=f(),r=n,d=t.firstChild,m=d.firstChild,p=m.firstChild,u=m.nextSibling;return a(t,"click",P,!0),a(t,"animationend",H),"function"==typeof r?o(r,t):n=t,l(p,()=>e.title),l(d,c(k,{get when(){return void 0===e.closeIcon},get fallback(){return X()},get children(){let e=v();return a(e,"click",D,!0),e.danger=!0,e.circle=!0,e.flat=!0,e._$owner=s(),e}}),u),l(u,()=>e.content),i(o=>{let n=!("open"!==$()),l="open"!==$(),s=!!e.maskBlur;return n!==o._v$&&t.classList.toggle("open",o._v$=n),l!==o._v$2&&t.classList.toggle("closeing",o._v$2=l),s!==o._v$3&&t.classList.toggle("mask-blur",o._v$3=s),o},{_v$:void 0,_v$2:void 0,_v$3:void 0}),t})()]}})}})}(e=OpenState||(OpenState={})).closed="closed",e.closeing="closeing",e.open="open",$("n-modal",{open:"closed",maskClosable:!0,escClosable:!0,onOpenChange:void 0,closeIcon:void 0,content:void 0,title:void 0,maskBlur:void 0},(e,t)=>{let o=t.element,n=w({onOpenChange(e){t.element.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return g(()=>{E(o,["content"])}),c(L,n)});export default L;r(["click"]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/modal/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n Show,\n untrack,\n} from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { customElement } from 'solid-element';\n\nimport type { CustomElement } from '..';\nimport { clearAttribute } from '../basic-config';\n\nimport modalStore from './store';\nimport { style } from './style';\n\nimport '../button';\n\n/**\n * API\n * @since 2.6.0\n */\nexport interface ModalProps {\n /** 是否打开模态框 */\n open?: OpenStateKey;\n /** 开启关闭的回调函数 */\n onOpenChange?: (open: OpenStateKey) => void;\n /** 点击遮罩关闭\n * @default true\n */\n maskClosable?: boolean;\n /** 通过 `esc` 按键关闭\n * @default true\n */\n escClosable?: boolean;\n /**\n * 自定义关闭图标, 设置为 null 或 false 时隐藏关闭按钮\n */\n closeIcon?: JSX.Element | null;\n /** 内容 */\n content: JSX.Element;\n /** 标题 */\n title?: JSX.Element;\n /** 遮罩模糊\n * @default false\n */\n maskBlur?: boolean;\n}\n\n/**\n * OpenStateKey\n */\nexport enum OpenState {\n /** 完全关闭 */\n closed = 'closed',\n /** 正在关闭 */\n closeing = 'closeing',\n /** 打开 */\n open = 'open',\n}\nexport type OpenStateKey = keyof typeof OpenState;\nexport type ModalElement = CustomElement<ModalProps, 'onOpenChange'>;\n\nfunction Modal(props: ModalProps) {\n const doc = document.documentElement;\n const { setNum } = modalStore;\n const [open, setOpen] = createSignal<OpenStateKey>('closed');\n const [posi, setPosi] = createSignal({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n let portal: HTMLDivElement | undefined;\n\n const getCss = createMemo(() => {\n const { x, y, width, height } = posi();\n\n return `.portal { --y: ${-(y - height / 2)}px;--x: ${-(x - width / 2)}px;}`;\n });\n\n function openChange(visi: OpenStateKey) {\n setOpen(visi);\n props.onOpenChange?.(visi);\n }\n function preventDefault(e: Event) {\n e.preventDefault();\n }\n function close(e: KeyboardEvent | Event) {\n preventDefault(e);\n if (e.type === 'keydown') {\n if (props.escClosable && (e as KeyboardEvent).key === 'Escape') {\n openChange(OpenState.closeing);\n }\n } else {\n openChange(OpenState.closeing);\n }\n }\n function handleDestroy() {\n if (open() === OpenState.closeing) {\n openChange(OpenState.closed);\n }\n }\n function portalClick(e: Event) {\n preventDefault(e);\n if (props.maskClosable && e.target === portal) {\n openChange(OpenState.closeing);\n }\n }\n\n createEffect(() => {\n if (props.open !== void 0 && props.open !== untrack(open)) {\n setOpen(props.open);\n }\n });\n\n function point(e: MouseEvent) {\n setPosi((prev) => ({\n ...prev,\n x: doc.clientWidth / 2 - e.clientX,\n y: doc.clientHeight / 2 - e.clientY,\n }));\n }\n createEffect(() => {\n if (open() === OpenState.open) {\n setNum((prev) => prev + 1);\n doc.addEventListener('mousewheel', preventDefault, {\n passive: false,\n });\n\n if (props.escClosable) {\n doc.addEventListener('keydown', close, false);\n }\n } else if (open() === OpenState.closeing) {\n setNum((prev) => prev - 1);\n } else {\n doc.addEventListener('click', point, true);\n }\n\n onCleanup(() => {\n doc.removeEventListener('mousewheel', preventDefault, false);\n doc.removeEventListener('keydown', close, false);\n doc.removeEventListener('click', point, true);\n });\n });\n const closeIcon = createMemo(() => {\n if (props.closeIcon === null || props.closeIcon === false) {\n return null;\n }\n if (['function', 'object'].includes(typeof props.closeIcon)) {\n return () => <span class=\"modal-close\">{props.closeIcon}</span>;\n }\n return () => (\n <n-button class=\"modal-close\" danger={true} circle={true} flat={true} onClick={close}>\n {props.closeIcon}\n </n-button>\n );\n });\n\n return (\n <Show when={open() !== OpenState.closed}>\n <Portal useShadow={true}>\n <style textContent={getCss()} />\n <style textContent={style} />\n <div\n ref={portal}\n class=\"portal\"\n classList={{\n open: open() === OpenState.open,\n closeing: open() !== OpenState.open,\n 'mask-blur': props.maskBlur,\n }}\n onAnimationEnd={handleDestroy}\n onClick={portalClick}\n >\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <strong class=\"modal-title\">{props.title}</strong>\n </div>\n <Show when={props.closeIcon === void 0} fallback={closeIcon() as JSXElement}>\n <n-button class=\"modal-close\" danger={true} circle={true} flat={true} onClick={close}>\n ⛌\n </n-button>\n </Show>\n <div class=\"modal-body\">{props.content}</div>\n {/* <div class=\"modal-footer\">{props.footer}</div> */}\n </div>\n </div>\n </Portal>\n </Show>\n );\n}\n\ncustomElement<ModalProps>(\n 'n-modal',\n {\n open: 'closed' as OpenStateKey,\n maskClosable: true,\n escClosable: true,\n onOpenChange: void 0,\n closeIcon: void 0,\n content: void 0,\n title: void 0,\n maskBlur: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onOpenChange(open: OpenStateKey) {\n opt.element.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['content']);\n });\n return <Modal {...props} />;\n },\n);\nexport default Modal;\n"],"names":["OpenState","createEffect","createMemo","createSignal","mergeProps","onCleanup","Show","untrack","Portal","customElement","clearAttribute","modalStore","style","Modal","props","portal","doc","document","documentElement","setNum","open","setOpen","posi","setPosi","x","y","width","height","getCss","openChange","visi","onOpenChange","preventDefault","e","close","type","escClosable","key","handleDestroy","portalClick","maskClosable","target","point","prev","clientWidth","clientX","clientHeight","clientY","addEventListener","passive","removeEventListener","closeIcon","includes","title","content","maskBlur","_","opt","el","element","dispatchEvent","CustomEvent","detail"],"mappings":"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"}
1
+ {"version":3,"sources":["components/modal/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n Show,\n untrack,\n} from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { customElement } from 'solid-element';\n\nimport type { CustomElement } from '..';\nimport { clearAttribute } from '../basic-config';\n\nimport modalStore from './store';\nimport { style } from './style';\n\nimport '../button';\n\n/**\n * API\n * @since 2.6.0\n */\nexport interface ModalProps {\n /** 是否打开模态框 */\n open?: OpenStateKey;\n /** 开启关闭的回调函数 */\n onOpenChange?: (open: OpenStateKey) => void;\n /** 点击遮罩关闭\n * @default true\n */\n maskClosable?: boolean;\n /** 通过 `esc` 按键关闭\n * @default true\n */\n escClosable?: boolean;\n /**\n * 自定义关闭图标, 设置为 null 或 false 时隐藏关闭按钮\n */\n closeIcon?: JSX.Element | null;\n /** 内容 */\n content: JSX.Element;\n /** 标题 */\n title?: JSX.Element;\n /** 遮罩模糊\n * @default false\n */\n maskBlur?: boolean;\n}\n\n/**\n * OpenStateKey\n */\nexport enum OpenState {\n /** 完全关闭 */\n closed = 'closed',\n /** 正在关闭 */\n closeing = 'closeing',\n /** 打开 */\n open = 'open',\n}\nexport type OpenStateKey = keyof typeof OpenState;\nexport type ModalElement = CustomElement<ModalProps, 'onOpenChange'>;\n\nfunction Modal(props: ModalProps) {\n const doc = document.documentElement;\n const { setNum } = modalStore;\n const [open, setOpen] = createSignal<OpenStateKey>('closed');\n const [posi, setPosi] = createSignal({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n let portal: HTMLDivElement | undefined;\n\n const getCss = createMemo(() => {\n const { x, y, width, height } = posi();\n\n return `.portal { --y: ${-(y - height / 2)}px;--x: ${-(x - width / 2)}px;}`;\n });\n\n function openChange(visi: OpenStateKey) {\n setOpen(visi);\n props.onOpenChange?.(visi);\n }\n function preventDefault(e: Event) {\n e.preventDefault();\n }\n function close(e: KeyboardEvent | Event) {\n preventDefault(e);\n if (e.type === 'keydown') {\n if (props.escClosable && (e as KeyboardEvent).key === 'Escape') {\n openChange(OpenState.closeing);\n }\n } else {\n openChange(OpenState.closeing);\n }\n }\n function handleDestroy() {\n if (open() === OpenState.closeing) {\n openChange(OpenState.closed);\n }\n }\n function portalClick(e: Event) {\n preventDefault(e);\n if (props.maskClosable && e.target === portal) {\n openChange(OpenState.closeing);\n }\n }\n\n createEffect(() => {\n if (props.open !== void 0 && props.open !== untrack(open)) {\n setOpen(props.open);\n }\n });\n\n function point(e: MouseEvent) {\n setPosi((prev) => ({\n ...prev,\n x: doc.clientWidth / 2 - e.clientX,\n y: doc.clientHeight / 2 - e.clientY,\n }));\n }\n createEffect(() => {\n if (open() === OpenState.open) {\n setNum((prev) => prev + 1);\n doc.addEventListener('mousewheel', preventDefault, {\n passive: false,\n });\n\n if (props.escClosable) {\n doc.addEventListener('keydown', close, false);\n }\n } else if (open() === OpenState.closeing) {\n setNum((prev) => prev - 1);\n } else {\n doc.addEventListener('click', point, true);\n }\n\n onCleanup(() => {\n doc.removeEventListener('mousewheel', preventDefault, false);\n doc.removeEventListener('keydown', close, false);\n doc.removeEventListener('click', point, true);\n });\n });\n const closeIcon = createMemo(() => {\n if (props.closeIcon === null || props.closeIcon === false) {\n return null;\n }\n if (['function', 'object'].includes(typeof props.closeIcon)) {\n return () => <span class=\"modal-close\">{props.closeIcon}</span>;\n }\n return () => (\n <n-button class=\"modal-close\" danger={true} circle={true} flat={true} onClick={close}>\n {props.closeIcon}\n </n-button>\n );\n });\n\n return (\n <Show when={open() !== OpenState.closed}>\n <Portal useShadow={true}>\n <style textContent={getCss()} />\n <style textContent={style} />\n <div\n ref={portal}\n class=\"portal\"\n classList={{\n open: open() === OpenState.open,\n closeing: open() !== OpenState.open,\n 'mask-blur': props.maskBlur,\n }}\n onAnimationEnd={handleDestroy}\n onClick={portalClick}\n >\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <strong class=\"modal-title\">{props.title}</strong>\n </div>\n <Show when={props.closeIcon === void 0} fallback={closeIcon() as JSXElement}>\n <n-button class=\"modal-close\" danger={true} circle={true} flat={true} onClick={close}>\n ⛌\n </n-button>\n </Show>\n <div class=\"modal-body\">{props.content}</div>\n {/* <div class=\"modal-footer\">{props.footer}</div> */}\n </div>\n </div>\n </Portal>\n </Show>\n );\n}\n\ncustomElement<ModalProps>(\n 'n-modal',\n {\n open: 'closed' as OpenStateKey,\n maskClosable: true,\n escClosable: true,\n onOpenChange: void 0,\n closeIcon: void 0,\n content: void 0,\n title: void 0,\n maskBlur: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onOpenChange(open: OpenStateKey) {\n opt.element.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['content']);\n });\n return <Modal {...props} />;\n },\n);\nexport default Modal;\n"],"names":["OpenState","createEffect","createMemo","createSignal","mergeProps","onCleanup","Show","untrack","Portal","customElement","clearAttribute","modalStore","style","Modal","props","portal","doc","document","documentElement","setNum","open","setOpen","posi","setPosi","x","y","width","height","getCss","openChange","visi","onOpenChange","preventDefault","e","close","type","escClosable","key","handleDestroy","portalClick","maskClosable","target","point","prev","clientWidth","clientX","clientHeight","clientY","addEventListener","passive","removeEventListener","closeIcon","includes","title","content","maskBlur","_","opt","el","element","dispatchEvent","CustomEvent","detail"],"mappings":"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"}
package/es/modal/store.js CHANGED
@@ -1,2 +1 @@
1
- import{createEffect as o,createRoot as e,createSignal as t,getOwner as l}from"solid-js";import r from"@moneko/common/lib/updateStyleRule";export default e(function(){let[e,l]=t(0);return o(()=>{let o=e();0===o?r({"overflow-y":""},"body"):1===o&&r({"overflow-y":"hidden"},"body")}),{num:e,setNum:l}},l());
2
- //# sourceMappingURL=store.js.map
1
+ import{createEffect as o,createRoot as e,createSignal as t,getOwner as l}from"solid-js";import r from"@moneko/common/lib/updateStyleRule";export default e(function(){let[e,l]=t(0);return o(()=>{let o=e();0===o?r({"overflow-y":""},"body"):1===o&&r({"overflow-y":"hidden"},"body")}),{num:e,setNum:l}},l());
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/modal/store.ts"],"sourcesContent":["import { createEffect, createRoot, createSignal, getOwner } from 'solid-js';\nimport { updateStyleRule } from '@moneko/common';\n\nfunction createModal() {\n const [num, setNum] = createSignal(0);\n\n createEffect(() => {\n const count = num();\n\n if (count === 0) {\n updateStyleRule({ 'overflow-y': '' }, 'body');\n } else if (count === 1) {\n updateStyleRule({ 'overflow-y': 'hidden' }, 'body');\n }\n });\n return {\n num,\n setNum,\n };\n}\n\nexport default createRoot(createModal, getOwner());\n"],"names":["createEffect","createRoot","createSignal","getOwner","updateStyleRule","num","setNum","count"],"mappings":"AAAA,OAASA,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,CAAEC,gBAAAA,CAAY,CAAEC,YAAAA,CAAQ,KAAQ,UAAW,AAC5E,QAASC,MAAuB,oCAAiB,AAoBjD,gBAAeH,EAlBf,WACE,GAAM,CAACI,EAAKC,EAAO,CAAGJ,EAAa,GAWnC,OATAF,EAAa,KACX,IAAMO,EAAQF,GAEVE,AAAU,CAAA,IAAVA,EACFH,EAAgB,CAAE,aAAc,EAAG,EAAG,QACnB,IAAVG,GACTH,EAAgB,CAAE,aAAc,QAAS,EAAG,OAEhD,GACO,CACLC,IAAAA,EACAC,OAAAA,CACF,CACF,EAEuCH,IAAY"}
1
+ {"version":3,"sources":["components/modal/store.ts"],"sourcesContent":["import { createEffect, createRoot, createSignal, getOwner } from 'solid-js';\nimport { updateStyleRule } from '@moneko/common';\n\nfunction createModal() {\n const [num, setNum] = createSignal(0);\n\n createEffect(() => {\n const count = num();\n\n if (count === 0) {\n updateStyleRule({ 'overflow-y': '' }, 'body');\n } else if (count === 1) {\n updateStyleRule({ 'overflow-y': 'hidden' }, 'body');\n }\n });\n return {\n num,\n setNum,\n };\n}\n\nexport default createRoot(createModal, getOwner());\n"],"names":["createEffect","createRoot","createSignal","getOwner","updateStyleRule","num","setNum","count"],"mappings":"AAAA,OAASA,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,CAAEC,gBAAAA,CAAY,CAAEC,YAAAA,CAAQ,KAAQ,UAAW,AAC5E,QAASC,MAAuB,oCAAiB,AAoBjD,gBAAeH,EAlBf,WACE,GAAM,CAACI,EAAKC,EAAO,CAAGJ,EAAa,GAWnC,OATAF,EAAa,KACX,IAAMO,EAAQF,GAEVE,AAAU,CAAA,IAAVA,EACFH,EAAgB,CAAE,aAAc,EAAG,EAAG,QACnB,IAAVG,GACTH,EAAgB,CAAE,aAAc,QAAS,EAAG,OAEhD,GACO,CACLC,IAAAA,EACAC,OAAAA,CACF,CACF,EAEuCH,IAAY"}
package/es/modal/style.js CHANGED
@@ -113,5 +113,4 @@ import{css as i}from"@moneko/css";export const style=i`
113
113
  pointer-events: none;
114
114
  }
115
115
  }
116
- `;
117
- //# sourceMappingURL=style.js.map
116
+ `;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/modal/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .portal {\n --opacity: 0;\n --scale: 0;\n --timing: ease-in;\n\n position: fixed;\n box-sizing: border-box;\n inset-block-start: 0;\n inset-inline-start: 0;\n inline-size: 100%;\n block-size: 100%;\n z-index: 99999;\n display: flex;\n\n &::before {\n position: absolute;\n z-index: -1;\n background-color: var(--mask-bg);\n opacity: var(--opacity);\n transition: opacity 0.2s var(--timing);\n inset-inline-start: 0;\n inset-block-start: 0;\n content: '';\n inline-size: 100%;\n block-size: 100%;\n pointer-events: none;\n }\n }\n\n .mask-blur::before {\n backdrop-filter: blur(10px);\n }\n\n .modal-content {\n margin: auto;\n border-radius: var(--border-radius);\n padding: 20px 24px;\n background-color: var(--modal-component-bg);\n opacity: var(--opacity);\n box-shadow: var(--modal-box-shadow);\n inline-size: 520px;\n max-inline-size: calc(100% - 32px);\n transform: translate3d(var(--x), var(--y), 1px) scale3d(var(--scale), var(--scale), 1);\n transition-property: transform, opacity;\n transition-duration: 0.2s;\n transition-timing-function: var(--timing);\n backdrop-filter: blur(10px);\n }\n\n .open {\n --opacity: 0;\n --timing: ease-in;\n\n animation: zoom-in 0.2s var(--timing) forwards;\n }\n\n .closeing {\n --opacity: 1;\n --timing: ease-out;\n\n animation: zoom-out 0.2s var(--timing) forwards;\n }\n\n .modal-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n }\n\n .modal-title {\n flex: 1;\n }\n\n .modal-close {\n position: absolute;\n inset-inline-end: 10px;\n inset-block-start: 10px;\n\n &::part(label) {\n color: var(--text-color);\n }\n }\n\n @keyframes zoom-in {\n 0% {\n --opacity: 0;\n --scale: 0;\n\n pointer-events: none;\n }\n\n 100% {\n --opacity: 1;\n --scale: 1;\n --x: 0;\n --y: 0;\n }\n }\n\n @keyframes zoom-out {\n 0% {\n --opacity: 1;\n --scale: 1;\n --x: 0;\n --y: 0;\n }\n\n 100% {\n --opacity: 0;\n --scale: 0;\n\n pointer-events: none;\n }\n }\n`;\n"],"names":["css","style"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,MAAQD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmHzB,CAAC,AAAC"}
1
+ {"version":3,"sources":["components/modal/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .portal {\n --opacity: 0;\n --scale: 0;\n --timing: ease-in;\n\n position: fixed;\n box-sizing: border-box;\n inset-block-start: 0;\n inset-inline-start: 0;\n inline-size: 100%;\n block-size: 100%;\n z-index: 99999;\n display: flex;\n\n &::before {\n position: absolute;\n z-index: -1;\n background-color: var(--mask-bg);\n opacity: var(--opacity);\n transition: opacity 0.2s var(--timing);\n inset-inline-start: 0;\n inset-block-start: 0;\n content: '';\n inline-size: 100%;\n block-size: 100%;\n pointer-events: none;\n }\n }\n\n .mask-blur::before {\n backdrop-filter: blur(10px);\n }\n\n .modal-content {\n margin: auto;\n border-radius: var(--border-radius);\n padding: 20px 24px;\n background-color: var(--modal-component-bg);\n opacity: var(--opacity);\n box-shadow: var(--modal-box-shadow);\n inline-size: 520px;\n max-inline-size: calc(100% - 32px);\n transform: translate3d(var(--x), var(--y), 1px) scale3d(var(--scale), var(--scale), 1);\n transition-property: transform, opacity;\n transition-duration: 0.2s;\n transition-timing-function: var(--timing);\n backdrop-filter: blur(10px);\n }\n\n .open {\n --opacity: 0;\n --timing: ease-in;\n\n animation: zoom-in 0.2s var(--timing) forwards;\n }\n\n .closeing {\n --opacity: 1;\n --timing: ease-out;\n\n animation: zoom-out 0.2s var(--timing) forwards;\n }\n\n .modal-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n }\n\n .modal-title {\n flex: 1;\n }\n\n .modal-close {\n position: absolute;\n inset-inline-end: 10px;\n inset-block-start: 10px;\n\n &::part(label) {\n color: var(--text-color);\n }\n }\n\n @keyframes zoom-in {\n 0% {\n --opacity: 0;\n --scale: 0;\n\n pointer-events: none;\n }\n\n 100% {\n --opacity: 1;\n --scale: 1;\n --x: 0;\n --y: 0;\n }\n }\n\n @keyframes zoom-out {\n 0% {\n --opacity: 1;\n --scale: 1;\n --x: 0;\n --y: 0;\n }\n\n 100% {\n --opacity: 0;\n --scale: 0;\n\n pointer-events: none;\n }\n }\n`;\n"],"names":["css","style"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,MAAQD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmHzB,CAAC,AAAC"}
@@ -1,2 +1 @@
1
- import n from"./notification";import r from"./queque";export default{info:n.bind(null,"info"),success:n.bind(null,"success"),error:n.bind(null,"error"),warning:n.bind(null,"warning"),primary:n.bind(null,"primary"),update:r.update,destory:r.clean};
2
- //# sourceMappingURL=index.js.map
1
+ import n from"./notification";import r from"./queque";export default{info:n.bind(null,"info"),success:n.bind(null,"success"),error:n.bind(null,"error"),warning:n.bind(null,"warning"),primary:n.bind(null,"primary"),update:r.update,destory:r.clean};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/notification/index.tsx"],"sourcesContent":["import notification from './notification';\nimport queque, { type NotificationProps } from './queque';\n\nexport type { NotificationProps, NotificationType } from './queque';\n\n/** Api */\ninterface Notification {\n /**\n * 信息\n * @param {String} content - 内容.\n * @param {Number} duration - 显示时间.\n * @param {Boolean} close - 显示关闭按钮.\n * @return {String} id\n */\n info(content: JSX.Element, duration?: number, close?: boolean, icon?: JSX.Element): string;\n /**\n * 成功\n * @param {String} content - 内容.\n * @param {Number} duration - 显示时间.\n * @param {Boolean} close - 显示关闭按钮.\n * @return {String} id\n */\n success(content: JSX.Element, duration?: number, close?: boolean, icon?: JSX.Element): string;\n /**\n * 错误\n * @param {String} content - 内容.\n * @param {Number} duration - 显示时间.\n * @param {Boolean} close - 显示关闭按钮.\n * @return {String} id\n */\n error(content: JSX.Element, duration?: number, close?: boolean, icon?: JSX.Element): string;\n /**\n * 警告\n * @param {String} content - 内容.\n * @param {Number} duration - 显示时间.\n * @param {Boolean} close - 显示关闭按钮.\n * @return {String} id\n */\n warning(content: JSX.Element, duration?: number, close?: boolean, icon?: JSX.Element): string;\n /**\n * 主要\n * @param {String} content - 内容.\n * @param {Number} duration - 显示时间.\n * @param {Boolean} close - 显示关闭按钮.\n * @return {String} id\n */\n primary(content: JSX.Element, duration?: number, close?: boolean, icon?: JSX.Element): string;\n /**\n * 更新通知内容\n * @param {String} id 通知id\n * @param {NotificationProps} item 更新内容\n * @constructor\n */\n update(uniqueId: string, item: NotificationProps): void;\n /**\n * 销毁全部通知\n * @constructor\n */\n destory: VoidFunction;\n}\n\nexport default {\n info: notification.bind(null, 'info'),\n success: notification.bind(null, 'success'),\n error: notification.bind(null, 'error'),\n warning: notification.bind(null, 'warning'),\n primary: notification.bind(null, 'primary'),\n update: queque.update,\n destory: queque.clean,\n} as Notification;\n"],"names":["notification","queque","info","bind","success","error","warning","primary","update","destory","clean"],"mappings":"AAAA,OAAOA,MAAkB,gBAAiB,AAC1C,QAAOC,MAAwC,UAAW,AA4D1D,eAAe,CACbC,KAAMF,EAAaG,IAAI,CAAC,KAAM,QAC9BC,QAASJ,EAAaG,IAAI,CAAC,KAAM,WACjCE,MAAOL,EAAaG,IAAI,CAAC,KAAM,SAC/BG,QAASN,EAAaG,IAAI,CAAC,KAAM,WACjCI,QAASP,EAAaG,IAAI,CAAC,KAAM,WACjCK,OAAQP,EAAOO,MAAM,CACrBC,QAASR,EAAOS,KAAK,AACvB,CAAkB"}
1
+ {"version":3,"sources":["components/notification/index.tsx"],"sourcesContent":["import notification from './notification';\nimport queque, { type NotificationProps } from './queque';\n\nexport type { NotificationProps, NotificationType } from './queque';\n\n/** Api */\ninterface Notification {\n /**\n * 信息\n * @param {String} content - 内容.\n * @param {Number} duration - 显示时间.\n * @param {Boolean} close - 显示关闭按钮.\n * @return {String} id\n */\n info(content: JSX.Element, duration?: number, close?: boolean, icon?: JSX.Element): string;\n /**\n * 成功\n * @param {String} content - 内容.\n * @param {Number} duration - 显示时间.\n * @param {Boolean} close - 显示关闭按钮.\n * @return {String} id\n */\n success(content: JSX.Element, duration?: number, close?: boolean, icon?: JSX.Element): string;\n /**\n * 错误\n * @param {String} content - 内容.\n * @param {Number} duration - 显示时间.\n * @param {Boolean} close - 显示关闭按钮.\n * @return {String} id\n */\n error(content: JSX.Element, duration?: number, close?: boolean, icon?: JSX.Element): string;\n /**\n * 警告\n * @param {String} content - 内容.\n * @param {Number} duration - 显示时间.\n * @param {Boolean} close - 显示关闭按钮.\n * @return {String} id\n */\n warning(content: JSX.Element, duration?: number, close?: boolean, icon?: JSX.Element): string;\n /**\n * 主要\n * @param {String} content - 内容.\n * @param {Number} duration - 显示时间.\n * @param {Boolean} close - 显示关闭按钮.\n * @return {String} id\n */\n primary(content: JSX.Element, duration?: number, close?: boolean, icon?: JSX.Element): string;\n /**\n * 更新通知内容\n * @param {String} id 通知id\n * @param {NotificationProps} item 更新内容\n * @constructor\n */\n update(uniqueId: string, item: NotificationProps): void;\n /**\n * 销毁全部通知\n * @constructor\n */\n destory: VoidFunction;\n}\n\nexport default {\n info: notification.bind(null, 'info'),\n success: notification.bind(null, 'success'),\n error: notification.bind(null, 'error'),\n warning: notification.bind(null, 'warning'),\n primary: notification.bind(null, 'primary'),\n update: queque.update,\n destory: queque.clean,\n} as Notification;\n"],"names":["notification","queque","info","bind","success","error","warning","primary","update","destory","clean"],"mappings":"AAAA,OAAOA,MAAkB,gBAAiB,AAC1C,QAAOC,MAAwC,UAAW,AA4D1D,eAAe,CACbC,KAAMF,EAAaG,IAAI,CAAC,KAAM,QAC9BC,QAASJ,EAAaG,IAAI,CAAC,KAAM,WACjCE,MAAOL,EAAaG,IAAI,CAAC,KAAM,SAC/BG,QAASN,EAAaG,IAAI,CAAC,KAAM,WACjCI,QAASP,EAAaG,IAAI,CAAC,KAAM,WACjCK,OAAQP,EAAOO,MAAM,CACrBC,QAASR,EAAOS,KAAK,AACvB,CAAkB"}
@@ -1,2 +1 @@
1
- import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";import{effect as o}from"solid-js/web";import{delegateEvents as r}from"solid-js/web";import{createComponent as i}from"solid-js/web";import{className as l}from"solid-js/web";let n=e("<style> "),s=e("<style>"),m=e('<span class="close">'),d=e('<div><div class="content">');import{createEffect as a,createUniqueId as c,For as u,Show as f}from"solid-js";import{render as p}from"solid-js/web";import{cx as h}from"@moneko/css";import g from"../theme";import v from"./queque";import{styles as w}from"./styles";let y="n-notification-box";export default((e,r,b=3e3,j,$)=>{let _=c(),{list:x,add:C,remove:k}=v,{baseStyle:q}=g,E=document.getElementById(y);if(C({type:e,icon:$,children:r,close:j,uniqueId:_}),b&&b>0){let e=setTimeout(()=>{k(_),clearTimeout(e)},b)}if(!E){(E=document.createElement("div")).id=y,E.style.position="fixed",E.style.insetBlockStart="16px",E.style.insetInlineStart="50%",E.style.transform="translateX(-50%)",E.attachShadow({mode:"open"});let e=p(()=>(a(()=>{0===x().length&&(e(),null==E||E.remove())}),i(f,{get when(){return x().length},get children(){return[(()=>{let e=n(),t=e.firstChild;return o(()=>t.data=q()),e})(),(()=>{let e=s();return e.textContent=w,e})(),i(u,{get each(){return x()},children:e=>(()=>{let r=d(),n=r.firstChild;return t(r,i(f,{get when(){return e.icon},get children(){return e.icon}}),n),t(n,()=>e.children),t(r,i(f,{get when(){return e.close},get children(){let t=m();return t.$$click=()=>{k(e.uniqueId)},t}}),null),o(t=>{let o=h("notification",e.type),i=!!e.closeing;return o!==t._v$&&l(r,t._v$=o),i!==t._v$2&&r.classList.toggle("closeing",t._v$2=i),t},{_v$:void 0,_v$2:void 0}),r})()})]}})),E.shadowRoot);document.body.appendChild(E)}return _});r(["click"]);
2
- //# sourceMappingURL=notification.js.map
1
+ import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";import{effect as o}from"solid-js/web";import{delegateEvents as r}from"solid-js/web";import{createComponent as i}from"solid-js/web";import{className as l}from"solid-js/web";let n=e("<style> "),s=e("<style>"),m=e('<span class="close">'),d=e('<div><div class="content">');import{createEffect as a,createUniqueId as c,For as u,Show as f}from"solid-js";import{render as p}from"solid-js/web";import{cx as h}from"@moneko/css";import g from"../theme";import v from"./queque";import{styles as w}from"./styles";let y="n-notification-box";export default((e,r,b=3e3,j,$)=>{let _=c(),{list:x,add:C,remove:k}=v,{baseStyle:q}=g,E=document.getElementById(y);if(C({type:e,icon:$,children:r,close:j,uniqueId:_}),b&&b>0){let e=setTimeout(()=>{k(_),clearTimeout(e)},b)}if(!E){(E=document.createElement("div")).id=y,E.style.position="fixed",E.style.insetBlockStart="16px",E.style.insetInlineStart="50%",E.style.transform="translateX(-50%)",E.attachShadow({mode:"open"});let e=p(()=>(a(()=>{0===x().length&&(e(),null==E||E.remove())}),i(f,{get when(){return x().length},get children(){return[(()=>{let e=n(),t=e.firstChild;return o(()=>t.data=q()),e})(),(()=>{let e=s();return e.textContent=w,e})(),i(u,{get each(){return x()},children:e=>(()=>{let r=d(),n=r.firstChild;return t(r,i(f,{get when(){return e.icon},get children(){return e.icon}}),n),t(n,()=>e.children),t(r,i(f,{get when(){return e.close},get children(){let t=m();return t.$$click=()=>{k(e.uniqueId)},t}}),null),o(t=>{let o=h("notification",e.type),i=!!e.closeing;return o!==t._v$&&l(r,t._v$=o),i!==t._v$2&&r.classList.toggle("closeing",t._v$2=i),t},{_v$:void 0,_v$2:void 0}),r})()})]}})),E.shadowRoot);document.body.appendChild(E)}return _});r(["click"]);