UNPKG

@public-ui/vue

Version:

Vue framework adapter for the KoliBri accessible web component library (@public-ui).

893 lines (887 loc) 19.4 kB
'use strict'; const vue = require('vue'); let tagNameTransformer; const setTagNameTransformer = (_tagNameTransformer) => { tagNameTransformer = _tagNameTransformer; }; const UPDATE_VALUE_EVENT = "update:modelValue"; const MODEL_VALUE = "modelValue"; const ROUTER_LINK_VALUE = "routerLink"; const NAV_MANAGER = "navManager"; const ROUTER_PROP_PREFIX = "router"; const ARIA_PROP_PREFIX = "aria"; const EMPTY_PROP = Symbol(); const DEFAULT_EMPTY_PROP = { default: EMPTY_PROP }; const getComponentClasses = (classes) => { return classes?.split(" ") || []; }; const getElementClasses = (ref2, componentClasses, defaultClasses = []) => { return [...Array.from(ref2.value?.classList || []), ...defaultClasses].filter( (c, i, self) => !componentClasses.has(c) && self.indexOf(c) === i ); }; const defineContainer = (name, defineCustomElement, componentProps = [], modelProp, modelUpdateEvent) => { if (defineCustomElement !== void 0) { defineCustomElement(); } const Container = vue.defineComponent((props, { attrs, slots, emit }) => { let modelPropValue = props[modelProp]; const containerRef = vue.ref(); const classes = new Set(getComponentClasses(attrs.class)); const vModelDirective = { created: (el) => { const eventsNames = Array.isArray(modelUpdateEvent) ? modelUpdateEvent : [modelUpdateEvent]; eventsNames.forEach((eventName) => { el.addEventListener(eventName.toLowerCase(), (e) => { modelPropValue = (e?.target)[modelProp]; emit(UPDATE_VALUE_EVENT, modelPropValue); }); }); } }; const currentInstance = vue.getCurrentInstance(); const hasRouter = currentInstance?.appContext?.provides[NAV_MANAGER]; const navManager = hasRouter ? vue.inject(NAV_MANAGER) : void 0; const handleRouterLink = (ev) => { const { routerLink } = props; if (routerLink === EMPTY_PROP) return; if (navManager !== void 0) { let navigationPayload = { event: ev }; for (const key in props) { const value = props[key]; if (props.hasOwnProperty(key) && key.startsWith(ROUTER_PROP_PREFIX) && value !== EMPTY_PROP) { navigationPayload[key] = value; } } navManager.navigate(navigationPayload); } else { console.warn("Tried to navigate, but no router was found. Make sure you have mounted Vue Router."); } }; return () => { modelPropValue = props[modelProp]; getComponentClasses(attrs.class).forEach((value) => { classes.add(value); }); const oldClick = props.onClick; const handleClick = (ev) => { if (oldClick !== void 0) { oldClick(ev); } if (!ev.defaultPrevented) { handleRouterLink(ev); } }; let propsToAdd = { ref: containerRef, class: getElementClasses(containerRef, classes), onClick: handleClick }; for (const key in props) { const value = props[key]; if (props.hasOwnProperty(key) && value !== EMPTY_PROP || key.startsWith(ARIA_PROP_PREFIX)) { propsToAdd[key] = value; } } if (modelProp) { if (props[MODEL_VALUE] !== EMPTY_PROP) { propsToAdd = { ...propsToAdd, [modelProp]: props[MODEL_VALUE] }; } else if (modelPropValue !== EMPTY_PROP) { propsToAdd = { ...propsToAdd, [modelProp]: modelPropValue }; } } const newTagName = typeof tagNameTransformer === "function" ? tagNameTransformer(name) : name; const node = vue.h(newTagName, propsToAdd, slots.default && slots.default()); return modelProp === void 0 ? node : vue.withDirectives(node, [[vModelDirective]]); }; }); if (typeof Container !== "function") { Container.name = name; Container.props = { [ROUTER_LINK_VALUE]: DEFAULT_EMPTY_PROP }; componentProps.forEach((componentProp) => { Container.props[componentProp] = DEFAULT_EMPTY_PROP; }); if (modelProp) { Container.props[MODEL_VALUE] = DEFAULT_EMPTY_PROP; Container.emits = [UPDATE_VALUE_EVENT]; } } return Container; }; const KolAbbr = /* @__PURE__ */ defineContainer("kol-abbr", void 0, [ "_label", "_tooltipAlign" ]); const KolAccordion = /* @__PURE__ */ defineContainer("kol-accordion", void 0, [ "_disabled", "_label", "_level", "_on", "_open" ]); const KolAlert = /* @__PURE__ */ defineContainer("kol-alert", void 0, [ "_alert", "_hasCloser", "_label", "_level", "_on", "_type", "_variant" ]); const KolAvatar = /* @__PURE__ */ defineContainer("kol-avatar", void 0, [ "_src", "_label" ]); const KolBadge = /* @__PURE__ */ defineContainer("kol-badge", void 0, [ "_color", "_icons", "_label", "_smartButton" ]); const KolBreadcrumb = /* @__PURE__ */ defineContainer("kol-breadcrumb", void 0, [ "_label", "_links" ]); const KolButton = /* @__PURE__ */ defineContainer("kol-button", void 0, [ "_accessKey", "_ariaControls", "_ariaDescription", "_ariaExpanded", "_ariaSelected", "_customClass", "_disabled", "_hideLabel", "_icons", "_id", "_label", "_name", "_on", "_role", "_shortKey", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_type", "_value", "_variant" ]); const KolButtonGroup = /* @__PURE__ */ defineContainer("kol-button-group", void 0); const KolButtonLink = /* @__PURE__ */ defineContainer("kol-button-link", void 0, [ "_accessKey", "_ariaControls", "_ariaDescription", "_ariaExpanded", "_ariaSelected", "_disabled", "_hideLabel", "_icons", "_id", "_label", "_name", "_on", "_role", "_shortKey", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_type", "_value" ]); const KolCard = /* @__PURE__ */ defineContainer("kol-card", void 0, [ "_on", "_hasCloser", "_label", "_level" ]); const KolCombobox = /* @__PURE__ */ defineContainer("kol-combobox", void 0, [ "_accessKey", "_placeholder", "_alert", "_disabled", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_msg", "_name", "_on", "_suggestions", "_required", "_shortKey", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value" ]); const KolDetails = /* @__PURE__ */ defineContainer("kol-details", void 0, [ "_disabled", "_label", "_level", "_on", "_open" ]); const KolDrawer = /* @__PURE__ */ defineContainer("kol-drawer", void 0, [ "_open", "_align", "_label", "_modal", "_on" ]); const KolForm = /* @__PURE__ */ defineContainer("kol-form", void 0, [ "_on", "_requiredText", "_errorList" ]); const KolHeading = /* @__PURE__ */ defineContainer("kol-heading", void 0, [ "_label", "_level", "_secondaryHeadline", "_variant" ]); const KolIcon = /* @__PURE__ */ defineContainer("kol-icon", void 0, [ "_icons", "_label" ]); const KolImage = /* @__PURE__ */ defineContainer("kol-image", void 0, [ "_alt", "_loading", "_sizes", "_src", "_srcset" ]); const KolIndentedText = /* @__PURE__ */ defineContainer("kol-indented-text", void 0); const KolInputCheckbox = /* @__PURE__ */ defineContainer("kol-input-checkbox", void 0, [ "_accessKey", "_alert", "_checked", "_hideError", "_disabled", "_error", "_hideLabel", "_hint", "_icons", "_id", "_indeterminate", "_label", "_labelAlign", "_msg", "_name", "_on", "_required", "_shortKey", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value", "_variant" ]); const KolInputColor = /* @__PURE__ */ defineContainer("kol-input-color", void 0, [ "_accessKey", "_alert", "_autoComplete", "_disabled", "_error", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_msg", "_name", "_on", "_shortKey", "_smartButton", "_suggestions", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value" ]); const KolInputDate = /* @__PURE__ */ defineContainer("kol-input-date", void 0, [ "_accessKey", "_alert", "_autoComplete", "_disabled", "_error", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_max", "_min", "_msg", "_name", "_on", "_readOnly", "_required", "_shortKey", "_smartButton", "_suggestions", "_syncValueBySelector", "_step", "_tabIndex", "_tooltipAlign", "_touched", "_type", "_value" ]); const KolInputEmail = /* @__PURE__ */ defineContainer("kol-input-email", void 0, [ "_accessKey", "_alert", "_autoComplete", "_disabled", "_error", "_hasCounter", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_maxLength", "_msg", "_multiple", "_name", "_on", "_pattern", "_placeholder", "_readOnly", "_required", "_shortKey", "_smartButton", "_suggestions", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value" ]); const KolInputFile = /* @__PURE__ */ defineContainer("kol-input-file", void 0, [ "_accept", "_accessKey", "_alert", "_disabled", "_error", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_msg", "_multiple", "_name", "_on", "_required", "_shortKey", "_smartButton", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value" ]); const KolInputNumber = /* @__PURE__ */ defineContainer("kol-input-number", void 0, [ "_accessKey", "_alert", "_autoComplete", "_disabled", "_error", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_max", "_min", "_msg", "_name", "_on", "_placeholder", "_readOnly", "_required", "_shortKey", "_smartButton", "_suggestions", "_step", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value" ]); const KolInputPassword = /* @__PURE__ */ defineContainer("kol-input-password", void 0, [ "_accessKey", "_alert", "_autoComplete", "_disabled", "_error", "_hasCounter", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_maxLength", "_msg", "_name", "_on", "_pattern", "_placeholder", "_readOnly", "_required", "_shortKey", "_smartButton", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value", "_variant" ]); const KolInputRadio = /* @__PURE__ */ defineContainer("kol-input-radio", void 0, [ "_accessKey", "_alert", "_disabled", "_error", "_hideError", "_hideLabel", "_hint", "_id", "_label", "_msg", "_name", "_on", "_options", "_orientation", "_required", "_shortKey", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value" ]); const KolInputRange = /* @__PURE__ */ defineContainer("kol-input-range", void 0, [ "_accessKey", "_alert", "_autoComplete", "_disabled", "_error", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_max", "_min", "_msg", "_name", "_on", "_shortKey", "_step", "_suggestions", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value" ]); const KolInputText = /* @__PURE__ */ defineContainer("kol-input-text", void 0, [ "_accessKey", "_alert", "_autoComplete", "_disabled", "_error", "_hasCounter", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_maxLength", "_msg", "_name", "_on", "_pattern", "_placeholder", "_readOnly", "_required", "_shortKey", "_spellCheck", "_suggestions", "_smartButton", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_type", "_value" ]); const KolKolibri = /* @__PURE__ */ defineContainer("kol-kolibri", void 0, [ "_color", "_labeled" ]); const KolLink = /* @__PURE__ */ defineContainer("kol-link", void 0, [ "_accessKey", "_ariaCurrentValue", "_ariaDescription", "_disabled", "_download", "_hideLabel", "_href", "_icons", "_label", "_on", "_role", "_shortKey", "_tabIndex", "_target", "_tooltipAlign" ]); const KolLinkButton = /* @__PURE__ */ defineContainer("kol-link-button", void 0, [ "_accessKey", "_ariaCurrentValue", "_ariaDescription", "_customClass", "_disabled", "_download", "_hideLabel", "_href", "_icons", "_label", "_on", "_role", "_shortKey", "_tabIndex", "_target", "_tooltipAlign", "_variant" ]); const KolLinkGroup = /* @__PURE__ */ defineContainer("kol-link-group", void 0, [ "_listStyleType", "_label", "_links", "_orientation" ]); const KolLogo = /* @__PURE__ */ defineContainer("kol-logo", void 0, [ "_org" ]); const KolModal = /* @__PURE__ */ defineContainer("kol-modal", void 0, [ "_activeElement", "_label", "_on", "_width" ]); const KolNav = /* @__PURE__ */ defineContainer("kol-nav", void 0, [ "_collapsible", "_hasCompactButton", "_hasIconsWhenExpanded", "_hideLabel", "_label", "_links", "_orientation" ]); const KolPagination = /* @__PURE__ */ defineContainer("kol-pagination", void 0, [ "_boundaryCount", "_customClass", "_label", "_hasButtons", "_page", "_pageSize", "_pageSizeOptions", "_on", "_siblingCount", "_tooltipAlign", "_max" ]); const KolPopoverButton = /* @__PURE__ */ defineContainer("kol-popover-button", void 0, [ "_accessKey", "_ariaControls", "_ariaDescription", "_ariaExpanded", "_ariaSelected", "_customClass", "_disabled", "_hideLabel", "_icons", "_id", "_label", "_name", "_on", "_popoverAlign", "_role", "_shortKey", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_type", "_value", "_variant" ]); const KolProgress = /* @__PURE__ */ defineContainer("kol-progress", void 0, [ "_label", "_max", "_unit", "_value", "_variant" ]); const KolQuote = /* @__PURE__ */ defineContainer("kol-quote", void 0, [ "_label", "_href", "_quote", "_variant" ]); const KolSelect = /* @__PURE__ */ defineContainer("kol-select", void 0, [ "_accessKey", "_alert", "_disabled", "_error", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_msg", "_multiple", "_name", "_on", "_options", "_required", "_shortKey", "_rows", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value" ]); const KolSingleSelect = /* @__PURE__ */ defineContainer("kol-single-select", void 0, [ "_accessKey", "_placeholder", "_alert", "_disabled", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_msg", "_name", "_on", "_options", "_required", "_shortKey", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value", "_hideClearButton" ]); const KolSkipNav = /* @__PURE__ */ defineContainer("kol-skip-nav", void 0, [ "_label", "_links" ]); const KolSpin = /* @__PURE__ */ defineContainer("kol-spin", void 0, [ "_show", "_variant" ]); const KolSplitButton = /* @__PURE__ */ defineContainer("kol-split-button", void 0, [ "_ariaControls", "_ariaExpanded", "_ariaSelected", "_customClass", "_disabled", "_hideLabel", "_icons", "_id", "_label", "_name", "_on", "_role", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_type", "_value", "_variant" ]); const KolSymbol = /* @__PURE__ */ defineContainer("kol-symbol", void 0, [ "_label", "_symbol" ]); const KolTable = /* @__PURE__ */ defineContainer("kol-table", void 0, [ "_allowMultiSort", "_data", "_dataFoot", "_headers", "_label", "_minWidth", "_pagination", "_paginationPosition", "_selection", "_on" ]); const KolTableStateful = /* @__PURE__ */ defineContainer("kol-table-stateful", void 0, [ "_allowMultiSort", "_data", "_dataFoot", "_headers", "_label", "_minWidth", "_pagination", "_paginationPosition", "_selection", "_on" ]); const KolTableStateless = /* @__PURE__ */ defineContainer("kol-table-stateless", void 0, [ "_data", "_dataFoot", "_headerCells", "_label", "_minWidth", "_on", "_selection" ]); const KolTabs = /* @__PURE__ */ defineContainer("kol-tabs", void 0, [ "_align", "_behavior", "_label", "_on", "_selected", "_tabs" ]); const KolTextarea = /* @__PURE__ */ defineContainer("kol-textarea", void 0, [ "_accessKey", "_adjustHeight", "_alert", "_disabled", "_error", "_hasCounter", "_hideError", "_hideLabel", "_hint", "_icons", "_id", "_label", "_maxLength", "_msg", "_name", "_on", "_placeholder", "_readOnly", "_resize", "_required", "_rows", "_shortKey", "_spellCheck", "_syncValueBySelector", "_tabIndex", "_tooltipAlign", "_touched", "_value" ]); const KolToastContainer = /* @__PURE__ */ defineContainer("kol-toast-container", void 0); const KolToolbar = /* @__PURE__ */ defineContainer("kol-toolbar", void 0, [ "_label", "_items" ]); const KolTree = /* @__PURE__ */ defineContainer("kol-tree", void 0, [ "_label" ]); const KolTreeItem = /* @__PURE__ */ defineContainer("kol-tree-item", void 0, [ "_active", "_label", "_open", "_href" ]); const KolTreeItemWc = /* @__PURE__ */ defineContainer("kol-tree-item-wc", void 0, [ "_active", "_label", "_open", "_href" ]); const KolVersion = /* @__PURE__ */ defineContainer("kol-version", void 0, [ "_label" ]); exports.KolAbbr = KolAbbr; exports.KolAccordion = KolAccordion; exports.KolAlert = KolAlert; exports.KolAvatar = KolAvatar; exports.KolBadge = KolBadge; exports.KolBreadcrumb = KolBreadcrumb; exports.KolButton = KolButton; exports.KolButtonGroup = KolButtonGroup; exports.KolButtonLink = KolButtonLink; exports.KolCard = KolCard; exports.KolCombobox = KolCombobox; exports.KolDetails = KolDetails; exports.KolDrawer = KolDrawer; exports.KolForm = KolForm; exports.KolHeading = KolHeading; exports.KolIcon = KolIcon; exports.KolImage = KolImage; exports.KolIndentedText = KolIndentedText; exports.KolInputCheckbox = KolInputCheckbox; exports.KolInputColor = KolInputColor; exports.KolInputDate = KolInputDate; exports.KolInputEmail = KolInputEmail; exports.KolInputFile = KolInputFile; exports.KolInputNumber = KolInputNumber; exports.KolInputPassword = KolInputPassword; exports.KolInputRadio = KolInputRadio; exports.KolInputRange = KolInputRange; exports.KolInputText = KolInputText; exports.KolKolibri = KolKolibri; exports.KolLink = KolLink; exports.KolLinkButton = KolLinkButton; exports.KolLinkGroup = KolLinkGroup; exports.KolLogo = KolLogo; exports.KolModal = KolModal; exports.KolNav = KolNav; exports.KolPagination = KolPagination; exports.KolPopoverButton = KolPopoverButton; exports.KolProgress = KolProgress; exports.KolQuote = KolQuote; exports.KolSelect = KolSelect; exports.KolSingleSelect = KolSingleSelect; exports.KolSkipNav = KolSkipNav; exports.KolSpin = KolSpin; exports.KolSplitButton = KolSplitButton; exports.KolSymbol = KolSymbol; exports.KolTable = KolTable; exports.KolTableStateful = KolTableStateful; exports.KolTableStateless = KolTableStateless; exports.KolTabs = KolTabs; exports.KolTextarea = KolTextarea; exports.KolToastContainer = KolToastContainer; exports.KolToolbar = KolToolbar; exports.KolTree = KolTree; exports.KolTreeItem = KolTreeItem; exports.KolTreeItemWc = KolTreeItemWc; exports.KolVersion = KolVersion; exports.setTagNameTransformer = setTagNameTransformer;