@contractspec/lib.design-system 1.47.0 → 1.48.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.
Files changed (119) hide show
  1. package/dist/components/agent/AgentMonitor.d.ts +2 -2
  2. package/dist/components/agent/ApprovalQueue.d.ts +2 -2
  3. package/dist/components/atoms/ActionButtons.d.ts +7 -7
  4. package/dist/components/atoms/Button.d.ts +2 -2
  5. package/dist/components/atoms/ButtonLink.d.ts +2 -2
  6. package/dist/components/atoms/Cta.d.ts.map +1 -1
  7. package/dist/components/atoms/Cta.js +0 -2
  8. package/dist/components/atoms/Cta.js.map +1 -1
  9. package/dist/components/atoms/DataChips.d.ts +5 -5
  10. package/dist/components/atoms/EmptyState.d.ts +2 -2
  11. package/dist/components/atoms/ErrorState.d.ts +2 -2
  12. package/dist/components/atoms/Input.d.ts +2 -2
  13. package/dist/components/atoms/Link.d.ts +2 -2
  14. package/dist/components/atoms/LoaderCircular.d.ts +4 -4
  15. package/dist/components/atoms/NavBrand.d.ts +2 -2
  16. package/dist/components/atoms/Stepper.d.ts +2 -2
  17. package/dist/components/atoms/Textarea.d.ts +2 -2
  18. package/dist/components/data-view/DataViewList.d.ts +2 -2
  19. package/dist/components/data-view/DataViewTable.d.ts +2 -2
  20. package/dist/components/forms/ActionForm.d.ts +2 -2
  21. package/dist/components/forms/FormCardLayout.d.ts +2 -2
  22. package/dist/components/forms/FormDialog.d.ts +2 -2
  23. package/dist/components/forms/FormDialog.d.ts.map +1 -1
  24. package/dist/components/forms/FormLayout.d.ts +4 -4
  25. package/dist/components/forms/FormOneByOneLayout.d.ts +2 -2
  26. package/dist/components/forms/FormStepsLayout.d.ts +2 -2
  27. package/dist/components/forms/ZodForm.d.ts +2 -2
  28. package/dist/components/forms/ZodForm.d.ts.map +1 -1
  29. package/dist/components/legal/atoms/DefinitionList.d.ts +2 -2
  30. package/dist/components/legal/atoms/KeyValueList.d.ts +2 -2
  31. package/dist/components/legal/atoms/LegalCallout.d.ts +4 -4
  32. package/dist/components/legal/atoms/LegalHeading.d.ts +4 -4
  33. package/dist/components/legal/atoms/LegalList.d.ts +4 -4
  34. package/dist/components/legal/atoms/LegalSection.d.ts +4 -4
  35. package/dist/components/legal/atoms/LegalText.d.ts +4 -4
  36. package/dist/components/legal/molecules/LegalTOC.d.ts +4 -4
  37. package/dist/components/legal/molecules/LegalTOC.d.ts.map +1 -1
  38. package/dist/components/marketing/MarketingCard.d.ts +2 -2
  39. package/dist/components/marketing/MarketingCardsSection.d.ts +2 -2
  40. package/dist/components/marketing/MarketingComparisonSection.d.ts +2 -2
  41. package/dist/components/marketing/MarketingIconCard.d.ts +2 -2
  42. package/dist/components/marketing/MarketingSection.d.ts +2 -2
  43. package/dist/components/marketing/MarketingStepCard.d.ts +2 -2
  44. package/dist/components/molecules/AiLinkButton.d.ts +2 -2
  45. package/dist/components/molecules/Breadcrumbs.d.ts +2 -2
  46. package/dist/components/molecules/CodeBlock/CodeBlock.d.ts +1 -0
  47. package/dist/components/molecules/CodeBlock/CodeBlock.d.ts.map +1 -1
  48. package/dist/components/molecules/CodeBlock/CodeBlock.js +6 -2
  49. package/dist/components/molecules/CodeBlock/CodeBlock.js.map +1 -1
  50. package/dist/components/molecules/CodeBlock/types.d.ts +2 -0
  51. package/dist/components/molecules/CommandPalette.d.ts +2 -2
  52. package/dist/components/molecules/CommandSearchTrigger.d.ts +2 -2
  53. package/dist/components/molecules/CommandTabs/CommandTabs.d.ts +1 -0
  54. package/dist/components/molecules/CommandTabs/CommandTabs.d.ts.map +1 -1
  55. package/dist/components/molecules/CommandTabs/CommandTabs.js +9 -2
  56. package/dist/components/molecules/CommandTabs/CommandTabs.js.map +1 -1
  57. package/dist/components/molecules/CommandTabs/types.d.ts +6 -1
  58. package/dist/components/molecules/CommandTabs/types.d.ts.map +1 -1
  59. package/dist/components/molecules/CopyButton/CopyButton.js +2 -2
  60. package/dist/components/molecules/CopyButton/CopyButton.js.map +1 -1
  61. package/dist/components/molecules/EntityCard.d.ts +2 -2
  62. package/dist/components/molecules/FiltersToolbar.d.ts +2 -2
  63. package/dist/components/molecules/HoverPreview.d.ts +2 -2
  64. package/dist/components/molecules/InstallCommand/InstallCommand.d.ts +1 -0
  65. package/dist/components/molecules/InstallCommand/InstallCommand.d.ts.map +1 -1
  66. package/dist/components/molecules/InstallCommand/InstallCommand.js +2 -1
  67. package/dist/components/molecules/InstallCommand/InstallCommand.js.map +1 -1
  68. package/dist/components/molecules/InstallCommand/types.d.ts +7 -1
  69. package/dist/components/molecules/InstallCommand/types.d.ts.map +1 -1
  70. package/dist/components/molecules/LangSwitch.d.ts +2 -2
  71. package/dist/components/molecules/LoaderBlock.d.ts +2 -2
  72. package/dist/components/molecules/NavItemCard.js +1 -0
  73. package/dist/components/molecules/NavItemCard.js.map +1 -1
  74. package/dist/components/molecules/NavMain.d.ts +2 -2
  75. package/dist/components/molecules/NavUser.d.ts +2 -2
  76. package/dist/components/molecules/OverviewCard.d.ts +2 -2
  77. package/dist/components/molecules/SkeletonBlock/index.web.d.ts +2 -2
  78. package/dist/components/molecules/SkeletonCircle/index.web.d.ts +2 -2
  79. package/dist/components/molecules/SkeletonList/index.web.d.ts +2 -2
  80. package/dist/components/molecules/StatCard.d.ts +3 -3
  81. package/dist/components/molecules/StatusChip.d.ts +2 -2
  82. package/dist/components/molecules/hover-previews/Doc.d.ts +2 -2
  83. package/dist/components/molecules/hover-previews/Media.d.ts +2 -2
  84. package/dist/components/molecules/hover-previews/Simple.d.ts +2 -2
  85. package/dist/components/molecules/hover-previews/Stats.d.ts +2 -2
  86. package/dist/components/molecules/hover-previews/User.d.ts +2 -2
  87. package/dist/components/organisms/AcademyLayout.d.ts +2 -2
  88. package/dist/components/organisms/AppHeader.d.ts +2 -2
  89. package/dist/components/organisms/AppLayout.d.ts +2 -2
  90. package/dist/components/organisms/AppSidebar.d.ts +2 -2
  91. package/dist/components/organisms/EmptyDataList.d.ts +2 -2
  92. package/dist/components/organisms/EmptySearchResult.d.ts +2 -2
  93. package/dist/components/organisms/FAQSection.d.ts +2 -2
  94. package/dist/components/organisms/FeatureCarousel.d.ts +2 -2
  95. package/dist/components/organisms/FeaturesSection.d.ts +2 -2
  96. package/dist/components/organisms/Footer.d.ts +2 -2
  97. package/dist/components/organisms/Header.d.ts +4 -4
  98. package/dist/components/organisms/HeroResponsive.d.ts +2 -2
  99. package/dist/components/organisms/HeroSection.d.ts +2 -2
  100. package/dist/components/organisms/HeroSection.d.ts.map +1 -1
  101. package/dist/components/organisms/ListCardPage.d.ts +5 -5
  102. package/dist/components/organisms/ListGridPage.d.ts +5 -5
  103. package/dist/components/organisms/ListGridPage.d.ts.map +1 -1
  104. package/dist/components/organisms/ListPageResponsive.d.ts +2 -2
  105. package/dist/components/organisms/ListTablePage.d.ts +4 -4
  106. package/dist/components/organisms/MarketingHeader.d.ts +2 -2
  107. package/dist/components/organisms/MarketingHeaderDesktop.d.ts +2 -2
  108. package/dist/components/organisms/MarketingHeaderMobile.d.ts +2 -2
  109. package/dist/components/organisms/MarketingLayout.d.ts +2 -2
  110. package/dist/components/organisms/PageHeaderResponsive.d.ts +2 -2
  111. package/dist/components/organisms/PricingCarousel.d.ts +2 -2
  112. package/dist/components/organisms/PricingSection.d.ts +2 -2
  113. package/dist/components/organisms/TestimonialCarousel.d.ts +2 -2
  114. package/dist/components/providers/PackageManagerProvider.d.ts +2 -2
  115. package/dist/components/templates/lists/ListPageTemplate/index.web.d.ts +2 -2
  116. package/dist/renderers/form-contract.d.ts +2 -2
  117. package/dist/types/navigation.d.ts +1 -0
  118. package/dist/types/navigation.d.ts.map +1 -1
  119. package/package.json +8 -8
@@ -1,14 +1,14 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime77 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime78 from "react/jsx-runtime";
3
3
  import { VariantProps } from "class-variance-authority";
4
- import * as class_variance_authority_types16 from "class-variance-authority/types";
4
+ import * as class_variance_authority_types17 from "class-variance-authority/types";
5
5
 
6
6
  //#region src/components/legal/atoms/LegalText.d.ts
7
7
  declare const textVariants: (props?: ({
8
8
  tone?: "default" | "danger" | "muted" | null | undefined;
9
9
  size?: "base" | "sm" | "lg" | null | undefined;
10
10
  spacing?: "sm" | "md" | "lg" | "none" | null | undefined;
11
- } & class_variance_authority_types16.ClassProp) | undefined) => string;
11
+ } & class_variance_authority_types17.ClassProp) | undefined) => string;
12
12
  type LegalTextProps = React.HTMLAttributes<HTMLParagraphElement> & VariantProps<typeof textVariants> & {
13
13
  as?: 'p' | 'div' | 'span';
14
14
  };
@@ -19,7 +19,7 @@ declare function LegalText({
19
19
  spacing,
20
20
  className,
21
21
  ...props
22
- }: LegalTextProps): react_jsx_runtime77.JSX.Element;
22
+ }: LegalTextProps): react_jsx_runtime78.JSX.Element;
23
23
  //#endregion
24
24
  export { LegalText };
25
25
  //# sourceMappingURL=LegalText.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime83 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime60 from "react/jsx-runtime";
3
3
  import { VariantProps } from "class-variance-authority";
4
- import * as class_variance_authority_types20 from "class-variance-authority/types";
4
+ import * as class_variance_authority_types9 from "class-variance-authority/types";
5
5
 
6
6
  //#region src/components/legal/molecules/LegalTOC.d.ts
7
7
  interface TocItem {
@@ -11,7 +11,7 @@ interface TocItem {
11
11
  declare const tocVariants: (props?: ({
12
12
  variant?: "sidebar" | "inline" | null | undefined;
13
13
  size?: "sm" | "md" | null | undefined;
14
- } & class_variance_authority_types20.ClassProp) | undefined) => string;
14
+ } & class_variance_authority_types9.ClassProp) | undefined) => string;
15
15
  type LegalTOCProps = {
16
16
  items: TocItem[];
17
17
  activeHref?: string;
@@ -25,7 +25,7 @@ declare function LegalTOC({
25
25
  size,
26
26
  className,
27
27
  ...props
28
- }: LegalTOCProps): react_jsx_runtime83.JSX.Element;
28
+ }: LegalTOCProps): react_jsx_runtime60.JSX.Element;
29
29
  //#endregion
30
30
  export { LegalTOC, TocItem };
31
31
  //# sourceMappingURL=LegalTOC.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LegalTOC.d.ts","names":[],"sources":["../../../../src/components/legal/molecules/LegalTOC.tsx"],"sourcesContent":[],"mappings":";;;;;;UAIiB,OAAA;;SAER,KAAA,CAAM;;AAFf,cAKM,WALkB,EAEf,CAAA,KAkBA,CAlBM,EAAA,CAAA;EAGT,OAAA,CAAA,EAAA,SAYJ,GAAA,QAAA,GAAA,IAAA,GAAA,SAAA;EAEU,IAAA,CAAA,EAAA,IAAA,GAAA,IAAa,GAAA,IAAA,GAAA,SAAA;CAChB,GAHP,gCAAA,CAAA,SAGO,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;AAGe,KAJZ,aAAA,GAIY;EAApB,KAAA,EAHK,OAGL,EAAA;EACmB,UAAA,CAAA,EAAA,MAAA;EAArB,UAAM,CAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,IAAA;CAAc,GADlB,YACkB,CAAA,OADE,WACF,CAAA,GAApB,KAAA,CAAM,cAAc,CAAC,cAAD,CAAA;AAEN,iBAAA,QAAA,CAAQ;EAAA,KAAA;EAAA,UAAA;EAAA,UAAA;EAAA,OAAA;EAAA,IAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAQrB,aARqB,CAAA,EAQR,mBAAA,CAAA,GAAA,CAAA,OARQ"}
1
+ {"version":3,"file":"LegalTOC.d.ts","names":[],"sources":["../../../../src/components/legal/molecules/LegalTOC.tsx"],"sourcesContent":[],"mappings":";;;;;;UAIiB,OAAA;;SAER,KAAA,CAAM;;AAFf,cAKM,WALkB,EAEf,CAAA,KAkBA,CAlBM,EAAA,CAAA;EAGT,OAAA,CAAA,EAAA,SAYJ,GAAA,QAAA,GAAA,IAAA,GAAA,SAAA;EAEU,IAAA,CAAA,EAAA,IAAA,GAAA,IAAa,GAAA,IAAA,GAAA,SAAA;CAChB,GAHP,+BAAA,CAAA,SAGO,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;AAGe,KAJZ,aAAA,GAIY;EAApB,KAAA,EAHK,OAGL,EAAA;EACmB,UAAA,CAAA,EAAA,MAAA;EAArB,UAAM,CAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAAA,IAAA;CAAc,GADlB,YACkB,CAAA,OADE,WACF,CAAA,GAApB,KAAA,CAAM,cAAc,CAAC,cAAD,CAAA;AAEN,iBAAA,QAAA,CAAQ;EAAA,KAAA;EAAA,UAAA;EAAA,UAAA;EAAA,OAAA;EAAA,IAAA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAQrB,aARqB,CAAA,EAQR,mBAAA,CAAA,GAAA,CAAA,OARQ"}
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime34 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime35 from "react/jsx-runtime";
3
3
  import { Card, CardContent as CardContent$1, CardDescription, CardHeader as CardHeader$1, CardTitle as CardTitle$1 } from "@contractspec/lib.ui-kit-web/ui/card";
4
4
 
5
5
  //#region src/components/marketing/MarketingCard.d.ts
@@ -11,7 +11,7 @@ declare function MarketingCard({
11
11
  tone,
12
12
  className,
13
13
  ...props
14
- }: MarketingCardProps): react_jsx_runtime34.JSX.Element;
14
+ }: MarketingCardProps): react_jsx_runtime35.JSX.Element;
15
15
  //#endregion
16
16
  export { CardContent$1 as CardContent, CardDescription, CardHeader$1 as CardHeader, CardTitle$1 as CardTitle, MarketingCard, MarketingCardTone };
17
17
  //# sourceMappingURL=MarketingCard.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { MarketingSection } from "./MarketingSection.js";
2
2
  import * as React from "react";
3
- import * as react_jsx_runtime33 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime34 from "react/jsx-runtime";
4
4
  import { VariantProps } from "class-variance-authority";
5
5
  import * as class_variance_authority_types4 from "class-variance-authority/types";
6
6
 
@@ -16,7 +16,7 @@ declare function MarketingCardsSection({
16
16
  columns,
17
17
  gridClassName,
18
18
  ...sectionProps
19
- }: MarketingCardsSectionProps): react_jsx_runtime33.JSX.Element;
19
+ }: MarketingCardsSectionProps): react_jsx_runtime34.JSX.Element;
20
20
  //#endregion
21
21
  export { MarketingCardsSection };
22
22
  //# sourceMappingURL=MarketingCardsSection.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { MarketingSectionPadding, MarketingSectionTone } from "./MarketingSection.js";
2
2
  import * as React from "react";
3
- import * as react_jsx_runtime37 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime38 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/components/marketing/MarketingComparisonSection.d.ts
6
6
  interface ComparisonColumn {
@@ -24,7 +24,7 @@ declare function MarketingComparisonSection({
24
24
  right,
25
25
  tone,
26
26
  padding
27
- }: MarketingComparisonSectionProps): react_jsx_runtime37.JSX.Element;
27
+ }: MarketingComparisonSectionProps): react_jsx_runtime38.JSX.Element;
28
28
  //#endregion
29
29
  export { MarketingComparisonSection };
30
30
  //# sourceMappingURL=MarketingComparisonSection.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { MarketingCardTone } from "./MarketingCard.js";
2
2
  import * as React from "react";
3
- import * as react_jsx_runtime35 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime36 from "react/jsx-runtime";
4
4
  import { VariantProps } from "class-variance-authority";
5
5
  import * as class_variance_authority_types5 from "class-variance-authority/types";
6
6
 
@@ -32,7 +32,7 @@ declare function MarketingIconCard({
32
32
  headerAction,
33
33
  variant,
34
34
  className
35
- }: MarketingIconCardProps): react_jsx_runtime35.JSX.Element;
35
+ }: MarketingIconCardProps): react_jsx_runtime36.JSX.Element;
36
36
  //#endregion
37
37
  export { MarketingIconCard };
38
38
  //# sourceMappingURL=MarketingIconCard.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime32 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime33 from "react/jsx-runtime";
3
3
  import { VariantProps } from "class-variance-authority";
4
4
  import * as class_variance_authority_types3 from "class-variance-authority/types";
5
5
 
@@ -28,7 +28,7 @@ declare function MarketingSection({
28
28
  tone,
29
29
  padding,
30
30
  className
31
- }: MarketingSectionProps): react_jsx_runtime32.JSX.Element;
31
+ }: MarketingSectionProps): react_jsx_runtime33.JSX.Element;
32
32
  //#endregion
33
33
  export { MarketingSection, MarketingSectionPadding, MarketingSectionTone };
34
34
  //# sourceMappingURL=MarketingSection.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { MarketingCardTone } from "./MarketingCard.js";
2
2
  import * as React from "react";
3
- import * as react_jsx_runtime36 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime37 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/components/marketing/MarketingStepCard.d.ts
6
6
  interface MarketingStepCardProps {
@@ -14,7 +14,7 @@ declare function MarketingStepCard({
14
14
  title,
15
15
  description,
16
16
  tone
17
- }: MarketingStepCardProps): react_jsx_runtime36.JSX.Element;
17
+ }: MarketingStepCardProps): react_jsx_runtime37.JSX.Element;
18
18
  //#endregion
19
19
  export { MarketingStepCard };
20
20
  //# sourceMappingURL=MarketingStepCard.d.ts.map
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime70 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime71 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/molecules/AiLinkButton.d.ts
4
4
  type Provider = 'chatgpt' | 'claude';
@@ -10,7 +10,7 @@ interface AiLinkButtonProps {
10
10
  declare function AiLinkButton({
11
11
  href,
12
12
  className
13
- }: AiLinkButtonProps): react_jsx_runtime70.JSX.Element;
13
+ }: AiLinkButtonProps): react_jsx_runtime71.JSX.Element;
14
14
  //#endregion
15
15
  export { AiLinkButton };
16
16
  //# sourceMappingURL=AiLinkButton.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime44 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime45 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/molecules/Breadcrumbs.d.ts
5
5
  interface BreadcrumbItemDef {
@@ -10,7 +10,7 @@ declare function Breadcrumbs({
10
10
  items
11
11
  }: {
12
12
  items: BreadcrumbItemDef[];
13
- }): react_jsx_runtime44.JSX.Element | null;
13
+ }): react_jsx_runtime45.JSX.Element | null;
14
14
  //#endregion
15
15
  export { Breadcrumbs };
16
16
  //# sourceMappingURL=Breadcrumbs.d.ts.map
@@ -8,6 +8,7 @@ declare function CodeBlock({
8
8
  filename,
9
9
  showLineNumbers,
10
10
  showCopyButton,
11
+ onCopy,
11
12
  className,
12
13
  ...props
13
14
  }: CodeBlockProps): react_jsx_runtime115.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"CodeBlock.d.ts","names":[],"sources":["../../../../src/components/molecules/CodeBlock/CodeBlock.tsx"],"sourcesContent":[],"mappings":";;;;iBAOgB,SAAA;;;;;;;;GAQb,iBAAc,oBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"CodeBlock.d.ts","names":[],"sources":["../../../../src/components/molecules/CodeBlock/CodeBlock.tsx"],"sourcesContent":[],"mappings":";;;;iBAOgB,SAAA;;;;;;;;;GASb,iBAAc,oBAAA,CAAA,GAAA,CAAA"}
@@ -6,8 +6,11 @@ import { useEffect, useState } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
 
8
8
  //#region src/components/molecules/CodeBlock/CodeBlock.tsx
9
- function CodeBlock({ code, language = "typescript", filename, showLineNumbers = false, showCopyButton = true, className, ...props }) {
9
+ function CodeBlock({ code, language = "typescript", filename, showLineNumbers = false, showCopyButton = true, onCopy, className, ...props }) {
10
10
  const [highlightedHtml, setHighlightedHtml] = useState(null);
11
+ const handleCopy = () => {
12
+ onCopy?.();
13
+ };
11
14
  useEffect(() => {
12
15
  let mounted = true;
13
16
  async function highlight() {
@@ -37,7 +40,8 @@ function CodeBlock({ code, language = "typescript", filename, showLineNumbers =
37
40
  className: "relative",
38
41
  children: [showCopyButton && /* @__PURE__ */ jsx(CopyButton, {
39
42
  value: code,
40
- className: "absolute top-3 right-3"
43
+ className: "absolute top-3 right-3",
44
+ onCopy: handleCopy
41
45
  }), highlightedHtml ? /* @__PURE__ */ jsx("div", {
42
46
  className: cn("overflow-x-auto p-4 font-mono text-[13px] leading-6", "[&_pre]:!m-0 [&_pre]:!bg-transparent [&_pre]:!p-0", "[&_code]:!bg-transparent", showLineNumbers && "line-numbers"),
43
47
  dangerouslySetInnerHTML: { __html: highlightedHtml }
@@ -1 +1 @@
1
- {"version":3,"file":"CodeBlock.js","names":[],"sources":["../../../../src/components/molecules/CodeBlock/CodeBlock.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '../../../lib/utils';\nimport { useEffect, useState } from 'react';\nimport { CopyButton } from '../CopyButton';\nimport type { CodeBlockProps } from './types';\n\nexport function CodeBlock({\n code,\n language = 'typescript',\n filename,\n showLineNumbers = false,\n showCopyButton = true,\n className,\n ...props\n}: CodeBlockProps) {\n const [highlightedHtml, setHighlightedHtml] = useState<string | null>(null);\n\n useEffect(() => {\n let mounted = true;\n\n async function highlight() {\n try {\n const { codeToHtml } = await import('shiki');\n const html = await codeToHtml(code, {\n lang: language === 'text' ? 'plaintext' : language,\n // theme: 'github-dark-dimmed',\n theme: 'vitesse-dark',\n });\n if (mounted) {\n setHighlightedHtml(html);\n }\n } catch (err) {\n console.error('Failed to highlight code:', err);\n }\n }\n\n highlight();\n\n return () => {\n mounted = false;\n };\n }, [code, language]);\n\n return (\n <div\n className={cn(\n 'relative overflow-hidden rounded-lg border border-zinc-800 bg-zinc-950',\n className\n )}\n {...props}\n >\n {filename && (\n <div className=\"flex items-center justify-between border-b border-zinc-800 bg-zinc-900/50 px-4 py-2 text-xs text-zinc-400\">\n <span>{filename}</span>\n </div>\n )}\n <div className=\"relative\">\n {showCopyButton && (\n <CopyButton value={code} className=\"absolute top-3 right-3\" />\n )}\n {highlightedHtml ? (\n <div\n className={cn(\n 'overflow-x-auto p-4 font-mono text-[13px] leading-6',\n '[&_pre]:!m-0 [&_pre]:!bg-transparent [&_pre]:!p-0',\n '[&_code]:!bg-transparent',\n showLineNumbers && 'line-numbers'\n )}\n dangerouslySetInnerHTML={{ __html: highlightedHtml }}\n />\n ) : (\n <pre\n className={cn(\n 'overflow-x-auto p-4 font-mono text-[13px] leading-6 text-zinc-300',\n showLineNumbers && 'line-numbers'\n )}\n >\n <code>{code}</code>\n </pre>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,UAAU,EACxB,MACA,WAAW,cACX,UACA,kBAAkB,OAClB,iBAAiB,MACjB,WACA,GAAG,SACc;CACjB,MAAM,CAAC,iBAAiB,sBAAsB,SAAwB,KAAK;AAE3E,iBAAgB;EACd,IAAI,UAAU;EAEd,eAAe,YAAY;AACzB,OAAI;IACF,MAAM,EAAE,eAAe,MAAM,OAAO;IACpC,MAAM,OAAO,MAAM,WAAW,MAAM;KAClC,MAAM,aAAa,SAAS,cAAc;KAE1C,OAAO;KACR,CAAC;AACF,QAAI,QACF,oBAAmB,KAAK;YAEnB,KAAK;AACZ,YAAQ,MAAM,6BAA6B,IAAI;;;AAInD,aAAW;AAEX,eAAa;AACX,aAAU;;IAEX,CAAC,MAAM,SAAS,CAAC;AAEpB,QACE,qBAAC;EACC,WAAW,GACT,0EACA,UACD;EACD,GAAI;aAEH,YACC,oBAAC;GAAI,WAAU;aACb,oBAAC,oBAAM,WAAgB;IACnB,EAER,qBAAC;GAAI,WAAU;cACZ,kBACC,oBAAC;IAAW,OAAO;IAAM,WAAU;KAA2B,EAE/D,kBACC,oBAAC;IACC,WAAW,GACT,uDACA,qDACA,4BACA,mBAAmB,eACpB;IACD,yBAAyB,EAAE,QAAQ,iBAAiB;KACpD,GAEF,oBAAC;IACC,WAAW,GACT,qEACA,mBAAmB,eACpB;cAED,oBAAC,oBAAM,OAAY;KACf;IAEJ;GACF"}
1
+ {"version":3,"file":"CodeBlock.js","names":[],"sources":["../../../../src/components/molecules/CodeBlock/CodeBlock.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '../../../lib/utils';\nimport { useEffect, useState } from 'react';\nimport { CopyButton } from '../CopyButton';\nimport type { CodeBlockProps } from './types';\n\nexport function CodeBlock({\n code,\n language = 'typescript',\n filename,\n showLineNumbers = false,\n showCopyButton = true,\n onCopy,\n className,\n ...props\n}: CodeBlockProps) {\n const [highlightedHtml, setHighlightedHtml] = useState<string | null>(null);\n\n const handleCopy = () => {\n onCopy?.();\n };\n\n useEffect(() => {\n let mounted = true;\n\n async function highlight() {\n try {\n const { codeToHtml } = await import('shiki');\n const html = await codeToHtml(code, {\n lang: language === 'text' ? 'plaintext' : language,\n // theme: 'github-dark-dimmed',\n theme: 'vitesse-dark',\n });\n if (mounted) {\n setHighlightedHtml(html);\n }\n } catch (err) {\n console.error('Failed to highlight code:', err);\n }\n }\n\n highlight();\n\n return () => {\n mounted = false;\n };\n }, [code, language]);\n\n return (\n <div\n className={cn(\n 'relative overflow-hidden rounded-lg border border-zinc-800 bg-zinc-950',\n className\n )}\n {...props}\n >\n {filename && (\n <div className=\"flex items-center justify-between border-b border-zinc-800 bg-zinc-900/50 px-4 py-2 text-xs text-zinc-400\">\n <span>{filename}</span>\n </div>\n )}\n <div className=\"relative\">\n {showCopyButton && (\n <CopyButton\n value={code}\n className=\"absolute top-3 right-3\"\n onCopy={handleCopy}\n />\n )}\n {highlightedHtml ? (\n <div\n className={cn(\n 'overflow-x-auto p-4 font-mono text-[13px] leading-6',\n '[&_pre]:!m-0 [&_pre]:!bg-transparent [&_pre]:!p-0',\n '[&_code]:!bg-transparent',\n showLineNumbers && 'line-numbers'\n )}\n dangerouslySetInnerHTML={{ __html: highlightedHtml }}\n />\n ) : (\n <pre\n className={cn(\n 'overflow-x-auto p-4 font-mono text-[13px] leading-6 text-zinc-300',\n showLineNumbers && 'line-numbers'\n )}\n >\n <code>{code}</code>\n </pre>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,UAAU,EACxB,MACA,WAAW,cACX,UACA,kBAAkB,OAClB,iBAAiB,MACjB,QACA,WACA,GAAG,SACc;CACjB,MAAM,CAAC,iBAAiB,sBAAsB,SAAwB,KAAK;CAE3E,MAAM,mBAAmB;AACvB,YAAU;;AAGZ,iBAAgB;EACd,IAAI,UAAU;EAEd,eAAe,YAAY;AACzB,OAAI;IACF,MAAM,EAAE,eAAe,MAAM,OAAO;IACpC,MAAM,OAAO,MAAM,WAAW,MAAM;KAClC,MAAM,aAAa,SAAS,cAAc;KAE1C,OAAO;KACR,CAAC;AACF,QAAI,QACF,oBAAmB,KAAK;YAEnB,KAAK;AACZ,YAAQ,MAAM,6BAA6B,IAAI;;;AAInD,aAAW;AAEX,eAAa;AACX,aAAU;;IAEX,CAAC,MAAM,SAAS,CAAC;AAEpB,QACE,qBAAC;EACC,WAAW,GACT,0EACA,UACD;EACD,GAAI;aAEH,YACC,oBAAC;GAAI,WAAU;aACb,oBAAC,oBAAM,WAAgB;IACnB,EAER,qBAAC;GAAI,WAAU;cACZ,kBACC,oBAAC;IACC,OAAO;IACP,WAAU;IACV,QAAQ;KACR,EAEH,kBACC,oBAAC;IACC,WAAW,GACT,uDACA,qDACA,4BACA,mBAAmB,eACpB;IACD,yBAAyB,EAAE,QAAQ,iBAAiB;KACpD,GAEF,oBAAC;IACC,WAAW,GACT,qEACA,mBAAmB,eACpB;cAED,oBAAC,oBAAM,OAAY;KACf;IAEJ;GACF"}
@@ -13,6 +13,8 @@ interface CodeBlockProps extends HTMLAttributes<HTMLDivElement> {
13
13
  showLineNumbers?: boolean;
14
14
  /** Whether to show the copy button */
15
15
  showCopyButton?: boolean;
16
+ /** Optional callback when copy succeeds */
17
+ onCopy?: () => void;
16
18
  }
17
19
  //#endregion
18
20
  export { CodeBlockProps, CodeLanguage };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime41 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime42 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/molecules/CommandPalette.d.ts
4
4
  interface CommandPaletteProps {
@@ -21,7 +21,7 @@ declare function CommandPalette({
21
21
  onOpenChange,
22
22
  groups,
23
23
  placeholder
24
- }: CommandPaletteProps): react_jsx_runtime41.JSX.Element;
24
+ }: CommandPaletteProps): react_jsx_runtime42.JSX.Element;
25
25
  //#endregion
26
26
  export { CommandPalette };
27
27
  //# sourceMappingURL=CommandPalette.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { CommandPalette } from "./CommandPalette.js";
2
2
  import * as React from "react";
3
- import * as react_jsx_runtime45 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime46 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/components/molecules/CommandSearchTrigger.d.ts
6
6
  declare function CommandSearchTrigger({
@@ -13,7 +13,7 @@ declare function CommandSearchTrigger({
13
13
  className?: string;
14
14
  placeholder?: string;
15
15
  compact?: boolean;
16
- }): react_jsx_runtime45.JSX.Element;
16
+ }): react_jsx_runtime46.JSX.Element;
17
17
  //#endregion
18
18
  export { CommandSearchTrigger };
19
19
  //# sourceMappingURL=CommandSearchTrigger.d.ts.map
@@ -6,6 +6,7 @@ declare function CommandTabs({
6
6
  commands,
7
7
  initialPreference,
8
8
  className,
9
+ onCopy,
9
10
  ...props
10
11
  }: CommandTabsProps): react_jsx_runtime117.JSX.Element | null;
11
12
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"CommandTabs.d.ts","names":[],"sources":["../../../../src/components/molecules/CommandTabs/CommandTabs.tsx"],"sourcesContent":[],"mappings":";;;;iBAUgB,WAAA;;;;;GAKb,mBAAgB,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"CommandTabs.d.ts","names":[],"sources":["../../../../src/components/molecules/CommandTabs/CommandTabs.tsx"],"sourcesContent":[],"mappings":";;;;iBAUgB,WAAA;;;;;;GAMb,mBAAgB,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -8,7 +8,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
8
8
 
9
9
  //#region src/components/molecules/CommandTabs/CommandTabs.tsx
10
10
  const STORAGE_KEY = "package-manager-preference";
11
- function CommandTabs({ commands, initialPreference = "bun", className, ...props }) {
11
+ function CommandTabs({ commands, initialPreference = "bun", className, onCopy, ...props }) {
12
12
  const context = usePackageManager();
13
13
  const [localSelected, setLocalSelected] = useState(() => {
14
14
  return initialPreference;
@@ -34,6 +34,12 @@ function CommandTabs({ commands, initialPreference = "bun", className, ...props
34
34
  if (!effectiveSelected) return null;
35
35
  const currentCommand = commands[effectiveSelected];
36
36
  if (!currentCommand) return null;
37
+ const handleCopy = () => {
38
+ onCopy?.({
39
+ command: currentCommand,
40
+ packageManager: effectiveSelected
41
+ });
42
+ };
37
43
  return /* @__PURE__ */ jsxs("div", {
38
44
  className: cn("relative rounded-lg border border-zinc-800 bg-zinc-950", className),
39
45
  ...props,
@@ -54,7 +60,8 @@ function CommandTabs({ commands, initialPreference = "bun", className, ...props
54
60
  role: "tabpanel",
55
61
  children: [/* @__PURE__ */ jsx(CopyButton, {
56
62
  value: currentCommand,
57
- className: "absolute top-3 right-3"
63
+ className: "absolute top-3 right-3",
64
+ onCopy: handleCopy
58
65
  }), /* @__PURE__ */ jsx("pre", {
59
66
  className: "overflow-x-auto pr-10 font-mono text-[13px] leading-6 text-white",
60
67
  children: /* @__PURE__ */ jsx("code", { children: currentCommand })
@@ -1 +1 @@
1
- {"version":3,"file":"CommandTabs.js","names":[],"sources":["../../../../src/components/molecules/CommandTabs/CommandTabs.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '../../../lib/utils';\nimport { useEffect, useState } from 'react';\nimport { CopyButton } from '../CopyButton';\nimport { usePackageManager } from '../../providers/PackageManagerProvider';\nimport type { CommandTabsProps, PackageManager } from './types';\n\nconst STORAGE_KEY = 'package-manager-preference';\n\nexport function CommandTabs({\n commands,\n initialPreference = 'bun',\n className,\n ...props\n}: CommandTabsProps) {\n const context = usePackageManager();\n\n const [localSelected, setLocalSelected] = useState<PackageManager>(() => {\n return initialPreference;\n });\n\n // Use context if available, otherwise use local state\n const selected = context?.preference ?? localSelected;\n const setSelected = context?.setPreference ?? setLocalSelected;\n\n // Hydrate preference from localStorage (only if not using context)\n useEffect(() => {\n if (context) return; // Context handles its own persistence\n\n try {\n const saved = localStorage.getItem(STORAGE_KEY) as PackageManager | null;\n if (saved && commands[saved]) {\n setLocalSelected(saved);\n }\n } catch {\n // localStorage not available\n }\n }, [commands, context]);\n\n const handleSelect = (pm: PackageManager) => {\n setSelected(pm);\n\n // Only persist locally if not using context\n if (!context) {\n try {\n localStorage.setItem(STORAGE_KEY, pm);\n } catch {\n // localStorage not available\n }\n }\n };\n\n // Get available package managers from commands\n const packageManagers = Object.keys(commands) as PackageManager[];\n\n // Early return if no commands available\n if (packageManagers.length === 0) return null;\n\n // Use selected if available, otherwise fallback to first available\n const effectiveSelected = commands[selected] ? selected : packageManagers[0];\n if (!effectiveSelected) return null;\n const currentCommand = commands[effectiveSelected];\n if (!currentCommand) return null;\n\n return (\n <div\n className={cn(\n 'relative rounded-lg border border-zinc-800 bg-zinc-950',\n className\n )}\n {...props}\n >\n <div\n className=\"flex items-center border-b border-zinc-800 bg-zinc-900/50 px-2 pt-2\"\n role=\"tablist\"\n aria-label=\"Package manager selection\"\n >\n {packageManagers.map((pm) => (\n <button\n key={pm}\n type=\"button\"\n role=\"tab\"\n aria-selected={effectiveSelected === pm}\n onClick={() => handleSelect(pm)}\n className={cn(\n 'rounded-t-md border-t border-r border-l border-transparent px-4 py-2 text-xs font-medium text-zinc-400',\n 'transition-colors hover:text-zinc-100',\n 'focus:ring-2 focus:ring-zinc-600 focus:ring-offset-1 focus:ring-offset-zinc-900 focus:outline-none',\n effectiveSelected === pm &&\n 'border-zinc-800 bg-zinc-950 text-zinc-100'\n )}\n >\n {pm}\n </button>\n ))}\n </div>\n <div className=\"relative p-4\" role=\"tabpanel\">\n <CopyButton value={currentCommand} className=\"absolute top-3 right-3\" />\n <pre className=\"overflow-x-auto pr-10 font-mono text-[13px] leading-6 text-white\">\n <code>{currentCommand}</code>\n </pre>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAQA,MAAM,cAAc;AAEpB,SAAgB,YAAY,EAC1B,UACA,oBAAoB,OACpB,WACA,GAAG,SACgB;CACnB,MAAM,UAAU,mBAAmB;CAEnC,MAAM,CAAC,eAAe,oBAAoB,eAA+B;AACvE,SAAO;GACP;CAGF,MAAM,WAAW,SAAS,cAAc;CACxC,MAAM,cAAc,SAAS,iBAAiB;AAG9C,iBAAgB;AACd,MAAI,QAAS;AAEb,MAAI;GACF,MAAM,QAAQ,aAAa,QAAQ,YAAY;AAC/C,OAAI,SAAS,SAAS,OACpB,kBAAiB,MAAM;UAEnB;IAGP,CAAC,UAAU,QAAQ,CAAC;CAEvB,MAAM,gBAAgB,OAAuB;AAC3C,cAAY,GAAG;AAGf,MAAI,CAAC,QACH,KAAI;AACF,gBAAa,QAAQ,aAAa,GAAG;UAC/B;;CAOZ,MAAM,kBAAkB,OAAO,KAAK,SAAS;AAG7C,KAAI,gBAAgB,WAAW,EAAG,QAAO;CAGzC,MAAM,oBAAoB,SAAS,YAAY,WAAW,gBAAgB;AAC1E,KAAI,CAAC,kBAAmB,QAAO;CAC/B,MAAM,iBAAiB,SAAS;AAChC,KAAI,CAAC,eAAgB,QAAO;AAE5B,QACE,qBAAC;EACC,WAAW,GACT,0DACA,UACD;EACD,GAAI;aAEJ,oBAAC;GACC,WAAU;GACV,MAAK;GACL,cAAW;aAEV,gBAAgB,KAAK,OACpB,oBAAC;IAEC,MAAK;IACL,MAAK;IACL,iBAAe,sBAAsB;IACrC,eAAe,aAAa,GAAG;IAC/B,WAAW,GACT,0GACA,yCACA,sGACA,sBAAsB,MACpB,4CACH;cAEA;MAbI,GAcE,CACT;IACE,EACN,qBAAC;GAAI,WAAU;GAAe,MAAK;cACjC,oBAAC;IAAW,OAAO;IAAgB,WAAU;KAA2B,EACxE,oBAAC;IAAI,WAAU;cACb,oBAAC,oBAAM,iBAAsB;KACzB;IACF;GACF"}
1
+ {"version":3,"file":"CommandTabs.js","names":[],"sources":["../../../../src/components/molecules/CommandTabs/CommandTabs.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '../../../lib/utils';\nimport { useEffect, useState } from 'react';\nimport { CopyButton } from '../CopyButton';\nimport { usePackageManager } from '../../providers/PackageManagerProvider';\nimport type { CommandTabsProps, PackageManager } from './types';\n\nconst STORAGE_KEY = 'package-manager-preference';\n\nexport function CommandTabs({\n commands,\n initialPreference = 'bun',\n className,\n onCopy,\n ...props\n}: CommandTabsProps) {\n const context = usePackageManager();\n\n const [localSelected, setLocalSelected] = useState<PackageManager>(() => {\n return initialPreference;\n });\n\n // Use context if available, otherwise use local state\n const selected = context?.preference ?? localSelected;\n const setSelected = context?.setPreference ?? setLocalSelected;\n\n // Hydrate preference from localStorage (only if not using context)\n useEffect(() => {\n if (context) return; // Context handles its own persistence\n\n try {\n const saved = localStorage.getItem(STORAGE_KEY) as PackageManager | null;\n if (saved && commands[saved]) {\n setLocalSelected(saved);\n }\n } catch {\n // localStorage not available\n }\n }, [commands, context]);\n\n const handleSelect = (pm: PackageManager) => {\n setSelected(pm);\n\n // Only persist locally if not using context\n if (!context) {\n try {\n localStorage.setItem(STORAGE_KEY, pm);\n } catch {\n // localStorage not available\n }\n }\n };\n\n // Get available package managers from commands\n const packageManagers = Object.keys(commands) as PackageManager[];\n\n // Early return if no commands available\n if (packageManagers.length === 0) return null;\n\n // Use selected if available, otherwise fallback to first available\n const effectiveSelected = commands[selected] ? selected : packageManagers[0];\n if (!effectiveSelected) return null;\n const currentCommand = commands[effectiveSelected];\n if (!currentCommand) return null;\n\n const handleCopy = () => {\n onCopy?.({\n command: currentCommand,\n packageManager: effectiveSelected,\n });\n };\n\n return (\n <div\n className={cn(\n 'relative rounded-lg border border-zinc-800 bg-zinc-950',\n className\n )}\n {...props}\n >\n <div\n className=\"flex items-center border-b border-zinc-800 bg-zinc-900/50 px-2 pt-2\"\n role=\"tablist\"\n aria-label=\"Package manager selection\"\n >\n {packageManagers.map((pm) => (\n <button\n key={pm}\n type=\"button\"\n role=\"tab\"\n aria-selected={effectiveSelected === pm}\n onClick={() => handleSelect(pm)}\n className={cn(\n 'rounded-t-md border-t border-r border-l border-transparent px-4 py-2 text-xs font-medium text-zinc-400',\n 'transition-colors hover:text-zinc-100',\n 'focus:ring-2 focus:ring-zinc-600 focus:ring-offset-1 focus:ring-offset-zinc-900 focus:outline-none',\n effectiveSelected === pm &&\n 'border-zinc-800 bg-zinc-950 text-zinc-100'\n )}\n >\n {pm}\n </button>\n ))}\n </div>\n <div className=\"relative p-4\" role=\"tabpanel\">\n <CopyButton\n value={currentCommand}\n className=\"absolute top-3 right-3\"\n onCopy={handleCopy}\n />\n <pre className=\"overflow-x-auto pr-10 font-mono text-[13px] leading-6 text-white\">\n <code>{currentCommand}</code>\n </pre>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAQA,MAAM,cAAc;AAEpB,SAAgB,YAAY,EAC1B,UACA,oBAAoB,OACpB,WACA,QACA,GAAG,SACgB;CACnB,MAAM,UAAU,mBAAmB;CAEnC,MAAM,CAAC,eAAe,oBAAoB,eAA+B;AACvE,SAAO;GACP;CAGF,MAAM,WAAW,SAAS,cAAc;CACxC,MAAM,cAAc,SAAS,iBAAiB;AAG9C,iBAAgB;AACd,MAAI,QAAS;AAEb,MAAI;GACF,MAAM,QAAQ,aAAa,QAAQ,YAAY;AAC/C,OAAI,SAAS,SAAS,OACpB,kBAAiB,MAAM;UAEnB;IAGP,CAAC,UAAU,QAAQ,CAAC;CAEvB,MAAM,gBAAgB,OAAuB;AAC3C,cAAY,GAAG;AAGf,MAAI,CAAC,QACH,KAAI;AACF,gBAAa,QAAQ,aAAa,GAAG;UAC/B;;CAOZ,MAAM,kBAAkB,OAAO,KAAK,SAAS;AAG7C,KAAI,gBAAgB,WAAW,EAAG,QAAO;CAGzC,MAAM,oBAAoB,SAAS,YAAY,WAAW,gBAAgB;AAC1E,KAAI,CAAC,kBAAmB,QAAO;CAC/B,MAAM,iBAAiB,SAAS;AAChC,KAAI,CAAC,eAAgB,QAAO;CAE5B,MAAM,mBAAmB;AACvB,WAAS;GACP,SAAS;GACT,gBAAgB;GACjB,CAAC;;AAGJ,QACE,qBAAC;EACC,WAAW,GACT,0DACA,UACD;EACD,GAAI;aAEJ,oBAAC;GACC,WAAU;GACV,MAAK;GACL,cAAW;aAEV,gBAAgB,KAAK,OACpB,oBAAC;IAEC,MAAK;IACL,MAAK;IACL,iBAAe,sBAAsB;IACrC,eAAe,aAAa,GAAG;IAC/B,WAAW,GACT,0GACA,yCACA,sGACA,sBAAsB,MACpB,4CACH;cAEA;MAbI,GAcE,CACT;IACE,EACN,qBAAC;GAAI,WAAU;GAAe,MAAK;cACjC,oBAAC;IACC,OAAO;IACP,WAAU;IACV,QAAQ;KACR,EACF,oBAAC;IAAI,WAAU;cACb,oBAAC,oBAAM,iBAAsB;KACzB;IACF;GACF"}
@@ -2,11 +2,16 @@ import { HTMLAttributes } from "react";
2
2
 
3
3
  //#region src/components/molecules/CommandTabs/types.d.ts
4
4
  type PackageManager = 'bun' | 'npm' | 'yarn' | 'pnpm';
5
- interface CommandTabsProps extends HTMLAttributes<HTMLDivElement> {
5
+ interface CommandTabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onCopy'> {
6
6
  /** Commands for each package manager */
7
7
  commands: Partial<Record<PackageManager, string>>;
8
8
  /** Initial package manager preference (overridden by context if available) */
9
9
  initialPreference?: PackageManager;
10
+ /** Optional callback when copy succeeds */
11
+ onCopy?: (data: {
12
+ command: string;
13
+ packageManager: PackageManager;
14
+ }) => void;
10
15
  }
11
16
  interface PackageManagerContextValue {
12
17
  /** Current package manager preference */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/components/molecules/CommandTabs/types.ts"],"sourcesContent":[],"mappings":";;;KAEY,cAAA;UAEK,gBAAA,SAAyB,eAAe;EAF7C;EAEK,QAAA,EAEL,OAFK,CAEG,MAFc,CAEP,cAFO,EAAA,MAAA,CAAA,CAAA;EAAuB;EAE9B,iBAAA,CAAA,EAEL,cAFK;;AAAf,UAKK,0BAAA,CALL;EAEU;EAJoB,UAAA,EAS5B,cAT4B;EAAc;EAOvC,aAAA,EAAA,CAAA,EAAA,EAIK,cAJqB,EAAA,GAAA,IAE7B"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/components/molecules/CommandTabs/types.ts"],"sourcesContent":[],"mappings":";;;KAEY,cAAA;UAEK,gBAAA,SAAyB,KACxC,eAAe;EAHL;EAEK,QAAA,EAKL,OALK,CAKG,MALc,CAKP,cALO,EAAA,MAAA,CAAA,CAAA;EACjB;EAAf,iBAAA,CAAA,EAMoB,cANpB;EAIyB;EAAP,MAAA,CAAA,EAAA,CAAA,IAAA,EAAA;IAAR,OAAA,EAAA,MAAA;IAEU,cAAA,EAE+B,cAF/B;EAE+B,CAAA,EAAA,GAAA,IAAA;;AATP,UAY7B,0BAAA,CAZ6B;EAY7B;cAEH;;sBAEQ"}
@@ -20,8 +20,8 @@ function CopyButton({ value, onCopy, className, ...props }) {
20
20
  await navigator.clipboard.writeText(value);
21
21
  setHasCopied(true);
22
22
  onCopy?.();
23
- } catch (err) {
24
- console.error("Failed to copy to clipboard:", err);
23
+ } catch {
24
+ return;
25
25
  }
26
26
  }, [value, onCopy]);
27
27
  return /* @__PURE__ */ jsxs("button", {
@@ -1 +1 @@
1
- {"version":3,"file":"CopyButton.js","names":[],"sources":["../../../../src/components/molecules/CopyButton/CopyButton.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '../../../lib/utils';\nimport { Check, Copy } from 'lucide-react';\nimport { useCallback, useEffect, useState } from 'react';\nimport type { CopyButtonProps } from './types';\n\nexport function CopyButton({\n value,\n onCopy,\n className,\n ...props\n}: CopyButtonProps) {\n const [hasCopied, setHasCopied] = useState(false);\n\n useEffect(() => {\n if (!hasCopied) return;\n const timeout = setTimeout(() => {\n setHasCopied(false);\n }, 2000);\n return () => clearTimeout(timeout);\n }, [hasCopied]);\n\n const copyToClipboard = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n setHasCopied(true);\n onCopy?.();\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }, [value, onCopy]);\n\n return (\n <button\n type=\"button\"\n className={cn(\n 'relative z-10 inline-flex h-6 w-6 items-center justify-center rounded-md',\n 'border border-zinc-700 bg-zinc-800 text-zinc-400',\n 'transition-all hover:bg-zinc-700 hover:text-zinc-100',\n 'focus:ring-2 focus:ring-zinc-600 focus:ring-offset-2 focus:ring-offset-zinc-900 focus:outline-none',\n className\n )}\n onClick={copyToClipboard}\n aria-label={hasCopied ? 'Copied' : 'Copy to clipboard'}\n {...props}\n >\n <span className=\"sr-only\">{hasCopied ? 'Copied' : 'Copy'}</span>\n {hasCopied ? <Check className=\"h-3 w-3\" /> : <Copy className=\"h-3 w-3\" />}\n </button>\n );\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,WAAW,EACzB,OACA,QACA,WACA,GAAG,SACe;CAClB,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;AAEjD,iBAAgB;AACd,MAAI,CAAC,UAAW;EAChB,MAAM,UAAU,iBAAiB;AAC/B,gBAAa,MAAM;KAClB,IAAK;AACR,eAAa,aAAa,QAAQ;IACjC,CAAC,UAAU,CAAC;CAEf,MAAM,kBAAkB,YAAY,YAAY;AAC9C,MAAI;AACF,SAAM,UAAU,UAAU,UAAU,MAAM;AAC1C,gBAAa,KAAK;AAClB,aAAU;WACH,KAAK;AACZ,WAAQ,MAAM,gCAAgC,IAAI;;IAEnD,CAAC,OAAO,OAAO,CAAC;AAEnB,QACE,qBAAC;EACC,MAAK;EACL,WAAW,GACT,4EACA,oDACA,wDACA,sGACA,UACD;EACD,SAAS;EACT,cAAY,YAAY,WAAW;EACnC,GAAI;aAEJ,oBAAC;GAAK,WAAU;aAAW,YAAY,WAAW;IAAc,EAC/D,YAAY,oBAAC,SAAM,WAAU,YAAY,GAAG,oBAAC,QAAK,WAAU,YAAY;GAClE"}
1
+ {"version":3,"file":"CopyButton.js","names":[],"sources":["../../../../src/components/molecules/CopyButton/CopyButton.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '../../../lib/utils';\nimport { Check, Copy } from 'lucide-react';\nimport { useCallback, useEffect, useState } from 'react';\nimport type { CopyButtonProps } from './types';\n\nexport function CopyButton({\n value,\n onCopy,\n className,\n ...props\n}: CopyButtonProps) {\n const [hasCopied, setHasCopied] = useState(false);\n\n useEffect(() => {\n if (!hasCopied) return;\n const timeout = setTimeout(() => {\n setHasCopied(false);\n }, 2000);\n return () => clearTimeout(timeout);\n }, [hasCopied]);\n\n const copyToClipboard = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n setHasCopied(true);\n onCopy?.();\n } catch {\n return;\n }\n }, [value, onCopy]);\n\n return (\n <button\n type=\"button\"\n className={cn(\n 'relative z-10 inline-flex h-6 w-6 items-center justify-center rounded-md',\n 'border border-zinc-700 bg-zinc-800 text-zinc-400',\n 'transition-all hover:bg-zinc-700 hover:text-zinc-100',\n 'focus:ring-2 focus:ring-zinc-600 focus:ring-offset-2 focus:ring-offset-zinc-900 focus:outline-none',\n className\n )}\n onClick={copyToClipboard}\n aria-label={hasCopied ? 'Copied' : 'Copy to clipboard'}\n {...props}\n >\n <span className=\"sr-only\">{hasCopied ? 'Copied' : 'Copy'}</span>\n {hasCopied ? <Check className=\"h-3 w-3\" /> : <Copy className=\"h-3 w-3\" />}\n </button>\n );\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,WAAW,EACzB,OACA,QACA,WACA,GAAG,SACe;CAClB,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;AAEjD,iBAAgB;AACd,MAAI,CAAC,UAAW;EAChB,MAAM,UAAU,iBAAiB;AAC/B,gBAAa,MAAM;KAClB,IAAK;AACR,eAAa,aAAa,QAAQ;IACjC,CAAC,UAAU,CAAC;CAEf,MAAM,kBAAkB,YAAY,YAAY;AAC9C,MAAI;AACF,SAAM,UAAU,UAAU,UAAU,MAAM;AAC1C,gBAAa,KAAK;AAClB,aAAU;UACJ;AACN;;IAED,CAAC,OAAO,OAAO,CAAC;AAEnB,QACE,qBAAC;EACC,MAAK;EACL,WAAW,GACT,4EACA,oDACA,wDACA,sGACA,UACD;EACD,SAAS;EACT,cAAY,YAAY,WAAW;EACnC,GAAI;aAEJ,oBAAC;GAAK,WAAU;aAAW,YAAY,WAAW;IAAc,EAC/D,YAAY,oBAAC,SAAM,WAAU,YAAY,GAAG,oBAAC,QAAK,WAAU,YAAY;GAClE"}
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime47 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime48 from "react/jsx-runtime";
3
3
  import { VariantProps } from "class-variance-authority";
4
4
  import { Card } from "@contractspec/lib.ui-kit-web/ui/card";
5
5
  import * as class_variance_authority_types7 from "class-variance-authority/types";
@@ -32,7 +32,7 @@ declare function EntityCard({
32
32
  href,
33
33
  preview,
34
34
  ...cardProps
35
- }: EntityCardProps): react_jsx_runtime47.JSX.Element;
35
+ }: EntityCardProps): react_jsx_runtime48.JSX.Element;
36
36
  //#endregion
37
37
  export { EntityCard };
38
38
  //# sourceMappingURL=EntityCard.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime69 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime70 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/molecules/FiltersToolbar.d.ts
5
5
  interface ActiveFilterChip {
@@ -30,7 +30,7 @@ declare function FiltersToolbar({
30
30
  debounceMs,
31
31
  activeChips,
32
32
  onClearAll
33
- }: FiltersToolbarProps): react_jsx_runtime69.JSX.Element;
33
+ }: FiltersToolbarProps): react_jsx_runtime70.JSX.Element;
34
34
  //#endregion
35
35
  export { FiltersToolbar };
36
36
  //# sourceMappingURL=FiltersToolbar.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime51 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime52 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/molecules/HoverPreview.d.ts
5
5
  interface HoverPreviewProps {
@@ -15,7 +15,7 @@ declare function HoverPreview({
15
15
  align,
16
16
  sideOffset,
17
17
  className
18
- }: HoverPreviewProps): react_jsx_runtime51.JSX.Element;
18
+ }: HoverPreviewProps): react_jsx_runtime52.JSX.Element;
19
19
  //#endregion
20
20
  export { HoverPreview };
21
21
  //# sourceMappingURL=HoverPreview.d.ts.map
@@ -20,6 +20,7 @@ declare function InstallCommand({
20
20
  type,
21
21
  dev,
22
22
  global,
23
+ onCopy,
23
24
  ...props
24
25
  }: InstallCommandProps): react_jsx_runtime118.JSX.Element;
25
26
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"InstallCommand.d.ts","names":[],"sources":["../../../../src/components/molecules/InstallCommand/InstallCommand.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAwFA;;;;;;;;;iBAAgB,cAAA;WACL;;;;;GAKR,sBAAmB,oBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"InstallCommand.d.ts","names":[],"sources":["../../../../src/components/molecules/InstallCommand/InstallCommand.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAwFA;;;;;;;;;iBAAgB,cAAA;WACL;;;;;;GAMR,sBAAmB,oBAAA,CAAA,GAAA,CAAA"}
@@ -45,7 +45,7 @@ function buildCommand(pm, packageNames, type, dev, global) {
45
45
  * <InstallCommand package="create-next-app" type="exec" />
46
46
  * ```
47
47
  */
48
- function InstallCommand({ package: packageName, type = "add", dev = false, global = false, ...props }) {
48
+ function InstallCommand({ package: packageName, type = "add", dev = false, global = false, onCopy, ...props }) {
49
49
  const packageNames = useMemo(() => Array.isArray(packageName) ? packageName : [packageName], [packageName]);
50
50
  return /* @__PURE__ */ jsx(CommandTabs, {
51
51
  commands: useMemo(() => ({
@@ -59,6 +59,7 @@ function InstallCommand({ package: packageName, type = "add", dev = false, globa
59
59
  dev,
60
60
  global
61
61
  ]),
62
+ onCopy,
62
63
  ...props
63
64
  });
64
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InstallCommand.js","names":[],"sources":["../../../../src/components/molecules/InstallCommand/InstallCommand.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { CommandTabs } from '../CommandTabs';\nimport type { PackageManager } from '../CommandTabs/types';\nimport type { InstallCommandProps, InstallCommandType } from './types';\n\nfunction buildCommand(\n pm: PackageManager,\n packageNames: string[],\n type: InstallCommandType,\n dev: boolean,\n global: boolean\n): string {\n const packages = packageNames.join(' ');\n\n // Handle exec/run commands (npx, bunx, etc.)\n if (type === 'exec') {\n switch (pm) {\n case 'bun':\n return `bunx ${packages}`;\n case 'npm':\n return `npx ${packages}`;\n case 'yarn':\n return `yarn dlx ${packages}`;\n case 'pnpm':\n return `pnpm dlx ${packages}`;\n }\n }\n\n // Handle create commands\n if (type === 'create') {\n switch (pm) {\n case 'bun':\n return `bun create ${packages}`;\n case 'npm':\n return `npm create ${packages}`;\n case 'yarn':\n return `yarn create ${packages}`;\n case 'pnpm':\n return `pnpm create ${packages}`;\n }\n }\n\n // Handle run commands\n if (type === 'run') {\n switch (pm) {\n case 'bun':\n return `bun run ${packages}`;\n case 'npm':\n return `npm run ${packages}`;\n case 'yarn':\n return `yarn ${packages}`;\n case 'pnpm':\n return `pnpm ${packages}`;\n }\n }\n\n // Build flags\n const devFlag = dev ? (pm === 'npm' ? '--save-dev' : '-D') : '';\n const globalFlag = global ? '-g' : '';\n const flags = [devFlag, globalFlag].filter(Boolean).join(' ');\n\n // Handle add/install commands\n switch (pm) {\n case 'bun':\n return `bun add ${packages}${flags ? ` ${flags}` : ''}`;\n case 'npm':\n return `npm install ${packages}${flags ? ` ${flags}` : ''}`;\n case 'yarn':\n return `yarn add ${packages}${flags ? ` ${flags}` : ''}`;\n case 'pnpm':\n return `pnpm add ${packages}${flags ? ` ${flags}` : ''}`;\n }\n}\n\n/**\n * Convenience component for displaying package installation commands.\n * Automatically generates the correct command for each package manager.\n *\n * @example\n * ```tsx\n * <InstallCommand package=\"@contractspec/lib.contracts\" />\n * <InstallCommand package={[\"react\", \"react-dom\"]} />\n * <InstallCommand package=\"typescript\" dev />\n * <InstallCommand package=\"create-next-app\" type=\"exec\" />\n * ```\n */\nexport function InstallCommand({\n package: packageName,\n type = 'add',\n dev = false,\n global = false,\n ...props\n}: InstallCommandProps) {\n const packageNames = useMemo(\n () => (Array.isArray(packageName) ? packageName : [packageName]),\n [packageName]\n );\n\n const commands = useMemo(\n () => ({\n bun: buildCommand('bun', packageNames, type, dev, global),\n npm: buildCommand('npm', packageNames, type, dev, global),\n yarn: buildCommand('yarn', packageNames, type, dev, global),\n pnpm: buildCommand('pnpm', packageNames, type, dev, global),\n }),\n [packageNames, type, dev, global]\n );\n\n return <CommandTabs commands={commands} {...props} />;\n}\n"],"mappings":";;;;;;;AAOA,SAAS,aACP,IACA,cACA,MACA,KACA,QACQ;CACR,MAAM,WAAW,aAAa,KAAK,IAAI;AAGvC,KAAI,SAAS,OACX,SAAQ,IAAR;EACE,KAAK,MACH,QAAO,QAAQ;EACjB,KAAK,MACH,QAAO,OAAO;EAChB,KAAK,OACH,QAAO,YAAY;EACrB,KAAK,OACH,QAAO,YAAY;;AAKzB,KAAI,SAAS,SACX,SAAQ,IAAR;EACE,KAAK,MACH,QAAO,cAAc;EACvB,KAAK,MACH,QAAO,cAAc;EACvB,KAAK,OACH,QAAO,eAAe;EACxB,KAAK,OACH,QAAO,eAAe;;AAK5B,KAAI,SAAS,MACX,SAAQ,IAAR;EACE,KAAK,MACH,QAAO,WAAW;EACpB,KAAK,MACH,QAAO,WAAW;EACpB,KAAK,OACH,QAAO,QAAQ;EACjB,KAAK,OACH,QAAO,QAAQ;;CAOrB,MAAM,QAAQ,CAFE,MAAO,OAAO,QAAQ,eAAe,OAAQ,IAC1C,SAAS,OAAO,GACA,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;AAG7D,SAAQ,IAAR;EACE,KAAK,MACH,QAAO,WAAW,WAAW,QAAQ,IAAI,UAAU;EACrD,KAAK,MACH,QAAO,eAAe,WAAW,QAAQ,IAAI,UAAU;EACzD,KAAK,OACH,QAAO,YAAY,WAAW,QAAQ,IAAI,UAAU;EACtD,KAAK,OACH,QAAO,YAAY,WAAW,QAAQ,IAAI,UAAU;;;;;;;;;;;;;;;AAgB1D,SAAgB,eAAe,EAC7B,SAAS,aACT,OAAO,OACP,MAAM,OACN,SAAS,OACT,GAAG,SACmB;CACtB,MAAM,eAAe,cACZ,MAAM,QAAQ,YAAY,GAAG,cAAc,CAAC,YAAY,EAC/D,CAAC,YAAY,CACd;AAYD,QAAO,oBAAC;EAAY,UAVH,eACR;GACL,KAAK,aAAa,OAAO,cAAc,MAAM,KAAK,OAAO;GACzD,KAAK,aAAa,OAAO,cAAc,MAAM,KAAK,OAAO;GACzD,MAAM,aAAa,QAAQ,cAAc,MAAM,KAAK,OAAO;GAC3D,MAAM,aAAa,QAAQ,cAAc,MAAM,KAAK,OAAO;GAC5D,GACD;GAAC;GAAc;GAAM;GAAK;GAAO,CAClC;EAEuC,GAAI;GAAS"}
1
+ {"version":3,"file":"InstallCommand.js","names":[],"sources":["../../../../src/components/molecules/InstallCommand/InstallCommand.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { CommandTabs } from '../CommandTabs';\nimport type { PackageManager } from '../CommandTabs/types';\nimport type { InstallCommandProps, InstallCommandType } from './types';\n\nfunction buildCommand(\n pm: PackageManager,\n packageNames: string[],\n type: InstallCommandType,\n dev: boolean,\n global: boolean\n): string {\n const packages = packageNames.join(' ');\n\n // Handle exec/run commands (npx, bunx, etc.)\n if (type === 'exec') {\n switch (pm) {\n case 'bun':\n return `bunx ${packages}`;\n case 'npm':\n return `npx ${packages}`;\n case 'yarn':\n return `yarn dlx ${packages}`;\n case 'pnpm':\n return `pnpm dlx ${packages}`;\n }\n }\n\n // Handle create commands\n if (type === 'create') {\n switch (pm) {\n case 'bun':\n return `bun create ${packages}`;\n case 'npm':\n return `npm create ${packages}`;\n case 'yarn':\n return `yarn create ${packages}`;\n case 'pnpm':\n return `pnpm create ${packages}`;\n }\n }\n\n // Handle run commands\n if (type === 'run') {\n switch (pm) {\n case 'bun':\n return `bun run ${packages}`;\n case 'npm':\n return `npm run ${packages}`;\n case 'yarn':\n return `yarn ${packages}`;\n case 'pnpm':\n return `pnpm ${packages}`;\n }\n }\n\n // Build flags\n const devFlag = dev ? (pm === 'npm' ? '--save-dev' : '-D') : '';\n const globalFlag = global ? '-g' : '';\n const flags = [devFlag, globalFlag].filter(Boolean).join(' ');\n\n // Handle add/install commands\n switch (pm) {\n case 'bun':\n return `bun add ${packages}${flags ? ` ${flags}` : ''}`;\n case 'npm':\n return `npm install ${packages}${flags ? ` ${flags}` : ''}`;\n case 'yarn':\n return `yarn add ${packages}${flags ? ` ${flags}` : ''}`;\n case 'pnpm':\n return `pnpm add ${packages}${flags ? ` ${flags}` : ''}`;\n }\n}\n\n/**\n * Convenience component for displaying package installation commands.\n * Automatically generates the correct command for each package manager.\n *\n * @example\n * ```tsx\n * <InstallCommand package=\"@contractspec/lib.contracts\" />\n * <InstallCommand package={[\"react\", \"react-dom\"]} />\n * <InstallCommand package=\"typescript\" dev />\n * <InstallCommand package=\"create-next-app\" type=\"exec\" />\n * ```\n */\nexport function InstallCommand({\n package: packageName,\n type = 'add',\n dev = false,\n global = false,\n onCopy,\n ...props\n}: InstallCommandProps) {\n const packageNames = useMemo(\n () => (Array.isArray(packageName) ? packageName : [packageName]),\n [packageName]\n );\n\n const commands = useMemo(\n () => ({\n bun: buildCommand('bun', packageNames, type, dev, global),\n npm: buildCommand('npm', packageNames, type, dev, global),\n yarn: buildCommand('yarn', packageNames, type, dev, global),\n pnpm: buildCommand('pnpm', packageNames, type, dev, global),\n }),\n [packageNames, type, dev, global]\n );\n\n return <CommandTabs commands={commands} onCopy={onCopy} {...props} />;\n}\n"],"mappings":";;;;;;;AAOA,SAAS,aACP,IACA,cACA,MACA,KACA,QACQ;CACR,MAAM,WAAW,aAAa,KAAK,IAAI;AAGvC,KAAI,SAAS,OACX,SAAQ,IAAR;EACE,KAAK,MACH,QAAO,QAAQ;EACjB,KAAK,MACH,QAAO,OAAO;EAChB,KAAK,OACH,QAAO,YAAY;EACrB,KAAK,OACH,QAAO,YAAY;;AAKzB,KAAI,SAAS,SACX,SAAQ,IAAR;EACE,KAAK,MACH,QAAO,cAAc;EACvB,KAAK,MACH,QAAO,cAAc;EACvB,KAAK,OACH,QAAO,eAAe;EACxB,KAAK,OACH,QAAO,eAAe;;AAK5B,KAAI,SAAS,MACX,SAAQ,IAAR;EACE,KAAK,MACH,QAAO,WAAW;EACpB,KAAK,MACH,QAAO,WAAW;EACpB,KAAK,OACH,QAAO,QAAQ;EACjB,KAAK,OACH,QAAO,QAAQ;;CAOrB,MAAM,QAAQ,CAFE,MAAO,OAAO,QAAQ,eAAe,OAAQ,IAC1C,SAAS,OAAO,GACA,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;AAG7D,SAAQ,IAAR;EACE,KAAK,MACH,QAAO,WAAW,WAAW,QAAQ,IAAI,UAAU;EACrD,KAAK,MACH,QAAO,eAAe,WAAW,QAAQ,IAAI,UAAU;EACzD,KAAK,OACH,QAAO,YAAY,WAAW,QAAQ,IAAI,UAAU;EACtD,KAAK,OACH,QAAO,YAAY,WAAW,QAAQ,IAAI,UAAU;;;;;;;;;;;;;;;AAgB1D,SAAgB,eAAe,EAC7B,SAAS,aACT,OAAO,OACP,MAAM,OACN,SAAS,OACT,QACA,GAAG,SACmB;CACtB,MAAM,eAAe,cACZ,MAAM,QAAQ,YAAY,GAAG,cAAc,CAAC,YAAY,EAC/D,CAAC,YAAY,CACd;AAYD,QAAO,oBAAC;EAAY,UAVH,eACR;GACL,KAAK,aAAa,OAAO,cAAc,MAAM,KAAK,OAAO;GACzD,KAAK,aAAa,OAAO,cAAc,MAAM,KAAK,OAAO;GACzD,MAAM,aAAa,QAAQ,cAAc,MAAM,KAAK,OAAO;GAC3D,MAAM,aAAa,QAAQ,cAAc,MAAM,KAAK,OAAO;GAC5D,GACD;GAAC;GAAc;GAAM;GAAK;GAAO,CAClC;EAE+C;EAAQ,GAAI;GAAS"}
@@ -1,8 +1,9 @@
1
+ import { PackageManager } from "../CommandTabs/types.js";
1
2
  import { HTMLAttributes } from "react";
2
3
 
3
4
  //#region src/components/molecules/InstallCommand/types.d.ts
4
5
  type InstallCommandType = 'add' | 'install' | 'create' | 'run' | 'exec';
5
- interface InstallCommandProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
6
+ interface InstallCommandProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onCopy'> {
6
7
  /** The package name(s) to install */
7
8
  package: string | string[];
8
9
  /** The type of command (defaults to 'add' for package installation) */
@@ -11,6 +12,11 @@ interface InstallCommandProps extends Omit<HTMLAttributes<HTMLDivElement>, 'chil
11
12
  dev?: boolean;
12
13
  /** Whether this is a global installation (adds -g flag) */
13
14
  global?: boolean;
15
+ /** Optional callback when copy succeeds */
16
+ onCopy?: (data: {
17
+ command: string;
18
+ packageManager: PackageManager;
19
+ }) => void;
14
20
  }
15
21
  //#endregion
16
22
  export { InstallCommandProps, InstallCommandType };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/components/molecules/InstallCommand/types.ts"],"sourcesContent":[],"mappings":";;;KAEY,kBAAA;UAEK,mBAAA,SAA4B,KAC3C,eAAe;EAHL;EAEK,OAAA,EAAA,MAAA,GAAA,MAAoB,EAAA;EACpB;EAAf,IAAA,CAAA,EAMO,kBANP;EAMO;EAPoC,GAAA,CAAA,EAAA,OAAA;EAAI"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/components/molecules/InstallCommand/types.ts"],"sourcesContent":[],"mappings":";;;;KAGY,kBAAA;UAEK,mBAAA,SAA4B,KAC3C,eAAe;EAHL;EAEK,OAAA,EAAA,MAAA,GAAA,MAAoB,EAAA;EACpB;EAAf,IAAA,CAAA,EAMO,kBANP;EAMO;EAM4C,GAAA,CAAA,EAAA,OAAA;EAbR;EAAI,MAAA,CAAA,EAAA,OAAA;;;;oBAaI"}
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime42 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime43 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/molecules/LangSwitch.d.ts
5
5
  interface LangOption {
@@ -17,7 +17,7 @@ declare function LangSwitch({
17
17
  options,
18
18
  onChange,
19
19
  size
20
- }: LangSwitchProps): react_jsx_runtime42.JSX.Element;
20
+ }: LangSwitchProps): react_jsx_runtime43.JSX.Element;
21
21
  //#endregion
22
22
  export { LangSwitch, LangSwitchProps };
23
23
  //# sourceMappingURL=LangSwitch.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime74 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime75 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/molecules/LoaderBlock.d.ts
5
5
  interface LoaderBlockProps {
@@ -13,7 +13,7 @@ declare function LoaderBlock({
13
13
  description,
14
14
  className,
15
15
  size
16
- }: LoaderBlockProps): react_jsx_runtime74.JSX.Element;
16
+ }: LoaderBlockProps): react_jsx_runtime75.JSX.Element;
17
17
  //#endregion
18
18
  export { LoaderBlock };
19
19
  //# sourceMappingURL=LoaderBlock.d.ts.map
@@ -12,6 +12,7 @@ function NavItemCard({ item, className }) {
12
12
  "aria-label": typeof item.label === "string" ? item.label : item.ariaLabel,
13
13
  target: item.target,
14
14
  rel: item.external ? "noopener noreferrer" : void 0,
15
+ onClick: item.onClick,
15
16
  children: /* @__PURE__ */ jsxs("div", {
16
17
  className: "flex items-center gap-3",
17
18
  children: [item.imageSrc ? /* @__PURE__ */ jsx("img", {