UNPKG

@dialpad/dialtone-vue

Version:

Vue component library for Dialpad's design system Dialtone

127 lines (126 loc) 3.7 kB
import { DtIconPlus as s, DtIconOption as d, DtIconCommand as u, DtIconArrowDown as p, DtIconArrowUp as l, DtIconArrowLeft as h, DtIconArrowRight as _, DtIconLayoutGrid as m } from "@dialpad/dialtone-icons/vue2"; import { n as w } from "../../_plugin-vue2_normalizer-DSLOjnn3.js"; const n = { "{win}": m, "{arrow-right}": _, "{arrow-left}": h, "{arrow-up}": l, "{arrow-down}": p, "{cmd}": u, "{opt}": d }, c = { "{cmd}": "Command", "{opt}": "Option", "{win}": "Windows", "{arrow-right}": "Right Arrow", "{arrow-left}": "Left Arrow", "{arrow-up}": "Up Arrow", "{arrow-down}": "Down Arrow", "{plus}": "plus" }, i = { ctrl: "Control", alt: "Alt", esc: "Escape", del: "Delete", ins: "Insert", pgup: "Page Up", pgdn: "Page Down", num: "Number", caps: "Caps Lock" }, f = { name: "DtKeyboardShortcut", components: { DtIconLayoutGrid: m, DtIconArrowRight: _, DtIconArrowLeft: h, DtIconArrowUp: l, DtIconArrowDown: p, DtIconCommand: u, DtIconOption: d, DtIconPlus: s }, props: { /** * If true, applies inverted styles. * @values true, false */ inverted: { type: Boolean, default: !1 }, /** * Include any of these tokens in your string to render the corresponding symbol: * {cmd} {opt} {win} {arrow-right} {arrow-left} {arrow-up} {arrow-down} */ shortcut: { type: String, required: !0 }, /** * Optional text to override the auto-generated accessible text for assistive technology. * If not provided, accessible text will be automatically generated from the shortcut. */ screenReaderText: { type: String, default: null } }, data() { return { separator: /\+/gi }; }, computed: { icons() { return { ...n, "{plus}": s }; }, shortcutWithSeparator() { return this.shortcut.replace(this.separator, "{plus}"); }, formattedShortcut() { return Object.keys(n).reduce((r, t) => r.replace(new RegExp("{" + t + "}", "gi"), n[t]), this.shortcutWithSeparator); }, // Splits any icon based aliases into their own array items. formattedShortcutSplit() { const r = Object.keys(this.icons).join("|"), t = new RegExp(`(${r})`, "gi"); return this.formattedShortcut.split(t).filter(Boolean); }, // Generates accessible text for the keyboard shortcut generatedScreenReaderText() { return this.formattedShortcutSplit.map((r) => { const t = r.trim(); if (c[t]) return c[t]; const e = t.toLowerCase(); return i[e] ? i[e] : t; }).filter((r) => r).join(" "); } } }; var S = function() { var t = this, e = t._self._c; return e("kbd", { class: [ "d-keyboard-shortcut", { "d-keyboard-shortcut--inverted": t.inverted } ] }, [e("span", { staticClass: "d-keyboard-shortcut--sr-only" }, [t._v(" " + t._s(t.screenReaderText || t.generatedScreenReaderText) + " ")]), t._l(t.formattedShortcutSplit, function(o, a) { return [t.icons[o] ? e(t.icons[o], { key: `icon-${a}-${o}`, tag: "component", class: [ "d-keyboard-shortcut__icon", { "d-keyboard-shortcut__icon--inverted": t.inverted } ], attrs: { size: "100", "aria-hidden": "true" } }) : o.trim() ? e("span", { key: `text-${a}-${o}`, class: [ "d-keyboard-shortcut__item", { "d-keyboard-shortcut__item--inverted": t.inverted } ], attrs: { "aria-hidden": "true" }, domProps: { innerHTML: t._s(o) } }) : t._e()]; })], 2); }, g = [], y = /* @__PURE__ */ w( f, S, g ); const D = y.exports; export { D as default }; //# sourceMappingURL=keyboard-shortcut.js.map