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/notification/notification.tsx"],"sourcesContent":["import { createEffect, createUniqueId, For, Show } from 'solid-js';\nimport { render } from 'solid-js/web';\nimport { cx } from '@moneko/css';\n\nimport theme from '../theme';\n\nimport queque, { type NotificationType } from './queque';\nimport { styles } from './styles';\n\nconst mountId = 'n-notification-box';\n\nconst notification = (\n type: keyof typeof NotificationType,\n children: JSX.Element,\n duration = 3000,\n close?: boolean,\n icon?: JSX.Element,\n) => {\n const uniqueId = createUniqueId();\n const { list, add, remove } = queque;\n const { baseStyle } = theme;\n let mount = document.getElementById(mountId);\n\n add({\n type,\n icon,\n children,\n close,\n uniqueId,\n });\n if (duration && duration > 0) {\n const timer = setTimeout(() => {\n remove(uniqueId);\n clearTimeout(timer);\n }, duration);\n }\n if (!mount) {\n mount = document.createElement('div');\n mount.id = mountId;\n mount.style.position = 'fixed';\n mount.style.insetBlockStart = '16px';\n mount.style.insetInlineStart = '50%';\n mount.style.transform = 'translateX(-50%)';\n mount.attachShadow({ mode: 'open' });\n\n const unmount = render(() => {\n createEffect(() => {\n if (list().length === 0) {\n unmount();\n mount?.remove();\n }\n });\n return (\n <Show when={list().length}>\n <style textContent={baseStyle()} />\n <style textContent={styles} />\n <For each={list()}>\n {(item) => {\n return (\n <div\n class={cx('notification', item.type)}\n classList={{\n closeing: item.closeing,\n }}\n >\n <Show when={item.icon}>{item.icon}</Show>\n <div class=\"content\">{item.children}</div>\n <Show when={item.close}>\n <span\n class=\"close\"\n onClick={() => {\n remove(item.uniqueId);\n }}\n />\n </Show>\n </div>\n );\n }}\n </For>\n </Show>\n );\n }, mount.shadowRoot!);\n\n document.body.appendChild(mount);\n }\n return uniqueId;\n};\n\nexport default notification;\n"],"names":["createEffect","createUniqueId","For","Show","render","cx","theme","queque","styles","mountId","type","children","duration","close","icon","uniqueId","list","add","remove","baseStyle","mount","document","getElementById","timer","setTimeout","clearTimeout","createElement","id","style","position","insetBlockStart","insetInlineStart","transform","attachShadow","mode","unmount","length","item","closeing","shadowRoot","body","appendChild"],"mappings":"0VAAA,QAASA,gBAAAA,CAAY,CAAEC,kBAAAA,CAAc,CAAEC,OAAAA,CAAG,CAAEC,QAAAA,CAAI,KAAQ,UAAW,AACnE,QAASC,UAAAA,CAAM,KAAQ,cAAe,AACtC,QAASC,MAAAA,CAAE,KAAQ,aAAc,AAEjC,QAAOC,MAAW,UAAW,AAE7B,QAAOC,MAAuC,UAAW,AACzD,QAASC,UAAAA,CAAM,KAAQ,UAAW,CAElC,IAAMC,EAAU,oBA+EhB,eA7EqB,CAAA,CACnBC,EACAC,EACAC,EAAW,GAAI,CACfC,EACAC,KAEA,IAAMC,EAAWd,IACX,CAAEe,KAAAA,CAAI,CAAEC,IAAAA,CAAG,CAAEC,OAAAA,CAAM,CAAE,CAAGX,EACxB,CAAEY,UAAAA,CAAS,CAAE,CAAGb,EAClBc,EAAQC,SAASC,cAAc,CAACb,GASpC,GAPAQ,EAAI,CACFP,KAAAA,EACAI,KAAAA,EACAH,SAAAA,EACAE,MAAAA,EACAE,SAAAA,CACF,GACIH,GAAYA,EAAW,EAAG,CAC5B,IAAMW,EAAQC,WAAW,KACvBN,EAAOH,GACPU,aAAaF,EACf,EAAGX,EACL,CACA,GAAI,CAACQ,EAAO,CAEVA,AADAA,CAAAA,EAAQC,SAASK,aAAa,CAAC,MAAK,EAC9BC,EAAE,CAAGlB,EACXW,EAAMQ,KAAK,CAACC,QAAQ,CAAG,QACvBT,EAAMQ,KAAK,CAACE,eAAe,CAAG,OAC9BV,EAAMQ,KAAK,CAACG,gBAAgB,CAAG,MAC/BX,EAAMQ,KAAK,CAACI,SAAS,CAAG,mBACxBZ,EAAMa,YAAY,CAAC,CAAEC,KAAM,MAAO,GAElC,IAAMC,EAAU/B,EAAO,KACrBJ,EAAa,KACW,IAAlBgB,IAAOoB,MAAM,GACfD,UACAf,GAAAA,EAAOF,MAAM,GAEjB,KAEGf,qBAAWa,IAAOoB,MAAM,2EACHjB,gDACAX,UACnBN,qBAAUc,cACR,AAACqB,+CAQKlC,qBAAWkC,EAAKvB,IAAI,wBAAGuB,EAAKvB,IAAI,eACXuB,EAAK1B,QAAQ,QAClCR,qBAAWkC,EAAKxB,KAAK,4CAGT,KACPK,EAAOmB,EAAKtB,QAAQ,CACtB,yBAZGV,EAAG,eAAgBgC,EAAK3B,IAAI,MAEvB2B,EAAKC,QAAQ,8HAmBpClB,EAAMmB,UAAU,EAEnBlB,SAASmB,IAAI,CAACC,WAAW,CAACrB,EAC5B,CACA,OAAOL,CACT,CAAA,CAE4B"}
1
+ {"version":3,"sources":["components/notification/notification.tsx"],"sourcesContent":["import { createEffect, createUniqueId, For, Show } from 'solid-js';\nimport { render } from 'solid-js/web';\nimport { cx } from '@moneko/css';\n\nimport theme from '../theme';\n\nimport queque, { type NotificationType } from './queque';\nimport { styles } from './styles';\n\nconst mountId = 'n-notification-box';\n\nconst notification = (\n type: keyof typeof NotificationType,\n children: JSX.Element,\n duration = 3000,\n close?: boolean,\n icon?: JSX.Element,\n) => {\n const uniqueId = createUniqueId();\n const { list, add, remove } = queque;\n const { baseStyle } = theme;\n let mount = document.getElementById(mountId);\n\n add({\n type,\n icon,\n children,\n close,\n uniqueId,\n });\n if (duration && duration > 0) {\n const timer = setTimeout(() => {\n remove(uniqueId);\n clearTimeout(timer);\n }, duration);\n }\n if (!mount) {\n mount = document.createElement('div');\n mount.id = mountId;\n mount.style.position = 'fixed';\n mount.style.insetBlockStart = '16px';\n mount.style.insetInlineStart = '50%';\n mount.style.transform = 'translateX(-50%)';\n mount.attachShadow({ mode: 'open' });\n\n const unmount = render(() => {\n createEffect(() => {\n if (list().length === 0) {\n unmount();\n mount?.remove();\n }\n });\n return (\n <Show when={list().length}>\n <style textContent={baseStyle()} />\n <style textContent={styles} />\n <For each={list()}>\n {(item) => {\n return (\n <div\n class={cx('notification', item.type)}\n classList={{\n closeing: item.closeing,\n }}\n >\n <Show when={item.icon}>{item.icon}</Show>\n <div class=\"content\">{item.children}</div>\n <Show when={item.close}>\n <span\n class=\"close\"\n onClick={() => {\n remove(item.uniqueId);\n }}\n />\n </Show>\n </div>\n );\n }}\n </For>\n </Show>\n );\n }, mount.shadowRoot!);\n\n document.body.appendChild(mount);\n }\n return uniqueId;\n};\n\nexport default notification;\n"],"names":["createEffect","createUniqueId","For","Show","render","cx","theme","queque","styles","mountId","type","children","duration","close","icon","uniqueId","list","add","remove","baseStyle","mount","document","getElementById","timer","setTimeout","clearTimeout","createElement","id","style","position","insetBlockStart","insetInlineStart","transform","attachShadow","mode","unmount","length","item","closeing","shadowRoot","body","appendChild"],"mappings":"0VAAA,QAASA,gBAAAA,CAAY,CAAEC,kBAAAA,CAAc,CAAEC,OAAAA,CAAG,CAAEC,QAAAA,CAAI,KAAQ,UAAW,AACnE,QAASC,UAAAA,CAAM,KAAQ,cAAe,AACtC,QAASC,MAAAA,CAAE,KAAQ,aAAc,AAEjC,QAAOC,MAAW,UAAW,AAE7B,QAAOC,MAAuC,UAAW,AACzD,QAASC,UAAAA,CAAM,KAAQ,UAAW,CAElC,IAAMC,EAAU,oBA+EhB,eA7EqB,CAAA,CACnBC,EACAC,EACAC,EAAW,GAAI,CACfC,EACAC,KAEA,IAAMC,EAAWd,IACX,CAAEe,KAAAA,CAAI,CAAEC,IAAAA,CAAG,CAAEC,OAAAA,CAAM,CAAE,CAAGX,EACxB,CAAEY,UAAAA,CAAS,CAAE,CAAGb,EAClBc,EAAQC,SAASC,cAAc,CAACb,GASpC,GAPAQ,EAAI,CACFP,KAAAA,EACAI,KAAAA,EACAH,SAAAA,EACAE,MAAAA,EACAE,SAAAA,CACF,GACIH,GAAYA,EAAW,EAAG,CAC5B,IAAMW,EAAQC,WAAW,KACvBN,EAAOH,GACPU,aAAaF,EACf,EAAGX,EACL,CACA,GAAI,CAACQ,EAAO,CAEVA,AADAA,CAAAA,EAAQC,SAASK,aAAa,CAAC,MAAK,EAC9BC,EAAE,CAAGlB,EACXW,EAAMQ,KAAK,CAACC,QAAQ,CAAG,QACvBT,EAAMQ,KAAK,CAACE,eAAe,CAAG,OAC9BV,EAAMQ,KAAK,CAACG,gBAAgB,CAAG,MAC/BX,EAAMQ,KAAK,CAACI,SAAS,CAAG,mBACxBZ,EAAMa,YAAY,CAAC,CAAEC,KAAM,MAAO,GAElC,IAAMC,EAAU/B,EAAO,KACrBJ,EAAa,KACW,IAAlBgB,IAAOoB,MAAM,GACfD,UACAf,GAAAA,EAAOF,MAAM,GAEjB,KAEGf,qBAAWa,IAAOoB,MAAM,2EACHjB,gDACAX,UACnBN,qBAAUc,cACR,AAACqB,+CAQKlC,qBAAWkC,EAAKvB,IAAI,wBAAGuB,EAAKvB,IAAI,eACXuB,EAAK1B,QAAQ,QAClCR,qBAAWkC,EAAKxB,KAAK,4CAGT,KACPK,EAAOmB,EAAKtB,QAAQ,CACtB,yBAZGV,EAAG,eAAgBgC,EAAK3B,IAAI,MAEvB2B,EAAKC,QAAQ,8HAmBpClB,EAAMmB,UAAU,EAEnBlB,SAASmB,IAAI,CAACC,WAAW,CAACrB,EAC5B,CACA,OAAOL,CACT,CAAA,CAE4B"}
@@ -1,2 +1 @@
1
- var r;function e(){return(e=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r}).apply(this,arguments)}import{createRoot as t,createSignal as i}from"solid-js";export var NotificationType;(r=NotificationType||(NotificationType={})).info="info",r.success="success",r.error="error",r.warning="warning",r.primary="primary";let n=t(()=>{let[r,t]=i([]);return{list:r,add:function(r){t(e=>[...e,r])},remove:function(r){t(t=>t.map(t=>t.uniqueId===r?e({},t,{closeing:!0}):t));let i=setTimeout(()=>{t(e=>e.filter(e=>e.uniqueId!==r)),clearTimeout(i)},200)},clean:function(){t([])},update:function(r,i){t(t=>t.map(t=>t.uniqueId===r?e({},t,i):t))}}});export default n;
2
- //# sourceMappingURL=queque.js.map
1
+ var r;function e(){return(e=Object.assign||function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r}).apply(this,arguments)}import{createRoot as t,createSignal as i}from"solid-js";export var NotificationType;(r=NotificationType||(NotificationType={})).info="info",r.success="success",r.error="error",r.warning="warning",r.primary="primary";let n=t(()=>{let[r,t]=i([]);return{list:r,add:function(r){t(e=>[...e,r])},remove:function(r){t(t=>t.map(t=>t.uniqueId===r?e({},t,{closeing:!0}):t));let i=setTimeout(()=>{t(e=>e.filter(e=>e.uniqueId!==r)),clearTimeout(i)},200)},clean:function(){t([])},update:function(r,i){t(t=>t.map(t=>t.uniqueId===r?e({},t,i):t))}}});export default n;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/notification/queque.ts"],"sourcesContent":["import { createRoot, createSignal } from 'solid-js';\n\n/** Api\n * @since 2.7.0\n */\nexport interface NotificationProps {\n /** 通知类型 */\n type: keyof typeof NotificationType;\n /** 通知内容 */\n children: JSX.Element;\n /** 图标 */\n icon?: JSX.Element;\n /**\n * 是否显示关闭按钮\n * @default false\n */\n close?: boolean;\n /**\n * 显示通知时间, 到时自动关闭; 当 duration < 1 时不自动关闭\n * @default 3000\n */\n duration?: boolean;\n}\n\n/** 通知类型 */\nexport enum NotificationType {\n /** 详细 */\n info = 'info',\n /** 成功 */\n success = 'success',\n /** 错误 */\n error = 'error',\n /** 警告 */\n warning = 'warning',\n /** 主要 */\n primary = 'primary',\n}\n\ninterface NotificationQueQue extends NotificationProps {\n uniqueId: string;\n closeing?: boolean;\n}\nconst queque = createRoot(() => {\n const [list, setList] = createSignal<NotificationQueQue[]>([]);\n\n function add(item: NotificationQueQue) {\n setList((prev) => [...prev, item]);\n }\n function remove(uniqueId: string) {\n setList((prev) =>\n prev.map((q) => {\n if (q.uniqueId === uniqueId) {\n return { ...q, closeing: true };\n }\n return q;\n }),\n );\n const timer = setTimeout(() => {\n setList((prev) => prev.filter((q) => q.uniqueId !== uniqueId));\n clearTimeout(timer);\n }, 200);\n }\n function update(uniqueId: string, item: NotificationProps) {\n setList((prev) =>\n prev.map((q) => {\n if (q.uniqueId === uniqueId) {\n return { ...q, ...item };\n }\n return q;\n }),\n );\n }\n function clean() {\n setList([]);\n }\n return { list, add, remove, clean, update };\n});\n\nexport default queque;\n"],"names":["NotificationType","createRoot","createSignal","queque","list","setList","add","item","prev","remove","uniqueId","map","q","closeing","timer","setTimeout","filter","clearTimeout","clean","update"],"mappings":"IAyBYA,iNAzBZ,OAASC,cAAAA,CAAU,CAAEC,gBAAAA,CAAY,KAAQ,UAAW,8BAyBxCF,EAAAA,mBAAAA,8GAiBZ,IAAMG,EAASF,EAAW,KACxB,GAAM,CAACG,EAAMC,EAAQ,CAAGH,EAAmC,EAAE,EAgC7D,MAAO,CAAEE,KAAAA,EAAME,IA9Bf,SAAaC,CAAwB,EACnCF,EAAQ,AAACG,GAAS,IAAIA,EAAMD,EAAK,CACnC,EA4BoBE,OA3BpB,SAAgBC,CAAgB,EAC9BL,EAAQ,AAACG,GACPA,EAAKG,GAAG,CAAC,AAACC,GACR,AAAIA,EAAEF,QAAQ,GAAKA,EACV,KAAKE,GAAGC,SAAU,CAAA,IAEpBD,IAGX,IAAME,EAAQC,WAAW,KACvBV,EAAQ,AAACG,GAASA,EAAKQ,MAAM,CAAC,AAACJ,GAAMA,EAAEF,QAAQ,GAAKA,IACpDO,aAAaH,EACf,EAAG,IACL,EAc4BI,MAH5B,WACEb,EAAQ,EAAE,CACZ,EACmCc,OAbnC,SAAgBT,CAAgB,CAAEH,CAAuB,EACvDF,EAAQ,AAACG,GACPA,EAAKG,GAAG,CAAC,AAACC,GACR,AAAIA,EAAEF,QAAQ,GAAKA,EACV,KAAKE,EAAML,GAEbK,GAGb,CAI0C,CAC5C,EAEA,gBAAeT,CAAO"}
1
+ {"version":3,"sources":["components/notification/queque.ts"],"sourcesContent":["import { createRoot, createSignal } from 'solid-js';\n\n/** Api\n * @since 2.7.0\n */\nexport interface NotificationProps {\n /** 通知类型 */\n type: keyof typeof NotificationType;\n /** 通知内容 */\n children: JSX.Element;\n /** 图标 */\n icon?: JSX.Element;\n /**\n * 是否显示关闭按钮\n * @default false\n */\n close?: boolean;\n /**\n * 显示通知时间, 到时自动关闭; 当 duration < 1 时不自动关闭\n * @default 3000\n */\n duration?: boolean;\n}\n\n/** 通知类型 */\nexport enum NotificationType {\n /** 详细 */\n info = 'info',\n /** 成功 */\n success = 'success',\n /** 错误 */\n error = 'error',\n /** 警告 */\n warning = 'warning',\n /** 主要 */\n primary = 'primary',\n}\n\ninterface NotificationQueQue extends NotificationProps {\n uniqueId: string;\n closeing?: boolean;\n}\nconst queque = createRoot(() => {\n const [list, setList] = createSignal<NotificationQueQue[]>([]);\n\n function add(item: NotificationQueQue) {\n setList((prev) => [...prev, item]);\n }\n function remove(uniqueId: string) {\n setList((prev) =>\n prev.map((q) => {\n if (q.uniqueId === uniqueId) {\n return { ...q, closeing: true };\n }\n return q;\n }),\n );\n const timer = setTimeout(() => {\n setList((prev) => prev.filter((q) => q.uniqueId !== uniqueId));\n clearTimeout(timer);\n }, 200);\n }\n function update(uniqueId: string, item: NotificationProps) {\n setList((prev) =>\n prev.map((q) => {\n if (q.uniqueId === uniqueId) {\n return { ...q, ...item };\n }\n return q;\n }),\n );\n }\n function clean() {\n setList([]);\n }\n return { list, add, remove, clean, update };\n});\n\nexport default queque;\n"],"names":["NotificationType","createRoot","createSignal","queque","list","setList","add","item","prev","remove","uniqueId","map","q","closeing","timer","setTimeout","filter","clearTimeout","clean","update"],"mappings":"IAyBYA,iNAzBZ,OAASC,cAAAA,CAAU,CAAEC,gBAAAA,CAAY,KAAQ,UAAW,8BAyBxCF,EAAAA,mBAAAA,8GAiBZ,IAAMG,EAASF,EAAW,KACxB,GAAM,CAACG,EAAMC,EAAQ,CAAGH,EAAmC,EAAE,EAgC7D,MAAO,CAAEE,KAAAA,EAAME,IA9Bf,SAAaC,CAAwB,EACnCF,EAAQ,AAACG,GAAS,IAAIA,EAAMD,EAAK,CACnC,EA4BoBE,OA3BpB,SAAgBC,CAAgB,EAC9BL,EAAQ,AAACG,GACPA,EAAKG,GAAG,CAAC,AAACC,GACR,AAAIA,EAAEF,QAAQ,GAAKA,EACV,KAAKE,GAAGC,SAAU,CAAA,IAEpBD,IAGX,IAAME,EAAQC,WAAW,KACvBV,EAAQ,AAACG,GAASA,EAAKQ,MAAM,CAAC,AAACJ,GAAMA,EAAEF,QAAQ,GAAKA,IACpDO,aAAaH,EACf,EAAG,IACL,EAc4BI,MAH5B,WACEb,EAAQ,EAAE,CACZ,EACmCc,OAbnC,SAAgBT,CAAgB,CAAEH,CAAuB,EACvDF,EAAQ,AAACG,GACPA,EAAKG,GAAG,CAAC,AAACC,GACR,AAAIA,EAAEF,QAAQ,GAAKA,EACV,KAAKE,EAAML,GAEbK,GAGb,CAI0C,CAC5C,EAEA,gBAAeT,CAAO"}
@@ -93,5 +93,4 @@ import{css as o}from"@moneko/css";export const styles=o`
93
93
  margin-block-start: -50px;
94
94
  }
95
95
  }
96
- `;
97
- //# sourceMappingURL=styles.js.map
96
+ `;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/notification/styles.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const styles = css`\n :host {\n display: flex;\n flex-direction: column;\n align-items: center;\n row-gap: 16px;\n pointer-events: none;\n }\n\n .notification {\n inline-size: fit-content;\n display: flex;\n align-items: center;\n border-radius: var(--border-radius);\n padding: 5px 16px;\n background-color: var(--modal-component-bg);\n opacity: var(--opacity);\n box-shadow: var(--notification-box-shadow);\n backdrop-filter: blur(10px);\n gap: 8px;\n pointer-events: all;\n animation: scale-in 0.2s forwards;\n\n &.closeing {\n animation: scale-out 0.2s forwards;\n }\n\n &.error {\n color: var(--error-color);\n background-color: var(--error-notify-bg);\n }\n\n &.success {\n color: var(--success-color);\n background-color: var(--success-notify-bg);\n }\n\n &.warning {\n color: var(--warning-color);\n background-color: var(--warning-notify-bg);\n }\n\n &.primary {\n color: var(--primary-color);\n background-color: var(--primary-notify-bg);\n }\n }\n\n .close {\n border-radius: 16px;\n font-size: 14px;\n text-align: center;\n opacity: 0.8;\n outline: 2px solid transparent;\n transition: transform var(--transition-duration);\n transform: translate3d(50%, 0, 1px);\n cursor: pointer;\n block-size: 14px;\n line-height: 1;\n inline-size: 14px;\n\n &::before {\n content: '⛌';\n }\n\n &:hover {\n opacity: 1;\n }\n }\n\n @keyframes scale-in {\n from {\n transform: translate3d(0, -100%, 1px);\n opacity: 0;\n }\n\n to {\n transform: translate3d(0, 0, 1px);\n opacity: 1;\n }\n }\n\n @keyframes scale-out {\n 0% {\n z-index: -1;\n opacity: 1;\n margin-block-start: 0;\n }\n\n 100% {\n z-index: -1;\n opacity: 0;\n margin-block-start: -50px;\n }\n }\n`;\n"],"names":["css","styles"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,OAASD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+F1B,CAAC,AAAC"}
1
+ {"version":3,"sources":["components/notification/styles.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const styles = css`\n :host {\n display: flex;\n flex-direction: column;\n align-items: center;\n row-gap: 16px;\n pointer-events: none;\n }\n\n .notification {\n inline-size: fit-content;\n display: flex;\n align-items: center;\n border-radius: var(--border-radius);\n padding: 5px 16px;\n background-color: var(--modal-component-bg);\n opacity: var(--opacity);\n box-shadow: var(--notification-box-shadow);\n backdrop-filter: blur(10px);\n gap: 8px;\n pointer-events: all;\n animation: scale-in 0.2s forwards;\n\n &.closeing {\n animation: scale-out 0.2s forwards;\n }\n\n &.error {\n color: var(--error-color);\n background-color: var(--error-notify-bg);\n }\n\n &.success {\n color: var(--success-color);\n background-color: var(--success-notify-bg);\n }\n\n &.warning {\n color: var(--warning-color);\n background-color: var(--warning-notify-bg);\n }\n\n &.primary {\n color: var(--primary-color);\n background-color: var(--primary-notify-bg);\n }\n }\n\n .close {\n border-radius: 16px;\n font-size: 14px;\n text-align: center;\n opacity: 0.8;\n outline: 2px solid transparent;\n transition: transform var(--transition-duration);\n transform: translate3d(50%, 0, 1px);\n cursor: pointer;\n block-size: 14px;\n line-height: 1;\n inline-size: 14px;\n\n &::before {\n content: '⛌';\n }\n\n &:hover {\n opacity: 1;\n }\n }\n\n @keyframes scale-in {\n from {\n transform: translate3d(0, -100%, 1px);\n opacity: 0;\n }\n\n to {\n transform: translate3d(0, 0, 1px);\n opacity: 1;\n }\n }\n\n @keyframes scale-out {\n 0% {\n z-index: -1;\n opacity: 1;\n margin-block-start: 0;\n }\n\n 100% {\n z-index: -1;\n opacity: 0;\n margin-block-start: -50px;\n }\n }\n`;\n"],"names":["css","styles"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,OAASD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+F1B,CAAC,AAAC"}
@@ -1,2 +1 @@
1
- import{template as t}from"solid-js/web";import{memo as e}from"solid-js/web";import{insert as i}from"solid-js/web";import{getOwner as o}from"solid-js/web";import{effect as l}from"solid-js/web";import{delegateEvents as n}from"solid-js/web";import{createComponent as r}from"solid-js/web";import{classList as s}from"solid-js/web";let a=t("<li>"),p=t(`<li><slot name="total-text"><n-typography>共 <!> 项`,!0,!1),m=t("<style> "),d=t("<style>"),v=t(`<nav aria-label="pagination" class="pagination"><ul><li><n-button class="pagination-item pagination-prev">〈</n-button></li><li><n-button class="pagination-item pagination-next">〉`,!0,!1),u=t('<li><n-button class="pagination-item">',!0,!1);import{batch as c,createEffect as f,createMemo as g,createSignal as h,For as $,mergeProps as _,Show as b,splitProps as C,untrack as w}from"solid-js";import x from"@moneko/common/lib/isFunction";import{css as y}from"@moneko/css";import{customElement as z}from"solid-element";import{clearAttribute as j}from"../basic-config";import S,{block as T}from"../theme";import{styles as k}from"./styles";import"../button";import"../typography";function M(t){let{baseStyle:n}=S,[_,z]=C(t,["page","pageSize","total","css","totalText"]),[j,T]=h(1),[M,E]=h(20),[q,F]=h(0);f(()=>{c(()=>{"number"==typeof _.page&&_.page!==w(j)&&T(_.page),"number"==typeof _.pageSize&&_.pageSize!==w(M)&&E(_.pageSize),"number"==typeof _.total&&_.total!==w(q)&&F(_.total)})});let L=g(()=>Math.ceil(q()/M())),O=g(()=>{let t=L(),e=[];if(t<=5)for(let i=1;i<=t;i++)e.push(i);else{let i=Math.min(t,Math.max(1,j()-Math.floor(2.5))+5-1);for(let t=i-5+1;t<=i;t++)e.push(t)}if(e.length){let i=e[e.length-1],o=e[0];o>=2&&(2===o?e.splice(0,1,"p"):e.unshift("p"),e.unshift(1),i<t&&(i+=1,e.push(i))),i===t-1?(e.splice(e.length-1,1,"n"),e.push(t)):i<t-1&&(e.push("n"),e.push(t))}return e});function A(t){let e=w(j),i="n"===t?e+5:"p"===t?e-5:t;i<1?i=1:i>w(L)&&(i=w(L)),e!==i&&(void 0===_.page&&T(i),null==z.onChange||z.onChange.call(z,i,w(M)))}let B=()=>{let t=g(()=>[(j()-1)*M()+1,j()*M()]);return r(b,{get when(){return!1!==_.totalText},get children(){let l=a();return i(l,(()=>{let l=e(()=>!!x(_.totalText));return()=>l()?_.totalText(q(),t()):(()=>{let t=p(),e=t.firstChild,l=e.firstChild,n=l.firstChild.nextSibling;return n.nextSibling,e._$owner=o(),l._$owner=o(),i(l,q,n),t})()})()),l}})};return r(b,{get when(){return O().length},get children(){return[(()=>{let t=m(),e=t.firstChild;return l(()=>e.data=n()),t})(),(()=>{let t=d();return t.textContent=k,t})(),r(b,{get when(){return _.css},get children(){let t=m(),e=t.firstChild;return l(()=>e.data=y(_.css)),t}}),(()=>{let t=v(),e=t.firstChild,n=e.firstChild,a=n.firstChild,p=n.nextSibling,m=p.firstChild;return i(e,r(B,{}),n),a.$$click=()=>{A(w(j)-1)},a.flat=!0,a.circle=!0,a._$owner=o(),i(e,r($,{get each(){return O()},children:t=>{let e=g(()=>t===j());return(()=>{let n=u(),r=n.firstChild;return r.$$click=()=>{A(t)},r.circle="number"!=typeof t,r._$owner=o(),i(r,t),l(i=>{let o={[`pagination-${t}`]:"number"!=typeof t},l=z.size,n=!e(),a=e()?"primary":"default",p=e(),m=e()&&"page";return i._v$5=s(r,o,i._v$5),l!==i._v$6&&(r.size=i._v$6=l),n!==i._v$7&&(r.flat=i._v$7=n),a!==i._v$8&&(r.type=i._v$8=a),p!==i._v$9&&(r.fill=i._v$9=p),m!==i._v$10&&(r.ariaCurrent=i._v$10=m),i},{_v$5:void 0,_v$6:void 0,_v$7:void 0,_v$8:void 0,_v$9:void 0,_v$10:void 0}),n})()}}),p),m.$$click=()=>{A(w(j)+1)},m.flat=!0,m.circle=!0,m._$owner=o(),l(t=>{let e=z.size,i=1===j(),o=z.size,l=j()===L();return e!==t._v$&&(a.size=t._v$=e),i!==t._v$2&&(a.disabled=t._v$2=i),o!==t._v$3&&(m.size=t._v$3=o),l!==t._v$4&&(m.disabled=t._v$4=l),t},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),t})()]}})}z("n-pagination",{class:void 0,css:void 0,page:void 0,pageSize:void 0,total:0,size:void 0,onChange:void 0,totalText:void 0},(t,e)=>{let i=e.element,o=_({css:i.css,onChange(t,e){i.dispatchEvent(new CustomEvent("change",{detail:[t,e]}))}},t,{totalText:!!i.querySelector("[slot='total-text']")||t.totalText});return f(()=>{j(i,["css"])}),[(()=>{let t=d();return t.textContent=T,t})(),r(M,o)]});export default M;n(["click"]);
2
- //# sourceMappingURL=index.js.map
1
+ import{template as t}from"solid-js/web";import{memo as e}from"solid-js/web";import{insert as i}from"solid-js/web";import{getOwner as o}from"solid-js/web";import{effect as l}from"solid-js/web";import{delegateEvents as n}from"solid-js/web";import{createComponent as r}from"solid-js/web";import{classList as s}from"solid-js/web";let a=t("<li>"),p=t(`<li><slot name="total-text"><n-typography>共 <!> 项`,!0,!1),m=t("<style> "),d=t("<style>"),v=t(`<nav aria-label="pagination" class="pagination"><ul><li><n-button class="pagination-item pagination-prev">〈</n-button></li><li><n-button class="pagination-item pagination-next">〉`,!0,!1),u=t('<li><n-button class="pagination-item">',!0,!1);import{batch as c,createEffect as f,createMemo as g,createSignal as h,For as $,mergeProps as _,Show as b,splitProps as C,untrack as w}from"solid-js";import x from"@moneko/common/lib/isFunction";import{css as y}from"@moneko/css";import{customElement as z}from"solid-element";import{clearAttribute as j}from"../basic-config";import S,{block as T}from"../theme";import{styles as k}from"./styles";import"../button";import"../typography";function M(t){let{baseStyle:n}=S,[_,z]=C(t,["page","pageSize","total","css","totalText"]),[j,T]=h(1),[M,E]=h(20),[q,F]=h(0);f(()=>{c(()=>{"number"==typeof _.page&&_.page!==w(j)&&T(_.page),"number"==typeof _.pageSize&&_.pageSize!==w(M)&&E(_.pageSize),"number"==typeof _.total&&_.total!==w(q)&&F(_.total)})});let L=g(()=>Math.ceil(q()/M())),O=g(()=>{let t=L(),e=[];if(t<=5)for(let i=1;i<=t;i++)e.push(i);else{let i=Math.min(t,Math.max(1,j()-Math.floor(2.5))+5-1);for(let t=i-5+1;t<=i;t++)e.push(t)}if(e.length){let i=e[e.length-1],o=e[0];o>=2&&(2===o?e.splice(0,1,"p"):e.unshift("p"),e.unshift(1),i<t&&(i+=1,e.push(i))),i===t-1?(e.splice(e.length-1,1,"n"),e.push(t)):i<t-1&&(e.push("n"),e.push(t))}return e});function A(t){let e=w(j),i="n"===t?e+5:"p"===t?e-5:t;i<1?i=1:i>w(L)&&(i=w(L)),e!==i&&(void 0===_.page&&T(i),null==z.onChange||z.onChange.call(z,i,w(M)))}let B=()=>{let t=g(()=>[(j()-1)*M()+1,j()*M()]);return r(b,{get when(){return!1!==_.totalText},get children(){let l=a();return i(l,(()=>{let l=e(()=>!!x(_.totalText));return()=>l()?_.totalText(q(),t()):(()=>{let t=p(),e=t.firstChild,l=e.firstChild,n=l.firstChild.nextSibling;return n.nextSibling,e._$owner=o(),l._$owner=o(),i(l,q,n),t})()})()),l}})};return r(b,{get when(){return O().length},get children(){return[(()=>{let t=m(),e=t.firstChild;return l(()=>e.data=n()),t})(),(()=>{let t=d();return t.textContent=k,t})(),r(b,{get when(){return _.css},get children(){let t=m(),e=t.firstChild;return l(()=>e.data=y(_.css)),t}}),(()=>{let t=v(),e=t.firstChild,n=e.firstChild,a=n.firstChild,p=n.nextSibling,m=p.firstChild;return i(e,r(B,{}),n),a.$$click=()=>{A(w(j)-1)},a.flat=!0,a.circle=!0,a._$owner=o(),i(e,r($,{get each(){return O()},children:t=>{let e=g(()=>t===j());return(()=>{let n=u(),r=n.firstChild;return r.$$click=()=>{A(t)},r.circle="number"!=typeof t,r._$owner=o(),i(r,t),l(i=>{let o={[`pagination-${t}`]:"number"!=typeof t},l=z.size,n=!e(),a=e()?"primary":"default",p=e(),m=e()&&"page";return i._v$5=s(r,o,i._v$5),l!==i._v$6&&(r.size=i._v$6=l),n!==i._v$7&&(r.flat=i._v$7=n),a!==i._v$8&&(r.type=i._v$8=a),p!==i._v$9&&(r.fill=i._v$9=p),m!==i._v$10&&(r.ariaCurrent=i._v$10=m),i},{_v$5:void 0,_v$6:void 0,_v$7:void 0,_v$8:void 0,_v$9:void 0,_v$10:void 0}),n})()}}),p),m.$$click=()=>{A(w(j)+1)},m.flat=!0,m.circle=!0,m._$owner=o(),l(t=>{let e=z.size,i=1===j(),o=z.size,l=j()===L();return e!==t._v$&&(a.size=t._v$=e),i!==t._v$2&&(a.disabled=t._v$2=i),o!==t._v$3&&(m.size=t._v$3=o),l!==t._v$4&&(m.disabled=t._v$4=l),t},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),t})()]}})}z("n-pagination",{class:void 0,css:void 0,page:void 0,pageSize:void 0,total:0,size:void 0,onChange:void 0,totalText:void 0},(t,e)=>{let i=e.element,o=_({css:i.css,onChange(t,e){i.dispatchEvent(new CustomEvent("change",{detail:[t,e]}))}},t,{totalText:!!i.querySelector("[slot='total-text']")||t.totalText});return f(()=>{j(i,["css"])}),[(()=>{let t=d();return t.textContent=T,t})(),r(M,o)]});export default M;n(["click"]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/pagination/index.tsx"],"sourcesContent":["import {\n batch,\n createEffect,\n createMemo,\n createSignal,\n For,\n mergeProps,\n Show,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BasicConfig, CustomElement } from '..';\nimport { clearAttribute } from '../basic-config';\nimport theme, { block } from '../theme';\n\nimport { styles } from './styles';\n\nimport '../button';\nimport '../typography';\n\nfunction Pagination(_: PaginationProps) {\n const { baseStyle } = theme;\n const maxCount = 5;\n const [local, other] = splitProps(_, ['page', 'pageSize', 'total', 'css', 'totalText']);\n const [page, setPage] = createSignal(1);\n const [pageSize, setPageSize] = createSignal(20);\n const [total, setTotal] = createSignal(0);\n\n createEffect(() => {\n batch(() => {\n if (typeof local.page === 'number' && local.page !== untrack(page)) {\n setPage(local.page);\n }\n if (typeof local.pageSize === 'number' && local.pageSize !== untrack(pageSize)) {\n setPageSize(local.pageSize);\n }\n if (typeof local.total === 'number' && local.total !== untrack(total)) {\n setTotal(local.total);\n }\n });\n });\n const totalPages = createMemo(() => Math.ceil(total() / pageSize()));\n const pages = createMemo(() => {\n const totals = totalPages();\n const arr: (number | 'p' | 'n')[] = [];\n\n if (totals <= maxCount) {\n for (let i = 1; i <= totals; i++) {\n arr.push(i);\n }\n } else {\n const right = Math.min(totals, Math.max(1, page() - Math.floor(maxCount / 2)) + maxCount - 1);\n\n for (let i = right - maxCount + 1; i <= right; i++) {\n arr.push(i);\n }\n }\n\n if (arr.length) {\n let last = arr[arr.length - 1] as number;\n const fast = arr[0] as number;\n\n if (fast >= 2) {\n if (fast === 2) {\n arr.splice(0, 1, 'p');\n } else {\n arr.unshift('p');\n }\n arr.unshift(1);\n if (last < totals) {\n last += 1;\n arr.push(last);\n }\n }\n if (last === totals - 1) {\n arr.splice(arr.length - 1, 1, 'n');\n arr.push(totals);\n } else if (last < totals - 1) {\n arr.push('n');\n arr.push(totals);\n }\n }\n return arr;\n });\n\n function changePage(curr: number | 'p' | 'n') {\n const p = untrack(page);\n let next = curr === 'n' ? p + maxCount : curr === 'p' ? p - maxCount : curr;\n\n if (next < 1) {\n next = 1;\n } else if (next > untrack(totalPages)) {\n next = untrack(totalPages);\n }\n if (p !== next) {\n if (local.page === void 0) {\n setPage(next);\n }\n other.onChange?.(next, untrack(pageSize));\n }\n }\n const TotalText = () => {\n const ranges = createMemo(() => [(page() - 1) * pageSize() + 1, page() * pageSize()]);\n\n return (\n <Show when={local.totalText !== false}>\n <li>\n {isFunction(local.totalText) ? (\n local.totalText(total(), ranges())\n ) : (\n <li>\n <slot name=\"total-text\">\n <n-typography>共 {total()} 项</n-typography>\n </slot>\n </li>\n )}\n </li>\n </Show>\n );\n };\n\n return (\n <Show when={pages().length}>\n <style textContent={baseStyle()} />\n <style textContent={styles} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <nav aria-label=\"pagination\" class=\"pagination\">\n <ul>\n <TotalText />\n <li>\n <n-button\n class=\"pagination-item pagination-prev\"\n size={other.size}\n flat={true}\n circle={true}\n disabled={page() === 1}\n onClick={() => {\n changePage(untrack(page) - 1);\n }}\n >\n 〈\n </n-button>\n </li>\n <For each={pages()}>\n {(curr) => {\n const isCurrent = createMemo(() => curr === page());\n\n return (\n <li>\n <n-button\n class=\"pagination-item\"\n classList={{\n [`pagination-${curr}`]: typeof curr !== 'number',\n }}\n size={other.size}\n flat={!isCurrent()}\n circle={typeof curr !== 'number'}\n type={isCurrent() ? 'primary' : 'default'}\n fill={isCurrent()}\n aria-current={isCurrent() && 'page'}\n onClick={() => {\n changePage(curr);\n }}\n >\n {curr}\n </n-button>\n </li>\n );\n }}\n </For>\n <li>\n <n-button\n class=\"pagination-item pagination-next\"\n size={other.size}\n flat={true}\n circle={true}\n disabled={page() === totalPages()}\n onClick={() => {\n changePage(untrack(page) + 1);\n }}\n >\n 〉\n </n-button>\n </li>\n </ul>\n </nav>\n </Show>\n );\n}\n\n/** API */\nexport interface PaginationProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 当前页数\n * @default 1\n */\n page?: number;\n /** 每页显示的数据条目数量\n * @default 20\n */\n pageSize?: number;\n /** 总数\n * @default 0\n */\n total?: number;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n /** 用于显示数据总量和当前数据顺序;\n * 支持直接赋值给 'totalText' 属性\n * 或者通过[slot=\"total-text\"]插槽\n * @default true\n */\n totalText?: ((total: number, range: [start: number, end: number]) => JSX.Element) | false;\n /** 值修改时的回调方法 */\n onChange?(page: number, pageSize: number): void;\n children?: JSX.Element;\n}\nexport type PaginationElement = CustomElement<PaginationProps>;\n\ncustomElement<PaginationProps>(\n 'n-pagination',\n {\n class: void 0,\n css: void 0,\n page: void 0,\n pageSize: void 0,\n total: 0,\n size: void 0,\n onChange: void 0,\n totalText: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n onChange(page: number, pageSize: number) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [page, pageSize],\n }),\n );\n },\n },\n _,\n {\n totalText: (!!el.querySelector(\"[slot='total-text']\") as false) || _.totalText,\n },\n );\n\n createEffect(() => {\n clearAttribute(el, ['css']);\n });\n return (\n <>\n <style textContent={block} />\n <Pagination {...props} />\n </>\n );\n },\n);\nexport default Pagination;\n"],"names":["batch","createEffect","createMemo","createSignal","For","mergeProps","Show","splitProps","untrack","isFunction","css","customElement","clearAttribute","theme","block","styles","Pagination","_","baseStyle","local","other","page","setPage","pageSize","setPageSize","total","setTotal","totalPages","Math","ceil","pages","totals","arr","i","push","right","min","max","floor","maxCount","length","last","fast","splice","unshift","changePage","curr","p","next","onChange","TotalText","ranges","totalText","isCurrent","size","class","opt","el","element","props","dispatchEvent","CustomEvent","detail","querySelector"],"mappings":"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"}
1
+ {"version":3,"sources":["components/pagination/index.tsx"],"sourcesContent":["import {\n batch,\n createEffect,\n createMemo,\n createSignal,\n For,\n mergeProps,\n Show,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BasicConfig, CustomElement } from '..';\nimport { clearAttribute } from '../basic-config';\nimport theme, { block } from '../theme';\n\nimport { styles } from './styles';\n\nimport '../button';\nimport '../typography';\n\nfunction Pagination(_: PaginationProps) {\n const { baseStyle } = theme;\n const maxCount = 5;\n const [local, other] = splitProps(_, ['page', 'pageSize', 'total', 'css', 'totalText']);\n const [page, setPage] = createSignal(1);\n const [pageSize, setPageSize] = createSignal(20);\n const [total, setTotal] = createSignal(0);\n\n createEffect(() => {\n batch(() => {\n if (typeof local.page === 'number' && local.page !== untrack(page)) {\n setPage(local.page);\n }\n if (typeof local.pageSize === 'number' && local.pageSize !== untrack(pageSize)) {\n setPageSize(local.pageSize);\n }\n if (typeof local.total === 'number' && local.total !== untrack(total)) {\n setTotal(local.total);\n }\n });\n });\n const totalPages = createMemo(() => Math.ceil(total() / pageSize()));\n const pages = createMemo(() => {\n const totals = totalPages();\n const arr: (number | 'p' | 'n')[] = [];\n\n if (totals <= maxCount) {\n for (let i = 1; i <= totals; i++) {\n arr.push(i);\n }\n } else {\n const right = Math.min(totals, Math.max(1, page() - Math.floor(maxCount / 2)) + maxCount - 1);\n\n for (let i = right - maxCount + 1; i <= right; i++) {\n arr.push(i);\n }\n }\n\n if (arr.length) {\n let last = arr[arr.length - 1] as number;\n const fast = arr[0] as number;\n\n if (fast >= 2) {\n if (fast === 2) {\n arr.splice(0, 1, 'p');\n } else {\n arr.unshift('p');\n }\n arr.unshift(1);\n if (last < totals) {\n last += 1;\n arr.push(last);\n }\n }\n if (last === totals - 1) {\n arr.splice(arr.length - 1, 1, 'n');\n arr.push(totals);\n } else if (last < totals - 1) {\n arr.push('n');\n arr.push(totals);\n }\n }\n return arr;\n });\n\n function changePage(curr: number | 'p' | 'n') {\n const p = untrack(page);\n let next = curr === 'n' ? p + maxCount : curr === 'p' ? p - maxCount : curr;\n\n if (next < 1) {\n next = 1;\n } else if (next > untrack(totalPages)) {\n next = untrack(totalPages);\n }\n if (p !== next) {\n if (local.page === void 0) {\n setPage(next);\n }\n other.onChange?.(next, untrack(pageSize));\n }\n }\n const TotalText = () => {\n const ranges = createMemo(() => [(page() - 1) * pageSize() + 1, page() * pageSize()]);\n\n return (\n <Show when={local.totalText !== false}>\n <li>\n {isFunction(local.totalText) ? (\n local.totalText(total(), ranges())\n ) : (\n <li>\n <slot name=\"total-text\">\n <n-typography>共 {total()} 项</n-typography>\n </slot>\n </li>\n )}\n </li>\n </Show>\n );\n };\n\n return (\n <Show when={pages().length}>\n <style textContent={baseStyle()} />\n <style textContent={styles} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <nav aria-label=\"pagination\" class=\"pagination\">\n <ul>\n <TotalText />\n <li>\n <n-button\n class=\"pagination-item pagination-prev\"\n size={other.size}\n flat={true}\n circle={true}\n disabled={page() === 1}\n onClick={() => {\n changePage(untrack(page) - 1);\n }}\n >\n 〈\n </n-button>\n </li>\n <For each={pages()}>\n {(curr) => {\n const isCurrent = createMemo(() => curr === page());\n\n return (\n <li>\n <n-button\n class=\"pagination-item\"\n classList={{\n [`pagination-${curr}`]: typeof curr !== 'number',\n }}\n size={other.size}\n flat={!isCurrent()}\n circle={typeof curr !== 'number'}\n type={isCurrent() ? 'primary' : 'default'}\n fill={isCurrent()}\n aria-current={isCurrent() && 'page'}\n onClick={() => {\n changePage(curr);\n }}\n >\n {curr}\n </n-button>\n </li>\n );\n }}\n </For>\n <li>\n <n-button\n class=\"pagination-item pagination-next\"\n size={other.size}\n flat={true}\n circle={true}\n disabled={page() === totalPages()}\n onClick={() => {\n changePage(untrack(page) + 1);\n }}\n >\n 〉\n </n-button>\n </li>\n </ul>\n </nav>\n </Show>\n );\n}\n\n/** API */\nexport interface PaginationProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 当前页数\n * @default 1\n */\n page?: number;\n /** 每页显示的数据条目数量\n * @default 20\n */\n pageSize?: number;\n /** 总数\n * @default 0\n */\n total?: number;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n /** 用于显示数据总量和当前数据顺序;\n * 支持直接赋值给 'totalText' 属性\n * 或者通过[slot=\"total-text\"]插槽\n * @default true\n */\n totalText?: ((total: number, range: [start: number, end: number]) => JSX.Element) | false;\n /** 值修改时的回调方法 */\n onChange?(page: number, pageSize: number): void;\n children?: JSX.Element;\n}\nexport type PaginationElement = CustomElement<PaginationProps>;\n\ncustomElement<PaginationProps>(\n 'n-pagination',\n {\n class: void 0,\n css: void 0,\n page: void 0,\n pageSize: void 0,\n total: 0,\n size: void 0,\n onChange: void 0,\n totalText: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n onChange(page: number, pageSize: number) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [page, pageSize],\n }),\n );\n },\n },\n _,\n {\n totalText: (!!el.querySelector(\"[slot='total-text']\") as false) || _.totalText,\n },\n );\n\n createEffect(() => {\n clearAttribute(el, ['css']);\n });\n return (\n <>\n <style textContent={block} />\n <Pagination {...props} />\n </>\n );\n },\n);\nexport default Pagination;\n"],"names":["batch","createEffect","createMemo","createSignal","For","mergeProps","Show","splitProps","untrack","isFunction","css","customElement","clearAttribute","theme","block","styles","Pagination","_","baseStyle","local","other","page","setPage","pageSize","setPageSize","total","setTotal","totalPages","Math","ceil","pages","totals","arr","i","push","right","min","max","floor","maxCount","length","last","fast","splice","unshift","changePage","curr","p","next","onChange","TotalText","ranges","totalText","isCurrent","size","class","opt","el","element","props","dispatchEvent","CustomEvent","detail","querySelector"],"mappings":"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"}
@@ -77,5 +77,4 @@ import{css as t}from"@moneko/css";export const styles=t`
77
77
  }
78
78
  }
79
79
  }
80
- `;
81
- //# sourceMappingURL=styles.js.map
80
+ `;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/pagination/styles.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const styles = css`\n .pagination {\n ul {\n display: inline-flex;\n align-items: center;\n margin: 0;\n padding: 0;\n list-style: none;\n gap: 4px;\n }\n }\n\n .pagination-item::part(button) {\n padding: 0 6px;\n }\n\n .pagination-prev {\n &::part(label) {\n transform: translateX(-25%);\n }\n }\n\n .pagination-next {\n &::part(label) {\n transform: translateX(25%);\n }\n }\n\n .pagination-p,\n .pagination-n {\n &::part(button) {\n position: relative;\n\n &::after {\n position: absolute;\n display: inline-block;\n margin: auto;\n font-size: inherit;\n font-weight: bold;\n opacity: 0.5;\n inline-size: fit-content;\n block-size: fit-content;\n line-height: inherit;\n inset-block: 0;\n inset-inline: 0;\n content: '⋯';\n pointer-events: none;\n }\n }\n\n &::part(label) {\n opacity: 0;\n }\n\n &:hover::part(button)::after {\n content: var(--content);\n font-weight: inherit;\n }\n }\n\n .pagination-p {\n --content: '《';\n\n &:hover {\n &::part(button)::after {\n transform: translateX(-25%);\n }\n }\n }\n\n .pagination-n {\n --content: '》';\n\n &:hover {\n &::part(button)::after {\n transform: translateX(25%);\n }\n }\n }\n`;\n"],"names":["css","styles"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,OAASD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+E1B,CAAC,AAAC"}
1
+ {"version":3,"sources":["components/pagination/styles.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const styles = css`\n .pagination {\n ul {\n display: inline-flex;\n align-items: center;\n margin: 0;\n padding: 0;\n list-style: none;\n gap: 4px;\n }\n }\n\n .pagination-item::part(button) {\n padding: 0 6px;\n }\n\n .pagination-prev {\n &::part(label) {\n transform: translateX(-25%);\n }\n }\n\n .pagination-next {\n &::part(label) {\n transform: translateX(25%);\n }\n }\n\n .pagination-p,\n .pagination-n {\n &::part(button) {\n position: relative;\n\n &::after {\n position: absolute;\n display: inline-block;\n margin: auto;\n font-size: inherit;\n font-weight: bold;\n opacity: 0.5;\n inline-size: fit-content;\n block-size: fit-content;\n line-height: inherit;\n inset-block: 0;\n inset-inline: 0;\n content: '⋯';\n pointer-events: none;\n }\n }\n\n &::part(label) {\n opacity: 0;\n }\n\n &:hover::part(button)::after {\n content: var(--content);\n font-weight: inherit;\n }\n }\n\n .pagination-p {\n --content: '《';\n\n &:hover {\n &::part(button)::after {\n transform: translateX(-25%);\n }\n }\n }\n\n .pagination-n {\n --content: '》';\n\n &:hover {\n &::part(button)::after {\n transform: translateX(25%);\n }\n }\n }\n`;\n"],"names":["css","styles"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,OAASD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+E1B,CAAC,AAAC"}
@@ -1,2 +1 @@
1
- var t,e;function o(){return(o=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])}return t}).apply(this,arguments)}import{use as n}from"solid-js/web";import{template as r}from"solid-js/web";import{spread as i}from"solid-js/web";import{mergeProps as l}from"solid-js/web";import"solid-js/web";import{insert as s}from"solid-js/web";import{effect as p}from"solid-js/web";import{createComponent as a}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let c=r("<style>"),u=r("<style> "),m=r("<span>"),g=r("<div>");import{createEffect as f,createMemo as h,createSignal as v,mergeProps as w,onCleanup as b,onMount as C,Show as x,splitProps as y}from"solid-js";import{Portal as j}from"solid-js/web";import M from"@moneko/common/lib/isElementInside";import k from"@moneko/common/lib/isEqual";import L from"@moneko/common/lib/isFunction";import O from"@moneko/common/lib/passiveSupported";import{css as E,cx as P}from"@moneko/css";import{customElement as T}from"solid-element";import{clearAttribute as R}from"../basic-config";import $ from"../empty";import W,{inline as S}from"../theme";import{popoverCss as z,portalCss as H}from"./style";export var TriggerOption;(t=TriggerOption||(TriggerOption={})).hover="hover",t.click="click",t.contextMenu="contextMenu",t.none="none";export var Placement;function I(t){let e,r,T,R;let{isDark:S,baseStyle:I}=W,[B]=y(w({trigger:"hover"},t),["class","css","popupClass","popupCss","size","trigger","open","disabled","onOpenChange","dropdownMatchSelectWidth","destroyInactive","arrow","placement","getPopupContainer","children","content"]),[D,q]=v(null),[A,F]=v({}),[N,X]=v(!1),[Y,G]=v("");function J(t){B.disabled||(B.onOpenChange&&B.onOpenChange(t),void 0===B.open&&q(t))}function K(){!1===D()&&(q(null),J(null))}function Q(t){clearTimeout(T),T=setTimeout(()=>{if(clearTimeout(T),t.target&&"false"===t.target.getAttribute("handle-closed"))return;let o=M(t.target,e);(D()&&!o||o&&"mousedown"!==t.type)&&J(!1)},"hover"===B.trigger?300:0)}f(()=>{void 0!==B.open&&q(B.open)}),f(()=>{D()&&B.dropdownMatchSelectWidth&&r&&G(`.portal {width: ${r.offsetWidth}px;}`)});let U=function(t){clearTimeout(R),R=setTimeout(()=>{if(clearTimeout(R),!e||!r||!t&&"contextMenu"===B.trigger)return;if((null==t?void 0:t.type)==="scroll"&&"contextMenu"===B.trigger){J(!1);return}let o=r.getBoundingClientRect(),n=e.getBoundingClientRect(),i=n.width/2-o.width/2,l=window.innerHeight-o.bottom,s=B.placement,p=!(null==s?void 0:s.startsWith("top"))&&l>.8*e.offsetHeight&&l>o.top||(null==s?void 0:s.startsWith("bottom")),a=B.arrow?8:4,d={};switch(B.placement){case"bottomLeft":case"left":case"topLeft":d.left=o.left,d["--x"]=-n.width/2+16;break;case"bottomRight":case"right":case"topRight":d.left=o.right-n.width,d["--x"]=n.width/2-16;break;default:d.left=Math.abs(i>o.left?o.left:o.left-i),d["--x"]=-(d.left-o.left+i)}p?d.top=o.bottom+a:d.bottom=window.innerHeight-o.top+a,F(t=>k(t,d)?t:d),X(t=>!p===t?t:!p)},32)};function V(t){clearTimeout(T),t.stopPropagation(),"contextMenu"===B.trigger&&"contextmenu"===t.type&&(t.preventDefault(),F(n=>o({},n,{left:t.clientX,top:t.clientY,"--x":-((null==e?void 0:e.getBoundingClientRect().width)||0)/2+16}))),J(!0)}let Z=h(()=>L(B.getPopupContainer)?B.getPopupContainer(r):document.body),_=h(()=>{let t={},e={click:"onMouseDown",hover:"onMouseEnter",contextMenu:"onContextMenu",none:void 0}[B.trigger],o={hover:"onMouseLeave",click:void 0,contextMenu:void 0,none:void 0}[B.trigger];return Object.assign(t,e&&{[e]:V},o&&{[o]:Q}),t}),tt=h(()=>{let t=A();return`.portal {${Object.keys(t).map(e=>`${e}:${t[e]}px;`).join("")}z-index: 1;}`}),te=h(()=>P("portal",B.arrow&&"arrow",`${D()?"in":"out"}-${N()?"up":"down"}`,B.size,B.popupClass)),to=h(()=>`:host {--popover-bg: ${S()?"#1f1f1f":"var(--component-bg)"};--popover-shadow-color: rgb(0 0 0 / 5%);}`);return f(()=>{D()&&(U(),window.addEventListener("scroll",U,{passive:O})),b(()=>{window.removeEventListener("scroll",U,!1)})}),C(()=>{"none"!==B.trigger&&document.documentElement.addEventListener("mousedown",Q,!1)}),b(()=>{clearTimeout(T),document.documentElement.removeEventListener("mousedown",Q,!1)}),[(()=>{let t=c();return t.textContent=z,t})(),a(x,{get when(){return B.css},get children(){let t=u(),e=t.firstChild;return p(()=>e.data=E(B.css)),t}}),(()=>{let t=m(),e=r;return"function"==typeof e?n(e,t):r=t,i(t,l({get class(){return P("popover",B.size,B.class)}},_),!1,!0),s(t,()=>B.children),t})(),a(x,{get when(){return null!==D()||!B.destroyInactive},get children(){return a(j,{useShadow:!0,get mount(){return Z()},get children(){return[(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=I()),t})(),(()=>{let t=c();return t.textContent=H,t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=to()),t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=tt()),t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=Y()),t})(),a(x,{get when(){return B.popupCss},get children(){let t=u(),e=t.firstChild;return p(()=>e.data=E(B.popupCss)),t}}),(()=>{let t=g(),o=e;return d(t,"animationend",K),"function"==typeof o?n(o,t):e=t,i(t,l({get class(){return te()}},_),!1,!0),s(t,a(x,{get when(){return B.content},get fallback(){return a($,{})},get children(){return a(x,{get when(){return"string"==typeof B.content},get fallback(){return B.content},get children(){let t=g();return p(()=>t.innerHTML=B.content),t}})}})),t})()]}})}})]}(e=Placement||(Placement={})).bottomLeft="bottomLeft",e.bottom="bottom",e.bottomRight="bottomRight",e.topLeft="topLeft",e.top="top",e.topRight="topRight",e.left="left",e.right="right";export const defaultProps={class:void 0,css:void 0,content:void 0,getPopupContainer:void 0,trigger:void 0,open:void 0,onOpenChange:void 0,popupClass:void 0,popupCss:void 0,destroyInactive:!0,disabled:void 0,arrow:void 0,placement:void 0,dropdownMatchSelectWidth:void 0};T("n-popover",defaultProps,(t,e)=>{let{baseStyle:o}=W,n=e.element,r=w({onOpenChange(t){n.dispatchEvent(new CustomEvent("openchange",{detail:t}))},children:[...n.childNodes.values()]},t);return f(()=>{R(n,["content","popupCss","css"])}),[(()=>{let t=c();return t.textContent=S,t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=o()),t})(),a(I,r)]});export default I;
2
- //# sourceMappingURL=index.js.map
1
+ var t,e;function o(){return(o=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])}return t}).apply(this,arguments)}import{use as n}from"solid-js/web";import{template as r}from"solid-js/web";import{spread as i}from"solid-js/web";import{mergeProps as l}from"solid-js/web";import"solid-js/web";import{insert as s}from"solid-js/web";import{effect as p}from"solid-js/web";import{createComponent as a}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let c=r("<style>"),u=r("<style> "),m=r("<span>"),g=r("<div>");import{createEffect as f,createMemo as h,createSignal as v,mergeProps as w,onCleanup as b,onMount as C,Show as x,splitProps as y}from"solid-js";import{Portal as j}from"solid-js/web";import M from"@moneko/common/lib/isElementInside";import k from"@moneko/common/lib/isEqual";import L from"@moneko/common/lib/isFunction";import O from"@moneko/common/lib/passiveSupported";import{css as E,cx as P}from"@moneko/css";import{customElement as T}from"solid-element";import{clearAttribute as R}from"../basic-config";import $ from"../empty";import W,{inline as S}from"../theme";import{popoverCss as z,portalCss as H}from"./style";export var TriggerOption;(t=TriggerOption||(TriggerOption={})).hover="hover",t.click="click",t.contextMenu="contextMenu",t.none="none";export var Placement;function I(t){let e,r,T,R;let{isDark:S,baseStyle:I}=W,[B]=y(w({trigger:"hover"},t),["class","css","popupClass","popupCss","size","trigger","open","disabled","onOpenChange","dropdownMatchSelectWidth","destroyInactive","arrow","placement","getPopupContainer","children","content"]),[D,q]=v(null),[A,F]=v({}),[N,X]=v(!1),[Y,G]=v("");function J(t){B.disabled||(B.onOpenChange&&B.onOpenChange(t),void 0===B.open&&q(t))}function K(){!1===D()&&(q(null),J(null))}function Q(t){clearTimeout(T),T=setTimeout(()=>{if(clearTimeout(T),t.target&&"false"===t.target.getAttribute("handle-closed"))return;let o=M(t.target,e);(D()&&!o||o&&"mousedown"!==t.type)&&J(!1)},"hover"===B.trigger?300:0)}f(()=>{void 0!==B.open&&q(B.open)}),f(()=>{D()&&B.dropdownMatchSelectWidth&&r&&G(`.portal {width: ${r.offsetWidth}px;}`)});let U=function(t){clearTimeout(R),R=setTimeout(()=>{if(clearTimeout(R),!e||!r||!t&&"contextMenu"===B.trigger)return;if((null==t?void 0:t.type)==="scroll"&&"contextMenu"===B.trigger){J(!1);return}let o=r.getBoundingClientRect(),n=e.getBoundingClientRect(),i=n.width/2-o.width/2,l=window.innerHeight-o.bottom,s=B.placement,p=!(null==s?void 0:s.startsWith("top"))&&l>.8*e.offsetHeight&&l>o.top||(null==s?void 0:s.startsWith("bottom")),a=B.arrow?8:4,d={};switch(B.placement){case"bottomLeft":case"left":case"topLeft":d.left=o.left,d["--x"]=-n.width/2+16;break;case"bottomRight":case"right":case"topRight":d.left=o.right-n.width,d["--x"]=n.width/2-16;break;default:d.left=Math.abs(i>o.left?o.left:o.left-i),d["--x"]=-(d.left-o.left+i)}p?d.top=o.bottom+a:d.bottom=window.innerHeight-o.top+a,F(t=>k(t,d)?t:d),X(t=>!p===t?t:!p)},32)};function V(t){clearTimeout(T),t.stopPropagation(),"contextMenu"===B.trigger&&"contextmenu"===t.type&&(t.preventDefault(),F(n=>o({},n,{left:t.clientX,top:t.clientY,"--x":-((null==e?void 0:e.getBoundingClientRect().width)||0)/2+16}))),J(!0)}let Z=h(()=>L(B.getPopupContainer)?B.getPopupContainer(r):document.body),_=h(()=>{let t={},e={click:"onMouseDown",hover:"onMouseEnter",contextMenu:"onContextMenu",none:void 0}[B.trigger],o={hover:"onMouseLeave",click:void 0,contextMenu:void 0,none:void 0}[B.trigger];return Object.assign(t,e&&{[e]:V},o&&{[o]:Q}),t}),tt=h(()=>{let t=A();return`.portal {${Object.keys(t).map(e=>`${e}:${t[e]}px;`).join("")}z-index: 1;}`}),te=h(()=>P("portal",B.arrow&&"arrow",`${D()?"in":"out"}-${N()?"up":"down"}`,B.size,B.popupClass)),to=h(()=>`:host {--popover-bg: ${S()?"#1f1f1f":"var(--component-bg)"};--popover-shadow-color: rgb(0 0 0 / 5%);}`);return f(()=>{D()&&(U(),window.addEventListener("scroll",U,{passive:O})),b(()=>{window.removeEventListener("scroll",U,!1)})}),C(()=>{"none"!==B.trigger&&document.documentElement.addEventListener("mousedown",Q,!1)}),b(()=>{clearTimeout(T),document.documentElement.removeEventListener("mousedown",Q,!1)}),[(()=>{let t=c();return t.textContent=z,t})(),a(x,{get when(){return B.css},get children(){let t=u(),e=t.firstChild;return p(()=>e.data=E(B.css)),t}}),(()=>{let t=m(),e=r;return"function"==typeof e?n(e,t):r=t,i(t,l({get class(){return P("popover",B.size,B.class)}},_),!1,!0),s(t,()=>B.children),t})(),a(x,{get when(){return null!==D()||!B.destroyInactive},get children(){return a(j,{useShadow:!0,get mount(){return Z()},get children(){return[(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=I()),t})(),(()=>{let t=c();return t.textContent=H,t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=to()),t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=tt()),t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=Y()),t})(),a(x,{get when(){return B.popupCss},get children(){let t=u(),e=t.firstChild;return p(()=>e.data=E(B.popupCss)),t}}),(()=>{let t=g(),o=e;return d(t,"animationend",K),"function"==typeof o?n(o,t):e=t,i(t,l({get class(){return te()}},_),!1,!0),s(t,a(x,{get when(){return B.content},get fallback(){return a($,{})},get children(){return a(x,{get when(){return"string"==typeof B.content},get fallback(){return B.content},get children(){let t=g();return p(()=>t.innerHTML=B.content),t}})}})),t})()]}})}})]}(e=Placement||(Placement={})).bottomLeft="bottomLeft",e.bottom="bottom",e.bottomRight="bottomRight",e.topLeft="topLeft",e.top="top",e.topRight="topRight",e.left="left",e.right="right";export const defaultProps={class:void 0,css:void 0,content:void 0,getPopupContainer:void 0,trigger:void 0,open:void 0,onOpenChange:void 0,popupClass:void 0,popupCss:void 0,destroyInactive:!0,disabled:void 0,arrow:void 0,placement:void 0,dropdownMatchSelectWidth:void 0};T("n-popover",defaultProps,(t,e)=>{let{baseStyle:o}=W,n=e.element,r=w({onOpenChange(t){n.dispatchEvent(new CustomEvent("openchange",{detail:t}))},children:[...n.childNodes.values()]},t);return f(()=>{R(n,["content","popupCss","css"])}),[(()=>{let t=c();return t.textContent=S,t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=o()),t})(),a(I,r)]});export default I;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/popover/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n splitProps,\n} from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { isElementInside, isEqual, isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BasicConfig, CustomElement } from '..';\nimport { clearAttribute } from '../basic-config';\nimport Empty from '../empty';\nimport theme, { inline } from '../theme';\n\nimport { popoverCss, portalCss } from './style';\n\nexport interface PopoverProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n content?: (() => JSX.Element) | JSX.Element;\n /** 挂载到指定的元素,值为一个返回对应 DOM 元素 默认 document.body */\n getPopupContainer?: (node?: HTMLElement | null) => HTMLElement;\n /** 触发行为\n * @default 'hover'\n */\n trigger?: keyof typeof TriggerOption;\n /** 打开内容气泡 */\n open?: boolean | null;\n /** 内容打开关闭时的回调方法 */\n onOpenChange?: (open: boolean | null) => void;\n /** 气泡的自定义类名 */\n popupClass?: string;\n /** 气泡的自定义样式表 */\n popupCss?: string;\n /** 关闭后是否销毁 */\n destroyInactive?: boolean;\n /** 不可用状态 */\n disabled?: boolean;\n /** 添加一个箭头显示 */\n arrow?: boolean;\n /** 指定气泡显示的方向 */\n placement?: keyof typeof Placement;\n /** 气泡宽度与触发dom一致 */\n dropdownMatchSelectWidth?: boolean;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n children?: JSX.Element;\n}\n\nexport enum TriggerOption {\n /** 鼠标移入 */\n hover = 'hover',\n /** 点击 */\n click = 'click',\n /** 右键 */\n contextMenu = 'contextMenu',\n /** 无 */\n none = 'none',\n}\n\nexport enum Placement {\n /** 左下 */\n bottomLeft = 'bottomLeft',\n /** 下 */\n bottom = 'bottom',\n /** 右下 */\n bottomRight = 'bottomRight',\n /** 左上 */\n topLeft = 'topLeft',\n /** 上 */\n top = 'top',\n /** 右上 */\n topRight = 'topRight',\n /** 左 */\n left = 'left',\n /** 右 */\n right = 'right',\n}\n\ninterface Posi {\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n '--x'?: number;\n}\n\ninterface EventMap {\n click?: string;\n hover?: string;\n contextMenu?: string;\n none?: never;\n [key: string]: string | undefined;\n}\nfunction Popover(props: PopoverProps) {\n const { isDark, baseStyle } = theme;\n const mp = mergeProps(\n {\n trigger: 'hover',\n },\n props,\n );\n const [local] = splitProps(mp, [\n 'class',\n 'css',\n 'popupClass',\n 'popupCss',\n 'size',\n 'trigger',\n 'open',\n 'disabled',\n 'onOpenChange',\n 'dropdownMatchSelectWidth',\n 'destroyInactive',\n 'arrow',\n 'placement',\n 'getPopupContainer',\n 'children',\n 'content',\n ]);\n let ref: HTMLDivElement | undefined;\n let childRef: HTMLSpanElement | undefined;\n let closeTimer: NodeJS.Timeout | undefined;\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [posi, setPosi] = createSignal<Posi>({});\n const [up, setUp] = createSignal<boolean>(false);\n const [width, setWidth] = createSignal('');\n\n createEffect(() => {\n if (local.open !== void 0) {\n setOpen(local.open);\n }\n });\n function openChange(next: boolean | null) {\n if (!local.disabled) {\n if (local.onOpenChange) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n function exit() {\n if (open() === false) {\n setOpen(null);\n openChange(null);\n }\n }\n createEffect(() => {\n if (open() && local.dropdownMatchSelectWidth && childRef) {\n setWidth(`.portal {width: ${childRef.offsetWidth}px;}`);\n }\n });\n\n function close(e: MouseEvent | Event) {\n clearTimeout(closeTimer);\n closeTimer = setTimeout(\n () => {\n clearTimeout(closeTimer);\n if (e.target && (e.target as HTMLElement).getAttribute('handle-closed') === 'false') {\n return;\n }\n const isContains = isElementInside(e.target as Element, ref);\n\n if ((open() && !isContains) || (isContains && e.type !== 'mousedown')) {\n openChange(false);\n }\n },\n local.trigger === 'hover' ? 300 : 0,\n );\n }\n let portalTimer: NodeJS.Timeout | undefined;\n const showPortal = function (e?: Event): void {\n clearTimeout(portalTimer);\n portalTimer = setTimeout(() => {\n clearTimeout(portalTimer);\n if (!ref || !childRef || (!e && local.trigger === 'contextMenu')) {\n return;\n }\n if (e?.type === 'scroll' && local.trigger === 'contextMenu') {\n openChange(false);\n return;\n }\n const elRect = childRef.getBoundingClientRect();\n const portalRect = ref.getBoundingClientRect();\n const offsetX = portalRect.width / 2 - elRect.width / 2;\n const margin = window.innerHeight - elRect.bottom;\n const _placement = local.placement;\n\n const _isBottom =\n (!_placement?.startsWith('top') &&\n margin > ref.offsetHeight * 0.8 &&\n margin > elRect.top) ||\n _placement?.startsWith('bottom');\n const arrowHeight = local.arrow ? 8 : 4;\n const _posi: Posi = {};\n\n switch (local.placement) {\n case 'bottomLeft':\n case 'left':\n case 'topLeft':\n _posi.left = elRect.left;\n _posi['--x'] = -portalRect.width / 2 + 16;\n break;\n case 'bottomRight':\n case 'right':\n case 'topRight':\n _posi.left = elRect.right - portalRect.width;\n _posi['--x'] = portalRect.width / 2 - 16;\n break;\n case 'bottom':\n case 'top':\n default:\n _posi.left = Math.abs(offsetX > elRect.left ? elRect.left : elRect.left - offsetX);\n _posi['--x'] = -(_posi.left - elRect.left + offsetX);\n break;\n }\n if (_isBottom) {\n _posi.top = elRect.bottom + arrowHeight;\n } else {\n _posi.bottom = window.innerHeight - elRect.top + arrowHeight;\n }\n setPosi((prev) => {\n return isEqual(prev, _posi) ? prev : _posi;\n });\n setUp((prev) => {\n return prev === !_isBottom ? prev : !_isBottom;\n });\n }, 32);\n };\n\n function handleOpen(e: MouseEvent) {\n clearTimeout(closeTimer);\n e.stopPropagation();\n if (local.trigger === 'contextMenu' && e.type === 'contextmenu') {\n e.preventDefault();\n setPosi((prev) => ({\n ...prev,\n left: e.clientX,\n top: e.clientY,\n ['--x']: -(ref?.getBoundingClientRect().width || 0) / 2 + 16,\n }));\n }\n openChange(true);\n }\n\n const container = createMemo(() => {\n if (isFunction(local.getPopupContainer)) {\n return local.getPopupContainer(childRef);\n }\n return document.body;\n });\n const childrenProps = createMemo(() => {\n const _props: Partial<Record<keyof EventMap, void>> = {};\n\n const openEvent: EventMap = {\n click: 'onMouseDown',\n hover: 'onMouseEnter',\n contextMenu: 'onContextMenu',\n none: void 0,\n };\n const closeEvent: EventMap = {\n hover: 'onMouseLeave',\n click: void 0,\n contextMenu: void 0,\n none: void 0,\n };\n\n const openFn = openEvent[local.trigger];\n const closeFn = closeEvent[local.trigger];\n\n Object.assign(\n _props,\n openFn && {\n [openFn]: handleOpen,\n },\n closeFn && {\n [closeFn]: close,\n },\n );\n\n return _props;\n });\n\n const portalStyle = createMemo(() => {\n const p = posi();\n\n return `.portal {${Object.keys(p)\n .map((k) => `${k}:${p[k as keyof Posi]}px;`)\n .join('')}z-index: 1;}`;\n });\n const portalCls = createMemo(() => {\n return cx(\n 'portal',\n local.arrow && 'arrow',\n `${open() ? 'in' : 'out'}-${up() ? 'up' : 'down'}`,\n local.size,\n local.popupClass,\n );\n });\n const hostStyle = createMemo(() => {\n return `:host {--popover-bg: ${\n isDark() ? '#1f1f1f' : 'var(--component-bg)'\n };--popover-shadow-color: rgb(0 0 0 / 5%);}`;\n });\n\n createEffect(() => {\n if (open()) {\n showPortal();\n\n window.addEventListener('scroll', showPortal, {\n passive: passiveSupported,\n });\n }\n onCleanup(() => {\n window.removeEventListener('scroll', showPortal, false);\n });\n });\n onMount(() => {\n if (local.trigger !== 'none') {\n document.documentElement.addEventListener('mousedown', close, false);\n }\n });\n onCleanup(() => {\n clearTimeout(closeTimer);\n document.documentElement.removeEventListener('mousedown', close, false);\n });\n\n return (\n <>\n <style textContent={popoverCss} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <span ref={childRef} class={cx('popover', local.size, local.class)} {...childrenProps()}>\n {local.children}\n </span>\n <Show when={open() !== null || !local.destroyInactive}>\n <Portal useShadow mount={container()}>\n <style textContent={baseStyle()} />\n <style textContent={portalCss} />\n <style textContent={hostStyle()} />\n <style textContent={portalStyle()} />\n <style textContent={width()} />\n <Show when={local.popupCss}>\n <style textContent={css(local.popupCss)} />\n </Show>\n <div ref={ref} onAnimationEnd={exit} class={portalCls()} {...childrenProps()}>\n <Show when={local.content} fallback={<Empty />}>\n <Show when={typeof local.content === 'string'} fallback={local.content}>\n {/* eslint-disable-next-line solid/no-innerhtml */}\n <div innerHTML={local.content} />\n </Show>\n </Show>\n </div>\n </Portal>\n </Show>\n </>\n );\n}\n\nexport type PopoverElement = CustomElement<PopoverProps, 'onOpenChange'>;\n\nexport const defaultProps = {\n class: void 0,\n css: void 0,\n content: void 0,\n getPopupContainer: void 0,\n trigger: void 0,\n open: void 0,\n onOpenChange: void 0,\n popupClass: void 0,\n popupCss: void 0,\n destroyInactive: true,\n disabled: void 0,\n arrow: void 0,\n placement: void 0,\n dropdownMatchSelectWidth: void 0,\n};\ncustomElement<PopoverProps>('n-popover', defaultProps, (_, opt) => {\n const { baseStyle } = theme;\n const el = opt.element;\n const props = mergeProps(\n {\n onOpenChange(next: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: next,\n }),\n );\n },\n children: [...el.childNodes.values()],\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['content', 'popupCss', 'css']);\n });\n return (\n <>\n <style textContent={inline} />\n <style textContent={baseStyle()} />\n <Popover {...props} />\n </>\n );\n});\nexport default Popover;\n"],"names":["TriggerOption","Placement","createEffect","createMemo","createSignal","mergeProps","onCleanup","onMount","Show","splitProps","Portal","isElementInside","isEqual","isFunction","passiveSupported","css","cx","customElement","clearAttribute","Empty","theme","inline","popoverCss","portalCss","Popover","props","ref","childRef","closeTimer","portalTimer","isDark","baseStyle","local","trigger","open","setOpen","posi","setPosi","up","setUp","width","setWidth","openChange","next","disabled","onOpenChange","exit","close","e","clearTimeout","setTimeout","target","getAttribute","isContains","type","dropdownMatchSelectWidth","offsetWidth","showPortal","elRect","getBoundingClientRect","portalRect","offsetX","margin","window","innerHeight","bottom","_placement","placement","_isBottom","startsWith","offsetHeight","top","arrowHeight","arrow","_posi","left","right","Math","abs","prev","handleOpen","stopPropagation","preventDefault","clientX","clientY","container","getPopupContainer","document","body","childrenProps","_props","openFn","openEvent","click","hover","contextMenu","none","closeFn","closeEvent","Object","assign","portalStyle","p","keys","map","k","join","portalCls","size","popupClass","hostStyle","addEventListener","passive","removeEventListener","documentElement","class","children","destroyInactive","popupCss","content","defaultProps","_","opt","el","element","dispatchEvent","CustomEvent","detail","childNodes","values"],"mappings":"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"}
1
+ {"version":3,"sources":["components/popover/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n splitProps,\n} from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { isElementInside, isEqual, isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BasicConfig, CustomElement } from '..';\nimport { clearAttribute } from '../basic-config';\nimport Empty from '../empty';\nimport theme, { inline } from '../theme';\n\nimport { popoverCss, portalCss } from './style';\n\nexport interface PopoverProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n content?: (() => JSX.Element) | JSX.Element;\n /** 挂载到指定的元素,值为一个返回对应 DOM 元素 默认 document.body */\n getPopupContainer?: (node?: HTMLElement | null) => HTMLElement;\n /** 触发行为\n * @default 'hover'\n */\n trigger?: keyof typeof TriggerOption;\n /** 打开内容气泡 */\n open?: boolean | null;\n /** 内容打开关闭时的回调方法 */\n onOpenChange?: (open: boolean | null) => void;\n /** 气泡的自定义类名 */\n popupClass?: string;\n /** 气泡的自定义样式表 */\n popupCss?: string;\n /** 关闭后是否销毁 */\n destroyInactive?: boolean;\n /** 不可用状态 */\n disabled?: boolean;\n /** 添加一个箭头显示 */\n arrow?: boolean;\n /** 指定气泡显示的方向 */\n placement?: keyof typeof Placement;\n /** 气泡宽度与触发dom一致 */\n dropdownMatchSelectWidth?: boolean;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n children?: JSX.Element;\n}\n\nexport enum TriggerOption {\n /** 鼠标移入 */\n hover = 'hover',\n /** 点击 */\n click = 'click',\n /** 右键 */\n contextMenu = 'contextMenu',\n /** 无 */\n none = 'none',\n}\n\nexport enum Placement {\n /** 左下 */\n bottomLeft = 'bottomLeft',\n /** 下 */\n bottom = 'bottom',\n /** 右下 */\n bottomRight = 'bottomRight',\n /** 左上 */\n topLeft = 'topLeft',\n /** 上 */\n top = 'top',\n /** 右上 */\n topRight = 'topRight',\n /** 左 */\n left = 'left',\n /** 右 */\n right = 'right',\n}\n\ninterface Posi {\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n '--x'?: number;\n}\n\ninterface EventMap {\n click?: string;\n hover?: string;\n contextMenu?: string;\n none?: never;\n [key: string]: string | undefined;\n}\nfunction Popover(props: PopoverProps) {\n const { isDark, baseStyle } = theme;\n const mp = mergeProps(\n {\n trigger: 'hover',\n },\n props,\n );\n const [local] = splitProps(mp, [\n 'class',\n 'css',\n 'popupClass',\n 'popupCss',\n 'size',\n 'trigger',\n 'open',\n 'disabled',\n 'onOpenChange',\n 'dropdownMatchSelectWidth',\n 'destroyInactive',\n 'arrow',\n 'placement',\n 'getPopupContainer',\n 'children',\n 'content',\n ]);\n let ref: HTMLDivElement | undefined;\n let childRef: HTMLSpanElement | undefined;\n let closeTimer: NodeJS.Timeout | undefined;\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [posi, setPosi] = createSignal<Posi>({});\n const [up, setUp] = createSignal<boolean>(false);\n const [width, setWidth] = createSignal('');\n\n createEffect(() => {\n if (local.open !== void 0) {\n setOpen(local.open);\n }\n });\n function openChange(next: boolean | null) {\n if (!local.disabled) {\n if (local.onOpenChange) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n function exit() {\n if (open() === false) {\n setOpen(null);\n openChange(null);\n }\n }\n createEffect(() => {\n if (open() && local.dropdownMatchSelectWidth && childRef) {\n setWidth(`.portal {width: ${childRef.offsetWidth}px;}`);\n }\n });\n\n function close(e: MouseEvent | Event) {\n clearTimeout(closeTimer);\n closeTimer = setTimeout(\n () => {\n clearTimeout(closeTimer);\n if (e.target && (e.target as HTMLElement).getAttribute('handle-closed') === 'false') {\n return;\n }\n const isContains = isElementInside(e.target as Element, ref);\n\n if ((open() && !isContains) || (isContains && e.type !== 'mousedown')) {\n openChange(false);\n }\n },\n local.trigger === 'hover' ? 300 : 0,\n );\n }\n let portalTimer: NodeJS.Timeout | undefined;\n const showPortal = function (e?: Event): void {\n clearTimeout(portalTimer);\n portalTimer = setTimeout(() => {\n clearTimeout(portalTimer);\n if (!ref || !childRef || (!e && local.trigger === 'contextMenu')) {\n return;\n }\n if (e?.type === 'scroll' && local.trigger === 'contextMenu') {\n openChange(false);\n return;\n }\n const elRect = childRef.getBoundingClientRect();\n const portalRect = ref.getBoundingClientRect();\n const offsetX = portalRect.width / 2 - elRect.width / 2;\n const margin = window.innerHeight - elRect.bottom;\n const _placement = local.placement;\n\n const _isBottom =\n (!_placement?.startsWith('top') &&\n margin > ref.offsetHeight * 0.8 &&\n margin > elRect.top) ||\n _placement?.startsWith('bottom');\n const arrowHeight = local.arrow ? 8 : 4;\n const _posi: Posi = {};\n\n switch (local.placement) {\n case 'bottomLeft':\n case 'left':\n case 'topLeft':\n _posi.left = elRect.left;\n _posi['--x'] = -portalRect.width / 2 + 16;\n break;\n case 'bottomRight':\n case 'right':\n case 'topRight':\n _posi.left = elRect.right - portalRect.width;\n _posi['--x'] = portalRect.width / 2 - 16;\n break;\n case 'bottom':\n case 'top':\n default:\n _posi.left = Math.abs(offsetX > elRect.left ? elRect.left : elRect.left - offsetX);\n _posi['--x'] = -(_posi.left - elRect.left + offsetX);\n break;\n }\n if (_isBottom) {\n _posi.top = elRect.bottom + arrowHeight;\n } else {\n _posi.bottom = window.innerHeight - elRect.top + arrowHeight;\n }\n setPosi((prev) => {\n return isEqual(prev, _posi) ? prev : _posi;\n });\n setUp((prev) => {\n return prev === !_isBottom ? prev : !_isBottom;\n });\n }, 32);\n };\n\n function handleOpen(e: MouseEvent) {\n clearTimeout(closeTimer);\n e.stopPropagation();\n if (local.trigger === 'contextMenu' && e.type === 'contextmenu') {\n e.preventDefault();\n setPosi((prev) => ({\n ...prev,\n left: e.clientX,\n top: e.clientY,\n ['--x']: -(ref?.getBoundingClientRect().width || 0) / 2 + 16,\n }));\n }\n openChange(true);\n }\n\n const container = createMemo(() => {\n if (isFunction(local.getPopupContainer)) {\n return local.getPopupContainer(childRef);\n }\n return document.body;\n });\n const childrenProps = createMemo(() => {\n const _props: Partial<Record<keyof EventMap, void>> = {};\n\n const openEvent: EventMap = {\n click: 'onMouseDown',\n hover: 'onMouseEnter',\n contextMenu: 'onContextMenu',\n none: void 0,\n };\n const closeEvent: EventMap = {\n hover: 'onMouseLeave',\n click: void 0,\n contextMenu: void 0,\n none: void 0,\n };\n\n const openFn = openEvent[local.trigger];\n const closeFn = closeEvent[local.trigger];\n\n Object.assign(\n _props,\n openFn && {\n [openFn]: handleOpen,\n },\n closeFn && {\n [closeFn]: close,\n },\n );\n\n return _props;\n });\n\n const portalStyle = createMemo(() => {\n const p = posi();\n\n return `.portal {${Object.keys(p)\n .map((k) => `${k}:${p[k as keyof Posi]}px;`)\n .join('')}z-index: 1;}`;\n });\n const portalCls = createMemo(() => {\n return cx(\n 'portal',\n local.arrow && 'arrow',\n `${open() ? 'in' : 'out'}-${up() ? 'up' : 'down'}`,\n local.size,\n local.popupClass,\n );\n });\n const hostStyle = createMemo(() => {\n return `:host {--popover-bg: ${\n isDark() ? '#1f1f1f' : 'var(--component-bg)'\n };--popover-shadow-color: rgb(0 0 0 / 5%);}`;\n });\n\n createEffect(() => {\n if (open()) {\n showPortal();\n\n window.addEventListener('scroll', showPortal, {\n passive: passiveSupported,\n });\n }\n onCleanup(() => {\n window.removeEventListener('scroll', showPortal, false);\n });\n });\n onMount(() => {\n if (local.trigger !== 'none') {\n document.documentElement.addEventListener('mousedown', close, false);\n }\n });\n onCleanup(() => {\n clearTimeout(closeTimer);\n document.documentElement.removeEventListener('mousedown', close, false);\n });\n\n return (\n <>\n <style textContent={popoverCss} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <span ref={childRef} class={cx('popover', local.size, local.class)} {...childrenProps()}>\n {local.children}\n </span>\n <Show when={open() !== null || !local.destroyInactive}>\n <Portal useShadow mount={container()}>\n <style textContent={baseStyle()} />\n <style textContent={portalCss} />\n <style textContent={hostStyle()} />\n <style textContent={portalStyle()} />\n <style textContent={width()} />\n <Show when={local.popupCss}>\n <style textContent={css(local.popupCss)} />\n </Show>\n <div ref={ref} onAnimationEnd={exit} class={portalCls()} {...childrenProps()}>\n <Show when={local.content} fallback={<Empty />}>\n <Show when={typeof local.content === 'string'} fallback={local.content}>\n {/* eslint-disable-next-line solid/no-innerhtml */}\n <div innerHTML={local.content} />\n </Show>\n </Show>\n </div>\n </Portal>\n </Show>\n </>\n );\n}\n\nexport type PopoverElement = CustomElement<PopoverProps, 'onOpenChange'>;\n\nexport const defaultProps = {\n class: void 0,\n css: void 0,\n content: void 0,\n getPopupContainer: void 0,\n trigger: void 0,\n open: void 0,\n onOpenChange: void 0,\n popupClass: void 0,\n popupCss: void 0,\n destroyInactive: true,\n disabled: void 0,\n arrow: void 0,\n placement: void 0,\n dropdownMatchSelectWidth: void 0,\n};\ncustomElement<PopoverProps>('n-popover', defaultProps, (_, opt) => {\n const { baseStyle } = theme;\n const el = opt.element;\n const props = mergeProps(\n {\n onOpenChange(next: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: next,\n }),\n );\n },\n children: [...el.childNodes.values()],\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['content', 'popupCss', 'css']);\n });\n return (\n <>\n <style textContent={inline} />\n <style textContent={baseStyle()} />\n <Popover {...props} />\n </>\n );\n});\nexport default Popover;\n"],"names":["TriggerOption","Placement","createEffect","createMemo","createSignal","mergeProps","onCleanup","onMount","Show","splitProps","Portal","isElementInside","isEqual","isFunction","passiveSupported","css","cx","customElement","clearAttribute","Empty","theme","inline","popoverCss","portalCss","Popover","props","ref","childRef","closeTimer","portalTimer","isDark","baseStyle","local","trigger","open","setOpen","posi","setPosi","up","setUp","width","setWidth","openChange","next","disabled","onOpenChange","exit","close","e","clearTimeout","setTimeout","target","getAttribute","isContains","type","dropdownMatchSelectWidth","offsetWidth","showPortal","elRect","getBoundingClientRect","portalRect","offsetX","margin","window","innerHeight","bottom","_placement","placement","_isBottom","startsWith","offsetHeight","top","arrowHeight","arrow","_posi","left","right","Math","abs","prev","handleOpen","stopPropagation","preventDefault","clientX","clientY","container","getPopupContainer","document","body","childrenProps","_props","openFn","openEvent","click","hover","contextMenu","none","closeFn","closeEvent","Object","assign","portalStyle","p","keys","map","k","join","portalCls","size","popupClass","hostStyle","addEventListener","passive","removeEventListener","documentElement","class","children","destroyInactive","popupCss","content","defaultProps","_","opt","el","element","dispatchEvent","CustomEvent","detail","childNodes","values"],"mappings":"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"}
@@ -152,5 +152,4 @@ import{css as o}from"@moneko/css";export const popoverCss=o`
152
152
  pointer-events: none;
153
153
  }
154
154
  }
155
- `;
156
- //# sourceMappingURL=style.js.map
155
+ `;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/popover/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const popoverCss = css`\n .popover {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n\n &::-webkit-scrollbar {\n inline-size: 1px;\n }\n }\n`;\nexport const portalCss = css`\n .container {\n overflow-y: auto;\n /* stylelint-disable-next-line */\n max-block-size: -webkit-fill-available;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .portal {\n --direction: 1;\n\n position: fixed;\n display: inline-block;\n border-radius: var(--border-radius);\n padding: 4px;\n font-size: var(--font-size);\n white-space: break-spaces;\n color: var(--text-color);\n background-color: var(--popover-bg);\n filter: drop-shadow(0.5px calc(var(--direction) * 1px) 4px var(--popover-shadow-color))\n drop-shadow(1px calc(var(--direction) * 2px) 8px var(--popover-shadow-color))\n drop-shadow(2px calc(var(--direction) * 4px) 16px var(--popover-shadow-color));\n min-inline-size: 100px;\n backdrop-filter: blur(10px);\n box-sizing: border-box;\n }\n\n .arrow {\n &::before {\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n margin: auto;\n inline-size: 12px;\n block-size: 8px;\n background: inherit;\n content: '';\n clip-path: polygon(0% 0%, 50% 100%, 100% 0%);\n transform: translate3d(var(--x, 0), 100%, 0);\n }\n }\n\n .in-up {\n --direction: -1;\n\n animation: popover-up-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .out-up {\n --direction: -1;\n\n animation: popover-up-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .in-down {\n --direction: 1;\n\n animation: popover-down-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n .out-down {\n --direction: 1;\n\n animation: popover-down-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n @keyframes popover-down-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n }\n\n @keyframes popover-down-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n pointer-events: none;\n }\n }\n\n @keyframes popover-up-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n }\n\n @keyframes popover-up-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n pointer-events: none;\n }\n }\n`;\n"],"names":["css","popoverCss","portalCss"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,WAAaD,CAAG,CAAC;;;;;;;;;;AAU9B,CAAC,AAAC,AACF,QAAO,MAAME,UAAYF,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgJ7B,CAAC,AAAC"}
1
+ {"version":3,"sources":["components/popover/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const popoverCss = css`\n .popover {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n\n &::-webkit-scrollbar {\n inline-size: 1px;\n }\n }\n`;\nexport const portalCss = css`\n .container {\n overflow-y: auto;\n /* stylelint-disable-next-line */\n max-block-size: -webkit-fill-available;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .portal {\n --direction: 1;\n\n position: fixed;\n display: inline-block;\n border-radius: var(--border-radius);\n padding: 4px;\n font-size: var(--font-size);\n white-space: break-spaces;\n color: var(--text-color);\n background-color: var(--popover-bg);\n filter: drop-shadow(0.5px calc(var(--direction) * 1px) 4px var(--popover-shadow-color))\n drop-shadow(1px calc(var(--direction) * 2px) 8px var(--popover-shadow-color))\n drop-shadow(2px calc(var(--direction) * 4px) 16px var(--popover-shadow-color));\n min-inline-size: 100px;\n backdrop-filter: blur(10px);\n box-sizing: border-box;\n }\n\n .arrow {\n &::before {\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n margin: auto;\n inline-size: 12px;\n block-size: 8px;\n background: inherit;\n content: '';\n clip-path: polygon(0% 0%, 50% 100%, 100% 0%);\n transform: translate3d(var(--x, 0), 100%, 0);\n }\n }\n\n .in-up {\n --direction: -1;\n\n animation: popover-up-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .out-up {\n --direction: -1;\n\n animation: popover-up-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .in-down {\n --direction: 1;\n\n animation: popover-down-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n .out-down {\n --direction: 1;\n\n animation: popover-down-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n @keyframes popover-down-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n }\n\n @keyframes popover-down-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n pointer-events: none;\n }\n }\n\n @keyframes popover-up-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n }\n\n @keyframes popover-up-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n pointer-events: none;\n }\n }\n`;\n"],"names":["css","popoverCss","portalCss"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,WAAaD,CAAG,CAAC;;;;;;;;;;AAU9B,CAAC,AAAC,AACF,QAAO,MAAME,UAAYF,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgJ7B,CAAC,AAAC"}
@@ -18,5 +18,4 @@ import 'prismjs/components/prism-toml.js';
18
18
  import 'prismjs/components/prism-typescript.js';
19
19
  import 'prismjs/components/prism-yaml.js';
20
20
  import 'prismjs/components/prism-matlab.js';
21
- import 'prismjs/plugins/highlight-keywords/prism-highlight-keywords.js';
22
21
  export default Prism;
package/es/prism/index.js CHANGED
@@ -1,2 +1 @@
1
- import s from"prismjs";import"prismjs/components/prism-bash.js";import"prismjs/components/prism-clike.js";import"prismjs/components/prism-css.js";import"prismjs/components/prism-docker.js";import"prismjs/components/prism-git.js";import"prismjs/components/prism-javascript.js";import"prismjs/components/prism-json.js";import"prismjs/components/prism-jsx.js";import"prismjs/components/prism-tsx.js";import"prismjs/components/prism-less.js";import"prismjs/components/prism-markup.js";import"prismjs/components/prism-regex.js";import"prismjs/components/prism-rust.js";import"prismjs/components/prism-sql.js";import"prismjs/components/prism-swift.js";import"prismjs/components/prism-toml.js";import"prismjs/components/prism-typescript.js";import"prismjs/components/prism-yaml.js";import"prismjs/components/prism-matlab.js";import"prismjs/plugins/highlight-keywords/prism-highlight-keywords.js";export default s;
2
- //# sourceMappingURL=index.js.map
1
+ import s from"prismjs";import"prismjs/components/prism-bash.js";import"prismjs/components/prism-clike.js";import"prismjs/components/prism-css.js";import"prismjs/components/prism-docker.js";import"prismjs/components/prism-git.js";import"prismjs/components/prism-javascript.js";import"prismjs/components/prism-json.js";import"prismjs/components/prism-jsx.js";import"prismjs/components/prism-tsx.js";import"prismjs/components/prism-less.js";import"prismjs/components/prism-markup.js";import"prismjs/components/prism-regex.js";import"prismjs/components/prism-rust.js";import"prismjs/components/prism-sql.js";import"prismjs/components/prism-swift.js";import"prismjs/components/prism-toml.js";import"prismjs/components/prism-typescript.js";import"prismjs/components/prism-yaml.js";import"prismjs/components/prism-matlab.js";export default s;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/prism/index.ts"],"sourcesContent":["import Prism from 'prismjs';\n\n// language\nimport 'prismjs/components/prism-bash.js'; // shell + sh + bash\nimport 'prismjs/components/prism-clike.js';\nimport 'prismjs/components/prism-css.js';\nimport 'prismjs/components/prism-docker.js'; // docker + dockerfile\nimport 'prismjs/components/prism-git.js'; // diff\nimport 'prismjs/components/prism-javascript.js'; // javascript + js\nimport 'prismjs/components/prism-json.js'; // json + webmanifest\nimport 'prismjs/components/prism-jsx.js';\nimport 'prismjs/components/prism-tsx.js';\nimport 'prismjs/components/prism-less.js';\nimport 'prismjs/components/prism-markup.js'; // html + mathml + svg + xml + ssml + atom + rss\nimport 'prismjs/components/prism-regex.js';\nimport 'prismjs/components/prism-rust.js';\nimport 'prismjs/components/prism-sql.js';\nimport 'prismjs/components/prism-swift.js';\nimport 'prismjs/components/prism-toml.js';\nimport 'prismjs/components/prism-typescript.js'; // typescript + ts\nimport 'prismjs/components/prism-yaml.js'; // yaml + yml\nimport 'prismjs/components/prism-matlab.js';\n// plugins\nimport 'prismjs/plugins/highlight-keywords/prism-highlight-keywords.js';\n\nexport default Prism;\n"],"names":["Prism"],"mappings":"AAAA,OAAOA,MAAW,SAAU,AAG5B,OAAO,kCAAmC,AAC1C,OAAO,mCAAoC,AAC3C,OAAO,iCAAkC,AACzC,OAAO,oCAAqC,AAC5C,OAAO,iCAAkC,AACzC,OAAO,wCAAyC,AAChD,OAAO,kCAAmC,AAC1C,OAAO,iCAAkC,AACzC,OAAO,iCAAkC,AACzC,OAAO,kCAAmC,AAC1C,OAAO,oCAAqC,AAC5C,OAAO,mCAAoC,AAC3C,OAAO,kCAAmC,AAC1C,OAAO,iCAAkC,AACzC,OAAO,mCAAoC,AAC3C,OAAO,kCAAmC,AAC1C,OAAO,wCAAyC,AAChD,OAAO,kCAAmC,AAC1C,OAAO,oCAAqC,AAE5C,OAAO,gEAAiE,AAExE,gBAAeA,CAAM"}
1
+ {"version":3,"sources":["components/prism/index.ts"],"sourcesContent":["import Prism from 'prismjs';\n\n// language\nimport 'prismjs/components/prism-bash.js'; // shell + sh + bash\nimport 'prismjs/components/prism-clike.js';\nimport 'prismjs/components/prism-css.js';\nimport 'prismjs/components/prism-docker.js'; // docker + dockerfile\nimport 'prismjs/components/prism-git.js'; // diff\nimport 'prismjs/components/prism-javascript.js'; // javascript + js\nimport 'prismjs/components/prism-json.js'; // json + webmanifest\nimport 'prismjs/components/prism-jsx.js';\nimport 'prismjs/components/prism-tsx.js';\nimport 'prismjs/components/prism-less.js';\nimport 'prismjs/components/prism-markup.js'; // html + mathml + svg + xml + ssml + atom + rss\nimport 'prismjs/components/prism-regex.js';\nimport 'prismjs/components/prism-rust.js';\nimport 'prismjs/components/prism-sql.js';\nimport 'prismjs/components/prism-swift.js';\nimport 'prismjs/components/prism-toml.js';\nimport 'prismjs/components/prism-typescript.js'; // typescript + ts\nimport 'prismjs/components/prism-yaml.js'; // yaml + yml\nimport 'prismjs/components/prism-matlab.js';\n\nexport default Prism;\n"],"names":["Prism"],"mappings":"AAAA,OAAOA,MAAW,SAAU,AAG5B,OAAO,kCAAmC,AAC1C,OAAO,mCAAoC,AAC3C,OAAO,iCAAkC,AACzC,OAAO,oCAAqC,AAC5C,OAAO,iCAAkC,AACzC,OAAO,wCAAyC,AAChD,OAAO,kCAAmC,AAC1C,OAAO,iCAAkC,AACzC,OAAO,iCAAkC,AACzC,OAAO,kCAAmC,AAC1C,OAAO,oCAAqC,AAC5C,OAAO,mCAAoC,AAC3C,OAAO,kCAAmC,AAC1C,OAAO,iCAAkC,AACzC,OAAO,mCAAoC,AAC3C,OAAO,kCAAmC,AAC1C,OAAO,wCAAyC,AAChD,OAAO,kCAAmC,AAC1C,OAAO,oCAAqC,AAE5C,gBAAeA,CAAM"}
@@ -1,2 +1 @@
1
- import{template as e}from"solid-js/web";import{memo as t}from"solid-js/web";import{effect as o}from"solid-js/web";import{createComponent as m}from"solid-js/web";let r=e("<style> ");import{createEffect as l,mergeProps as s}from"solid-js";import{customElement as i,noShadowDOM as n}from"solid-element";import d from"../theme";function a(e){let{baseStyle:m,scheme:s,setScheme:i}=d;return n(),l(()=>{null==e.onScheme||e.onScheme.call(e,s())}),l(()=>{e.scheme&&i(e.scheme)}),[(()=>{let e=r(),t=e.firstChild;return o(()=>t.data=m()),e})(),t(()=>e.children)]}i("n-provider",(e,t)=>{let o=t.element;return m(a,s({onScheme(e){o.dispatchEvent(new CustomEvent("scheme",{detail:e}))}},e))});export default a;
2
- //# sourceMappingURL=index.js.map
1
+ import{template as e}from"solid-js/web";import{memo as t}from"solid-js/web";import{effect as o}from"solid-js/web";import{createComponent as m}from"solid-js/web";let r=e("<style> ");import{createEffect as l,mergeProps as s}from"solid-js";import{customElement as i,noShadowDOM as n}from"solid-element";import d from"../theme";function a(e){let{baseStyle:m,scheme:s,setScheme:i}=d;return n(),l(()=>{null==e.onScheme||e.onScheme.call(e,s())}),l(()=>{e.scheme&&i(e.scheme)}),[(()=>{let e=r(),t=e.firstChild;return o(()=>t.data=m()),e})(),t(()=>e.children)]}i("n-provider",(e,t)=>{let o=t.element;return m(a,s({onScheme(e){o.dispatchEvent(new CustomEvent("scheme",{detail:e}))}},e))});export default a;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/provider/index.tsx"],"sourcesContent":["import { createEffect, mergeProps } from 'solid-js';\nimport { customElement, noShadowDOM } from 'solid-element';\n\nimport type { CustomElement } from '..';\nimport theme, { ColorScheme } from '../theme';\n\nfunction Provider(props: ProviderProps) {\n const { baseStyle, scheme, setScheme } = theme;\n\n noShadowDOM();\n createEffect(() => {\n props.onScheme?.(scheme());\n });\n createEffect(() => {\n if (props.scheme) {\n setScheme(props.scheme);\n }\n });\n return (\n <>\n <style textContent={baseStyle()} />\n {props.children}\n </>\n );\n}\nexport interface ProviderProps {\n /** 主题, 等同于使用 setScheme\n * @default 'auto'\n */\n scheme?: keyof typeof ColorScheme;\n /** 包裹的子项 */\n children?: JSX.Element;\n /** 响应 scheme 变化 */\n onScheme?(scheme: keyof typeof ColorScheme): void;\n}\nexport type ProviderElement = CustomElement<ProviderProps, 'onScheme'>;\n\ncustomElement<ProviderProps>('n-provider', (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onScheme(scheme: keyof typeof ColorScheme) {\n el.dispatchEvent(\n new CustomEvent('scheme', {\n detail: scheme,\n }),\n );\n },\n },\n _,\n );\n\n return <Provider {...props} />;\n});\nexport default Provider;\n"],"names":["createEffect","mergeProps","customElement","noShadowDOM","theme","Provider","props","baseStyle","scheme","setScheme","onScheme","children","_","opt","el","element","dispatchEvent","CustomEvent","detail"],"mappings":"oLAAA,QAASA,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AACpD,QAASC,iBAAAA,CAAa,CAAEC,eAAAA,CAAW,KAAQ,eAAgB,AAG3D,QAAOC,MAA4B,UAAW,CAE9C,SAASC,EAASC,CAAoB,EACpC,GAAM,CAAEC,UAAAA,CAAS,CAAEC,OAAAA,CAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGL,EAWzC,OATAD,IACAH,EAAa,WACXM,EAAMI,QAAQ,EAAdJ,EAAMI,QAAQ,MAAdJ,EAAiBE,IACnB,GACAR,EAAa,KACPM,EAAME,MAAM,EACdC,EAAUH,EAAME,MAAM,CAE1B,uDAGwBD,iBACnBD,EAAMK,QAAQ,EAGrB,CAaAT,EAA6B,aAAc,CAACU,EAAGC,KAC7C,IAAMC,EAAKD,EAAIE,OAAO,CActB,SAAQV,EAbMJ,EACZ,CACES,SAASF,CAAgC,EACvCM,EAAGE,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQV,CACV,GAEJ,CACF,EACAI,GAIJ,EACA,gBAAeP,CAAS"}
1
+ {"version":3,"sources":["components/provider/index.tsx"],"sourcesContent":["import { createEffect, mergeProps } from 'solid-js';\nimport { customElement, noShadowDOM } from 'solid-element';\n\nimport type { CustomElement } from '..';\nimport theme, { ColorScheme } from '../theme';\n\nfunction Provider(props: ProviderProps) {\n const { baseStyle, scheme, setScheme } = theme;\n\n noShadowDOM();\n createEffect(() => {\n props.onScheme?.(scheme());\n });\n createEffect(() => {\n if (props.scheme) {\n setScheme(props.scheme);\n }\n });\n return (\n <>\n <style textContent={baseStyle()} />\n {props.children}\n </>\n );\n}\nexport interface ProviderProps {\n /** 主题, 等同于使用 setScheme\n * @default 'auto'\n */\n scheme?: keyof typeof ColorScheme;\n /** 包裹的子项 */\n children?: JSX.Element;\n /** 响应 scheme 变化 */\n onScheme?(scheme: keyof typeof ColorScheme): void;\n}\nexport type ProviderElement = CustomElement<ProviderProps, 'onScheme'>;\n\ncustomElement<ProviderProps>('n-provider', (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onScheme(scheme: keyof typeof ColorScheme) {\n el.dispatchEvent(\n new CustomEvent('scheme', {\n detail: scheme,\n }),\n );\n },\n },\n _,\n );\n\n return <Provider {...props} />;\n});\nexport default Provider;\n"],"names":["createEffect","mergeProps","customElement","noShadowDOM","theme","Provider","props","baseStyle","scheme","setScheme","onScheme","children","_","opt","el","element","dispatchEvent","CustomEvent","detail"],"mappings":"oLAAA,QAASA,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AACpD,QAASC,iBAAAA,CAAa,CAAEC,eAAAA,CAAW,KAAQ,eAAgB,AAG3D,QAAOC,MAA4B,UAAW,CAE9C,SAASC,EAASC,CAAoB,EACpC,GAAM,CAAEC,UAAAA,CAAS,CAAEC,OAAAA,CAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGL,EAWzC,OATAD,IACAH,EAAa,WACXM,EAAMI,QAAQ,EAAdJ,EAAMI,QAAQ,MAAdJ,EAAiBE,IACnB,GACAR,EAAa,KACPM,EAAME,MAAM,EACdC,EAAUH,EAAME,MAAM,CAE1B,uDAGwBD,iBACnBD,EAAMK,QAAQ,EAGrB,CAaAT,EAA6B,aAAc,CAACU,EAAGC,KAC7C,IAAMC,EAAKD,EAAIE,OAAO,CActB,SAAQV,EAbMJ,EACZ,CACES,SAASF,CAAgC,EACvCM,EAAGE,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQV,CACV,GAEJ,CACF,EACAI,GAIJ,EACA,gBAAeP,CAAS"}
@@ -1,2 +1 @@
1
- import{use as e}from"solid-js/web";import{template as r}from"solid-js/web";import{setAttribute as o}from"solid-js/web";import"solid-js/web";import{insert as t}from"solid-js/web";import{effect as i}from"solid-js/web";import{createComponent as l}from"solid-js/web";let s=r('<svg><image preserveAspectRatio="xMidYMid meet"></svg>',!1,!0),d=r('<svg xmlns="http://www.w3.org/2000/svg" version="1.1" stroke="none" shape-rendering="crispEdges" role="img"><path></path><path>'),n=r('<canvas role="img">'),b=r("<style>");import{createEffect as a,mergeProps as c,Show as u,splitProps as m}from"solid-js";import{customElement as h}from"solid-element";import{clearAttribute as g}from"../basic-config";import f,{inline as v}from"../theme";import{Ecc as p,encodeSegments as $,makeSegments as z}from"./qrcode";let w=r=>{let b,h,g;let{isDark:v}=f,[w,S]=m(c({size:160,iconSize:7,border:1,ecl:"m",type:"svg"},r),["value","border","size","type","minVersion","maxVersion","mask","boostEcc","ecl","bgColor","color","iconSize","shape"]),C={l:p.get("LOW"),m:p.get("MEDIUM"),q:p.get("QUARTILE"),h:p.get("HIGH")};return a(e=>{let r;v();let o=$(z(w.value),C[w.ecl],w.minVersion,w.maxVersion,w.mask,w.boostEcc);if("canvas"===w.type){if(w.size<=0||w.border<0||!b)throw RangeError("Value out of range");let t=w.size/(o.size+2*w.border),i=t/2;b.width=w.size,b.height=w.size,r=window.getComputedStyle(b);let l=b.getContext("2d"),s=w.color||(null==e?void 0:e.color)||r.color,d=w.bgColor||(null==e?void 0:e.bg)||r.backgroundColor;l.clearRect(0,0,w.size,w.size),l.fillStyle=d,l.fillRect(0,0,w.size,w.size),l.fillStyle=s;for(let e=-w.border;e<o.size+w.border;e++){let r=(e+w.border)*t;for(let s=-w.border;s<o.size+w.border;s++)if(o.getModule(s,e)){let e=(s+w.border)*t;switch(w.shape){case"circle":l.beginPath(),l.arc(e+i,r+i,i,0,2*Math.PI),l.fill();break;case"heart":l.beginPath(),l.moveTo(e+i,r+t/4),l.bezierCurveTo(e+.1*t,r-.2*t,e-.3*t,r+.6*t,e+i,r+t),l.bezierCurveTo(e+1.3*t,r+.6*t,e+.9*t,r-.2*t,e+i,r+t/4),l.closePath(),l.fill();break;case"rhombus":l.beginPath(),l.moveTo(e+i,r),l.lineTo(e+t,r+i),l.lineTo(e+i,r+t),l.lineTo(e,r+i),l.closePath(),l.fill();break;default:l.fillRect(Math.floor(e),Math.floor(r),Math.ceil(t),Math.ceil(t))}}}S.icon&&(g||(g=new Image(w.iconSize,w.iconSize)),g.src=S.icon,g.onload=()=>{let e=(w.size+w.border*t-w.iconSize)/2;l.drawImage(g,e,e,w.iconSize,w.iconSize)})}else{if(w.border<0)throw RangeError("Border must be non-negative");let t=[];for(let e=0;e<o.size;e++)for(let r=0;r<o.size;r++)if(o.getModule(r,e))switch(w.shape){case"circle":t.push(`M${r+w.border+.5},${e+w.border+.5} m -0.5, 0 a 0.5,0.5 0 1,0 1,0 a 0.5,0.5 0 1,0 -1,0`);break;case"rhombus":t.push(`M${r+w.border+.5},${e+w.border} L${r+w.border+1},${e+w.border+.5} L${r+w.border+.5},${e+w.border+1} L${r+w.border},${e+w.border+.5} Z`);break;case"heart":t.push(`M${r+w.border+.5},${e+w.border+.25} C${r+w.border+.1},${e+w.border-.2} ${r+w.border-.3},${e+w.border+.6} ${r+w.border+.5},${e+w.border+1} C${r+w.border+1.3},${e+w.border+.6} ${r+w.border+.9},${e+w.border-.2} ${r+w.border+.5},${e+w.border+.25} Z`);break;default:t.push(`M${r+w.border},${e+w.border}h1v1h-1z`)}let i=null==h?void 0:h.querySelectorAll("path"),l=o.size+2*w.border;null==h||h.setAttribute("viewBox",`0 0 ${l} ${l}`),r=window.getComputedStyle(h),i.length>0&&(i[0].setAttribute("d",`M0,0 h${l}v${l}H0z`),i[0].setAttribute("fill",w.bgColor||(null==e?void 0:e.bg)||r.backgroundColor),i[1].setAttribute("d",t.join(" ")),i[1].setAttribute("fill",w.color||(null==e?void 0:e.color)||r.color));let s=null==h?void 0:h.querySelector("image");if(s){let e=`${(o.size+2*w.border-w.iconSize)/2}`;s.setAttribute("x",e),s.setAttribute("y",e),s.setAttribute("width",`${w.iconSize}`),s.setAttribute("height",`${w.iconSize}`)}}return{color:r.color,bg:r.backgroundColor}}),l(u,{get when(){return"svg"===w.type},get fallback(){return(()=>{let r=n(),o=b;return"function"==typeof o?e(o,r):b=r,r})()},get children(){let r=d(),n=h;return r.firstChild.nextSibling,"function"==typeof n?e(n,r):h=r,t(r,l(u,{get when(){return S.icon},get children(){let e=s();return i(()=>o(e,"href",S.icon)),e}}),null),i(e=>{let t=w.size,i=w.size;return t!==e._v$&&o(r,"width",e._v$=t),i!==e._v$2&&o(r,"height",e._v$2=i),e},{_v$:void 0,_v$2:void 0}),r}})};export const defaultProps={value:"",icon:void 0,color:void 0,bgColor:void 0,size:void 0,iconSize:void 0,ecl:void 0,minVersion:void 0,maxVersion:void 0,mask:void 0,boostEcc:!1,border:void 0,type:void 0,shape:void 0};h("n-qrcode",defaultProps,(e,r)=>{let o=r.element;return a(()=>{g(o,["value","icon"])}),[(()=>{let e=b();return e.textContent=v,e})(),l(w,e)]});export default w;
2
- //# sourceMappingURL=index.js.map
1
+ import{use as e}from"solid-js/web";import{template as r}from"solid-js/web";import{setAttribute as o}from"solid-js/web";import"solid-js/web";import{insert as t}from"solid-js/web";import{effect as i}from"solid-js/web";import{createComponent as l}from"solid-js/web";let s=r('<svg><image preserveAspectRatio="xMidYMid meet"></svg>',!1,!0),d=r('<svg xmlns="http://www.w3.org/2000/svg" version="1.1" stroke="none" shape-rendering="crispEdges" role="img"><path></path><path>'),n=r('<canvas role="img">'),b=r("<style>");import{createEffect as a,mergeProps as c,Show as u,splitProps as m}from"solid-js";import{customElement as h}from"solid-element";import{clearAttribute as g}from"../basic-config";import f,{inline as v}from"../theme";import{Ecc as p,encodeSegments as $,makeSegments as z}from"./qrcode";let w=r=>{let b,h,g;let{isDark:v}=f,[w,S]=m(c({size:160,iconSize:7,border:1,ecl:"m",type:"svg"},r),["value","border","size","type","minVersion","maxVersion","mask","boostEcc","ecl","bgColor","color","iconSize","shape"]),C={l:p.get("LOW"),m:p.get("MEDIUM"),q:p.get("QUARTILE"),h:p.get("HIGH")};return a(e=>{let r;v();let o=$(z(w.value),C[w.ecl],w.minVersion,w.maxVersion,w.mask,w.boostEcc);if("canvas"===w.type){if(w.size<=0||w.border<0||!b)throw RangeError("Value out of range");let t=w.size/(o.size+2*w.border),i=t/2;b.width=w.size,b.height=w.size,r=window.getComputedStyle(b);let l=b.getContext("2d"),s=w.color||(null==e?void 0:e.color)||r.color,d=w.bgColor||(null==e?void 0:e.bg)||r.backgroundColor;l.clearRect(0,0,w.size,w.size),l.fillStyle=d,l.fillRect(0,0,w.size,w.size),l.fillStyle=s;for(let e=-w.border;e<o.size+w.border;e++){let r=(e+w.border)*t;for(let s=-w.border;s<o.size+w.border;s++)if(o.getModule(s,e)){let e=(s+w.border)*t;switch(w.shape){case"circle":l.beginPath(),l.arc(e+i,r+i,i,0,2*Math.PI),l.fill();break;case"heart":l.beginPath(),l.moveTo(e+i,r+t/4),l.bezierCurveTo(e+.1*t,r-.2*t,e-.3*t,r+.6*t,e+i,r+t),l.bezierCurveTo(e+1.3*t,r+.6*t,e+.9*t,r-.2*t,e+i,r+t/4),l.closePath(),l.fill();break;case"rhombus":l.beginPath(),l.moveTo(e+i,r),l.lineTo(e+t,r+i),l.lineTo(e+i,r+t),l.lineTo(e,r+i),l.closePath(),l.fill();break;default:l.fillRect(Math.floor(e),Math.floor(r),Math.ceil(t),Math.ceil(t))}}}S.icon&&(g||(g=new Image(w.iconSize,w.iconSize)),g.src=S.icon,g.onload=()=>{let e=(w.size+w.border*t-w.iconSize)/2;l.drawImage(g,e,e,w.iconSize,w.iconSize)})}else{if(w.border<0)throw RangeError("Border must be non-negative");let t=[];for(let e=0;e<o.size;e++)for(let r=0;r<o.size;r++)if(o.getModule(r,e))switch(w.shape){case"circle":t.push(`M${r+w.border+.5},${e+w.border+.5} m -0.5, 0 a 0.5,0.5 0 1,0 1,0 a 0.5,0.5 0 1,0 -1,0`);break;case"rhombus":t.push(`M${r+w.border+.5},${e+w.border} L${r+w.border+1},${e+w.border+.5} L${r+w.border+.5},${e+w.border+1} L${r+w.border},${e+w.border+.5} Z`);break;case"heart":t.push(`M${r+w.border+.5},${e+w.border+.25} C${r+w.border+.1},${e+w.border-.2} ${r+w.border-.3},${e+w.border+.6} ${r+w.border+.5},${e+w.border+1} C${r+w.border+1.3},${e+w.border+.6} ${r+w.border+.9},${e+w.border-.2} ${r+w.border+.5},${e+w.border+.25} Z`);break;default:t.push(`M${r+w.border},${e+w.border}h1v1h-1z`)}let i=null==h?void 0:h.querySelectorAll("path"),l=o.size+2*w.border;null==h||h.setAttribute("viewBox",`0 0 ${l} ${l}`),r=window.getComputedStyle(h),i.length>0&&(i[0].setAttribute("d",`M0,0 h${l}v${l}H0z`),i[0].setAttribute("fill",w.bgColor||(null==e?void 0:e.bg)||r.backgroundColor),i[1].setAttribute("d",t.join(" ")),i[1].setAttribute("fill",w.color||(null==e?void 0:e.color)||r.color));let s=null==h?void 0:h.querySelector("image");if(s){let e=`${(o.size+2*w.border-w.iconSize)/2}`;s.setAttribute("x",e),s.setAttribute("y",e),s.setAttribute("width",`${w.iconSize}`),s.setAttribute("height",`${w.iconSize}`)}}return{color:r.color,bg:r.backgroundColor}}),l(u,{get when(){return"svg"===w.type},get fallback(){return(()=>{let r=n(),o=b;return"function"==typeof o?e(o,r):b=r,r})()},get children(){let r=d(),n=h;return r.firstChild.nextSibling,"function"==typeof n?e(n,r):h=r,t(r,l(u,{get when(){return S.icon},get children(){let e=s();return i(()=>o(e,"href",S.icon)),e}}),null),i(e=>{let t=w.size,i=w.size;return t!==e._v$&&o(r,"width",e._v$=t),i!==e._v$2&&o(r,"height",e._v$2=i),e},{_v$:void 0,_v$2:void 0}),r}})};export const defaultProps={value:"",icon:void 0,color:void 0,bgColor:void 0,size:void 0,iconSize:void 0,ecl:void 0,minVersion:void 0,maxVersion:void 0,mask:void 0,boostEcc:!1,border:void 0,type:void 0,shape:void 0};h("n-qrcode",defaultProps,(e,r)=>{let o=r.element;return a(()=>{g(o,["value","icon"])}),[(()=>{let e=b();return e.textContent=v,e})(),l(w,e)]});export default w;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/qrcode/index.tsx"],"sourcesContent":["import { createEffect, JSX, mergeProps, Show, splitProps } from 'solid-js';\nimport { customElement } from 'solid-element';\n\nimport { clearAttribute } from '../basic-config';\nimport theme, { inline } from '../theme';\n\nimport { Ecc, encodeSegments, type IntRange, makeSegments } from './qrcode';\nexport type { IntRange } from './qrcode';\nexport interface QrCodeProps {\n /** 自定义类名 */\n class?: string;\n style?: string | JSX.CSSProperties;\n /** 二维码值 */\n value: string;\n /** 二维码模块的颜色 */\n color?: string;\n /** 二维码背景色 */\n bgColor?: string;\n /**\n * 二维码尺寸\n * @default 150\n */\n size?: number;\n /** 纠错等级; 分别对应7%、15%、25%、30%的数据纠错能力\n * @default 'm'\n */\n ecl?: 'l' | 'm' | 'q' | 'h';\n /**\n * 支持的QR码模型2标准最小版本\n * @default 1\n */\n minVersion?: IntRange<1, 41>;\n /**\n * 支持的QR码模型2标准最大版本\n * @default 40\n */\n maxVersion?: IntRange<1, 41>;\n /**\n * 掩码模式; 为 -1 时,表示自动选择\n * @default -1\n */\n mask?: -1 | IntRange<0, 8>;\n /**\n * 在数据仍然适合当前版本号的情况下提高纠错级别\n * @default true\n */\n boostEcc?: boolean;\n /**\n * 模块外围的边框宽度(模块单位,非像素)\n * @default 1\n */\n border?: IntRange<1, 101>;\n /**\n * 渲染方式\n * @default 'svg'\n */\n type?: 'svg' | 'canvas';\n /**\n * 二维码图标\n */\n icon?: string;\n /**\n * 二维码图标尺寸\n * @default 7\n */\n iconSize?: number;\n /**\n * 模块形状\n * @default 'rect'\n * @since 2.9.1\n */\n shape?: 'rect' | 'rhombus' | 'heart' | 'circle';\n}\nconst QRCode = (_props: QrCodeProps) => {\n const { isDark } = theme;\n let cvs: HTMLCanvasElement | undefined;\n let svg: SVGSVGElement | undefined;\n let img: HTMLImageElement | undefined;\n const normal = mergeProps(\n {\n size: 160,\n iconSize: 7,\n border: 1,\n ecl: 'm' as const,\n type: 'svg' as const,\n },\n _props,\n );\n const [props, other] = splitProps(normal, [\n 'value',\n 'border',\n 'size',\n 'type',\n 'minVersion',\n 'maxVersion',\n 'mask',\n 'boostEcc',\n 'ecl',\n 'bgColor',\n 'color',\n 'iconSize',\n 'shape',\n ]);\n const eccMap = {\n l: Ecc.get('LOW'),\n m: Ecc.get('MEDIUM'),\n q: Ecc.get('QUARTILE'),\n h: Ecc.get('HIGH'),\n };\n\n createEffect((prev?: { color?: string; bg?: string }) => {\n isDark(); // 响应主题模式\n const segs = makeSegments(props.value);\n const qr = encodeSegments(\n segs,\n eccMap[props.ecl],\n props.minVersion,\n props.maxVersion,\n props.mask,\n props.boostEcc,\n );\n let styles: CSSStyleDeclaration;\n\n if (props.type === 'canvas') {\n if (props.size <= 0 || props.border < 0 || !cvs) throw new RangeError('Value out of range');\n const scale = props.size / (qr.size + props.border * 2);\n const radius = scale / 2; // 半径\n\n cvs.width = props.size;\n cvs.height = props.size;\n styles = window.getComputedStyle(cvs as unknown as Element);\n const ctx = cvs.getContext('2d') as CanvasRenderingContext2D;\n const color = props.color || prev?.color || styles.color;\n const bgColor = props.bgColor || prev?.bg || styles.backgroundColor;\n\n ctx.clearRect(0, 0, props.size, props.size);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, props.size, props.size);\n ctx.fillStyle = color;\n for (let y = -props.border; y < qr.size + props.border; y++) {\n const ypos = (y + props.border) * scale;\n\n for (let x = -props.border; x < qr.size + props.border; x++) {\n if (qr.getModule(x, y)) {\n const xpos = (x + props.border) * scale;\n\n switch (props.shape) {\n case 'circle':\n ctx.beginPath();\n ctx.arc(xpos + radius, ypos + radius, radius, 0, Math.PI * 2);\n ctx.fill();\n break;\n case 'heart':\n ctx.beginPath();\n ctx.moveTo(xpos + radius, ypos + scale / 4);\n ctx.bezierCurveTo(\n xpos + scale * 0.1,\n ypos - scale * 0.2,\n xpos - scale * 0.3,\n ypos + scale * 0.6,\n xpos + radius,\n ypos + scale,\n );\n ctx.bezierCurveTo(\n xpos + scale * 1.3,\n ypos + scale * 0.6,\n xpos + scale * 0.9,\n ypos - scale * 0.2,\n xpos + radius,\n ypos + scale / 4,\n );\n ctx.closePath();\n ctx.fill();\n break;\n case 'rhombus':\n ctx.beginPath();\n ctx.moveTo(xpos + radius, ypos);\n ctx.lineTo(xpos + scale, ypos + radius);\n ctx.lineTo(xpos + radius, ypos + scale);\n ctx.lineTo(xpos, ypos + radius);\n ctx.closePath();\n ctx.fill();\n break;\n case 'rect':\n default:\n // 避免由于小数位带来的间隔问题\n ctx.fillRect(\n Math.floor(xpos),\n Math.floor(ypos),\n Math.ceil(scale),\n Math.ceil(scale),\n );\n break;\n }\n }\n }\n }\n // 恢复缩放\n // ctx.restore();\n // 如果有图标,则绘制到中心\n if (other.icon) {\n if (!img) {\n img = new Image(props.iconSize, props.iconSize);\n }\n img.src = other.icon;\n img.onload = () => {\n const offset = (props.size + props.border * scale - props.iconSize) / 2;\n\n ctx.drawImage(img!, offset, offset, props.iconSize, props.iconSize);\n };\n }\n } else {\n if (props.border < 0) {\n throw new RangeError('Border must be non-negative');\n }\n const parts: string[] = [];\n\n for (let y = 0; y < qr.size; y++) {\n for (let x = 0; x < qr.size; x++) {\n if (qr.getModule(x, y)) {\n switch (props.shape) {\n case 'circle':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border + 0.5} m -0.5, 0 a 0.5,0.5 0 1,0 1,0 a 0.5,0.5 0 1,0 -1,0`,\n );\n break;\n case 'rhombus':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border} L${x + props.border + 1},${y + props.border + 0.5} L${x + props.border + 0.5},${y + props.border + 1} L${x + props.border},${y + props.border + 0.5} Z`,\n );\n break;\n case 'heart':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border + 0.25} C${x + props.border + 0.1},${y + props.border - 0.2} ${x + props.border - 0.3},${y + props.border + 0.6} ${x + props.border + 0.5},${y + props.border + 1} C${x + props.border + 1.3},${y + props.border + 0.6} ${x + props.border + 0.9},${y + props.border - 0.2} ${x + props.border + 0.5},${y + props.border + 0.25} Z`,\n );\n break;\n case 'rect':\n default:\n parts.push(`M${x + props.border},${y + props.border}h1v1h-1z`);\n break;\n }\n }\n }\n }\n const paths = svg?.querySelectorAll('path') as unknown as SVGPathElement[];\n const box_size = qr.size + props.border * 2;\n\n svg?.setAttribute('viewBox', `0 0 ${box_size} ${box_size}`);\n styles = window.getComputedStyle(svg as unknown as Element);\n if (paths.length > 0) {\n paths[0].setAttribute('d', `M0,0 h${box_size}v${box_size}H0z`);\n paths[0].setAttribute('fill', props.bgColor || prev?.bg || styles.backgroundColor);\n paths[1].setAttribute('d', parts.join(' '));\n paths[1].setAttribute('fill', props.color || prev?.color || styles.color);\n }\n // icon\n const icon = svg?.querySelector('image');\n\n if (icon) {\n const offset = `${(qr.size + props.border * 2 - props.iconSize) / 2}`;\n\n icon.setAttribute('x', offset);\n icon.setAttribute('y', offset);\n icon.setAttribute('width', `${props.iconSize}`);\n icon.setAttribute('height', `${props.iconSize}`);\n }\n }\n\n return {\n color: styles.color,\n bg: styles.backgroundColor,\n };\n });\n\n return (\n <Show when={props.type === 'svg'} fallback={<canvas ref={cvs} role=\"img\" />}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n stroke=\"none\"\n width={props.size}\n height={props.size}\n ref={svg}\n shape-rendering=\"crispEdges\"\n role=\"img\"\n >\n <path />\n <path />\n <Show when={other.icon}>\n <image href={other.icon} preserveAspectRatio=\"xMidYMid meet\" />\n </Show>\n </svg>\n </Show>\n );\n};\n\nexport type QrCodeElement = CustomElement<QrCodeProps>;\nexport const defaultProps: QrCodeProps = {\n value: '',\n icon: void 0,\n color: void 0,\n bgColor: void 0,\n size: void 0,\n iconSize: void 0,\n ecl: void 0,\n minVersion: void 0,\n maxVersion: void 0,\n mask: void 0,\n boostEcc: false,\n border: void 0,\n type: void 0,\n shape: void 0,\n};\n\ncustomElement<QrCodeProps>('n-qrcode', defaultProps, (props, opt) => {\n const el = opt.element;\n\n createEffect(() => {\n clearAttribute(el, ['value', 'icon']);\n });\n return (\n <>\n <style textContent={inline} />\n <QRCode {...props} />\n </>\n );\n});\n\nexport default QRCode;\n"],"names":["createEffect","mergeProps","Show","splitProps","customElement","clearAttribute","theme","inline","Ecc","encodeSegments","makeSegments","QRCode","_props","cvs","svg","img","isDark","props","other","size","iconSize","border","ecl","type","eccMap","l","get","m","q","h","prev","styles","qr","value","minVersion","maxVersion","mask","boostEcc","RangeError","scale","radius","width","height","window","getComputedStyle","ctx","getContext","color","bgColor","bg","backgroundColor","clearRect","fillStyle","fillRect","y","ypos","x","getModule","xpos","shape","beginPath","arc","Math","PI","fill","moveTo","bezierCurveTo","closePath","lineTo","floor","ceil","icon","Image","src","onload","offset","drawImage","parts","push","paths","querySelectorAll","box_size","setAttribute","length","join","querySelector","defaultProps","opt","el","element"],"mappings":"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"}
1
+ {"version":3,"sources":["components/qrcode/index.tsx"],"sourcesContent":["import { createEffect, JSX, mergeProps, Show, splitProps } from 'solid-js';\nimport { customElement } from 'solid-element';\n\nimport { clearAttribute } from '../basic-config';\nimport theme, { inline } from '../theme';\n\nimport { Ecc, encodeSegments, type IntRange, makeSegments } from './qrcode';\nexport type { IntRange } from './qrcode';\nexport interface QrCodeProps {\n /** 自定义类名 */\n class?: string;\n style?: string | JSX.CSSProperties;\n /** 二维码值 */\n value: string;\n /** 二维码模块的颜色 */\n color?: string;\n /** 二维码背景色 */\n bgColor?: string;\n /**\n * 二维码尺寸\n * @default 150\n */\n size?: number;\n /** 纠错等级; 分别对应7%、15%、25%、30%的数据纠错能力\n * @default 'm'\n */\n ecl?: 'l' | 'm' | 'q' | 'h';\n /**\n * 支持的QR码模型2标准最小版本\n * @default 1\n */\n minVersion?: IntRange<1, 41>;\n /**\n * 支持的QR码模型2标准最大版本\n * @default 40\n */\n maxVersion?: IntRange<1, 41>;\n /**\n * 掩码模式; 为 -1 时,表示自动选择\n * @default -1\n */\n mask?: -1 | IntRange<0, 8>;\n /**\n * 在数据仍然适合当前版本号的情况下提高纠错级别\n * @default true\n */\n boostEcc?: boolean;\n /**\n * 模块外围的边框宽度(模块单位,非像素)\n * @default 1\n */\n border?: IntRange<1, 101>;\n /**\n * 渲染方式\n * @default 'svg'\n */\n type?: 'svg' | 'canvas';\n /**\n * 二维码图标\n */\n icon?: string;\n /**\n * 二维码图标尺寸\n * @default 7\n */\n iconSize?: number;\n /**\n * 模块形状\n * @default 'rect'\n * @since 2.9.1\n */\n shape?: 'rect' | 'rhombus' | 'heart' | 'circle';\n}\nconst QRCode = (_props: QrCodeProps) => {\n const { isDark } = theme;\n let cvs: HTMLCanvasElement | undefined;\n let svg: SVGSVGElement | undefined;\n let img: HTMLImageElement | undefined;\n const normal = mergeProps(\n {\n size: 160,\n iconSize: 7,\n border: 1,\n ecl: 'm' as const,\n type: 'svg' as const,\n },\n _props,\n );\n const [props, other] = splitProps(normal, [\n 'value',\n 'border',\n 'size',\n 'type',\n 'minVersion',\n 'maxVersion',\n 'mask',\n 'boostEcc',\n 'ecl',\n 'bgColor',\n 'color',\n 'iconSize',\n 'shape',\n ]);\n const eccMap = {\n l: Ecc.get('LOW'),\n m: Ecc.get('MEDIUM'),\n q: Ecc.get('QUARTILE'),\n h: Ecc.get('HIGH'),\n };\n\n createEffect((prev?: { color?: string; bg?: string }) => {\n isDark(); // 响应主题模式\n const segs = makeSegments(props.value);\n const qr = encodeSegments(\n segs,\n eccMap[props.ecl],\n props.minVersion,\n props.maxVersion,\n props.mask,\n props.boostEcc,\n );\n let styles: CSSStyleDeclaration;\n\n if (props.type === 'canvas') {\n if (props.size <= 0 || props.border < 0 || !cvs) throw new RangeError('Value out of range');\n const scale = props.size / (qr.size + props.border * 2);\n const radius = scale / 2; // 半径\n\n cvs.width = props.size;\n cvs.height = props.size;\n styles = window.getComputedStyle(cvs as unknown as Element);\n const ctx = cvs.getContext('2d') as CanvasRenderingContext2D;\n const color = props.color || prev?.color || styles.color;\n const bgColor = props.bgColor || prev?.bg || styles.backgroundColor;\n\n ctx.clearRect(0, 0, props.size, props.size);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, props.size, props.size);\n ctx.fillStyle = color;\n for (let y = -props.border; y < qr.size + props.border; y++) {\n const ypos = (y + props.border) * scale;\n\n for (let x = -props.border; x < qr.size + props.border; x++) {\n if (qr.getModule(x, y)) {\n const xpos = (x + props.border) * scale;\n\n switch (props.shape) {\n case 'circle':\n ctx.beginPath();\n ctx.arc(xpos + radius, ypos + radius, radius, 0, Math.PI * 2);\n ctx.fill();\n break;\n case 'heart':\n ctx.beginPath();\n ctx.moveTo(xpos + radius, ypos + scale / 4);\n ctx.bezierCurveTo(\n xpos + scale * 0.1,\n ypos - scale * 0.2,\n xpos - scale * 0.3,\n ypos + scale * 0.6,\n xpos + radius,\n ypos + scale,\n );\n ctx.bezierCurveTo(\n xpos + scale * 1.3,\n ypos + scale * 0.6,\n xpos + scale * 0.9,\n ypos - scale * 0.2,\n xpos + radius,\n ypos + scale / 4,\n );\n ctx.closePath();\n ctx.fill();\n break;\n case 'rhombus':\n ctx.beginPath();\n ctx.moveTo(xpos + radius, ypos);\n ctx.lineTo(xpos + scale, ypos + radius);\n ctx.lineTo(xpos + radius, ypos + scale);\n ctx.lineTo(xpos, ypos + radius);\n ctx.closePath();\n ctx.fill();\n break;\n case 'rect':\n default:\n // 避免由于小数位带来的间隔问题\n ctx.fillRect(\n Math.floor(xpos),\n Math.floor(ypos),\n Math.ceil(scale),\n Math.ceil(scale),\n );\n break;\n }\n }\n }\n }\n // 恢复缩放\n // ctx.restore();\n // 如果有图标,则绘制到中心\n if (other.icon) {\n if (!img) {\n img = new Image(props.iconSize, props.iconSize);\n }\n img.src = other.icon;\n img.onload = () => {\n const offset = (props.size + props.border * scale - props.iconSize) / 2;\n\n ctx.drawImage(img!, offset, offset, props.iconSize, props.iconSize);\n };\n }\n } else {\n if (props.border < 0) {\n throw new RangeError('Border must be non-negative');\n }\n const parts: string[] = [];\n\n for (let y = 0; y < qr.size; y++) {\n for (let x = 0; x < qr.size; x++) {\n if (qr.getModule(x, y)) {\n switch (props.shape) {\n case 'circle':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border + 0.5} m -0.5, 0 a 0.5,0.5 0 1,0 1,0 a 0.5,0.5 0 1,0 -1,0`,\n );\n break;\n case 'rhombus':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border} L${x + props.border + 1},${y + props.border + 0.5} L${x + props.border + 0.5},${y + props.border + 1} L${x + props.border},${y + props.border + 0.5} Z`,\n );\n break;\n case 'heart':\n parts.push(\n `M${x + props.border + 0.5},${y + props.border + 0.25} C${x + props.border + 0.1},${y + props.border - 0.2} ${x + props.border - 0.3},${y + props.border + 0.6} ${x + props.border + 0.5},${y + props.border + 1} C${x + props.border + 1.3},${y + props.border + 0.6} ${x + props.border + 0.9},${y + props.border - 0.2} ${x + props.border + 0.5},${y + props.border + 0.25} Z`,\n );\n break;\n case 'rect':\n default:\n parts.push(`M${x + props.border},${y + props.border}h1v1h-1z`);\n break;\n }\n }\n }\n }\n const paths = svg?.querySelectorAll('path') as unknown as SVGPathElement[];\n const box_size = qr.size + props.border * 2;\n\n svg?.setAttribute('viewBox', `0 0 ${box_size} ${box_size}`);\n styles = window.getComputedStyle(svg as unknown as Element);\n if (paths.length > 0) {\n paths[0].setAttribute('d', `M0,0 h${box_size}v${box_size}H0z`);\n paths[0].setAttribute('fill', props.bgColor || prev?.bg || styles.backgroundColor);\n paths[1].setAttribute('d', parts.join(' '));\n paths[1].setAttribute('fill', props.color || prev?.color || styles.color);\n }\n // icon\n const icon = svg?.querySelector('image');\n\n if (icon) {\n const offset = `${(qr.size + props.border * 2 - props.iconSize) / 2}`;\n\n icon.setAttribute('x', offset);\n icon.setAttribute('y', offset);\n icon.setAttribute('width', `${props.iconSize}`);\n icon.setAttribute('height', `${props.iconSize}`);\n }\n }\n\n return {\n color: styles.color,\n bg: styles.backgroundColor,\n };\n });\n\n return (\n <Show when={props.type === 'svg'} fallback={<canvas ref={cvs} role=\"img\" />}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n stroke=\"none\"\n width={props.size}\n height={props.size}\n ref={svg}\n shape-rendering=\"crispEdges\"\n role=\"img\"\n >\n <path />\n <path />\n <Show when={other.icon}>\n <image href={other.icon} preserveAspectRatio=\"xMidYMid meet\" />\n </Show>\n </svg>\n </Show>\n );\n};\n\nexport type QrCodeElement = CustomElement<QrCodeProps>;\nexport const defaultProps: QrCodeProps = {\n value: '',\n icon: void 0,\n color: void 0,\n bgColor: void 0,\n size: void 0,\n iconSize: void 0,\n ecl: void 0,\n minVersion: void 0,\n maxVersion: void 0,\n mask: void 0,\n boostEcc: false,\n border: void 0,\n type: void 0,\n shape: void 0,\n};\n\ncustomElement<QrCodeProps>('n-qrcode', defaultProps, (props, opt) => {\n const el = opt.element;\n\n createEffect(() => {\n clearAttribute(el, ['value', 'icon']);\n });\n return (\n <>\n <style textContent={inline} />\n <QRCode {...props} />\n </>\n );\n});\n\nexport default QRCode;\n"],"names":["createEffect","mergeProps","Show","splitProps","customElement","clearAttribute","theme","inline","Ecc","encodeSegments","makeSegments","QRCode","_props","cvs","svg","img","isDark","props","other","size","iconSize","border","ecl","type","eccMap","l","get","m","q","h","prev","styles","qr","value","minVersion","maxVersion","mask","boostEcc","RangeError","scale","radius","width","height","window","getComputedStyle","ctx","getContext","color","bgColor","bg","backgroundColor","clearRect","fillStyle","fillRect","y","ypos","x","getModule","xpos","shape","beginPath","arc","Math","PI","fill","moveTo","bezierCurveTo","closePath","lineTo","floor","ceil","icon","Image","src","onload","offset","drawImage","parts","push","paths","querySelectorAll","box_size","setAttribute","length","join","querySelector","defaultProps","opt","el","element"],"mappings":"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"}