@cck-ui/core 0.24.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/cjs/components/anchor/anchor.cjs +430 -0
  2. package/cjs/components/anchor/anchor.cjs.map +1 -0
  3. package/cjs/components/anchor/anchor.module.cjs +7 -0
  4. package/cjs/components/anchor/anchor.module.cjs.map +1 -0
  5. package/cjs/components/anchor/index.cjs +13 -0
  6. package/cjs/components/anchor/index.cjs.map +1 -0
  7. package/cjs/components/portal/index.cjs +12 -0
  8. package/cjs/components/portal/index.cjs.map +1 -0
  9. package/cjs/components/portal/portal.cjs +116 -0
  10. package/cjs/components/portal/portal.cjs.map +1 -0
  11. package/cjs/components/text/text.cjs.map +1 -1
  12. package/cjs/index.cjs +91 -85
  13. package/cjs/index.cjs.map +1 -1
  14. package/esm/components/anchor/anchor.mjs +428 -0
  15. package/esm/components/anchor/anchor.mjs.map +1 -0
  16. package/esm/components/anchor/anchor.module.mjs +7 -0
  17. package/esm/components/anchor/anchor.module.mjs.map +1 -0
  18. package/esm/components/anchor/index.mjs +10 -0
  19. package/esm/components/anchor/index.mjs.map +1 -0
  20. package/esm/components/portal/index.mjs +9 -0
  21. package/esm/components/portal/index.mjs.map +1 -0
  22. package/esm/components/portal/portal.mjs +116 -0
  23. package/esm/components/portal/portal.mjs.map +1 -0
  24. package/esm/components/text/text.mjs.map +1 -1
  25. package/esm/index.mjs +6 -2
  26. package/esm/index.mjs.map +1 -1
  27. package/lib/components/anchor/anchor.types.d.ts +16 -0
  28. package/lib/components/anchor/index.d.ts +6 -0
  29. package/lib/components/index.d.ts +2 -0
  30. package/lib/components/portal/index.d.ts +5 -0
  31. package/lib/components/portal/portal.types.d.ts +21 -0
  32. package/package.json +1 -1
  33. package/styles/anchor.css +56 -0
  34. package/styles/anchor.layer.css +57 -0
  35. package/styles.css +109 -52
  36. package/styles.layer.css +109 -52
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import { withInstall } from "../../core/utils/vue/install.mjs";
3
+ import { withClasses, withExtend, withPropsFactory } from "../../core/utils/vue/statics.mjs";
4
+ import anchor_module_default from "./anchor.module.mjs";
5
+ import anchor_default from "./anchor.mjs";
6
+ const CAnchor = withInstall(withPropsFactory(withExtend(withClasses(anchor_default, anchor_module_default))));
7
+ //#endregion
8
+ export { CAnchor, CAnchor as default };
9
+
10
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["Anchor","classes"],"sources":["../../../src/components/anchor/index.ts"],"sourcesContent":["import {\n SFCWithInstallAndClasses,\n withClasses,\n withExtend,\n withInstall,\n withPropsFactory,\n} from '../../core'\n\nimport classes from './anchor.module.css'\nimport Anchor from './anchor.vue'\n\nconst AnchorWithStatic = withPropsFactory(withExtend(withClasses(Anchor, classes)))\n\nexport const CAnchor: SFCWithInstallAndClasses<typeof Anchor, typeof classes> =\n withInstall(AnchorWithStatic)\n\nexport default CAnchor\n\nexport * from './anchor.types'\n"],"mappings":";;;;;AAaA,MAAa,UACX,YAHuB,iBAAiB,WAAW,YAAYA,gBAAQC,qBAAO,CAAC,CAGnE,CAAgB"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { withInstall } from "../../core/utils/vue/install.mjs";
3
+ import { withExtend, withPropsFactory } from "../../core/utils/vue/statics.mjs";
4
+ import portal_default from "./portal.mjs";
5
+ const CPortal = withInstall(withPropsFactory(withExtend(portal_default)));
6
+ //#endregion
7
+ export { CPortal, CPortal as default };
8
+
9
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["Portal"],"sources":["../../../src/components/portal/index.ts"],"sourcesContent":["import { SFCWithInstall, withExtend, withInstall, withPropsFactory } from '../../core'\nimport Portal from './portal.vue'\n\nconst PortalWithStatic = withPropsFactory(withExtend(Portal))\n\nexport const CPortal: SFCWithInstall<typeof Portal> = withInstall(PortalWithStatic)\n\nexport default CPortal\n\nexport * from './portal.types'\n"],"mappings":";;;;AAKA,MAAa,UAAyC,YAF7B,iBAAiB,WAAWA,cAAM,CAEO,CAAgB"}
@@ -0,0 +1,116 @@
1
+ "use client";
2
+ import export_helper_default from "../../_virtual/_/plugin-vue/export-helper.mjs";
3
+ import { useComponentProps } from "../../core/config-provider/use-component-props/use-component-props.mjs";
4
+ import { Teleport, createBlock, createCommentVNode, defineComponent, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, useAttrs } from "vue";
5
+ //#region packages/@cck-ui/core/src/components/portal/portal.vue
6
+ const _sfc_main = /*@__PURE__*/ defineComponent({
7
+ name: "CPortal",
8
+ __name: "portal",
9
+ props: {
10
+ target: {
11
+ type: null,
12
+ required: false
13
+ },
14
+ reuseTargetNode: {
15
+ type: Boolean,
16
+ required: false
17
+ }
18
+ },
19
+ setup(__props, { expose: __expose }) {
20
+ const attrs = useAttrs();
21
+ const rawProps = __props;
22
+ const defaultProps = { reuseTargetNode: true };
23
+ const props = useComponentProps({
24
+ component: "CPortal",
25
+ defaultProps,
26
+ props: rawProps
27
+ });
28
+ const container = ref(null);
29
+ let createdNode = null;
30
+ function createPortalNode(nodeAttrs) {
31
+ const node = document.createElement("div");
32
+ node.setAttribute("data-portal", "true");
33
+ const className = nodeAttrs.class || nodeAttrs.className;
34
+ if (className) node.classList.add(...String(className).split(" ").filter(Boolean));
35
+ if (nodeAttrs.style) Object.assign(node.style, nodeAttrs.style);
36
+ if (nodeAttrs.id) node.setAttribute("id", nodeAttrs.id);
37
+ Object.keys(nodeAttrs).forEach((key) => {
38
+ if (![
39
+ "class",
40
+ "className",
41
+ "style",
42
+ "id"
43
+ ].includes(key)) node.setAttribute(key, nodeAttrs[key]);
44
+ });
45
+ return node;
46
+ }
47
+ function getTargetNode() {
48
+ const target = props.value.target;
49
+ const reuseTargetNode = props.value.reuseTargetNode;
50
+ if (target) {
51
+ if (typeof target === "string") {
52
+ const found = document.querySelector(target);
53
+ if (found) return found;
54
+ const node = createPortalNode(attrs);
55
+ document.body.appendChild(node);
56
+ createdNode = node;
57
+ return node;
58
+ }
59
+ return target;
60
+ }
61
+ if (reuseTargetNode) {
62
+ const existing = document.querySelector("[data-cck-shared-portal]");
63
+ if (existing) return existing;
64
+ const node = createPortalNode(attrs);
65
+ node.setAttribute("data-cck-shared-portal", "true");
66
+ document.body.appendChild(node);
67
+ createdNode = node;
68
+ return node;
69
+ }
70
+ const node = createPortalNode(attrs);
71
+ document.body.appendChild(node);
72
+ createdNode = node;
73
+ return node;
74
+ }
75
+ onMounted(() => {
76
+ container.value = getTargetNode();
77
+ });
78
+ onBeforeUnmount(() => {
79
+ if (createdNode && !createdNode.hasAttribute("data-cck-shared-portal")) {
80
+ if (createdNode.parentNode) createdNode.parentNode.removeChild(createdNode);
81
+ }
82
+ });
83
+ __expose({ root: container });
84
+ const __returned__ = {
85
+ attrs,
86
+ rawProps,
87
+ defaultProps,
88
+ props,
89
+ container,
90
+ get createdNode() {
91
+ return createdNode;
92
+ },
93
+ set createdNode(v) {
94
+ createdNode = v;
95
+ },
96
+ createPortalNode,
97
+ getTargetNode
98
+ };
99
+ Object.defineProperty(__returned__, "__isScriptSetup", {
100
+ enumerable: false,
101
+ value: true
102
+ });
103
+ return __returned__;
104
+ }
105
+ });
106
+ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
107
+ return $setup.container ? (openBlock(), createBlock(Teleport, {
108
+ key: 0,
109
+ to: $setup.container
110
+ }, [renderSlot(_ctx.$slots, "default")], 8, ["to"])) : createCommentVNode("v-if", true);
111
+ }
112
+ var portal_default = /*#__PURE__*/ export_helper_default(_sfc_main, [["render", _sfc_render], ["__file", "/home/runner/work/cck-ui/cck-ui/packages/@cck-ui/core/src/components/portal/portal.vue"]]);
113
+ //#endregion
114
+ export { portal_default as default };
115
+
116
+ //# sourceMappingURL=portal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.mjs","names":[],"sources":["../../../src/components/portal/portal.vue"],"sourcesContent":["<template>\n <Teleport v-if=\"container\" :to=\"container\">\n <slot />\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref, useAttrs } from 'vue'\nimport { PortalProps } from './portal.types'\nimport { useComponentProps } from '../../core'\n\ndefineOptions({\n name: 'CPortal',\n})\n\nconst attrs = useAttrs()\n\nconst rawProps = defineProps<PortalProps>()\n\nconst defaultProps = {\n reuseTargetNode: true,\n} satisfies Partial<PortalProps>\n\nconst props = useComponentProps({\n component: 'CPortal',\n defaultProps,\n props: rawProps,\n})\n\nconst container = ref<HTMLElement | null>(null)\nlet createdNode: HTMLElement | null = null\n\nfunction createPortalNode(nodeAttrs: Record<string, any>): HTMLElement {\n const node = document.createElement('div')\n node.setAttribute('data-portal', 'true')\n\n const className = nodeAttrs.class || nodeAttrs.className\n if (className) {\n node.classList.add(...String(className).split(' ').filter(Boolean))\n }\n if (nodeAttrs.style) {\n Object.assign(node.style, nodeAttrs.style)\n }\n if (nodeAttrs.id) {\n node.setAttribute('id', nodeAttrs.id)\n }\n Object.keys(nodeAttrs).forEach((key) => {\n if (!['class', 'className', 'style', 'id'].includes(key)) {\n node.setAttribute(key, nodeAttrs[key])\n }\n })\n\n return node\n}\n\nfunction getTargetNode(): HTMLElement {\n const target = props.value.target\n const reuseTargetNode = props.value.reuseTargetNode\n\n if (target) {\n if (typeof target === 'string') {\n const found = document.querySelector<HTMLElement>(target)\n if (found) {\n return found\n }\n const node = createPortalNode(attrs)\n document.body.appendChild(node)\n createdNode = node\n return node\n }\n return target\n }\n\n if (reuseTargetNode) {\n const existing = document.querySelector<HTMLElement>('[data-cck-shared-portal]')\n if (existing) {\n return existing\n }\n const node = createPortalNode(attrs)\n node.setAttribute('data-cck-shared-portal', 'true')\n document.body.appendChild(node)\n createdNode = node\n return node\n }\n\n const node = createPortalNode(attrs)\n document.body.appendChild(node)\n createdNode = node\n return node\n}\n\nonMounted(() => {\n container.value = getTargetNode()\n})\n\nonBeforeUnmount(() => {\n if (createdNode && !createdNode.hasAttribute('data-cck-shared-portal')) {\n if (createdNode.parentNode) {\n createdNode.parentNode.removeChild(createdNode)\n }\n }\n})\n\ndefineExpose({\n root: container,\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAeA,MAAM,QAAQ,SAAS;EAEvB,MAAM,WAAW;EAEjB,MAAM,eAAe,EACnB,iBAAiB,KACnB;EAEA,MAAM,QAAQ,kBAAkB;GAC9B,WAAW;GACX;GACA,OAAO;EACT,CAAC;EAED,MAAM,YAAY,IAAwB,IAAI;EAC9C,IAAI,cAAkC;EAEtC,SAAS,iBAAiB,WAA6C;GACrE,MAAM,OAAO,SAAS,cAAc,KAAK;GACzC,KAAK,aAAa,eAAe,MAAM;GAEvC,MAAM,YAAY,UAAU,SAAS,UAAU;GAC/C,IAAI,WACF,KAAK,UAAU,IAAI,GAAG,OAAO,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC;GAEpE,IAAI,UAAU,OACZ,OAAO,OAAO,KAAK,OAAO,UAAU,KAAK;GAE3C,IAAI,UAAU,IACZ,KAAK,aAAa,MAAM,UAAU,EAAE;GAEtC,OAAO,KAAK,SAAS,CAAC,CAAC,SAAS,QAAQ;IACtC,IAAI,CAAC;KAAC;KAAS;KAAa;KAAS;IAAI,CAAC,CAAC,SAAS,GAAG,GACrD,KAAK,aAAa,KAAK,UAAU,IAAI;GAEzC,CAAC;GAED,OAAO;EACT;EAEA,SAAS,gBAA6B;GACpC,MAAM,SAAS,MAAM,MAAM;GAC3B,MAAM,kBAAkB,MAAM,MAAM;GAEpC,IAAI,QAAQ;IACV,IAAI,OAAO,WAAW,UAAU;KAC9B,MAAM,QAAQ,SAAS,cAA2B,MAAM;KACxD,IAAI,OACF,OAAO;KAET,MAAM,OAAO,iBAAiB,KAAK;KACnC,SAAS,KAAK,YAAY,IAAI;KAC9B,cAAc;KACd,OAAO;IACT;IACA,OAAO;GACT;GAEA,IAAI,iBAAiB;IACnB,MAAM,WAAW,SAAS,cAA2B,0BAA0B;IAC/E,IAAI,UACF,OAAO;IAET,MAAM,OAAO,iBAAiB,KAAK;IACnC,KAAK,aAAa,0BAA0B,MAAM;IAClD,SAAS,KAAK,YAAY,IAAI;IAC9B,cAAc;IACd,OAAO;GACT;GAEA,MAAM,OAAO,iBAAiB,KAAK;GACnC,SAAS,KAAK,YAAY,IAAI;GAC9B,cAAc;GACd,OAAO;EACT;EAEA,gBAAgB;GACd,UAAU,QAAQ,cAAc;EAClC,CAAC;EAED,sBAAsB;GACpB,IAAI,eAAe,CAAC,YAAY,aAAa,wBAAwB;QAC/D,YAAY,YACd,YAAY,WAAW,YAAY,WAAW;GAAA;EAGpD,CAAC;EAED,SAAa,EACX,MAAM,UACR,CAAC;;;;;;;;;;;;;;;;;;;;;;;;QAxGiB,OAAA,aAAA,UAAA,GAAhB,YAEW,UAAA;;EAFiB,IAAI,OAAA;KAC9B,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,GAAA,CAAA,IAAA,CAAA,KAAA,mBAAA,QAAA,IAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"text.mjs","names":[],"sources":["../../../src/components/text/text.vue"],"sourcesContent":["<template>\n <c-box\n ref=\"_root\"\n v-bind=\"mergedAttrs\"\n :size=\"props.size\"\n :tag=\"props.span ? 'span' : 'p'\"\n :variant=\"props.variant\"\n >\n <slot />\n </c-box>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport type { TextFactory, TextProps, TextTruncate } from './text.types.ts'\nimport classes from './text.module.css'\nimport { useStyles, CBox, useComponentProps, CStyleProp } from '../../core'\nimport { varsResolver } from './text.utils.js'\n\ndefineOptions({\n name: 'CText',\n})\n\nconst _root = ref<InstanceType<typeof CBox> | null>(null)\n\nconst attrs = useAttrs()\n\nconst rawProps = defineProps<TextProps>()\n\nconst props = useComponentProps({\n component: 'CText',\n defaultProps: {},\n props: rawProps,\n})\n\nfunction getTextTruncate(truncate: TextTruncate | undefined) {\n if (truncate === 'start') {\n return 'start'\n }\n\n if (truncate === 'end' || truncate) {\n return 'end'\n }\n\n return undefined\n}\n\nconst knownProps = [\n 'lineClamp',\n 'truncate',\n 'inline',\n 'inherit',\n 'gradient',\n 'span',\n 'textWrap',\n '__staticSelector',\n 'vars',\n 'className',\n 'style',\n 'classNames',\n 'styles',\n 'unstyled',\n 'variant',\n 'mod',\n 'size',\n 'attributes',\n]\n\nconst modList = computed(() => [\n {\n 'data-truncate': getTextTruncate(props.value.truncate),\n 'data-line-clamp': typeof props.value.lineClamp === 'number',\n 'data-inline': props.value.inline,\n 'data-inherit': props.value.inherit,\n },\n])\n\nconst styleProps = computed(() => ({\n ...props.value,\n ...attrs,\n style: (attrs.style ?? props.value.style) as CStyleProp,\n}))\n\nconst getStyles = useStyles<TextFactory>({\n name: ['Text', props.value.__staticSelector],\n props: styleProps,\n classes,\n className: () => props.value.className,\n style: () => props.value.style,\n classNames: props.value.classNames,\n styles: props.value.styles,\n unstyled: props.value.unstyled,\n attributes: props.value.attributes,\n vars: props.value.vars,\n varsResolver,\n})\n\nconst rootAttrs = computed(() => getStyles('root', { focusable: true }))\n\nconst mergedAttrs = computed(() => {\n const others: Record<string, any> = {}\n const propsValue = props.value\n for (const key in propsValue) {\n if (!knownProps.includes(key)) {\n others[key] = propsValue[key as keyof typeof propsValue]\n }\n }\n const userMod = props.value.mod\n const mergedMod = [\n ...(Array.isArray(userMod) ? userMod : [userMod].filter(Boolean)),\n ...(modList.value || []),\n ]\n return { ...others, mod: mergedMod, ...rootAttrs.value }\n})\n\ndefineExpose({\n root: computed(() => _root.value?.root ?? null),\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBA,MAAM,QAAQ,IAAsC,IAAI;EAExD,MAAM,QAAQ,SAAS;EAEvB,MAAM,WAAW;EAEjB,MAAM,QAAQ,kBAAkB;GAC9B,WAAW;GACX,cAAc,CAAC;GACf,OAAO;EACT,CAAC;EAED,SAAS,gBAAgB,UAAoC;GAC3D,IAAI,aAAa,SACf,OAAO;GAGT,IAAI,aAAa,SAAS,UACxB,OAAO;EAIX;EAEA,MAAM,aAAa;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAM,UAAU,eAAe,CAC7B;GACE,iBAAiB,gBAAgB,MAAM,MAAM,QAAQ;GACrD,mBAAmB,OAAO,MAAM,MAAM,cAAc;GACpD,eAAe,MAAM,MAAM;GAC3B,gBAAgB,MAAM,MAAM;EAC9B,CACF,CAAC;EAED,MAAM,aAAa,gBAAgB;GACjC,GAAG,MAAM;GACT,GAAG;GACH,OAAQ,MAAM,SAAS,MAAM,MAAM;EACrC,EAAE;EAEF,MAAM,YAAY,UAAuB;GACvC,MAAM,CAAC,QAAQ,MAAM,MAAM,gBAAgB;GAC3C,OAAO;GACP,SAAA;GACA,iBAAiB,MAAM,MAAM;GAC7B,aAAa,MAAM,MAAM;GACzB,YAAY,MAAM,MAAM;GACxB,QAAQ,MAAM,MAAM;GACpB,UAAU,MAAM,MAAM;GACtB,YAAY,MAAM,MAAM;GACxB,MAAM,MAAM,MAAM;GAClB;EACF,CAAC;EAED,MAAM,YAAY,eAAe,UAAU,QAAQ,EAAE,WAAW,KAAK,CAAC,CAAC;EAEvE,MAAM,cAAc,eAAe;GACjC,MAAM,SAA8B,CAAC;GACrC,MAAM,aAAa,MAAM;GACzB,KAAK,MAAM,OAAO,YAChB,IAAI,CAAC,WAAW,SAAS,GAAG,GAC1B,OAAO,OAAO,WAAW;GAG7B,MAAM,UAAU,MAAM,MAAM;GAC5B,MAAM,YAAY,CAChB,GAAI,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,OAAO,GAC/D,GAAI,QAAQ,SAAS,CAAC,CACxB;GACA,OAAO;IAAE,GAAG;IAAQ,KAAK;IAAW,GAAG,UAAU;GAAM;EACzD,CAAC;EAED,SAAa,EACX,MAAM,eAAe,MAAM,OAAO,QAAQ,IAAI,EAChD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;qBApHC,YAQQ,OAAA,SARR,WAQQ,EAPN,KAAI,QAAO,GACH,OAAA,aAAW;EAClB,MAAM,OAAA,MAAM;EACZ,KAAK,OAAA,MAAM,OAAI,SAAA;EACf,SAAS,OAAA,MAAM;;yBAER,CAAR,WAAQ,KAAA,QAAA,SAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"text.mjs","names":[],"sources":["../../../src/components/text/text.vue"],"sourcesContent":["<template>\n <c-box\n ref=\"_root\"\n v-bind=\"mergedAttrs\"\n :size=\"props.size\"\n :tag=\"props.span ? 'span' : 'p'\"\n :variant=\"props.variant\"\n >\n <slot />\n </c-box>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue'\nimport type { TextFactory, TextProps, TextTruncate } from './text.types'\nimport classes from './text.module.css'\nimport { useStyles, CBox, useComponentProps, CStyleProp } from '../../core'\nimport { varsResolver } from './text.utils'\n\ndefineOptions({\n name: 'CText',\n})\n\nconst _root = ref<InstanceType<typeof CBox> | null>(null)\n\nconst attrs = useAttrs()\n\nconst rawProps = defineProps<TextProps>()\n\nconst props = useComponentProps({\n component: 'CText',\n defaultProps: {},\n props: rawProps,\n})\n\nfunction getTextTruncate(truncate: TextTruncate | undefined) {\n if (truncate === 'start') {\n return 'start'\n }\n\n if (truncate === 'end' || truncate) {\n return 'end'\n }\n\n return undefined\n}\n\nconst knownProps = [\n 'lineClamp',\n 'truncate',\n 'inline',\n 'inherit',\n 'gradient',\n 'span',\n 'textWrap',\n '__staticSelector',\n 'vars',\n 'className',\n 'style',\n 'classNames',\n 'styles',\n 'unstyled',\n 'variant',\n 'mod',\n 'size',\n 'attributes',\n]\n\nconst modList = computed(() => [\n {\n 'data-truncate': getTextTruncate(props.value.truncate),\n 'data-line-clamp': typeof props.value.lineClamp === 'number',\n 'data-inline': props.value.inline,\n 'data-inherit': props.value.inherit,\n },\n])\n\nconst styleProps = computed(() => ({\n ...props.value,\n ...attrs,\n style: (attrs.style ?? props.value.style) as CStyleProp,\n}))\n\nconst getStyles = useStyles<TextFactory>({\n name: ['Text', props.value.__staticSelector],\n props: styleProps,\n classes,\n className: () => props.value.className,\n style: () => props.value.style,\n classNames: props.value.classNames,\n styles: props.value.styles,\n unstyled: props.value.unstyled,\n attributes: props.value.attributes,\n vars: props.value.vars,\n varsResolver,\n})\n\nconst rootAttrs = computed(() => getStyles('root', { focusable: true }))\n\nconst mergedAttrs = computed(() => {\n const others: Record<string, any> = {}\n const propsValue = props.value\n for (const key in propsValue) {\n if (!knownProps.includes(key)) {\n others[key] = propsValue[key as keyof typeof propsValue]\n }\n }\n const userMod = props.value.mod\n const mergedMod = [\n ...(Array.isArray(userMod) ? userMod : [userMod].filter(Boolean)),\n ...(modList.value || []),\n ]\n return { ...others, mod: mergedMod, ...rootAttrs.value }\n})\n\ndefineExpose({\n root: computed(() => _root.value?.root ?? null),\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBA,MAAM,QAAQ,IAAsC,IAAI;EAExD,MAAM,QAAQ,SAAS;EAEvB,MAAM,WAAW;EAEjB,MAAM,QAAQ,kBAAkB;GAC9B,WAAW;GACX,cAAc,CAAC;GACf,OAAO;EACT,CAAC;EAED,SAAS,gBAAgB,UAAoC;GAC3D,IAAI,aAAa,SACf,OAAO;GAGT,IAAI,aAAa,SAAS,UACxB,OAAO;EAIX;EAEA,MAAM,aAAa;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EAEA,MAAM,UAAU,eAAe,CAC7B;GACE,iBAAiB,gBAAgB,MAAM,MAAM,QAAQ;GACrD,mBAAmB,OAAO,MAAM,MAAM,cAAc;GACpD,eAAe,MAAM,MAAM;GAC3B,gBAAgB,MAAM,MAAM;EAC9B,CACF,CAAC;EAED,MAAM,aAAa,gBAAgB;GACjC,GAAG,MAAM;GACT,GAAG;GACH,OAAQ,MAAM,SAAS,MAAM,MAAM;EACrC,EAAE;EAEF,MAAM,YAAY,UAAuB;GACvC,MAAM,CAAC,QAAQ,MAAM,MAAM,gBAAgB;GAC3C,OAAO;GACP,SAAA;GACA,iBAAiB,MAAM,MAAM;GAC7B,aAAa,MAAM,MAAM;GACzB,YAAY,MAAM,MAAM;GACxB,QAAQ,MAAM,MAAM;GACpB,UAAU,MAAM,MAAM;GACtB,YAAY,MAAM,MAAM;GACxB,MAAM,MAAM,MAAM;GAClB;EACF,CAAC;EAED,MAAM,YAAY,eAAe,UAAU,QAAQ,EAAE,WAAW,KAAK,CAAC,CAAC;EAEvE,MAAM,cAAc,eAAe;GACjC,MAAM,SAA8B,CAAC;GACrC,MAAM,aAAa,MAAM;GACzB,KAAK,MAAM,OAAO,YAChB,IAAI,CAAC,WAAW,SAAS,GAAG,GAC1B,OAAO,OAAO,WAAW;GAG7B,MAAM,UAAU,MAAM,MAAM;GAC5B,MAAM,YAAY,CAChB,GAAI,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,OAAO,GAC/D,GAAI,QAAQ,SAAS,CAAC,CACxB;GACA,OAAO;IAAE,GAAG;IAAQ,KAAK;IAAW,GAAG,UAAU;GAAM;EACzD,CAAC;EAED,SAAa,EACX,MAAM,eAAe,MAAM,OAAO,QAAQ,IAAI,EAChD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;qBApHC,YAQQ,OAAA,SARR,WAQQ,EAPN,KAAI,QAAO,GACH,OAAA,aAAW;EAClB,MAAM,OAAA,MAAM;EACZ,KAAK,OAAA,MAAM,OAAI,SAAA;EACf,SAAS,OAAA,MAAM;;yBAER,CAAR,WAAQ,KAAA,QAAA,SAAA,CAAA,CAAA"}
package/esm/index.mjs CHANGED
@@ -58,6 +58,8 @@ import { CTransition } from "./components/transition/index.mjs";
58
58
  import { CActionIcon, CActionIconGroup, CActionIconGroupSection } from "./components/action-icon/index.mjs";
59
59
  import { CCloseButton } from "./components/close-button/index.mjs";
60
60
  import { CAlert } from "./components/alert/index.mjs";
61
+ import { CText } from "./components/text/index.mjs";
62
+ import { CAnchor } from "./components/anchor/index.mjs";
61
63
  import { CAspectRatio } from "./components/aspect-ratio/index.mjs";
62
64
  import { CButton, CButtonGroup, CButtonGroupSection } from "./components/button/index.mjs";
63
65
  import { CCenter } from "./components/center/index.mjs";
@@ -72,13 +74,13 @@ import { CCol, CGrid } from "./components/grid/index.mjs";
72
74
  import { CGroup } from "./components/group/index.mjs";
73
75
  import { CImage } from "./components/image/index.mjs";
74
76
  import { CPaper } from "./components/paper/index.mjs";
77
+ import { CPortal } from "./components/portal/index.mjs";
75
78
  import { CSemiCircleProgress } from "./components/semi-circle-progress/index.mjs";
76
79
  import { CSimpleGrid } from "./components/simple-grid/index.mjs";
77
80
  import { CSkeleton } from "./components/skeleton/index.mjs";
78
81
  import { CSpace } from "./components/space/index.mjs";
79
82
  import { CSplitter, CSplitterPane } from "./components/splitter/index.mjs";
80
83
  import { CStack } from "./components/stack/index.mjs";
81
- import { CText } from "./components/text/index.mjs";
82
84
  import { CTypography } from "./components/typography/index.mjs";
83
85
  import { CVisuallyHidden } from "./components/visually-hidden/index.mjs";
84
86
  //#region packages/@cck-ui/core/src/index.ts
@@ -90,6 +92,7 @@ const components = [
90
92
  CActionIconGroup,
91
93
  CActionIconGroupSection,
92
94
  CAlert,
95
+ CAnchor,
93
96
  CAspectRatio,
94
97
  CButton,
95
98
  CButtonGroup,
@@ -113,6 +116,7 @@ const components = [
113
116
  CImage,
114
117
  CLoader,
115
118
  CPaper,
119
+ CPortal,
116
120
  CSemiCircleProgress,
117
121
  CSimpleGrid,
118
122
  CSkeleton,
@@ -134,6 +138,6 @@ const CckUI = { install(app) {
134
138
  });
135
139
  } };
136
140
  //#endregion
137
- export { CActionIcon, CActionIconGroup, CActionIconGroupSection, CAlert, CAspectRatio, CBox, CButton, CButtonGroup, CButtonGroupSection, transitions as CCK_TRANSITIONS, CCenter, CCloseButton, CCol, CContainer, CCopyButton, CDefaultLoaders, CDivider, CEmptyState, CEmptyStateActions, CEmptyStateDescription, CEmptyStateIndicator, CEmptyStateTitle, CFileButton, CFlex, CFocusTrap, CGrid, CGroup, CImage, CLoader, CONFIG_KEY, CPaper, CSemiCircleProgress, CSimpleGrid, CSkeleton, CSpace, CSplitter, CSplitterPane, CStack, CText, CTransition, CTypography, CVisuallyHidden, CckConfigProvider, CckUI, CckUI as default, DEFAULT_THEME, FOCUS_CLASS_NAMES, STYLE_PROPS_DATA, THEME_KEY, UnstyledButton, alpha, camelToKebabCase, colorsTuple, createTheme, createVarsResolver, darken, deepMerge, defaultCssVariablesResolver, defaultVariantColorsResolver, em, extractStyleProps, filterProps, getBaseValue, getBreakpointValue, getCSSColorVariables, getComponentName, getFontSize, getGradient, getLineHeight, getPrimaryShade, getRadius, getShadow, getSize, getSortedBreakpoints, getSpacing, getThemeColor, getTransitionProps, hashStyleProps, isLightColor, isNumber, isNumberLike, isString, isStringNumber, isUndefined, isVirtualColor, keys, luminance, mergeThemeOverrides, normalizeNumberLikeStringProp, numberLikeStringToNumber, parseStyleProps, parseThemeColor, px, rem, resolveClassNames, resolveStyles, responsiveStyleManager, rgb, rgba, stylesToString, toRgba, useCckClassNamesPrefix, useCckColorScheme, useCckCssVariablesResolver, useCckEnv, useCckIsHeadless, useCckStyleNonce, useCckStylesTransform, useCckSxTransform, useCckTheme, useCckWithStaticClasses, useComponentProps, useConfigContext, useProviderColorScheme, useRandomClassName, useStyles, virtualColor, withClasses, withExtend, withInstall, withPropsDefaultSetter, withPropsFactory, withVarsResolver };
141
+ export { CActionIcon, CActionIconGroup, CActionIconGroupSection, CAlert, CAnchor, CAspectRatio, CBox, CButton, CButtonGroup, CButtonGroupSection, transitions as CCK_TRANSITIONS, CCenter, CCloseButton, CCol, CContainer, CCopyButton, CDefaultLoaders, CDivider, CEmptyState, CEmptyStateActions, CEmptyStateDescription, CEmptyStateIndicator, CEmptyStateTitle, CFileButton, CFlex, CFocusTrap, CGrid, CGroup, CImage, CLoader, CONFIG_KEY, CPaper, CPortal, CSemiCircleProgress, CSimpleGrid, CSkeleton, CSpace, CSplitter, CSplitterPane, CStack, CText, CTransition, CTypography, CVisuallyHidden, CckConfigProvider, CckUI, CckUI as default, DEFAULT_THEME, FOCUS_CLASS_NAMES, STYLE_PROPS_DATA, THEME_KEY, UnstyledButton, alpha, camelToKebabCase, colorsTuple, createTheme, createVarsResolver, darken, deepMerge, defaultCssVariablesResolver, defaultVariantColorsResolver, em, extractStyleProps, filterProps, getBaseValue, getBreakpointValue, getCSSColorVariables, getComponentName, getFontSize, getGradient, getLineHeight, getPrimaryShade, getRadius, getShadow, getSize, getSortedBreakpoints, getSpacing, getThemeColor, getTransitionProps, hashStyleProps, isLightColor, isNumber, isNumberLike, isString, isStringNumber, isUndefined, isVirtualColor, keys, luminance, mergeThemeOverrides, normalizeNumberLikeStringProp, numberLikeStringToNumber, parseStyleProps, parseThemeColor, px, rem, resolveClassNames, resolveStyles, responsiveStyleManager, rgb, rgba, stylesToString, toRgba, useCckClassNamesPrefix, useCckColorScheme, useCckCssVariablesResolver, useCckEnv, useCckIsHeadless, useCckStyleNonce, useCckStylesTransform, useCckSxTransform, useCckTheme, useCckWithStaticClasses, useComponentProps, useConfigContext, useProviderColorScheme, useRandomClassName, useStyles, virtualColor, withClasses, withExtend, withInstall, withPropsDefaultSetter, withPropsFactory, withVarsResolver };
138
142
 
139
143
  //# sourceMappingURL=index.mjs.map
package/esm/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { App, Plugin } from 'vue'\nimport {\n CActionIcon,\n CActionIconGroup,\n CActionIconGroupSection,\n CAlert,\n CAspectRatio,\n CButton,\n CButtonGroup,\n CButtonGroupSection,\n CCenter,\n CCloseButton,\n CCol,\n CContainer,\n CCopyButton,\n CDivider,\n CEmptyState,\n CEmptyStateActions,\n CEmptyStateDescription,\n CEmptyStateIndicator,\n CEmptyStateTitle,\n CFileButton,\n CFlex,\n CFocusTrap,\n CGrid,\n CGroup,\n CImage,\n CLoader,\n CPaper,\n CSemiCircleProgress,\n CSimpleGrid,\n CSkeleton,\n CSpace,\n CSplitter,\n CSplitterPane,\n CStack,\n CText,\n CTransition,\n CTypography,\n CVisuallyHidden,\n UnstyledButton,\n} from './components'\nimport { CckConfigProvider, CBox } from './core'\n\nconst INSTALLED_KEY = Symbol('INSTALLED_KEY')\n\nconst components = [\n CckConfigProvider,\n CBox,\n CActionIcon,\n CActionIconGroup,\n CActionIconGroupSection,\n CAlert,\n CAspectRatio,\n CButton,\n CButtonGroup,\n CButtonGroupSection,\n CCenter,\n CCloseButton,\n CCol,\n CContainer,\n CCopyButton,\n CDivider,\n CEmptyState,\n CEmptyStateActions,\n CEmptyStateDescription,\n CEmptyStateIndicator,\n CEmptyStateTitle,\n CFileButton,\n CFlex,\n CFocusTrap,\n CGrid,\n CGroup,\n CImage,\n CLoader,\n CPaper,\n CSemiCircleProgress,\n CSimpleGrid,\n CSkeleton,\n CSpace,\n CSplitter,\n CSplitterPane,\n CStack,\n CText,\n CTransition,\n CTypography,\n CVisuallyHidden,\n UnstyledButton,\n]\n\nconst CckUI: Plugin = {\n install(app: App) {\n if ((app as any)[INSTALLED_KEY]) {\n return\n }\n ;(app as any)[INSTALLED_KEY] = true\n components.forEach((c) => {\n if (c.name) {\n app.component(c.name, c)\n }\n })\n },\n}\n\nexport default CckUI\nexport { CckUI }\n\nexport * from './components'\nexport * from './core'\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAM,gBAAgB,OAAO,eAAe;AAE5C,MAAM,aAAa;CACjB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,QAAgB,EACpB,QAAQ,KAAU;CAChB,IAAK,IAAY,gBACf;CAED,IAAa,iBAAiB;CAC/B,WAAW,SAAS,MAAM;EACxB,IAAI,EAAE,MACJ,IAAI,UAAU,EAAE,MAAM,CAAC;CAE3B,CAAC;AACH,EACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { App, Plugin } from 'vue'\nimport {\n CActionIcon,\n CActionIconGroup,\n CActionIconGroupSection,\n CAlert,\n CAnchor,\n CAspectRatio,\n CButton,\n CButtonGroup,\n CButtonGroupSection,\n CCenter,\n CCloseButton,\n CCol,\n CContainer,\n CCopyButton,\n CDivider,\n CEmptyState,\n CEmptyStateActions,\n CEmptyStateDescription,\n CEmptyStateIndicator,\n CEmptyStateTitle,\n CFileButton,\n CFlex,\n CFocusTrap,\n CGrid,\n CGroup,\n CImage,\n CLoader,\n CPaper,\n CPortal,\n CSemiCircleProgress,\n CSimpleGrid,\n CSkeleton,\n CSpace,\n CSplitter,\n CSplitterPane,\n CStack,\n CText,\n CTransition,\n CTypography,\n CVisuallyHidden,\n UnstyledButton,\n} from './components'\nimport { CckConfigProvider, CBox } from './core'\n\nconst INSTALLED_KEY = Symbol('INSTALLED_KEY')\n\nconst components = [\n CckConfigProvider,\n CBox,\n CActionIcon,\n CActionIconGroup,\n CActionIconGroupSection,\n CAlert,\n CAnchor,\n CAspectRatio,\n CButton,\n CButtonGroup,\n CButtonGroupSection,\n CCenter,\n CCloseButton,\n CCol,\n CContainer,\n CCopyButton,\n CDivider,\n CEmptyState,\n CEmptyStateActions,\n CEmptyStateDescription,\n CEmptyStateIndicator,\n CEmptyStateTitle,\n CFileButton,\n CFlex,\n CFocusTrap,\n CGrid,\n CGroup,\n CImage,\n CLoader,\n CPaper,\n CPortal,\n CSemiCircleProgress,\n CSimpleGrid,\n CSkeleton,\n CSpace,\n CSplitter,\n CSplitterPane,\n CStack,\n CText,\n CTransition,\n CTypography,\n CVisuallyHidden,\n UnstyledButton,\n]\n\nconst CckUI: Plugin = {\n install(app: App) {\n if ((app as any)[INSTALLED_KEY]) {\n return\n }\n ;(app as any)[INSTALLED_KEY] = true\n components.forEach((c) => {\n if (c.name) {\n app.component(c.name, c)\n }\n })\n },\n}\n\nexport default CckUI\nexport { CckUI }\n\nexport * from './components'\nexport * from './core'\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,MAAM,gBAAgB,OAAO,eAAe;AAE5C,MAAM,aAAa;CACjB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,QAAgB,EACpB,QAAQ,KAAU;CAChB,IAAK,IAAY,gBACf;CAED,IAAa,iBAAiB;CAC/B,WAAW,SAAS,MAAM;EACxB,IAAI,EAAE,MACJ,IAAI,UAAU,EAAE,MAAM,CAAC;CAE3B,CAAC;AACH,EACF"}
@@ -0,0 +1,16 @@
1
+ import { PolymorphicFactory } from '../../core';
2
+ import { TextCssVariables, TextProps, TextStylesNames, TextVariant } from '../text';
3
+ export type AnchorStylesNames = TextStylesNames;
4
+ export type AnchorVariant = TextVariant;
5
+ export type AnchorCssVariables = TextCssVariables;
6
+ export interface AnchorProps extends Omit<TextProps, 'span'> {
7
+ underline?: 'always' | 'hover' | 'not-hover' | 'never';
8
+ }
9
+ export type AnchorFactory = PolymorphicFactory<{
10
+ props: AnchorProps;
11
+ defaultComponent: 'a';
12
+ defaultRef: HTMLAnchorElement;
13
+ stylesNames: AnchorStylesNames;
14
+ vars: AnchorCssVariables;
15
+ variant: AnchorVariant;
16
+ }>;
@@ -0,0 +1,6 @@
1
+ import { SFCWithInstallAndClasses } from '../../core';
2
+ import classes from './anchor.module.css';
3
+ import Anchor from './anchor.vue';
4
+ export declare const CAnchor: SFCWithInstallAndClasses<typeof Anchor, typeof classes>;
5
+ export default CAnchor;
6
+ export * from './anchor.types';
@@ -1,5 +1,6 @@
1
1
  export * from './action-icon';
2
2
  export * from './alert';
3
+ export * from './anchor';
3
4
  export * from './aspect-ratio';
4
5
  export * from './button';
5
6
  export * from './center';
@@ -16,6 +17,7 @@ export * from './group';
16
17
  export * from './image';
17
18
  export * from './loader';
18
19
  export * from './paper';
20
+ export * from './portal';
19
21
  export * from './semi-circle-progress';
20
22
  export * from './simple-grid';
21
23
  export * from './skeleton';
@@ -0,0 +1,5 @@
1
+ import { SFCWithInstall } from '../../core';
2
+ import Portal from './portal.vue';
3
+ export declare const CPortal: SFCWithInstall<typeof Portal>;
4
+ export default CPortal;
5
+ export * from './portal.types';
@@ -0,0 +1,21 @@
1
+ export interface PortalProps {
2
+ /**
3
+ * Target element where portal should be rendered. Accepts:
4
+ * - HTMLElement: Renders portal inside this element
5
+ * - string: CSS selector - renders inside first matching element
6
+ * - undefined: Uses shared portal node or creates new on based on `reuseTargetNode`
7
+ *
8
+ * Note: If selector doesn't match any element, portal will not render
9
+ */
10
+ target?: HTMLElement | string;
11
+ /**
12
+ * When true and target is not specified, all Portal instances share a single
13
+ * container node appended to document.body. When false, each Portal creates
14
+ * its own container node.
15
+ *
16
+ * Has no effect when target is specified.
17
+ *
18
+ * @default true
19
+ */
20
+ reuseTargetNode?: boolean;
21
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cck-ui/core",
3
- "version": "0.24.0",
3
+ "version": "0.26.0",
4
4
  "description": "Vue component library focused on usability, accessibility and developer experience",
5
5
  "homepage": "https://cck-ui.jackatlas.xyz",
6
6
  "license": "ISC",
@@ -0,0 +1,56 @@
1
+ .m_213348fa {
2
+ color: var(--c-color-anchor);
3
+ text-decoration: none;
4
+ appearance: none;
5
+ border: none;
6
+ display: inline;
7
+ padding: 0;
8
+ margin: 0;
9
+ background-color: transparent;
10
+ cursor: pointer;
11
+ }
12
+
13
+ @media (hover: hover) {
14
+
15
+ .m_213348fa:where([data-underline='hover']):hover {
16
+ text-decoration: underline;
17
+ }
18
+ }
19
+
20
+ @media (hover: none) {
21
+
22
+ .m_213348fa:where([data-underline='hover']):active {
23
+ text-decoration: underline;
24
+ }
25
+ }
26
+
27
+ .m_213348fa:where([data-underline='not-hover']) {
28
+ text-decoration: underline;
29
+ }
30
+
31
+ @media (hover: hover) {
32
+
33
+ .m_213348fa:where([data-underline='not-hover']):hover {
34
+ text-decoration: none;
35
+ }
36
+ }
37
+
38
+ @media (hover: none) {
39
+
40
+ .m_213348fa:where([data-underline='not-hover']):active {
41
+ text-decoration: none;
42
+ }
43
+ }
44
+
45
+ .m_213348fa:where([data-underline='always']) {
46
+ text-decoration: underline;
47
+ }
48
+
49
+ .m_213348fa:where([data-variant='gradient']),
50
+ .m_213348fa:where([data-variant='gradient']):hover {
51
+ text-decoration: none;
52
+ }
53
+
54
+ .m_213348fa:where([data-line-clamp]) {
55
+ display: -webkit-box;
56
+ }
@@ -0,0 +1,57 @@
1
+ @layer cck {.m_213348fa {
2
+ color: var(--c-color-anchor);
3
+ text-decoration: none;
4
+ appearance: none;
5
+ border: none;
6
+ display: inline;
7
+ padding: 0;
8
+ margin: 0;
9
+ background-color: transparent;
10
+ cursor: pointer;
11
+ }
12
+
13
+ @media (hover: hover) {
14
+
15
+ .m_213348fa:where([data-underline='hover']):hover {
16
+ text-decoration: underline;
17
+ }
18
+ }
19
+
20
+ @media (hover: none) {
21
+
22
+ .m_213348fa:where([data-underline='hover']):active {
23
+ text-decoration: underline;
24
+ }
25
+ }
26
+
27
+ .m_213348fa:where([data-underline='not-hover']) {
28
+ text-decoration: underline;
29
+ }
30
+
31
+ @media (hover: hover) {
32
+
33
+ .m_213348fa:where([data-underline='not-hover']):hover {
34
+ text-decoration: none;
35
+ }
36
+ }
37
+
38
+ @media (hover: none) {
39
+
40
+ .m_213348fa:where([data-underline='not-hover']):active {
41
+ text-decoration: none;
42
+ }
43
+ }
44
+
45
+ .m_213348fa:where([data-underline='always']) {
46
+ text-decoration: underline;
47
+ }
48
+
49
+ .m_213348fa:where([data-variant='gradient']),
50
+ .m_213348fa:where([data-variant='gradient']):hover {
51
+ text-decoration: none;
52
+ }
53
+
54
+ .m_213348fa:where([data-line-clamp]) {
55
+ display: -webkit-box;
56
+ }
57
+ }
package/styles.css CHANGED
@@ -605,6 +605,115 @@ fieldset:disabled .c-active:active {
605
605
  --c-color-orange-outline-hover: rgba(253, 126, 20, 0.05);
606
606
  }
607
607
 
608
+ .m_3f669182 {
609
+ -webkit-tap-highlight-color: transparent;
610
+ text-decoration: none;
611
+ font-size: var(--text-fz, var(--c-font-size-md));
612
+ line-height: var(--text-lh, var(--c-line-height-md));
613
+ font-weight: var(--c-font-weight-regular);
614
+ text-wrap: var(--text-text-wrap, var(--c-text-wrap));
615
+ margin: 0;
616
+ padding: 0;
617
+ }
618
+
619
+ .m_3f669182:where([data-truncate]) {
620
+ overflow: hidden;
621
+ text-overflow: ellipsis;
622
+ white-space: nowrap;
623
+ }
624
+
625
+ .m_3f669182:where([data-truncate='start']) {
626
+ direction: rtl;
627
+ text-align: end;
628
+ }
629
+
630
+ :where([dir="rtl"]) .m_3f669182:where([data-truncate='start']) {
631
+ direction: ltr;
632
+ text-align: start;
633
+ }
634
+
635
+ .m_3f669182:where([data-variant='gradient']) {
636
+ background-image: var(--text-gradient);
637
+ -webkit-text-fill-color: transparent;
638
+ -webkit-background-clip: text;
639
+ background-clip: text;
640
+ }
641
+
642
+ .m_3f669182:where([data-line-clamp]) {
643
+ overflow: hidden;
644
+ text-overflow: ellipsis;
645
+ display: -webkit-box;
646
+ -webkit-line-clamp: var(--text-line-clamp);
647
+ -webkit-box-orient: vertical;
648
+ }
649
+
650
+ .m_3f669182:where([data-inherit]) {
651
+ line-height: inherit;
652
+ font-weight: inherit;
653
+ font-size: inherit;
654
+ }
655
+
656
+ .m_3f669182:where([data-inline]) {
657
+ line-height: 1;
658
+ }
659
+
660
+ .m_213348fa {
661
+ color: var(--c-color-anchor);
662
+ text-decoration: none;
663
+ appearance: none;
664
+ border: none;
665
+ display: inline;
666
+ padding: 0;
667
+ margin: 0;
668
+ background-color: transparent;
669
+ cursor: pointer;
670
+ }
671
+
672
+ @media (hover: hover) {
673
+
674
+ .m_213348fa:where([data-underline='hover']):hover {
675
+ text-decoration: underline;
676
+ }
677
+ }
678
+
679
+ @media (hover: none) {
680
+
681
+ .m_213348fa:where([data-underline='hover']):active {
682
+ text-decoration: underline;
683
+ }
684
+ }
685
+
686
+ .m_213348fa:where([data-underline='not-hover']) {
687
+ text-decoration: underline;
688
+ }
689
+
690
+ @media (hover: hover) {
691
+
692
+ .m_213348fa:where([data-underline='not-hover']):hover {
693
+ text-decoration: none;
694
+ }
695
+ }
696
+
697
+ @media (hover: none) {
698
+
699
+ .m_213348fa:where([data-underline='not-hover']):active {
700
+ text-decoration: none;
701
+ }
702
+ }
703
+
704
+ .m_213348fa:where([data-underline='always']) {
705
+ text-decoration: underline;
706
+ }
707
+
708
+ .m_213348fa:where([data-variant='gradient']),
709
+ .m_213348fa:where([data-variant='gradient']):hover {
710
+ text-decoration: none;
711
+ }
712
+
713
+ .m_213348fa:where([data-line-clamp]) {
714
+ display: -webkit-box;
715
+ }
716
+
608
717
  .m_537a2afc {
609
718
  background-color: transparent;
610
719
  cursor: pointer;
@@ -1881,58 +1990,6 @@ fieldset:disabled .c-active:active {
1881
1990
  gap: var(--stack-gap, var(--c-spacing-md));
1882
1991
  }
1883
1992
 
1884
- .m_3f669182 {
1885
- -webkit-tap-highlight-color: transparent;
1886
- text-decoration: none;
1887
- font-size: var(--text-fz, var(--c-font-size-md));
1888
- line-height: var(--text-lh, var(--c-line-height-md));
1889
- font-weight: var(--c-font-weight-regular);
1890
- text-wrap: var(--text-text-wrap, var(--c-text-wrap));
1891
- margin: 0;
1892
- padding: 0;
1893
- }
1894
-
1895
- .m_3f669182:where([data-truncate]) {
1896
- overflow: hidden;
1897
- text-overflow: ellipsis;
1898
- white-space: nowrap;
1899
- }
1900
-
1901
- .m_3f669182:where([data-truncate='start']) {
1902
- direction: rtl;
1903
- text-align: end;
1904
- }
1905
-
1906
- :where([dir="rtl"]) .m_3f669182:where([data-truncate='start']) {
1907
- direction: ltr;
1908
- text-align: start;
1909
- }
1910
-
1911
- .m_3f669182:where([data-variant='gradient']) {
1912
- background-image: var(--text-gradient);
1913
- -webkit-text-fill-color: transparent;
1914
- -webkit-background-clip: text;
1915
- background-clip: text;
1916
- }
1917
-
1918
- .m_3f669182:where([data-line-clamp]) {
1919
- overflow: hidden;
1920
- text-overflow: ellipsis;
1921
- display: -webkit-box;
1922
- -webkit-line-clamp: var(--text-line-clamp);
1923
- -webkit-box-orient: vertical;
1924
- }
1925
-
1926
- .m_3f669182:where([data-inherit]) {
1927
- line-height: inherit;
1928
- font-weight: inherit;
1929
- font-size: inherit;
1930
- }
1931
-
1932
- .m_3f669182:where([data-inline]) {
1933
- line-height: 1;
1934
- }
1935
-
1936
1993
  .m_487612c0 :first-child {
1937
1994
  margin-top: 0;
1938
1995
  }