@aiready/components 0.1.31 → 0.1.32
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 +2 -2
- package/dist/charts/ForceDirectedGraph.js +49 -13
- package/dist/charts/ForceDirectedGraph.js.map +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/button.js.map +1 -1
- package/dist/components/card.js.map +1 -1
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/container.js.map +1 -1
- package/dist/components/grid.js.map +1 -1
- package/dist/components/input.d.ts +1 -2
- package/dist/components/input.js.map +1 -1
- package/dist/components/label.js +1 -8
- package/dist/components/label.js.map +1 -1
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/select.js.map +1 -1
- package/dist/components/separator.js.map +1 -1
- package/dist/components/stack.js.map +1 -1
- package/dist/components/switch.js +29 -22
- package/dist/components/switch.js.map +1 -1
- package/dist/components/textarea.d.ts +1 -2
- package/dist/components/textarea.js.map +1 -1
- package/dist/hooks/useD3.js.map +1 -1
- package/dist/hooks/useDebounce.js.map +1 -1
- package/dist/hooks/useForceSimulation.d.ts +1 -0
- package/dist/hooks/useForceSimulation.js +37 -14
- package/dist/hooks/useForceSimulation.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +337 -141
- package/dist/index.js.map +1 -1
- package/dist/utils/cn.js.map +1 -1
- package/dist/utils/colors.js.map +1 -1
- package/dist/utils/formatters.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/smoke.test.js +1 -1
- package/src/__tests__/smoke.test.ts +3 -3
- package/src/charts/ForceDirectedGraph.tsx +583 -517
- package/src/charts/GraphControls.tsx +5 -2
- package/src/charts/LinkItem.tsx +17 -5
- package/src/charts/NodeItem.tsx +17 -2
- package/src/code-block/CodeBlock.tsx +53 -16
- package/src/code-block/index.ts +1 -1
- package/src/components/badge.tsx +3 -2
- package/src/components/button.tsx +3 -2
- package/src/components/card.tsx +8 -1
- package/src/components/checkbox.tsx +6 -4
- package/src/components/container.tsx +1 -1
- package/src/components/grid.tsx +1 -1
- package/src/components/input.tsx +2 -3
- package/src/components/label.tsx +4 -7
- package/src/components/radio-group.tsx +5 -3
- package/src/components/select.tsx +5 -3
- package/src/components/separator.tsx +1 -1
- package/src/components/stack.tsx +1 -1
- package/src/components/switch.tsx +15 -7
- package/src/components/textarea.tsx +2 -3
- package/src/data-display/ScoreBar.tsx +52 -15
- package/src/data-display/index.ts +7 -1
- package/src/feedback/ErrorDisplay.tsx +17 -4
- package/src/feedback/LoadingSpinner.tsx +8 -3
- package/src/feedback/index.ts +12 -2
- package/src/hooks/useD3.ts +1 -3
- package/src/hooks/useDebounce.ts +1 -1
- package/src/hooks/useForceSimulation.ts +142 -44
- package/src/index.ts +29 -9
- package/src/navigation/Breadcrumb.tsx +17 -8
- package/src/navigation/index.ts +5 -1
- package/src/theme/ThemeProvider.tsx +11 -3
- package/src/theme/index.ts +6 -1
- package/src/utils/cn.ts +1 -1
- package/src/utils/colors.ts +1 -1
- package/src/utils/formatters.ts +1 -1
- package/src/utils/score.ts +3 -1
- package/tailwind.config.js +1 -1
package/dist/utils/cn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/cn.ts"],"names":[],"mappings":";;;;AAQO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"cn.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merges class names using clsx and tailwind-merge\n * @param inputs - Class values to merge\n * @returns Merged class names\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts"],"names":[],"mappings":";;;;AAQO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"cn.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merges class names using clsx and tailwind-merge\n * @param inputs - Class values to merge\n * @returns Merged class names\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"]}
|
package/dist/utils/colors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/colors.ts"],"names":[],"mappings":";AAKO,IAAM,cAAA,GAAiB;AAAA,EAC5B,QAAA,EAAU,SAAA;AAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA;AAAA,EACP,IAAA,EAAM;AAAA;AACR;AAGO,IAAM,YAAA,GAAe;AAAA,EAC1B,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA;AAAA;AACF;AAGO,IAAM,WAAA,GAAc;AAAA,EACzB,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM;AACR;AAKO,SAAS,eAAe,KAAA,EAAuB;AACpD,EAAA,OAAO,YAAA,CAAa,KAAA,GAAQ,YAAA,CAAa,MAAM,CAAA;AACjD;AAKO,SAAS,iBACd,QAAA,EACQ;AACR,EAAA,OAAO,eAAe,QAAQ,CAAA;AAChC;AAKO,SAAS,SAAA,CAAU,KAAa,KAAA,EAAuB;AAC5D,EAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACtC,EAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACtC,EAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACtC,EAAA,OAAO,QAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,KAAK,CAAA,CAAA,CAAA;AACxC","file":"colors.js","sourcesContent":["/**\n * Color utilities for charts and visualizations\n */\n\n// Severity colors for issue highlighting\nexport const severityColors = {\n critical: '#ef4444', // red-500\n major: '#f59e0b', // amber-500\n minor: '#eab308', // yellow-500\n info: '#60a5fa', // blue-400\n} as const;\n\n// Domain colors for clustering and categorization\nexport const domainColors = [\n '#3b82f6', // blue-500\n '#8b5cf6', // violet-500\n '#ec4899', // pink-500\n '#10b981', // green-500\n '#f59e0b', // amber-500\n '#06b6d4', // cyan-500\n '#f97316', // orange-500\n '#a855f7', // purple-500\n] as const;\n\n// Chart colors\nexport const chartColors = {\n primary: '#3b82f6',\n success: '#10b981',\n warning: '#f59e0b',\n danger: '#ef4444',\n info: '#06b6d4',\n} as const;\n\n/**\n * Get a color for a domain/category by index\n */\nexport function getDomainColor(index: number): string {\n return domainColors[index % domainColors.length];\n}\n\n/**\n * Get severity color by level\n */\nexport function getSeverityColor(\n severity: keyof typeof severityColors\n): string {\n return severityColors[severity];\n}\n\n/**\n * Convert hex color to RGBA\n */\nexport function hexToRgba(hex: string, alpha: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/colors.ts"],"names":[],"mappings":";AAKO,IAAM,cAAA,GAAiB;AAAA,EAC5B,QAAA,EAAU,SAAA;AAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA;AAAA,EACP,IAAA,EAAM;AAAA;AACR;AAGO,IAAM,YAAA,GAAe;AAAA,EAC1B,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA,SAAA;AAAA;AAAA,EACA;AAAA;AACF;AAGO,IAAM,WAAA,GAAc;AAAA,EACzB,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM;AACR;AAKO,SAAS,eAAe,KAAA,EAAuB;AACpD,EAAA,OAAO,YAAA,CAAa,KAAA,GAAQ,YAAA,CAAa,MAAM,CAAA;AACjD;AAKO,SAAS,iBACd,QAAA,EACQ;AACR,EAAA,OAAO,eAAe,QAAQ,CAAA;AAChC;AAKO,SAAS,SAAA,CAAU,KAAa,KAAA,EAAuB;AAC5D,EAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACtC,EAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACtC,EAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACtC,EAAA,OAAO,QAAQ,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,EAAK,CAAC,KAAK,KAAK,CAAA,CAAA,CAAA;AACxC","file":"colors.js","sourcesContent":["/**\n * Color utilities for charts and visualizations\n */\n\n// Severity colors for issue highlighting\nexport const severityColors = {\n critical: '#ef4444', // red-500\n major: '#f59e0b', // amber-500\n minor: '#eab308', // yellow-500\n info: '#60a5fa', // blue-400\n} as const;\n\n// Domain colors for clustering and categorization\nexport const domainColors = [\n '#3b82f6', // blue-500\n '#8b5cf6', // violet-500\n '#ec4899', // pink-500\n '#10b981', // green-500\n '#f59e0b', // amber-500\n '#06b6d4', // cyan-500\n '#f97316', // orange-500\n '#a855f7', // purple-500\n] as const;\n\n// Chart colors\nexport const chartColors = {\n primary: '#3b82f6',\n success: '#10b981',\n warning: '#f59e0b',\n danger: '#ef4444',\n info: '#06b6d4',\n} as const;\n\n/**\n * Get a color for a domain/category by index\n */\nexport function getDomainColor(index: number): string {\n return domainColors[index % domainColors.length];\n}\n\n/**\n * Get severity color by level\n */\nexport function getSeverityColor(\n severity: keyof typeof severityColors\n): string {\n return severityColors[severity];\n}\n\n/**\n * Convert hex color to RGBA\n */\nexport function hexToRgba(hex: string, alpha: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"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","file":"formatters.js","sourcesContent":["/**\n * Number formatting utilities for data visualization\n */\n\n/**\n * Format a number with commas for thousands\n * @example formatNumber(1234567) => \"1,234,567\"\n */\nexport function formatNumber(value: number): string {\n return new Intl.NumberFormat('en-US').format(value);\n}\n\n/**\n * Format a number with K/M/B abbreviations\n * @example formatCompactNumber(1234) => \"1.2K\"\n * @example formatCompactNumber(1234567) => \"1.2M\"\n */\nexport function formatCompactNumber(value: number): string {\n return new Intl.NumberFormat('en-US', {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(value);\n}\n\n/**\n * Format a percentage with optional decimal places\n * @example formatPercentage(0.1234) => \"12.3%\"\n * @example formatPercentage(0.1234, 0) => \"12%\"\n */\nexport function formatPercentage(value: number, decimals: number = 1): string {\n return `${(value * 100).toFixed(decimals)}%`;\n}\n\n/**\n * Format file size in bytes to human-readable format\n * @example formatFileSize(1024) => \"1.0 KB\"\n * @example formatFileSize(1048576) => \"1.0 MB\"\n */\nexport function formatFileSize(bytes: number): string {\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(1)} ${units[unitIndex]}`;\n}\n\n/**\n * Format a date as relative time (e.g., \"2 hours ago\")\n * @example formatRelativeTime(new Date(Date.now() - 3600000)) => \"1 hour ago\"\n */\nexport function formatRelativeTime(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n const diffMonth = Math.floor(diffDay / 30);\n const diffYear = Math.floor(diffDay / 365);\n\n if (diffYear > 0) {\n return `${diffYear} year${diffYear > 1 ? 's' : ''} ago`;\n }\n if (diffMonth > 0) {\n return `${diffMonth} month${diffMonth > 1 ? 's' : ''} ago`;\n }\n if (diffDay > 0) {\n return `${diffDay} day${diffDay > 1 ? 's' : ''} ago`;\n }\n if (diffHour > 0) {\n return `${diffHour} hour${diffHour > 1 ? 's' : ''} ago`;\n }\n if (diffMin > 0) {\n return `${diffMin} minute${diffMin > 1 ? 's' : ''} ago`;\n }\n return 'just now';\n}\n\n/**\n * Format a date in short format (e.g., \"Jan 15, 2024\")\n */\nexport function formatDate(date: Date): string {\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }).format(date);\n}\n\n/**\n * Format a date with time (e.g., \"Jan 15, 2024 at 3:45 PM\")\n */\nexport function formatDateTime(date: Date): string {\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n }).format(date);\n}\n\n/**\n * Format duration in milliseconds to human-readable format\n * @example formatDuration(3661000) => \"1h 1m 1s\"\n */\nexport function formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n}\n\n/**\n * Format a metric value with appropriate unit and precision\n * Useful for displaying various metrics in charts\n */\nexport function formatMetric(\n value: number,\n unit: 'number' | 'bytes' | 'percentage' | 'duration' = 'number'\n): string {\n switch (unit) {\n case 'bytes':\n return formatFileSize(value);\n case 'percentage':\n return formatPercentage(value);\n case 'duration':\n return formatDuration(value);\n default:\n return formatCompactNumber(value);\n }\n}\n\n/**\n * Format a range of values\n * @example formatRange(100, 200) => \"100 - 200\"\n */\nexport function formatRange(min: number, max: number): string {\n return `${formatCompactNumber(min)} - ${formatCompactNumber(max)}`;\n}\n\n/**\n * Format a number with a specific number of decimal places\n * @example formatDecimal(3.14159, 2) => \"3.14\"\n */\nexport function formatDecimal(value: number, decimals: number = 2): string {\n return value.toFixed(decimals);\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"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","file":"formatters.js","sourcesContent":["/**\n * Number formatting utilities for data visualization\n */\n\n/**\n * Format a number with commas for thousands\n * @example formatNumber(1234567) => \"1,234,567\"\n */\nexport function formatNumber(value: number): string {\n return new Intl.NumberFormat('en-US').format(value);\n}\n\n/**\n * Format a number with K/M/B abbreviations\n * @example formatCompactNumber(1234) => \"1.2K\"\n * @example formatCompactNumber(1234567) => \"1.2M\"\n */\nexport function formatCompactNumber(value: number): string {\n return new Intl.NumberFormat('en-US', {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(value);\n}\n\n/**\n * Format a percentage with optional decimal places\n * @example formatPercentage(0.1234) => \"12.3%\"\n * @example formatPercentage(0.1234, 0) => \"12%\"\n */\nexport function formatPercentage(value: number, decimals: number = 1): string {\n return `${(value * 100).toFixed(decimals)}%`;\n}\n\n/**\n * Format file size in bytes to human-readable format\n * @example formatFileSize(1024) => \"1.0 KB\"\n * @example formatFileSize(1048576) => \"1.0 MB\"\n */\nexport function formatFileSize(bytes: number): string {\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(1)} ${units[unitIndex]}`;\n}\n\n/**\n * Format a date as relative time (e.g., \"2 hours ago\")\n * @example formatRelativeTime(new Date(Date.now() - 3600000)) => \"1 hour ago\"\n */\nexport function formatRelativeTime(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n const diffMonth = Math.floor(diffDay / 30);\n const diffYear = Math.floor(diffDay / 365);\n\n if (diffYear > 0) {\n return `${diffYear} year${diffYear > 1 ? 's' : ''} ago`;\n }\n if (diffMonth > 0) {\n return `${diffMonth} month${diffMonth > 1 ? 's' : ''} ago`;\n }\n if (diffDay > 0) {\n return `${diffDay} day${diffDay > 1 ? 's' : ''} ago`;\n }\n if (diffHour > 0) {\n return `${diffHour} hour${diffHour > 1 ? 's' : ''} ago`;\n }\n if (diffMin > 0) {\n return `${diffMin} minute${diffMin > 1 ? 's' : ''} ago`;\n }\n return 'just now';\n}\n\n/**\n * Format a date in short format (e.g., \"Jan 15, 2024\")\n */\nexport function formatDate(date: Date): string {\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }).format(date);\n}\n\n/**\n * Format a date with time (e.g., \"Jan 15, 2024 at 3:45 PM\")\n */\nexport function formatDateTime(date: Date): string {\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n }).format(date);\n}\n\n/**\n * Format duration in milliseconds to human-readable format\n * @example formatDuration(3661000) => \"1h 1m 1s\"\n */\nexport function formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n}\n\n/**\n * Format a metric value with appropriate unit and precision\n * Useful for displaying various metrics in charts\n */\nexport function formatMetric(\n value: number,\n unit: 'number' | 'bytes' | 'percentage' | 'duration' = 'number'\n): string {\n switch (unit) {\n case 'bytes':\n return formatFileSize(value);\n case 'percentage':\n return formatPercentage(value);\n case 'duration':\n return formatDuration(value);\n default:\n return formatCompactNumber(value);\n }\n}\n\n/**\n * Format a range of values\n * @example formatRange(100, 200) => \"100 - 200\"\n */\nexport function formatRange(min: number, max: number): string {\n return `${formatCompactNumber(min)} - ${formatCompactNumber(max)}`;\n}\n\n/**\n * Format a number with a specific number of decimal places\n * @example formatDecimal(3.14159, 2) => \"3.14\"\n */\nexport function formatDecimal(value: number, decimals: number = 2): string {\n return value.toFixed(decimals);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiready/components",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.32",
|
|
4
4
|
"description": "Unified shared components library (UI, charts, hooks, utilities) for AIReady",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"d3": "^7.9.0",
|
|
64
64
|
"d3-force": "^3.0.0",
|
|
65
65
|
"tailwind-merge": "^3.0.0",
|
|
66
|
-
"@aiready/core": "0.9.
|
|
66
|
+
"@aiready/core": "0.9.33"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@testing-library/jest-dom": "^6.6.5",
|