@vue-interface/badge 3.0.0 → 3.1.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.
- package/dist/badge.js +57 -0
- package/dist/badge.js.map +1 -0
- package/dist/badge.umd.cjs +2 -0
- package/dist/badge.umd.cjs.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/src/Badge.vue.d.ts +38 -0
- package/dist/src/sizes.d.ts +9 -0
- package/dist/vite.config.d.ts +3 -0
- package/index.css +3 -3
- package/index.ts +5 -0
- package/package.json +21 -4
- package/src/Badge.vue +50 -0
- package/src/css/badge.css +142 -0
- package/src/sizes.ts +18 -0
- package/src/badge.css +0 -139
- /package/src/{colors.css → css/colors.css} +0 -0
- /package/src/{sizes.css → css/sizes.css} +0 -0
package/dist/badge.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { createElementBlock as l, openBlock as n, createElementVNode as i, defineComponent as d, normalizeClass as u, createCommentVNode as f, renderSlot as c, createVNode as m, unref as k } from "vue";
|
|
2
|
+
function g(e, s) {
|
|
3
|
+
return n(), l("svg", {
|
|
4
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
5
|
+
fill: "none",
|
|
6
|
+
viewBox: "0 0 24 24",
|
|
7
|
+
"stroke-width": "1.5",
|
|
8
|
+
stroke: "currentColor",
|
|
9
|
+
"aria-hidden": "true",
|
|
10
|
+
"data-slot": "icon"
|
|
11
|
+
}, [
|
|
12
|
+
i("path", {
|
|
13
|
+
"stroke-linecap": "round",
|
|
14
|
+
"stroke-linejoin": "round",
|
|
15
|
+
d: "M6 18 18 6M6 6l12 12"
|
|
16
|
+
})
|
|
17
|
+
]);
|
|
18
|
+
}
|
|
19
|
+
const b = /* @__PURE__ */ d({
|
|
20
|
+
__name: "Badge",
|
|
21
|
+
props: {
|
|
22
|
+
closeable: { type: Boolean, default: !1 },
|
|
23
|
+
closeLeft: { type: Boolean, default: !1 },
|
|
24
|
+
size: { default: "badge-md" }
|
|
25
|
+
},
|
|
26
|
+
emits: ["click", "close"],
|
|
27
|
+
setup(e, { emit: s }) {
|
|
28
|
+
const a = s;
|
|
29
|
+
return (r, o) => (n(), l("div", {
|
|
30
|
+
class: u(["badge", [
|
|
31
|
+
e.size,
|
|
32
|
+
{ "close-left": e.closeLeft }
|
|
33
|
+
]])
|
|
34
|
+
}, [
|
|
35
|
+
i("div", {
|
|
36
|
+
class: "badge-inner",
|
|
37
|
+
onClick: o[0] || (o[0] = (t) => a("click", t))
|
|
38
|
+
}, [
|
|
39
|
+
c(r.$slots, "default")
|
|
40
|
+
]),
|
|
41
|
+
e.closeable ? (n(), l("button", {
|
|
42
|
+
key: 0,
|
|
43
|
+
type: "button",
|
|
44
|
+
class: "badge-close",
|
|
45
|
+
onClick: o[1] || (o[1] = (t) => a("close", t))
|
|
46
|
+
}, [
|
|
47
|
+
c(r.$slots, "close-icon", {}, () => [
|
|
48
|
+
m(k(g))
|
|
49
|
+
])
|
|
50
|
+
])) : f("", !0)
|
|
51
|
+
], 2));
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
export {
|
|
55
|
+
b as Badge
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.js","sources":["../../../node_modules/.pnpm/@heroicons+vue@2.2.0_vue@3.5.26_typescript@5.9.3_/node_modules/@heroicons/vue/24/outline/esm/XMarkIcon.js","../src/Badge.vue"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M6 18 18 6M6 6l12 12\"\n })\n ]))\n}","<script setup lang=\"ts\">\nimport { XMarkIcon } from '@heroicons/vue/24/outline';\nimport type { ComponentSize } from './sizes';\n\nexport type BadgeSizePrefix = 'badge';\n\nwithDefaults(defineProps<{\n closeable?: boolean;\n closeLeft?: boolean;\n size?: ComponentSize<BadgeSizePrefix>;\n}>(), {\n closeable: false,\n closeLeft: false,\n size: 'badge-md'\n});\n\ndefineSlots<{\n default: [];\n 'close-icon': [];\n}>();\n\nconst emit = defineEmits<{\n click: [e: PointerEvent];\n close: [e: PointerEvent];\n}>();\n</script>\n\n<template>\n <div \n class=\"badge\" \n :class=\"[\n size, \n { 'close-left': closeLeft }\n ]\">\n <div\n class=\"badge-inner\"\n @click=\"emit('click', $event)\">\n <slot />\n </div>\n <button\n v-if=\"closeable\"\n type=\"button\"\n class=\"badge-close\" \n @click=\"emit('close', $event)\">\n <slot name=\"close-icon\">\n <XMarkIcon />\n </slot>\n </button>\n </div>\n</template>"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","emit","__emit","__props","$event","_renderSlot","_createVNode","_unref","XMarkIcon"],"mappings":";AAEe,SAASA,EAAOC,GAAMC,GAAQ;AAC3C,SAAQC,EAAU,GAAIC,EAAoB,OAAO;AAAA,IAC/C,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,aAAa;AAAA,EACjB,GAAK;AAAA,IACDC,EAAoB,QAAQ;AAAA,MAC1B,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACT,CAAK;AAAA,EACL,CAAG;AACH;;;;;;;;;;ACGA,UAAMC,IAAOC;2BAOTH,EAoBM,OAAA;AAAA,MAnBF,UAAM,SAAO;AAAA,QACSI,EAAA;AAAA,wBAAmCA,EAAA,UAAA;AAAA,MAAS;;MAIlEH,EAIM,OAAA;AAAA,QAHF,OAAM;AAAA,QACL,SAAKH,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAO,MAAEH,EAAI,SAAUG,CAAM;AAAA,MAAA;QAC5BC,EAAQT,EAAA,QAAA,SAAA;AAAA,MAAA;MAGFO,EAAA,kBADVJ,EAQS,UAAA;AAAA;QANL,MAAK;AAAA,QACL,OAAM;AAAA,QACL,SAAKF,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAO,MAAEH,EAAI,SAAUG,CAAM;AAAA,MAAA;QAC5BC,EAEOT,4BAFP,MAEO;AAAA,UADHU,EAAaC,EAAAC,CAAA,CAAA;AAAA,QAAA;;;;;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(t,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(t=typeof globalThis<"u"?globalThis:t||self,e(t.Badge={},t.Vue))})(this,(function(t,e){"use strict";function r(o,s){return e.openBlock(),e.createElementBlock("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor","aria-hidden":"true","data-slot":"icon"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18 18 6M6 6l12 12"})])}const c=e.defineComponent({__name:"Badge",props:{closeable:{type:Boolean,default:!1},closeLeft:{type:Boolean,default:!1},size:{default:"badge-md"}},emits:["click","close"],setup(o,{emit:s}){const i=s;return(d,n)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["badge",[o.size,{"close-left":o.closeLeft}]])},[e.createElementVNode("div",{class:"badge-inner",onClick:n[0]||(n[0]=l=>i("click",l))},[e.renderSlot(d.$slots,"default")]),o.closeable?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"badge-close",onClick:n[1]||(n[1]=l=>i("close",l))},[e.renderSlot(d.$slots,"close-icon",{},()=>[e.createVNode(e.unref(r))])])):e.createCommentVNode("",!0)],2))}});t.Badge=c,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})}));
|
|
2
|
+
//# sourceMappingURL=badge.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.umd.cjs","sources":["../../../node_modules/.pnpm/@heroicons+vue@2.2.0_vue@3.5.26_typescript@5.9.3_/node_modules/@heroicons/vue/24/outline/esm/XMarkIcon.js","../src/Badge.vue"],"sourcesContent":["import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport default function render(_ctx, _cache) {\n return (_openBlock(), _createElementBlock(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M6 18 18 6M6 6l12 12\"\n })\n ]))\n}","<script setup lang=\"ts\">\nimport { XMarkIcon } from '@heroicons/vue/24/outline';\nimport type { ComponentSize } from './sizes';\n\nexport type BadgeSizePrefix = 'badge';\n\nwithDefaults(defineProps<{\n closeable?: boolean;\n closeLeft?: boolean;\n size?: ComponentSize<BadgeSizePrefix>;\n}>(), {\n closeable: false,\n closeLeft: false,\n size: 'badge-md'\n});\n\ndefineSlots<{\n default: [];\n 'close-icon': [];\n}>();\n\nconst emit = defineEmits<{\n click: [e: PointerEvent];\n close: [e: PointerEvent];\n}>();\n</script>\n\n<template>\n <div \n class=\"badge\" \n :class=\"[\n size, \n { 'close-left': closeLeft }\n ]\">\n <div\n class=\"badge-inner\"\n @click=\"emit('click', $event)\">\n <slot />\n </div>\n <button\n v-if=\"closeable\"\n type=\"button\"\n class=\"badge-close\" \n @click=\"emit('close', $event)\">\n <slot name=\"close-icon\">\n <XMarkIcon />\n </slot>\n </button>\n </div>\n</template>"],"names":["render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","emit","__emit","__props","$event","_renderSlot","_createVNode","_unref","XMarkIcon"],"mappings":"2PAEe,SAASA,EAAOC,EAAMC,EAAQ,CAC3C,OAAQC,EAAAA,UAAU,EAAIC,EAAAA,mBAAoB,MAAO,CAC/C,MAAO,6BACP,KAAM,OACN,QAAS,YACT,eAAgB,MAChB,OAAQ,eACR,cAAe,OACf,YAAa,MACjB,EAAK,CACDC,EAAAA,mBAAoB,OAAQ,CAC1B,iBAAkB,QAClB,kBAAmB,QACnB,EAAG,sBACT,CAAK,CACL,CAAG,CACH,+LCGA,MAAMC,EAAOC,8BAOTH,EAAAA,mBAoBM,MAAA,CAnBF,wBAAM,QAAO,CACSI,EAAA,mBAAmCA,EAAA,SAAA,CAAS,MAIlEH,EAAAA,mBAIM,MAAA,CAHF,MAAM,cACL,QAAKH,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAO,GAAEH,EAAI,QAAUG,CAAM,EAAA,GAC5BC,aAAQT,EAAA,OAAA,SAAA,CAAA,GAGFO,EAAA,yBADVJ,EAAAA,mBAQS,SAAA,OANL,KAAK,SACL,MAAM,cACL,QAAKF,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAO,GAAEH,EAAI,QAAUG,CAAM,EAAA,GAC5BC,EAAAA,WAEOT,yBAFP,IAEO,CADHU,EAAAA,YAAaC,EAAAA,MAAAC,CAAA,CAAA,CAAA","x_google_ignoreList":[0]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ComponentSize } from './sizes';
|
|
2
|
+
export type BadgeSizePrefix = 'badge';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
closeable?: boolean;
|
|
5
|
+
closeLeft?: boolean;
|
|
6
|
+
size?: ComponentSize<BadgeSizePrefix>;
|
|
7
|
+
};
|
|
8
|
+
declare function __VLS_template(): {
|
|
9
|
+
attrs: Partial<{}>;
|
|
10
|
+
slots: Readonly<{
|
|
11
|
+
default: [];
|
|
12
|
+
'close-icon': [];
|
|
13
|
+
}> & {
|
|
14
|
+
default: [];
|
|
15
|
+
'close-icon': [];
|
|
16
|
+
};
|
|
17
|
+
refs: {};
|
|
18
|
+
rootEl: HTMLDivElement;
|
|
19
|
+
};
|
|
20
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
21
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
22
|
+
click: (e: PointerEvent) => any;
|
|
23
|
+
close: (e: PointerEvent) => any;
|
|
24
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
25
|
+
onClick?: ((e: PointerEvent) => any) | undefined;
|
|
26
|
+
onClose?: ((e: PointerEvent) => any) | undefined;
|
|
27
|
+
}>, {
|
|
28
|
+
closeable: boolean;
|
|
29
|
+
closeLeft: boolean;
|
|
30
|
+
size: ComponentSize<BadgeSizePrefix>;
|
|
31
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
32
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
33
|
+
export default _default;
|
|
34
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
35
|
+
new (): {
|
|
36
|
+
$slots: S;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type PredeterminedSize = '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl';
|
|
2
|
+
export type Unit = 'px' | 'rem' | 'em' | 'vw' | 'vh' | '%' | 'ch' | 'ex' | 'cm' | 'mm' | 'in' | 'pt' | 'pc';
|
|
3
|
+
export type NumericWithUnit = `${number}${Unit}`;
|
|
4
|
+
export type CalcExpressionChar = number | '.' | '+' | '-' | '*' | '/' | '(' | ')' | '_';
|
|
5
|
+
export type NonEmptyCalcContentString = `${CalcExpressionChar}${string}` | CalcExpressionChar;
|
|
6
|
+
export type ValidCalc = `calc(${NonEmptyCalcContentString})`;
|
|
7
|
+
export type ValidBracketContent = NumericWithUnit | ValidCalc;
|
|
8
|
+
export type ComponentSizeValue<Prefix extends string, Value extends PredeterminedSize = PredeterminedSize> = `${Prefix}-${Value}` | `${Prefix}-${number}` | `${Prefix}-[${ValidBracketContent}]`;
|
|
9
|
+
export type ComponentSize<Prefix extends string, Value extends PredeterminedSize = PredeterminedSize> = ComponentSizeValue<Prefix, Value> | Partial<Record<ComponentSizeValue<Prefix, Value>, boolean>>;
|
package/index.css
CHANGED
package/index.ts
ADDED
package/package.json
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vue-interface/badge",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "A
|
|
3
|
+
"version": "3.1.0",
|
|
4
|
+
"description": "A Vue badge utility.",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "./
|
|
7
|
-
"module": "./
|
|
6
|
+
"main": "./dist/badge.umd.cjs",
|
|
7
|
+
"module": "./dist/badge.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"source": "./index.ts",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"style": "./index.css",
|
|
14
|
+
"import": "./dist/badge.js",
|
|
15
|
+
"require": "./dist/badge.umd.cjs"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
8
18
|
"browserslist": "last 2 versions, > 0.5%, ie >= 11",
|
|
9
19
|
"repository": {
|
|
10
20
|
"type": "git",
|
|
@@ -13,6 +23,7 @@
|
|
|
13
23
|
"keywords": [
|
|
14
24
|
"Badge",
|
|
15
25
|
"Component",
|
|
26
|
+
"Vue",
|
|
16
27
|
"Tailwind",
|
|
17
28
|
"Bootstrap"
|
|
18
29
|
],
|
|
@@ -25,12 +36,18 @@
|
|
|
25
36
|
"readme": "README.md",
|
|
26
37
|
"files": [
|
|
27
38
|
"src",
|
|
39
|
+
"dist",
|
|
40
|
+
"index.ts",
|
|
28
41
|
"index.css",
|
|
29
42
|
"README.md",
|
|
30
43
|
"LICENSE"
|
|
31
44
|
],
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"vue": "^3.3.4"
|
|
47
|
+
},
|
|
32
48
|
"scripts": {
|
|
33
49
|
"dev": "vite",
|
|
50
|
+
"build": "vue-tsc && vite build",
|
|
34
51
|
"preview": "vite preview"
|
|
35
52
|
}
|
|
36
53
|
}
|
package/src/Badge.vue
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { XMarkIcon } from '@heroicons/vue/24/outline';
|
|
3
|
+
import type { ComponentSize } from './sizes';
|
|
4
|
+
|
|
5
|
+
export type BadgeSizePrefix = 'badge';
|
|
6
|
+
|
|
7
|
+
withDefaults(defineProps<{
|
|
8
|
+
closeable?: boolean;
|
|
9
|
+
closeLeft?: boolean;
|
|
10
|
+
size?: ComponentSize<BadgeSizePrefix>;
|
|
11
|
+
}>(), {
|
|
12
|
+
closeable: false,
|
|
13
|
+
closeLeft: false,
|
|
14
|
+
size: 'badge-md'
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
defineSlots<{
|
|
18
|
+
default: [];
|
|
19
|
+
'close-icon': [];
|
|
20
|
+
}>();
|
|
21
|
+
|
|
22
|
+
const emit = defineEmits<{
|
|
23
|
+
click: [e: PointerEvent];
|
|
24
|
+
close: [e: PointerEvent];
|
|
25
|
+
}>();
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<div
|
|
30
|
+
class="badge"
|
|
31
|
+
:class="[
|
|
32
|
+
size,
|
|
33
|
+
{ 'close-left': closeLeft }
|
|
34
|
+
]">
|
|
35
|
+
<div
|
|
36
|
+
class="badge-inner"
|
|
37
|
+
@click="emit('click', $event)">
|
|
38
|
+
<slot />
|
|
39
|
+
</div>
|
|
40
|
+
<button
|
|
41
|
+
v-if="closeable"
|
|
42
|
+
type="button"
|
|
43
|
+
class="badge-close"
|
|
44
|
+
@click="emit('close', $event)">
|
|
45
|
+
<slot name="close-icon">
|
|
46
|
+
<XMarkIcon />
|
|
47
|
+
</slot>
|
|
48
|
+
</button>
|
|
49
|
+
</div>
|
|
50
|
+
</template>
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
@theme {
|
|
2
|
+
--badge-display: inline-flex;
|
|
3
|
+
--badge-align-items: stretch;
|
|
4
|
+
--badge-justify-content: space-between;
|
|
5
|
+
--badge-overflow: hidden;
|
|
6
|
+
--badge-text-decoration: none;
|
|
7
|
+
--badge-gap: calc(1em * var(--badge-padding-x) / 2);
|
|
8
|
+
--badge-border-radius: --spacing(1);
|
|
9
|
+
--badge-font-size: --spacing(4);
|
|
10
|
+
--badge-color: var(--badge-text-default);
|
|
11
|
+
--badge-background-color: var(--badge-primary);
|
|
12
|
+
--badge-padding-y: .25;
|
|
13
|
+
--badge-padding-x: .350;
|
|
14
|
+
--badge-padding-top: calc(1em * var(--badge-padding-y));
|
|
15
|
+
--badge-padding-bottom: calc(1em * var(--badge-padding-y));
|
|
16
|
+
--badge-padding-left: calc(1em * var(--badge-padding-x));
|
|
17
|
+
--badge-padding-right: calc(1em * var(--badge-padding-x));
|
|
18
|
+
|
|
19
|
+
--badge-close-cursor: pointer;
|
|
20
|
+
--badge-close-align-items: center;
|
|
21
|
+
--badge-close-justify-content: center;
|
|
22
|
+
--badge-close-dark-hover-color: var(--badge-color);
|
|
23
|
+
--badge-close-icon-size: 0.75em;
|
|
24
|
+
|
|
25
|
+
--badge-inner-display: inline-flex;
|
|
26
|
+
--badge-inner-align-items: center;
|
|
27
|
+
--badge-inner-justify-content: start;
|
|
28
|
+
|
|
29
|
+
/* badge-outline variables */
|
|
30
|
+
--badge-outline-background-color: transparent;
|
|
31
|
+
--badge-outline-color: var(--badge-primary, var(--color-blue-600));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@utility badge {
|
|
35
|
+
display: var(--badge-display);
|
|
36
|
+
align-items: var(--badge-align-items);
|
|
37
|
+
justify-content: var(--badge-justify-content);
|
|
38
|
+
font-size: var(--badge-font-size);
|
|
39
|
+
color: var(--badge-color);
|
|
40
|
+
background-color: var(--badge-background-color);
|
|
41
|
+
border-radius: var(--badge-border-radius);
|
|
42
|
+
text-decoration: var(--badge-text-decoration);
|
|
43
|
+
overflow: var(--badge-overflow);
|
|
44
|
+
gap: var(--badge-gap);
|
|
45
|
+
|
|
46
|
+
&.close-left {
|
|
47
|
+
.badge-close {
|
|
48
|
+
order: -1;
|
|
49
|
+
padding-left: calc(var(--badge-padding-left) / 2.5);
|
|
50
|
+
padding-right: calc(var(--badge-padding-right) / 2.5);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.badge-inner {
|
|
54
|
+
padding-left: 0;
|
|
55
|
+
padding-right: var(--badge-padding-right);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.badge-close {
|
|
60
|
+
display: var(--badge-inner-display);
|
|
61
|
+
line-height: var(--badge-font-size);
|
|
62
|
+
cursor: var(--badge-close-cursor);
|
|
63
|
+
justify-content: var(--badge-close-justify-content);
|
|
64
|
+
align-items: var(--badge-close-align-items);
|
|
65
|
+
padding-left: calc(var(--badge-padding-left) / 3.5);
|
|
66
|
+
padding-right: calc(var(--badge-padding-right) / 3.5);
|
|
67
|
+
padding-top: var(--badge-padding-top);
|
|
68
|
+
padding-bottom: var(--badge-padding-bottom);
|
|
69
|
+
|
|
70
|
+
& svg,
|
|
71
|
+
& > :first-child {
|
|
72
|
+
width: var(--badge-close-icon-size);
|
|
73
|
+
height: var(--badge-close-icon-size);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
&:hover {
|
|
77
|
+
background-color: color-mix(in oklch, var(--badge-background-color) 90%, black);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@utility badge-inner {
|
|
83
|
+
display: var(--badge-inner-display);
|
|
84
|
+
align-items: var(--badge-inner-align-items);
|
|
85
|
+
justify-content: var(--badge-inner-justify-content);
|
|
86
|
+
line-height: var(--badge-font-size);
|
|
87
|
+
padding-top: var(--badge-padding-top);
|
|
88
|
+
padding-bottom: var(--badge-padding-bottom);
|
|
89
|
+
padding-left: var(--badge-padding-left);
|
|
90
|
+
padding-right: var(--badge-padding-right);
|
|
91
|
+
flex-grow: 1;
|
|
92
|
+
|
|
93
|
+
&:not(:last-child) {
|
|
94
|
+
padding-right: 0;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@utility badge-outline {
|
|
99
|
+
background-color: var(--badge-outline-background-color);
|
|
100
|
+
color: var(--badge-outline-color);
|
|
101
|
+
border: 1px solid var(--badge-outline-color);
|
|
102
|
+
|
|
103
|
+
.badge-close:hover {
|
|
104
|
+
background-color: color-mix(in oklch, var(--badge-background-color, oklch(54.6% 0.245 262.881)) 10%, white);
|
|
105
|
+
|
|
106
|
+
@variant dark {
|
|
107
|
+
background-color: var(--badge-background-color);
|
|
108
|
+
color: var(--badge-close-dark-hover-color);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@utility badge-* {
|
|
114
|
+
--badge-font-size: --value(--badge-font-size-*, [length]);
|
|
115
|
+
--badge-font-size: --spacing(--value(number));
|
|
116
|
+
--badge-close-icon-size: calc(--value(--badge-font-size-*) * 0.75);
|
|
117
|
+
--badge-close-icon-size: calc(--spacing(--value(number)) * 0.75);
|
|
118
|
+
|
|
119
|
+
border-radius: calc(var(--badge-font-size) * .25);
|
|
120
|
+
|
|
121
|
+
background-color: --value(--badge-*, --color-*, [color]);
|
|
122
|
+
color: --value(--badge-*-text, --text-for-*);
|
|
123
|
+
|
|
124
|
+
.badge-close:hover {
|
|
125
|
+
background-color: color-mix(in oklch, --value(--badge-*, --color-*, [color]) 90%, black);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@utility badge-outline-* {
|
|
130
|
+
background-color: var(--badge-outline-background-color);
|
|
131
|
+
color: --value(--badge-*, --color-*, [color]);
|
|
132
|
+
border: 1px solid --value(--badge-*, --color-*, [color]);
|
|
133
|
+
|
|
134
|
+
.badge-close:hover {
|
|
135
|
+
background-color: color-mix(in oklch, --value(--badge-*, --color-*, [color]) 10%, white);
|
|
136
|
+
|
|
137
|
+
@variant dark {
|
|
138
|
+
background-color: --value(--badge-*, --color-*, [color]);
|
|
139
|
+
color: --value(--badge-*-text, --text-for-*);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
package/src/sizes.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type PredeterminedSize = '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl';
|
|
2
|
+
|
|
3
|
+
export type Unit = 'px' | 'rem' | 'em' | 'vw' | 'vh' | '%' | 'ch' | 'ex' | 'cm' | 'mm' | 'in' | 'pt' | 'pc';
|
|
4
|
+
export type NumericWithUnit = `${number}${Unit}`;
|
|
5
|
+
export type CalcExpressionChar = number | '.' | '+' | '-' | '*' | '/' | '(' | ')' | '_'
|
|
6
|
+
export type NonEmptyCalcContentString = `${CalcExpressionChar}${string}` | CalcExpressionChar;
|
|
7
|
+
export type ValidCalc = `calc(${NonEmptyCalcContentString})`;
|
|
8
|
+
export type ValidBracketContent = NumericWithUnit | ValidCalc;
|
|
9
|
+
|
|
10
|
+
export type ComponentSizeValue<
|
|
11
|
+
Prefix extends string,
|
|
12
|
+
Value extends PredeterminedSize = PredeterminedSize
|
|
13
|
+
> = `${Prefix}-${Value}` | `${Prefix}-${number}` | `${Prefix}-[${ValidBracketContent}]`;
|
|
14
|
+
|
|
15
|
+
export type ComponentSize<
|
|
16
|
+
Prefix extends string,
|
|
17
|
+
Value extends PredeterminedSize = PredeterminedSize
|
|
18
|
+
> = ComponentSizeValue<Prefix, Value> | Partial<Record<ComponentSizeValue<Prefix, Value>, boolean>>;
|
package/src/badge.css
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
@theme {
|
|
2
|
-
/* badge variables */
|
|
3
|
-
--badge-display: inline-flex;
|
|
4
|
-
--badge-align-items: stretch;
|
|
5
|
-
--badge-justify-content: space-between;
|
|
6
|
-
--badge-padding-y: .25;
|
|
7
|
-
--badge-padding-x: .350;
|
|
8
|
-
|
|
9
|
-
--badge-children-display: inline-flex;
|
|
10
|
-
--badge-children-align-items: center;
|
|
11
|
-
|
|
12
|
-
--badge-close-display: inline-flex;
|
|
13
|
-
--badge-close-icon: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20stroke='black'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20d='M6%2018L18%206M6%206l12%2012'/%3E%3C/svg%3E");
|
|
14
|
-
|
|
15
|
-
/* badge-outline variables */
|
|
16
|
-
--badge-outline-background-color: transparent;
|
|
17
|
-
--badge-outline-color: var(--badge-primary, var(--color-blue-600));
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
@utility badge {
|
|
21
|
-
--badge-border-radius: --spacing(1);
|
|
22
|
-
--badge-font-size: --spacing(4);
|
|
23
|
-
--badge-padding-top: calc(var(--badge-font-size) * var(--badge-padding-y));
|
|
24
|
-
--badge-padding-bottom: calc(var(--badge-font-size) * var(--badge-padding-y));
|
|
25
|
-
--badge-padding-left: calc(var(--badge-font-size) * var(--badge-padding-x));
|
|
26
|
-
--badge-padding-right: calc(var(--badge-font-size) * var(--badge-padding-x));
|
|
27
|
-
--badge-gap: calc(var(--badge-font-size) * var(--badge-padding-x) / 2);
|
|
28
|
-
--badge-color: var(--badge-text-default);
|
|
29
|
-
--badge-background-color: var(--badge-primary);
|
|
30
|
-
--badge-hover-color: black;
|
|
31
|
-
--badge-hover-mix-percentage: 90%;
|
|
32
|
-
--badge-close-hover-color: var(--badge-color);
|
|
33
|
-
--badge-close-icon-size: calc(var(--badge-font-size) * 0.75);
|
|
34
|
-
|
|
35
|
-
display: var(--badge-display);
|
|
36
|
-
align-items: var(--badge-align-items);
|
|
37
|
-
justify-content: var(--badge-justify-content);
|
|
38
|
-
gap: var(--badge-gap);
|
|
39
|
-
font-size: var(--badge-font-size);
|
|
40
|
-
line-height: var(--badge-font-size);
|
|
41
|
-
color: var(--badge-color);
|
|
42
|
-
background-color: var(--badge-background-color);
|
|
43
|
-
border-radius: var(--badge-border-radius);
|
|
44
|
-
text-decoration: none;
|
|
45
|
-
|
|
46
|
-
&:not(:has(:nth-child(1))) {
|
|
47
|
-
padding-top: var(--badge-padding-top);
|
|
48
|
-
padding-bottom: var(--badge-padding-bottom);
|
|
49
|
-
padding-left: var(--badge-padding-left);
|
|
50
|
-
padding-right: var(--badge-padding-right);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
&:has(:nth-child(1)) {
|
|
54
|
-
> * {
|
|
55
|
-
display: var(--badge-children-display);
|
|
56
|
-
align-items: var(--badge-children-align-items);
|
|
57
|
-
padding-top: var(--badge-padding-top);
|
|
58
|
-
padding-bottom: var(--badge-padding-bottom);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
> :first-child {
|
|
62
|
-
padding-left: var(--badge-padding-left);
|
|
63
|
-
border-top-left-radius: var(--badge-border-radius);
|
|
64
|
-
border-bottom-left-radius: var(--badge-border-radius);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
> :last-child {
|
|
68
|
-
padding-right: var(--badge-padding-right);
|
|
69
|
-
border-top-right-radius: var(--badge-border-radius);
|
|
70
|
-
border-bottom-right-radius: var(--badge-border-radius);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.badge-close {
|
|
74
|
-
padding-left: calc(var(--badge-padding-left) / 3);
|
|
75
|
-
padding-right: calc(var(--badge-padding-left) / 3);
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
&::before {
|
|
79
|
-
content: "";
|
|
80
|
-
display: block;
|
|
81
|
-
width: var(--badge-close-icon-size);
|
|
82
|
-
height: var(--badge-close-icon-size);
|
|
83
|
-
background-color: currentColor;
|
|
84
|
-
-webkit-mask: var(--badge-close-icon) center / contain no-repeat;
|
|
85
|
-
mask: var(--badge-close-icon) center / contain no-repeat;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
&:hover {
|
|
89
|
-
background-color: color-mix(in oklab, var(--badge-background-color) var(--badge-hover-mix-percentage), var(--badge-hover-color));
|
|
90
|
-
color: var(--badge-close-hover-color);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
@utility badge-* {
|
|
98
|
-
--badge-font-size: --value(--badge-font-size-*, [length]);
|
|
99
|
-
--badge-font-size: --spacing(--value(integer));
|
|
100
|
-
--badge-border-radius: calc(var(--badge-font-size) * .25);
|
|
101
|
-
--badge-background-color: --value(--badge-*, --color-*, [color]);
|
|
102
|
-
--badge-color: --value(--badge-*-text, --text-for-*);
|
|
103
|
-
--badge-hover-color: --value(--badge-*-hover-color, --hover-color-for-*);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
@utility badge-outline {
|
|
107
|
-
--badge-background-color: var(--badge-outline-background-color);
|
|
108
|
-
--badge-color: var(--badge-outline-color);
|
|
109
|
-
--badge-border-color: var(--badge-outline-color);
|
|
110
|
-
--badge-border-style: solid;
|
|
111
|
-
--badge-border-width: 1px;
|
|
112
|
-
--badge-hover-color: var(--badge-outline-color);
|
|
113
|
-
--badge-hover-mix-percentage: 90%;
|
|
114
|
-
--badge-close-hover-color: var(--badge-outline-color);
|
|
115
|
-
|
|
116
|
-
@variant dark {
|
|
117
|
-
--badge-hover-mix-percentage: 0%;
|
|
118
|
-
--badge-close-hover-color: var(--color-white, #fff);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
border: var(--badge-border-width) var(--badge-border-style) var(--badge-border-color);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
@utility badge-outline-* {
|
|
125
|
-
--badge-background-color: var(--badge-outline-background-color);
|
|
126
|
-
--badge-color: --value(--badge-*, --color-*, [color]);
|
|
127
|
-
--badge-border-color: --value(--badge-*, --color-*, [color]);
|
|
128
|
-
--badge-border-style: solid;
|
|
129
|
-
--badge-border-width: 1px;
|
|
130
|
-
--badge-hover-color: --value(--badge-*, --color-*, [color]);
|
|
131
|
-
--badge-hover-mix-percentage: 85%;
|
|
132
|
-
|
|
133
|
-
@variant dark {
|
|
134
|
-
--badge-hover-mix-percentage: 0%;
|
|
135
|
-
--badge-close-hover-color: --value(--badge-*-text, --text-for-*);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
border: var(--badge-border-width) var(--badge-border-style) var(--badge-border-color);
|
|
139
|
-
}
|
|
File without changes
|
|
File without changes
|