reka-ui
Version:
Vue port for Radix UI Primitives.
294 lines (291 loc) • 8.98 kB
JavaScript
const require_rolldown_runtime = require('../rolldown-runtime.cjs');
const require_shared_createContext = require('../shared/createContext.cjs');
const require_date_comparators = require('../date/comparators.cjs');
const require_date_utils = require('../date/utils.cjs');
const require_shared_useDirection = require('../shared/useDirection.cjs');
const require_shared_useId = require('../shared/useId.cjs');
const require_shared_useLocale = require('../shared/useLocale.cjs');
const require_Primitive_Primitive = require('../Primitive/Primitive.cjs');
const require_Primitive_usePrimitiveElement = require('../Primitive/usePrimitiveElement.cjs');
const require_YearPicker_useYearPicker = require('./useYearPicker.cjs');
const vue = require_rolldown_runtime.__toESM(require("vue"));
const __vueuse_core = require_rolldown_runtime.__toESM(require("@vueuse/core"));
//#region src/YearPicker/YearPickerRoot.vue?vue&type=script&setup=true&lang.ts
const _hoisted_1 = { style: {
"border": "0px",
"clip": "rect(0px, 0px, 0px, 0px)",
"clip-path": "inset(50%)",
"height": "1px",
"margin": "-1px",
"overflow": "hidden",
"padding": "0px",
"position": "absolute",
"white-space": "nowrap",
"width": "1px"
} };
const _hoisted_2 = {
role: "heading",
"aria-level": "2"
};
const [injectYearPickerRootContext, provideYearPickerRootContext] = require_shared_createContext.createContext("YearPickerRoot");
var YearPickerRoot_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
__name: "YearPickerRoot",
props: {
defaultValue: {
type: null,
required: false,
default: void 0
},
defaultPlaceholder: {
type: null,
required: false
},
placeholder: {
type: null,
required: false,
default: void 0
},
preventDeselect: {
type: Boolean,
required: false,
default: false
},
calendarLabel: {
type: String,
required: false
},
maxValue: {
type: null,
required: false
},
minValue: {
type: null,
required: false
},
locale: {
type: String,
required: false
},
disabled: {
type: Boolean,
required: false,
default: false
},
readonly: {
type: Boolean,
required: false,
default: false
},
initialFocus: {
type: Boolean,
required: false,
default: false
},
isYearDisabled: {
type: Function,
required: false,
default: void 0
},
isYearUnavailable: {
type: Function,
required: false,
default: void 0
},
dir: {
type: String,
required: false
},
nextPage: {
type: Function,
required: false
},
prevPage: {
type: Function,
required: false
},
modelValue: {
type: null,
required: false
},
multiple: {
type: Boolean,
required: false,
default: false
},
yearsPerPage: {
type: Number,
required: false,
default: 12
},
asChild: {
type: Boolean,
required: false
},
as: {
type: null,
required: false,
default: "div"
}
},
emits: ["update:modelValue", "update:placeholder"],
setup(__props, { emit: __emit }) {
const props = __props;
const emits = __emit;
const { disabled, readonly, initialFocus, multiple, minValue, maxValue, preventDeselect, isYearDisabled: propsIsYearDisabled, isYearUnavailable: propsIsYearUnavailable, calendarLabel, defaultValue, nextPage: propsNextPage, prevPage: propsPrevPage, dir: propDir, locale: propLocale, yearsPerPage } = (0, vue.toRefs)(props);
const { primitiveElement, currentElement: parentElement } = require_Primitive_usePrimitiveElement.usePrimitiveElement();
const locale = require_shared_useLocale.useLocale(propLocale);
const dir = require_shared_useDirection.useDirection(propDir);
const headingId = require_shared_useId.useId(void 0, "reka-year-picker-heading");
const modelValue = (0, __vueuse_core.useVModel)(props, "modelValue", emits, {
defaultValue: defaultValue.value,
passive: props.modelValue === void 0
});
const defaultDate = require_date_comparators.getDefaultDate({
defaultPlaceholder: props.placeholder,
defaultValue: modelValue.value,
locale: props.locale
});
const placeholder = (0, __vueuse_core.useVModel)(props, "placeholder", emits, {
defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),
passive: props.placeholder === void 0
});
function onPlaceholderChange(value) {
placeholder.value = value.copy();
}
const { fullCalendarLabel, headingValue, isYearDisabled, isYearUnavailable, isNextButtonDisabled, isPrevButtonDisabled, nextPage, prevPage, formatter, grid } = require_YearPicker_useYearPicker.useYearPicker({
locale,
placeholder,
minValue,
maxValue,
disabled,
yearsPerPage,
isYearDisabled: propsIsYearDisabled,
isYearUnavailable: propsIsYearUnavailable,
calendarLabel,
nextPage: propsNextPage,
prevPage: propsPrevPage
});
const { isInvalid, isYearSelected } = require_YearPicker_useYearPicker.useYearPickerState({
date: modelValue,
isYearDisabled,
isYearUnavailable
});
(0, vue.watch)(modelValue, (_modelValue) => {
if (Array.isArray(_modelValue) && _modelValue.length) {
const lastValue = _modelValue.at(-1);
if (lastValue && !require_date_comparators.isSameYear(placeholder.value, lastValue)) onPlaceholderChange(lastValue);
} else if (!Array.isArray(_modelValue) && _modelValue && !require_date_comparators.isSameYear(placeholder.value, _modelValue)) onPlaceholderChange(_modelValue);
});
function resolveYearValue(value, reference) {
if (!reference) return value.copy();
return value.copy().set({
month: reference.month,
day: reference.day
});
}
function onYearChange(value) {
if (!multiple.value) {
if (!modelValue.value) {
modelValue.value = resolveYearValue(value, placeholder.value);
return;
}
if (!preventDeselect.value && require_date_comparators.isSameYear(modelValue.value, value)) {
placeholder.value = resolveYearValue(value, modelValue.value);
modelValue.value = void 0;
} else modelValue.value = resolveYearValue(value, modelValue.value);
} else if (!modelValue.value) modelValue.value = [resolveYearValue(value, placeholder.value)];
else if (Array.isArray(modelValue.value)) {
const index = modelValue.value.findIndex((date) => require_date_comparators.isSameYear(date, value));
if (index === -1) modelValue.value = [...modelValue.value, resolveYearValue(value, placeholder.value)];
else if (!preventDeselect.value) {
const next = modelValue.value.filter((date) => !require_date_comparators.isSameYear(date, value));
if (!next.length) {
placeholder.value = resolveYearValue(value, modelValue.value[index]);
modelValue.value = void 0;
return;
}
modelValue.value = next.map((date) => date.copy());
}
}
}
(0, vue.onMounted)(() => {
if (initialFocus.value) require_date_utils.handleCalendarInitialFocus(parentElement.value);
});
provideYearPickerRootContext({
isYearUnavailable,
dir,
isYearDisabled,
locale,
formatter,
modelValue,
placeholder,
disabled,
initialFocus,
grid,
multiple,
readonly,
preventDeselect,
fullCalendarLabel,
headingValue,
headingId,
isInvalid,
isYearSelected,
isNextButtonDisabled,
isPrevButtonDisabled,
nextPage,
prevPage,
parentElement,
onPlaceholderChange,
onYearChange,
minValue,
maxValue,
yearsPerPage
});
return (_ctx, _cache) => {
return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_Primitive_Primitive.Primitive), {
ref_key: "primitiveElement",
ref: primitiveElement,
as: _ctx.as,
"as-child": _ctx.asChild,
"aria-label": (0, vue.unref)(fullCalendarLabel),
"data-readonly": (0, vue.unref)(readonly) ? "" : void 0,
"data-disabled": (0, vue.unref)(disabled) ? "" : void 0,
"data-invalid": (0, vue.unref)(isInvalid) ? "" : void 0,
dir: (0, vue.unref)(dir)
}, {
default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default", {
date: (0, vue.unref)(placeholder),
grid: (0, vue.unref)(grid),
locale: (0, vue.unref)(locale),
modelValue: (0, vue.unref)(modelValue)
}), (0, vue.createElementVNode)("div", _hoisted_1, [(0, vue.createElementVNode)("div", _hoisted_2, (0, vue.toDisplayString)((0, vue.unref)(fullCalendarLabel)), 1)])]),
_: 3
}, 8, [
"as",
"as-child",
"aria-label",
"data-readonly",
"data-disabled",
"data-invalid",
"dir"
]);
};
}
});
//#endregion
//#region src/YearPicker/YearPickerRoot.vue
var YearPickerRoot_default = YearPickerRoot_vue_vue_type_script_setup_true_lang_default;
//#endregion
Object.defineProperty(exports, 'YearPickerRoot_default', {
enumerable: true,
get: function () {
return YearPickerRoot_default;
}
});
Object.defineProperty(exports, 'injectYearPickerRootContext', {
enumerable: true,
get: function () {
return injectYearPickerRootContext;
}
});
//# sourceMappingURL=YearPickerRoot.cjs.map