@popgrids/ui 0.0.12 → 0.0.13

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/tag.js ADDED
@@ -0,0 +1,139 @@
1
+ import { cva } from 'class-variance-authority';
2
+ import { clsx } from 'clsx';
3
+ import { twMerge } from 'tailwind-merge';
4
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
+
6
+ // src/components/tag/tag.tsx
7
+ function cn(...inputs) {
8
+ return twMerge(clsx(inputs));
9
+ }
10
+ var tagVariants = cva(
11
+ // Base styles
12
+ "inline-flex items-center justify-center rounded-full box-border relative transition-all duration-150 ease-in-out font-medium text-sm leading-5 text-center whitespace-nowrap appearance-none focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[rgba(21,94,239,0.6)] focus-visible:ring-offset-0",
13
+ {
14
+ variants: {
15
+ selected: {
16
+ false: "bg-background text-primary-foreground ring ring-primary-foreground ring-offset-0 focus-visible:bg-background focus-visible:text-primary-foreground",
17
+ true: "bg-primary-foreground text-white focus-visible:bg-primary-foreground focus-visible:text-white"
18
+ },
19
+ interactive: {
20
+ false: null,
21
+ true: "cursor-pointer"
22
+ },
23
+ size: {
24
+ md: null,
25
+ lg: null
26
+ },
27
+ collapsed: {
28
+ false: null,
29
+ true: null
30
+ }
31
+ },
32
+ defaultVariants: {
33
+ selected: true,
34
+ interactive: false,
35
+ size: "md",
36
+ collapsed: false
37
+ },
38
+ compoundVariants: [
39
+ // Interactive hover states
40
+ {
41
+ interactive: true,
42
+ selected: false,
43
+ class: "hover:ring-2 hover:ring-primary-foreground"
44
+ },
45
+ {
46
+ interactive: true,
47
+ selected: true,
48
+ class: "hover:bg-primary-foreground/90"
49
+ },
50
+ // Interactive active states
51
+ {
52
+ interactive: true,
53
+ selected: false,
54
+ class: "active:ring active:ring-primary-foreground"
55
+ },
56
+ {
57
+ interactive: true,
58
+ selected: true,
59
+ class: "active:bg-primary-foreground"
60
+ },
61
+ // Size variants (non-collapsed)
62
+ {
63
+ size: "md",
64
+ collapsed: false,
65
+ class: "px-2 py-1.5 gap-0.5"
66
+ },
67
+ {
68
+ size: "lg",
69
+ collapsed: false,
70
+ class: "px-3 py-2.5 gap-1"
71
+ },
72
+ // Collapsed size adjustments
73
+ {
74
+ size: "md",
75
+ collapsed: true,
76
+ class: "p-1.5 w-8 h-8"
77
+ },
78
+ {
79
+ size: "lg",
80
+ collapsed: true,
81
+ class: "p-2.5 w-10 h-10"
82
+ }
83
+ ]
84
+ }
85
+ );
86
+ function Tag({
87
+ size = "md",
88
+ selected = true,
89
+ collapsed = false,
90
+ children,
91
+ leading,
92
+ trailing,
93
+ onClick,
94
+ className = ""
95
+ }) {
96
+ const handleClick = () => {
97
+ if (onClick) {
98
+ onClick();
99
+ }
100
+ };
101
+ const handleKeyDown = (event) => {
102
+ if (onClick && (event.key === "Enter" || event.key === " ")) {
103
+ event.preventDefault();
104
+ onClick();
105
+ }
106
+ };
107
+ const showLeading = leading && !collapsed;
108
+ const showTrailing = trailing && !collapsed;
109
+ const TagElement = onClick ? "button" : "div";
110
+ return /* @__PURE__ */ jsxs(
111
+ TagElement,
112
+ {
113
+ className: cn(
114
+ tagVariants({
115
+ size,
116
+ selected,
117
+ collapsed,
118
+ interactive: !!onClick
119
+ }),
120
+ className
121
+ ),
122
+ onClick: handleClick,
123
+ onKeyDown: handleKeyDown,
124
+ type: onClick ? "button" : void 0,
125
+ children: [
126
+ !collapsed && /* @__PURE__ */ jsxs(Fragment, { children: [
127
+ showLeading && /* @__PURE__ */ jsx("div", { className: "flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit", children: leading }),
128
+ /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center px-1 first:pl-0 last:pr-0", children }),
129
+ showTrailing && /* @__PURE__ */ jsx("div", { className: "flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit", children: trailing })
130
+ ] }),
131
+ collapsed && /* @__PURE__ */ jsx("div", { className: "flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit", children: leading || trailing })
132
+ ]
133
+ }
134
+ );
135
+ }
136
+
137
+ export { Tag };
138
+ //# sourceMappingURL=tag.js.map
139
+ //# sourceMappingURL=tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/components/tag/tag.tsx"],"names":[],"mappings":"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","file":"tag.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cva } from \"class-variance-authority\";\nimport type { KeyboardEvent } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { TagProps } from \"./types\";\n\nconst tagVariants = cva(\n // Base styles\n \"inline-flex items-center justify-center rounded-full box-border relative transition-all duration-150 ease-in-out font-medium text-sm leading-5 text-center whitespace-nowrap appearance-none focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[rgba(21,94,239,0.6)] focus-visible:ring-offset-0\",\n {\n variants: {\n selected: {\n false:\n \"bg-background text-primary-foreground ring ring-primary-foreground ring-offset-0 focus-visible:bg-background focus-visible:text-primary-foreground\",\n true: \"bg-primary-foreground text-white focus-visible:bg-primary-foreground focus-visible:text-white\",\n },\n interactive: {\n false: null,\n true: \"cursor-pointer\",\n },\n size: {\n md: null,\n lg: null,\n },\n collapsed: {\n false: null,\n true: null,\n },\n },\n defaultVariants: {\n selected: true,\n interactive: false,\n size: \"md\",\n collapsed: false,\n },\n compoundVariants: [\n // Interactive hover states\n {\n interactive: true,\n selected: false,\n class: \"hover:ring-2 hover:ring-primary-foreground\",\n },\n {\n interactive: true,\n selected: true,\n class: \"hover:bg-primary-foreground/90\",\n },\n // Interactive active states\n {\n interactive: true,\n selected: false,\n class: \"active:ring active:ring-primary-foreground\",\n },\n {\n interactive: true,\n selected: true,\n class: \"active:bg-primary-foreground\",\n },\n // Size variants (non-collapsed)\n {\n size: \"md\",\n collapsed: false,\n class: \"px-2 py-1.5 gap-0.5\",\n },\n {\n size: \"lg\",\n collapsed: false,\n class: \"px-3 py-2.5 gap-1\",\n },\n // Collapsed size adjustments\n {\n size: \"md\",\n collapsed: true,\n class: \"p-1.5 w-8 h-8\",\n },\n {\n size: \"lg\",\n collapsed: true,\n class: \"p-2.5 w-10 h-10\",\n },\n ],\n },\n);\n\nexport function Tag({\n size = \"md\",\n selected = true,\n collapsed = false,\n children,\n leading,\n trailing,\n onClick,\n className = \"\",\n}: TagProps) {\n const handleClick = () => {\n if (onClick) {\n onClick();\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement | HTMLDivElement>) => {\n if (onClick && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n onClick();\n }\n };\n\n const showLeading = leading && !collapsed;\n const showTrailing = trailing && !collapsed;\n\n // Use button for interactive tags, div for non-interactive\n const TagElement = onClick ? \"button\" : \"div\";\n\n return (\n <TagElement\n className={cn(\n tagVariants({\n size,\n selected,\n collapsed,\n interactive: !!onClick,\n }),\n className,\n )}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n type={onClick ? \"button\" : undefined}\n >\n {!collapsed && (\n <>\n {showLeading && (\n <div className=\"flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit\">\n {leading}\n </div>\n )}\n <div className=\"flex items-center justify-center px-1 first:pl-0 last:pr-0\">\n {children}\n </div>\n {showTrailing && (\n <div className=\"flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit\">\n {trailing}\n </div>\n )}\n </>\n )}\n\n {collapsed && (\n <div className=\"flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden text-inherit\">\n {leading || trailing}\n </div>\n )}\n </TagElement>\n );\n}\n"]}
package/package.json CHANGED
@@ -158,6 +158,16 @@
158
158
  "default": "./dist/section-header.cjs"
159
159
  }
160
160
  },
161
+ "./tag": {
162
+ "import": {
163
+ "types": "./dist/tag.d.ts",
164
+ "default": "./dist/tag.js"
165
+ },
166
+ "require": {
167
+ "types": "./dist/tag.d.cts",
168
+ "default": "./dist/tag.cjs"
169
+ }
170
+ },
161
171
  "./tooltip": {
162
172
  "import": {
163
173
  "types": "./dist/tooltip.d.ts",
@@ -231,7 +241,7 @@
231
241
  ],
232
242
  "type": "module",
233
243
  "types": "./dist/index.d.ts",
234
- "version": "0.0.12",
244
+ "version": "0.0.13",
235
245
  "scripts": {
236
246
  "analyze": "pnpm tsup && pnpm dlx esbuild-visualizer --metadata ./dist/metafile-esm.json --open",
237
247
  "build": "tsup",