reka-ui
Version:
Vue port for Radix UI Primitives.
1 lines • 3.77 kB
Source Map (JSON)
{"version":3,"file":"EditableInput.cjs","sources":["../../src/Editable/EditableInput.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { Primitive, type PrimitiveProps, usePrimitiveElement } from '@/Primitive'\n\nexport interface EditableInputProps extends PrimitiveProps {\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, watch } from 'vue'\nimport { injectEditableRootContext } from './EditableRoot.vue'\nimport { useKbd } from '@/shared'\n\nconst props = withDefaults(defineProps<EditableInputProps>(), {\n as: 'input',\n})\n\nconst kbd = useKbd()\n\nconst context = injectEditableRootContext()\n\nconst disabled = computed(() => context.disabled.value)\n\nconst placeholder = computed(() => context.placeholder.value?.edit)\n\nconst { primitiveElement, currentElement: inputRef } = usePrimitiveElement()\n\nonMounted(() => {\n context.inputRef.value = inputRef.value as HTMLInputElement\n if (context.startWithEditMode.value) {\n context.inputRef.value?.focus({ preventScroll: true })\n if (context.selectOnFocus.value)\n context.inputRef.value?.select()\n }\n})\n\nwatch(context.isEditing, (value) => {\n if (value) {\n nextTick(() => {\n context.inputRef.value?.focus({ preventScroll: true })\n if (context.selectOnFocus.value)\n context.inputRef.value?.select()\n })\n }\n})\n\nfunction handleSubmitKeyDown(event: KeyboardEvent) {\n if ((context.submitMode.value === 'enter' || context.submitMode.value === 'both') && event.key === kbd.ENTER && !event.shiftKey && !event.metaKey)\n context.submit()\n}\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n v-bind=\"props\"\n :value=\"context.inputValue.value\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :maxlength=\"context.maxLength.value\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-readonly=\"context.readonly.value ? '' : undefined\"\n :readonly=\"context.readonly.value\"\n aria-label=\"editable input\"\n :hidden=\"context.autoResize.value ? undefined : !context.isEditing.value\"\n :style=\"context.autoResize.value ? { all: 'unset', gridArea: '1 / 1 / auto / auto', visibility: !context.isEditing.value ? 'hidden' : undefined } : undefined\"\n @input=\"context.inputValue.value = $event.target.value\"\n @keydown.enter.space=\"handleSubmitKeyDown\"\n @keydown.esc=\"context.cancel\"\n >\n <slot />\n </Primitive>\n</template>\n"],"names":["useKbd","injectEditableRootContext","computed","usePrimitiveElement","onMounted","watch","nextTick"],"mappings":";;;;;;;;;;;;;;;AAYA,IAAA,MAAM,KAAQ,GAAA,OAAA;AAId,IAAA,MAAM,MAAMA,oBAAO,EAAA;AAEnB,IAAA,MAAM,UAAUC,+CAA0B,EAAA;AAE1C,IAAA,MAAM,QAAW,GAAAC,YAAA,CAAS,MAAM,OAAA,CAAQ,SAAS,KAAK,CAAA;AAEtD,IAAA,MAAM,cAAcA,YAAS,CAAA,MAAM,OAAQ,CAAA,WAAA,CAAY,OAAO,IAAI,CAAA;AAElE,IAAA,MAAM,EAAE,gBAAA,EAAkB,cAAgB,EAAA,QAAA,KAAaC,iDAAoB,EAAA;AAE3E,IAAAC,aAAA,CAAU,MAAM;AACd,MAAQ,OAAA,CAAA,QAAA,CAAS,QAAQ,QAAS,CAAA,KAAA;AAClC,MAAI,IAAA,OAAA,CAAQ,kBAAkB,KAAO,EAAA;AACnC,QAAA,OAAA,CAAQ,SAAS,KAAO,EAAA,KAAA,CAAM,EAAE,aAAA,EAAe,MAAM,CAAA;AACrD,QAAA,IAAI,QAAQ,aAAc,CAAA,KAAA;AACxB,UAAQ,OAAA,CAAA,QAAA,CAAS,OAAO,MAAO,EAAA;AAAA;AACnC,KACD,CAAA;AAED,IAAMC,SAAA,CAAA,OAAA,CAAQ,SAAW,EAAA,CAAC,KAAU,KAAA;AAClC,MAAA,IAAI,KAAO,EAAA;AACT,QAAAC,YAAA,CAAS,MAAM;AACb,UAAA,OAAA,CAAQ,SAAS,KAAO,EAAA,KAAA,CAAM,EAAE,aAAA,EAAe,MAAM,CAAA;AACrD,UAAA,IAAI,QAAQ,aAAc,CAAA,KAAA;AACxB,YAAQ,OAAA,CAAA,QAAA,CAAS,OAAO,MAAO,EAAA;AAAA,SAClC,CAAA;AAAA;AACH,KACD,CAAA;AAED,IAAA,SAAS,oBAAoB,KAAsB,EAAA;AACjD,MAAA,IAAA,CAAK,QAAQ,UAAW,CAAA,KAAA,KAAU,OAAW,IAAA,OAAA,CAAQ,WAAW,KAAU,KAAA,MAAA,KAAW,KAAM,CAAA,GAAA,KAAQ,IAAI,KAAS,IAAA,CAAC,KAAM,CAAA,QAAA,IAAY,CAAC,KAAM,CAAA,OAAA;AACxI,QAAA,OAAA,CAAQ,MAAO,EAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}