shadcn-glass-ui 1.0.11 → 2.0.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/CHANGELOG.md +213 -0
- package/README.md +174 -17
- package/context7.json +58 -0
- package/dist/cli/index.cjs +470 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.ts +18 -0
- package/dist/cli/index.js +469 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/components.cjs +4 -4
- package/dist/components.d.ts +153 -22
- package/dist/components.js +2 -2
- package/dist/hooks.cjs +2 -2
- package/dist/index.cjs +872 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +0 -2390
- package/dist/index.js +844 -3
- package/dist/index.js.map +1 -1
- package/dist/r/ai-card-glass.json +1 -1
- package/dist/r/avatar-glass.json +1 -1
- package/dist/r/circular-metric-glass.json +1 -1
- package/dist/r/circular-progress-glass.json +1 -1
- package/dist/r/combobox-glass.json +1 -1
- package/dist/r/flag-alert-glass.json +1 -1
- package/dist/r/flags-section-glass.json +1 -1
- package/dist/r/insight-card-glass.json +26 -0
- package/dist/r/interactive-card.json +1 -1
- package/dist/r/language-bar-glass.json +1 -1
- package/dist/r/metric-card-glass.json +3 -2
- package/dist/r/metrics-grid-glass.json +1 -1
- package/dist/r/modal-glass.json +1 -1
- package/dist/r/progress-glass.json +1 -1
- package/dist/r/registry.json +19 -1
- package/dist/r/segmented-control-glass.json +1 -1
- package/dist/r/sparkline-glass.json +26 -0
- package/dist/r/stepper-glass.json +41 -0
- package/dist/r/tabs-glass.json +1 -1
- package/dist/r/trust-score-card-glass.json +1 -1
- package/dist/r/year-card-glass.json +1 -1
- package/dist/shadcn-glass-ui.css +1 -1
- package/dist/{theme-context-XtasSxRT.cjs → theme-context-CVW50BKW.cjs} +2 -2
- package/dist/{theme-context-XtasSxRT.cjs.map → theme-context-CVW50BKW.cjs.map} +1 -1
- package/dist/themes.cjs +1 -1
- package/dist/trust-score-card-glass-BcZbul0P.js +26895 -0
- package/dist/trust-score-card-glass-BcZbul0P.js.map +1 -0
- package/dist/trust-score-card-glass-r3qM09Jp.cjs +27689 -0
- package/dist/trust-score-card-glass-r3qM09Jp.cjs.map +1 -0
- package/dist/{use-focus-BbpE2qGq.cjs → use-focus-ZE8ozmZE.cjs} +2 -2
- package/dist/{use-focus-BbpE2qGq.cjs.map → use-focus-ZE8ozmZE.cjs.map} +1 -1
- package/dist/{use-wallpaper-tint-CIqtoETa.cjs → use-wallpaper-tint-BuS80tbN.cjs} +2 -2
- package/dist/{use-wallpaper-tint-CIqtoETa.cjs.map → use-wallpaper-tint-BuS80tbN.cjs.map} +1 -1
- package/dist/{utils-CGCOTvxT.js → utils-CcyeqpKQ.js} +1 -1
- package/dist/{utils-CGCOTvxT.js.map → utils-CcyeqpKQ.js.map} +1 -1
- package/dist/{utils-CriE74ig.cjs → utils-DLXayspX.cjs} +2 -2
- package/dist/{utils-CriE74ig.cjs.map → utils-DLXayspX.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/docs/AI_IMPROVEMENTS_COMPLETE.md +574 -0
- package/docs/AI_USAGE.md +1328 -0
- package/docs/API_PATTERNS_COMPARISON.md +418 -0
- package/docs/BEST_PRACTICES.md +800 -0
- package/docs/COMPLIANCE_CHECKLIST.md +307 -0
- package/docs/COMPLIANCE_TESTING.md +436 -0
- package/docs/COMPONENTS_CATALOG.md +1076 -0
- package/docs/CSS_VARIABLES_AUDIT.md +306 -0
- package/docs/CSS_VARIABLES_REFACTORING_PLAN.md +330 -0
- package/docs/EXPORTS_MAP.json +875 -0
- package/docs/EXPORTS_STRUCTURE.md +729 -0
- package/docs/GETTING_STARTED.md +655 -0
- package/docs/METRIC_CARD_API_REDESIGN.md +354 -0
- package/docs/PRIMITIVE_MAPPING.md +404 -0
- package/docs/PUBLISHING.md +593 -0
- package/docs/REGISTRY_SUMMARY.md +96 -0
- package/docs/REGISTRY_USAGE.md +339 -0
- package/docs/SECURITY.md +117 -0
- package/docs/THEME_CREATION_GUIDE.md +455 -0
- package/docs/TOKEN_ARCHITECTURE.md +365 -0
- package/docs/announcements/v1.0.5-devto.md +363 -0
- package/docs/announcements/v1.0.5-reddit.md +115 -0
- package/docs/announcements/v1.0.5-twitter.md +70 -0
- package/docs/api/README.md +725 -0
- package/docs/api/functions/ThemeProvider.md +21 -0
- package/docs/api/functions/cn.md +27 -0
- package/docs/api/functions/getNextTheme.md +21 -0
- package/docs/api/functions/getThemeConfig.md +21 -0
- package/docs/api/functions/useFocus.md +53 -0
- package/docs/api/functions/useHover.md +47 -0
- package/docs/api/functions/useResponsive.md +31 -0
- package/docs/api/functions/useTheme.md +15 -0
- package/docs/api/functions/useWallpaperTint.md +36 -0
- package/docs/api/globals.md +139 -0
- package/docs/api/interfaces/AlertGlassProps.md +131 -0
- package/docs/api/interfaces/AvatarGlassProps.md +114 -0
- package/docs/api/interfaces/BadgeGlassProps.md +118 -0
- package/docs/api/interfaces/ButtonGlassProps.md +179 -0
- package/docs/api/interfaces/CheckboxGlassProps.md +125 -0
- package/docs/api/interfaces/DropdownGlassProps.md +123 -0
- package/docs/api/interfaces/DropdownItem.md +53 -0
- package/docs/api/interfaces/GlassCardProps.md +151 -0
- package/docs/api/interfaces/InputGlassProps.md +169 -0
- package/docs/api/interfaces/NotificationGlassProps.md +67 -0
- package/docs/api/interfaces/ProgressGlassProps.md +49 -0
- package/docs/api/interfaces/SkeletonGlassProps.md +41 -0
- package/docs/api/interfaces/SliderGlassProps.md +107 -0
- package/docs/api/interfaces/TabItem.md +25 -0
- package/docs/api/interfaces/ThemeConfig.md +25 -0
- package/docs/api/interfaces/ThemeContextValue.md +47 -0
- package/docs/api/interfaces/ToggleGlassProps.md +59 -0
- package/docs/api/interfaces/TooltipGlassProps.md +119 -0
- package/docs/api/type-aliases/AlertType.md +11 -0
- package/docs/api/type-aliases/AlertVariant.md +11 -0
- package/docs/api/type-aliases/AvatarSize.md +11 -0
- package/docs/api/type-aliases/AvatarStatus.md +13 -0
- package/docs/api/type-aliases/BadgeSize.md +11 -0
- package/docs/api/type-aliases/BadgeVariant.md +11 -0
- package/docs/api/type-aliases/ButtonGlassSize.md +11 -0
- package/docs/api/type-aliases/ButtonGlassVariant.md +11 -0
- package/docs/api/type-aliases/DropdownAlign.md +11 -0
- package/docs/api/type-aliases/GlowType.md +11 -0
- package/docs/api/type-aliases/InputGlassSize.md +11 -0
- package/docs/api/type-aliases/IntensityType.md +11 -0
- package/docs/api/type-aliases/ModalSize.md +11 -0
- package/docs/api/type-aliases/NotificationType.md +11 -0
- package/docs/api/type-aliases/PaddingType.md +11 -0
- package/docs/api/type-aliases/ProgressGradient.md +11 -0
- package/docs/api/type-aliases/ProgressSize.md +11 -0
- package/docs/api/type-aliases/SkeletonVariant.md +11 -0
- package/docs/api/type-aliases/Theme.md +11 -0
- package/docs/api/type-aliases/ToggleGlassSize.md +11 -0
- package/docs/api/type-aliases/TooltipPosition.md +11 -0
- package/docs/api/variables/AICardGlass.md +11 -0
- package/docs/api/variables/AlertGlass.md +11 -0
- package/docs/api/variables/AvatarGlass.md +11 -0
- package/docs/api/variables/BadgeGlass.md +11 -0
- package/docs/api/variables/BaseProgressGlass.md +11 -0
- package/docs/api/variables/ButtonGlass.md +11 -0
- package/docs/api/variables/CareerStatsGlass.md +11 -0
- package/docs/api/variables/CareerStatsHeaderGlass.md +11 -0
- package/docs/api/variables/CheckboxGlass.md +11 -0
- package/docs/api/variables/CircularMetricGlass.md +22 -0
- package/docs/api/variables/CircularProgressGlass.md +11 -0
- package/docs/api/variables/ComboBoxGlass.md +27 -0
- package/docs/api/variables/ContributionMetricsGlass.md +11 -0
- package/docs/api/variables/DropdownGlass.md +11 -0
- package/docs/api/variables/ExpandableHeaderGlass.md +11 -0
- package/docs/api/variables/FlagAlertGlass.md +11 -0
- package/docs/api/variables/FlagsSectionGlass.md +11 -0
- package/docs/api/variables/FormFieldWrapper.md +44 -0
- package/docs/api/variables/GlassCard.md +11 -0
- package/docs/api/variables/HeaderBrandingGlass.md +11 -0
- package/docs/api/variables/HeaderNavGlass.md +11 -0
- package/docs/api/variables/IconButtonGlass.md +11 -0
- package/docs/api/variables/InputGlass.md +11 -0
- package/docs/api/variables/InteractiveCard.md +45 -0
- package/docs/api/variables/LanguageBarGlass.md +11 -0
- package/docs/api/variables/MetricCardGlass.md +11 -0
- package/docs/api/variables/MetricsGridGlass.md +11 -0
- package/docs/api/variables/ModalGlass.md +72 -0
- package/docs/api/variables/NotificationGlass.md +11 -0
- package/docs/api/variables/PopoverGlass.md +11 -0
- package/docs/api/variables/ProfileAvatarGlass.md +11 -0
- package/docs/api/variables/ProfileHeaderGlass.md +11 -0
- package/docs/api/variables/ProgressGlass.md +11 -0
- package/docs/api/variables/ProjectsListGlass.md +11 -0
- package/docs/api/variables/RainbowProgressGlass.md +11 -0
- package/docs/api/variables/RepositoryCardGlass.md +11 -0
- package/docs/api/variables/RepositoryHeaderGlass.md +11 -0
- package/docs/api/variables/RepositoryMetadataGlass.md +11 -0
- package/docs/api/variables/SearchBoxGlass.md +11 -0
- package/docs/api/variables/SegmentedControlGlass.md +11 -0
- package/docs/api/variables/SkeletonGlass.md +11 -0
- package/docs/api/variables/SliderGlass.md +11 -0
- package/docs/api/variables/SortDropdownGlass.md +11 -0
- package/docs/api/variables/StatItemGlass.md +11 -0
- package/docs/api/variables/StatusIndicatorGlass.md +11 -0
- package/docs/api/variables/THEMES.md +11 -0
- package/docs/api/variables/THEME_CONFIG.md +11 -0
- package/docs/api/variables/TabsGlass.md +52 -0
- package/docs/api/variables/ThemeToggleGlass.md +11 -0
- package/docs/api/variables/ToggleGlass.md +11 -0
- package/docs/api/variables/TooltipGlass.md +11 -0
- package/docs/api/variables/TouchTarget.md +35 -0
- package/docs/api/variables/TrustScoreCardGlass.md +11 -0
- package/docs/api/variables/TrustScoreDisplayGlass.md +11 -0
- package/docs/api/variables/UserInfoGlass.md +11 -0
- package/docs/api/variables/UserStatsLineGlass.md +11 -0
- package/docs/api/variables/YearCardGlass.md +11 -0
- package/docs/api/variables/alertVariants.md +21 -0
- package/docs/api/variables/avatarSizes.md +21 -0
- package/docs/api/variables/badgeVariants.md +21 -0
- package/docs/api/variables/buttonGlassVariants.md +21 -0
- package/docs/api/variables/cardIntensity.md +21 -0
- package/docs/api/variables/dropdownAlign.md +21 -0
- package/docs/api/variables/inputVariants.md +21 -0
- package/docs/api/variables/modalSizes.md +21 -0
- package/docs/api/variables/notificationVariants.md +21 -0
- package/docs/api/variables/progressSizes.md +21 -0
- package/docs/api/variables/shadcnAlertVariants.md +21 -0
- package/docs/api/variables/shadcnBadgeVariants.md +21 -0
- package/docs/api/variables/shadcnButtonVariants.md +21 -0
- package/docs/api/variables/skeletonVariants.md +21 -0
- package/docs/api/variables/statusSizes.md +21 -0
- package/docs/api/variables/toggleSizes.md +21 -0
- package/docs/api/variables/tooltipPositions.md +21 -0
- package/docs/design-system/UI_DESIGN.md +628 -0
- package/docs/migration/CSS_VARIABLES_MIGRATION_2.0.md +325 -0
- package/docs/migration/modal-glass-compound-api.md +458 -0
- package/docs/migration/select-to-combobox.md +386 -0
- package/docs/migration/tabs-glass-compound-api.md +579 -0
- package/docs/technical/DEPENDENCIES.md +291 -0
- package/docs/visual-testing-guide.md +324 -0
- package/package.json +20 -3
- package/dist/trust-score-card-glass-CNcQveNY.cjs +0 -8231
- package/dist/trust-score-card-glass-CNcQveNY.cjs.map +0 -1
- package/dist/trust-score-card-glass-CowcDyxH.js +0 -7795
- package/dist/trust-score-card-glass-CowcDyxH.js.map +0 -1
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const require_trust_score_card_glass = require("../trust-score-card-glass-r3qM09Jp.cjs");
|
|
3
|
+
let node_util = require("node:util");
|
|
4
|
+
let node_fs = require("node:fs");
|
|
5
|
+
let node_path = require("node:path");
|
|
6
|
+
let node_url = require("node:url");
|
|
7
|
+
var cachedExportsMap = null;
|
|
8
|
+
function loadExportsMap() {
|
|
9
|
+
if (cachedExportsMap) return cachedExportsMap;
|
|
10
|
+
const __dirname$1 = (0, node_path.dirname)((0, node_url.fileURLToPath)({}.url));
|
|
11
|
+
const paths = [
|
|
12
|
+
(0, node_path.resolve)(__dirname$1, "../../../docs/EXPORTS_MAP.json"),
|
|
13
|
+
(0, node_path.resolve)(__dirname$1, "../../../docs/EXPORTS_MAP.json"),
|
|
14
|
+
(0, node_path.resolve)(process.cwd(), "node_modules/shadcn-glass-ui/docs/EXPORTS_MAP.json"),
|
|
15
|
+
(0, node_path.resolve)(process.cwd(), "docs/EXPORTS_MAP.json")
|
|
16
|
+
];
|
|
17
|
+
for (const path of paths) try {
|
|
18
|
+
const content = (0, node_fs.readFileSync)(path, "utf-8");
|
|
19
|
+
cachedExportsMap = JSON.parse(content);
|
|
20
|
+
return cachedExportsMap;
|
|
21
|
+
} catch {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
throw new Error("EXPORTS_MAP.json not found. Please ensure:\n - You are running from the project root, or\n - The shadcn-glass-ui package is installed correctly");
|
|
25
|
+
}
|
|
26
|
+
function getAllComponents() {
|
|
27
|
+
const exportsMap = loadExportsMap();
|
|
28
|
+
const components = [];
|
|
29
|
+
for (const [categoryKey, categoryData] of Object.entries(exportsMap.components)) if (categoryData.exports) for (const exp of categoryData.exports) components.push({
|
|
30
|
+
name: exp.name,
|
|
31
|
+
path: exp.path,
|
|
32
|
+
category: categoryKey,
|
|
33
|
+
level: categoryData.level ?? 0
|
|
34
|
+
});
|
|
35
|
+
return components;
|
|
36
|
+
}
|
|
37
|
+
function findComponentByName(name) {
|
|
38
|
+
const exportsMap = loadExportsMap();
|
|
39
|
+
for (const [categoryKey, categoryData] of Object.entries(exportsMap.components)) if (categoryData.exports) {
|
|
40
|
+
const found = categoryData.exports.find((exp) => exp.name === name);
|
|
41
|
+
if (found) return {
|
|
42
|
+
component: found,
|
|
43
|
+
category: categoryKey,
|
|
44
|
+
level: categoryData.level ?? 0
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
function getCategories() {
|
|
50
|
+
const exportsMap = loadExportsMap();
|
|
51
|
+
const categories = [];
|
|
52
|
+
for (const [key, data] of Object.entries(exportsMap.components)) categories.push({
|
|
53
|
+
key,
|
|
54
|
+
level: data.level ?? 0,
|
|
55
|
+
description: data.description,
|
|
56
|
+
count: data.exports?.length ?? 0
|
|
57
|
+
});
|
|
58
|
+
return categories.sort((a, b) => a.level - b.level);
|
|
59
|
+
}
|
|
60
|
+
function getStatistics() {
|
|
61
|
+
const exportsMap = loadExportsMap();
|
|
62
|
+
return {
|
|
63
|
+
totalComponents: exportsMap.statistics.totalComponents,
|
|
64
|
+
byLevel: exportsMap.statistics.byLevel,
|
|
65
|
+
version: exportsMap.version
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function normalizeQuery(query) {
|
|
69
|
+
return query.toLowerCase().replace(/glass$/i, "").replace(/-/g, "").replace(/_/g, "").trim();
|
|
70
|
+
}
|
|
71
|
+
function normalizeComponentName(name) {
|
|
72
|
+
return name.toLowerCase().replace(/glass$/i, "").replace(/-/g, "").replace(/_/g, "");
|
|
73
|
+
}
|
|
74
|
+
function levenshteinDistance(a, b) {
|
|
75
|
+
const matrix = [];
|
|
76
|
+
for (let i = 0; i <= b.length; i++) matrix[i] = [i];
|
|
77
|
+
for (let j = 0; j <= a.length; j++) matrix[0][j] = j;
|
|
78
|
+
for (let i = 1; i <= b.length; i++) for (let j = 1; j <= a.length; j++) if (b.charAt(i - 1) === a.charAt(j - 1)) matrix[i][j] = matrix[i - 1][j - 1];
|
|
79
|
+
else matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
80
|
+
return matrix[b.length][a.length];
|
|
81
|
+
}
|
|
82
|
+
function calculateMatchScore(query, componentName) {
|
|
83
|
+
const normalizedQuery = normalizeQuery(query);
|
|
84
|
+
const normalizedName = normalizeComponentName(componentName);
|
|
85
|
+
if (normalizedName === normalizedQuery) return 100;
|
|
86
|
+
if (componentName.toLowerCase() === query.toLowerCase()) return 100;
|
|
87
|
+
if (normalizedName.startsWith(normalizedQuery)) return 80;
|
|
88
|
+
if (normalizedName.includes(normalizedQuery)) return 60;
|
|
89
|
+
const distance = levenshteinDistance(normalizedQuery, normalizedName);
|
|
90
|
+
if (distance <= (normalizedQuery.length <= 4 ? 2 : 3)) return Math.max(20, 50 - distance * 10);
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
function fuzzyMatch(query, components) {
|
|
94
|
+
if (!query || query.trim().length === 0) return [];
|
|
95
|
+
return components.map((comp) => ({
|
|
96
|
+
...comp,
|
|
97
|
+
score: calculateMatchScore(query, comp.name)
|
|
98
|
+
})).filter((match) => match.score > 0).sort((a, b) => {
|
|
99
|
+
if (b.score !== a.score) return b.score - a.score;
|
|
100
|
+
if (a.level !== b.level) return a.level - b.level;
|
|
101
|
+
return a.name.localeCompare(b.name);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
const COLORS = {
|
|
105
|
+
reset: "\x1B[0m",
|
|
106
|
+
bold: "\x1B[1m",
|
|
107
|
+
dim: "\x1B[2m",
|
|
108
|
+
italic: "\x1B[3m",
|
|
109
|
+
underline: "\x1B[4m",
|
|
110
|
+
black: "\x1B[30m",
|
|
111
|
+
red: "\x1B[31m",
|
|
112
|
+
green: "\x1B[32m",
|
|
113
|
+
yellow: "\x1B[33m",
|
|
114
|
+
blue: "\x1B[34m",
|
|
115
|
+
magenta: "\x1B[35m",
|
|
116
|
+
cyan: "\x1B[36m",
|
|
117
|
+
white: "\x1B[37m",
|
|
118
|
+
brightRed: "\x1B[91m",
|
|
119
|
+
brightGreen: "\x1B[92m",
|
|
120
|
+
brightYellow: "\x1B[93m",
|
|
121
|
+
brightBlue: "\x1B[94m",
|
|
122
|
+
brightMagenta: "\x1B[95m",
|
|
123
|
+
brightCyan: "\x1B[96m"
|
|
124
|
+
};
|
|
125
|
+
const CATEGORY_EMOJI = {
|
|
126
|
+
primitives: "🧱",
|
|
127
|
+
core: "⚙️",
|
|
128
|
+
atomic: "🔹",
|
|
129
|
+
specialized: "🎯",
|
|
130
|
+
composite: "🧩",
|
|
131
|
+
sections: "📄"
|
|
132
|
+
};
|
|
133
|
+
function color(text, colorCode) {
|
|
134
|
+
return `${colorCode}${text}${COLORS.reset}`;
|
|
135
|
+
}
|
|
136
|
+
function bold(text) {
|
|
137
|
+
return `${COLORS.bold}${text}${COLORS.reset}`;
|
|
138
|
+
}
|
|
139
|
+
function dim(text) {
|
|
140
|
+
return `${COLORS.dim}${text}${COLORS.reset}`;
|
|
141
|
+
}
|
|
142
|
+
function line(length = 50) {
|
|
143
|
+
return dim("─".repeat(length));
|
|
144
|
+
}
|
|
145
|
+
function success(text) {
|
|
146
|
+
return `${COLORS.green}✓${COLORS.reset} ${text}`;
|
|
147
|
+
}
|
|
148
|
+
function bullet(text, colorCode = COLORS.cyan) {
|
|
149
|
+
return ` ${colorCode}•${COLORS.reset} ${text}`;
|
|
150
|
+
}
|
|
151
|
+
function sectionHeader(title) {
|
|
152
|
+
return `\n${COLORS.bold}${title}:${COLORS.reset}`;
|
|
153
|
+
}
|
|
154
|
+
function keyValue(key, value, keyWidth = 12) {
|
|
155
|
+
const paddedKey = key.padEnd(keyWidth);
|
|
156
|
+
return `${COLORS.bold}${paddedKey}${COLORS.reset} ${value}`;
|
|
157
|
+
}
|
|
158
|
+
function generateUsageExample(comp) {
|
|
159
|
+
const name = comp.name;
|
|
160
|
+
if (comp.compoundAPI && comp.subComponents && comp.subComponents.length > 0) {
|
|
161
|
+
const subComps = comp.subComponents;
|
|
162
|
+
const contentComp = subComps.find((s) => s.includes("Content")) || subComps[1] || subComps[0];
|
|
163
|
+
return `<${name}.Root>
|
|
164
|
+
<${name}.${contentComp}>
|
|
165
|
+
{/* Content here */}
|
|
166
|
+
</${name}.${contentComp}>
|
|
167
|
+
</${name}.Root>`;
|
|
168
|
+
}
|
|
169
|
+
const props = [];
|
|
170
|
+
if (comp.variants && comp.variants.length > 0) props.push(`variant="${comp.variants[0]}"`);
|
|
171
|
+
if (comp.sizes && comp.sizes.length > 0) props.push(`size="${comp.sizes[0]}"`);
|
|
172
|
+
const propsStr = props.length > 0 ? " " + props.join(" ") : "";
|
|
173
|
+
if ([
|
|
174
|
+
"Avatar",
|
|
175
|
+
"Progress",
|
|
176
|
+
"Skeleton",
|
|
177
|
+
"Slider",
|
|
178
|
+
"Checkbox",
|
|
179
|
+
"Toggle",
|
|
180
|
+
"Input"
|
|
181
|
+
].some((type) => name.includes(type))) return `<${name}${propsStr} />`;
|
|
182
|
+
return `<${name}${propsStr}>
|
|
183
|
+
{/* Content here */}
|
|
184
|
+
</${name}>`;
|
|
185
|
+
}
|
|
186
|
+
function printComponentInfo(comp, category, level, alternativeMatches) {
|
|
187
|
+
console.log(`\n${color(bold(comp.name), COLORS.cyan)}`);
|
|
188
|
+
console.log(line(50));
|
|
189
|
+
if (alternativeMatches.length > 1) {
|
|
190
|
+
console.log(dim(`Found ${alternativeMatches.length} matches. Showing best match.`));
|
|
191
|
+
if (alternativeMatches.length <= 5) {
|
|
192
|
+
const others = alternativeMatches.slice(1).map((m) => m.name).join(", ");
|
|
193
|
+
console.log(dim(`Other matches: ${others}`));
|
|
194
|
+
}
|
|
195
|
+
console.log("");
|
|
196
|
+
}
|
|
197
|
+
console.log(sectionHeader("Description"));
|
|
198
|
+
console.log(` ${comp.description}`);
|
|
199
|
+
console.log("");
|
|
200
|
+
console.log(keyValue("Category:", category));
|
|
201
|
+
console.log(keyValue("Level:", `L${level}`));
|
|
202
|
+
console.log(keyValue("Type:", comp.type));
|
|
203
|
+
console.log(keyValue("Path:", comp.path));
|
|
204
|
+
if (comp.props) console.log(keyValue("Props:", comp.props));
|
|
205
|
+
if (comp.variants && comp.variants.length > 0) {
|
|
206
|
+
console.log(sectionHeader("Variants"));
|
|
207
|
+
comp.variants.forEach((v) => {
|
|
208
|
+
console.log(bullet(v, COLORS.green));
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
if (comp.sizes && comp.sizes.length > 0) {
|
|
212
|
+
console.log(sectionHeader("Sizes"));
|
|
213
|
+
comp.sizes.forEach((s) => {
|
|
214
|
+
console.log(bullet(s, COLORS.yellow));
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (comp.statuses && comp.statuses.length > 0) {
|
|
218
|
+
console.log(sectionHeader("Statuses"));
|
|
219
|
+
comp.statuses.forEach((s) => {
|
|
220
|
+
console.log(bullet(s, COLORS.blue));
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
console.log("");
|
|
224
|
+
if (comp.shadcnCompatible) console.log(success("shadcn/ui compatible"));
|
|
225
|
+
if (comp.compoundAPI) {
|
|
226
|
+
console.log(success("Compound component API"));
|
|
227
|
+
if (comp.subComponents && comp.subComponents.length > 0) console.log(dim(` Sub-components: ${comp.subComponents.join(", ")}`));
|
|
228
|
+
}
|
|
229
|
+
if (comp.supportsAsChild) console.log(success("Supports asChild pattern"));
|
|
230
|
+
console.log(sectionHeader("Usage Example"));
|
|
231
|
+
console.log(line(21));
|
|
232
|
+
console.log("");
|
|
233
|
+
console.log(color(`import { ${comp.name} } from 'shadcn-glass-ui';`, COLORS.cyan));
|
|
234
|
+
console.log("");
|
|
235
|
+
console.log(generateUsageExample(comp));
|
|
236
|
+
if (comp.keywords && comp.keywords.length > 0) {
|
|
237
|
+
console.log("");
|
|
238
|
+
console.log(dim(`Keywords: ${comp.keywords.join(", ")}`));
|
|
239
|
+
}
|
|
240
|
+
console.log("");
|
|
241
|
+
}
|
|
242
|
+
async function showComponentInfo(query) {
|
|
243
|
+
const matches = fuzzyMatch(query, getAllComponents());
|
|
244
|
+
if (matches.length === 0) {
|
|
245
|
+
console.log(`\n${color("No component found matching", COLORS.red)} "${query}"`);
|
|
246
|
+
console.log(dim("\nTry one of these:"));
|
|
247
|
+
console.log(dim(" npx shadcn-glass-ui list"));
|
|
248
|
+
console.log(dim(" npx shadcn-glass-ui info button"));
|
|
249
|
+
console.log(dim(" npx shadcn-glass-ui info modal"));
|
|
250
|
+
console.log("");
|
|
251
|
+
process.exit(1);
|
|
252
|
+
}
|
|
253
|
+
const bestMatch = matches[0];
|
|
254
|
+
const details = findComponentByName(bestMatch.name);
|
|
255
|
+
if (!details) {
|
|
256
|
+
console.log(`\n${color("Component details not found for", COLORS.red)} "${bestMatch.name}"`);
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
printComponentInfo(details.component, details.category, details.level, matches);
|
|
260
|
+
}
|
|
261
|
+
function printComponent(comp) {
|
|
262
|
+
const flags = [];
|
|
263
|
+
if (comp.shadcnCompatible) flags.push(color("shadcn", COLORS.green));
|
|
264
|
+
if (comp.compoundAPI) flags.push(color("compound", COLORS.yellow));
|
|
265
|
+
if (comp.supportsAsChild) flags.push(color("asChild", COLORS.magenta));
|
|
266
|
+
const flagStr = flags.length > 0 ? ` [${flags.join(", ")}]` : "";
|
|
267
|
+
console.log(` ${color("•", COLORS.cyan)} ${comp.name}${flagStr}`);
|
|
268
|
+
}
|
|
269
|
+
function printCategory(key, level, description, components) {
|
|
270
|
+
const emoji = CATEGORY_EMOJI[key] || "📦";
|
|
271
|
+
const levelStr = `L${level}`;
|
|
272
|
+
console.log(`${emoji} ${bold(key.toUpperCase())} ${dim(`(${levelStr})`)}`);
|
|
273
|
+
console.log(` ${dim(description)}`);
|
|
274
|
+
console.log("");
|
|
275
|
+
for (const comp of components) printComponent(comp);
|
|
276
|
+
console.log("");
|
|
277
|
+
}
|
|
278
|
+
async function listComponents(options = {}) {
|
|
279
|
+
const exportsMap = loadExportsMap();
|
|
280
|
+
const categories = getCategories();
|
|
281
|
+
const stats = getStatistics();
|
|
282
|
+
console.log(`\n${color(bold("shadcn-glass-ui Components"), COLORS.cyan)}`);
|
|
283
|
+
console.log(`${dim(`Version ${stats.version}`)}`);
|
|
284
|
+
console.log(line(50));
|
|
285
|
+
console.log("");
|
|
286
|
+
let totalCount = 0;
|
|
287
|
+
let filteredCount = 0;
|
|
288
|
+
const categoryFilter = options.category?.toLowerCase();
|
|
289
|
+
const levelFilter = options.level !== void 0 ? parseInt(options.level, 10) : void 0;
|
|
290
|
+
for (const cat of categories) {
|
|
291
|
+
const categoryData = exportsMap.components[cat.key];
|
|
292
|
+
if (!categoryData || !categoryData.exports || categoryData.exports.length === 0) continue;
|
|
293
|
+
if (categoryFilter && cat.key.toLowerCase() !== categoryFilter) {
|
|
294
|
+
totalCount += categoryData.exports.length;
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
if (levelFilter !== void 0 && cat.level !== levelFilter) {
|
|
298
|
+
totalCount += categoryData.exports.length;
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
printCategory(cat.key, cat.level, cat.description, categoryData.exports);
|
|
302
|
+
totalCount += categoryData.exports.length;
|
|
303
|
+
filteredCount += categoryData.exports.length;
|
|
304
|
+
}
|
|
305
|
+
console.log(line(21));
|
|
306
|
+
if (categoryFilter || levelFilter !== void 0) console.log(`${bold(`Showing: ${filteredCount}`)} ${dim(`of ${totalCount} total components`)}`);
|
|
307
|
+
else console.log(`${bold(`Total: ${totalCount} components`)}`);
|
|
308
|
+
console.log("");
|
|
309
|
+
if (!categoryFilter && levelFilter === void 0) {
|
|
310
|
+
console.log(dim("Filter by category: npx shadcn-glass-ui list --category=core"));
|
|
311
|
+
console.log(dim("Filter by level: npx shadcn-glass-ui list --level=1"));
|
|
312
|
+
}
|
|
313
|
+
console.log(dim("Get component info: npx shadcn-glass-ui info <name>"));
|
|
314
|
+
console.log("");
|
|
315
|
+
}
|
|
316
|
+
function printAvailableCategories() {
|
|
317
|
+
const categories = getCategories();
|
|
318
|
+
console.log("\nAvailable categories:");
|
|
319
|
+
for (const cat of categories) {
|
|
320
|
+
const emoji = CATEGORY_EMOJI[cat.key] || "📦";
|
|
321
|
+
console.log(` ${emoji} ${cat.key} (L${cat.level}) - ${cat.count} components`);
|
|
322
|
+
}
|
|
323
|
+
console.log("");
|
|
324
|
+
}
|
|
325
|
+
function getVersion() {
|
|
326
|
+
const __dirname$1 = (0, node_path.dirname)((0, node_url.fileURLToPath)({}.url));
|
|
327
|
+
const paths = [
|
|
328
|
+
(0, node_path.resolve)(__dirname$1, "../../package.json"),
|
|
329
|
+
(0, node_path.resolve)(__dirname$1, "../../../package.json"),
|
|
330
|
+
(0, node_path.resolve)(process.cwd(), "package.json"),
|
|
331
|
+
(0, node_path.resolve)(process.cwd(), "node_modules/shadcn-glass-ui/package.json")
|
|
332
|
+
];
|
|
333
|
+
for (const path of paths) try {
|
|
334
|
+
const pkg = JSON.parse((0, node_fs.readFileSync)(path, "utf-8"));
|
|
335
|
+
if (pkg.name === "shadcn-glass-ui") return pkg.version;
|
|
336
|
+
} catch {
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
return "unknown";
|
|
340
|
+
}
|
|
341
|
+
function printHelp() {
|
|
342
|
+
console.log(`
|
|
343
|
+
${color(bold("shadcn-glass-ui"), COLORS.cyan)} - Glassmorphism UI Component Library
|
|
344
|
+
|
|
345
|
+
${bold("Usage:")}
|
|
346
|
+
npx shadcn-glass-ui <command> [options]
|
|
347
|
+
|
|
348
|
+
${bold("Commands:")}
|
|
349
|
+
info <name> Show detailed component information
|
|
350
|
+
list List all available components
|
|
351
|
+
|
|
352
|
+
${bold("Options:")}
|
|
353
|
+
--help, -h Show this help message
|
|
354
|
+
--version, -v Show version number
|
|
355
|
+
--category Filter list by category (e.g., --category=core)
|
|
356
|
+
--level Filter list by level (e.g., --level=1)
|
|
357
|
+
|
|
358
|
+
${bold("Examples:")}
|
|
359
|
+
${dim("# Get info about a component (fuzzy search supported)")}
|
|
360
|
+
npx shadcn-glass-ui info ButtonGlass
|
|
361
|
+
npx shadcn-glass-ui info button
|
|
362
|
+
npx shadcn-glass-ui info modal
|
|
363
|
+
|
|
364
|
+
${dim("# List all components")}
|
|
365
|
+
npx shadcn-glass-ui list
|
|
366
|
+
|
|
367
|
+
${dim("# List components by category")}
|
|
368
|
+
npx shadcn-glass-ui list --category=core
|
|
369
|
+
npx shadcn-glass-ui list --category=composite
|
|
370
|
+
|
|
371
|
+
${dim("# List components by level")}
|
|
372
|
+
npx shadcn-glass-ui list --level=1
|
|
373
|
+
|
|
374
|
+
${bold("Categories:")}
|
|
375
|
+
primitives (L0) Foundation building blocks
|
|
376
|
+
core (L1) Basic interactive components
|
|
377
|
+
atomic (L2) Small specialized components
|
|
378
|
+
specialized (L3) Domain-specific components
|
|
379
|
+
composite (L4) Multi-element widgets
|
|
380
|
+
sections (L5) Full page sections
|
|
381
|
+
|
|
382
|
+
${bold("More info:")}
|
|
383
|
+
Documentation: https://yhooi2.github.io/shadcn-glass-ui-library/
|
|
384
|
+
Repository: https://github.com/Yhooi2/shadcn-glass-ui-library
|
|
385
|
+
`);
|
|
386
|
+
}
|
|
387
|
+
function parseCliArgs() {
|
|
388
|
+
const config = {
|
|
389
|
+
allowPositionals: true,
|
|
390
|
+
strict: false,
|
|
391
|
+
options: {
|
|
392
|
+
help: {
|
|
393
|
+
type: "boolean",
|
|
394
|
+
short: "h",
|
|
395
|
+
default: false
|
|
396
|
+
},
|
|
397
|
+
version: {
|
|
398
|
+
type: "boolean",
|
|
399
|
+
short: "v",
|
|
400
|
+
default: false
|
|
401
|
+
},
|
|
402
|
+
category: { type: "string" },
|
|
403
|
+
level: { type: "string" }
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
try {
|
|
407
|
+
const { values, positionals } = (0, node_util.parseArgs)(config);
|
|
408
|
+
const [command, ...args] = positionals;
|
|
409
|
+
return {
|
|
410
|
+
command,
|
|
411
|
+
args,
|
|
412
|
+
options: {
|
|
413
|
+
help: values.help,
|
|
414
|
+
version: values.version,
|
|
415
|
+
category: values.category,
|
|
416
|
+
level: values.level
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
} catch (error) {
|
|
420
|
+
if (error instanceof Error && error.message.includes("Unknown option")) {
|
|
421
|
+
console.error(`${color("Error:", COLORS.red)} ${error.message}`);
|
|
422
|
+
console.log(dim("\nRun \"npx shadcn-glass-ui --help\" for usage information."));
|
|
423
|
+
process.exit(1);
|
|
424
|
+
}
|
|
425
|
+
throw error;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
async function main() {
|
|
429
|
+
const { command, args, options } = parseCliArgs();
|
|
430
|
+
if (options.version) {
|
|
431
|
+
console.log(getVersion());
|
|
432
|
+
process.exit(0);
|
|
433
|
+
}
|
|
434
|
+
if (options.help || !command) {
|
|
435
|
+
printHelp();
|
|
436
|
+
process.exit(0);
|
|
437
|
+
}
|
|
438
|
+
switch (command.toLowerCase()) {
|
|
439
|
+
case "info":
|
|
440
|
+
if (args.length === 0) {
|
|
441
|
+
console.error(`${color("Error:", COLORS.red)} Component name required`);
|
|
442
|
+
console.log(dim("\nUsage: npx shadcn-glass-ui info <ComponentName>"));
|
|
443
|
+
console.log(dim("Example: npx shadcn-glass-ui info ButtonGlass"));
|
|
444
|
+
process.exit(1);
|
|
445
|
+
}
|
|
446
|
+
await showComponentInfo(args[0]);
|
|
447
|
+
break;
|
|
448
|
+
case "list":
|
|
449
|
+
await listComponents({
|
|
450
|
+
category: options.category,
|
|
451
|
+
level: options.level
|
|
452
|
+
});
|
|
453
|
+
break;
|
|
454
|
+
case "categories":
|
|
455
|
+
printAvailableCategories();
|
|
456
|
+
break;
|
|
457
|
+
default:
|
|
458
|
+
console.error(`${color("Error:", COLORS.red)} Unknown command "${command}"`);
|
|
459
|
+
console.log(dim("\nAvailable commands: info, list"));
|
|
460
|
+
console.log(dim("Run \"npx shadcn-glass-ui --help\" for usage information."));
|
|
461
|
+
process.exit(1);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
main().catch((error) => {
|
|
465
|
+
console.error(`${color("Error:", COLORS.red)} ${error.message}`);
|
|
466
|
+
if (process.env.DEBUG) console.error(error.stack);
|
|
467
|
+
process.exit(1);
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["cachedExportsMap: ExportsMap | null","components: Array<{\n name: string;\n path: string;\n category: string;\n level: number;\n }>","categories: Array<{\n key: string;\n level: number;\n description: string;\n count: number;\n }>","matrix: number[][]","CATEGORY_EMOJI: Record<string, string>","props: string[]","flags: string[]","config: ParseArgsConfig"],"sources":["../../src/cli/utils/load-exports.ts","../../src/cli/utils/fuzzy-search.ts","../../src/cli/utils/format.ts","../../src/cli/commands/info.ts","../../src/cli/commands/list.ts","../../src/cli/index.ts"],"sourcesContent":["/**\n * Load EXPORTS_MAP.json Utility\n *\n * Loads the machine-readable component registry from docs/EXPORTS_MAP.json.\n * Handles multiple paths for development vs published package scenarios.\n */\n\nimport { readFileSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n// ========================================\n// TYPES\n// ========================================\n\nexport interface ComponentExport {\n name: string;\n path: string;\n type: string;\n description: string;\n props?: string;\n variants?: string[];\n sizes?: string[];\n statuses?: string[];\n category?: string;\n keywords?: string[];\n shadcnCompatible?: boolean;\n compoundAPI?: boolean;\n subComponents?: string[];\n supportsAsChild?: boolean;\n contains?: string[];\n}\n\nexport interface CategoryData {\n level?: number;\n description: string;\n exports: ComponentExport[];\n}\n\nexport interface ExportsMap {\n $schema: string;\n title: string;\n description: string;\n version: string;\n library: string;\n repository: string;\n lastUpdated: string;\n components: Record<string, CategoryData>;\n utilities: {\n exports: Array<{\n name: string;\n path: string;\n type: string;\n description: string;\n signature?: string;\n }>;\n };\n theme: {\n exports: Array<{\n name: string;\n path: string;\n type: string;\n description: string;\n }>;\n };\n hooks: {\n exports: Array<{\n name: string;\n path: string;\n type: string;\n description: string;\n signature?: string;\n }>;\n };\n types: {\n exports: Array<{\n name: string;\n path: string;\n type: string;\n description: string;\n }>;\n };\n variants: {\n exports: Array<{\n name: string;\n path: string;\n type: string;\n description: string;\n }>;\n };\n statistics: {\n totalComponents: number;\n byLevel: Record<string, number>;\n };\n compatibility: {\n shadcnUI: {\n version: string;\n compatibleComponents: string[];\n };\n breakingChanges: Array<{\n version: string;\n changes: string[];\n }>;\n };\n usage: {\n mostCommon: string[];\n useCases: Record<string, string[]>;\n };\n}\n\n// ========================================\n// LOADER\n// ========================================\n\nlet cachedExportsMap: ExportsMap | null = null;\n\n/**\n * Load EXPORTS_MAP.json from various possible locations\n */\nexport function loadExportsMap(): ExportsMap {\n if (cachedExportsMap) {\n return cachedExportsMap;\n }\n\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n // Possible paths to EXPORTS_MAP.json\n // Order: development paths first, then published package paths\n const paths = [\n // Development: running from src/cli/utils/\n resolve(__dirname, '../../../docs/EXPORTS_MAP.json'),\n // Development: running from dist/cli/utils/\n resolve(__dirname, '../../../docs/EXPORTS_MAP.json'),\n // Published package: when installed in node_modules\n resolve(process.cwd(), 'node_modules/shadcn-glass-ui/docs/EXPORTS_MAP.json'),\n // Fallback: relative to cwd\n resolve(process.cwd(), 'docs/EXPORTS_MAP.json'),\n ];\n\n for (const path of paths) {\n try {\n const content = readFileSync(path, 'utf-8');\n cachedExportsMap = JSON.parse(content) as ExportsMap;\n return cachedExportsMap;\n } catch {\n // Try next path\n continue;\n }\n }\n\n throw new Error(\n 'EXPORTS_MAP.json not found. Please ensure:\\n' +\n ' - You are running from the project root, or\\n' +\n ' - The shadcn-glass-ui package is installed correctly'\n );\n}\n\n/**\n * Get all components as a flat array\n */\nexport function getAllComponents(): Array<{\n name: string;\n path: string;\n category: string;\n level: number;\n}> {\n const exportsMap = loadExportsMap();\n const components: Array<{\n name: string;\n path: string;\n category: string;\n level: number;\n }> = [];\n\n for (const [categoryKey, categoryData] of Object.entries(exportsMap.components)) {\n if (categoryData.exports) {\n for (const exp of categoryData.exports) {\n components.push({\n name: exp.name,\n path: exp.path,\n category: categoryKey,\n level: categoryData.level ?? 0,\n });\n }\n }\n }\n\n return components;\n}\n\n/**\n * Find component details by name\n */\nexport function findComponentByName(name: string): {\n component: ComponentExport;\n category: string;\n level: number;\n} | null {\n const exportsMap = loadExportsMap();\n\n for (const [categoryKey, categoryData] of Object.entries(exportsMap.components)) {\n if (categoryData.exports) {\n const found = categoryData.exports.find((exp) => exp.name === name);\n if (found) {\n return {\n component: found,\n category: categoryKey,\n level: categoryData.level ?? 0,\n };\n }\n }\n }\n\n return null;\n}\n\n/**\n * Get components by category\n */\nexport function getComponentsByCategory(category: string): ComponentExport[] {\n const exportsMap = loadExportsMap();\n const categoryData = exportsMap.components[category];\n\n if (!categoryData || !categoryData.exports) {\n return [];\n }\n\n return categoryData.exports;\n}\n\n/**\n * Get all categories with metadata\n */\nexport function getCategories(): Array<{\n key: string;\n level: number;\n description: string;\n count: number;\n}> {\n const exportsMap = loadExportsMap();\n const categories: Array<{\n key: string;\n level: number;\n description: string;\n count: number;\n }> = [];\n\n for (const [key, data] of Object.entries(exportsMap.components)) {\n categories.push({\n key,\n level: data.level ?? 0,\n description: data.description,\n count: data.exports?.length ?? 0,\n });\n }\n\n return categories.sort((a, b) => a.level - b.level);\n}\n\n/**\n * Get library statistics\n */\nexport function getStatistics(): {\n totalComponents: number;\n byLevel: Record<string, number>;\n version: string;\n} {\n const exportsMap = loadExportsMap();\n\n return {\n totalComponents: exportsMap.statistics.totalComponents,\n byLevel: exportsMap.statistics.byLevel,\n version: exportsMap.version,\n };\n}\n","/**\n * Fuzzy Search Utility\n *\n * Provides fuzzy matching for component names.\n * Supports various input formats:\n * - Exact: ButtonGlass\n * - Lowercase: buttonglass, button\n * - Kebab-case: button-glass\n * - Partial: btn, badge\n * - Typos: buton (Levenshtein distance)\n */\n\n// ========================================\n// TYPES\n// ========================================\n\nexport interface ComponentMatch {\n name: string;\n path: string;\n category: string;\n level: number;\n score: number;\n}\n\nexport interface SearchableComponent {\n name: string;\n path: string;\n category: string;\n level: number;\n}\n\n// ========================================\n// NORMALIZATION\n// ========================================\n\n/**\n * Normalize a search query for comparison\n *\n * Transforms:\n * - \"ButtonGlass\" -> \"button\"\n * - \"button-glass\" -> \"buttonglass\"\n * - \"BUTTON\" -> \"button\"\n */\nexport function normalizeQuery(query: string): string {\n return query\n .toLowerCase()\n .replace(/glass$/i, '') // Remove \"Glass\" suffix\n .replace(/-/g, '') // Remove hyphens\n .replace(/_/g, '') // Remove underscores\n .trim();\n}\n\n/**\n * Normalize component name for comparison\n */\nexport function normalizeComponentName(name: string): string {\n return name\n .toLowerCase()\n .replace(/glass$/i, '')\n .replace(/-/g, '')\n .replace(/_/g, '');\n}\n\n// ========================================\n// SCORING\n// ========================================\n\n/**\n * Calculate Levenshtein distance between two strings\n */\nexport function levenshteinDistance(a: string, b: string): number {\n const matrix: number[][] = [];\n\n // Initialize first column\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n\n // Initialize first row\n for (let j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n // Fill in the rest of the matrix\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) === a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1, // substitution\n matrix[i][j - 1] + 1, // insertion\n matrix[i - 1][j] + 1 // deletion\n );\n }\n }\n }\n\n return matrix[b.length][a.length];\n}\n\n/**\n * Calculate match score for a component\n *\n * Scoring:\n * - 100: Exact match (normalized)\n * - 80: Starts with query\n * - 60: Contains query\n * - 40-20: Small Levenshtein distance (typo tolerance)\n * - 0: No match\n */\nexport function calculateMatchScore(query: string, componentName: string): number {\n const normalizedQuery = normalizeQuery(query);\n const normalizedName = normalizeComponentName(componentName);\n\n // Exact match (normalized)\n if (normalizedName === normalizedQuery) {\n return 100;\n }\n\n // Exact match with original name (case-insensitive)\n if (componentName.toLowerCase() === query.toLowerCase()) {\n return 100;\n }\n\n // Starts with query\n if (normalizedName.startsWith(normalizedQuery)) {\n return 80;\n }\n\n // Contains query\n if (normalizedName.includes(normalizedQuery)) {\n return 60;\n }\n\n // Levenshtein distance for typo tolerance\n const distance = levenshteinDistance(normalizedQuery, normalizedName);\n\n // Allow up to 2 character differences for short queries\n // and up to 3 for longer queries\n const maxDistance = normalizedQuery.length <= 4 ? 2 : 3;\n\n if (distance <= maxDistance) {\n // Score decreases with distance: 40 for 1, 30 for 2, 20 for 3\n return Math.max(20, 50 - distance * 10);\n }\n\n return 0;\n}\n\n// ========================================\n// FUZZY MATCHING\n// ========================================\n\n/**\n * Find components matching a query with fuzzy search\n *\n * @param query - Search query (e.g., \"button\", \"ButtonGlass\", \"btn\")\n * @param components - Array of searchable components\n * @returns Sorted array of matches with scores\n */\nexport function fuzzyMatch(query: string, components: SearchableComponent[]): ComponentMatch[] {\n if (!query || query.trim().length === 0) {\n return [];\n }\n\n const matches = components\n .map((comp) => ({\n ...comp,\n score: calculateMatchScore(query, comp.name),\n }))\n .filter((match) => match.score > 0)\n .sort((a, b) => {\n // Primary sort by score (descending)\n if (b.score !== a.score) {\n return b.score - a.score;\n }\n // Secondary sort by level (ascending - core components first)\n if (a.level !== b.level) {\n return a.level - b.level;\n }\n // Tertiary sort by name (alphabetical)\n return a.name.localeCompare(b.name);\n });\n\n return matches;\n}\n\n/**\n * Find the best matching component\n *\n * @param query - Search query\n * @param components - Array of searchable components\n * @returns Best match or null\n */\nexport function findBestMatch(\n query: string,\n components: SearchableComponent[]\n): ComponentMatch | null {\n const matches = fuzzyMatch(query, components);\n return matches.length > 0 ? matches[0] : null;\n}\n\n/**\n * Check if a query has any matches\n */\nexport function hasMatch(query: string, components: SearchableComponent[]): boolean {\n return fuzzyMatch(query, components).length > 0;\n}\n","/**\n * CLI Output Formatting Utilities\n *\n * ANSI color codes and formatting helpers for CLI output.\n * Zero dependencies - uses built-in escape sequences.\n */\n\nexport const COLORS = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n italic: '\\x1b[3m',\n underline: '\\x1b[4m',\n\n // Foreground colors\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n\n // Bright foreground colors\n brightRed: '\\x1b[91m',\n brightGreen: '\\x1b[92m',\n brightYellow: '\\x1b[93m',\n brightBlue: '\\x1b[94m',\n brightMagenta: '\\x1b[95m',\n brightCyan: '\\x1b[96m',\n} as const;\n\n/**\n * Category emoji mapping\n */\nexport const CATEGORY_EMOJI: Record<string, string> = {\n primitives: '🧱',\n core: '⚙️',\n atomic: '🔹',\n specialized: '🎯',\n composite: '🧩',\n sections: '📄',\n};\n\n/**\n * Apply color to text\n */\nexport function color(text: string, colorCode: string): string {\n return `${colorCode}${text}${COLORS.reset}`;\n}\n\n/**\n * Bold text\n */\nexport function bold(text: string): string {\n return `${COLORS.bold}${text}${COLORS.reset}`;\n}\n\n/**\n * Dim text\n */\nexport function dim(text: string): string {\n return `${COLORS.dim}${text}${COLORS.reset}`;\n}\n\n/**\n * Create a horizontal line\n */\nexport function line(length: number = 50): string {\n return dim('─'.repeat(length));\n}\n\n/**\n * Success message with green checkmark\n */\nexport function success(text: string): string {\n return `${COLORS.green}✓${COLORS.reset} ${text}`;\n}\n\n/**\n * Error message with red X\n */\nexport function error(text: string): string {\n return `${COLORS.red}✗${COLORS.reset} ${text}`;\n}\n\n/**\n * Warning message with yellow triangle\n */\nexport function warning(text: string): string {\n return `${COLORS.yellow}⚠${COLORS.reset} ${text}`;\n}\n\n/**\n * Info message with blue circle\n */\nexport function info(text: string): string {\n return `${COLORS.cyan}ℹ${COLORS.reset} ${text}`;\n}\n\n/**\n * Bullet point\n */\nexport function bullet(text: string, colorCode: string = COLORS.cyan): string {\n return ` ${colorCode}•${COLORS.reset} ${text}`;\n}\n\n/**\n * Print a section header\n */\nexport function sectionHeader(title: string): string {\n return `\\n${COLORS.bold}${title}:${COLORS.reset}`;\n}\n\n/**\n * Format key-value pair\n */\nexport function keyValue(key: string, value: string, keyWidth: number = 12): string {\n const paddedKey = key.padEnd(keyWidth);\n return `${COLORS.bold}${paddedKey}${COLORS.reset} ${value}`;\n}\n","/**\n * Info Command\n *\n * Shows detailed information about a specific component.\n *\n * Usage:\n * npx shadcn-glass-ui info ButtonGlass\n * npx shadcn-glass-ui info button\n * npx shadcn-glass-ui info btn\n */\n\nimport {\n getAllComponents,\n findComponentByName,\n type ComponentExport,\n} from '../utils/load-exports.js';\nimport { fuzzyMatch, type ComponentMatch } from '../utils/fuzzy-search.js';\nimport {\n COLORS,\n bold,\n dim,\n line,\n success,\n bullet,\n sectionHeader,\n keyValue,\n color,\n} from '../utils/format.js';\n\n// ========================================\n// USAGE EXAMPLE GENERATOR\n// ========================================\n\n/**\n * Generate a usage example for a component\n */\nfunction generateUsageExample(comp: ComponentExport): string {\n const name = comp.name;\n\n // Compound component API\n if (comp.compoundAPI && comp.subComponents && comp.subComponents.length > 0) {\n const subComps = comp.subComponents;\n const contentComp = subComps.find((s) => s.includes('Content')) || subComps[1] || subComps[0];\n\n return `<${name}.Root>\n <${name}.${contentComp}>\n {/* Content here */}\n </${name}.${contentComp}>\n</${name}.Root>`;\n }\n\n // Regular component with props\n const props: string[] = [];\n\n if (comp.variants && comp.variants.length > 0) {\n props.push(`variant=\"${comp.variants[0]}\"`);\n }\n\n if (comp.sizes && comp.sizes.length > 0) {\n props.push(`size=\"${comp.sizes[0]}\"`);\n }\n\n const propsStr = props.length > 0 ? ' ' + props.join(' ') : '';\n\n // Self-closing for certain component types\n const selfClosing = [\n 'Avatar',\n 'Progress',\n 'Skeleton',\n 'Slider',\n 'Checkbox',\n 'Toggle',\n 'Input',\n ].some((type) => name.includes(type));\n\n if (selfClosing) {\n return `<${name}${propsStr} />`;\n }\n\n return `<${name}${propsStr}>\n {/* Content here */}\n</${name}>`;\n}\n\n// ========================================\n// INFO PRINTER\n// ========================================\n\n/**\n * Print detailed component information\n */\nfunction printComponentInfo(\n comp: ComponentExport,\n category: string,\n level: number,\n alternativeMatches: ComponentMatch[]\n): void {\n // Header\n console.log(`\\n${color(bold(comp.name), COLORS.cyan)}`);\n console.log(line(50));\n\n // Show alternative matches if there are multiple\n if (alternativeMatches.length > 1) {\n console.log(dim(`Found ${alternativeMatches.length} matches. Showing best match.`));\n if (alternativeMatches.length <= 5) {\n const others = alternativeMatches\n .slice(1)\n .map((m) => m.name)\n .join(', ');\n console.log(dim(`Other matches: ${others}`));\n }\n console.log('');\n }\n\n // Description\n console.log(sectionHeader('Description'));\n console.log(` ${comp.description}`);\n console.log('');\n\n // Metadata\n console.log(keyValue('Category:', category));\n console.log(keyValue('Level:', `L${level}`));\n console.log(keyValue('Type:', comp.type));\n console.log(keyValue('Path:', comp.path));\n\n if (comp.props) {\n console.log(keyValue('Props:', comp.props));\n }\n\n // Variants\n if (comp.variants && comp.variants.length > 0) {\n console.log(sectionHeader('Variants'));\n comp.variants.forEach((v) => {\n console.log(bullet(v, COLORS.green));\n });\n }\n\n // Sizes\n if (comp.sizes && comp.sizes.length > 0) {\n console.log(sectionHeader('Sizes'));\n comp.sizes.forEach((s) => {\n console.log(bullet(s, COLORS.yellow));\n });\n }\n\n // Statuses (for Avatar, etc.)\n if (comp.statuses && comp.statuses.length > 0) {\n console.log(sectionHeader('Statuses'));\n comp.statuses.forEach((s) => {\n console.log(bullet(s, COLORS.blue));\n });\n }\n\n // Features\n console.log('');\n if (comp.shadcnCompatible) {\n console.log(success('shadcn/ui compatible'));\n }\n if (comp.compoundAPI) {\n console.log(success('Compound component API'));\n if (comp.subComponents && comp.subComponents.length > 0) {\n console.log(dim(` Sub-components: ${comp.subComponents.join(', ')}`));\n }\n }\n if (comp.supportsAsChild) {\n console.log(success('Supports asChild pattern'));\n }\n\n // Usage Example\n console.log(sectionHeader('Usage Example'));\n console.log(line(21));\n console.log('');\n console.log(color(`import { ${comp.name} } from 'shadcn-glass-ui';`, COLORS.cyan));\n console.log('');\n console.log(generateUsageExample(comp));\n\n // Keywords\n if (comp.keywords && comp.keywords.length > 0) {\n console.log('');\n console.log(dim(`Keywords: ${comp.keywords.join(', ')}`));\n }\n\n console.log('');\n}\n\n// ========================================\n// MAIN COMMAND\n// ========================================\n\n/**\n * Execute the info command\n */\nexport async function showComponentInfo(query: string): Promise<void> {\n // Load all components\n const allComponents = getAllComponents();\n\n // Fuzzy search\n const matches = fuzzyMatch(query, allComponents);\n\n if (matches.length === 0) {\n console.log(`\\n${color('No component found matching', COLORS.red)} \"${query}\"`);\n console.log(dim('\\nTry one of these:'));\n console.log(dim(' npx shadcn-glass-ui list'));\n console.log(dim(' npx shadcn-glass-ui info button'));\n console.log(dim(' npx shadcn-glass-ui info modal'));\n console.log('');\n process.exit(1);\n }\n\n // Get best match details\n const bestMatch = matches[0];\n const details = findComponentByName(bestMatch.name);\n\n if (!details) {\n console.log(`\\n${color('Component details not found for', COLORS.red)} \"${bestMatch.name}\"`);\n process.exit(1);\n }\n\n // Print info\n printComponentInfo(details.component, details.category, details.level, matches);\n}\n","/**\n * List Command\n *\n * Lists all available components, optionally filtered by category.\n *\n * Usage:\n * npx shadcn-glass-ui list\n * npx shadcn-glass-ui list --category=core\n * npx shadcn-glass-ui list --level=1\n */\n\nimport {\n loadExportsMap,\n getCategories,\n getStatistics,\n type ComponentExport,\n} from '../utils/load-exports.js';\nimport { COLORS, CATEGORY_EMOJI, bold, dim, line, color } from '../utils/format.js';\n\n// ========================================\n// COMPONENT PRINTER\n// ========================================\n\n/**\n * Print a single component entry\n */\nfunction printComponent(comp: ComponentExport): void {\n const flags: string[] = [];\n\n if (comp.shadcnCompatible) {\n flags.push(color('shadcn', COLORS.green));\n }\n if (comp.compoundAPI) {\n flags.push(color('compound', COLORS.yellow));\n }\n if (comp.supportsAsChild) {\n flags.push(color('asChild', COLORS.magenta));\n }\n\n const flagStr = flags.length > 0 ? ` [${flags.join(', ')}]` : '';\n\n console.log(` ${color('•', COLORS.cyan)} ${comp.name}${flagStr}`);\n}\n\n/**\n * Print a category section\n */\nfunction printCategory(\n key: string,\n level: number,\n description: string,\n components: ComponentExport[]\n): void {\n const emoji = CATEGORY_EMOJI[key] || '📦';\n const levelStr = `L${level}`;\n\n console.log(`${emoji} ${bold(key.toUpperCase())} ${dim(`(${levelStr})`)}`);\n console.log(` ${dim(description)}`);\n console.log('');\n\n for (const comp of components) {\n printComponent(comp);\n }\n\n console.log('');\n}\n\n// ========================================\n// MAIN COMMAND\n// ========================================\n\nexport interface ListOptions {\n category?: string;\n level?: string;\n}\n\n/**\n * Execute the list command\n */\nexport async function listComponents(options: ListOptions = {}): Promise<void> {\n const exportsMap = loadExportsMap();\n const categories = getCategories();\n const stats = getStatistics();\n\n // Header\n console.log(`\\n${color(bold('shadcn-glass-ui Components'), COLORS.cyan)}`);\n console.log(`${dim(`Version ${stats.version}`)}`);\n console.log(line(50));\n console.log('');\n\n let totalCount = 0;\n let filteredCount = 0;\n\n // Filter options\n const categoryFilter = options.category?.toLowerCase();\n const levelFilter = options.level !== undefined ? parseInt(options.level, 10) : undefined;\n\n for (const cat of categories) {\n const categoryData = exportsMap.components[cat.key];\n\n if (!categoryData || !categoryData.exports || categoryData.exports.length === 0) {\n continue;\n }\n\n // Apply category filter\n if (categoryFilter && cat.key.toLowerCase() !== categoryFilter) {\n totalCount += categoryData.exports.length;\n continue;\n }\n\n // Apply level filter\n if (levelFilter !== undefined && cat.level !== levelFilter) {\n totalCount += categoryData.exports.length;\n continue;\n }\n\n printCategory(cat.key, cat.level, cat.description, categoryData.exports);\n\n totalCount += categoryData.exports.length;\n filteredCount += categoryData.exports.length;\n }\n\n // Footer\n console.log(line(21));\n\n if (categoryFilter || levelFilter !== undefined) {\n console.log(`${bold(`Showing: ${filteredCount}`)} ${dim(`of ${totalCount} total components`)}`);\n } else {\n console.log(`${bold(`Total: ${totalCount} components`)}`);\n }\n\n // Help hints\n console.log('');\n if (!categoryFilter && levelFilter === undefined) {\n console.log(dim('Filter by category: npx shadcn-glass-ui list --category=core'));\n console.log(dim('Filter by level: npx shadcn-glass-ui list --level=1'));\n }\n console.log(dim('Get component info: npx shadcn-glass-ui info <name>'));\n console.log('');\n}\n\n/**\n * Print available categories for help\n */\nexport function printAvailableCategories(): void {\n const categories = getCategories();\n\n console.log('\\nAvailable categories:');\n for (const cat of categories) {\n const emoji = CATEGORY_EMOJI[cat.key] || '📦';\n console.log(` ${emoji} ${cat.key} (L${cat.level}) - ${cat.count} components`);\n }\n console.log('');\n}\n","#!/usr/bin/env node\n/**\n * shadcn-glass-ui CLI\n *\n * Command-line interface for the shadcn-glass-ui component library.\n *\n * Commands:\n * info <name> Show detailed component information\n * list List all available components\n *\n * Usage:\n * npx shadcn-glass-ui info ButtonGlass\n * npx shadcn-glass-ui info button\n * npx shadcn-glass-ui list\n * npx shadcn-glass-ui list --category=core\n */\n\nimport { parseArgs, type ParseArgsConfig } from 'node:util';\nimport { readFileSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { showComponentInfo } from './commands/info.js';\nimport { listComponents, printAvailableCategories } from './commands/list.js';\nimport { COLORS, bold, dim, color } from './utils/format.js';\n\n// ========================================\n// VERSION\n// ========================================\n\n/**\n * Get package version\n */\nfunction getVersion(): string {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n // Try to read package.json from various locations\n const paths = [\n resolve(__dirname, '../../package.json'), // From dist/cli/\n resolve(__dirname, '../../../package.json'), // From src/cli/\n resolve(process.cwd(), 'package.json'), // From cwd\n resolve(process.cwd(), 'node_modules/shadcn-glass-ui/package.json'), // From installed\n ];\n\n for (const path of paths) {\n try {\n const pkg = JSON.parse(readFileSync(path, 'utf-8'));\n if (pkg.name === 'shadcn-glass-ui') {\n return pkg.version;\n }\n } catch {\n continue;\n }\n }\n\n return 'unknown';\n}\n\n// ========================================\n// HELP\n// ========================================\n\n/**\n * Print help message\n */\nfunction printHelp(): void {\n console.log(`\n${color(bold('shadcn-glass-ui'), COLORS.cyan)} - Glassmorphism UI Component Library\n\n${bold('Usage:')}\n npx shadcn-glass-ui <command> [options]\n\n${bold('Commands:')}\n info <name> Show detailed component information\n list List all available components\n\n${bold('Options:')}\n --help, -h Show this help message\n --version, -v Show version number\n --category Filter list by category (e.g., --category=core)\n --level Filter list by level (e.g., --level=1)\n\n${bold('Examples:')}\n ${dim('# Get info about a component (fuzzy search supported)')}\n npx shadcn-glass-ui info ButtonGlass\n npx shadcn-glass-ui info button\n npx shadcn-glass-ui info modal\n\n ${dim('# List all components')}\n npx shadcn-glass-ui list\n\n ${dim('# List components by category')}\n npx shadcn-glass-ui list --category=core\n npx shadcn-glass-ui list --category=composite\n\n ${dim('# List components by level')}\n npx shadcn-glass-ui list --level=1\n\n${bold('Categories:')}\n primitives (L0) Foundation building blocks\n core (L1) Basic interactive components\n atomic (L2) Small specialized components\n specialized (L3) Domain-specific components\n composite (L4) Multi-element widgets\n sections (L5) Full page sections\n\n${bold('More info:')}\n Documentation: https://yhooi2.github.io/shadcn-glass-ui-library/\n Repository: https://github.com/Yhooi2/shadcn-glass-ui-library\n`);\n}\n\n// ========================================\n// MAIN\n// ========================================\n\n/**\n * Parse command line arguments\n */\nfunction parseCliArgs(): {\n command: string | undefined;\n args: string[];\n options: {\n help: boolean;\n version: boolean;\n category?: string;\n level?: string;\n };\n} {\n const config: ParseArgsConfig = {\n allowPositionals: true,\n strict: false,\n options: {\n help: { type: 'boolean', short: 'h', default: false },\n version: { type: 'boolean', short: 'v', default: false },\n category: { type: 'string' },\n level: { type: 'string' },\n },\n };\n\n try {\n const { values, positionals } = parseArgs(config);\n const [command, ...args] = positionals;\n\n return {\n command,\n args,\n options: {\n help: values.help as boolean,\n version: values.version as boolean,\n category: values.category as string | undefined,\n level: values.level as string | undefined,\n },\n };\n } catch (error) {\n // Handle unknown options gracefully\n if (error instanceof Error && error.message.includes('Unknown option')) {\n console.error(`${color('Error:', COLORS.red)} ${error.message}`);\n console.log(dim('\\nRun \"npx shadcn-glass-ui --help\" for usage information.'));\n process.exit(1);\n }\n throw error;\n }\n}\n\n/**\n * Main CLI entry point\n */\nasync function main(): Promise<void> {\n const { command, args, options } = parseCliArgs();\n\n // Handle global options\n if (options.version) {\n console.log(getVersion());\n process.exit(0);\n }\n\n if (options.help || !command) {\n printHelp();\n process.exit(0);\n }\n\n // Handle commands\n switch (command.toLowerCase()) {\n case 'info': {\n if (args.length === 0) {\n console.error(`${color('Error:', COLORS.red)} Component name required`);\n console.log(dim('\\nUsage: npx shadcn-glass-ui info <ComponentName>'));\n console.log(dim('Example: npx shadcn-glass-ui info ButtonGlass'));\n process.exit(1);\n }\n await showComponentInfo(args[0]);\n break;\n }\n\n case 'list': {\n await listComponents({\n category: options.category,\n level: options.level,\n });\n break;\n }\n\n case 'categories': {\n printAvailableCategories();\n break;\n }\n\n default: {\n console.error(`${color('Error:', COLORS.red)} Unknown command \"${command}\"`);\n console.log(dim('\\nAvailable commands: info, list'));\n console.log(dim('Run \"npx shadcn-glass-ui --help\" for usage information.'));\n process.exit(1);\n }\n }\n}\n\n// Run CLI\nmain().catch((error) => {\n console.error(`${color('Error:', COLORS.red)} ${error.message}`);\n if (process.env.DEBUG) {\n console.error(error.stack);\n }\n process.exit(1);\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* shadcn-glass-ui CLI
|
|
4
|
+
*
|
|
5
|
+
* Command-line interface for the shadcn-glass-ui component library.
|
|
6
|
+
*
|
|
7
|
+
* Commands:
|
|
8
|
+
* info <name> Show detailed component information
|
|
9
|
+
* list List all available components
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* npx shadcn-glass-ui info ButtonGlass
|
|
13
|
+
* npx shadcn-glass-ui info button
|
|
14
|
+
* npx shadcn-glass-ui list
|
|
15
|
+
* npx shadcn-glass-ui list --category=core
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|