@dialpad/dialtone-vue 2.125.0 → 2.125.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 (282) hide show
  1. package/dist/chunks/_plugin-vue2_normalizer-u6G_3nkj.js +33 -0
  2. package/dist/chunks/_plugin-vue2_normalizer-u6G_3nkj.js.map +1 -0
  3. package/dist/chunks/dropdown-SMWaTWyF.js +357 -0
  4. package/dist/chunks/dropdown-SMWaTWyF.js.map +1 -0
  5. package/dist/chunks/dropdown_constants-EUcDxBrX.js +9 -0
  6. package/dist/chunks/dropdown_constants-EUcDxBrX.js.map +1 -0
  7. package/dist/chunks/icon_constants-OpYAAKwF.js +16 -0
  8. package/dist/chunks/icon_constants-OpYAAKwF.js.map +1 -0
  9. package/dist/chunks/index-nIyl_PL6.js +372 -0
  10. package/dist/chunks/index-nIyl_PL6.js.map +1 -0
  11. package/dist/chunks/index-o4OMWMuv.js +244 -0
  12. package/dist/chunks/index-o4OMWMuv.js.map +1 -0
  13. package/dist/chunks/input-1tm09l_-.js +273 -0
  14. package/dist/chunks/input-1tm09l_-.js.map +1 -0
  15. package/dist/chunks/input_group-zcAq3DQl.js +141 -0
  16. package/dist/chunks/input_group-zcAq3DQl.js.map +1 -0
  17. package/dist/chunks/keyboard_list_navigation-F0O8nht0.js +197 -0
  18. package/dist/chunks/keyboard_list_navigation-F0O8nht0.js.map +1 -0
  19. package/dist/chunks/link_constants-vIUB92L4.js +16 -0
  20. package/dist/chunks/link_constants-vIUB92L4.js.map +1 -0
  21. package/dist/chunks/list_item_constants-LTUc74pD.js +13 -0
  22. package/dist/chunks/list_item_constants-LTUc74pD.js.map +1 -0
  23. package/dist/chunks/modal-VuMFkZFH.js +82 -0
  24. package/dist/chunks/modal-VuMFkZFH.js.map +1 -0
  25. package/dist/chunks/notice_action-9NmtQRai.js +182 -0
  26. package/dist/chunks/notice_action-9NmtQRai.js.map +1 -0
  27. package/dist/chunks/notice_constants-c--hBFQw.js +6 -0
  28. package/dist/chunks/notice_constants-c--hBFQw.js.map +1 -0
  29. package/dist/chunks/popover_constants-qjlEkroB.js +114 -0
  30. package/dist/chunks/popover_constants-qjlEkroB.js.map +1 -0
  31. package/dist/chunks/sr_only_close_button-JGole5Xi.js +86 -0
  32. package/dist/chunks/sr_only_close_button-JGole5Xi.js.map +1 -0
  33. package/dist/chunks/stack_constants-u7tNqGtc.js +13 -0
  34. package/dist/chunks/stack_constants-u7tNqGtc.js.map +1 -0
  35. package/dist/chunks/tab-Qm9LVkYj.js +346 -0
  36. package/dist/chunks/tab-Qm9LVkYj.js.map +1 -0
  37. package/dist/component-documentation.json +1 -1
  38. package/dist/dialtone-vue.js +354 -10368
  39. package/dist/dialtone-vue.js.map +1 -1
  40. package/dist/lib/attachment-carousel.js +250 -0
  41. package/dist/lib/attachment-carousel.js.map +1 -0
  42. package/dist/lib/avatar.js +369 -0
  43. package/dist/lib/avatar.js.map +1 -0
  44. package/dist/lib/badge.js +169 -0
  45. package/dist/lib/badge.js.map +1 -0
  46. package/dist/lib/banner.js +200 -0
  47. package/dist/lib/banner.js.map +1 -0
  48. package/dist/lib/breadcrumbs.js +138 -0
  49. package/dist/lib/breadcrumbs.js.map +1 -0
  50. package/dist/lib/button-group.js +45 -0
  51. package/dist/lib/button-group.js.map +1 -0
  52. package/dist/lib/button.js +328 -0
  53. package/dist/lib/button.js.map +1 -0
  54. package/dist/lib/callbar-button-with-popover.js +235 -0
  55. package/dist/lib/callbar-button-with-popover.js.map +1 -0
  56. package/dist/lib/callbar-button.js +175 -0
  57. package/dist/lib/callbar-button.js.map +1 -0
  58. package/dist/lib/callbox.js +142 -0
  59. package/dist/lib/callbox.js.map +1 -0
  60. package/dist/lib/card.js +72 -0
  61. package/dist/lib/card.js.map +1 -0
  62. package/dist/lib/checkbox-group.js +117 -0
  63. package/dist/lib/checkbox-group.js.map +1 -0
  64. package/dist/lib/checkbox.js +117 -0
  65. package/dist/lib/checkbox.js.map +1 -0
  66. package/dist/lib/chip.js +186 -0
  67. package/dist/lib/chip.js.map +1 -0
  68. package/dist/lib/codeblock.js +29 -0
  69. package/dist/lib/codeblock.js.map +1 -0
  70. package/dist/lib/collapsible.js +313 -0
  71. package/dist/lib/collapsible.js.map +1 -0
  72. package/dist/lib/combobox-multi-select.js +433 -0
  73. package/dist/lib/combobox-multi-select.js.map +1 -0
  74. package/dist/lib/combobox-with-popover.js +341 -0
  75. package/dist/lib/combobox-with-popover.js.map +1 -0
  76. package/dist/lib/combobox.js +19 -0
  77. package/dist/lib/combobox.js.map +1 -0
  78. package/dist/lib/constants.js +53 -0
  79. package/dist/lib/constants.js.map +1 -0
  80. package/dist/lib/contact-info.js +145 -0
  81. package/dist/lib/contact-info.js.map +1 -0
  82. package/dist/lib/contact-row.js +203 -0
  83. package/dist/lib/contact-row.js.map +1 -0
  84. package/dist/lib/datepicker.js +552 -0
  85. package/dist/lib/datepicker.js.map +1 -0
  86. package/dist/lib/dates.js +57 -0
  87. package/dist/lib/dates.js.map +1 -0
  88. package/dist/lib/description-list.js +83 -0
  89. package/dist/lib/description-list.js.map +1 -0
  90. package/dist/lib/dropdown.js +45 -0
  91. package/dist/lib/dropdown.js.map +1 -0
  92. package/dist/lib/editor.js +527 -0
  93. package/dist/lib/editor.js.map +1 -0
  94. package/dist/{emoji_picker-kiTOKaq8.js → lib/emoji-picker.js} +30 -12
  95. package/dist/lib/emoji-picker.js.map +1 -0
  96. package/dist/lib/emoji-row.js +83 -0
  97. package/dist/lib/emoji-row.js.map +1 -0
  98. package/dist/{emoji_text_wrapper-48ClwKvf.js → lib/emoji-text-wrapper.js} +19 -14
  99. package/dist/lib/emoji-text-wrapper.js.map +1 -0
  100. package/dist/lib/emoji.js +11 -0
  101. package/dist/{emoji.js.map → lib/emoji.js.map} +1 -1
  102. package/dist/lib/feed-item-row.js +207 -0
  103. package/dist/lib/feed-item-row.js.map +1 -0
  104. package/dist/lib/feed-pill.js +142 -0
  105. package/dist/lib/feed-pill.js.map +1 -0
  106. package/dist/lib/general-row.js +379 -0
  107. package/dist/lib/general-row.js.map +1 -0
  108. package/dist/lib/group-row.js +115 -0
  109. package/dist/lib/group-row.js.map +1 -0
  110. package/dist/lib/grouped-chip.js +45 -0
  111. package/dist/lib/grouped-chip.js.map +1 -0
  112. package/dist/lib/hovercard.js +194 -0
  113. package/dist/lib/hovercard.js.map +1 -0
  114. package/dist/lib/icon.js +82 -0
  115. package/dist/lib/icon.js.map +1 -0
  116. package/dist/lib/image-viewer.js +171 -0
  117. package/dist/lib/image-viewer.js.map +1 -0
  118. package/dist/lib/input-group.js +90 -0
  119. package/dist/lib/input-group.js.map +1 -0
  120. package/dist/lib/input.js +455 -0
  121. package/dist/lib/input.js.map +1 -0
  122. package/dist/lib/item-layout.js +39 -0
  123. package/dist/lib/item-layout.js.map +1 -0
  124. package/dist/lib/ivr-node.js +195 -0
  125. package/dist/lib/ivr-node.js.map +1 -0
  126. package/dist/lib/keyboard-shortcut.js +100 -0
  127. package/dist/lib/keyboard-shortcut.js.map +1 -0
  128. package/dist/lib/lazy-show.js +77 -0
  129. package/dist/lib/lazy-show.js.map +1 -0
  130. package/dist/lib/link.js +69 -0
  131. package/dist/lib/link.js.map +1 -0
  132. package/dist/lib/list-item-group.js +59 -0
  133. package/dist/lib/list-item-group.js.map +1 -0
  134. package/dist/lib/list-item.js +195 -0
  135. package/dist/lib/list-item.js.map +1 -0
  136. package/dist/{message_input.js → lib/message-input.js} +107 -56
  137. package/dist/lib/message-input.js.map +1 -0
  138. package/dist/lib/mixins.js +17 -0
  139. package/dist/lib/mixins.js.map +1 -0
  140. package/dist/lib/modal.js +324 -0
  141. package/dist/lib/modal.js.map +1 -0
  142. package/dist/lib/notice.js +158 -0
  143. package/dist/lib/notice.js.map +1 -0
  144. package/dist/lib/pagination.js +142 -0
  145. package/dist/lib/pagination.js.map +1 -0
  146. package/dist/lib/popover.js +779 -0
  147. package/dist/lib/popover.js.map +1 -0
  148. package/dist/lib/presence.js +60 -0
  149. package/dist/lib/presence.js.map +1 -0
  150. package/dist/lib/radio-group.js +97 -0
  151. package/dist/lib/radio-group.js.map +1 -0
  152. package/dist/lib/radio.js +111 -0
  153. package/dist/lib/radio.js.map +1 -0
  154. package/dist/lib/rich-text-editor.js +920 -0
  155. package/dist/lib/rich-text-editor.js.map +1 -0
  156. package/dist/lib/root-layout.js +127 -0
  157. package/dist/lib/root-layout.js.map +1 -0
  158. package/dist/lib/select-menu.js +243 -0
  159. package/dist/lib/select-menu.js.map +1 -0
  160. package/dist/lib/settings-menu-button.js +65 -0
  161. package/dist/lib/settings-menu-button.js.map +1 -0
  162. package/dist/lib/skeleton.js +574 -0
  163. package/dist/lib/skeleton.js.map +1 -0
  164. package/dist/lib/stack.js +118 -0
  165. package/dist/lib/stack.js.map +1 -0
  166. package/dist/lib/tabs.js +93 -0
  167. package/dist/lib/tabs.js.map +1 -0
  168. package/dist/lib/time-pill.js +43 -0
  169. package/dist/lib/time-pill.js.map +1 -0
  170. package/dist/lib/toast.js +226 -0
  171. package/dist/lib/toast.js.map +1 -0
  172. package/dist/lib/toggle.js +169 -0
  173. package/dist/lib/toggle.js.map +1 -0
  174. package/dist/{directives.js → lib/tooltip-directive.js} +24 -18
  175. package/dist/lib/tooltip-directive.js.map +1 -0
  176. package/dist/lib/tooltip.js +376 -0
  177. package/dist/lib/tooltip.js.map +1 -0
  178. package/dist/lib/top-banner-info.js +60 -0
  179. package/dist/lib/top-banner-info.js.map +1 -0
  180. package/dist/lib/unread-pill.js +61 -0
  181. package/dist/lib/unread-pill.js.map +1 -0
  182. package/dist/lib/utils.js +175 -0
  183. package/dist/lib/utils.js.map +1 -0
  184. package/dist/lib/validation-messages.js +83 -0
  185. package/dist/lib/validation-messages.js.map +1 -0
  186. package/dist/lib/validators.js +12 -0
  187. package/dist/lib/validators.js.map +1 -0
  188. package/dist/style.css +1 -1
  189. package/dist/types/common/{constants.d.ts → constants/index.d.ts} +1 -1
  190. package/dist/types/common/constants/index.d.ts.map +1 -0
  191. package/dist/types/common/{dates.d.ts → dates/index.d.ts} +1 -1
  192. package/dist/types/common/dates/index.d.ts.map +1 -0
  193. package/dist/types/common/{emoji.d.ts → emoji/index.d.ts} +1 -1
  194. package/dist/types/common/{emoji.d.ts.map → emoji/index.d.ts.map} +1 -1
  195. package/dist/types/common/{utils.d.ts → utils/index.d.ts} +1 -1
  196. package/dist/types/common/utils/index.d.ts.map +1 -0
  197. package/dist/types/common/{validators.d.ts → validators/index.d.ts} +1 -1
  198. package/dist/types/common/validators/index.d.ts.map +1 -0
  199. package/dist/types/components/avatar/avatar.vue.d.ts +1 -1
  200. package/dist/types/components/button/button.vue.d.ts +2 -2
  201. package/dist/types/components/card/card.vue.d.ts +1 -1
  202. package/dist/types/components/checkbox/checkbox.vue.d.ts +7 -7
  203. package/dist/types/components/checkbox/checkbox.vue.d.ts.map +1 -1
  204. package/dist/types/components/chip/chip.vue.d.ts +2 -2
  205. package/dist/types/components/collapsible/collapsible.vue.d.ts +3 -3
  206. package/dist/types/components/combobox/combobox.vue.d.ts +7 -8
  207. package/dist/types/components/combobox/combobox.vue.d.ts.map +1 -1
  208. package/dist/types/components/dropdown/dropdown.vue.d.ts +1 -1
  209. package/dist/types/components/emoji/emoji.vue.d.ts +1 -1
  210. package/dist/types/components/emoji_picker/modules/emoji_selector.vue.d.ts +1 -219
  211. package/dist/types/components/icon/icon.vue.d.ts +20 -16
  212. package/dist/types/components/icon/icon.vue.d.ts.map +1 -1
  213. package/dist/types/components/icon/icon_constants.d.ts +2 -0
  214. package/dist/types/components/icon/icon_constants.d.ts.map +1 -1
  215. package/dist/types/components/icon/index.d.ts +1 -1
  216. package/dist/types/components/input_group/input_group.vue.d.ts +15 -6
  217. package/dist/types/components/input_group/input_group.vue.d.ts.map +1 -1
  218. package/dist/types/components/list_item_group/list_item_group.vue.d.ts +1 -1
  219. package/dist/types/components/modal/modal.vue.d.ts +7 -2
  220. package/dist/types/components/modal/modal.vue.d.ts.map +1 -1
  221. package/dist/types/components/notice/notice_action.vue.d.ts +3 -1
  222. package/dist/types/components/notice/notice_action.vue.d.ts.map +1 -1
  223. package/dist/types/components/popover/popover_header_footer.vue.d.ts +1 -1
  224. package/dist/types/components/radio/radio.vue.d.ts +2 -12
  225. package/dist/types/components/radio/radio.vue.d.ts.map +1 -1
  226. package/dist/types/components/skeleton/skeleton-list-item.vue.d.ts +1 -1
  227. package/dist/types/components/skeleton/skeleton-paragraph.vue.d.ts +3 -3
  228. package/dist/types/components/skeleton/skeleton-shape.vue.d.ts +2 -2
  229. package/dist/types/components/skeleton/skeleton-text.vue.d.ts +8 -3
  230. package/dist/types/components/skeleton/skeleton-text.vue.d.ts.map +1 -1
  231. package/dist/types/components/skeleton/skeleton.vue.d.ts +1 -1
  232. package/dist/types/components/toggle/toggle.vue.d.ts +1 -1
  233. package/dist/types/components/tooltip/tooltip.vue.d.ts +2 -2
  234. package/dist/types/index.d.ts +36 -29
  235. package/dist/types/recipes/buttons/callbar_button/callbar_button.vue.d.ts +1 -1
  236. package/dist/types/recipes/buttons/callbar_button_with_popover/callbar_button_with_popover.vue.d.ts +2 -2
  237. package/dist/types/recipes/comboboxes/combobox_multi_select/combobox_multi_select.vue.d.ts +1 -1
  238. package/dist/types/recipes/comboboxes/combobox_with_popover/combobox_with_popover.vue.d.ts +2 -2
  239. package/package.json +18 -58
  240. package/CHANGELOG.json +0 -1
  241. package/CHANGELOG.md +0 -2904
  242. package/dist/dialtone-vue.cjs +0 -6
  243. package/dist/dialtone-vue.cjs.map +0 -1
  244. package/dist/directives.cjs +0 -2
  245. package/dist/directives.cjs.map +0 -1
  246. package/dist/directives.js.map +0 -1
  247. package/dist/emoji.cjs +0 -2
  248. package/dist/emoji.cjs.map +0 -1
  249. package/dist/emoji.js +0 -36
  250. package/dist/emoji_picker-kiTOKaq8.js.map +0 -1
  251. package/dist/emoji_picker-njWWAm6V.cjs +0 -2
  252. package/dist/emoji_picker-njWWAm6V.cjs.map +0 -1
  253. package/dist/emoji_text_wrapper-48ClwKvf.js.map +0 -1
  254. package/dist/emoji_text_wrapper-ZlynvHnd.cjs +0 -2
  255. package/dist/emoji_text_wrapper-ZlynvHnd.cjs.map +0 -1
  256. package/dist/index-OF94C6nQ.js +0 -142834
  257. package/dist/index-OF94C6nQ.js.map +0 -1
  258. package/dist/index-Wx7Jagcr.cjs +0 -2
  259. package/dist/index-Wx7Jagcr.cjs.map +0 -1
  260. package/dist/message_input.cjs +0 -2
  261. package/dist/message_input.cjs.map +0 -1
  262. package/dist/message_input.js.map +0 -1
  263. package/dist/rich_text_editor-RVMsCB8N.cjs +0 -98
  264. package/dist/rich_text_editor-RVMsCB8N.cjs.map +0 -1
  265. package/dist/rich_text_editor-eMvTs_Gp.js +0 -16479
  266. package/dist/rich_text_editor-eMvTs_Gp.js.map +0 -1
  267. package/dist/tooltip-88U5vFMA.js +0 -2517
  268. package/dist/tooltip-88U5vFMA.js.map +0 -1
  269. package/dist/tooltip-i2wxFIIi.cjs +0 -22
  270. package/dist/tooltip-i2wxFIIi.cjs.map +0 -1
  271. package/dist/types/common/constants.d.ts.map +0 -1
  272. package/dist/types/common/dates.d.ts.map +0 -1
  273. package/dist/types/common/utils.d.ts.map +0 -1
  274. package/dist/types/common/validators.d.ts.map +0 -1
  275. package/dist/types/components/emoji_picker/emojis/index.d.ts +0 -50
  276. package/dist/types/components/emoji_picker/emojis/index.d.ts.map +0 -1
  277. package/dist/types/directives.d.ts +0 -2
  278. package/dist/types/directives.d.ts.map +0 -1
  279. package/dist/types/emoji.d.ts +0 -5
  280. package/dist/types/emoji.d.ts.map +0 -1
  281. package/dist/types/message_input.d.ts +0 -3
  282. package/dist/types/message_input.d.ts.map +0 -1
@@ -0,0 +1,552 @@
1
+ import { startOfWeek as M, getDay as l, addMonths as k, startOfMonth as w, addDays as u, getDate as y, endOfMonth as x, subMonths as _, getMonth as i, isEqual as R, getYear as d, set as L, format as Y } from "date-fns";
2
+ import { DtStack as g } from "./stack.js";
3
+ import { DtTooltip as T } from "./tooltip.js";
4
+ import { DtButton as b } from "./button.js";
5
+ import { n as m } from "../chunks/_plugin-vue2_normalizer-u6G_3nkj.js";
6
+ import { DtIcon as S } from "./icon.js";
7
+ import "../chunks/stack_constants-u7tNqGtc.js";
8
+ import "../chunks/popover_constants-qjlEkroB.js";
9
+ import "tippy.js";
10
+ import "./utils.js";
11
+ import "./constants.js";
12
+ import "vue";
13
+ import "./lazy-show.js";
14
+ import "../chunks/link_constants-vIUB92L4.js";
15
+ import "@dialpad/dialtone-icons/vue2";
16
+ import "../chunks/icon_constants-OpYAAKwF.js";
17
+ import "@dialpad/dialtone-icons/icons.json";
18
+ import "./skeleton.js";
19
+ const $ = 0, P = "MMMM", C = "long", f = (t) => t ? new Date(t) : /* @__PURE__ */ new Date(), F = (t, e, a) => {
20
+ const r = f(JSON.parse(JSON.stringify(t))), n = [];
21
+ for (let s = 0; s < 7; s++) {
22
+ const o = u(r, s), c = i(o) !== e;
23
+ n.push({
24
+ text: o.getDate(),
25
+ value: o,
26
+ currentMonth: !c,
27
+ isFirstDayOfMonth: o.getDate() === 1 && !c,
28
+ // will be selected if the date is the same as the selected day and is from the current month
29
+ selected: a ? o.getDate() === a && !c : !1
30
+ });
31
+ }
32
+ return n;
33
+ }, q = (t, e) => !t || !e ? !1 : R(t, e), N = (t, e, a) => {
34
+ const r = [], n = f(new Date(e, t)), s = f(new Date(e, t + 1, 0)), c = M(n, { weekStartsOn: $ }), p = (D) => {
35
+ const v = F(D, t, a);
36
+ if (r.push({ days: v }), !r[r.length - 1].days.some(
37
+ (h) => q(h.value, s)
38
+ )) {
39
+ const h = u(D, 7);
40
+ p(h);
41
+ }
42
+ };
43
+ return p(c), r;
44
+ }, O = (t, e) => {
45
+ const a = [1, 2, 3, 4, 5, 6, 7].map((s) => new Intl.DateTimeFormat(t, { weekday: "short", timeZone: "UTC" }).format(/* @__PURE__ */ new Date(`2017-01-0${s}T00:00:00+00:00`)).slice(0, 2)), r = a.slice(0, e), n = a.slice(e + 1, a.length);
46
+ return [a[e]].concat(...n).concat(...r);
47
+ }, A = (t, e, a) => new Intl.DateTimeFormat(a, { month: e }).format(new Date(2e3, t, 1)), B = (t) => {
48
+ const e = new Date(t), a = l(e), r = k(e, 1), n = w(r), s = l(n), o = (a - s + 7) % 7, c = u(n, o);
49
+ return y(c);
50
+ }, I = (t) => {
51
+ const e = new Date(t), a = l(e);
52
+ let n = x(_(e, 1));
53
+ for (; l(n) !== a; )
54
+ n = u(n, -1);
55
+ return y(n);
56
+ }, z = {
57
+ name: "DtDatepickerMonthYearPicker",
58
+ components: { DtButton: b, DtTooltip: T, DtStack: g, DtIcon: S },
59
+ props: {
60
+ locale: {
61
+ type: String,
62
+ required: !0
63
+ },
64
+ prevMonthLabel: {
65
+ type: String,
66
+ required: !0
67
+ },
68
+ nextMonthLabel: {
69
+ type: String,
70
+ required: !0
71
+ },
72
+ prevYearLabel: {
73
+ type: String,
74
+ required: !0
75
+ },
76
+ nextYearLabel: {
77
+ type: String,
78
+ required: !0
79
+ },
80
+ changeToLabel: {
81
+ type: String,
82
+ required: !0
83
+ },
84
+ selectedDate: {
85
+ type: Date,
86
+ required: !0
87
+ }
88
+ },
89
+ emits: [
90
+ /**
91
+ * Will retrieve the calendar days of the given date
92
+ *
93
+ * @event calendar-days
94
+ * @type {Array}
95
+ */
96
+ "calendar-days",
97
+ /**
98
+ * Will focus first day in calendar
99
+ *
100
+ * @event focus-first-day
101
+ */
102
+ "focus-first-day",
103
+ /**
104
+ * Will focus last day in calendar
105
+ *
106
+ * @event focus-last-day
107
+ */
108
+ "focus-last-day",
109
+ /**
110
+ * Will close the datepicker
111
+ *
112
+ * @event close-datepicker
113
+ */
114
+ "close-datepicker"
115
+ ],
116
+ data() {
117
+ return {
118
+ selectMonth: i(this.selectedDate),
119
+ selectYear: d(this.selectedDate),
120
+ highlightedDay: null,
121
+ focusPicker: 0,
122
+ focusRefs: [],
123
+ refNames: ["prevYearButtonRef", "prevMonthButtonRef", "nextMonthButtonRef", "nextYearButtonRef"]
124
+ };
125
+ },
126
+ computed: {
127
+ // Get days for the currently selected month and year and highlight the selected day
128
+ calendarDays() {
129
+ return N(this.selectMonth, this.selectYear, this.highlightedDay);
130
+ },
131
+ formattedMonth() {
132
+ return (t) => A(t, C, this.locale);
133
+ }
134
+ },
135
+ watch: {
136
+ selectMonth: {
137
+ handler() {
138
+ this.highlightDay(), this.$emit("calendar-days", this.calendarDays);
139
+ },
140
+ immediate: !0
141
+ },
142
+ selectYear: {
143
+ handler() {
144
+ this.highlightDay(), this.$emit("calendar-days", this.calendarDays);
145
+ },
146
+ immediate: !0
147
+ }
148
+ },
149
+ mounted() {
150
+ this.setButtonsRef(), this.focusMonthYearPicker();
151
+ },
152
+ methods: {
153
+ setButtonsRef() {
154
+ this.focusRefs = this.refNames.map((t) => this.$refs[t]);
155
+ },
156
+ focusMonthYearPicker() {
157
+ this.focusPicker = 0, this.focusRefs[0].$el.focus();
158
+ },
159
+ handleKeyDown(t) {
160
+ switch (t.key) {
161
+ case "ArrowLeft":
162
+ t.preventDefault(), this.focusPicker === 0 ? (this.focusPicker = 3, this.focusRefs[this.focusPicker].$el.focus()) : (this.focusPicker--, this.focusRefs[this.focusPicker].$el.focus());
163
+ break;
164
+ case "ArrowRight":
165
+ t.preventDefault(), this.focusPicker === 3 ? (this.focusPicker = 0, this.focusRefs[this.focusPicker].$el.focus()) : (this.focusPicker++, this.focusRefs[this.focusPicker].$el.focus());
166
+ break;
167
+ case "ArrowDown":
168
+ t.preventDefault(), this.$emit("focus-first-day");
169
+ break;
170
+ case "Tab":
171
+ t.preventDefault(), this.$emit("focus-first-day");
172
+ break;
173
+ case "Escape":
174
+ this.$emit("close-datepicker");
175
+ break;
176
+ }
177
+ },
178
+ highlightDay() {
179
+ const t = d(this.selectedDate), e = i(this.selectedDate);
180
+ t !== this.selectYear || e !== this.selectMonth ? this.highlightedDay = null : this.highlightedDay = y(this.selectedDate);
181
+ },
182
+ changeMonth(t) {
183
+ (this.selectMonth === 0 && t === -1 || this.selectMonth === 11 && t === 1) && (this.selectYear += t);
184
+ const e = L(this.selectedDate, { month: this.selectMonth, year: this.selectYear }), a = t === 1 ? k(e, 1) : _(e, 1);
185
+ this.selectMonth = i(a);
186
+ },
187
+ changeYear(t) {
188
+ this.selectYear = this.selectYear + t;
189
+ },
190
+ goToNextMonth() {
191
+ this.changeMonth(1);
192
+ },
193
+ goToPrevMonth() {
194
+ this.changeMonth(-1);
195
+ }
196
+ }
197
+ };
198
+ var K = function() {
199
+ var e = this, a = e._self._c;
200
+ return a("dt-stack", { staticClass: "d-datepicker__month-year", attrs: { direction: "row", gap: "300" } }, [a("dt-stack", { staticClass: "d-datepicker__nav", attrs: { as: "nav", direction: "row", gap: "200" } }, [a("dt-tooltip", { attrs: { message: e.prevYearLabel, placement: "top" }, scopedSlots: e._u([{ key: "anchor", fn: function() {
201
+ return [a("dt-button", { ref: e.refNames[0], staticClass: "d-datepicker__nav-btn", attrs: { id: "prevYearButton", size: "xs", importance: "clear", kind: "muted", circle: !0, type: "button", "aria-label": `${e.changeToLabel} ${e.prevYearLabel} ${e.selectYear - 1}` }, on: { click: function(r) {
202
+ return e.changeYear(-1);
203
+ }, keydown: function(r) {
204
+ return e.handleKeyDown(r);
205
+ } } }, [a("dt-icon", { attrs: { name: "chevrons-left", size: "200" } })], 1)];
206
+ }, proxy: !0 }]) }), a("dt-tooltip", { attrs: { message: e.prevMonthLabel, placement: "top" }, scopedSlots: e._u([{ key: "anchor", fn: function() {
207
+ return [a("dt-button", { ref: e.refNames[1], staticClass: "d-datepicker__nav-btn", attrs: { id: "prevMonthButton", size: "xs", importance: "clear", kind: "muted", circle: !0, type: "button", "aria-label": `${e.changeToLabel} ${e.prevMonthLabel} ${e.formattedMonth(e.selectMonth - 1)}` }, on: { click: function(r) {
208
+ return e.changeMonth(-1);
209
+ }, keydown: function(r) {
210
+ return e.handleKeyDown(r);
211
+ } } }, [a("dt-icon", { attrs: { name: "chevron-left", size: "200" } })], 1)];
212
+ }, proxy: !0 }]) })], 1), a("div", { staticClass: "d-datepicker__month-year-title", attrs: { id: "calendar-heading" } }, [e._v(" " + e._s(e.formattedMonth(e.selectMonth)) + " " + e._s(e.selectYear) + " ")]), a("dt-stack", { staticClass: "d-datepicker__nav", attrs: { as: "nav", direction: "row", gap: "200" } }, [a("dt-tooltip", { attrs: { message: e.nextMonthLabel, placement: "top" }, scopedSlots: e._u([{ key: "anchor", fn: function() {
213
+ return [a("dt-button", { ref: e.refNames[2], staticClass: "d-datepicker__nav-btn", attrs: { id: "nextMonthButton", size: "xs", importance: "clear", circle: !0, kind: "muted", type: "button", "aria-label": `${e.changeToLabel} ${e.nextMonthLabel} ${e.formattedMonth(e.selectMonth + 1)}` }, on: { click: function(r) {
214
+ return e.changeMonth(1);
215
+ }, keydown: function(r) {
216
+ return e.handleKeyDown(r);
217
+ } } }, [a("dt-icon", { attrs: { name: "chevron-right", size: "200" } })], 1)];
218
+ }, proxy: !0 }]) }), a("dt-tooltip", { attrs: { message: e.nextYearLabel, placement: "top" }, scopedSlots: e._u([{ key: "anchor", fn: function() {
219
+ return [a("dt-button", { ref: e.refNames[3], staticClass: "d-datepicker__nav-btn", attrs: { id: "nextYearButton", size: "xs", kind: "muted", circle: !0, importance: "clear", type: "button", "aria-label": `${e.changeToLabel} ${e.nextYearLabel} ${e.selectYear + 1}` }, on: { click: function(r) {
220
+ return e.changeYear(1);
221
+ }, keydown: function(r) {
222
+ return e.handleKeyDown(r);
223
+ } } }, [a("dt-icon", { attrs: { name: "chevrons-right", size: "200" } })], 1)];
224
+ }, proxy: !0 }]) })], 1)], 1);
225
+ }, E = [], W = /* @__PURE__ */ m(
226
+ z,
227
+ K,
228
+ E,
229
+ !1,
230
+ null,
231
+ null,
232
+ null,
233
+ null
234
+ );
235
+ const U = W.exports, H = {
236
+ name: "DtDatepickerCalendar",
237
+ components: { DtButton: b },
238
+ props: {
239
+ calendarDays: {
240
+ type: Array,
241
+ required: !0
242
+ },
243
+ locale: {
244
+ type: String,
245
+ required: !0
246
+ },
247
+ selectDayLabel: {
248
+ type: String,
249
+ required: !0
250
+ }
251
+ },
252
+ emits: [
253
+ /**
254
+ * Event fired when a date is selected
255
+ *
256
+ * @event select-date
257
+ * @type {Date}
258
+ */
259
+ "select-date",
260
+ /**
261
+ * Will focus the month and year picker
262
+ *
263
+ * @event focus-month-year-picker
264
+ */
265
+ "focus-month-year-picker",
266
+ /**
267
+ * Will close the datepicker
268
+ *
269
+ * @event close-datepicker
270
+ */
271
+ "close-datepicker"
272
+ ],
273
+ data() {
274
+ return {
275
+ // local selectedDay to override the received by props calendarDays
276
+ selectedDay: null,
277
+ focusDay: 0,
278
+ daysRef: []
279
+ };
280
+ },
281
+ computed: {
282
+ weekDays() {
283
+ return O(this.locale, $);
284
+ }
285
+ },
286
+ watch: {
287
+ calendarDays() {
288
+ this.focusDay = 0, this.selectedDay = null, this.daysRef = [], this.$nextTick(() => {
289
+ this.daysRef = [], this.setDayRef();
290
+ });
291
+ }
292
+ },
293
+ methods: {
294
+ dayAriaLabel(t) {
295
+ return `${this.selectDayLabel} ${t.text} ${Y(t.value, P)} ${d(t.value)}`;
296
+ },
297
+ setDayRef(t, e) {
298
+ this.calendarDays.forEach((a, r) => {
299
+ a.days.forEach((n, s) => {
300
+ const o = `buttonRef_${r}_${s}`, c = this.$refs[o];
301
+ c && n.currentMonth && this.daysRef.push({ el: c[0], day: n });
302
+ });
303
+ });
304
+ },
305
+ handleKeyDown(t) {
306
+ switch (t.key) {
307
+ case "ArrowUp":
308
+ t.preventDefault(), this.focusDay -= 7;
309
+ try {
310
+ this.daysRef[this.focusDay].el.$el.focus();
311
+ } catch {
312
+ const a = I(this.daysRef[this.focusDay + 7].day.value);
313
+ this.$emit("go-to-prev-month"), this.$nextTick(() => {
314
+ this.setDayRef(), this.daysRef[a - 1].el.$el.focus(), this.focusDay += a - 1;
315
+ });
316
+ }
317
+ break;
318
+ case "ArrowDown":
319
+ t.preventDefault(), this.focusDay += 7;
320
+ try {
321
+ this.daysRef[this.focusDay].el.$el.focus();
322
+ } catch {
323
+ const a = B(this.daysRef[this.focusDay - 7].day.value);
324
+ this.$emit("go-to-next-month"), this.$nextTick(() => {
325
+ this.setDayRef(), this.daysRef[a - 1].el.$el.focus(), this.focusDay += a - 1;
326
+ });
327
+ }
328
+ break;
329
+ case "ArrowLeft":
330
+ t.preventDefault(), this.focusDay > 0 ? (this.focusDay -= 1, this.daysRef[this.focusDay].el.$el.focus()) : (this.$emit("go-to-prev-month"), this.$nextTick(() => {
331
+ this.focusLastDay();
332
+ }));
333
+ break;
334
+ case "ArrowRight":
335
+ t.preventDefault(), this.focusDay < this.daysRef.length - 1 ? (this.focusDay += 1, this.daysRef[this.focusDay].el.$el.focus()) : (this.$emit("go-to-next-month"), this.$nextTick(() => {
336
+ this.focusFirstDay();
337
+ }));
338
+ break;
339
+ case "Tab":
340
+ t.preventDefault(), this.$emit("focus-month-year-picker");
341
+ break;
342
+ case "Escape":
343
+ this.$emit("close-datepicker");
344
+ break;
345
+ }
346
+ },
347
+ focusFirstDay() {
348
+ this.focusDay = 0, this.$nextTick(() => {
349
+ this.daysRef[this.focusDay].el.$el.focus();
350
+ });
351
+ },
352
+ focusLastDay() {
353
+ this.$nextTick(() => {
354
+ this.focusDay = this.daysRef.length - 1, this.daysRef[this.focusDay].el.$el.focus();
355
+ });
356
+ },
357
+ selectDay(t) {
358
+ t.currentMonth && (this.selectedDay = t.text, this.$emit("select-date", t.value));
359
+ }
360
+ }
361
+ };
362
+ var J = function() {
363
+ var e = this, a = e._self._c;
364
+ return a("table", { staticClass: "d-datepicker__calendar", attrs: { "aria-labelledby": "calendar-heading" } }, [a("thead", [a("tr", e._l(e.weekDays, function(r) {
365
+ return a("th", { key: r, staticClass: "d-datepicker__cell d-datepicker__cell--header", attrs: { scope: "col" } }, [a("span", { staticClass: "d-datepicker__weekday", attrs: { title: r, "aria-label": r } }, [e._v(" " + e._s(r))])]);
366
+ }), 0)]), a("tbody", e._l(e.calendarDays, function(r, n) {
367
+ return a("tr", { key: n }, e._l(r.days, function(s, o) {
368
+ return a("td", { key: n + o, staticClass: "d-datepicker__cell", attrs: { role: "listbox" } }, [a("dt-button", { ref: `buttonRef_${n}_${o}`, refInFor: !0, staticClass: "d-datepicker__day", class: {
369
+ "d-datepicker__day--disabled": !s.currentMonth,
370
+ "d-datepicker__day--selected": e.selectedDay ? s.text === e.selectedDay && s.currentMonth : s.selected
371
+ }, attrs: { circle: !0, size: "sm", importance: "clear", disabled: !s.currentMonth, type: "button", "aria-selected": e.selectedDay ? s.text === e.selectedDay && s.currentMonth : s.selected, "aria-label": e.dayAriaLabel(s), role: "option" }, on: { click: function(c) {
372
+ return e.selectDay(s);
373
+ }, keydown: function(c) {
374
+ return e.handleKeyDown(c);
375
+ } } }, [e._v(" " + e._s(s.text) + " ")])], 1);
376
+ }), 0);
377
+ }), 0)]);
378
+ }, G = [], Z = /* @__PURE__ */ m(
379
+ H,
380
+ J,
381
+ G,
382
+ !1,
383
+ null,
384
+ null,
385
+ null,
386
+ null
387
+ );
388
+ const j = Z.exports, Q = {
389
+ name: "DtDatepicker",
390
+ components: { DtStack: g, MonthYearPicker: U, Calendar: j },
391
+ props: {
392
+ /**
393
+ * Label for the previous month button
394
+ *
395
+ * @type {String}
396
+ * @example 'Previous month'
397
+ */
398
+ prevMonthLabel: {
399
+ type: String,
400
+ required: !0
401
+ },
402
+ /**
403
+ * Label for the next month button
404
+ *
405
+ * @type {String}
406
+ * @example 'Next month'
407
+ */
408
+ nextMonthLabel: {
409
+ type: String,
410
+ required: !0
411
+ },
412
+ /**
413
+ * Label for the previous year button
414
+ *
415
+ * @type {String}
416
+ * @example 'Previous year'
417
+ */
418
+ prevYearLabel: {
419
+ type: String,
420
+ required: !0
421
+ },
422
+ /**
423
+ * Label for the next year button
424
+ *
425
+ * @type {String}
426
+ * @example 'Next year'
427
+ */
428
+ nextYearLabel: {
429
+ type: String,
430
+ required: !0
431
+ },
432
+ /**
433
+ * Label for the select day button
434
+ *
435
+ * @type {String}
436
+ * @example 'Select day'
437
+ */
438
+ selectDayLabel: {
439
+ type: String,
440
+ required: !0
441
+ },
442
+ /**
443
+ * Label for the change to button
444
+ *
445
+ * @type {String}
446
+ * @example 'Change to'
447
+ */
448
+ changeToLabel: {
449
+ type: String,
450
+ required: !0
451
+ },
452
+ /**
453
+ * Locale for the calendar
454
+ *
455
+ * @type {String}
456
+ */
457
+ locale: {
458
+ type: String,
459
+ default: "en-US"
460
+ },
461
+ /**
462
+ * Selected date
463
+ *
464
+ * @type {Date}
465
+ */
466
+ selectedDate: {
467
+ type: Date,
468
+ default: () => /* @__PURE__ */ new Date()
469
+ }
470
+ },
471
+ emits: [
472
+ /**
473
+ * Event fired when a date is selected
474
+ *
475
+ * @event selected-date
476
+ * @type {Date}
477
+ */
478
+ "selected-date",
479
+ /**
480
+ * Event fired when user presses the esc key
481
+ *
482
+ * @event close-datepicker
483
+ */
484
+ "close-datepicker"
485
+ ],
486
+ data() {
487
+ return {
488
+ calendarDays: []
489
+ };
490
+ },
491
+ methods: {
492
+ updateCalendarDays(t) {
493
+ this.calendarDays = t;
494
+ }
495
+ }
496
+ };
497
+ var V = function() {
498
+ var e = this, a = e._self._c;
499
+ return a("dt-stack", { staticClass: "d-datepicker", attrs: { gap: "400" } }, [a("div", { staticClass: "d-datepicker__hd" }, [a("month-year-picker", { ref: "monthYearPicker", attrs: { locale: e.locale, "prev-month-label": e.prevMonthLabel, "next-month-label": e.nextMonthLabel, "prev-year-label": e.prevYearLabel, "next-year-label": e.nextYearLabel, "change-to-label": e.changeToLabel, "selected-date": e.selectedDate }, on: { "calendar-days": e.updateCalendarDays, "focus-first-day": function(r) {
500
+ return e.$refs.calendar.focusFirstDay();
501
+ }, "focus-last-day": function(r) {
502
+ return e.$refs.calendar.focusLastDay();
503
+ }, "close-datepicker": function(r) {
504
+ return e.$emit("close-datepicker");
505
+ } } })], 1), a("div", { staticClass: "d-datepicker__bd" }, [a("calendar", { ref: "calendar", attrs: { locale: e.locale, "calendar-days": e.calendarDays, "select-day-label": e.selectDayLabel }, on: { "select-date": function(r) {
506
+ return e.$emit("selected-date", r);
507
+ }, "focus-month-year-picker": function(r) {
508
+ return e.$refs.monthYearPicker.focusMonthYearPicker();
509
+ }, "close-datepicker": function(r) {
510
+ return e.$emit("close-datepicker");
511
+ }, "go-to-next-month": function(r) {
512
+ return e.$refs.monthYearPicker.goToNextMonth();
513
+ }, "go-to-prev-month": function(r) {
514
+ return e.$refs.monthYearPicker.goToPrevMonth();
515
+ } } })], 1)]);
516
+ }, X = [], ee = /* @__PURE__ */ m(
517
+ Q,
518
+ V,
519
+ X,
520
+ !1,
521
+ null,
522
+ null,
523
+ null,
524
+ null
525
+ );
526
+ const _e = ee.exports;
527
+ function ge(t, e = "default") {
528
+ return new Intl.DateTimeFormat(e, { weekday: "long", year: "numeric", month: "long", day: "numeric" }).format(t);
529
+ }
530
+ function be(t, e = "default") {
531
+ return new Intl.DateTimeFormat(e, { year: "numeric", month: "long", day: "numeric" }).format(t);
532
+ }
533
+ function $e(t, e = "default", a = !0) {
534
+ const r = a ? { weekday: "short", year: "numeric", month: "short", day: "numeric" } : { year: "numeric", month: "short", day: "numeric" };
535
+ return new Intl.DateTimeFormat(e, r).format(t);
536
+ }
537
+ function ve(t, e = "default", a = !1) {
538
+ const r = a ? "short" : "long";
539
+ return new Intl.DateTimeFormat(e, { month: r, day: "numeric" }).format(t);
540
+ }
541
+ function Me(t, e = "default") {
542
+ return new Intl.DateTimeFormat(e, { year: "2-digit", month: "2-digit", day: "2-digit" }).format(t);
543
+ }
544
+ export {
545
+ _e as DtDatepicker,
546
+ ge as formatLong,
547
+ be as formatMedium,
548
+ ve as formatNoYear,
549
+ Me as formatNumerical,
550
+ $e as formatShort
551
+ };
552
+ //# sourceMappingURL=datepicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datepicker.js","sources":["../../components/datepicker/datepicker_constants.js","../../components/datepicker/utils.js","../../components/datepicker/modules/month-year-picker.vue","../../components/datepicker/modules/calendar.vue","../../components/datepicker/datepicker.vue","../../components/datepicker/formatUtils.js"],"sourcesContent":["/**\n * Week start day\n * 0 - Sunday\n * 1 - Monday\n */\nexport const WEEK_START = 0;\n\nexport const MONTH_FORMAT = 'MMMM';\n\nexport const INTL_MONTH_FORMAT = 'long';\n","import {\n startOfWeek, addDays, getMonth, isEqual,\n addMonths, startOfMonth, getDay, getDate,\n subMonths, endOfMonth,\n} from 'date-fns';\nimport { WEEK_START } from '@/components/datepicker/datepicker_constants.js';\n\nconst _parsedGetDate = (value) => (value ? new Date(value) : new Date());\n\n/**\n * Get 7 days from the provided start date, month is used to check\n * whether the date is from the specified month or in the offset\n */\nconst getWeekDays = (startDay, month, selectedDay) => {\n const startDate = _parsedGetDate(JSON.parse(JSON.stringify(startDay)));\n const dates = [];\n for (let i = 0; i < 7; i++) {\n const next = addDays(startDate, i);\n const isNext = getMonth(next) !== month;\n dates.push({\n text: next.getDate(),\n value: next,\n currentMonth: !isNext,\n isFirstDayOfMonth: next.getDate() === 1 && !isNext,\n // will be selected if the date is the same as the selected day and is from the current month\n selected: selectedDay ? (next.getDate() === selectedDay && !isNext) : false,\n });\n }\n return dates;\n};\n\nconst isDateEqual = (date, dateToCompare) => {\n if (!date || !dateToCompare) {\n return false;\n }\n return isEqual(date, dateToCompare);\n};\n\n/**\n * Get days for the calendar to be displayed in a table grouped by weeks\n */\nexport const getCalendarDays = (month, year, selectedDay) => {\n const weeks = [];\n const firstDate = _parsedGetDate(new Date(year, month));\n const lastDate = _parsedGetDate(new Date(year, month + 1, 0));\n\n const weekStartsOn = WEEK_START;\n\n const firstDateInCalendar = startOfWeek(firstDate, { weekStartsOn });\n\n const addDaysToWeek = (date) => {\n const days = getWeekDays(date, month, selectedDay);\n\n weeks.push({ days });\n\n if (\n !weeks[weeks.length - 1].days.some((day) =>\n isDateEqual(day.value, lastDate),\n )\n ) {\n const nextDate = addDays(date, 7);\n addDaysToWeek(nextDate);\n }\n };\n\n addDaysToWeek(firstDateInCalendar);\n\n return weeks;\n};\n\n/**\n * Generate week day names based on locale and in order specified in week start\n */\nexport const getWeekDayNames = (locale, weekStart) => {\n // Get list in order from sun ... sat\n const days = [1, 2, 3, 4, 5, 6, 7].map((day) => {\n return new Intl.DateTimeFormat(locale, { weekday: 'short', timeZone: 'UTC' })\n .format(new Date(`2017-01-0${day}T00:00:00+00:00`))\n .slice(0, 2);\n });\n\n // Get days that are in order before specified week start\n const beforeWeekStart = days.slice(0, weekStart);\n // Get days that are in order after specified week start\n const afterWeekStart = days.slice(weekStart + 1, days.length);\n\n // return them in correct order\n return [days[weekStart]].concat(...afterWeekStart).concat(...beforeWeekStart);\n};\n\nexport const formatMonth = (month, monthFormat, locale) => {\n return new Intl.DateTimeFormat(locale, { month: monthFormat }).format(new Date(2000, month, 1));\n};\n\nexport const calculateNextFocusDate = (currentDate) => {\n const date = new Date(currentDate);\n const currentWeekday = getDay(date);\n const nextMonthDate = addMonths(date, 1);\n const nextMonthStart = startOfMonth(nextMonthDate);\n const nextMonthStartWeekday = getDay(nextMonthStart);\n\n const dayDifference = (currentWeekday - nextMonthStartWeekday + 7) % 7;\n\n // Add the difference in days to the first day of the next month\n const focusDate = addDays(nextMonthStart, dayDifference);\n\n // Returns only the day of the month\n return getDate(focusDate);\n};\n\nexport const calculatePrevFocusDate = (currentDate) => {\n const date = new Date(currentDate);\n const currentWeekday = getDay(date);\n\n // Move to the last day of the previous month\n const lastDayOfPrevMonth = endOfMonth(subMonths(date, 1));\n let focusDate = lastDayOfPrevMonth;\n\n // Adjust to the same weekday in the last week of the previous month\n while (getDay(focusDate) !== currentWeekday) {\n focusDate = addDays(focusDate, -1);\n }\n\n // Returns only the day of the month\n return getDate(focusDate);\n};\n","<template>\n <dt-stack\n direction=\"row\"\n class=\"d-datepicker__month-year\"\n gap=\"300\"\n >\n <dt-stack\n as=\"nav\"\n direction=\"row\"\n gap=\"200\"\n class=\"d-datepicker__nav\"\n >\n <dt-tooltip\n :message=\"prevYearLabel\"\n placement=\"top\"\n >\n <template #anchor>\n <dt-button\n id=\"prevYearButton\"\n :ref=\"refNames[0]\"\n size=\"xs\"\n importance=\"clear\"\n kind=\"muted\"\n :circle=\"true\"\n class=\"d-datepicker__nav-btn\"\n type=\"button\"\n :aria-label=\"`${changeToLabel} ${prevYearLabel} ${selectYear - 1}`\"\n @click=\"changeYear(-1)\"\n @keydown=\"handleKeyDown($event)\"\n >\n <dt-icon\n name=\"chevrons-left\"\n size=\"200\"\n />\n </dt-button>\n </template>\n </dt-tooltip>\n <dt-tooltip\n :message=\"prevMonthLabel\"\n placement=\"top\"\n >\n <template #anchor>\n <dt-button\n id=\"prevMonthButton\"\n :ref=\"refNames[1]\"\n size=\"xs\"\n importance=\"clear\"\n kind=\"muted\"\n :circle=\"true\"\n class=\"d-datepicker__nav-btn\"\n type=\"button\"\n :aria-label=\"`${changeToLabel} ${prevMonthLabel} ${formattedMonth(selectMonth - 1)}`\"\n @click=\"changeMonth(-1)\"\n @keydown=\"handleKeyDown($event)\"\n >\n <dt-icon\n name=\"chevron-left\"\n size=\"200\"\n />\n </dt-button>\n </template>\n </dt-tooltip>\n </dt-stack>\n <div\n id=\"calendar-heading\"\n class=\"d-datepicker__month-year-title\"\n >\n {{ formattedMonth(selectMonth) }}\n\n {{ selectYear }}\n </div>\n <dt-stack\n as=\"nav\"\n direction=\"row\"\n gap=\"200\"\n class=\"d-datepicker__nav\"\n >\n <dt-tooltip\n :message=\"nextMonthLabel\"\n placement=\"top\"\n >\n <template #anchor>\n <dt-button\n id=\"nextMonthButton\"\n :ref=\"refNames[2]\"\n size=\"xs\"\n importance=\"clear\"\n :circle=\"true\"\n kind=\"muted\"\n class=\"d-datepicker__nav-btn\"\n type=\"button\"\n :aria-label=\"`${changeToLabel} ${nextMonthLabel} ${formattedMonth(selectMonth + 1)}`\"\n @click=\"changeMonth(1)\"\n @keydown=\"handleKeyDown($event)\"\n >\n <dt-icon\n name=\"chevron-right\"\n size=\"200\"\n />\n </dt-button>\n </template>\n </dt-tooltip>\n <dt-tooltip\n :message=\"nextYearLabel\"\n placement=\"top\"\n >\n <template #anchor>\n <dt-button\n id=\"nextYearButton\"\n :ref=\"refNames[3]\"\n size=\"xs\"\n kind=\"muted\"\n :circle=\"true\"\n importance=\"clear\"\n class=\"d-datepicker__nav-btn\"\n type=\"button\"\n :aria-label=\"`${changeToLabel} ${nextYearLabel} ${selectYear + 1}`\"\n @click=\"changeYear(1)\"\n @keydown=\"handleKeyDown($event)\"\n >\n <dt-icon\n name=\"chevrons-right\"\n size=\"200\"\n />\n </dt-button>\n </template>\n </dt-tooltip>\n </dt-stack>\n </dt-stack>\n</template>\n\n<script>\nimport { DtIcon } from '@/components/icon';\nimport { getYear, addMonths, getMonth, set, subMonths, getDate } from 'date-fns';\nimport { getCalendarDays, formatMonth } from '../utils';\nimport { INTL_MONTH_FORMAT } from '../datepicker_constants';\nimport DtStack from '@/components/stack/stack.vue';\nimport DtTooltip from '@/components/tooltip/tooltip.vue';\nimport DtButton from '@/components/button/button.vue';\n\nexport default {\n name: 'DtDatepickerMonthYearPicker',\n\n components: { DtButton, DtTooltip, DtStack, DtIcon },\n\n props: {\n locale: {\n type: String,\n required: true,\n },\n\n prevMonthLabel: {\n type: String,\n required: true,\n },\n\n nextMonthLabel: {\n type: String,\n required: true,\n },\n\n prevYearLabel: {\n type: String,\n required: true,\n },\n\n nextYearLabel: {\n type: String,\n required: true,\n },\n\n changeToLabel: {\n type: String,\n required: true,\n },\n\n selectedDate: {\n type: Date,\n required: true,\n },\n },\n\n emits: [\n /**\n * Will retrieve the calendar days of the given date\n *\n * @event calendar-days\n * @type {Array}\n */\n 'calendar-days',\n\n /**\n * Will focus first day in calendar\n *\n * @event focus-first-day\n */\n 'focus-first-day',\n\n /**\n * Will focus last day in calendar\n *\n * @event focus-last-day\n */\n 'focus-last-day',\n\n /**\n * Will close the datepicker\n *\n * @event close-datepicker\n */\n 'close-datepicker',\n ],\n\n data () {\n return {\n selectMonth: getMonth(this.selectedDate),\n selectYear: getYear(this.selectedDate),\n highlightedDay: null,\n focusPicker: 0,\n focusRefs: [],\n refNames: ['prevYearButtonRef', 'prevMonthButtonRef', 'nextMonthButtonRef', 'nextYearButtonRef'],\n };\n },\n\n computed: {\n // Get days for the currently selected month and year and highlight the selected day\n calendarDays () {\n return getCalendarDays(this.selectMonth, this.selectYear, this.highlightedDay);\n },\n\n formattedMonth () {\n return (month) => formatMonth(month, INTL_MONTH_FORMAT, this.locale);\n },\n },\n\n watch: {\n selectMonth: {\n handler () {\n this.highlightDay();\n this.$emit('calendar-days', this.calendarDays);\n },\n\n immediate: true,\n },\n\n selectYear: {\n handler () {\n this.highlightDay();\n this.$emit('calendar-days', this.calendarDays);\n },\n\n immediate: true,\n },\n\n },\n\n mounted () {\n this.setButtonsRef();\n this.focusMonthYearPicker();\n },\n\n methods: {\n setButtonsRef () {\n this.focusRefs = this.refNames.map(refName => this.$refs[refName]);\n },\n\n focusMonthYearPicker () {\n this.focusPicker = 0;\n this.focusRefs[0].$el.focus();\n },\n\n handleKeyDown (event) {\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n if (this.focusPicker === 0) {\n this.focusPicker = 3;\n this.focusRefs[this.focusPicker].$el.focus();\n } else {\n this.focusPicker--;\n this.focusRefs[this.focusPicker].$el.focus();\n }\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n if (this.focusPicker === 3) {\n this.focusPicker = 0;\n this.focusRefs[this.focusPicker].$el.focus();\n } else {\n this.focusPicker++;\n this.focusRefs[this.focusPicker].$el.focus();\n }\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.$emit('focus-first-day');\n break;\n\n case 'Tab':\n event.preventDefault();\n this.$emit('focus-first-day');\n break;\n\n case 'Escape':\n this.$emit('close-datepicker');\n break;\n }\n },\n\n highlightDay () {\n const year = getYear(this.selectedDate);\n const month = getMonth(this.selectedDate);\n\n if (year !== this.selectYear || month !== this.selectMonth) {\n this.highlightedDay = null;\n } else {\n this.highlightedDay = getDate(this.selectedDate);\n }\n },\n\n changeMonth (value) {\n // Adjust year when changing from January to December or vice versa\n if ((this.selectMonth === 0 && value === -1) || (this.selectMonth === 11 && value === 1)) {\n this.selectYear += value;\n }\n\n // Calculate the new date by adding or subtracting months\n const initialDate = set(this.selectedDate, { month: this.selectMonth, year: this.selectYear });\n const newDate = value === 1 ? addMonths(initialDate, 1) : subMonths(initialDate, 1);\n\n // Update the selected month\n this.selectMonth = getMonth(newDate);\n },\n\n changeYear (value) {\n this.selectYear = this.selectYear + value;\n },\n\n goToNextMonth () {\n this.changeMonth(1);\n },\n\n goToPrevMonth () {\n this.changeMonth(-1);\n },\n },\n};\n</script>\n","<template>\n <table\n class=\"d-datepicker__calendar\"\n aria-labelledby=\"calendar-heading\"\n >\n <thead>\n <tr>\n <th\n v-for=\"day in weekDays\"\n :key=\"day\"\n scope=\"col\"\n class=\"d-datepicker__cell d-datepicker__cell--header\"\n >\n <span\n class=\"d-datepicker__weekday\"\n :title=\"day\"\n :aria-label=\"day\"\n > {{ day }}</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n v-for=\"(week, indexWeek) in calendarDays\"\n :key=\"indexWeek\"\n >\n <td\n v-for=\"(day, indexDays) in week.days\"\n :key=\"indexWeek + indexDays\"\n class=\"d-datepicker__cell\"\n role=\"listbox\"\n >\n <dt-button\n :ref=\"`buttonRef_${indexWeek}_${indexDays}`\"\n class=\"d-datepicker__day\"\n :circle=\"true\"\n size=\"sm\"\n importance=\"clear\"\n :disabled=\"!day.currentMonth\"\n :class=\"{\n 'd-datepicker__day--disabled': !day.currentMonth,\n 'd-datepicker__day--selected': selectedDay\n ? ((day.text === selectedDay) && day.currentMonth)\n : day.selected,\n }\"\n type=\"button\"\n :aria-selected=\"!!selectedDay ? ((day.text === selectedDay) && day.currentMonth) : day.selected\"\n :aria-label=\"dayAriaLabel(day)\"\n role=\"option\"\n @click=\"selectDay(day)\"\n @keydown=\"handleKeyDown($event)\"\n >\n {{ day.text }}\n </dt-button>\n </td>\n </tr>\n </tbody>\n </table>\n</template>\n\n<script>\nimport { getWeekDayNames, calculateNextFocusDate, calculatePrevFocusDate } from '@/components/datepicker/utils';\nimport { WEEK_START, MONTH_FORMAT } from '@/components/datepicker/datepicker_constants.js';\nimport { format, getYear } from 'date-fns';\nimport DtButton from '@/components/button/button.vue';\n\nexport default {\n name: 'DtDatepickerCalendar',\n components: { DtButton },\n\n props: {\n calendarDays: {\n type: Array,\n required: true,\n },\n\n locale: {\n type: String,\n required: true,\n },\n\n selectDayLabel: {\n type: String,\n required: true,\n },\n },\n\n emits: [\n /**\n * Event fired when a date is selected\n *\n * @event select-date\n * @type {Date}\n */\n 'select-date',\n\n /**\n * Will focus the month and year picker\n *\n * @event focus-month-year-picker\n */\n 'focus-month-year-picker',\n\n /**\n * Will close the datepicker\n *\n * @event close-datepicker\n */\n 'close-datepicker',\n ],\n\n data () {\n return {\n // local selectedDay to override the received by props calendarDays\n selectedDay: null,\n focusDay: 0,\n daysRef: [],\n };\n },\n\n computed: {\n weekDays () {\n return getWeekDayNames(this.locale, WEEK_START);\n },\n },\n\n watch: {\n calendarDays () {\n // on calendarDays update, reset our local variables\n this.focusDay = 0;\n this.selectedDay = null;\n\n this.daysRef = [];\n\n this.$nextTick(() => {\n this.daysRef = [];\n this.setDayRef();\n });\n },\n },\n\n methods: {\n dayAriaLabel (day) {\n return `${this.selectDayLabel} ${day.text} ${format(day.value, MONTH_FORMAT)} ${getYear(day.value)}`;\n },\n\n setDayRef (el, day) {\n this.calendarDays.forEach((week, weekIndex) => {\n week.days.forEach((day, dayIndex) => {\n const refKey = `buttonRef_${weekIndex}_${dayIndex}`;\n const dayButton = this.$refs[refKey];\n if (dayButton && day.currentMonth) {\n this.daysRef.push({ el: dayButton[0], day });\n }\n });\n });\n },\n\n handleKeyDown (event) {\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this.focusDay -= 7;\n try {\n this.daysRef[this.focusDay].el.$el.focus();\n } catch (error) {\n const prevFocusDate = calculatePrevFocusDate(this.daysRef[this.focusDay + 7].day.value);\n this.$emit('go-to-prev-month');\n this.$nextTick(() => {\n this.setDayRef();\n this.daysRef[prevFocusDate - 1].el.$el.focus();\n this.focusDay += prevFocusDate - 1;\n });\n }\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n this.focusDay += 7;\n try {\n this.daysRef[this.focusDay].el.$el.focus();\n } catch (error) {\n const nextFocusDate = calculateNextFocusDate(this.daysRef[this.focusDay - 7].day.value);\n this.$emit('go-to-next-month');\n this.$nextTick(() => {\n this.setDayRef();\n this.daysRef[nextFocusDate - 1].el.$el.focus();\n this.focusDay += nextFocusDate - 1;\n });\n }\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n if (this.focusDay > 0) {\n this.focusDay -= 1;\n this.daysRef[this.focusDay].el.$el.focus();\n } else {\n // if we are on month first day, jump to last day of prev month\n this.$emit('go-to-prev-month');\n this.$nextTick(() => {\n this.focusLastDay();\n });\n }\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n if (this.focusDay < this.daysRef.length - 1) {\n this.focusDay += 1;\n this.daysRef[this.focusDay].el.$el.focus();\n } else {\n // if we are on month last day, jump to first day of next month\n this.$emit('go-to-next-month');\n this.$nextTick(() => {\n this.focusFirstDay();\n });\n }\n break;\n\n case 'Tab':\n event.preventDefault();\n this.$emit('focus-month-year-picker');\n break;\n\n case 'Escape':\n this.$emit('close-datepicker');\n break;\n }\n },\n\n focusFirstDay () {\n this.focusDay = 0;\n this.$nextTick(() => {\n this.daysRef[this.focusDay].el.$el.focus();\n });\n },\n\n focusLastDay () {\n this.$nextTick(() => {\n this.focusDay = this.daysRef.length - 1;\n this.daysRef[this.focusDay].el.$el.focus();\n });\n },\n\n selectDay (day) {\n if (!day.currentMonth) { return; }\n\n // local selectedDay is updated when a day is selected\n this.selectedDay = day.text;\n this.$emit('select-date', day.value);\n },\n },\n};\n</script>\n","<!-- eslint-disable vue/multi-word-component-names -->\n<template>\n <dt-stack\n class=\"d-datepicker\"\n gap=\"400\"\n >\n <div class=\"d-datepicker__hd\">\n <month-year-picker\n ref=\"monthYearPicker\"\n :locale=\"locale\"\n :prev-month-label=\"prevMonthLabel\"\n :next-month-label=\"nextMonthLabel\"\n :prev-year-label=\"prevYearLabel\"\n :next-year-label=\"nextYearLabel\"\n :change-to-label=\"changeToLabel\"\n :selected-date=\"selectedDate\"\n @calendar-days=\"updateCalendarDays\"\n @focus-first-day=\"$refs.calendar.focusFirstDay()\"\n @focus-last-day=\"$refs.calendar.focusLastDay()\"\n @close-datepicker=\"$emit('close-datepicker')\"\n />\n </div>\n <div class=\"d-datepicker__bd\">\n <calendar\n ref=\"calendar\"\n :locale=\"locale\"\n :calendar-days=\"calendarDays\"\n :select-day-label=\"selectDayLabel\"\n @select-date=\"$emit('selected-date', $event)\"\n @focus-month-year-picker=\"$refs.monthYearPicker.focusMonthYearPicker()\"\n @close-datepicker=\"$emit('close-datepicker')\"\n @go-to-next-month=\"$refs.monthYearPicker.goToNextMonth()\"\n @go-to-prev-month=\"$refs.monthYearPicker.goToPrevMonth()\"\n />\n </div>\n </dt-stack>\n</template>\n\n<script>\nimport MonthYearPicker from './modules/month-year-picker.vue';\nimport Calendar from './modules/calendar.vue';\nimport DtStack from '@/components/stack/stack.vue';\n\nexport default {\n name: 'DtDatepicker',\n\n components: { DtStack, MonthYearPicker, Calendar },\n\n props: {\n /**\n * Label for the previous month button\n *\n * @type {String}\n * @example 'Previous month'\n */\n prevMonthLabel: {\n type: String,\n required: true,\n },\n\n /**\n * Label for the next month button\n *\n * @type {String}\n * @example 'Next month'\n */\n nextMonthLabel: {\n type: String,\n required: true,\n },\n\n /**\n * Label for the previous year button\n *\n * @type {String}\n * @example 'Previous year'\n */\n prevYearLabel: {\n type: String,\n required: true,\n },\n\n /**\n * Label for the next year button\n *\n * @type {String}\n * @example 'Next year'\n */\n nextYearLabel: {\n type: String,\n required: true,\n },\n\n /**\n * Label for the select day button\n *\n * @type {String}\n * @example 'Select day'\n */\n selectDayLabel: {\n type: String,\n required: true,\n },\n\n /**\n * Label for the change to button\n *\n * @type {String}\n * @example 'Change to'\n */\n changeToLabel: {\n type: String,\n required: true,\n },\n\n /**\n * Locale for the calendar\n *\n * @type {String}\n */\n locale: {\n type: String,\n default: 'en-US',\n },\n\n /**\n * Selected date\n *\n * @type {Date}\n */\n selectedDate: {\n type: Date,\n default: () => (new Date()),\n },\n },\n\n emits: [\n /**\n * Event fired when a date is selected\n *\n * @event selected-date\n * @type {Date}\n */\n 'selected-date',\n\n /**\n * Event fired when user presses the esc key\n *\n * @event close-datepicker\n */\n 'close-datepicker',\n ],\n\n data () {\n return {\n calendarDays: [],\n };\n },\n\n methods: {\n updateCalendarDays (days) {\n this.calendarDays = days;\n },\n },\n};\n</script>\n","export function formatLong (date, locale = 'default') {\n return new Intl.DateTimeFormat(locale, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }).format(date);\n}\n\nexport function formatMedium (date, locale = 'default') {\n return new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'long', day: 'numeric' }).format(date);\n}\n\nexport function formatShort (date, locale = 'default', showWeekday = true) {\n const options = showWeekday ? { weekday: 'short', year: 'numeric', month: 'short', day: 'numeric' } : { year: 'numeric', month: 'short', day: 'numeric' };\n return new Intl.DateTimeFormat(locale, options).format(date);\n}\n\nexport function formatNoYear (date, locale = 'default', abbreviated = false) {\n const monthFormat = abbreviated ? 'short' : 'long';\n return new Intl.DateTimeFormat(locale, { month: monthFormat, day: 'numeric' }).format(date);\n}\n\nexport function formatNumerical (date, locale = 'default') {\n return new Intl.DateTimeFormat(locale, { year: '2-digit', month: '2-digit', day: '2-digit' }).format(date);\n}\n\nexport default {\n formatLong,\n formatMedium,\n formatShort,\n formatNoYear,\n formatNumerical,\n};\n"],"names":["WEEK_START","MONTH_FORMAT","INTL_MONTH_FORMAT","_parsedGetDate","value","getWeekDays","startDay","month","selectedDay","startDate","dates","i","next","addDays","isNext","getMonth","isDateEqual","date","dateToCompare","isEqual","getCalendarDays","year","weeks","firstDate","lastDate","firstDateInCalendar","startOfWeek","addDaysToWeek","days","day","nextDate","getWeekDayNames","locale","weekStart","beforeWeekStart","afterWeekStart","formatMonth","monthFormat","calculateNextFocusDate","currentDate","currentWeekday","getDay","nextMonthDate","addMonths","nextMonthStart","startOfMonth","nextMonthStartWeekday","dayDifference","focusDate","getDate","calculatePrevFocusDate","endOfMonth","subMonths","_sfc_main","DtButton","DtTooltip","DtStack","DtIcon","getYear","refName","event","initialDate","set","newDate","format","el","week","weekIndex","dayIndex","refKey","dayButton","prevFocusDate","nextFocusDate","MonthYearPicker","Calendar","formatLong","formatMedium","formatShort","showWeekday","options","formatNoYear","abbreviated","formatNumerical"],"mappings":"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"}