@vue-interface/badge 3.0.0 → 3.1.1

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/README.md CHANGED
@@ -24,40 +24,33 @@ bun i @vue-interface/badge
24
24
 
25
25
  To create a badge component, use the `badge` class. Use the `badge-close` class to add a close button to the badge.
26
26
 
27
- ```html
28
- <div class="badge">
29
- Basic usage
30
- </div>
31
- <div class="badge">
32
- <span>With Inner</span>
33
- <span>Elements</span>
34
- </div>
35
- <div class="badge">
36
- <span>Right Close</span>
37
- <button class="badge-close"></button>
38
- </div>
39
- <div class="badge">
40
- <button class="badge-close"></button>
41
- <span>Left Close</span>
42
- </div>
27
+ ```vue
28
+ <Badge>Basic Usage</Badge>
29
+ <Badge closeable @click="() => {console.log('click')}" @close="() => {console.log('close')}">
30
+ Right Close Button
31
+ </Badge>
32
+ <Badge closeable close-left>Left Close Button</Badge>
33
+ <Badge closeable class="badge-pill">Pill Badge</Badge>
34
+ <Badge closeable>
35
+ <template #close-icon>
36
+ <trash-icon></trash-icon>
37
+ </template>
38
+ Custom Icon
39
+ </Badge>
43
40
  ```
44
41
  Use the `badge-outline` class to create an outlined badge.
45
42
 
46
- ```html
47
- <div class="badge badge-outline">
48
- No Children
49
- </div>
50
- <div class="badge badge-outline">
51
- <span>With Children</span>
52
- </div>
53
- <div class="badge badge-outline">
54
- <span>Right Close Button</span>
55
- <button class="badge-close"></button>
56
- </div>
57
- <div class="badge badge-outline">
58
- <button class="badge-close"></button>
59
- <span>Left Close Button</span>
60
- </div>
43
+ ```vue
44
+ <Badge class="badge-outline">Basic Usage</Badge>
45
+ <Badge class="badge-outline" closeable>Right Close Button</Badge>
46
+ <Badge class="badge-outline" closeable close-left>Left Close Button</Badge>
47
+ <Badge closeable class="badge-pill badge-outline">Pill Badge</Badge>
48
+ <Badge closeable class="badge-outline">
49
+ <template #close-icon>
50
+ <trash-icon></trash-icon>
51
+ </template>
52
+ Custom Icon
53
+ </Badge>
61
54
  ```
62
55
 
63
56
  For more comprehensive documentation and examples, please visit the [online documentation](https://vue-interface.github.io/packages/badge/).
package/dist/badge.js ADDED
@@ -0,0 +1,57 @@
1
+ import { openBlock as l, createElementBlock as n, createElementVNode as i, defineComponent as d, normalizeClass as u, renderSlot as c, createVNode as f, unref as m, createCommentVNode as k } from "vue";
2
+ function g(e, s) {
3
+ return l(), n("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) => (l(), n("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 ? (l(), n("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
+ f(m(g))
49
+ ])
50
+ ])) : k("", !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 '@vue-interface/sizeable';\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 '@vue-interface/sizeable';\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]}
@@ -0,0 +1,2 @@
1
+ import { default as Badge } from './src/Badge.vue';
2
+ export { Badge, };
@@ -0,0 +1,38 @@
1
+ import { ComponentSize } from '@vue-interface/sizeable';
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,3 @@
1
+ import { ConfigEnv } from 'vite';
2
+ declare const _default: ({ command }: ConfigEnv) => import('vite').UserConfig;
3
+ export default _default;
package/index.css CHANGED
@@ -1,6 +1,6 @@
1
1
  @import 'tailwindcss';
2
2
 
3
- @import './src/sizes.css';
4
- @import './src/colors.css';
3
+ @import './src/css/sizes.css';
4
+ @import './src/css/colors.css';
5
5
 
6
- @import './src/badge.css';
6
+ @import './src/css/badge.css';
package/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ import Badge from './src/Badge.vue';
2
+
3
+ export {
4
+ Badge,
5
+ };
package/package.json CHANGED
@@ -1,10 +1,20 @@
1
1
  {
2
2
  "name": "@vue-interface/badge",
3
- "version": "3.0.0",
4
- "description": "A TailwindCSS badge utility.",
3
+ "version": "3.1.1",
4
+ "description": "A Vue badge utility.",
5
5
  "type": "module",
6
- "main": "./index.css",
7
- "module": "./index.css",
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,20 @@
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
+ "@heroicons/vue": "2.2.0",
47
+ "vue": "^3.3.4",
48
+ "@vue-interface/sizeable": "2.0.0"
49
+ },
32
50
  "scripts": {
33
51
  "dev": "vite",
52
+ "build": "vue-tsc && vite build",
34
53
  "preview": "vite preview"
35
54
  }
36
55
  }
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 '@vue-interface/sizeable';
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,148 @@
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-text-trasnform: capitalize;
8
+ --badge-gap: calc(1em * var(--badge-padding-x) / 2);
9
+ --badge-border-radius: --spacing(1);
10
+ --badge-font-size: --spacing(4);
11
+ --badge-color: var(--badge-text-default);
12
+ --badge-background-color: var(--badge-primary);
13
+ --badge-padding-y: .25;
14
+ --badge-padding-x: .350;
15
+ --badge-padding-top: calc(1em * var(--badge-padding-y));
16
+ --badge-padding-bottom: calc(1em * var(--badge-padding-y));
17
+ --badge-padding-left: calc(1em * var(--badge-padding-x));
18
+ --badge-padding-right: calc(1em * var(--badge-padding-x));
19
+
20
+ --badge-close-cursor: pointer;
21
+ --badge-close-align-items: center;
22
+ --badge-close-justify-content: center;
23
+ --badge-close-dark-hover-color: var(--badge-color);
24
+ --badge-close-icon-size: 0.75em;
25
+
26
+ --badge-inner-display: inline-flex;
27
+ --badge-inner-align-items: center;
28
+ --badge-inner-justify-content: start;
29
+
30
+ /* badge-outline variables */
31
+ --badge-outline-background-color: transparent;
32
+ --badge-outline-color: var(--badge-primary, var(--color-blue-600));
33
+ }
34
+
35
+ @utility badge {
36
+ display: var(--badge-display);
37
+ align-items: var(--badge-align-items);
38
+ justify-content: var(--badge-justify-content);
39
+ font-size: var(--badge-font-size);
40
+ color: var(--badge-color);
41
+ background-color: var(--badge-background-color);
42
+ border-radius: var(--badge-border-radius);
43
+ text-decoration: var(--badge-text-decoration);
44
+ text-transform: var(--badge-text-transform);
45
+ overflow: var(--badge-overflow);
46
+ gap: var(--badge-gap);
47
+
48
+ &.close-left {
49
+ .badge-close {
50
+ order: -1;
51
+ padding-left: calc(var(--badge-padding-left) / 2.5);
52
+ padding-right: calc(var(--badge-padding-right) / 2.5);
53
+ }
54
+
55
+ .badge-inner {
56
+ padding-left: 0;
57
+ padding-right: var(--badge-padding-right);
58
+ }
59
+ }
60
+
61
+ .badge-close {
62
+ display: var(--badge-inner-display);
63
+ line-height: var(--badge-font-size);
64
+ cursor: var(--badge-close-cursor);
65
+ justify-content: var(--badge-close-justify-content);
66
+ align-items: var(--badge-close-align-items);
67
+ padding-left: calc(var(--badge-padding-left) / 3.5);
68
+ padding-right: calc(var(--badge-padding-right) / 3.5);
69
+ padding-top: var(--badge-padding-top);
70
+ padding-bottom: var(--badge-padding-bottom);
71
+
72
+ & svg,
73
+ & > :first-child {
74
+ width: var(--badge-close-icon-size);
75
+ height: var(--badge-close-icon-size);
76
+ }
77
+
78
+ &:hover {
79
+ background-color: color-mix(in oklch, var(--badge-background-color) 90%, black);
80
+ }
81
+ }
82
+ }
83
+
84
+ @utility badge-inner {
85
+ display: var(--badge-inner-display);
86
+ align-items: var(--badge-inner-align-items);
87
+ justify-content: var(--badge-inner-justify-content);
88
+ line-height: var(--badge-font-size);
89
+ padding-top: var(--badge-padding-top);
90
+ padding-bottom: var(--badge-padding-bottom);
91
+ padding-left: var(--badge-padding-left);
92
+ padding-right: var(--badge-padding-right);
93
+ flex-grow: 1;
94
+
95
+ &:not(:last-child) {
96
+ padding-right: 0;
97
+ }
98
+ }
99
+
100
+ @utility badge-outline {
101
+ background-color: var(--badge-outline-background-color);
102
+ color: var(--badge-outline-color);
103
+ border: 1px solid var(--badge-outline-color);
104
+
105
+ .badge-close:hover {
106
+ background-color: color-mix(in oklch, var(--badge-background-color, oklch(54.6% 0.245 262.881)) 10%, white);
107
+
108
+ @variant dark {
109
+ background-color: var(--badge-background-color);
110
+ color: var(--badge-close-dark-hover-color);
111
+ }
112
+ }
113
+ }
114
+
115
+ @utility badge-pill {
116
+ border-radius: 100px;
117
+ }
118
+
119
+ @utility badge-* {
120
+ --badge-font-size: --value(--badge-font-size-*, [length]);
121
+ --badge-font-size: --spacing(--value(number));
122
+ --badge-close-icon-size: calc(--value(--badge-font-size-*) * 0.75);
123
+ --badge-close-icon-size: calc(--spacing(--value(number)) * 0.75);
124
+
125
+ border-radius: calc(var(--badge-font-size) * .25);
126
+
127
+ background-color: --value(--badge-*, --color-*, [color]);
128
+ color: --value(--badge-*-text, --text-for-*);
129
+
130
+ .badge-close:hover {
131
+ background-color: color-mix(in oklch, --value(--badge-*, --color-*, [color]) 90%, black);
132
+ }
133
+ }
134
+
135
+ @utility badge-outline-* {
136
+ background-color: var(--badge-outline-background-color);
137
+ color: --value(--badge-*, --color-*, [color]);
138
+ border: 1px solid --value(--badge-*, --color-*, [color]);
139
+
140
+ .badge-close:hover {
141
+ background-color: color-mix(in oklch, --value(--badge-*, --color-*, [color]) 10%, white);
142
+
143
+ @variant dark {
144
+ background-color: --value(--badge-*, --color-*, [color]);
145
+ color: --value(--badge-*-text, --text-for-*);
146
+ }
147
+ }
148
+ }
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