@carbon/icons-vue
Version:
Vue components for icons in digital and software products using the Carbon Design System
112 lines (107 loc) • 3.03 kB
JavaScript
/**
* Copyright IBM Corp. 2019, 2023
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*
* Code generated by @carbon/icon-build-helpers. DO NOT EDIT.
*/
import { getAttributes } from '@carbon/icon-helpers';
import * as Vue from 'vue';
/**
* Copyright IBM Corp. 2018, 2023
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/
// Note: we dynamically access keys on the Vue namespace so that rollup does not
// automatically rewrite the binding into `import { h } from 'vue'` as this is
// currently causing issues in Vue 2 environments
function getVueExport(key) {
return Vue[key];
}
const h = getVueExport('h');
const createApp = getVueExport('createApp');
const getSvgAttrs = (title, svgAttrs, componentAttrs) => {
return getAttributes({
...svgAttrs,
preserveAspectRatio: 'xMidYMid meet',
xmlns: 'http://www.w3.org/2000/svg',
// Special case here, we need to coordinate that we are using title,
// potentially, to get the right focus attributes
title,
...componentAttrs
});
};
const getVue2SvgAttrs = (title, svgAttrs, data, listeners) => {
const result = {
attrs: getSvgAttrs(title, svgAttrs, data.attrs),
on: listeners,
style: {
...data.staticStyle,
...data.style
}
};
// remove style set by getAttributes
delete result.attrs.style;
if (data.staticClass || data.class) {
result.class = {};
if (data.staticClass) {
result.class[data.staticClass] = true;
}
if (data.class) {
result.class[data.class] = true;
}
}
return result;
};
const createSVGComponent = (name, svgAttrs, svgContent) => ({
// We use title as a prop name for the component
// as it is not a valid attribute for an SVG HTML element
props: {
title: String
},
name: name,
...(createApp ? {
// Vue 3 component
setup(_ref, _ref2) {
let {
title
} = _ref;
let {
attrs: componentAttrs,
slots
} = _ref2;
return () => h('svg', getSvgAttrs(title, svgAttrs, componentAttrs), [...(title ? [h('title', title)] : []), ...svgContent.map(_ref3 => {
let {
elem,
attrs
} = _ref3;
return h(elem, attrs);
}), ...(slots.default ? slots.default() : [])]);
}
} : {
// Vue 2 component
functional: true,
render(createElement, _ref4) {
let {
props: {
title
},
children,
data,
listeners
} = _ref4;
return createElement('svg', getVue2SvgAttrs(title, svgAttrs, data, listeners), [...(title ? [createElement('title', null, title)] : []), ...svgContent.map(_ref5 => {
let {
elem,
attrs
} = _ref5;
return createElement(elem, {
attrs: attrs
});
}), ...(children || [])]);
}
})
});
export { createSVGComponent as c };