hzzt-plus 0.0.6 → 0.0.7

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 (111) hide show
  1. package/dist/index.css +1 -1
  2. package/dist/index.full.js +1131 -180
  3. package/dist/index.full.min.js +18 -18
  4. package/dist/index.full.min.js.map +1 -1
  5. package/dist/index.full.min.mjs +17 -17
  6. package/dist/index.full.min.mjs.map +1 -1
  7. package/dist/index.full.mjs +1130 -181
  8. package/dist/locale/en.js +9 -0
  9. package/dist/locale/en.min.js +1 -1
  10. package/dist/locale/en.min.js.map +1 -1
  11. package/dist/locale/en.min.mjs +1 -1
  12. package/dist/locale/en.min.mjs.map +1 -1
  13. package/dist/locale/en.mjs +9 -0
  14. package/dist/locale/zh-cn.js +9 -0
  15. package/dist/locale/zh-cn.min.js +1 -1
  16. package/dist/locale/zh-cn.min.js.map +1 -1
  17. package/dist/locale/zh-cn.min.mjs +1 -1
  18. package/dist/locale/zh-cn.min.mjs.map +1 -1
  19. package/dist/locale/zh-cn.mjs +9 -0
  20. package/es/component.mjs +5 -1
  21. package/es/component.mjs.map +1 -1
  22. package/es/components/check-button/index.d.ts +109 -0
  23. package/es/components/check-button/index.mjs +8 -0
  24. package/es/components/check-button/index.mjs.map +1 -0
  25. package/es/components/check-button/src/index.mjs +86 -0
  26. package/es/components/check-button/src/index.mjs.map +1 -0
  27. package/es/components/check-button/src/index.vue.d.ts +109 -0
  28. package/es/components/check-button/style/css.d.ts +2 -0
  29. package/es/components/check-button/style/css.mjs +3 -0
  30. package/es/components/check-button/style/css.mjs.map +1 -0
  31. package/es/components/check-button/style/index.d.ts +2 -0
  32. package/es/components/check-button/style/index.mjs +3 -0
  33. package/es/components/check-button/style/index.mjs.map +1 -0
  34. package/es/components/index.d.ts +2 -0
  35. package/es/components/index.mjs +2 -0
  36. package/es/components/index.mjs.map +1 -1
  37. package/es/components/page-size/index.d.ts +27 -27
  38. package/es/components/page-size/src/index.vue.d.ts +27 -27
  39. package/es/components/quarter-picker/index.d.ts +1758 -0
  40. package/es/components/quarter-picker/index.mjs +8 -0
  41. package/es/components/quarter-picker/index.mjs.map +1 -0
  42. package/es/components/quarter-picker/src/hooks/util.d.ts +7 -0
  43. package/es/components/quarter-picker/src/hooks/util.mjs +35 -0
  44. package/es/components/quarter-picker/src/hooks/util.mjs.map +1 -0
  45. package/es/components/quarter-picker/src/index.mjs +276 -0
  46. package/es/components/quarter-picker/src/index.mjs.map +1 -0
  47. package/es/components/quarter-picker/src/index.vue.d.ts +1759 -0
  48. package/es/components/quarter-picker/style/css.d.ts +2 -0
  49. package/es/components/quarter-picker/style/css.mjs +3 -0
  50. package/es/components/quarter-picker/style/css.mjs.map +1 -0
  51. package/es/components/quarter-picker/style/index.d.ts +2 -0
  52. package/es/components/quarter-picker/style/index.mjs +3 -0
  53. package/es/components/quarter-picker/style/index.mjs.map +1 -0
  54. package/es/index.mjs +2 -0
  55. package/es/index.mjs.map +1 -1
  56. package/es/locale/lang/en.d.ts +9 -0
  57. package/es/locale/lang/en.mjs +9 -0
  58. package/es/locale/lang/en.mjs.map +1 -1
  59. package/es/locale/lang/zh-cn.d.ts +9 -0
  60. package/es/locale/lang/zh-cn.mjs +9 -0
  61. package/es/locale/lang/zh-cn.mjs.map +1 -1
  62. package/global.d.ts +2 -0
  63. package/lib/component.js +5 -1
  64. package/lib/component.js.map +1 -1
  65. package/lib/components/check-button/index.d.ts +109 -0
  66. package/lib/components/check-button/index.js +13 -0
  67. package/lib/components/check-button/index.js.map +1 -0
  68. package/lib/components/check-button/src/index.js +90 -0
  69. package/lib/components/check-button/src/index.js.map +1 -0
  70. package/lib/components/check-button/src/index.vue.d.ts +109 -0
  71. package/lib/components/check-button/style/css.d.ts +2 -0
  72. package/lib/components/check-button/style/css.js +6 -0
  73. package/lib/components/check-button/style/css.js.map +1 -0
  74. package/lib/components/check-button/style/index.d.ts +2 -0
  75. package/lib/components/check-button/style/index.js +6 -0
  76. package/lib/components/check-button/style/index.js.map +1 -0
  77. package/lib/components/index.d.ts +2 -0
  78. package/lib/components/index.js +4 -0
  79. package/lib/components/index.js.map +1 -1
  80. package/lib/components/page-size/index.d.ts +27 -27
  81. package/lib/components/page-size/src/index.vue.d.ts +27 -27
  82. package/lib/components/quarter-picker/index.d.ts +1758 -0
  83. package/lib/components/quarter-picker/index.js +13 -0
  84. package/lib/components/quarter-picker/index.js.map +1 -0
  85. package/lib/components/quarter-picker/src/hooks/util.d.ts +7 -0
  86. package/lib/components/quarter-picker/src/hooks/util.js +47 -0
  87. package/lib/components/quarter-picker/src/hooks/util.js.map +1 -0
  88. package/lib/components/quarter-picker/src/index.js +284 -0
  89. package/lib/components/quarter-picker/src/index.js.map +1 -0
  90. package/lib/components/quarter-picker/src/index.vue.d.ts +1759 -0
  91. package/lib/components/quarter-picker/style/css.d.ts +2 -0
  92. package/lib/components/quarter-picker/style/css.js +6 -0
  93. package/lib/components/quarter-picker/style/css.js.map +1 -0
  94. package/lib/components/quarter-picker/style/index.d.ts +2 -0
  95. package/lib/components/quarter-picker/style/index.js +6 -0
  96. package/lib/components/quarter-picker/style/index.js.map +1 -0
  97. package/lib/index.js +30 -26
  98. package/lib/index.js.map +1 -1
  99. package/lib/locale/lang/en.d.ts +9 -0
  100. package/lib/locale/lang/en.js +9 -0
  101. package/lib/locale/lang/en.js.map +1 -1
  102. package/lib/locale/lang/zh-cn.d.ts +9 -0
  103. package/lib/locale/lang/zh-cn.js +9 -0
  104. package/lib/locale/lang/zh-cn.js.map +1 -1
  105. package/package.json +1 -1
  106. package/theme/hzzt-check-button.css +1 -0
  107. package/theme/hzzt-quarter-picker.css +1 -0
  108. package/theme/index.css +1 -1
  109. package/theme/src/check-button.scss +55 -0
  110. package/theme/src/index.scss +2 -0
  111. package/theme/src/quarter-picker.scss +47 -0
@@ -0,0 +1,8 @@
1
+ import '../../utils/index.mjs';
2
+ import QuarterPicker from './src/index.mjs';
3
+ import { withInstall } from '../../utils/vue/install.mjs';
4
+
5
+ const HzztQuarterPicker = withInstall(QuarterPicker);
6
+
7
+ export { HzztQuarterPicker, HzztQuarterPicker as default };
8
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/quarter-picker/index.ts"],"sourcesContent":["import { withInstall } from '@hzzt-plus/utils'\n\nimport QuarterPicker from './src/index.vue'\n\nexport const HzztQuarterPicker = withInstall(QuarterPicker)\nexport default HzztQuarterPicker\n"],"names":[],"mappings":";;;;AAEY,MAAC,iBAAiB,GAAG,WAAW,CAAC,aAAa;;;;"}
@@ -0,0 +1,7 @@
1
+ import dayjs from 'dayjs';
2
+ import type { Dayjs } from 'dayjs';
3
+ export declare const parseDate: (date: string | number | Date, format: string | undefined, lang: string) => dayjs.Dayjs | undefined;
4
+ export declare const formatter: (date: string | number | Date | Dayjs, format: string | undefined, lang: string) => string | number | Date | dayjs.Dayjs;
5
+ export declare function hasClass(el: HTMLElement, cls: string): boolean;
6
+ export declare function nextDate(date: Date, amount?: number): Date;
7
+ export declare function range(n: number): number[];
@@ -0,0 +1,35 @@
1
+ import dayjs from 'dayjs';
2
+ import '../../../../utils/index.mjs';
3
+ import { isEmpty } from '../../../../utils/types.mjs';
4
+
5
+ const parseDate = function(date, format, lang) {
6
+ const day = isEmpty(format) || format === "x" ? dayjs(date).locale(lang) : dayjs(date, format).locale(lang);
7
+ return day.isValid() ? day : void 0;
8
+ };
9
+ const formatter = function(date, format, lang) {
10
+ if (isEmpty(format))
11
+ return date;
12
+ if (format === "x")
13
+ return +date;
14
+ return dayjs(date).locale(lang).format(format);
15
+ };
16
+ function hasClass(el, cls) {
17
+ if (!el || !cls)
18
+ return false;
19
+ if (cls.includes(" "))
20
+ throw new Error("className should not contain space.");
21
+ if (el.classList) {
22
+ return el.classList.contains(cls);
23
+ } else {
24
+ return ` ${el.className} `.includes(` ${cls} `);
25
+ }
26
+ }
27
+ function nextDate(date, amount = 1) {
28
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);
29
+ }
30
+ function range(n) {
31
+ return Array.from({ length: n }).map((_, n2) => n2);
32
+ }
33
+
34
+ export { formatter, hasClass, nextDate, parseDate, range };
35
+ //# sourceMappingURL=util.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.mjs","sources":["../../../../../../../packages/components/quarter-picker/src/hooks/util.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport { isEmpty } from '@hzzt-plus/utils'\nimport type { Dayjs } from 'dayjs'\n\nexport const parseDate = function (\n date: string | number | Date,\n format: string | undefined,\n lang: string\n) {\n const day =\n isEmpty(format) || format === 'x'\n ? dayjs(date).locale(lang)\n : dayjs(date, format).locale(lang)\n return day.isValid() ? day : undefined\n}\n\nexport const formatter = function (\n date: string | number | Date | Dayjs,\n format: string | undefined,\n lang: string\n) {\n if (isEmpty(format)) return date\n if (format === 'x') return +date\n return dayjs(date).locale(lang).format(format)\n}\n\nexport function hasClass(el: HTMLElement, cls: string) {\n if (!el || !cls) return false\n if (cls.includes(' ')) throw new Error('className should not contain space.')\n if (el.classList) {\n return el.classList.contains(cls)\n } else {\n return ` ${el.className} `.includes(` ${cls} `)\n }\n}\n\nexport function nextDate(date: Date, amount = 1) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount)\n}\n\nexport function range(n: number) {\n return Array.from({ length: n }).map((_, n) => n)\n}\n"],"names":[],"mappings":";;;;AAEY,MAAC,SAAS,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACtD,EAAE,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC9G,EAAE,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;AACtC,EAAE;AACU,MAAC,SAAS,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACtD,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC;AACrB,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,IAAI,MAAM,KAAK,GAAG;AACpB,IAAI,OAAO,CAAC,IAAI,CAAC;AACjB,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACjD,EAAE;AACK,SAAS,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE;AAClC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG;AACjB,IAAI,OAAO,KAAK,CAAC;AACjB,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AACvB,IAAI,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AAC3D,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE;AACpB,IAAI,OAAO,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtC,GAAG,MAAM;AACT,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,GAAG;AACH,CAAC;AACM,SAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;AAC3C,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;AAChF,CAAC;AACM,SAAS,KAAK,CAAC,CAAC,EAAE;AACzB,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD;;;;"}
@@ -0,0 +1,276 @@
1
+ import { defineComponent, useAttrs, ref, computed, watch, openBlock, createBlock, unref, withCtx, createVNode, mergeProps, createCommentVNode, createElementVNode, toDisplayString, normalizeClass } from 'vue';
2
+ import { useFormSize, useFormDisabled, ElPopover, ElInput } from 'element-plus';
3
+ import dayjs from 'dayjs';
4
+ import '../../../hooks/index.mjs';
5
+ import HzztIcon from '../../icon/src/index.mjs';
6
+ import { range, nextDate, parseDate, formatter, hasClass } from './hooks/util.mjs';
7
+ import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
8
+ import { useSizeProp, useGlobalSize } from '../../../hooks/use-size/index.mjs';
9
+ import { useLocale } from '../../../hooks/use-locale/index.mjs';
10
+ import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
11
+
12
+ const _hoisted_1 = { class: "el-date-picker" };
13
+ const _hoisted_2 = { class: "el-picker-panel__body" };
14
+ const _hoisted_3 = {
15
+ class: "el-date-picker__header el-date-picker__header--bordered",
16
+ style: { "margin": "0px", "line-height": "30px" }
17
+ };
18
+ const _hoisted_4 = ["aria-label"];
19
+ const _hoisted_5 = {
20
+ role: "button",
21
+ class: "el-date-picker__header-label"
22
+ };
23
+ const _hoisted_6 = ["aria-label"];
24
+ const _hoisted_7 = { class: "el-picker-panel__content" };
25
+ const _hoisted_8 = { class: "cell" };
26
+ const _hoisted_9 = { class: "cell" };
27
+ const _hoisted_10 = { class: "cell" };
28
+ const _hoisted_11 = { class: "cell" };
29
+ const __default__ = defineComponent({
30
+ name: "HzztQuarterPicker"
31
+ });
32
+ const _sfc_main = /* @__PURE__ */ defineComponent({
33
+ ...__default__,
34
+ props: {
35
+ size: useSizeProp,
36
+ format: {
37
+ type: String,
38
+ default: "YYYY-Q"
39
+ },
40
+ valueFormat: String,
41
+ placeholder: String,
42
+ prefixIcon: String,
43
+ clearIcon: {
44
+ type: String,
45
+ default: "circle-close"
46
+ },
47
+ disabled: Boolean,
48
+ clearable: {
49
+ type: Boolean,
50
+ default: true
51
+ },
52
+ disabledDate: {
53
+ type: Function
54
+ },
55
+ modelValue: null
56
+ },
57
+ emits: ["update:modelValue", "change"],
58
+ setup(__props, { emit }) {
59
+ const props = __props;
60
+ const getDayCountOfQuarter = (year2, quarter) => {
61
+ switch (quarter) {
62
+ case 0:
63
+ if (year2 % 4 === 0 && year2 % 100 !== 0 || year2 % 400 === 0) {
64
+ return 91;
65
+ } else {
66
+ return 90;
67
+ }
68
+ case 1:
69
+ return 91;
70
+ default:
71
+ return 92;
72
+ }
73
+ };
74
+ const datesInYearAndQuarter = (year2, quarter) => {
75
+ const numOfDays = getDayCountOfQuarter(year2, quarter);
76
+ const firstDay = new Date(year2, quarter * 3, 1);
77
+ return range(numOfDays).map((n) => nextDate(firstDay, n));
78
+ };
79
+ const attrs = useAttrs();
80
+ const showClose = ref(false);
81
+ const pickerVisible = ref(false);
82
+ const referenceRef = ref();
83
+ const formSize = useFormSize();
84
+ const formDisabled = useFormDisabled();
85
+ const { lang, t } = useLocale();
86
+ const innerDate = ref(dayjs().locale(lang.value));
87
+ const ns = useNamespace("quarter-picker");
88
+ const triggerClass = computed(() => props.prefixIcon || "calendar");
89
+ const parsedValue = computed(() => {
90
+ if (!props.modelValue) {
91
+ return props.modelValue;
92
+ }
93
+ return parseDate(props.modelValue, props.valueFormat, lang.value);
94
+ });
95
+ const displayValue = computed(() => {
96
+ if (!props.modelValue)
97
+ return null;
98
+ return formatter(parsedValue.value, props.format, lang.value);
99
+ });
100
+ const tableKls = computed(() => {
101
+ return [ns.e("table")];
102
+ });
103
+ const year = computed(() => innerDate.value.year());
104
+ const yearLabel = computed(() => `${year.value} ${t("hzzt.quarterpicker.year")}`);
105
+ const trueSize = computed(() => props.size || formSize.value || useGlobalSize().value);
106
+ const trueDisabled = computed(() => props.disabled || formDisabled.value);
107
+ watch(() => props.modelValue, (value) => {
108
+ innerDate.value = value ? parsedValue.value : dayjs().locale(lang.value);
109
+ });
110
+ function handleMouseEnter() {
111
+ if (!trueDisabled.value && props.modelValue && props.clearable) {
112
+ showClose.value = true;
113
+ }
114
+ }
115
+ function handleClickIcon() {
116
+ if (!trueDisabled.value && showClose.value) {
117
+ emit("update:modelValue", null);
118
+ emit("change", null);
119
+ showClose.value = false;
120
+ pickerVisible.value = false;
121
+ if (referenceRef.value) {
122
+ referenceRef.value.blur();
123
+ }
124
+ }
125
+ }
126
+ function handleMousedownIcon(event) {
127
+ event.preventDefault();
128
+ }
129
+ function handleTableClick(event) {
130
+ let target = event.target;
131
+ if (target.tagName === "A") {
132
+ target = target.parentElement;
133
+ }
134
+ if (target.tagName !== "TD" || hasClass(target, "disabled"))
135
+ return;
136
+ const column = target.cellIndex;
137
+ const row = target.parentElement && target.parentElement.rowIndex || 0;
138
+ const quarter = row * 2 + column;
139
+ const month = quarter * 3;
140
+ let newDate = new Date(year.value, month, 1);
141
+ if (props.valueFormat) {
142
+ newDate = formatter(newDate, props.valueFormat, lang.value);
143
+ }
144
+ pickerVisible.value = false;
145
+ emit("update:modelValue", newDate);
146
+ emit("change", newDate);
147
+ }
148
+ const moveByYear = (forward) => {
149
+ const currentDate = innerDate.value;
150
+ const action = forward ? "add" : "subtract";
151
+ innerDate.value = currentDate[action](1, "year");
152
+ };
153
+ function getCellStyle(quarter) {
154
+ const style = {
155
+ disabled: false,
156
+ current: false,
157
+ quarter: false
158
+ };
159
+ const today = dayjs().locale(lang.value);
160
+ const date = parsedValue.value ? parsedValue.value : today;
161
+ style.disabled = typeof props.disabledDate === "function" ? datesInYearAndQuarter(year.value, quarter).every(props.disabledDate) : false;
162
+ style.current = date.year() === year.value && Number.parseInt(`${date.month() / 3}`) === quarter;
163
+ style.quarter = today.year() === year.value && Number.parseInt(`${today.month() / 3}`) === quarter;
164
+ return style;
165
+ }
166
+ return (_ctx, _cache) => {
167
+ return openBlock(), createBlock(unref(ElPopover), {
168
+ visible: pickerVisible.value,
169
+ "onUpdate:visible": _cache[3] || (_cache[3] = ($event) => pickerVisible.value = $event),
170
+ width: "auto",
171
+ "popper-class": "is-pure",
172
+ trigger: "click",
173
+ disabled: unref(trueDisabled),
174
+ placement: "bottom",
175
+ transition: "el-zoom-in-top"
176
+ }, {
177
+ reference: withCtx(() => [
178
+ createVNode(unref(ElInput), mergeProps({
179
+ ref_key: "referenceRef",
180
+ ref: referenceRef
181
+ }, unref(attrs), {
182
+ class: "el-date-editor",
183
+ readonly: "",
184
+ disabled: unref(trueDisabled),
185
+ size: unref(trueSize),
186
+ placeholder: __props.placeholder,
187
+ value: unref(displayValue),
188
+ "validate-event": false,
189
+ onMouseenter: handleMouseEnter,
190
+ onMouseleave: _cache[0] || (_cache[0] = ($event) => showClose.value = false)
191
+ }), {
192
+ prefix: withCtx(() => [
193
+ createVNode(HzztIcon, {
194
+ class: "el-input__icon",
195
+ name: unref(triggerClass)
196
+ }, null, 8, ["name"])
197
+ ]),
198
+ suffix: withCtx(() => [
199
+ showClose.value ? (openBlock(), createBlock(HzztIcon, {
200
+ key: 0,
201
+ class: "el-input__icon pointer",
202
+ name: __props.clearIcon,
203
+ onClick: handleClickIcon,
204
+ onMousedown: handleMousedownIcon
205
+ }, null, 8, ["name"])) : createCommentVNode("v-if", true)
206
+ ]),
207
+ _: 1
208
+ }, 16, ["disabled", "size", "placeholder", "value"])
209
+ ]),
210
+ default: withCtx(() => [
211
+ createElementVNode("div", _hoisted_1, [
212
+ createElementVNode("div", _hoisted_2, [
213
+ createElementVNode("div", _hoisted_3, [
214
+ createElementVNode("button", {
215
+ type: "button",
216
+ "aria-label": unref(t)(`hzzt.quarterpicker.prevYear`),
217
+ class: "el-picker-panel__icon-btn el-date-picker__prev-btn",
218
+ onClick: _cache[1] || (_cache[1] = ($event) => moveByYear(false))
219
+ }, [
220
+ createVNode(HzztIcon, { name: "d-arrow-left" })
221
+ ], 8, _hoisted_4),
222
+ createElementVNode("span", _hoisted_5, toDisplayString(unref(yearLabel)), 1),
223
+ createElementVNode("button", {
224
+ type: "button",
225
+ "aria-label": unref(t)(`hzzt.quarterpicker.nextYear`),
226
+ class: "el-picker-panel__icon-btn el-date-picker__next-btn",
227
+ onClick: _cache[2] || (_cache[2] = ($event) => moveByYear(true))
228
+ }, [
229
+ createVNode(HzztIcon, { name: "d-arrow-right" })
230
+ ], 8, _hoisted_6)
231
+ ]),
232
+ createElementVNode("div", _hoisted_7, [
233
+ createElementVNode("table", {
234
+ class: normalizeClass(unref(tableKls)),
235
+ onClick: handleTableClick
236
+ }, [
237
+ createElementVNode("tbody", null, [
238
+ createElementVNode("tr", null, [
239
+ createElementVNode("td", {
240
+ class: normalizeClass(["available", getCellStyle(0)])
241
+ }, [
242
+ createElementVNode("a", _hoisted_8, toDisplayString(unref(t)(`hzzt.quarterpicker.firstQuarter`)), 1)
243
+ ], 2),
244
+ createElementVNode("td", {
245
+ class: normalizeClass(["available", getCellStyle(1)])
246
+ }, [
247
+ createElementVNode("a", _hoisted_9, toDisplayString(unref(t)(`hzzt.quarterpicker.secondQuarter`)), 1)
248
+ ], 2)
249
+ ]),
250
+ createElementVNode("tr", null, [
251
+ createElementVNode("td", {
252
+ class: normalizeClass(["available", getCellStyle(2)])
253
+ }, [
254
+ createElementVNode("a", _hoisted_10, toDisplayString(unref(t)(`hzzt.quarterpicker.thirdQuarter`)), 1)
255
+ ], 2),
256
+ createElementVNode("td", {
257
+ class: normalizeClass(["available", getCellStyle(3)])
258
+ }, [
259
+ createElementVNode("a", _hoisted_11, toDisplayString(unref(t)(`hzzt.quarterpicker.fourthQuarter`)), 1)
260
+ ], 2)
261
+ ])
262
+ ])
263
+ ], 2)
264
+ ])
265
+ ])
266
+ ])
267
+ ]),
268
+ _: 1
269
+ }, 8, ["visible", "disabled"]);
270
+ };
271
+ }
272
+ });
273
+ var QuarterPicker = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "index.vue"]]);
274
+
275
+ export { QuarterPicker as default };
276
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/quarter-picker/src/index.vue"],"sourcesContent":["<template>\n <el-popover\n v-model:visible=\"pickerVisible\"\n width=\"auto\"\n popper-class=\"is-pure\"\n trigger=\"click\"\n :disabled=\"trueDisabled\"\n placement=\"bottom\"\n transition=\"el-zoom-in-top\"\n >\n <template #reference>\n <el-input\n ref=\"referenceRef\"\n v-bind=\"attrs\"\n class=\"el-date-editor\"\n readonly\n :disabled=\"trueDisabled\"\n :size=\"trueSize\"\n :placeholder=\"placeholder\"\n :value=\"displayValue\"\n :validate-event=\"false\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"showClose = false\"\n >\n <template #prefix>\n <hzzt-icon class=\"el-input__icon\" :name=\"triggerClass\" />\n </template>\n <template #suffix>\n <hzzt-icon\n v-if=\"showClose\"\n class=\"el-input__icon pointer\"\n :name=\"clearIcon\"\n @click=\"handleClickIcon\"\n @mousedown=\"handleMousedownIcon\"\n />\n </template>\n </el-input>\n </template>\n <div class=\"el-date-picker\">\n <div class=\"el-picker-panel__body\">\n <div\n class=\"el-date-picker__header el-date-picker__header--bordered\"\n style=\"margin: 0px; line-height: 30px\"\n >\n <button\n type=\"button\"\n :aria-label=\"t(`hzzt.quarterpicker.prevYear`)\"\n class=\"el-picker-panel__icon-btn el-date-picker__prev-btn\"\n @click=\"moveByYear(false)\"\n >\n <hzzt-icon name=\"d-arrow-left\" />\n </button>\n <span role=\"button\" class=\"el-date-picker__header-label\">{{\n yearLabel\n }}</span>\n <button\n type=\"button\"\n :aria-label=\"t(`hzzt.quarterpicker.nextYear`)\"\n class=\"el-picker-panel__icon-btn el-date-picker__next-btn\"\n @click=\"moveByYear(true)\"\n >\n <hzzt-icon name=\"d-arrow-right\" />\n </button>\n </div>\n <div class=\"el-picker-panel__content\">\n <table :class=\"tableKls\" @click=\"handleTableClick\">\n <tbody>\n <tr>\n <td class=\"available\" :class=\"getCellStyle(0)\">\n <a class=\"cell\">{{ t(`hzzt.quarterpicker.firstQuarter`) }}</a>\n </td>\n <td class=\"available\" :class=\"getCellStyle(1)\">\n <a class=\"cell\">{{\n t(`hzzt.quarterpicker.secondQuarter`)\n }}</a>\n </td>\n </tr>\n <tr>\n <td class=\"available\" :class=\"getCellStyle(2)\">\n <a class=\"cell\">{{ t(`hzzt.quarterpicker.thirdQuarter`) }}</a>\n </td>\n <td class=\"available\" :class=\"getCellStyle(3)\">\n <a class=\"cell\">{{\n t(`hzzt.quarterpicker.fourthQuarter`)\n }}</a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </el-popover>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref, useAttrs, watch } from 'vue'\nimport { ElInput, ElPopover, useFormDisabled, useFormSize } from 'element-plus'\nimport dayjs, { type Dayjs } from 'dayjs'\nimport {\n useGlobalSize,\n useLocale,\n useNamespace,\n useSizeProp,\n} from '@hzzt-plus/hooks'\nimport HzztIcon from '@hzzt-plus/components/icon/src/index.vue'\nimport { formatter, hasClass, nextDate, parseDate, range } from './hooks/util'\n\n// 获取指定年份和季度总天数\nconst getDayCountOfQuarter = (year: number, quarter: number) => {\n switch (quarter) {\n case 0: // 第一季度包含二月,需要对是否闰年进行判断处理\n if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {\n return 91\n } else {\n return 90\n }\n case 1:\n return 91\n default:\n return 92\n }\n}\n// 获取指定年份和季度的所有日期\nconst datesInYearAndQuarter = (year: number, quarter: number) => {\n const numOfDays = getDayCountOfQuarter(year, quarter)\n const firstDay = new Date(year, quarter * 3, 1)\n return range(numOfDays).map((n: number) => nextDate(firstDay, n))\n}\n\ntype DateHandler = (date: Date) => boolean\n\ndefineOptions({\n name: 'HzztQuarterPicker',\n})\n\nconst props = defineProps({\n size: useSizeProp,\n format: {\n type: String,\n default: 'YYYY-Q',\n },\n valueFormat: String,\n placeholder: String,\n prefixIcon: String,\n clearIcon: {\n type: String,\n default: 'circle-close',\n },\n disabled: Boolean,\n clearable: {\n type: Boolean,\n default: true,\n },\n disabledDate: {\n type: Function,\n },\n modelValue: null,\n})\n\nconst emit = defineEmits(['update:modelValue', 'change'])\n\nconst attrs = useAttrs()\n\nconst showClose = ref(false)\nconst pickerVisible = ref(false)\nconst referenceRef = ref()\n\nconst formSize = useFormSize()\nconst formDisabled = useFormDisabled()\nconst { lang, t } = useLocale()\n\nconst innerDate = ref(dayjs().locale(lang.value))\n\nconst ns = useNamespace('quarter-picker')\n\nconst triggerClass = computed(() => props.prefixIcon || 'calendar')\n\nconst parsedValue = computed(() => {\n if (!props.modelValue) {\n return props.modelValue\n }\n return parseDate(props.modelValue, props.valueFormat, lang.value)\n})\n\nconst displayValue = computed(() => {\n if (!props.modelValue) return null\n return formatter(parsedValue.value, props.format, lang.value)\n})\n\nconst tableKls = computed(() => {\n return [ns.e('table')]\n})\n\nconst year = computed(() => innerDate.value.year())\nconst yearLabel = computed(\n () => `${year.value} ${t('hzzt.quarterpicker.year')}`\n)\nconst trueSize = computed(\n () => props.size || formSize.value || useGlobalSize().value\n)\nconst trueDisabled = computed(() => props.disabled || formDisabled.value)\n\nwatch(\n () => props.modelValue,\n (value) => {\n innerDate.value = value ? parsedValue.value : dayjs().locale(lang.value)\n }\n)\n\nfunction handleMouseEnter() {\n if (!trueDisabled.value && props.modelValue && props.clearable) {\n showClose.value = true\n }\n}\n\nfunction handleClickIcon() {\n if (!trueDisabled.value && showClose.value) {\n emit('update:modelValue', null)\n emit('change', null)\n showClose.value = false\n pickerVisible.value = false\n if (referenceRef.value) {\n referenceRef.value.blur()\n }\n }\n}\n\nfunction handleMousedownIcon(event: MouseEvent) {\n // 阻止鼠标按下清空按钮,防止清空数据时季度选择面板闪现\n event.preventDefault()\n}\n\nfunction handleTableClick(event: PointerEvent) {\n let target = event.target! as HTMLElement\n\n if (target.tagName === 'A') {\n target = target.parentElement!\n }\n if (target.tagName !== 'TD' || hasClass(target as HTMLElement, 'disabled'))\n return\n const column = (target as HTMLTableCellElement).cellIndex\n const row =\n (target.parentElement &&\n (target.parentElement as HTMLTableRowElement).rowIndex) ||\n 0\n // 季度,从0开始\n const quarter = row * 2 + column\n // 季度开始月份,从0开始\n const month = quarter * 3\n let newDate: string | number | Date | Dayjs = new Date(year.value, month, 1)\n if (props.valueFormat) {\n newDate = formatter(newDate, props.valueFormat, lang.value)\n }\n pickerVisible.value = false\n emit('update:modelValue', newDate)\n emit('change', newDate)\n}\n\nconst moveByYear = (forward: boolean) => {\n const currentDate = innerDate.value\n const action = forward ? 'add' : 'subtract'\n\n innerDate.value = currentDate[action](1, 'year')\n}\n\nfunction getCellStyle(quarter: number) {\n const style = {\n disabled: false,\n current: false,\n quarter: false,\n }\n const today = dayjs().locale(lang.value)\n const date = parsedValue.value ? parsedValue.value : today\n style.disabled =\n typeof props.disabledDate === 'function'\n ? datesInYearAndQuarter(year.value, quarter).every(\n props.disabledDate as DateHandler\n )\n : false\n // 当前选中的季度样式\n style.current =\n date.year() === year.value &&\n Number.parseInt(`${date.month() / 3}`) === quarter\n // 今日所在季度样式\n style.quarter =\n today.year() === year.value &&\n Number.parseInt(`${today.month() / 3}`) === quarter\n return style\n}\n</script>\n"],"names":["year","_openBlock","_createBlock","_unref"],"mappings":"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"}