@privyid/persona 0.3.0

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 (298) hide show
  1. package/README.md +12 -0
  2. package/dist/components/app/App.vue +29 -0
  3. package/dist/components/avatar/Avatar.vue +144 -0
  4. package/dist/components/avatar/Avatar.vue.d.ts +69 -0
  5. package/dist/components/avatar/assets/avatar.png +0 -0
  6. package/dist/components/avatar/utils/color-hash.d.ts +2 -0
  7. package/dist/components/avatar/utils/color-hash.mjs +22 -0
  8. package/dist/components/avatar/utils/create-image.d.ts +5 -0
  9. package/dist/components/avatar/utils/create-image.mjs +19 -0
  10. package/dist/components/avatar/utils/load-image.d.ts +1 -0
  11. package/dist/components/avatar/utils/load-image.mjs +22 -0
  12. package/dist/components/badge/Badge.vue +185 -0
  13. package/dist/components/badge/Badge.vue.d.ts +28 -0
  14. package/dist/components/badge/assets/images/img-guide-badge.svg +1 -0
  15. package/dist/components/banner/Banner.vue +112 -0
  16. package/dist/components/banner/Banner.vue.d.ts +32 -0
  17. package/dist/components/button/Button.vue +247 -0
  18. package/dist/components/button/Button.vue.d.ts +56 -0
  19. package/dist/components/button-group/ButtonGroup.vue +161 -0
  20. package/dist/components/button-group/ButtonGroup.vue.d.ts +26 -0
  21. package/dist/components/calendar/Calendar.vue +279 -0
  22. package/dist/components/calendar/Calendar.vue.d.ts +141 -0
  23. package/dist/components/calendar/adapter/adapter.d.ts +25 -0
  24. package/dist/components/calendar/adapter/adapter.mjs +8 -0
  25. package/dist/components/calendar/adapter/date.d.ts +2 -0
  26. package/dist/components/calendar/adapter/date.mjs +75 -0
  27. package/dist/components/calendar/adapter/month.d.ts +2 -0
  28. package/dist/components/calendar/adapter/month.mjs +58 -0
  29. package/dist/components/calendar/adapter/year.d.ts +2 -0
  30. package/dist/components/calendar/adapter/year.mjs +58 -0
  31. package/dist/components/caption/Caption.vue +38 -0
  32. package/dist/components/caption/Caption.vue.d.ts +16 -0
  33. package/dist/components/card/Card.vue +247 -0
  34. package/dist/components/card/Card.vue.d.ts +68 -0
  35. package/dist/components/card/CardSection.vue +66 -0
  36. package/dist/components/card/CardSection.vue.d.ts +25 -0
  37. package/dist/components/card/assets/images/img-card-callout-01.svg +1 -0
  38. package/dist/components/chart/Chart.vue +109 -0
  39. package/dist/components/chart/Chart.vue.d.ts +30 -0
  40. package/dist/components/chart/ChartSet.vue +16 -0
  41. package/dist/components/chart/ChartSet.vue.d.ts +12 -0
  42. package/dist/components/chart/ChartVal.vue +24 -0
  43. package/dist/components/chart/ChartVal.vue.d.ts +30 -0
  44. package/dist/components/chart/adapter/adapter.d.ts +7 -0
  45. package/dist/components/chart/adapter/adapter.mjs +3 -0
  46. package/dist/components/chart/adapter/index.d.ts +3 -0
  47. package/dist/components/chart/adapter/index.mjs +10 -0
  48. package/dist/components/chart/adapter/line.d.ts +2 -0
  49. package/dist/components/chart/adapter/line.mjs +63 -0
  50. package/dist/components/chart/adapter/pie.d.ts +2 -0
  51. package/dist/components/chart/adapter/pie.mjs +33 -0
  52. package/dist/components/chart/use-chart.d.ts +2 -0
  53. package/dist/components/chart/use-chart.mjs +9 -0
  54. package/dist/components/checkbox/Checkbox.vue +176 -0
  55. package/dist/components/checkbox/Checkbox.vue.d.ts +88 -0
  56. package/dist/components/checkbox/use-checkbox.d.ts +7 -0
  57. package/dist/components/checkbox/use-checkbox.mjs +37 -0
  58. package/dist/components/datepicker/Datepicker.vue +143 -0
  59. package/dist/components/datepicker/Datepicker.vue.d.ts +88 -0
  60. package/dist/components/dialog/Dialog.vue +75 -0
  61. package/dist/components/dialog/Dialog.vue.d.ts +11 -0
  62. package/dist/components/dialog/DialogFooter.vue +126 -0
  63. package/dist/components/dialog/DialogFooter.vue.d.ts +114 -0
  64. package/dist/components/dialog/index.d.ts +6 -0
  65. package/dist/components/dialog/index.mjs +5 -0
  66. package/dist/components/dialog/use-dialog.d.ts +28 -0
  67. package/dist/components/dialog/use-dialog.mjs +31 -0
  68. package/dist/components/divider/Divider.vue +9 -0
  69. package/dist/components/dot/Dot.vue +83 -0
  70. package/dist/components/dot/Dot.vue.d.ts +18 -0
  71. package/dist/components/dropdown/Dropdown.vue +231 -0
  72. package/dist/components/dropdown/Dropdown.vue.d.ts +113 -0
  73. package/dist/components/dropdown/DropdownItem.vue +44 -0
  74. package/dist/components/dropdown/DropdownItem.vue.d.ts +18 -0
  75. package/dist/components/dropdown/utils/use-focus.d.ts +5 -0
  76. package/dist/components/dropdown/utils/use-focus.mjs +20 -0
  77. package/dist/components/dropdown/utils/use-popper.d.ts +6 -0
  78. package/dist/components/dropdown/utils/use-popper.mjs +32 -0
  79. package/dist/components/dropdown-subitem/DropdownSubitem.vue +168 -0
  80. package/dist/components/dropdown-subitem/DropdownSubitem.vue.d.ts +35 -0
  81. package/dist/components/dropdown-subitem/use-dropdown-subitem.d.ts +12 -0
  82. package/dist/components/dropdown-subitem/use-dropdown-subitem.mjs +1 -0
  83. package/dist/components/filterbar/Filterbar.vue +100 -0
  84. package/dist/components/filterbar/Filterbar.vue.d.ts +33 -0
  85. package/dist/components/filterbar/pinned/Date.vue +99 -0
  86. package/dist/components/filterbar/pinned/Date.vue.d.ts +67 -0
  87. package/dist/components/filterbar/pinned/Multiselect.vue +109 -0
  88. package/dist/components/filterbar/pinned/Multiselect.vue.d.ts +42 -0
  89. package/dist/components/filterbar/pinned/Select.vue +95 -0
  90. package/dist/components/filterbar/pinned/Select.vue.d.ts +42 -0
  91. package/dist/components/filterbar/pinned/Toggle.vue +76 -0
  92. package/dist/components/filterbar/pinned/Toggle.vue.d.ts +57 -0
  93. package/dist/components/filterbar/use-filterbar.d.ts +45 -0
  94. package/dist/components/filterbar/use-filterbar.mjs +7 -0
  95. package/dist/components/global/use-singleton.d.ts +6 -0
  96. package/dist/components/global/use-singleton.mjs +52 -0
  97. package/dist/components/heading/Heading.vue +59 -0
  98. package/dist/components/heading/Heading.vue.d.ts +19 -0
  99. package/dist/components/input/Input.vue +54 -0
  100. package/dist/components/input/Input.vue.d.ts +32 -0
  101. package/dist/components/input/InputGroup.vue +25 -0
  102. package/dist/components/input/use-input.d.ts +5 -0
  103. package/dist/components/input/use-input.mjs +20 -0
  104. package/dist/components/label/Label.vue +221 -0
  105. package/dist/components/label/Label.vue.d.ts +51 -0
  106. package/dist/components/modal/Modal.vue +217 -0
  107. package/dist/components/modal/Modal.vue.d.ts +75 -0
  108. package/dist/components/modal/assets/images/img-modal-banner-sheet.jpg +0 -0
  109. package/dist/components/nav/Nav.vue +324 -0
  110. package/dist/components/nav/Nav.vue.d.ts +73 -0
  111. package/dist/components/nav/NavItem.vue +149 -0
  112. package/dist/components/nav/NavItem.vue.d.ts +47 -0
  113. package/dist/components/nav/NavItemDropdown.vue +56 -0
  114. package/dist/components/nav/NavItemDropdown.vue.d.ts +23 -0
  115. package/dist/components/nav/NavSubItem.vue +137 -0
  116. package/dist/components/nav/NavSubItem.vue.d.ts +26 -0
  117. package/dist/components/overlay/Overlay.vue +61 -0
  118. package/dist/components/overlay/Overlay.vue.d.ts +7 -0
  119. package/dist/components/overlay/assets/icon-white.svg +1 -0
  120. package/dist/components/overlay/use-overlay.d.ts +2 -0
  121. package/dist/components/overlay/use-overlay.mjs +8 -0
  122. package/dist/components/overlay/utils/use-loading.d.ts +4 -0
  123. package/dist/components/overlay/utils/use-loading.mjs +27 -0
  124. package/dist/components/radio/Radio.vue +194 -0
  125. package/dist/components/radio/Radio.vue.d.ts +81 -0
  126. package/dist/components/radio/use-radio.d.ts +3 -0
  127. package/dist/components/radio/use-radio.mjs +17 -0
  128. package/dist/components/select/Select.vue +282 -0
  129. package/dist/components/select/Select.vue.d.ts +110 -0
  130. package/dist/components/select/adapter/adapter.d.ts +16 -0
  131. package/dist/components/select/adapter/adapter.mjs +20 -0
  132. package/dist/components/select/adapter/async-adapter.d.ts +5 -0
  133. package/dist/components/select/adapter/async-adapter.mjs +67 -0
  134. package/dist/components/select/adapter/basic-adapter.d.ts +5 -0
  135. package/dist/components/select/adapter/basic-adapter.mjs +13 -0
  136. package/dist/components/select/adapter/fuzzy-adapter.d.ts +2 -0
  137. package/dist/components/select/adapter/fuzzy-adapter.mjs +24 -0
  138. package/dist/components/select/demo/api/province.d.ts +5 -0
  139. package/dist/components/select/demo/api/province.mjs +138 -0
  140. package/dist/components/select/demo/api/regencies/11.d.ts +6 -0
  141. package/dist/components/select/demo/api/regencies/11.mjs +117 -0
  142. package/dist/components/select/demo/api/regencies/12.d.ts +6 -0
  143. package/dist/components/select/demo/api/regencies/12.mjs +167 -0
  144. package/dist/components/select/demo/api/regencies/13.d.ts +6 -0
  145. package/dist/components/select/demo/api/regencies/13.mjs +97 -0
  146. package/dist/components/select/demo/api/regencies/14.d.ts +6 -0
  147. package/dist/components/select/demo/api/regencies/14.mjs +62 -0
  148. package/dist/components/select/demo/api/regencies/15.d.ts +6 -0
  149. package/dist/components/select/demo/api/regencies/15.mjs +57 -0
  150. package/dist/components/select/demo/api/regencies/16.d.ts +6 -0
  151. package/dist/components/select/demo/api/regencies/16.mjs +87 -0
  152. package/dist/components/select/demo/api/regencies/17.d.ts +6 -0
  153. package/dist/components/select/demo/api/regencies/17.mjs +52 -0
  154. package/dist/components/select/demo/api/regencies/18.d.ts +6 -0
  155. package/dist/components/select/demo/api/regencies/18.mjs +77 -0
  156. package/dist/components/select/demo/api/regencies/19.d.ts +6 -0
  157. package/dist/components/select/demo/api/regencies/19.mjs +37 -0
  158. package/dist/components/select/demo/api/regencies/21.d.ts +6 -0
  159. package/dist/components/select/demo/api/regencies/21.mjs +37 -0
  160. package/dist/components/select/demo/api/regencies/31.d.ts +6 -0
  161. package/dist/components/select/demo/api/regencies/31.mjs +32 -0
  162. package/dist/components/select/demo/api/regencies/32.d.ts +6 -0
  163. package/dist/components/select/demo/api/regencies/32.mjs +137 -0
  164. package/dist/components/select/demo/api/regencies/33.d.ts +6 -0
  165. package/dist/components/select/demo/api/regencies/33.mjs +177 -0
  166. package/dist/components/select/demo/api/regencies/34.d.ts +6 -0
  167. package/dist/components/select/demo/api/regencies/34.mjs +27 -0
  168. package/dist/components/select/demo/api/regencies/35.d.ts +6 -0
  169. package/dist/components/select/demo/api/regencies/35.mjs +192 -0
  170. package/dist/components/select/demo/api/regencies/36.d.ts +6 -0
  171. package/dist/components/select/demo/api/regencies/36.mjs +42 -0
  172. package/dist/components/select/demo/api/regencies/51.d.ts +6 -0
  173. package/dist/components/select/demo/api/regencies/51.mjs +47 -0
  174. package/dist/components/select/demo/api/regencies/52.d.ts +6 -0
  175. package/dist/components/select/demo/api/regencies/52.mjs +52 -0
  176. package/dist/components/select/demo/api/regencies/53.d.ts +6 -0
  177. package/dist/components/select/demo/api/regencies/53.mjs +112 -0
  178. package/dist/components/select/demo/api/regencies/61.d.ts +6 -0
  179. package/dist/components/select/demo/api/regencies/61.mjs +72 -0
  180. package/dist/components/select/demo/api/regencies/62.d.ts +6 -0
  181. package/dist/components/select/demo/api/regencies/62.mjs +72 -0
  182. package/dist/components/select/demo/api/regencies/63.d.ts +6 -0
  183. package/dist/components/select/demo/api/regencies/63.mjs +67 -0
  184. package/dist/components/select/demo/api/regencies/64.d.ts +6 -0
  185. package/dist/components/select/demo/api/regencies/64.mjs +52 -0
  186. package/dist/components/select/demo/api/regencies/65.d.ts +6 -0
  187. package/dist/components/select/demo/api/regencies/65.mjs +27 -0
  188. package/dist/components/select/demo/api/regencies/71.d.ts +6 -0
  189. package/dist/components/select/demo/api/regencies/71.mjs +77 -0
  190. package/dist/components/select/demo/api/regencies/72.d.ts +6 -0
  191. package/dist/components/select/demo/api/regencies/72.mjs +67 -0
  192. package/dist/components/select/demo/api/regencies/73.d.ts +6 -0
  193. package/dist/components/select/demo/api/regencies/73.mjs +122 -0
  194. package/dist/components/select/demo/api/regencies/74.d.ts +6 -0
  195. package/dist/components/select/demo/api/regencies/74.mjs +87 -0
  196. package/dist/components/select/demo/api/regencies/75.d.ts +6 -0
  197. package/dist/components/select/demo/api/regencies/75.mjs +32 -0
  198. package/dist/components/select/demo/api/regencies/76.d.ts +6 -0
  199. package/dist/components/select/demo/api/regencies/76.mjs +32 -0
  200. package/dist/components/select/demo/api/regencies/81.d.ts +6 -0
  201. package/dist/components/select/demo/api/regencies/81.mjs +57 -0
  202. package/dist/components/select/demo/api/regencies/82.d.ts +6 -0
  203. package/dist/components/select/demo/api/regencies/82.mjs +52 -0
  204. package/dist/components/select/demo/api/regencies/91.d.ts +6 -0
  205. package/dist/components/select/demo/api/regencies/91.mjs +67 -0
  206. package/dist/components/select/demo/api/regencies/94.d.ts +6 -0
  207. package/dist/components/select/demo/api/regencies/94.mjs +147 -0
  208. package/dist/components/select/demo/get-region.d.ts +11 -0
  209. package/dist/components/select/demo/get-region.mjs +19 -0
  210. package/dist/components/select/use-select.d.ts +10 -0
  211. package/dist/components/select/use-select.mjs +3 -0
  212. package/dist/components/select/utils/use-on-scroll.d.ts +2 -0
  213. package/dist/components/select/utils/use-on-scroll.mjs +9 -0
  214. package/dist/components/select/utils/use-on-typing.d.ts +3 -0
  215. package/dist/components/select/utils/use-on-typing.mjs +8 -0
  216. package/dist/components/sidebar/Sidebar.vue +92 -0
  217. package/dist/components/sidebar/Sidebar.vue.d.ts +51 -0
  218. package/dist/components/sidebar/SidebarBrand.vue +53 -0
  219. package/dist/components/sidebar/SidebarBrand.vue.d.ts +14 -0
  220. package/dist/components/sidebar/SidebarNav.vue +151 -0
  221. package/dist/components/sidebar/SidebarNav.vue.d.ts +36 -0
  222. package/dist/components/sidebar/assets/images/icon-flag.svg +1 -0
  223. package/dist/components/sidebar/assets/images/logo-privy-icon.svg +1 -0
  224. package/dist/components/sidebar/assets/images/logo-privy.svg +1 -0
  225. package/dist/components/sidebar-menu/SidebarMenu.vue +94 -0
  226. package/dist/components/sidebar-menu/SidebarMenu.vue.d.ts +43 -0
  227. package/dist/components/sidebar-menu/assets/images/img-flag.svg +1 -0
  228. package/dist/components/sidebar-menu/use-sidebar-menu.d.ts +21 -0
  229. package/dist/components/sidebar-menu/use-sidebar-menu.mjs +3 -0
  230. package/dist/components/signature-draw/SignatureDraw.vue +69 -0
  231. package/dist/components/signature-draw/SignatureDraw.vue.d.ts +82 -0
  232. package/dist/components/signature-draw/SignatureDrawDesktop.vue +152 -0
  233. package/dist/components/signature-draw/SignatureDrawDesktop.vue.d.ts +66 -0
  234. package/dist/components/signature-draw/SignatureDrawMobile.vue +203 -0
  235. package/dist/components/signature-draw/SignatureDrawMobile.vue.d.ts +89 -0
  236. package/dist/components/signature-draw/assets/empty-img.png +0 -0
  237. package/dist/components/signature-draw/utils/canvas.d.ts +35 -0
  238. package/dist/components/signature-draw/utils/canvas.mjs +47 -0
  239. package/dist/components/signature-draw/utils/rotate-image.d.ts +6 -0
  240. package/dist/components/signature-draw/utils/rotate-image.mjs +12 -0
  241. package/dist/components/signature-draw/utils/smooth-line.d.ts +36 -0
  242. package/dist/components/signature-draw/utils/smooth-line.mjs +36 -0
  243. package/dist/components/signature-draw/utils/straight-line.d.ts +8 -0
  244. package/dist/components/signature-draw/utils/straight-line.mjs +22 -0
  245. package/dist/components/signature-draw/utils/use-draw.d.ts +7 -0
  246. package/dist/components/signature-draw/utils/use-draw.mjs +24 -0
  247. package/dist/components/signature-text/SignatureText.vue +104 -0
  248. package/dist/components/signature-text/SignatureText.vue.d.ts +70 -0
  249. package/dist/components/signature-text/sample/sample-signature.png +0 -0
  250. package/dist/components/signature-text/utils/formatter.d.ts +2 -0
  251. package/dist/components/signature-text/utils/formatter.mjs +8 -0
  252. package/dist/components/signature-text/utils/generate-text.d.ts +8 -0
  253. package/dist/components/signature-text/utils/generate-text.mjs +33 -0
  254. package/dist/components/signature-text/utils/load-font.d.ts +1 -0
  255. package/dist/components/signature-text/utils/load-font.mjs +14 -0
  256. package/dist/components/spinner/Spinner.vue +141 -0
  257. package/dist/components/spinner/Spinner.vue.d.ts +2 -0
  258. package/dist/components/spinner/SpinnerRing.vue +28 -0
  259. package/dist/components/spinner/SpinnerRing.vue.d.ts +2 -0
  260. package/dist/components/subheading/Subheading.vue +66 -0
  261. package/dist/components/subheading/Subheading.vue.d.ts +28 -0
  262. package/dist/components/table/Table.vue +257 -0
  263. package/dist/components/table/Table.vue.d.ts +71 -0
  264. package/dist/components/table/use-table.d.ts +23 -0
  265. package/dist/components/table/use-table.mjs +16 -0
  266. package/dist/components/tabs/Tab.vue +28 -0
  267. package/dist/components/tabs/Tab.vue.d.ts +23 -0
  268. package/dist/components/tabs/TabContent.vue +27 -0
  269. package/dist/components/tabs/TabContent.vue.d.ts +14 -0
  270. package/dist/components/tabs/Tabs.vue +194 -0
  271. package/dist/components/tabs/Tabs.vue.d.ts +79 -0
  272. package/dist/components/textarea/Textarea.vue +158 -0
  273. package/dist/components/textarea/Textarea.vue.d.ts +95 -0
  274. package/dist/components/toast/Toast.vue +228 -0
  275. package/dist/components/toast/Toast.vue.d.ts +56 -0
  276. package/dist/components/toast/ToastContainer.vue +63 -0
  277. package/dist/components/toast/ToastContainer.vue.d.ts +15 -0
  278. package/dist/components/toast/use-toast.d.ts +11 -0
  279. package/dist/components/toast/use-toast.mjs +5 -0
  280. package/dist/components/toggle/Toggle.vue +220 -0
  281. package/dist/components/toggle/Toggle.vue.d.ts +104 -0
  282. package/dist/components/truncate/Truncate.vue +75 -0
  283. package/dist/components/truncate/Truncate.vue.d.ts +64 -0
  284. package/dist/components/utils/color.d.ts +12 -0
  285. package/dist/components/utils/color.mjs +10 -0
  286. package/dist/components/utils/value.d.ts +8 -0
  287. package/dist/components/utils/value.mjs +6 -0
  288. package/dist/components/utils/vnode.d.ts +2 -0
  289. package/dist/components/utils/vnode.mjs +15 -0
  290. package/dist/core/index.cjs +75 -0
  291. package/dist/core/index.d.ts +8 -0
  292. package/dist/core/index.mjs +25 -0
  293. package/dist/module.cjs +5 -0
  294. package/dist/module.d.ts +5 -0
  295. package/dist/module.json +5 -0
  296. package/dist/module.mjs +25 -0
  297. package/dist/types.d.ts +6 -0
  298. package/package.json +40 -0
@@ -0,0 +1,279 @@
1
+ <template>
2
+ <div
3
+ data-testid="calendar"
4
+ class="calendar"
5
+ :viewmode="viewmode"
6
+ :class="classNames">
7
+ <div class="calendar__nav">
8
+ <Button
9
+ data-testid="calendar-prev"
10
+ variant="solid"
11
+ icon
12
+ size="sm"
13
+ :disabled="!canPrev"
14
+ :readonly="disabled || readonly"
15
+ @click="prev">
16
+ <IconBack />
17
+ </Button>
18
+
19
+ <Button
20
+ data-testid="calendar-title"
21
+ class="calendar__nav-title"
22
+ variant="solid"
23
+ size="sm"
24
+ :readonly="disabled || readonly"
25
+ @click="changeMode(1)">
26
+ {{ title }}
27
+ </Button>
28
+
29
+ <Button
30
+ data-testid="calendar-next"
31
+ variant="solid"
32
+ icon
33
+ size="sm"
34
+ :readonly="disabled || readonly"
35
+ :disabled="!canNext"
36
+ @click="next">
37
+ <IconNext />
38
+ </Button>
39
+ </div>
40
+
41
+ <Transition
42
+ :name="transition"
43
+ mode="out-in">
44
+ <div
45
+ :key="`${cursor.toISOString()}+${viewmode}`"
46
+ data-testid="calendar-items"
47
+ class="calendar__items"
48
+ :viewmode="viewmode">
49
+ <template
50
+ v-for="(item, i) in items"
51
+ :key="i">
52
+ <Button
53
+ variant="solid"
54
+ icon
55
+ data-testid="calendar-item"
56
+ :readonly="item.readonly || disabled || readonly"
57
+ :active="item.active"
58
+ :disabled="item.disabled"
59
+ @click="selectItem(item)">
60
+ {{ item.text }}
61
+ </Button>
62
+ </template>
63
+ </div>
64
+ </Transition>
65
+ </div>
66
+ </template>
67
+
68
+ <script>
69
+ import Button from "../button/Button.vue";
70
+ import IconNext from "@carbon/icons-vue/lib/chevron--right/20";
71
+ import IconBack from "@carbon/icons-vue/lib/chevron--left/20";
72
+ import {
73
+ defineComponent,
74
+ ref,
75
+ computed,
76
+ watch,
77
+ toRef
78
+ } from "vue-demi";
79
+ import {
80
+ CalendarFormat
81
+ } from "./adapter/adapter";
82
+ import DateAdapter from "./adapter/date";
83
+ import MonthAdapter from "./adapter/month";
84
+ import YearAdapter from "./adapter/year";
85
+ import { startOfMonth } from "date-fns";
86
+ import { useVModel } from "../input/use-input";
87
+ const Adapters = {
88
+ date: DateAdapter,
89
+ month: MonthAdapter,
90
+ year: YearAdapter
91
+ };
92
+ export default defineComponent({
93
+ components: {
94
+ Button,
95
+ IconNext,
96
+ IconBack
97
+ },
98
+ props: {
99
+ modelValue: {
100
+ type: Date,
101
+ default: void 0
102
+ },
103
+ disabled: {
104
+ type: Boolean,
105
+ default: void 0
106
+ },
107
+ readonly: {
108
+ type: Boolean,
109
+ default: void 0
110
+ },
111
+ max: {
112
+ type: Date,
113
+ default: void 0
114
+ },
115
+ min: {
116
+ type: Date,
117
+ default: void 0
118
+ },
119
+ mode: {
120
+ type: String,
121
+ default: "date"
122
+ }
123
+ },
124
+ emits: ["update:modelValue", "change"],
125
+ setup(props, { emit }) {
126
+ const viewmode = ref(props.mode);
127
+ const transition = ref("slide-left");
128
+ const cursor = ref(startOfMonth(props.modelValue ?? new Date()));
129
+ const model = useVModel(props);
130
+ const context = {
131
+ cursor,
132
+ model,
133
+ min: toRef(props, "min"),
134
+ max: toRef(props, "max")
135
+ };
136
+ const adapter = computed(() => {
137
+ return Adapters[viewmode.value];
138
+ });
139
+ const title = computed(() => {
140
+ return adapter.value.getTitle(context);
141
+ });
142
+ const items = computed(() => {
143
+ return adapter.value.getItems(context);
144
+ });
145
+ const canNext = computed(() => {
146
+ return adapter.value.canNext(context);
147
+ });
148
+ const canPrev = computed(() => {
149
+ return adapter.value.canPrev(context);
150
+ });
151
+ const classNames = computed(() => {
152
+ const result = [];
153
+ if (props.disabled)
154
+ result.push("calendar--disabled");
155
+ if (props.readonly)
156
+ result.push("calendar--readonly");
157
+ return result;
158
+ });
159
+ function next() {
160
+ if (!props.disabled && !props.readonly)
161
+ cursor.value = adapter.value.getNextCursor(context);
162
+ }
163
+ function prev() {
164
+ if (!props.disabled && !props.readonly)
165
+ cursor.value = adapter.value.getPrevCursor(context);
166
+ }
167
+ function changeMode(step = 1) {
168
+ if (!props.disabled && !props.readonly) {
169
+ const index = CalendarFormat.indexOf(viewmode.value);
170
+ const newMode = CalendarFormat[index + step];
171
+ if (newMode)
172
+ viewmode.value = newMode;
173
+ }
174
+ }
175
+ function selectItem(item) {
176
+ if (viewmode.value === props.mode) {
177
+ model.value = item.value;
178
+ emit("change", item.value);
179
+ } else {
180
+ cursor.value = item.value;
181
+ changeMode(-1);
182
+ }
183
+ }
184
+ watch(() => props.mode, (value) => {
185
+ const newIndex = CalendarFormat.indexOf(value);
186
+ const currentIndex = CalendarFormat.indexOf(viewmode.value);
187
+ if (newIndex > currentIndex)
188
+ viewmode.value = value;
189
+ });
190
+ watch([viewmode, cursor], ([vm, cursor2], [vmOld, cursorOld]) => {
191
+ const mode = CalendarFormat.indexOf(vm) - CalendarFormat.indexOf(vmOld);
192
+ if (mode !== 0)
193
+ transition.value = mode > 0 ? "zoom-out" : "zoom-in";
194
+ else
195
+ transition.value = cursor2 > cursorOld ? "slide-left" : "slide-right";
196
+ });
197
+ return {
198
+ transition,
199
+ title,
200
+ items,
201
+ viewmode,
202
+ cursor,
203
+ canNext,
204
+ canPrev,
205
+ classNames,
206
+ next,
207
+ prev,
208
+ changeMode,
209
+ selectItem
210
+ };
211
+ }
212
+ });
213
+ </script>
214
+
215
+ <style lang="postcss">
216
+ .calendar {
217
+ @apply p-2 md:p-4 bg-white flex flex-col gap-2 text-sm;
218
+
219
+ &__nav {
220
+ @apply flex justify-between gap-2;
221
+
222
+ &-title {
223
+ @apply flex-grow;
224
+ }
225
+ }
226
+
227
+ .btn--solid {
228
+ @apply border-0 justify-center bg-transparent text-body-100;
229
+
230
+ &:hover,
231
+ &:focus,
232
+ &:active {
233
+ @apply text-white;
234
+ }
235
+
236
+ &[readonly] {
237
+ @apply pointer-events-none;
238
+ }
239
+
240
+ &[active="true"] {
241
+ @apply bg-primary-100 text-white;
242
+
243
+ &:active {
244
+ @apply bg-primary-focused;
245
+ }
246
+ }
247
+ }
248
+
249
+ .calendar__items {
250
+ .btn--outline {
251
+ @apply font-normal;
252
+ }
253
+
254
+ &[viewmode="date"] {
255
+ @apply grid grid-cols-7 gap-1;
256
+
257
+ .btn--md {
258
+ @apply p-1 md:p-2;
259
+ }
260
+
261
+ .btn--outline:nth-child(-n+7) {
262
+ @apply font-medium;
263
+ }
264
+ }
265
+
266
+ &[viewmode="month"],
267
+ &[viewmode="year"] {
268
+ @apply grid grid-cols-4 gap-1;
269
+ .btn--md {
270
+ @apply px-3;
271
+ }
272
+ }
273
+ }
274
+
275
+ &--disabled {
276
+ @apply opacity-50;
277
+ }
278
+ }
279
+ </style>
@@ -0,0 +1,141 @@
1
+ import { PropType } from 'vue-demi';
2
+ import { CalendarItem } from './adapter/adapter';
3
+ declare type TransitionMode = 'slide-left' | 'slide-right' | 'zoom-in' | 'zoom-out';
4
+ declare const _default: import("vue-demi").DefineComponent<{
5
+ modelValue: {
6
+ type: DateConstructor;
7
+ default: any;
8
+ };
9
+ disabled: {
10
+ type: BooleanConstructor;
11
+ default: any;
12
+ };
13
+ readonly: {
14
+ type: BooleanConstructor;
15
+ default: any;
16
+ };
17
+ max: {
18
+ type: DateConstructor;
19
+ default: any;
20
+ };
21
+ min: {
22
+ type: DateConstructor;
23
+ default: any;
24
+ };
25
+ mode: {
26
+ type: PropType<"date" | "month" | "year">;
27
+ default: string;
28
+ };
29
+ }, {
30
+ transition: import("vue-demi").Ref<TransitionMode>;
31
+ title: import("vue-demi").ComputedRef<string>;
32
+ items: import("vue-demi").ComputedRef<CalendarItem[]>;
33
+ viewmode: import("vue-demi").Ref<"date" | "month" | "year">;
34
+ cursor: import("vue-demi").Ref<{
35
+ toString: () => string;
36
+ toDateString: () => string;
37
+ toTimeString: () => string;
38
+ toLocaleString: {
39
+ (): string;
40
+ (locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;
41
+ (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
42
+ };
43
+ toLocaleDateString: {
44
+ (): string;
45
+ (locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;
46
+ (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
47
+ };
48
+ toLocaleTimeString: {
49
+ (): string;
50
+ (locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;
51
+ (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
52
+ };
53
+ valueOf: () => number;
54
+ getTime: () => number;
55
+ getFullYear: () => number;
56
+ getUTCFullYear: () => number;
57
+ getMonth: () => number;
58
+ getUTCMonth: () => number;
59
+ getDate: () => number;
60
+ getUTCDate: () => number;
61
+ getDay: () => number;
62
+ getUTCDay: () => number;
63
+ getHours: () => number;
64
+ getUTCHours: () => number;
65
+ getMinutes: () => number;
66
+ getUTCMinutes: () => number;
67
+ getSeconds: () => number;
68
+ getUTCSeconds: () => number;
69
+ getMilliseconds: () => number;
70
+ getUTCMilliseconds: () => number;
71
+ getTimezoneOffset: () => number;
72
+ setTime: (time: number) => number;
73
+ setMilliseconds: (ms: number) => number;
74
+ setUTCMilliseconds: (ms: number) => number;
75
+ setSeconds: (sec: number, ms?: number) => number;
76
+ setUTCSeconds: (sec: number, ms?: number) => number;
77
+ setMinutes: (min: number, sec?: number, ms?: number) => number;
78
+ setUTCMinutes: (min: number, sec?: number, ms?: number) => number;
79
+ setHours: (hours: number, min?: number, sec?: number, ms?: number) => number;
80
+ setUTCHours: (hours: number, min?: number, sec?: number, ms?: number) => number;
81
+ setDate: (date: number) => number;
82
+ setUTCDate: (date: number) => number;
83
+ setMonth: (month: number, date?: number) => number;
84
+ setUTCMonth: (month: number, date?: number) => number;
85
+ setFullYear: (year: number, month?: number, date?: number) => number;
86
+ setUTCFullYear: (year: number, month?: number, date?: number) => number;
87
+ toUTCString: () => string;
88
+ toISOString: () => string;
89
+ toJSON: (key?: any) => string;
90
+ getVarDate: () => VarDate;
91
+ [Symbol.toPrimitive]: {
92
+ (hint: "default"): string;
93
+ (hint: "string"): string;
94
+ (hint: "number"): number;
95
+ (hint: string): string | number;
96
+ };
97
+ }>;
98
+ canNext: import("vue-demi").ComputedRef<boolean>;
99
+ canPrev: import("vue-demi").ComputedRef<boolean>;
100
+ classNames: import("vue-demi").ComputedRef<any[]>;
101
+ next: () => void;
102
+ prev: () => void;
103
+ changeMode: (step?: number) => void;
104
+ selectItem: (item: CalendarItem) => void;
105
+ }, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, ("change" | "update:modelValue")[], "change" | "update:modelValue", import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly<import("vue-demi").ExtractPropTypes<{
106
+ modelValue: {
107
+ type: DateConstructor;
108
+ default: any;
109
+ };
110
+ disabled: {
111
+ type: BooleanConstructor;
112
+ default: any;
113
+ };
114
+ readonly: {
115
+ type: BooleanConstructor;
116
+ default: any;
117
+ };
118
+ max: {
119
+ type: DateConstructor;
120
+ default: any;
121
+ };
122
+ min: {
123
+ type: DateConstructor;
124
+ default: any;
125
+ };
126
+ mode: {
127
+ type: PropType<"date" | "month" | "year">;
128
+ default: string;
129
+ };
130
+ }>> & {
131
+ onChange?: (...args: any[]) => any;
132
+ "onUpdate:modelValue"?: (...args: any[]) => any;
133
+ }, {
134
+ disabled: boolean;
135
+ min: Date;
136
+ max: Date;
137
+ modelValue: Date;
138
+ readonly: boolean;
139
+ mode: "date" | "month" | "year";
140
+ }>;
141
+ export default _default;
@@ -0,0 +1,25 @@
1
+ import { Ref } from 'vue-demi';
2
+ export interface CalendarItem {
3
+ value: Date;
4
+ text: string;
5
+ disabled: boolean;
6
+ readonly: boolean;
7
+ active: boolean;
8
+ }
9
+ export interface CalendarContext {
10
+ cursor: Ref<Date>;
11
+ model: Ref<Date>;
12
+ max: Ref<Date | undefined>;
13
+ min: Ref<Date | undefined>;
14
+ }
15
+ export interface CalendarAdapter {
16
+ getItems: (this: this, context: CalendarContext) => CalendarItem[];
17
+ getTitle: (this: this, context: CalendarContext) => string;
18
+ getNextCursor: (this: this, context: CalendarContext) => Date;
19
+ getPrevCursor: (this: this, context: CalendarContext) => Date;
20
+ canNext: (this: this, context: CalendarContext) => boolean;
21
+ canPrev: (this: this, context: CalendarContext) => boolean;
22
+ }
23
+ export declare const CalendarFormat: readonly ["date", "month", "year"];
24
+ export declare type CalendarMode = typeof CalendarFormat[number];
25
+ export declare function defineAdapter(adapter: CalendarAdapter): CalendarAdapter;
@@ -0,0 +1,8 @@
1
+ export const CalendarFormat = [
2
+ "date",
3
+ "month",
4
+ "year"
5
+ ];
6
+ export function defineAdapter(adapter) {
7
+ return adapter;
8
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: import("./adapter").CalendarAdapter;
2
+ export default _default;
@@ -0,0 +1,75 @@
1
+ import {
2
+ eachDayOfInterval,
3
+ endOfMonth,
4
+ endOfWeek,
5
+ isSameDay,
6
+ isSameMonth,
7
+ startOfMonth,
8
+ startOfWeek,
9
+ format,
10
+ addMonths,
11
+ subMonths,
12
+ isAfter,
13
+ isBefore,
14
+ isWithinInterval,
15
+ minTime,
16
+ maxTime
17
+ } from "date-fns";
18
+ import { defineAdapter } from "./adapter.mjs";
19
+ function getInterval(date) {
20
+ const start = startOfWeek(startOfMonth(date), { weekStartsOn: 1 });
21
+ const end = endOfWeek(endOfMonth(date), { weekStartsOn: 1 });
22
+ return {
23
+ start,
24
+ end
25
+ };
26
+ }
27
+ export default defineAdapter({
28
+ getItems({ cursor, model, min, max }) {
29
+ const dates = eachDayOfInterval(getInterval(cursor.value)).map((date) => {
30
+ const start = min.value ?? minTime;
31
+ const end = max.value ?? maxTime;
32
+ const isDisabled = !isSameMonth(cursor.value, date) || !isWithinInterval(date, { start, end });
33
+ return {
34
+ value: date,
35
+ text: date.getDate().toString(),
36
+ disabled: isDisabled,
37
+ active: isSameDay(model.value, date),
38
+ readonly: false
39
+ };
40
+ });
41
+ const days = dates.slice(0, 7).map((item) => {
42
+ return {
43
+ value: item.value,
44
+ text: format(item.value, "EEEEEE"),
45
+ disabled: false,
46
+ readonly: true,
47
+ active: false
48
+ };
49
+ });
50
+ return [...days, ...dates];
51
+ },
52
+ getTitle({ cursor }) {
53
+ return format(cursor.value, "MMMM yyyy");
54
+ },
55
+ getNextCursor({ cursor }) {
56
+ return addMonths(cursor.value, 1);
57
+ },
58
+ getPrevCursor({ cursor }) {
59
+ return subMonths(cursor.value, 1);
60
+ },
61
+ canNext(context) {
62
+ const max = context.max.value;
63
+ const date = this.getNextCursor(context);
64
+ const start = startOfMonth(date);
65
+ const end = endOfMonth(date);
66
+ return !max || isBefore(date, max) || isWithinInterval(max, { start, end });
67
+ },
68
+ canPrev(context) {
69
+ const min = context.min.value;
70
+ const date = this.getPrevCursor(context);
71
+ const start = startOfMonth(date);
72
+ const end = endOfMonth(date);
73
+ return !min || isAfter(date, min) || isWithinInterval(min, { start, end });
74
+ }
75
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("./adapter").CalendarAdapter;
2
+ export default _default;
@@ -0,0 +1,58 @@
1
+ import {
2
+ addYears,
3
+ eachMonthOfInterval,
4
+ endOfYear,
5
+ format,
6
+ isAfter,
7
+ isBefore,
8
+ isSameMonth,
9
+ isWithinInterval,
10
+ maxTime,
11
+ minTime,
12
+ startOfYear,
13
+ subYears
14
+ } from "date-fns";
15
+ import { defineAdapter } from "./adapter.mjs";
16
+ function getInterval(date) {
17
+ const start = startOfYear(date);
18
+ const end = endOfYear(date);
19
+ return {
20
+ start,
21
+ end
22
+ };
23
+ }
24
+ export default defineAdapter({
25
+ getItems({ cursor, model, min, max }) {
26
+ return eachMonthOfInterval(getInterval(cursor.value)).map((date) => {
27
+ const start = min.value ?? minTime;
28
+ const end = max.value ?? maxTime;
29
+ const isDisabled = !isSameMonth(start, date) && !isSameMonth(end, date) && !isWithinInterval(date, { start, end });
30
+ return {
31
+ value: date,
32
+ text: format(date, "MMM"),
33
+ disabled: isDisabled,
34
+ readonly: false,
35
+ active: isSameMonth(model.value, date)
36
+ };
37
+ });
38
+ },
39
+ getTitle({ cursor }) {
40
+ return cursor.value.getFullYear().toString();
41
+ },
42
+ getNextCursor({ cursor }) {
43
+ return addYears(cursor.value, 1);
44
+ },
45
+ getPrevCursor({ cursor }) {
46
+ return subYears(cursor.value, 1);
47
+ },
48
+ canNext(context) {
49
+ const max = context.max.value;
50
+ const date = this.getNextCursor(context);
51
+ return !max || isBefore(date, max) || isWithinInterval(max, getInterval(date));
52
+ },
53
+ canPrev(context) {
54
+ const min = context.min.value;
55
+ const date = this.getPrevCursor(context);
56
+ return !min || isAfter(date, min) || isWithinInterval(min, getInterval(date));
57
+ }
58
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("./adapter").CalendarAdapter;
2
+ export default _default;
@@ -0,0 +1,58 @@
1
+ import { defineAdapter } from "./adapter.mjs";
2
+ import {
3
+ addYears,
4
+ eachYearOfInterval,
5
+ endOfDecade,
6
+ isAfter,
7
+ isBefore,
8
+ isSameYear,
9
+ isWithinInterval,
10
+ maxTime,
11
+ minTime,
12
+ startOfDecade,
13
+ subYears
14
+ } from "date-fns";
15
+ function getInterval(date) {
16
+ const start = startOfDecade(date);
17
+ const end = endOfDecade(date);
18
+ return {
19
+ start,
20
+ end
21
+ };
22
+ }
23
+ export default defineAdapter({
24
+ getItems({ cursor, model, min, max }) {
25
+ return eachYearOfInterval(getInterval(cursor.value)).map((date) => {
26
+ const start = min.value ?? minTime;
27
+ const end = max.value ?? maxTime;
28
+ const isDisabled = !isSameYear(start, date) && !isSameYear(end, date) && !isWithinInterval(date, { start, end });
29
+ return {
30
+ value: date,
31
+ text: date.getFullYear().toString(),
32
+ disabled: isDisabled,
33
+ readonly: false,
34
+ active: isSameYear(model.value, date)
35
+ };
36
+ });
37
+ },
38
+ getTitle({ cursor }) {
39
+ const { start, end } = getInterval(cursor.value);
40
+ return `${start.getFullYear()} - ${end.getFullYear()}`;
41
+ },
42
+ getNextCursor({ cursor }) {
43
+ return startOfDecade(addYears(cursor.value, 10));
44
+ },
45
+ getPrevCursor({ cursor }) {
46
+ return startOfDecade(subYears(cursor.value, 10));
47
+ },
48
+ canNext(context) {
49
+ const max = context.max.value;
50
+ const date = this.getNextCursor(context);
51
+ return !max || isBefore(date, max) || isWithinInterval(max, getInterval(date));
52
+ },
53
+ canPrev(context) {
54
+ const min = context.min.value;
55
+ const date = this.getPrevCursor(context);
56
+ return !min || isAfter(date, min) || isWithinInterval(min, getInterval(date));
57
+ }
58
+ });
@@ -0,0 +1,38 @@
1
+ <template>
2
+ <span
3
+ data-testid="caption"
4
+ :class="classNames">
5
+ <slot />
6
+ </span>
7
+ </template>
8
+
9
+ <script>
10
+ import { computed, defineComponent } from "vue-demi";
11
+ export default defineComponent({
12
+ props: {
13
+ bold: {
14
+ type: Boolean,
15
+ default: false
16
+ }
17
+ },
18
+ setup(props) {
19
+ const classNames = computed(() => {
20
+ const result = ["caption"];
21
+ if (props.bold)
22
+ result.push("caption--bold");
23
+ return result;
24
+ });
25
+ return { classNames };
26
+ }
27
+ });
28
+ </script>
29
+
30
+ <style lang="postcss">
31
+ .caption {
32
+ @apply block text-subtext-100 text-sm;
33
+
34
+ &--bold {
35
+ @apply font-bold;
36
+ }
37
+ }
38
+ </style>