@tabler/core 1.5.1 → 1.6.1

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 (967) hide show
  1. package/README.md +10 -1
  2. package/dist/css/tabler-flags.css +9 -1
  3. package/dist/css/tabler-flags.css.map +1 -1
  4. package/dist/css/tabler-flags.min.css +2 -2
  5. package/dist/css/tabler-flags.min.css.map +1 -1
  6. package/dist/css/tabler-flags.rtl.css +9 -1
  7. package/dist/css/tabler-flags.rtl.css.map +1 -1
  8. package/dist/css/tabler-flags.rtl.min.css +2 -2
  9. package/dist/css/tabler-flags.rtl.min.css.map +1 -1
  10. package/dist/css/tabler-marketing.css +78 -38
  11. package/dist/css/tabler-marketing.css.map +1 -1
  12. package/dist/css/tabler-marketing.min.css +2 -2
  13. package/dist/css/tabler-marketing.min.css.map +1 -1
  14. package/dist/css/tabler-marketing.rtl.css +78 -38
  15. package/dist/css/tabler-marketing.rtl.css.map +1 -1
  16. package/dist/css/tabler-marketing.rtl.min.css +2 -2
  17. package/dist/css/tabler-marketing.rtl.min.css.map +1 -1
  18. package/dist/css/tabler-payments.css +5 -1
  19. package/dist/css/tabler-payments.css.map +1 -1
  20. package/dist/css/tabler-payments.min.css +1 -1
  21. package/dist/css/tabler-payments.min.css.map +1 -1
  22. package/dist/css/tabler-payments.rtl.css +5 -1
  23. package/dist/css/tabler-payments.rtl.css.map +1 -1
  24. package/dist/css/tabler-payments.rtl.min.css +1 -1
  25. package/dist/css/tabler-payments.rtl.min.css.map +1 -1
  26. package/dist/css/tabler-props.css +207 -241
  27. package/dist/css/tabler-props.css.map +1 -1
  28. package/dist/css/tabler-props.min.css +2 -2
  29. package/dist/css/tabler-props.min.css.map +1 -1
  30. package/dist/css/tabler-props.rtl.css +207 -241
  31. package/dist/css/tabler-props.rtl.css.map +1 -1
  32. package/dist/css/tabler-props.rtl.min.css +2 -2
  33. package/dist/css/tabler-props.rtl.min.css.map +1 -1
  34. package/dist/css/tabler-socials.css +5 -1
  35. package/dist/css/tabler-socials.css.map +1 -1
  36. package/dist/css/tabler-socials.min.css +1 -1
  37. package/dist/css/tabler-socials.min.css.map +1 -1
  38. package/dist/css/tabler-socials.rtl.css +5 -1
  39. package/dist/css/tabler-socials.rtl.css.map +1 -1
  40. package/dist/css/tabler-socials.rtl.min.css +1 -1
  41. package/dist/css/tabler-socials.rtl.min.css.map +1 -1
  42. package/dist/css/tabler-themes.css +144 -94
  43. package/dist/css/tabler-themes.css.map +1 -1
  44. package/dist/css/tabler-themes.min.css +2 -2
  45. package/dist/css/tabler-themes.min.css.map +1 -1
  46. package/dist/css/tabler-themes.rtl.css +144 -94
  47. package/dist/css/tabler-themes.rtl.css.map +1 -1
  48. package/dist/css/tabler-themes.rtl.min.css +2 -2
  49. package/dist/css/tabler-themes.rtl.min.css.map +1 -1
  50. package/dist/css/tabler-vendors.css +203 -83
  51. package/dist/css/tabler-vendors.css.map +1 -1
  52. package/dist/css/tabler-vendors.min.css +2 -2
  53. package/dist/css/tabler-vendors.min.css.map +1 -1
  54. package/dist/css/tabler-vendors.rtl.css +203 -83
  55. package/dist/css/tabler-vendors.rtl.css.map +1 -1
  56. package/dist/css/tabler-vendors.rtl.min.css +2 -2
  57. package/dist/css/tabler-vendors.rtl.min.css.map +1 -1
  58. package/dist/css/tabler.css +4370 -5113
  59. package/dist/css/tabler.css.map +1 -1
  60. package/dist/css/tabler.min.css +2 -2
  61. package/dist/css/tabler.min.css.map +1 -1
  62. package/dist/css/tabler.rtl.css +4925 -5671
  63. package/dist/css/tabler.rtl.css.map +1 -1
  64. package/dist/css/tabler.rtl.min.css +2 -2
  65. package/dist/css/tabler.rtl.min.css.map +1 -1
  66. package/dist/img/flags/ad.svg +1 -1
  67. package/dist/img/flags/ae.svg +1 -1
  68. package/dist/img/flags/af.svg +1 -1
  69. package/dist/img/flags/afrun.svg +1 -1
  70. package/dist/img/flags/ag.svg +1 -1
  71. package/dist/img/flags/ai.svg +1 -1
  72. package/dist/img/flags/al.svg +1 -1
  73. package/dist/img/flags/am.svg +1 -1
  74. package/dist/img/flags/ao.svg +1 -1
  75. package/dist/img/flags/aq.svg +1 -1
  76. package/dist/img/flags/ar.svg +1 -1
  77. package/dist/img/flags/as.svg +1 -1
  78. package/dist/img/flags/at.svg +1 -1
  79. package/dist/img/flags/au.svg +1 -1
  80. package/dist/img/flags/aw.svg +1 -1
  81. package/dist/img/flags/ax.svg +1 -1
  82. package/dist/img/flags/az.svg +1 -1
  83. package/dist/img/flags/ba.svg +1 -1
  84. package/dist/img/flags/bb.svg +1 -1
  85. package/dist/img/flags/bd.svg +1 -1
  86. package/dist/img/flags/be.svg +1 -1
  87. package/dist/img/flags/bf.svg +1 -1
  88. package/dist/img/flags/bg.svg +1 -1
  89. package/dist/img/flags/bh.svg +1 -1
  90. package/dist/img/flags/bi.svg +1 -1
  91. package/dist/img/flags/bj.svg +1 -1
  92. package/dist/img/flags/bl.svg +1 -1
  93. package/dist/img/flags/bm.svg +1 -1
  94. package/dist/img/flags/bn.svg +1 -1
  95. package/dist/img/flags/bo.svg +1 -1
  96. package/dist/img/flags/bq-bo.svg +1 -1
  97. package/dist/img/flags/bq-sa.svg +1 -1
  98. package/dist/img/flags/bq-se.svg +1 -1
  99. package/dist/img/flags/br.svg +1 -1
  100. package/dist/img/flags/bs.svg +1 -1
  101. package/dist/img/flags/bt.svg +1 -1
  102. package/dist/img/flags/bv.svg +1 -1
  103. package/dist/img/flags/bw.svg +1 -1
  104. package/dist/img/flags/by.svg +1 -1
  105. package/dist/img/flags/bz.svg +1 -1
  106. package/dist/img/flags/ca.svg +1 -1
  107. package/dist/img/flags/cc.svg +1 -1
  108. package/dist/img/flags/cd.svg +1 -1
  109. package/dist/img/flags/cf.svg +1 -1
  110. package/dist/img/flags/cg.svg +1 -1
  111. package/dist/img/flags/ch.svg +1 -1
  112. package/dist/img/flags/ci.svg +1 -1
  113. package/dist/img/flags/ck.svg +1 -1
  114. package/dist/img/flags/cl.svg +1 -1
  115. package/dist/img/flags/cm.svg +1 -1
  116. package/dist/img/flags/cn.svg +1 -1
  117. package/dist/img/flags/co.svg +1 -1
  118. package/dist/img/flags/cr.svg +1 -1
  119. package/dist/img/flags/cu.svg +1 -1
  120. package/dist/img/flags/cv.svg +1 -1
  121. package/dist/img/flags/cw.svg +1 -1
  122. package/dist/img/flags/cx.svg +1 -1
  123. package/dist/img/flags/cy.svg +1 -1
  124. package/dist/img/flags/cz.svg +1 -1
  125. package/dist/img/flags/de.svg +1 -1
  126. package/dist/img/flags/dj.svg +1 -1
  127. package/dist/img/flags/dk.svg +1 -1
  128. package/dist/img/flags/dm.svg +1 -1
  129. package/dist/img/flags/do.svg +1 -1
  130. package/dist/img/flags/dz.svg +1 -1
  131. package/dist/img/flags/ec.svg +1 -1
  132. package/dist/img/flags/ee.svg +1 -1
  133. package/dist/img/flags/eg.svg +1 -1
  134. package/dist/img/flags/eh.svg +1 -1
  135. package/dist/img/flags/er.svg +1 -1
  136. package/dist/img/flags/es.svg +1 -1
  137. package/dist/img/flags/et.svg +1 -1
  138. package/dist/img/flags/eu.svg +1 -1
  139. package/dist/img/flags/fi.svg +1 -1
  140. package/dist/img/flags/fj.svg +1 -1
  141. package/dist/img/flags/fk.svg +1 -1
  142. package/dist/img/flags/fm.svg +1 -1
  143. package/dist/img/flags/fo.svg +1 -1
  144. package/dist/img/flags/fr.svg +1 -1
  145. package/dist/img/flags/ga.svg +1 -1
  146. package/dist/img/flags/gb-eng.svg +1 -1
  147. package/dist/img/flags/gb-nir.svg +1 -1
  148. package/dist/img/flags/gb-sct.svg +1 -1
  149. package/dist/img/flags/gb-wls.svg +1 -1
  150. package/dist/img/flags/gb.svg +1 -1
  151. package/dist/img/flags/gd.svg +1 -1
  152. package/dist/img/flags/ge.svg +1 -1
  153. package/dist/img/flags/gf.svg +1 -1
  154. package/dist/img/flags/gg.svg +1 -1
  155. package/dist/img/flags/gh.svg +1 -1
  156. package/dist/img/flags/gi.svg +1 -1
  157. package/dist/img/flags/gl.svg +1 -1
  158. package/dist/img/flags/gm.svg +1 -1
  159. package/dist/img/flags/gn.svg +1 -1
  160. package/dist/img/flags/gp.svg +1 -1
  161. package/dist/img/flags/gq.svg +1 -1
  162. package/dist/img/flags/gr.svg +1 -1
  163. package/dist/img/flags/gs.svg +1 -1
  164. package/dist/img/flags/gt.svg +1 -1
  165. package/dist/img/flags/gu.svg +1 -1
  166. package/dist/img/flags/gw.svg +1 -1
  167. package/dist/img/flags/gy.svg +1 -1
  168. package/dist/img/flags/hk.svg +1 -1
  169. package/dist/img/flags/hm.svg +1 -1
  170. package/dist/img/flags/hn.svg +1 -1
  171. package/dist/img/flags/hr.svg +1 -1
  172. package/dist/img/flags/ht.svg +1 -1
  173. package/dist/img/flags/hu.svg +1 -1
  174. package/dist/img/flags/id.svg +1 -1
  175. package/dist/img/flags/ie.svg +1 -1
  176. package/dist/img/flags/il.svg +1 -1
  177. package/dist/img/flags/im.svg +1 -1
  178. package/dist/img/flags/in.svg +1 -1
  179. package/dist/img/flags/io.svg +1 -1
  180. package/dist/img/flags/iq.svg +1 -1
  181. package/dist/img/flags/ir.svg +1 -1
  182. package/dist/img/flags/is.svg +1 -1
  183. package/dist/img/flags/it.svg +1 -1
  184. package/dist/img/flags/je.svg +1 -1
  185. package/dist/img/flags/jm.svg +1 -1
  186. package/dist/img/flags/jo.svg +1 -1
  187. package/dist/img/flags/jp.svg +1 -1
  188. package/dist/img/flags/ke.svg +1 -1
  189. package/dist/img/flags/kg.svg +1 -1
  190. package/dist/img/flags/kh.svg +1 -1
  191. package/dist/img/flags/ki.svg +1 -1
  192. package/dist/img/flags/km.svg +1 -1
  193. package/dist/img/flags/kn-sk.svg +1 -1
  194. package/dist/img/flags/kn.svg +1 -1
  195. package/dist/img/flags/kp.svg +1 -1
  196. package/dist/img/flags/kr.svg +1 -1
  197. package/dist/img/flags/kw.svg +1 -1
  198. package/dist/img/flags/ky.svg +1 -1
  199. package/dist/img/flags/kz.svg +1 -1
  200. package/dist/img/flags/la.svg +1 -1
  201. package/dist/img/flags/lb.svg +1 -1
  202. package/dist/img/flags/lc.svg +1 -1
  203. package/dist/img/flags/li.svg +1 -1
  204. package/dist/img/flags/lk.svg +1 -1
  205. package/dist/img/flags/lr.svg +1 -1
  206. package/dist/img/flags/ls.svg +1 -1
  207. package/dist/img/flags/lt.svg +1 -1
  208. package/dist/img/flags/lu.svg +1 -1
  209. package/dist/img/flags/lv.svg +1 -1
  210. package/dist/img/flags/ly.svg +1 -1
  211. package/dist/img/flags/ma.svg +1 -1
  212. package/dist/img/flags/mc.svg +1 -1
  213. package/dist/img/flags/md.svg +1 -1
  214. package/dist/img/flags/me.svg +1 -1
  215. package/dist/img/flags/mf.svg +1 -1
  216. package/dist/img/flags/mg.svg +1 -1
  217. package/dist/img/flags/mh.svg +1 -1
  218. package/dist/img/flags/mk.svg +1 -1
  219. package/dist/img/flags/ml.svg +1 -1
  220. package/dist/img/flags/mm.svg +1 -1
  221. package/dist/img/flags/mn.svg +1 -1
  222. package/dist/img/flags/mo.svg +1 -1
  223. package/dist/img/flags/mp.svg +1 -1
  224. package/dist/img/flags/mq.svg +1 -1
  225. package/dist/img/flags/mr.svg +1 -1
  226. package/dist/img/flags/ms.svg +1 -1
  227. package/dist/img/flags/mt.svg +1 -1
  228. package/dist/img/flags/mu.svg +1 -1
  229. package/dist/img/flags/mv.svg +1 -1
  230. package/dist/img/flags/mw.svg +1 -1
  231. package/dist/img/flags/mx.svg +1 -1
  232. package/dist/img/flags/my.svg +1 -1
  233. package/dist/img/flags/mz.svg +1 -1
  234. package/dist/img/flags/na.svg +1 -1
  235. package/dist/img/flags/nc.svg +1 -1
  236. package/dist/img/flags/ne.svg +1 -1
  237. package/dist/img/flags/nf.svg +1 -1
  238. package/dist/img/flags/ng.svg +1 -1
  239. package/dist/img/flags/ni.svg +1 -1
  240. package/dist/img/flags/nl.svg +1 -1
  241. package/dist/img/flags/no.svg +1 -1
  242. package/dist/img/flags/np.svg +1 -1
  243. package/dist/img/flags/nr.svg +1 -1
  244. package/dist/img/flags/nu.svg +1 -1
  245. package/dist/img/flags/nz.svg +1 -1
  246. package/dist/img/flags/om.svg +1 -1
  247. package/dist/img/flags/pa.svg +1 -1
  248. package/dist/img/flags/pe.svg +1 -1
  249. package/dist/img/flags/pf.svg +1 -1
  250. package/dist/img/flags/pg.svg +1 -1
  251. package/dist/img/flags/ph.svg +1 -1
  252. package/dist/img/flags/pk.svg +1 -1
  253. package/dist/img/flags/pl.svg +1 -1
  254. package/dist/img/flags/pm.svg +1 -1
  255. package/dist/img/flags/pn.svg +1 -1
  256. package/dist/img/flags/pr.svg +1 -1
  257. package/dist/img/flags/ps.svg +1 -1
  258. package/dist/img/flags/pt.svg +1 -1
  259. package/dist/img/flags/pw.svg +1 -1
  260. package/dist/img/flags/py.svg +1 -1
  261. package/dist/img/flags/qa.svg +1 -1
  262. package/dist/img/flags/rainbow.svg +1 -1
  263. package/dist/img/flags/re.svg +1 -1
  264. package/dist/img/flags/ro.svg +1 -1
  265. package/dist/img/flags/rs.svg +1 -1
  266. package/dist/img/flags/ru.svg +1 -1
  267. package/dist/img/flags/rw.svg +1 -1
  268. package/dist/img/flags/sa.svg +1 -1
  269. package/dist/img/flags/sb.svg +1 -1
  270. package/dist/img/flags/sc.svg +1 -1
  271. package/dist/img/flags/sd.svg +1 -1
  272. package/dist/img/flags/se.svg +1 -1
  273. package/dist/img/flags/sg.svg +1 -1
  274. package/dist/img/flags/sh.svg +1 -1
  275. package/dist/img/flags/si.svg +1 -1
  276. package/dist/img/flags/sj.svg +1 -1
  277. package/dist/img/flags/sk.svg +1 -1
  278. package/dist/img/flags/sl.svg +1 -1
  279. package/dist/img/flags/sm.svg +1 -1
  280. package/dist/img/flags/sn.svg +1 -1
  281. package/dist/img/flags/so.svg +1 -1
  282. package/dist/img/flags/sr.svg +1 -1
  283. package/dist/img/flags/ss.svg +1 -1
  284. package/dist/img/flags/st.svg +1 -1
  285. package/dist/img/flags/sv.svg +1 -1
  286. package/dist/img/flags/sx.svg +1 -1
  287. package/dist/img/flags/sy.svg +1 -1
  288. package/dist/img/flags/sz.svg +1 -1
  289. package/dist/img/flags/tc.svg +1 -1
  290. package/dist/img/flags/td.svg +1 -1
  291. package/dist/img/flags/tf.svg +1 -1
  292. package/dist/img/flags/tg.svg +1 -1
  293. package/dist/img/flags/th.svg +1 -1
  294. package/dist/img/flags/tj.svg +1 -1
  295. package/dist/img/flags/tk.svg +1 -1
  296. package/dist/img/flags/tl.svg +1 -1
  297. package/dist/img/flags/tm.svg +1 -1
  298. package/dist/img/flags/tn.svg +1 -1
  299. package/dist/img/flags/to.svg +1 -1
  300. package/dist/img/flags/tr.svg +1 -1
  301. package/dist/img/flags/tt.svg +1 -1
  302. package/dist/img/flags/tv.svg +1 -1
  303. package/dist/img/flags/tw.svg +1 -1
  304. package/dist/img/flags/tz.svg +1 -1
  305. package/dist/img/flags/ua.svg +1 -1
  306. package/dist/img/flags/ug.svg +1 -1
  307. package/dist/img/flags/um.svg +1 -1
  308. package/dist/img/flags/unasur.svg +1 -1
  309. package/dist/img/flags/us.svg +1 -1
  310. package/dist/img/flags/uy.svg +1 -1
  311. package/dist/img/flags/uz.svg +1 -1
  312. package/dist/img/flags/va.svg +1 -1
  313. package/dist/img/flags/vc.svg +1 -1
  314. package/dist/img/flags/ve.svg +1 -1
  315. package/dist/img/flags/vg.svg +1 -1
  316. package/dist/img/flags/vi.svg +1 -1
  317. package/dist/img/flags/vn.svg +1 -1
  318. package/dist/img/flags/vu.svg +1 -1
  319. package/dist/img/flags/wf.svg +1 -1
  320. package/dist/img/flags/ws.svg +1 -1
  321. package/dist/img/flags/ye.svg +1 -1
  322. package/dist/img/flags/yt.svg +1 -1
  323. package/dist/img/flags/za.svg +1 -1
  324. package/dist/img/flags/zm.svg +1 -1
  325. package/dist/img/flags/zw.svg +1 -1
  326. package/dist/img/payments/2c2p-dark.svg +1 -5
  327. package/dist/img/payments/2c2p.svg +1 -5
  328. package/dist/img/payments/2checkout-dark.svg +1 -4
  329. package/dist/img/payments/2checkout.svg +1 -4
  330. package/dist/img/payments/ach-transfer-dark.svg +1 -14
  331. package/dist/img/payments/ach-transfer.svg +1 -14
  332. package/dist/img/payments/adyen-dark.svg +1 -8
  333. package/dist/img/payments/adyen.svg +1 -8
  334. package/dist/img/payments/affirm-dark.svg +1 -9
  335. package/dist/img/payments/affirm.svg +1 -9
  336. package/dist/img/payments/afterpay-dark.svg +1 -13
  337. package/dist/img/payments/afterpay.svg +1 -13
  338. package/dist/img/payments/airtm-dark.svg +1 -4
  339. package/dist/img/payments/airtm.svg +1 -4
  340. package/dist/img/payments/airwallex-dark.svg +1 -11
  341. package/dist/img/payments/airwallex.svg +1 -11
  342. package/dist/img/payments/alipay-dark.svg +1 -12
  343. package/dist/img/payments/alipay-plus-dark.svg +1 -9
  344. package/dist/img/payments/alipay-plus.svg +1 -9
  345. package/dist/img/payments/alipay.svg +1 -12
  346. package/dist/img/payments/allegro-pay-dark.svg +1 -5
  347. package/dist/img/payments/allegro-pay.svg +1 -5
  348. package/dist/img/payments/amazon-dark.svg +1 -6
  349. package/dist/img/payments/amazon-pay-dark.svg +1 -7
  350. package/dist/img/payments/amazon-pay.svg +1 -7
  351. package/dist/img/payments/amazon.svg +1 -6
  352. package/dist/img/payments/americanexpress-dark.svg +1 -4
  353. package/dist/img/payments/americanexpress.svg +1 -4
  354. package/dist/img/payments/ant-group-dark.svg +1 -6
  355. package/dist/img/payments/ant-group.svg +1 -23
  356. package/dist/img/payments/applepay-dark.svg +1 -8
  357. package/dist/img/payments/applepay.svg +1 -8
  358. package/dist/img/payments/authorize-dark.svg +1 -17
  359. package/dist/img/payments/authorize.svg +1 -17
  360. package/dist/img/payments/autopay-dark.svg +1 -11
  361. package/dist/img/payments/autopay.svg +1 -11
  362. package/dist/img/payments/bancontact-dark.svg +1 -9
  363. package/dist/img/payments/bancontact.svg +1 -9
  364. package/dist/img/payments/bank-of-america-dark.svg +1 -10
  365. package/dist/img/payments/bank-of-america.svg +1 -10
  366. package/dist/img/payments/barclays-dark.svg +1 -11
  367. package/dist/img/payments/barclays.svg +1 -11
  368. package/dist/img/payments/bbva-dark.svg +1 -4
  369. package/dist/img/payments/bbva.svg +1 -4
  370. package/dist/img/payments/binance-dark.svg +1 -4
  371. package/dist/img/payments/binance-usd-dark.svg +1 -11
  372. package/dist/img/payments/binance-usd.svg +1 -11
  373. package/dist/img/payments/binance.svg +1 -4
  374. package/dist/img/payments/bitcoin-dark.svg +1 -13
  375. package/dist/img/payments/bitcoin.svg +1 -12
  376. package/dist/img/payments/bitpay-dark.svg +1 -4
  377. package/dist/img/payments/bitpay.svg +1 -4
  378. package/dist/img/payments/bkash-dark.svg +1 -16
  379. package/dist/img/payments/bkash.svg +1 -16
  380. package/dist/img/payments/blik-dark.svg +1 -5
  381. package/dist/img/payments/blik.svg +1 -12
  382. package/dist/img/payments/bnb-chain-dark.svg +1 -14
  383. package/dist/img/payments/bnb-chain.svg +1 -14
  384. package/dist/img/payments/bnp-paribas-dark.svg +1 -80
  385. package/dist/img/payments/bnp-paribas.svg +1 -80
  386. package/dist/img/payments/braintree-dark.svg +1 -6
  387. package/dist/img/payments/braintree.svg +1 -6
  388. package/dist/img/payments/brex-dark.svg +1 -4
  389. package/dist/img/payments/brex.svg +1 -4
  390. package/dist/img/payments/capital-one-dark.svg +1 -6
  391. package/dist/img/payments/capital-one.svg +1 -6
  392. package/dist/img/payments/cash-app-dark.svg +1 -8
  393. package/dist/img/payments/cash-app.svg +1 -8
  394. package/dist/img/payments/chase-dark.svg +1 -12
  395. package/dist/img/payments/chase.svg +1 -12
  396. package/dist/img/payments/checkout-com-dark.svg +1 -4
  397. package/dist/img/payments/checkout-com.svg +1 -4
  398. package/dist/img/payments/chime-dark.svg +1 -9
  399. package/dist/img/payments/chime.svg +1 -9
  400. package/dist/img/payments/china-construction-bank-dark.svg +1 -36
  401. package/dist/img/payments/china-construction-bank.svg +1 -36
  402. package/dist/img/payments/cirrus-dark.svg +1 -8
  403. package/dist/img/payments/cirrus.svg +1 -8
  404. package/dist/img/payments/citi-dark.svg +1 -8
  405. package/dist/img/payments/citi.svg +1 -8
  406. package/dist/img/payments/coinbase-dark.svg +1 -4
  407. package/dist/img/payments/coinbase.svg +1 -5
  408. package/dist/img/payments/coinkite-dark.svg +1 -6
  409. package/dist/img/payments/coinkite.svg +1 -6
  410. package/dist/img/payments/crypto-com-dark.svg +1 -8
  411. package/dist/img/payments/crypto-com.svg +1 -8
  412. package/dist/img/payments/deutsche-bank-dark.svg +1 -16
  413. package/dist/img/payments/deutsche-bank.svg +1 -16
  414. package/dist/img/payments/dinersclub-dark.svg +1 -7
  415. package/dist/img/payments/dinersclub.svg +1 -7
  416. package/dist/img/payments/directdebit-dark.svg +1 -4
  417. package/dist/img/payments/directdebit.svg +1 -4
  418. package/dist/img/payments/discover-dark.svg +1 -8
  419. package/dist/img/payments/discover.svg +1 -6
  420. package/dist/img/payments/dwolla-dark.svg +1 -5
  421. package/dist/img/payments/dwolla.svg +1 -5
  422. package/dist/img/payments/easypaisa-dark.svg +1 -14
  423. package/dist/img/payments/easypaisa.svg +1 -14
  424. package/dist/img/payments/ebay-dark.svg +1 -7
  425. package/dist/img/payments/ebay.svg +1 -7
  426. package/dist/img/payments/elo-dark.svg +1 -11
  427. package/dist/img/payments/elo.svg +1 -11
  428. package/dist/img/payments/epayco-dark.svg +1 -5
  429. package/dist/img/payments/epayco.svg +1 -5
  430. package/dist/img/payments/esewa-dark.svg +1 -11
  431. package/dist/img/payments/esewa.svg +1 -12
  432. package/dist/img/payments/ethereum-dark.svg +1 -13
  433. package/dist/img/payments/ethereum.svg +1 -18
  434. package/dist/img/payments/eway-dark.svg +1 -6
  435. package/dist/img/payments/eway.svg +1 -6
  436. package/dist/img/payments/fifth-third-bank-dark.svg +1 -7
  437. package/dist/img/payments/fifth-third-bank.svg +1 -7
  438. package/dist/img/payments/fiserv-dark.svg +1 -11
  439. package/dist/img/payments/fiserv.svg +1 -11
  440. package/dist/img/payments/flutterwave-dark.svg +1 -18
  441. package/dist/img/payments/flutterwave.svg +1 -18
  442. package/dist/img/payments/fonepay-dark.svg +1 -10
  443. package/dist/img/payments/fonepay.svg +1 -10
  444. package/dist/img/payments/gcash-dark.svg +1 -7
  445. package/dist/img/payments/gcash.svg +1 -7
  446. package/dist/img/payments/giropay-dark.svg +1 -13
  447. package/dist/img/payments/giropay.svg +1 -25
  448. package/dist/img/payments/goldman-sachs-dark.svg +1 -4
  449. package/dist/img/payments/goldman-sachs.svg +1 -4
  450. package/dist/img/payments/google-pay-dark.svg +1 -10
  451. package/dist/img/payments/google-pay.svg +1 -10
  452. package/dist/img/payments/googlewallet-dark.svg +1 -7
  453. package/dist/img/payments/googlewallet.svg +1 -7
  454. package/dist/img/payments/grabpay-dark.svg +1 -4
  455. package/dist/img/payments/grabpay.svg +1 -4
  456. package/dist/img/payments/hsbc-dark.svg +1 -12
  457. package/dist/img/payments/hsbc.svg +1 -12
  458. package/dist/img/payments/hubspot-dark.svg +1 -5
  459. package/dist/img/payments/hubspot.svg +1 -5
  460. package/dist/img/payments/huntington-bank-dark.svg +1 -5
  461. package/dist/img/payments/huntington-bank.svg +1 -5
  462. package/dist/img/payments/icbc-dark.svg +1 -8
  463. package/dist/img/payments/icbc.svg +1 -8
  464. package/dist/img/payments/ideal-dark.svg +1 -8
  465. package/dist/img/payments/ideal.svg +1 -7
  466. package/dist/img/payments/imepay-dark.svg +1 -11
  467. package/dist/img/payments/imepay.svg +1 -11
  468. package/dist/img/payments/imoje-dark.svg +1 -7
  469. package/dist/img/payments/imoje.svg +1 -8
  470. package/dist/img/payments/ing-dark.svg +1 -145
  471. package/dist/img/payments/ing.svg +1 -145
  472. package/dist/img/payments/ingenico-dark.svg +1 -4
  473. package/dist/img/payments/ingenico.svg +1 -4
  474. package/dist/img/payments/interac-dark.svg +1 -16
  475. package/dist/img/payments/interac.svg +1 -16
  476. package/dist/img/payments/jazzcash-dark.svg +1 -13
  477. package/dist/img/payments/jazzcash.svg +1 -13
  478. package/dist/img/payments/jcb-dark.svg +1 -8
  479. package/dist/img/payments/jcb.svg +1 -41
  480. package/dist/img/payments/khalti-dark.svg +1 -14
  481. package/dist/img/payments/khalti.svg +1 -14
  482. package/dist/img/payments/klarna-dark.svg +1 -11
  483. package/dist/img/payments/klarna.svg +1 -11
  484. package/dist/img/payments/kraken-dark.svg +1 -5
  485. package/dist/img/payments/kraken.svg +1 -5
  486. package/dist/img/payments/linepay-dark.svg +1 -10
  487. package/dist/img/payments/linepay.svg +1 -11
  488. package/dist/img/payments/litecoin-dark.svg +1 -14
  489. package/dist/img/payments/litecoin.svg +1 -14
  490. package/dist/img/payments/mada-dark.svg +1 -11
  491. package/dist/img/payments/mada.svg +1 -11
  492. package/dist/img/payments/maestro-dark.svg +1 -6
  493. package/dist/img/payments/maestro.svg +1 -6
  494. package/dist/img/payments/mastercard-dark.svg +1 -6
  495. package/dist/img/payments/mastercard.svg +1 -6
  496. package/dist/img/payments/mercado-pago-dark.svg +1 -9
  497. package/dist/img/payments/mercado-pago.svg +1 -9
  498. package/dist/img/payments/mercury-dark.svg +1 -4
  499. package/dist/img/payments/mercury.svg +1 -4
  500. package/dist/img/payments/meta-pay-dark.svg +1 -6
  501. package/dist/img/payments/meta-pay.svg +1 -16
  502. package/dist/img/payments/metamask-dark.svg +1 -40
  503. package/dist/img/payments/metamask.svg +1 -40
  504. package/dist/img/payments/mir-dark.svg +1 -4
  505. package/dist/img/payments/mir.svg +1 -11
  506. package/dist/img/payments/mitsubishi-ufj-dark.svg +1 -5
  507. package/dist/img/payments/mitsubishi-ufj.svg +1 -5
  508. package/dist/img/payments/mobilepay-dark.svg +1 -6
  509. package/dist/img/payments/mobilepay.svg +1 -6
  510. package/dist/img/payments/mollie-dark.svg +1 -4
  511. package/dist/img/payments/mollie.svg +1 -4
  512. package/dist/img/payments/monero-dark.svg +1 -5
  513. package/dist/img/payments/monero.svg +1 -5
  514. package/dist/img/payments/moneygram-dark.svg +1 -12
  515. package/dist/img/payments/moneygram.svg +1 -12
  516. package/dist/img/payments/mpesa-dark.svg +1 -5
  517. package/dist/img/payments/mpesa.svg +1 -5
  518. package/dist/img/payments/ncr-dark.svg +1 -9
  519. package/dist/img/payments/ncr.svg +1 -9
  520. package/dist/img/payments/neteller-dark.svg +1 -4
  521. package/dist/img/payments/neteller.svg +1 -4
  522. package/dist/img/payments/northone-dark.svg +1 -5
  523. package/dist/img/payments/northone.svg +1 -5
  524. package/dist/img/payments/nu-dark.svg +1 -5
  525. package/dist/img/payments/nu.svg +1 -5
  526. package/dist/img/payments/nuvei-dark.svg +1 -9
  527. package/dist/img/payments/nuvei.svg +1 -9
  528. package/dist/img/payments/opensea-dark.svg +1 -11
  529. package/dist/img/payments/opensea.svg +1 -11
  530. package/dist/img/payments/oxxo-dark.svg +1 -8
  531. package/dist/img/payments/oxxo.svg +1 -8
  532. package/dist/img/payments/paybox-dark.svg +1 -4
  533. package/dist/img/payments/paybox.svg +1 -4
  534. package/dist/img/payments/payconiq-dark.svg +1 -4
  535. package/dist/img/payments/payconiq.svg +1 -4
  536. package/dist/img/payments/payka-dark.svg +1 -18
  537. package/dist/img/payments/payka.svg +1 -12
  538. package/dist/img/payments/payline-dark.svg +1 -12
  539. package/dist/img/payments/payline.svg +1 -12
  540. package/dist/img/payments/paynow-dark.svg +1 -15
  541. package/dist/img/payments/paynow.svg +1 -15
  542. package/dist/img/payments/payone-dark.svg +1 -7
  543. package/dist/img/payments/payone.svg +1 -7
  544. package/dist/img/payments/payoneer-dark.svg +1 -4
  545. package/dist/img/payments/payoneer.svg +1 -4
  546. package/dist/img/payments/paypal-dark.svg +1 -8
  547. package/dist/img/payments/paypal.svg +1 -8
  548. package/dist/img/payments/paypay-dark.svg +1 -6
  549. package/dist/img/payments/paypay.svg +1 -6
  550. package/dist/img/payments/paypo-dark.svg +1 -11
  551. package/dist/img/payments/paypo.svg +1 -11
  552. package/dist/img/payments/paysafe-dark.svg +1 -6
  553. package/dist/img/payments/paysafe.svg +1 -6
  554. package/dist/img/payments/paysafecard-dark.svg +1 -4
  555. package/dist/img/payments/paysafecard.svg +1 -4
  556. package/dist/img/payments/paystack-dark.svg +1 -5
  557. package/dist/img/payments/paystack.svg +1 -5
  558. package/dist/img/payments/paytm-dark.svg +1 -8
  559. package/dist/img/payments/paytm.svg +1 -8
  560. package/dist/img/payments/payu-dark.svg +1 -4
  561. package/dist/img/payments/payu.svg +1 -4
  562. package/dist/img/payments/phonepe-dark.svg +1 -6
  563. package/dist/img/payments/phonepe.svg +1 -6
  564. package/dist/img/payments/pix-dark.svg +1 -6
  565. package/dist/img/payments/pix.svg +1 -6
  566. package/dist/img/payments/pnc-bank-dark.svg +1 -8
  567. package/dist/img/payments/pnc-bank.svg +1 -8
  568. package/dist/img/payments/poli-dark.svg +1 -8
  569. package/dist/img/payments/poli.svg +1 -8
  570. package/dist/img/payments/przelewy24-dark.svg +1 -18
  571. package/dist/img/payments/przelewy24.svg +1 -8
  572. package/dist/img/payments/rapyd-dark.svg +1 -8
  573. package/dist/img/payments/rapyd.svg +1 -8
  574. package/dist/img/payments/razorpay-dark.svg +1 -5
  575. package/dist/img/payments/razorpay.svg +1 -5
  576. package/dist/img/payments/revolut-pay-dark.svg +1 -8
  577. package/dist/img/payments/revolut-pay.svg +1 -8
  578. package/dist/img/payments/ripple-dark.svg +1 -5
  579. package/dist/img/payments/ripple.svg +1 -5
  580. package/dist/img/payments/rupay-dark.svg +1 -10
  581. package/dist/img/payments/rupay.svg +1 -10
  582. package/dist/img/payments/samsung-pay-dark.svg +1 -13
  583. package/dist/img/payments/samsung-pay.svg +1 -13
  584. package/dist/img/payments/santander-dark.svg +1 -4
  585. package/dist/img/payments/santander.svg +1 -4
  586. package/dist/img/payments/sepa-dark.svg +1 -5
  587. package/dist/img/payments/sepa.svg +1 -5
  588. package/dist/img/payments/shop-pay-dark.svg +1 -4
  589. package/dist/img/payments/shop-pay.svg +1 -4
  590. package/dist/img/payments/shopify-dark.svg +1 -6
  591. package/dist/img/payments/shopify.svg +1 -7
  592. package/dist/img/payments/skrill-dark.svg +1 -10
  593. package/dist/img/payments/skrill.svg +1 -10
  594. package/dist/img/payments/skycash-dark.svg +1 -10
  595. package/dist/img/payments/skycash.svg +1 -10
  596. package/dist/img/payments/sofort-dark.svg +1 -6
  597. package/dist/img/payments/sofort.svg +1 -6
  598. package/dist/img/payments/solana-dark.svg +1 -20
  599. package/dist/img/payments/solana.svg +1 -20
  600. package/dist/img/payments/spingo-dark.svg +1 -11
  601. package/dist/img/payments/spingo.svg +1 -11
  602. package/dist/img/payments/square-dark.svg +1 -4
  603. package/dist/img/payments/square.svg +1 -4
  604. package/dist/img/payments/stax-dark.svg +1 -5
  605. package/dist/img/payments/stax.svg +1 -5
  606. package/dist/img/payments/stcpay-dark.svg +1 -7
  607. package/dist/img/payments/stcpay.svg +1 -7
  608. package/dist/img/payments/stripe-dark.svg +1 -4
  609. package/dist/img/payments/stripe.svg +1 -4
  610. package/dist/img/payments/sumitomo-mitsui-dark.svg +1 -5
  611. package/dist/img/payments/sumitomo-mitsui.svg +1 -5
  612. package/dist/img/payments/swift-dark.svg +1 -4
  613. package/dist/img/payments/swift.svg +1 -4
  614. package/dist/img/payments/swish-dark.svg +1 -32
  615. package/dist/img/payments/swish.svg +1 -32
  616. package/dist/img/payments/synchrony-dark.svg +1 -5
  617. package/dist/img/payments/synchrony.svg +1 -5
  618. package/dist/img/payments/tether-dark.svg +1 -11
  619. package/dist/img/payments/tether.svg +1 -11
  620. package/dist/img/payments/tpay-dark.svg +1 -10
  621. package/dist/img/payments/tpay.svg +1 -4
  622. package/dist/img/payments/troy-dark.svg +1 -7
  623. package/dist/img/payments/troy.svg +1 -7
  624. package/dist/img/payments/true-usd-dark.svg +1 -5
  625. package/dist/img/payments/true-usd.svg +1 -7
  626. package/dist/img/payments/trustly-dark.svg +1 -11
  627. package/dist/img/payments/trustly.svg +1 -11
  628. package/dist/img/payments/twint-dark.svg +1 -29
  629. package/dist/img/payments/twint.svg +1 -29
  630. package/dist/img/payments/ubs-dark.svg +1 -5
  631. package/dist/img/payments/ubs.svg +1 -5
  632. package/dist/img/payments/unionpay-dark.svg +1 -6
  633. package/dist/img/payments/unionpay.svg +1 -7
  634. package/dist/img/payments/upi-dark.svg +1 -8
  635. package/dist/img/payments/upi.svg +1 -8
  636. package/dist/img/payments/us-bank-dark.svg +1 -13
  637. package/dist/img/payments/us-bank.svg +1 -13
  638. package/dist/img/payments/usdc-dark.svg +1 -4
  639. package/dist/img/payments/usdc.svg +1 -4
  640. package/dist/img/payments/venmo-dark.svg +1 -4
  641. package/dist/img/payments/venmo.svg +1 -4
  642. package/dist/img/payments/verifone-dark.svg +1 -5
  643. package/dist/img/payments/verifone.svg +1 -5
  644. package/dist/img/payments/vipps-dark.svg +1 -8
  645. package/dist/img/payments/vipps.svg +1 -8
  646. package/dist/img/payments/visa-dark.svg +1 -4
  647. package/dist/img/payments/visa.svg +1 -4
  648. package/dist/img/payments/we-chat-pay-dark.svg +1 -4
  649. package/dist/img/payments/we-chat-pay.svg +1 -4
  650. package/dist/img/payments/webmoney-dark.svg +1 -5
  651. package/dist/img/payments/webmoney.svg +1 -5
  652. package/dist/img/payments/wells-fargo-dark.svg +1 -4
  653. package/dist/img/payments/wells-fargo.svg +1 -4
  654. package/dist/img/payments/westernunion-dark.svg +1 -18
  655. package/dist/img/payments/westernunion.svg +1 -18
  656. package/dist/img/payments/wire-transfer-dark.svg +1 -32
  657. package/dist/img/payments/wire-transfer.svg +1 -32
  658. package/dist/img/payments/wise-dark.svg +1 -4
  659. package/dist/img/payments/wise.svg +1 -4
  660. package/dist/img/payments/worldpay-dark.svg +1 -4
  661. package/dist/img/payments/worldpay.svg +1 -5
  662. package/dist/img/payments/zelle-dark.svg +1 -9
  663. package/dist/img/payments/zelle.svg +1 -8
  664. package/dist/img/social/apple-gray.svg +1 -3
  665. package/dist/img/social/apple.svg +1 -3
  666. package/dist/img/social/discord-gray.svg +1 -3
  667. package/dist/img/social/discord.svg +1 -3
  668. package/dist/img/social/dribbble-gray.svg +1 -3
  669. package/dist/img/social/dribbble.svg +1 -4
  670. package/dist/img/social/facebook-gray.svg +1 -3
  671. package/dist/img/social/facebook.svg +1 -4
  672. package/dist/img/social/figma-gray.svg +1 -3
  673. package/dist/img/social/figma.svg +1 -7
  674. package/dist/img/social/github-gray.svg +1 -10
  675. package/dist/img/social/github.svg +1 -10
  676. package/dist/img/social/google-gray.svg +1 -3
  677. package/dist/img/social/google.svg +1 -6
  678. package/dist/img/social/instagram-gray.svg +1 -5
  679. package/dist/img/social/instagram.svg +1 -18
  680. package/dist/img/social/linkedin-gray.svg +1 -3
  681. package/dist/img/social/linkedin.svg +1 -3
  682. package/dist/img/social/medium-gray.svg +1 -5
  683. package/dist/img/social/medium.svg +1 -5
  684. package/dist/img/social/meta-gray.svg +1 -5
  685. package/dist/img/social/meta.svg +1 -17
  686. package/dist/img/social/metamask-gray.svg +1 -12
  687. package/dist/img/social/metamask.svg +1 -14
  688. package/dist/img/social/pinterest-gray.svg +1 -3
  689. package/dist/img/social/pinterest.svg +1 -4
  690. package/dist/img/social/reddit-gray.svg +1 -6
  691. package/dist/img/social/reddit.svg +1 -11
  692. package/dist/img/social/signal-gray.svg +1 -10
  693. package/dist/img/social/signal.svg +1 -10
  694. package/dist/img/social/skype-gray.svg +1 -3
  695. package/dist/img/social/skype.svg +1 -3
  696. package/dist/img/social/snapchat-gray.svg +1 -10
  697. package/dist/img/social/snapchat.svg +1 -11
  698. package/dist/img/social/spotify-gray.svg +1 -3
  699. package/dist/img/social/spotify.svg +1 -3
  700. package/dist/img/social/telegram-gray.svg +1 -3
  701. package/dist/img/social/telegram.svg +1 -10
  702. package/dist/img/social/tiktok-gray.svg +1 -3
  703. package/dist/img/social/tiktok.svg +1 -5
  704. package/dist/img/social/tumblr-gray.svg +1 -3
  705. package/dist/img/social/tumblr.svg +1 -3
  706. package/dist/img/social/twitch-gray.svg +1 -5
  707. package/dist/img/social/twitch.svg +1 -6
  708. package/dist/img/social/vk-gray.svg +1 -3
  709. package/dist/img/social/vk.svg +1 -4
  710. package/dist/img/social/x-gray.svg +1 -3
  711. package/dist/img/social/x.svg +1 -3
  712. package/dist/img/social/youtube-gray.svg +1 -3
  713. package/dist/img/social/youtube.svg +1 -11
  714. package/dist/js/tabler-theme.esm.js +26 -9
  715. package/dist/js/tabler-theme.esm.js.map +1 -1
  716. package/dist/js/tabler-theme.esm.min.js +2 -2
  717. package/dist/js/tabler-theme.esm.min.js.map +1 -1
  718. package/dist/js/tabler-theme.js +26 -9
  719. package/dist/js/tabler-theme.js.map +1 -1
  720. package/dist/js/tabler-theme.min.js +2 -2
  721. package/dist/js/tabler-theme.min.js.map +1 -1
  722. package/dist/js/tabler.esm.js +6683 -4069
  723. package/dist/js/tabler.esm.js.map +1 -1
  724. package/dist/js/tabler.esm.min.js +2 -2
  725. package/dist/js/tabler.esm.min.js.map +1 -1
  726. package/dist/js/tabler.js +6694 -4069
  727. package/dist/js/tabler.js.map +1 -1
  728. package/dist/js/tabler.min.js +2 -2
  729. package/dist/js/tabler.min.js.map +1 -1
  730. package/dist/libs/vanilla-calendar-pro/LICENSE +21 -0
  731. package/dist/libs/vanilla-calendar-pro/index.js +2 -0
  732. package/dist/types/src/autosize.d.ts +32 -1
  733. package/dist/types/src/bootstrap/alert.d.ts +2 -0
  734. package/dist/types/src/bootstrap/button.d.ts +3 -0
  735. package/dist/types/src/bootstrap/carousel.d.ts +16 -3
  736. package/dist/types/src/bootstrap/collapse.d.ts +13 -3
  737. package/dist/types/src/bootstrap/dom/event-handler.d.ts +7 -4
  738. package/dist/types/src/bootstrap/dropdown.d.ts +30 -7
  739. package/dist/types/src/bootstrap/modal.d.ts +12 -8
  740. package/dist/types/src/bootstrap/offcanvas.d.ts +12 -8
  741. package/dist/types/src/bootstrap/popover.d.ts +13 -9
  742. package/dist/types/src/bootstrap/scrollspy.d.ts +17 -3
  743. package/dist/types/src/bootstrap/tab.d.ts +2 -0
  744. package/dist/types/src/bootstrap/toast.d.ts +12 -3
  745. package/dist/types/src/bootstrap/tooltip.d.ts +57 -19
  746. package/dist/types/src/bootstrap/types.d.ts +25 -1
  747. package/dist/types/src/bootstrap/util/backdrop.d.ts +2 -2
  748. package/dist/types/src/bootstrap/util/component-functions.d.ts +22 -2
  749. package/dist/types/src/bootstrap/util/focustrap.d.ts +2 -2
  750. package/dist/types/src/bootstrap/util/index.d.ts +5 -1
  751. package/dist/types/src/bootstrap/util/swipe.d.ts +2 -2
  752. package/dist/types/src/bootstrap/util/template-factory.d.ts +2 -2
  753. package/dist/types/src/clipboard.d.ts +48 -0
  754. package/dist/types/src/confetti.d.ts +60 -0
  755. package/dist/types/src/countup.d.ts +66 -1
  756. package/dist/types/src/datepicker.d.ts +120 -0
  757. package/dist/types/src/deprecated.d.ts +11 -0
  758. package/dist/types/src/input-mask.d.ts +43 -1
  759. package/dist/types/src/otp-input.d.ts +75 -0
  760. package/dist/types/src/sortable.d.ts +41 -1
  761. package/dist/types/src/sparkline.d.ts +67 -0
  762. package/dist/types/src/strength.d.ts +53 -0
  763. package/dist/types/src/switch-icon.d.ts +32 -1
  764. package/dist/types/src/theme-config.d.ts +3 -1
  765. package/dist/types/tabler.d.ts +18 -1
  766. package/js/src/autosize.ts +141 -7
  767. package/js/src/bootstrap/alert.ts +20 -0
  768. package/js/src/bootstrap/base-component.ts +13 -3
  769. package/js/src/bootstrap/button.ts +16 -0
  770. package/js/src/bootstrap/carousel.ts +42 -7
  771. package/js/src/bootstrap/collapse.ts +38 -6
  772. package/js/src/bootstrap/dom/event-handler.ts +50 -16
  773. package/js/src/bootstrap/dom/manipulator.ts +1 -1
  774. package/js/src/bootstrap/dropdown.ts +64 -23
  775. package/js/src/bootstrap/modal.ts +39 -14
  776. package/js/src/bootstrap/offcanvas.ts +36 -11
  777. package/js/src/bootstrap/popover.ts +35 -9
  778. package/js/src/bootstrap/scrollspy.ts +38 -7
  779. package/js/src/bootstrap/tab.ts +20 -1
  780. package/js/src/bootstrap/toast.ts +31 -5
  781. package/js/src/bootstrap/tooltip.ts +109 -53
  782. package/js/src/bootstrap/types.ts +30 -1
  783. package/js/src/bootstrap/util/backdrop.ts +1 -1
  784. package/js/src/bootstrap/util/component-functions.ts +74 -5
  785. package/js/src/bootstrap/util/focustrap.ts +2 -2
  786. package/js/src/bootstrap/util/index.ts +59 -2
  787. package/js/src/bootstrap/util/swipe.ts +3 -3
  788. package/js/src/bootstrap/util/template-factory.ts +2 -2
  789. package/js/src/clipboard.ts +221 -0
  790. package/js/src/confetti.ts +474 -0
  791. package/js/src/countup.ts +353 -29
  792. package/js/src/datepicker.ts +791 -0
  793. package/js/src/deprecated.ts +28 -0
  794. package/js/src/dropdown.ts +12 -5
  795. package/js/src/global.d.ts +14 -13
  796. package/js/src/input-mask.ts +128 -8
  797. package/js/src/otp-input.ts +519 -0
  798. package/js/src/popover.ts +13 -7
  799. package/js/src/sidebar.ts +14 -6
  800. package/js/src/sortable.ts +120 -15
  801. package/js/src/sparkline.ts +618 -0
  802. package/js/src/strength.ts +290 -0
  803. package/js/src/switch-icon.ts +180 -9
  804. package/js/src/tab.ts +17 -7
  805. package/js/src/theme-config.ts +3 -1
  806. package/js/src/toast.ts +19 -11
  807. package/js/src/tooltip.ts +16 -7
  808. package/js/tabler-theme.ts +30 -8
  809. package/js/tabler.ts +21 -2
  810. package/libs.json +45 -109
  811. package/package.json +40 -29
  812. package/scss/_config.scss +1 -0
  813. package/scss/_core.scss +6 -0
  814. package/scss/_deprecated-props.scss +40 -0
  815. package/scss/_deprecated.scss +153 -0
  816. package/scss/_extends.scss +6 -1
  817. package/scss/_maps.scss +10 -11
  818. package/scss/_mixins.scss +1 -0
  819. package/scss/_props.scss +40 -6
  820. package/scss/_settings.scss +3 -1
  821. package/scss/_utilities-marketing.scss +1 -2
  822. package/scss/_utilities.scss +62 -24
  823. package/scss/_variables-dark.scss +31 -42
  824. package/scss/_variables-deprecated.scss +60 -0
  825. package/scss/_variables.scss +252 -189
  826. package/scss/bootstrap/_buttons.scss +6 -33
  827. package/scss/bootstrap/_carousel.scss +6 -7
  828. package/scss/bootstrap/_list-group.scss +28 -14
  829. package/scss/bootstrap/_nav.scss +2 -2
  830. package/scss/bootstrap/_navbar.scss +6 -7
  831. package/scss/bootstrap/_offcanvas.scss +2 -0
  832. package/scss/bootstrap/_pagination.scss +7 -3
  833. package/scss/bootstrap/_reboot.scss +3 -3
  834. package/scss/bootstrap/_root.scss +10 -33
  835. package/scss/bootstrap/_tables.scss +7 -2
  836. package/scss/bootstrap/forms/_floating-labels.scss +1 -1
  837. package/scss/bootstrap/forms/_form-check.scss +54 -42
  838. package/scss/bootstrap/forms/_form-control.scss +4 -8
  839. package/scss/bootstrap/forms/_form-range.scss +4 -2
  840. package/scss/bootstrap/forms/_form-select.scss +4 -7
  841. package/scss/helpers/_index.scss +11 -4
  842. package/scss/layout/_accessibility.scss +2 -1
  843. package/scss/layout/_core.scss +0 -8
  844. package/scss/layout/_navbar.scss +130 -46
  845. package/scss/layout/_page.scss +15 -2
  846. package/scss/layout/_root.scss +4 -3
  847. package/scss/marketing/_hero.scss +0 -11
  848. package/scss/mixins/_deprecated.scss +110 -0
  849. package/scss/mixins/_functions.scss +67 -113
  850. package/scss/mixins/_mixins.scss +41 -8
  851. package/scss/mixins/bootstrap/_caret.scss +7 -6
  852. package/scss/mixins/bootstrap/_color-mode.scss +6 -0
  853. package/scss/mixins/bootstrap/_forms.scss +10 -11
  854. package/scss/mixins/bootstrap/_gradients.scss +1 -1
  855. package/scss/mixins/bootstrap/_table-variants.scss +4 -5
  856. package/scss/tabler-props.scss +5 -0
  857. package/scss/tabler-themes.scss +67 -66
  858. package/scss/tabler-vendors.scss +3 -1
  859. package/scss/tabler.scss +2 -0
  860. package/scss/ui/_accordion.scss +24 -31
  861. package/scss/ui/_alerts.scss +29 -8
  862. package/scss/ui/_avatars.scss +3 -1
  863. package/scss/ui/_badges.scss +2 -0
  864. package/scss/ui/_breadcrumbs.scss +2 -0
  865. package/scss/ui/_buttons.scss +83 -58
  866. package/scss/ui/_calendars.scss +4 -5
  867. package/scss/ui/_cards.scss +46 -29
  868. package/scss/ui/_carousel.scss +1 -1
  869. package/scss/ui/_chat.scss +2 -0
  870. package/scss/ui/_close.scss +5 -2
  871. package/scss/ui/_datagrid.scss +2 -0
  872. package/scss/ui/_datepicker.scss +425 -0
  873. package/scss/ui/_dropdowns.scss +5 -1
  874. package/scss/ui/_empty.scss +2 -0
  875. package/scss/ui/_forms.scss +33 -47
  876. package/scss/ui/_icons.scss +2 -0
  877. package/scss/ui/_legend.scss +145 -2
  878. package/scss/ui/_lists.scss +3 -3
  879. package/scss/ui/_markdown.scss +1 -0
  880. package/scss/ui/_modals.scss +20 -1
  881. package/scss/ui/_nav.scss +3 -3
  882. package/scss/ui/_offcanvas.scss +47 -0
  883. package/scss/ui/_patterns.scss +39 -18
  884. package/scss/ui/_progress.scss +5 -2
  885. package/scss/ui/_ribbons.scss +6 -2
  886. package/scss/ui/_segmented.scss +1 -1
  887. package/scss/ui/_signal.scss +57 -0
  888. package/scss/ui/_sortable.scss +73 -0
  889. package/scss/ui/_sparkline.scss +73 -0
  890. package/scss/ui/_stars.scss +2 -0
  891. package/scss/ui/_status.scss +2 -2
  892. package/scss/ui/_steps.scss +2 -0
  893. package/scss/ui/_switch-icon.scss +67 -11
  894. package/scss/ui/_tables.scss +3 -3
  895. package/scss/ui/_tags.scss +2 -0
  896. package/scss/ui/_timeline.scss +2 -0
  897. package/scss/ui/_tracking.scss +2 -0
  898. package/scss/ui/_type.scss +12 -4
  899. package/scss/ui/forms/_form-check.scss +10 -2
  900. package/scss/ui/forms/_form-colorinput.scss +4 -3
  901. package/scss/ui/forms/_form-custom.scss +0 -13
  902. package/scss/ui/forms/_form-imagecheck.scss +4 -3
  903. package/scss/ui/forms/_form-otp.scss +171 -0
  904. package/scss/ui/forms/_form-selectgroup.scss +7 -7
  905. package/scss/ui/forms/_strength.scss +63 -0
  906. package/scss/ui/forms/_validation.scss +5 -0
  907. package/scss/utils/_background.scss +2 -2
  908. package/scss/utils/_colors.scss +17 -14
  909. package/scss/vendor/_apexcharts.scss +10 -1
  910. package/scss/vendor/_coloris.scss +10 -3
  911. package/scss/vendor/_fslightbox.scss +2 -2
  912. package/scss/vendor/_jsvectormap.scss +1 -1
  913. package/scss/vendor/_nouislider.scss +2 -1
  914. package/scss/vendor/_tom-select.scss +84 -7
  915. package/dist/types/src/tabler.d.ts +0 -3
  916. package/js/src/tabler.ts +0 -17
  917. package/js/tests/helpers/fixture.ts +0 -33
  918. package/js/tests/unit/alert.spec.ts +0 -176
  919. package/js/tests/unit/base-component.spec.ts +0 -166
  920. package/js/tests/unit/button.spec.ts +0 -167
  921. package/js/tests/unit/carousel.spec.ts +0 -546
  922. package/js/tests/unit/collapse.spec.ts +0 -791
  923. package/js/tests/unit/dom/data.spec.ts +0 -180
  924. package/js/tests/unit/dom/event-handler.spec.ts +0 -460
  925. package/js/tests/unit/dom/manipulator.spec.ts +0 -201
  926. package/js/tests/unit/dom/selector-engine.spec.ts +0 -300
  927. package/js/tests/unit/dropdown.spec.ts +0 -1095
  928. package/js/tests/unit/modal.spec.ts +0 -629
  929. package/js/tests/unit/offcanvas.spec.ts +0 -434
  930. package/js/tests/unit/popover.spec.ts +0 -253
  931. package/js/tests/unit/scrollspy.spec.ts +0 -634
  932. package/js/tests/unit/sidebar.spec.ts +0 -118
  933. package/js/tests/unit/tab.spec.ts +0 -775
  934. package/js/tests/unit/tabler-theme.spec.ts +0 -100
  935. package/js/tests/unit/toast.spec.ts +0 -514
  936. package/js/tests/unit/tooltip.spec.ts +0 -679
  937. package/js/tests/unit/util/backdrop.spec.ts +0 -213
  938. package/js/tests/unit/util/component-functions.spec.ts +0 -88
  939. package/js/tests/unit/util/config.spec.ts +0 -150
  940. package/js/tests/unit/util/focustrap.spec.ts +0 -232
  941. package/js/tests/unit/util/index.spec.ts +0 -478
  942. package/js/tests/unit/util/sanitizer.spec.ts +0 -118
  943. package/js/tests/unit/util/scrollbar.spec.ts +0 -202
  944. package/js/tests/unit/util/swipe.spec.ts +0 -319
  945. package/js/tests/unit/util/template-factory.spec.ts +0 -233
  946. package/scss/tests/_add-subtract.test.scss +0 -48
  947. package/scss/tests/_border-radius.test.scss +0 -23
  948. package/scss/tests/_box-shadow.test.scss +0 -71
  949. package/scss/tests/_breakpoints.test.scss +0 -50
  950. package/scss/tests/_cards.test.scss +0 -31
  951. package/scss/tests/_caret.test.scss +0 -115
  952. package/scss/tests/_color-contrast.test.scss +0 -24
  953. package/scss/tests/_color-mode.test.scss +0 -28
  954. package/scss/tests/_color.test.scss +0 -44
  955. package/scss/tests/_colors-misc.test.scss +0 -80
  956. package/scss/tests/_css-var.test.scss +0 -37
  957. package/scss/tests/_divide.test.scss +0 -45
  958. package/scss/tests/_escape-svg.test.scss +0 -18
  959. package/scss/tests/_generate-utility.test.scss +0 -245
  960. package/scss/tests/_grid.test.scss +0 -153
  961. package/scss/tests/_maps.test.scss +0 -76
  962. package/scss/tests/_media-breakpoint.test.scss +0 -202
  963. package/scss/tests/_mixins-bootstrap.test.scss +0 -55
  964. package/scss/tests/_mixins.test.scss +0 -208
  965. package/scss/tests/_rfs.test.scss +0 -30
  966. package/scss/tests/_str-replace.test.scss +0 -34
  967. package/scss/tests/_transition.test.scss +0 -43
@@ -0,0 +1,791 @@
1
+ /**
2
+ * --------------------------------------------------------------------------
3
+ * Tabler datepicker.ts
4
+ * Licensed under MIT (https://github.com/tabler/tabler/blob/dev/LICENSE)
5
+ * --------------------------------------------------------------------------
6
+ */
7
+
8
+ import type { Calendar, CalendarExtension, Options, Range } from 'vanilla-calendar-pro'
9
+ import BaseComponent from './bootstrap/base-component'
10
+ import EventHandler from './bootstrap/dom/event-handler'
11
+ import SelectorEngine from './bootstrap/dom/selector-engine'
12
+ import { initAll } from './bootstrap/util/component-functions'
13
+ import { getElement, isDisabled } from './bootstrap/util/index'
14
+ import type { ElementSelector } from './bootstrap/types'
15
+
16
+ /**
17
+ * Constants
18
+ */
19
+
20
+ const NAME = 'datepicker'
21
+ const DATA_KEY = `bs.${NAME}`
22
+ const EVENT_KEY = `.${DATA_KEY}`
23
+ const DATA_API_KEY = '.data-api'
24
+
25
+ const EVENT_CHANGE = `change${EVENT_KEY}`
26
+ const EVENT_SHOW = `show${EVENT_KEY}`
27
+ const EVENT_SHOWN = `shown${EVENT_KEY}`
28
+ const EVENT_HIDE = `hide${EVENT_KEY}`
29
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`
30
+ const EVENT_FOCUSIN = `focusin${EVENT_KEY}`
31
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
32
+ const EVENT_FOCUSIN_DATA_API = `focusin${EVENT_KEY}${DATA_API_KEY}`
33
+
34
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="datepicker"], [data-tblr-toggle="datepicker"]'
35
+ const SELECTOR_DISPLAY = '[data-bs-datepicker-display], [data-tblr-datepicker-display]'
36
+ const SELECTOR_INPUT_WRAPPER = '.input-icon, .input-group'
37
+ const SELECTOR_BOUND_INPUT = 'input[type="hidden"], input[name]'
38
+
39
+ const HIDE_DELAY = 100 // ms delay before hiding after selection
40
+
41
+ const DATE_PATTERN = /^(\d{4})-(\d{2})-(\d{2})$/
42
+
43
+ // Vanilla Calendar Pro 3.4 moved several months, the time picker, week
44
+ // numbers, popups and animation into extensions that must be registered when
45
+ // the calendar is created, or its constructor throws. The library is loaded
46
+ // as a whole on `window`, so every extension it exports is registered;
47
+ // 3.3 exports none and gets no `extensions` option.
48
+ const EXTENSION_NAMES = ['annotations', 'months', 'motion', 'time', 'weeks'] as const
49
+
50
+ const writtenSelections = new WeakMap<HTMLElement, { text: string; dates: string[] }>()
51
+
52
+ // The public API is typed with local copies of the Vanilla Calendar Pro types.
53
+ // `vanilla-calendar-pro` is an optional peer dependency, so the published
54
+ // `dist/types` must not import it: a project that never loads the datepicker
55
+ // would otherwise fail to type-check with TS2307. The unions match the
56
+ // plugin's own, so a bad value is still a compile error. Members that need the
57
+ // plugin's full types carry an internal JSDoc tag and are left out of
58
+ // `dist/types` by `stripInternal` (the tag must not appear in plain comments,
59
+ // or TypeScript strips the declaration that follows).
60
+ type DateAny = Date | number | `${number}-${string}-${string}` | 'today'
61
+ type DatesArr = Array<Date | number | string>
62
+ type DateMode = 'single' | 'multiple' | 'multiple-ranged'
63
+ type MonthsCount = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
64
+ type PositionToInput = 'auto' | 'left' | 'center' | 'right' | ['bottom' | 'top', 'left' | 'center' | 'right']
65
+ type WeekDayID = 0 | 1 | 2 | 3 | 4 | 5 | 6
66
+
67
+ /**
68
+ * The part of a Vanilla Calendar Pro instance the `calendar` getter promises.
69
+ * Cast it to `Calendar` from `vanilla-calendar-pro` for the full type.
70
+ */
71
+ interface CalendarInstance {
72
+ // Loosely typed on purpose: the plugin's context is large and version-specific.
73
+ context: Record<string, any>
74
+ init(): unknown
75
+ update(resetOptions?: object): unknown
76
+ set(options: object, resetOptions?: object): unknown
77
+ show(): unknown
78
+ hide(): unknown
79
+ destroy(): unknown
80
+ }
81
+
82
+ type ComponentConfig = {
83
+ /** 'light', 'dark' or 'auto' for the popup only; null inherits from the nearest `[data-bs-theme]` */
84
+ datepickerTheme: string | null
85
+ dateMin: DateAny | null
86
+ dateMax: DateAny | null
87
+ /** `Intl.DateTimeFormat` options, or a function(date, locale) returning the text shown in the field */
88
+ dateFormat: Intl.DateTimeFormatOptions | ((date: Date, locale: string | undefined) => string) | null
89
+ /** element that shows the formatted date; a button uses itself or its `[data-bs-datepicker-display]` child */
90
+ displayElement: string | HTMLElement | boolean | null
91
+ displayMonthsCount: MonthsCount
92
+ /** 0 = Sunday, 1 = Monday */
93
+ firstWeekday: WeekDayID
94
+ /** render the calendar in place instead of a popup */
95
+ inline: boolean
96
+ locale: string
97
+ /** element the popup is aligned with; defaults to the `.input-icon` / `.input-group` wrapper or the element */
98
+ positionElement: string | HTMLElement | null
99
+ /** preselected dates as `YYYY-MM-DD` */
100
+ selectedDates: string[]
101
+ selectionMode: DateMode
102
+ placement: PositionToInput
103
+ /** pass-through for any Vanilla Calendar Pro option */
104
+ vcpOptions: object
105
+ }
106
+
107
+ type ComponentConfigInput = Partial<ComponentConfig> & Record<string, unknown>
108
+
109
+ type ChangeEventArgs = { dates: string[]; event: MouseEvent }
110
+
111
+ const Default: ComponentConfig = {
112
+ datepickerTheme: null,
113
+ dateMin: null,
114
+ dateMax: null,
115
+ dateFormat: null,
116
+ displayElement: null,
117
+ displayMonthsCount: 1,
118
+ firstWeekday: 1,
119
+ inline: false,
120
+ locale: 'default',
121
+ positionElement: null,
122
+ selectedDates: [],
123
+ selectionMode: 'single',
124
+ placement: 'left',
125
+ vcpOptions: {},
126
+ }
127
+
128
+ const DefaultType: Record<keyof ComponentConfig, string> = {
129
+ datepickerTheme: '(null|string)',
130
+ dateMin: '(null|string|number|object|date)',
131
+ dateMax: '(null|string|number|object|date)',
132
+ dateFormat: '(null|object|function)',
133
+ displayElement: '(null|string|element|boolean)',
134
+ displayMonthsCount: 'number',
135
+ firstWeekday: 'number',
136
+ inline: 'boolean',
137
+ locale: 'string',
138
+ positionElement: '(null|string|element)',
139
+ selectedDates: 'array',
140
+ selectionMode: 'string',
141
+ placement: 'string',
142
+ vcpOptions: 'object',
143
+ }
144
+
145
+ // Delegated Data API handlers run in the capture phase, before the plugin's
146
+ // own click listener, which opens the popup from a `setTimeout`. Two nested
147
+ // timeouts are the first point that is after it for certain.
148
+ const afterPluginTimers = (callback: () => void): void => {
149
+ setTimeout(() => setTimeout(callback))
150
+ }
151
+
152
+ /**
153
+ * Class definition
154
+ *
155
+ * Wraps Vanilla Calendar Pro (https://vanilla-calendar.pro), loaded separately
156
+ * as `window.VanillaCalendarPro`. Without the plugin the component is inert.
157
+ * Same options, methods and events as Bootstrap 6's Datepicker, so markup
158
+ * written for one works with the other.
159
+ */
160
+
161
+ class Datepicker extends BaseComponent {
162
+ declare _element: HTMLElement & { value: string }
163
+ declare _config: ComponentConfig
164
+ /** @internal */
165
+ _calendar: Calendar | null = null
166
+ _isShown = false
167
+ // The plugin opens and closes the popup on its own too (its click and focus
168
+ // listeners, Escape, a click outside), so `onShow` and `onHide` are what
169
+ // tracks the state and fires the events; these flags tell them who asked.
170
+ _isShowing = false
171
+ _isHiding = false
172
+ _isSilent = false
173
+ _skipPluginShow = false
174
+ _resolveShown: (() => void) | null = null
175
+ _hideTimeout = 0
176
+ _isInput = false
177
+ _isInline = false
178
+ _boundInput: HTMLInputElement | null = null
179
+ _positionElement: HTMLElement | null = null
180
+ _displayElement: HTMLElement | false | null = null
181
+ _themeObserver: MutationObserver | null = null
182
+ _onFocusIn: ((event: Event) => void) | null = null
183
+ _onResize = (): void => this._alignToPositionElement()
184
+ // The plugin builds a popup lazily, so its context has no selection until
185
+ // the first show; this mirror answers `getSelectedDates()` before that.
186
+ _selectedDates: string[] = []
187
+
188
+ constructor(element: ElementSelector, config?: ComponentConfigInput) {
189
+ super(element, config)
190
+
191
+ if (!this._element || !window.VanillaCalendarPro) {
192
+ return
193
+ }
194
+
195
+ this._initCalendar()
196
+ }
197
+
198
+ // Getters
199
+ static get Default(): ComponentConfig {
200
+ return Default
201
+ }
202
+
203
+ static get DefaultType(): Record<keyof ComponentConfig, string> {
204
+ return DefaultType
205
+ }
206
+
207
+ static get NAME(): string {
208
+ return NAME
209
+ }
210
+
211
+ /** The Vanilla Calendar Pro instance, for options the component does not expose. */
212
+ get calendar(): CalendarInstance | null {
213
+ return this._calendar
214
+ }
215
+
216
+ // Public
217
+ toggle(): Promise<void> {
218
+ if (this._config.inline) {
219
+ return Promise.resolve() // Inline calendars are always visible
220
+ }
221
+
222
+ return this._isShown ? this.hide() : this.show()
223
+ }
224
+
225
+ async show(): Promise<void> {
226
+ if (this._config.inline) {
227
+ return // Inline calendars are always visible
228
+ }
229
+
230
+ // The first `calendar.show()` clicks the element to build the popup, and
231
+ // that click comes back here through the Data API; `_isShowing` stops it.
232
+ if (!this._calendar || isDisabled(this._element) || this._isShown || this._isShowing) {
233
+ return
234
+ }
235
+
236
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)
237
+ if (showEvent?.defaultPrevented) {
238
+ return
239
+ }
240
+
241
+ this._isShowing = true
242
+ this._skipPluginShow = false
243
+ this._calendar.show()
244
+
245
+ // The first show builds the popup and opens it a tick later
246
+ if (!this._isShown) {
247
+ await new Promise<void>((resolve) => {
248
+ this._resolveShown = resolve
249
+ afterPluginTimers(resolve)
250
+ })
251
+ }
252
+
253
+ this._resolveShown = null
254
+ this._isShowing = false
255
+ }
256
+
257
+ async hide(): Promise<void> {
258
+ if (this._config.inline) {
259
+ return // Inline calendars are always visible
260
+ }
261
+
262
+ if (!this._calendar || !this._isShown) {
263
+ return
264
+ }
265
+
266
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)
267
+ if (hideEvent?.defaultPrevented) {
268
+ return
269
+ }
270
+
271
+ // On a click on a button trigger the plugin's own listener runs next and
272
+ // queues a `show()`; without this the popup would open again right away.
273
+ this._skipPluginShow = true
274
+ afterPluginTimers(() => {
275
+ this._skipPluginShow = false
276
+ })
277
+
278
+ this._isHiding = true
279
+ this._calendar.hide()
280
+ this._isHiding = false
281
+ }
282
+
283
+ dispose(): void {
284
+ window.clearTimeout(this._hideTimeout)
285
+ this._themeObserver?.disconnect()
286
+ window.removeEventListener('resize', this._onResize)
287
+
288
+ if (this._onFocusIn) {
289
+ EventHandler.off(document, EVENT_FOCUSIN, this._onFocusIn)
290
+ }
291
+
292
+ if (this._calendar) {
293
+ this._calendar.destroy()
294
+
295
+ // The plugin swaps the element for a clone taken at init, which has the
296
+ // value and listeners from back then. The live element goes back in;
297
+ // an inline calendar keeps the clone (its original children), so only
298
+ // the bound input moves back into it.
299
+ const clone = this._calendar.context.mainElement as HTMLElement | undefined
300
+ if (clone && clone !== this._element && clone.isConnected) {
301
+ if (this._isInput) {
302
+ clone.replaceWith(this._element)
303
+ } else if (this._boundInput) {
304
+ const copy = SelectorEngine.findOne(SELECTOR_BOUND_INPUT, clone)
305
+ if (copy) {
306
+ copy.replaceWith(this._boundInput)
307
+ } else {
308
+ clone.append(this._boundInput)
309
+ }
310
+ }
311
+ }
312
+ }
313
+
314
+ super.dispose()
315
+ }
316
+
317
+ getSelectedDates(): string[] {
318
+ const dates = this._calendar?.context?.selectedDates
319
+ return dates && dates.length > 0 ? [...dates] : [...this._selectedDates]
320
+ }
321
+
322
+ setSelectedDates(dates: DatesArr): void {
323
+ this._selectedDates = dates.map((date) => this._toIsoDate(date))
324
+ this._calendar?.set({ selectedDates: this._selectedDates, ...this._monthOf(this._selectedDates[0]) })
325
+ this._writeSelection(this._selectedDates)
326
+ }
327
+
328
+ // Private
329
+ _initCalendar(): void {
330
+ this._isInput = this._element.tagName === 'INPUT'
331
+ this._isInline = this._config.inline
332
+
333
+ // For inline mode, look for a hidden input child to bind to
334
+ if (this._isInline && !this._isInput) {
335
+ this._boundInput = SelectorEngine.findOne(SELECTOR_BOUND_INPUT, this._element) as HTMLInputElement | null
336
+ }
337
+
338
+ this._positionElement = this._resolvePositionElement()
339
+ this._displayElement = this._resolveDisplayElement()
340
+ this._selectedDates = [...this._config.selectedDates]
341
+
342
+ // The calendar always attaches to the element itself. The plugin closes on
343
+ // any click whose target is not exactly its input, so handing it a wrapper
344
+ // makes a click on the field inside close and reopen the popup. The popup
345
+ // is aligned with the position element after each show instead.
346
+ this._calendar = new window.VanillaCalendarPro!.Calendar(this._element, this._buildCalendarOptions())
347
+ this._calendar.init()
348
+
349
+ // An inline calendar renders into the element and drops its children, so
350
+ // the bound input moves right after it to stay in the form.
351
+ if (this._boundInput && !this._boundInput.isConnected) {
352
+ this._element.after(this._boundInput)
353
+ }
354
+
355
+ // Watch for theme changes on ancestor elements (for live theme switching)
356
+ this._setupThemeObserver()
357
+
358
+ this._setupDismissOnFocus()
359
+
360
+ // Set initial value if input has a value
361
+ if (this._isInput && this._element.value) {
362
+ this._parseInputValue()
363
+ }
364
+
365
+ // Populate input/display with preselected dates
366
+ this._updateDisplayWithSelectedDates()
367
+ }
368
+
369
+ _updateDisplayWithSelectedDates(): void {
370
+ if (this._selectedDates.length === 0) {
371
+ return
372
+ }
373
+
374
+ this._writeSelection(this._selectedDates)
375
+ }
376
+
377
+ _writeSelection(selectedDates: string[]): void {
378
+ const formattedDate = this._formatDateForInput(selectedDates)
379
+
380
+ if (this._isInput) {
381
+ this._element.value = formattedDate
382
+ writtenSelections.set(this._element, { text: formattedDate, dates: [...selectedDates] })
383
+ }
384
+
385
+ if (this._boundInput) {
386
+ this._boundInput.value = selectedDates.join(',')
387
+ }
388
+
389
+ if (this._displayElement) {
390
+ this._displayElement.textContent = formattedDate
391
+ }
392
+ }
393
+
394
+ _resolvePositionElement(): HTMLElement {
395
+ let { positionElement } = this._config
396
+
397
+ if (typeof positionElement === 'string') {
398
+ positionElement = getElement(positionElement)
399
+ }
400
+
401
+ // Use the input's wrapper when it sits in an icon or group wrapper
402
+ if (!positionElement && this._isInput && !this._isInline) {
403
+ positionElement = this._element.closest<HTMLElement>(SELECTOR_INPUT_WRAPPER)
404
+ }
405
+
406
+ return positionElement || this._element
407
+ }
408
+
409
+ _resolveDisplayElement(): HTMLElement | false | null {
410
+ const { displayElement } = this._config
411
+
412
+ if (typeof displayElement === 'string') {
413
+ return getElement(displayElement)
414
+ }
415
+
416
+ // For buttons/non-inputs (not inline), look for a display child
417
+ if (displayElement === true || (displayElement === null && !this._isInput && !this._isInline)) {
418
+ return SelectorEngine.findOne(SELECTOR_DISPLAY, this._element) || this._element
419
+ }
420
+
421
+ return displayElement
422
+ }
423
+
424
+ // The plugin positions the popup against the element; a wrapper such as
425
+ // `.input-icon` or `.input-group` wants the popup aligned with its own edges.
426
+ _alignToPositionElement(): void {
427
+ const mainElement = this._calendar?.context?.mainElement
428
+ if (!mainElement || this._isInline || !this._positionElement || this._positionElement === this._element) {
429
+ return
430
+ }
431
+
432
+ const anchor = this._positionElement.getBoundingClientRect()
433
+ const popup = mainElement.getBoundingClientRect()
434
+ let { placement } = this._config
435
+
436
+ if (placement === 'auto') {
437
+ placement = anchor.left + popup.width > document.documentElement.clientWidth ? 'right' : 'left'
438
+ }
439
+
440
+ const left = placement === 'right' ? anchor.right - popup.width : placement === 'center' ? anchor.left + (anchor.width - popup.width) / 2 : anchor.left
441
+
442
+ mainElement.style.left = `${left + window.scrollX}px`
443
+ }
444
+
445
+ _getThemeAncestor(): Element | null {
446
+ return this._element.closest('[data-bs-theme]')
447
+ }
448
+
449
+ _getEffectiveTheme(): string | null {
450
+ // Priority: explicit datepickerTheme config > inherited from ancestor > none
451
+ const { datepickerTheme } = this._config
452
+ if (datepickerTheme) {
453
+ return datepickerTheme
454
+ }
455
+
456
+ return this._getThemeAncestor()?.getAttribute('data-bs-theme') || null
457
+ }
458
+
459
+ _syncThemeAttribute(element: HTMLElement | undefined): void {
460
+ if (!element) {
461
+ return
462
+ }
463
+
464
+ const theme = this._getEffectiveTheme()
465
+
466
+ if (theme) {
467
+ // Copy the theme to the popup: the plugin appends it to <body>, which
468
+ // breaks inheritance from a themed container.
469
+ element.setAttribute('data-bs-theme', theme)
470
+ } else {
471
+ element.removeAttribute('data-bs-theme')
472
+ }
473
+ }
474
+
475
+ _setupThemeObserver(): void {
476
+ const ancestor = this._getThemeAncestor()
477
+ if (!ancestor || this._config.datepickerTheme) {
478
+ // No ancestor to watch, or explicit datepickerTheme overrides
479
+ return
480
+ }
481
+
482
+ this._themeObserver = new MutationObserver(() => {
483
+ this._syncThemeAttribute(this._calendar?.context?.mainElement)
484
+ })
485
+
486
+ this._themeObserver.observe(ancestor, {
487
+ attributes: true,
488
+ attributeFilter: ['data-bs-theme'],
489
+ })
490
+ }
491
+
492
+ // The plugin ignores focus and mounts the popup on <body>, so close it
493
+ // ourselves when focus leaves both the element and the calendar.
494
+ _setupDismissOnFocus(): void {
495
+ if (this._isInline) {
496
+ return
497
+ }
498
+
499
+ this._onFocusIn = (event: Event): void => {
500
+ if (!this._isShown) {
501
+ return
502
+ }
503
+
504
+ const { target } = event
505
+ const mainElement = this._calendar?.context?.mainElement
506
+
507
+ if (target instanceof Node && (this._element.contains(target) || mainElement?.contains(target))) {
508
+ return
509
+ }
510
+
511
+ this.hide()
512
+ }
513
+
514
+ EventHandler.on(document, EVENT_FOCUSIN, this._onFocusIn)
515
+ }
516
+
517
+ _silently(callback: () => void): void {
518
+ this._isSilent = true
519
+ callback()
520
+ this._isSilent = false
521
+ }
522
+
523
+ _handlePluginShow(): void {
524
+ const calendar = this._calendar
525
+ if (!calendar) {
526
+ return
527
+ }
528
+
529
+ if (!this._isSilent && !this._isShown) {
530
+ // Opened by the plugin itself: right after `hide()` on a trigger click it
531
+ // must stay closed, otherwise it gets the same cancelable `show` event.
532
+ const prevented = this._skipPluginShow || (!this._isShowing && EventHandler.trigger(this._element, EVENT_SHOW)?.defaultPrevented)
533
+
534
+ if (prevented) {
535
+ this._silently(() => calendar.hide())
536
+ return
537
+ }
538
+ }
539
+
540
+ const wasShown = this._isShown
541
+ this._isShown = true
542
+ this._syncThemeAttribute(calendar.context.mainElement)
543
+ this._alignToPositionElement()
544
+ window.removeEventListener('resize', this._onResize)
545
+ window.addEventListener('resize', this._onResize)
546
+
547
+ if (!wasShown) {
548
+ EventHandler.trigger(this._element, EVENT_SHOWN)
549
+ }
550
+
551
+ this._resolveShown?.()
552
+ }
553
+
554
+ _handlePluginHide(): void {
555
+ const calendar = this._calendar
556
+ if (!calendar || this._isSilent || !this._isShown) {
557
+ return
558
+ }
559
+
560
+ // Closed by the plugin itself (Escape, a click outside): `hide` is still
561
+ // cancelable, the popup opens again before the browser paints.
562
+ if (!this._isHiding && EventHandler.trigger(this._element, EVENT_HIDE)?.defaultPrevented) {
563
+ this._silently(() => calendar.show())
564
+ return
565
+ }
566
+
567
+ this._isShown = false
568
+ window.removeEventListener('resize', this._onResize)
569
+ EventHandler.trigger(this._element, EVENT_HIDDEN)
570
+ }
571
+
572
+ // The extensions the loaded library exports, after the ones the caller
573
+ // registered in `vcpOptions` themselves.
574
+ /** @internal */
575
+ _calendarExtensions(own: readonly CalendarExtension[] = []): CalendarExtension[] {
576
+ const library = window.VanillaCalendarPro as Record<string, unknown> | undefined
577
+ const extensions = [...own]
578
+
579
+ for (const name of EXTENSION_NAMES) {
580
+ const extension = library?.[name] as CalendarExtension | undefined
581
+ if (extension && typeof extension === 'object' && !extensions.includes(extension)) {
582
+ extensions.push(extension)
583
+ }
584
+ }
585
+
586
+ return extensions
587
+ }
588
+
589
+ /** @internal */
590
+ _buildCalendarOptions(): Options {
591
+ // The plugin uses 'system' for auto-detection, Bootstrap and Tabler use 'auto'
592
+ const theme = this._getEffectiveTheme()
593
+ const vcpTheme = !theme || theme === 'auto' ? 'system' : theme
594
+
595
+ const vcpOptions = this._config.vcpOptions as Options
596
+ const extensions = this._calendarExtensions(vcpOptions.extensions)
597
+
598
+ const calendarOptions: Options = {
599
+ ...vcpOptions,
600
+ ...(extensions.length > 0 ? { extensions } : {}),
601
+ inputMode: !this._isInline,
602
+ positionToInput: this._config.placement,
603
+ firstWeekday: this._config.firstWeekday,
604
+ locale: this._config.locale,
605
+ selectionDatesMode: this._config.selectionMode,
606
+ selectedDates: this._config.selectedDates,
607
+ displayMonthsCount: this._config.displayMonthsCount,
608
+ type: this._config.displayMonthsCount > 1 ? 'multiple' : 'default',
609
+ selectedTheme: vcpTheme,
610
+ themeAttrDetect: '[data-bs-theme]',
611
+ onClickDate: (self, event) => this._handleDateClick(self, event),
612
+ onInit: (self) => {
613
+ this._syncThemeAttribute(self.context.mainElement)
614
+ },
615
+ onShow: () => this._handlePluginShow(),
616
+ onHide: () => this._handlePluginHide(),
617
+ }
618
+
619
+ // Navigate to the month of the first selected date
620
+ const [firstSelected] = this._config.selectedDates
621
+ if (firstSelected) {
622
+ const firstDate = this._parseDate(firstSelected)
623
+ // `getMonth()` is always 0-11, which TypeScript cannot narrow on its own
624
+ calendarOptions.selectedMonth = firstDate.getMonth() as Range<12>
625
+ calendarOptions.selectedYear = firstDate.getFullYear()
626
+ }
627
+
628
+ if (this._config.dateMin) {
629
+ calendarOptions.dateMin = this._config.dateMin as Options['dateMin']
630
+ }
631
+
632
+ if (this._config.dateMax) {
633
+ calendarOptions.dateMax = this._config.dateMax as Options['dateMax']
634
+ }
635
+
636
+ return calendarOptions
637
+ }
638
+
639
+ /** @internal */
640
+ _handleDateClick(self: Calendar, event: MouseEvent): void {
641
+ const selectedDates = [...self.context.selectedDates]
642
+ this._selectedDates = selectedDates
643
+
644
+ // Written even when empty: clicking the picked day again deselects it, and
645
+ // the field must not keep submitting the old date.
646
+ this._writeSelection(selectedDates)
647
+
648
+ const args: ChangeEventArgs = { dates: selectedDates, event }
649
+ EventHandler.trigger(this._element, EVENT_CHANGE, args)
650
+
651
+ this._maybeHideAfterSelection(selectedDates)
652
+ }
653
+
654
+ _maybeHideAfterSelection(selectedDates: string[]): void {
655
+ if (this._isInline) {
656
+ return
657
+ }
658
+
659
+ const shouldHide = (this._config.selectionMode === 'single' && selectedDates.length > 0) || (this._config.selectionMode === 'multiple-ranged' && selectedDates.length >= 2)
660
+
661
+ if (shouldHide) {
662
+ window.clearTimeout(this._hideTimeout)
663
+ this._hideTimeout = window.setTimeout(() => this.hide(), HIDE_DELAY)
664
+ }
665
+ }
666
+
667
+ _parseDate(dateStr: string): Date {
668
+ const [year = 0, month = 1, day = 1] = dateStr.split('-').map(Number)
669
+ return new Date(year, month - 1, day)
670
+ }
671
+
672
+ _formatDate(dateStr: string): string {
673
+ const date = this._parseDate(dateStr)
674
+ const locale = this._config.locale === 'default' ? undefined : this._config.locale
675
+ const { dateFormat } = this._config
676
+
677
+ // Custom function formatter
678
+ if (typeof dateFormat === 'function') {
679
+ return dateFormat(date, locale)
680
+ }
681
+
682
+ // Intl.DateTimeFormat options object
683
+ if (dateFormat && typeof dateFormat === 'object') {
684
+ return new Intl.DateTimeFormat(locale, dateFormat).format(date)
685
+ }
686
+
687
+ // Default: locale-aware formatting
688
+ return date.toLocaleDateString(locale)
689
+ }
690
+
691
+ _formatDateForInput(dates: string[]): string {
692
+ if (dates.length === 0) {
693
+ return ''
694
+ }
695
+
696
+ if (dates.length === 1) {
697
+ return this._formatDate(dates[0]!)
698
+ }
699
+
700
+ // For date ranges, use en-dash; for multiple dates, use comma
701
+ const separator = this._config.selectionMode === 'multiple-ranged' ? ' – ' : ', '
702
+ return dates.map((date) => this._formatDate(date)).join(separator)
703
+ }
704
+
705
+ _parseInputValue(): void {
706
+ const value = this._element.value.trim()
707
+ if (!value) {
708
+ return
709
+ }
710
+
711
+ const written = writtenSelections.get(this._element)
712
+ if (written && written.text.trim() === value) {
713
+ this._selectedDates = [...written.dates]
714
+ this._calendar?.set({ selectedDates: this._selectedDates, ...this._monthOf(this._selectedDates[0]) })
715
+ return
716
+ }
717
+
718
+ // `YYYY-MM-DD` is read as a local date: `new Date('2020-06-20')` would be
719
+ // UTC midnight and land on the previous day west of Greenwich.
720
+ const date = DATE_PATTERN.test(value) ? this._parseDate(value) : new Date(value)
721
+ if (Number.isNaN(date.getTime())) {
722
+ return
723
+ }
724
+
725
+ this._selectedDates = [this._toIsoDate(date)]
726
+ // The calendar opens on the month of the value, not on today.
727
+ this._calendar?.set({ selectedDates: this._selectedDates, ...this._monthOf(this._selectedDates[0]) })
728
+ }
729
+
730
+ _toIsoDate(value: DateAny | string): string {
731
+ if (typeof value === 'string' && DATE_PATTERN.test(value)) {
732
+ return value
733
+ }
734
+
735
+ const date = value instanceof Date ? value : typeof value === 'string' && DATE_PATTERN.test(value) ? this._parseDate(value) : new Date(value)
736
+ if (Number.isNaN(date.getTime())) {
737
+ return String(value)
738
+ }
739
+
740
+ const year = date.getFullYear()
741
+ const month = String(date.getMonth() + 1).padStart(2, '0')
742
+ const day = String(date.getDate()).padStart(2, '0')
743
+ return `${year}-${month}-${day}`
744
+ }
745
+
746
+ /** @internal */
747
+ _monthOf(value: string | undefined): Pick<Options, 'selectedMonth' | 'selectedYear'> {
748
+ if (!value || !DATE_PATTERN.test(value)) {
749
+ return {}
750
+ }
751
+
752
+ const date = this._parseDate(value)
753
+ // `getMonth()` is always 0-11, which TypeScript cannot narrow on its own
754
+ return { selectedMonth: date.getMonth() as Range<12>, selectedYear: date.getFullYear() }
755
+ }
756
+ }
757
+
758
+ /**
759
+ * Data API implementation
760
+ */
761
+
762
+ // js-docs-start datepicker-init
763
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (this: HTMLElement, event: Event) {
764
+ // Inputs open on focus, and inline calendars are always visible
765
+ if (this.tagName === 'INPUT' || this.dataset.bsInline === 'true' || this.dataset.tblrInline === 'true') {
766
+ return
767
+ }
768
+
769
+ event.preventDefault()
770
+ ;(Datepicker.getOrCreateInstance(this) as Datepicker).toggle()
771
+ })
772
+
773
+ EventHandler.on(document, EVENT_FOCUSIN_DATA_API, SELECTOR_DATA_TOGGLE, function (this: HTMLElement) {
774
+ if (this.tagName !== 'INPUT') {
775
+ return
776
+ }
777
+
778
+ ;(Datepicker.getOrCreateInstance(this) as Datepicker).show()
779
+ })
780
+
781
+ // Render on load what cannot wait for a focus or a click: inline calendars,
782
+ // and fields with preselected dates or a value, so they show it right away.
783
+ initAll(SELECTOR_DATA_TOGGLE, Datepicker, (element) => {
784
+ const { dataset } = element
785
+
786
+ return dataset.bsInline === 'true' || dataset.tblrInline === 'true' || 'bsSelectedDates' in dataset || 'tblrSelectedDates' in dataset || Boolean((element as HTMLInputElement).value)
787
+ })
788
+ // js-docs-end datepicker-init
789
+
790
+ export default Datepicker
791
+ export type { ComponentConfig as DatepickerConfig, ChangeEventArgs as DatepickerChangeEventArgs }