@oruga-ui/oruga-next
Version:
UI components for Vue.js and CSS framework agnostic
1 lines • 4.14 kB
Source Map (JSON)
{"version":3,"file":"collapse.mjs","sources":["../../src/components/collapse/Collapse.vue","../../src/components/collapse/index.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useId } from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses } from \"@/composables\";\n\nimport type { CollapseProps } from \"./props\";\n\n/**\n * An easy way to toggle what you want.\n * @displayName Collapse\n * @style _collapse.scss\n */\ndefineOptions({\n isOruga: true,\n name: \"OCollapse\",\n configField: \"collapse\",\n});\n\nconst props = withDefaults(defineProps<CollapseProps>(), {\n override: undefined,\n open: true,\n expanded: false,\n animation: () => getDefault(\"collapse.animation\", \"fade\"),\n position: () => getDefault(\"collapse.position\", \"top\"),\n contentId: () => useId(),\n triggerId: () => useId(),\n});\n\nconst emits = defineEmits<{\n /**\n * open prop two-way binding\n * @param value {boolean} updated open prop\n */\n \"update:open\": [value: boolean];\n /** on collapse opened */\n open: [];\n /** on collapse closed */\n close: [];\n}>();\n\nconst isOpen = defineModel<boolean>(\"open\", { default: true });\n\n/** Toggle and emit events */\nfunction toggle(): void {\n isOpen.value = !isOpen.value;\n if (isOpen.value) emits(\"open\");\n else emits(\"close\");\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n [\"rootClass\", \"o-collapse\"],\n [\n \"positionClass\",\n \"o-collapse--\",\n computed(() => props.position),\n computed(() => !!props.position),\n ],\n);\n\nconst triggerClasses = defineClasses(\n [\"triggerClass\", \"o-collapse__trigger\"],\n [\n \"expandedClass\",\n \"o-collapse__trigger--expanded\",\n null,\n computed(() => props.expanded),\n ],\n);\n\nconst contentClasses = defineClasses([\"contentClass\", \"o-collapse__content\"]);\n</script>\n\n<template>\n <div data-oruga=\"collapse\" :class=\"rootClasses\">\n <div\n :id=\"triggerId\"\n :class=\"triggerClasses\"\n role=\"button\"\n tabindex=\"0\"\n :aria-controls=\"contentId\"\n :aria-expanded=\"isOpen\"\n @click=\"toggle\"\n @keydown.enter.prevent=\"toggle\"\n @keydown.space.prevent=\"toggle\">\n <!--\n @slot Define the collapse trigger\n @binding {boolean} open collapse open state \n -->\n <slot name=\"trigger\" :open=\"isOpen\" />\n </div>\n\n <Transition :name=\"animation\">\n <div\n v-show=\"isOpen\"\n :id=\"contentId\"\n :class=\"contentClasses\"\n :aria-labelledby=\"triggerId\">\n <!--\n @slot Default content\n -->\n <slot />\n </div>\n </Transition>\n </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Collapse from \"./Collapse.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export collapse plugin */\nexport default {\n install(app: App) {\n registerComponent(app, Collapse);\n },\n} as Plugin;\n\n/** export collapse components */\nexport { Collapse as OCollapse };\n"],"names":["_useModel","Collapse"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,UAAM,QAAQ;AAUd,UAAM,QAAQ;AAYR,UAAA,SAASA,SAAqB,SAAA,MAAyB;AAG7D,aAAS,SAAe;AACb,aAAA,QAAQ,CAAC,OAAO;AACnB,UAAA,OAAO,MAAO,OAAM,MAAM;AAAA,iBACnB,OAAO;AAAA,IAAA;AAKtB,UAAM,cAAc;AAAA,MAChB,CAAC,aAAa,YAAY;AAAA,MAC1B;AAAA,QACI;AAAA,QACA;AAAA,QACA,SAAS,MAAM,MAAM,QAAQ;AAAA,QAC7B,SAAS,MAAM,CAAC,CAAC,MAAM,QAAQ;AAAA,MAAA;AAAA,IAEvC;AAEA,UAAM,iBAAiB;AAAA,MACnB,CAAC,gBAAgB,qBAAqB;AAAA,MACtC;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,MAAM,MAAM,QAAQ;AAAA,MAAA;AAAA,IAErC;AAEA,UAAM,iBAAiB,cAAc,CAAC,gBAAgB,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjE5E,MAAe,QAAA;AAAA,EACX,QAAQ,KAAU;AACd,sBAAkB,KAAKC,SAAQ;AAAA,EAAA;AAEvC;"}