@contractspec/lib.design-system 1.46.1 → 1.47.0

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 (139) hide show
  1. package/dist/components/atoms/Cta.js.map +1 -1
  2. package/dist/components/atoms/ErrorState.d.ts +2 -2
  3. package/dist/components/atoms/LoaderCircular.d.ts +2 -2
  4. package/dist/components/atoms/NavBrand.d.ts +2 -2
  5. package/dist/components/data-view/DataViewDetail.d.ts +2 -2
  6. package/dist/components/data-view/DataViewList.d.ts +2 -2
  7. package/dist/components/data-view/DataViewRenderer.js.map +1 -1
  8. package/dist/components/data-view/DataViewTable.d.ts +2 -2
  9. package/dist/components/data-view/utils.js.map +1 -1
  10. package/dist/components/forms/ActionForm.d.ts +2 -2
  11. package/dist/components/forms/FormCardLayout.d.ts +2 -2
  12. package/dist/components/forms/FormDialog.d.ts +2 -2
  13. package/dist/components/forms/FormLayout.d.ts +4 -4
  14. package/dist/components/forms/FormOneByOneLayout.d.ts +2 -2
  15. package/dist/components/forms/FormStepsLayout.d.ts +2 -2
  16. package/dist/components/forms/ZodForm.d.ts +2 -2
  17. package/dist/components/legal/atoms/DefinitionList.d.ts +2 -2
  18. package/dist/components/legal/atoms/KeyValueList.d.ts +2 -2
  19. package/dist/components/legal/atoms/LegalCallout.d.ts +2 -2
  20. package/dist/components/legal/atoms/LegalHeading.d.ts +2 -2
  21. package/dist/components/legal/atoms/LegalList.d.ts +2 -2
  22. package/dist/components/legal/atoms/LegalSection.d.ts +2 -2
  23. package/dist/components/legal/atoms/LegalText.d.ts +2 -2
  24. package/dist/components/legal/molecules/Consent.d.ts +3 -3
  25. package/dist/components/legal/molecules/ContactFields.d.ts +2 -2
  26. package/dist/components/legal/molecules/LegalMeta.d.ts +2 -2
  27. package/dist/components/legal/molecules/LegalTOC.d.ts +2 -2
  28. package/dist/components/legal/organisms/ContactForm.d.ts +2 -2
  29. package/dist/components/legal/organisms/GDPRDataRequest.d.ts +2 -2
  30. package/dist/components/legal/organisms/GDPRRights.d.ts +2 -2
  31. package/dist/components/legal/organisms/LegalPageLayout.d.ts +2 -2
  32. package/dist/components/legal/templates/ContactTemplate.d.ts +2 -2
  33. package/dist/components/legal/templates/ContactTemplate.js +0 -1
  34. package/dist/components/legal/templates/ContactTemplate.js.map +1 -1
  35. package/dist/components/legal/templates/CookiesTemplate.d.ts +2 -2
  36. package/dist/components/legal/templates/PrivacyTemplate.d.ts +2 -2
  37. package/dist/components/legal/templates/SalesTermsTemplate.d.ts +2 -2
  38. package/dist/components/legal/templates/TermsTemplate.d.ts +2 -2
  39. package/dist/components/marketing/MarketingCard.d.ts +2 -2
  40. package/dist/components/marketing/MarketingCard.js.map +1 -1
  41. package/dist/components/marketing/MarketingCardsSection.d.ts +2 -2
  42. package/dist/components/marketing/MarketingComparisonSection.d.ts +2 -2
  43. package/dist/components/marketing/MarketingIconCard.d.ts +2 -2
  44. package/dist/components/marketing/MarketingSection.d.ts +2 -2
  45. package/dist/components/marketing/MarketingStepCard.d.ts +2 -2
  46. package/dist/components/molecules/AiLinkButton.d.ts +2 -2
  47. package/dist/components/molecules/Breadcrumbs.d.ts +2 -2
  48. package/dist/components/molecules/CodeBlock/CodeBlock.d.ts +16 -0
  49. package/dist/components/molecules/CodeBlock/CodeBlock.d.ts.map +1 -0
  50. package/dist/components/molecules/CodeBlock/CodeBlock.js +54 -0
  51. package/dist/components/molecules/CodeBlock/CodeBlock.js.map +1 -0
  52. package/dist/components/molecules/CodeBlock/index.d.ts +2 -0
  53. package/dist/components/molecules/CodeBlock/types.d.ts +19 -0
  54. package/dist/components/molecules/CodeBlock/types.d.ts.map +1 -0
  55. package/dist/components/molecules/CommandPalette.d.ts +2 -2
  56. package/dist/components/molecules/CommandSearchTrigger.d.ts +2 -2
  57. package/dist/components/molecules/CommandTabs/CommandTabs.d.ts +13 -0
  58. package/dist/components/molecules/CommandTabs/CommandTabs.d.ts.map +1 -0
  59. package/dist/components/molecules/CommandTabs/CommandTabs.js +68 -0
  60. package/dist/components/molecules/CommandTabs/CommandTabs.js.map +1 -0
  61. package/dist/components/molecules/CommandTabs/index.d.ts +2 -0
  62. package/dist/components/molecules/CommandTabs/types.d.ts +19 -0
  63. package/dist/components/molecules/CommandTabs/types.d.ts.map +1 -0
  64. package/dist/components/molecules/CopyButton/CopyButton.d.ts +13 -0
  65. package/dist/components/molecules/CopyButton/CopyButton.d.ts.map +1 -0
  66. package/dist/components/molecules/CopyButton/CopyButton.js +42 -0
  67. package/dist/components/molecules/CopyButton/CopyButton.js.map +1 -0
  68. package/dist/components/molecules/CopyButton/index.d.ts +2 -0
  69. package/dist/components/molecules/CopyButton/types.d.ts +12 -0
  70. package/dist/components/molecules/CopyButton/types.d.ts.map +1 -0
  71. package/dist/components/molecules/EntityCard.d.ts +2 -2
  72. package/dist/components/molecules/EntityCard.js.map +1 -1
  73. package/dist/components/molecules/FiltersToolbar.d.ts +2 -2
  74. package/dist/components/molecules/FiltersToolbar.js +0 -1
  75. package/dist/components/molecules/FiltersToolbar.js.map +1 -1
  76. package/dist/components/molecules/HoverPreview.d.ts +2 -2
  77. package/dist/components/molecules/InstallCommand/InstallCommand.d.ts +27 -0
  78. package/dist/components/molecules/InstallCommand/InstallCommand.d.ts.map +1 -0
  79. package/dist/components/molecules/InstallCommand/InstallCommand.js +68 -0
  80. package/dist/components/molecules/InstallCommand/InstallCommand.js.map +1 -0
  81. package/dist/components/molecules/InstallCommand/index.d.ts +2 -0
  82. package/dist/components/molecules/InstallCommand/types.d.ts +17 -0
  83. package/dist/components/molecules/InstallCommand/types.d.ts.map +1 -0
  84. package/dist/components/molecules/LangSwitch.d.ts +2 -2
  85. package/dist/components/molecules/LoaderBlock.d.ts +2 -2
  86. package/dist/components/molecules/OverviewCard.d.ts +2 -2
  87. package/dist/components/molecules/SkeletonBlock/index.web.d.ts +2 -2
  88. package/dist/components/molecules/SkeletonCircle/index.web.d.ts +2 -2
  89. package/dist/components/molecules/SkeletonList/index.web.d.ts +2 -2
  90. package/dist/components/molecules/StatCard.d.ts +3 -3
  91. package/dist/components/molecules/StatusChip.d.ts +2 -2
  92. package/dist/components/molecules/hover-previews/Doc.d.ts +2 -2
  93. package/dist/components/molecules/hover-previews/Media.d.ts +2 -2
  94. package/dist/components/molecules/hover-previews/Simple.d.ts +2 -2
  95. package/dist/components/molecules/hover-previews/Stats.d.ts +2 -2
  96. package/dist/components/molecules/hover-previews/User.d.ts +2 -2
  97. package/dist/components/organisms/AcademyLayout.d.ts +2 -2
  98. package/dist/components/organisms/AppHeader.d.ts +2 -2
  99. package/dist/components/organisms/AppLayout.d.ts +2 -2
  100. package/dist/components/organisms/AppSidebar.d.ts +2 -2
  101. package/dist/components/organisms/EmptyDataList.d.ts +2 -2
  102. package/dist/components/organisms/EmptySearchResult.d.ts +2 -2
  103. package/dist/components/organisms/FAQSection.d.ts +2 -2
  104. package/dist/components/organisms/FeatureCarousel.d.ts +2 -2
  105. package/dist/components/organisms/FeaturesSection.d.ts +2 -2
  106. package/dist/components/organisms/Footer.d.ts +2 -2
  107. package/dist/components/organisms/Header.d.ts +4 -4
  108. package/dist/components/organisms/HeroResponsive.d.ts +2 -2
  109. package/dist/components/organisms/HeroSection.d.ts +2 -2
  110. package/dist/components/organisms/ListCardPage.d.ts +2 -2
  111. package/dist/components/organisms/ListGridPage.d.ts +2 -2
  112. package/dist/components/organisms/ListPageResponsive.d.ts +2 -2
  113. package/dist/components/organisms/ListTablePage.d.ts +2 -2
  114. package/dist/components/organisms/MarketingHeader.d.ts +2 -2
  115. package/dist/components/organisms/MarketingHeader.js +1 -1
  116. package/dist/components/organisms/MarketingHeader.js.map +1 -1
  117. package/dist/components/organisms/MarketingHeaderDesktop.d.ts +2 -2
  118. package/dist/components/organisms/MarketingHeaderMobile.d.ts +2 -2
  119. package/dist/components/organisms/MarketingLayout.d.ts +2 -2
  120. package/dist/components/organisms/PageHeaderResponsive.d.ts +2 -2
  121. package/dist/components/organisms/PricingCarousel.d.ts +2 -2
  122. package/dist/components/organisms/PricingSection.d.ts +2 -2
  123. package/dist/components/organisms/TestimonialCarousel.d.ts +2 -2
  124. package/dist/components/providers/PackageManagerProvider.d.ts +26 -0
  125. package/dist/components/providers/PackageManagerProvider.d.ts.map +1 -0
  126. package/dist/components/providers/PackageManagerProvider.js +50 -0
  127. package/dist/components/providers/PackageManagerProvider.js.map +1 -0
  128. package/dist/components/templates/lists/ListPageTemplate/index.web.d.ts +2 -2
  129. package/dist/hooks/useListUrlState.js.map +1 -1
  130. package/dist/index.d.ts +14 -1
  131. package/dist/index.js +6 -2
  132. package/dist/index.js.map +1 -1
  133. package/dist/lib/keyboard.js.map +1 -1
  134. package/dist/platform/useResponsive.js.map +1 -1
  135. package/dist/platform/withPlatformUI.js.map +1 -1
  136. package/dist/renderers/form-contract.d.ts +2 -2
  137. package/dist/theme/tokens.js.map +1 -1
  138. package/package.json +16 -13
  139. package/dist/types/navigation.js +0 -1
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime94 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime95 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/legal/templates/CookiesTemplate.d.ts
5
5
  declare function CookiesTemplate({
@@ -27,7 +27,7 @@ declare function CookiesTemplate({
27
27
  title: React.ReactNode;
28
28
  content: React.ReactNode;
29
29
  }[];
30
- }): react_jsx_runtime94.JSX.Element;
30
+ }): react_jsx_runtime95.JSX.Element;
31
31
  //#endregion
32
32
  export { CookiesTemplate };
33
33
  //# sourceMappingURL=CookiesTemplate.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime93 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime94 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/legal/templates/PrivacyTemplate.d.ts
5
5
  declare function PrivacyTemplate({
@@ -27,7 +27,7 @@ declare function PrivacyTemplate({
27
27
  term: React.ReactNode;
28
28
  description: React.ReactNode;
29
29
  }[];
30
- }): react_jsx_runtime93.JSX.Element;
30
+ }): react_jsx_runtime94.JSX.Element;
31
31
  //#endregion
32
32
  export { PrivacyTemplate };
33
33
  //# sourceMappingURL=PrivacyTemplate.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime92 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime93 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/legal/templates/SalesTermsTemplate.d.ts
5
5
  declare function SalesTermsTemplate({
@@ -22,7 +22,7 @@ declare function SalesTermsTemplate({
22
22
  title: React.ReactNode;
23
23
  content: React.ReactNode;
24
24
  }[];
25
- }): react_jsx_runtime92.JSX.Element;
25
+ }): react_jsx_runtime93.JSX.Element;
26
26
  //#endregion
27
27
  export { SalesTermsTemplate };
28
28
  //# sourceMappingURL=SalesTermsTemplate.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime91 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime92 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/legal/templates/TermsTemplate.d.ts
5
5
  declare function TermsTemplate({
@@ -22,7 +22,7 @@ declare function TermsTemplate({
22
22
  title: React.ReactNode;
23
23
  content: React.ReactNode;
24
24
  }[];
25
- }): react_jsx_runtime91.JSX.Element;
25
+ }): react_jsx_runtime92.JSX.Element;
26
26
  //#endregion
27
27
  export { TermsTemplate };
28
28
  //# sourceMappingURL=TermsTemplate.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime33 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime34 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_runtime33.JSX.Element;
14
+ }: MarketingCardProps): react_jsx_runtime34.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 +1 @@
1
- {"version":3,"file":"MarketingCard.js","names":["toneClasses: Record<MarketingCardTone, string>"],"sources":["../../../src/components/marketing/MarketingCard.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@contractspec/lib.ui-kit-web/ui/card';\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\n\nexport type MarketingCardTone = 'default' | 'muted' | 'elevated';\n\nconst toneClasses: Record<MarketingCardTone, string> = {\n default: 'border-border/60 bg-card/90',\n muted: 'border-border/50 bg-muted/50',\n elevated: 'border-border/50 bg-card shadow-lg shadow-black/5',\n};\n\ntype MarketingCardProps = React.ComponentProps<typeof Card> & {\n tone?: MarketingCardTone;\n};\n\nexport function MarketingCard({\n tone = 'default',\n className,\n ...props\n}: MarketingCardProps) {\n return (\n <Card\n className={cn(\n 'backdrop-blur transition-shadow',\n toneClasses[tone],\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n CardContent as MarketingCardContent,\n CardDescription as MarketingCardDescription,\n CardHeader as MarketingCardHeader,\n CardTitle as MarketingCardTitle,\n};\n"],"mappings":";;;;;;AAYA,MAAMA,cAAiD;CACrD,SAAS;CACT,OAAO;CACP,UAAU;CACX;AAMD,SAAgB,cAAc,EAC5B,OAAO,WACP,WACA,GAAG,SACkB;AACrB,QACE,oBAAC;EACC,WAAW,GACT,mCACA,YAAY,OACZ,UACD;EACD,GAAI;GACJ"}
1
+ {"version":3,"file":"MarketingCard.js","names":[],"sources":["../../../src/components/marketing/MarketingCard.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@contractspec/lib.ui-kit-web/ui/card';\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\n\nexport type MarketingCardTone = 'default' | 'muted' | 'elevated';\n\nconst toneClasses: Record<MarketingCardTone, string> = {\n default: 'border-border/60 bg-card/90',\n muted: 'border-border/50 bg-muted/50',\n elevated: 'border-border/50 bg-card shadow-lg shadow-black/5',\n};\n\ntype MarketingCardProps = React.ComponentProps<typeof Card> & {\n tone?: MarketingCardTone;\n};\n\nexport function MarketingCard({\n tone = 'default',\n className,\n ...props\n}: MarketingCardProps) {\n return (\n <Card\n className={cn(\n 'backdrop-blur transition-shadow',\n toneClasses[tone],\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n CardContent as MarketingCardContent,\n CardDescription as MarketingCardDescription,\n CardHeader as MarketingCardHeader,\n CardTitle as MarketingCardTitle,\n};\n"],"mappings":";;;;;;AAYA,MAAM,cAAiD;CACrD,SAAS;CACT,OAAO;CACP,UAAU;CACX;AAMD,SAAgB,cAAc,EAC5B,OAAO,WACP,WACA,GAAG,SACkB;AACrB,QACE,oBAAC;EACC,WAAW,GACT,mCACA,YAAY,OACZ,UACD;EACD,GAAI;GACJ"}
@@ -1,6 +1,6 @@
1
1
  import { MarketingSection } from "./MarketingSection.js";
2
2
  import * as React from "react";
3
- import * as react_jsx_runtime32 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime33 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_runtime32.JSX.Element;
19
+ }: MarketingCardsSectionProps): react_jsx_runtime33.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_runtime36 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime37 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_runtime36.JSX.Element;
27
+ }: MarketingComparisonSectionProps): react_jsx_runtime37.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_runtime34 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime35 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_runtime34.JSX.Element;
35
+ }: MarketingIconCardProps): react_jsx_runtime35.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_runtime31 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime32 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_runtime31.JSX.Element;
31
+ }: MarketingSectionProps): react_jsx_runtime32.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_runtime35 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime36 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_runtime35.JSX.Element;
17
+ }: MarketingStepCardProps): react_jsx_runtime36.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_runtime69 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime70 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_runtime69.JSX.Element;
13
+ }: AiLinkButtonProps): react_jsx_runtime70.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_runtime43 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime44 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_runtime43.JSX.Element | null;
13
+ }): react_jsx_runtime44.JSX.Element | null;
14
14
  //#endregion
15
15
  export { Breadcrumbs };
16
16
  //# sourceMappingURL=Breadcrumbs.d.ts.map
@@ -0,0 +1,16 @@
1
+ import { CodeBlockProps } from "./types.js";
2
+ import * as react_jsx_runtime115 from "react/jsx-runtime";
3
+
4
+ //#region src/components/molecules/CodeBlock/CodeBlock.d.ts
5
+ declare function CodeBlock({
6
+ code,
7
+ language,
8
+ filename,
9
+ showLineNumbers,
10
+ showCopyButton,
11
+ className,
12
+ ...props
13
+ }: CodeBlockProps): react_jsx_runtime115.JSX.Element;
14
+ //#endregion
15
+ export { CodeBlock };
16
+ //# sourceMappingURL=CodeBlock.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,54 @@
1
+ 'use client';
2
+
3
+ import { cn } from "../../../lib/utils.js";
4
+ import { CopyButton } from "../CopyButton/CopyButton.js";
5
+ import { useEffect, useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+
8
+ //#region src/components/molecules/CodeBlock/CodeBlock.tsx
9
+ function CodeBlock({ code, language = "typescript", filename, showLineNumbers = false, showCopyButton = true, className, ...props }) {
10
+ const [highlightedHtml, setHighlightedHtml] = useState(null);
11
+ useEffect(() => {
12
+ let mounted = true;
13
+ async function highlight() {
14
+ try {
15
+ const { codeToHtml } = await import("shiki");
16
+ const html = await codeToHtml(code, {
17
+ lang: language === "text" ? "plaintext" : language,
18
+ theme: "vitesse-dark"
19
+ });
20
+ if (mounted) setHighlightedHtml(html);
21
+ } catch (err) {
22
+ console.error("Failed to highlight code:", err);
23
+ }
24
+ }
25
+ highlight();
26
+ return () => {
27
+ mounted = false;
28
+ };
29
+ }, [code, language]);
30
+ return /* @__PURE__ */ jsxs("div", {
31
+ className: cn("relative overflow-hidden rounded-lg border border-zinc-800 bg-zinc-950", className),
32
+ ...props,
33
+ children: [filename && /* @__PURE__ */ jsx("div", {
34
+ className: "flex items-center justify-between border-b border-zinc-800 bg-zinc-900/50 px-4 py-2 text-xs text-zinc-400",
35
+ children: /* @__PURE__ */ jsx("span", { children: filename })
36
+ }), /* @__PURE__ */ jsxs("div", {
37
+ className: "relative",
38
+ children: [showCopyButton && /* @__PURE__ */ jsx(CopyButton, {
39
+ value: code,
40
+ className: "absolute top-3 right-3"
41
+ }), highlightedHtml ? /* @__PURE__ */ jsx("div", {
42
+ 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
+ dangerouslySetInnerHTML: { __html: highlightedHtml }
44
+ }) : /* @__PURE__ */ jsx("pre", {
45
+ className: cn("overflow-x-auto p-4 font-mono text-[13px] leading-6 text-zinc-300", showLineNumbers && "line-numbers"),
46
+ children: /* @__PURE__ */ jsx("code", { children: code })
47
+ })]
48
+ })]
49
+ });
50
+ }
51
+
52
+ //#endregion
53
+ export { CodeBlock };
54
+ //# sourceMappingURL=CodeBlock.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ import { CodeBlockProps, CodeLanguage } from "./types.js";
2
+ import { CodeBlock } from "./CodeBlock.js";
@@ -0,0 +1,19 @@
1
+ import { HTMLAttributes } from "react";
2
+
3
+ //#region src/components/molecules/CodeBlock/types.d.ts
4
+ type CodeLanguage = 'typescript' | 'tsx' | 'javascript' | 'jsx' | 'bash' | 'shell' | 'json' | 'yaml' | 'graphql' | 'sql' | 'python' | 'go' | 'rust' | 'css' | 'scss' | 'html' | 'markdown' | 'text';
5
+ interface CodeBlockProps extends HTMLAttributes<HTMLDivElement> {
6
+ /** The code to display */
7
+ code: string;
8
+ /** The language for syntax highlighting */
9
+ language?: CodeLanguage;
10
+ /** Optional filename to display in header */
11
+ filename?: string;
12
+ /** Whether to show line numbers */
13
+ showLineNumbers?: boolean;
14
+ /** Whether to show the copy button */
15
+ showCopyButton?: boolean;
16
+ }
17
+ //#endregion
18
+ export { CodeBlockProps, CodeLanguage };
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/components/molecules/CodeBlock/types.ts"],"sourcesContent":[],"mappings":";;;KAEY,YAAA;UAoBK,cAAA,SAAuB,eAAe;EApB3C;EAoBK,IAAA,EAAA,MAAA;EAAsC;EAI1C,QAAA,CAAA,EAAA,YAAA;EAJ2B;EAAc,QAAA,CAAA,EAAA,MAAA"}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime40 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime41 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_runtime40.JSX.Element;
24
+ }: CommandPaletteProps): react_jsx_runtime41.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_runtime44 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime45 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_runtime44.JSX.Element;
16
+ }): react_jsx_runtime45.JSX.Element;
17
17
  //#endregion
18
18
  export { CommandSearchTrigger };
19
19
  //# sourceMappingURL=CommandSearchTrigger.d.ts.map
@@ -0,0 +1,13 @@
1
+ import { CommandTabsProps } from "./types.js";
2
+ import * as react_jsx_runtime117 from "react/jsx-runtime";
3
+
4
+ //#region src/components/molecules/CommandTabs/CommandTabs.d.ts
5
+ declare function CommandTabs({
6
+ commands,
7
+ initialPreference,
8
+ className,
9
+ ...props
10
+ }: CommandTabsProps): react_jsx_runtime117.JSX.Element | null;
11
+ //#endregion
12
+ export { CommandTabs };
13
+ //# sourceMappingURL=CommandTabs.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,68 @@
1
+ 'use client';
2
+
3
+ import { cn } from "../../../lib/utils.js";
4
+ import { CopyButton } from "../CopyButton/CopyButton.js";
5
+ import { usePackageManager } from "../../providers/PackageManagerProvider.js";
6
+ import { useEffect, useState } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+
9
+ //#region src/components/molecules/CommandTabs/CommandTabs.tsx
10
+ const STORAGE_KEY = "package-manager-preference";
11
+ function CommandTabs({ commands, initialPreference = "bun", className, ...props }) {
12
+ const context = usePackageManager();
13
+ const [localSelected, setLocalSelected] = useState(() => {
14
+ return initialPreference;
15
+ });
16
+ const selected = context?.preference ?? localSelected;
17
+ const setSelected = context?.setPreference ?? setLocalSelected;
18
+ useEffect(() => {
19
+ if (context) return;
20
+ try {
21
+ const saved = localStorage.getItem(STORAGE_KEY);
22
+ if (saved && commands[saved]) setLocalSelected(saved);
23
+ } catch {}
24
+ }, [commands, context]);
25
+ const handleSelect = (pm) => {
26
+ setSelected(pm);
27
+ if (!context) try {
28
+ localStorage.setItem(STORAGE_KEY, pm);
29
+ } catch {}
30
+ };
31
+ const packageManagers = Object.keys(commands);
32
+ if (packageManagers.length === 0) return null;
33
+ const effectiveSelected = commands[selected] ? selected : packageManagers[0];
34
+ if (!effectiveSelected) return null;
35
+ const currentCommand = commands[effectiveSelected];
36
+ if (!currentCommand) return null;
37
+ return /* @__PURE__ */ jsxs("div", {
38
+ className: cn("relative rounded-lg border border-zinc-800 bg-zinc-950", className),
39
+ ...props,
40
+ children: [/* @__PURE__ */ jsx("div", {
41
+ className: "flex items-center border-b border-zinc-800 bg-zinc-900/50 px-2 pt-2",
42
+ role: "tablist",
43
+ "aria-label": "Package manager selection",
44
+ children: packageManagers.map((pm) => /* @__PURE__ */ jsx("button", {
45
+ type: "button",
46
+ role: "tab",
47
+ "aria-selected": effectiveSelected === pm,
48
+ onClick: () => handleSelect(pm),
49
+ className: cn("rounded-t-md border-t border-r border-l border-transparent px-4 py-2 text-xs font-medium text-zinc-400", "transition-colors hover:text-zinc-100", "focus:ring-2 focus:ring-zinc-600 focus:ring-offset-1 focus:ring-offset-zinc-900 focus:outline-none", effectiveSelected === pm && "border-zinc-800 bg-zinc-950 text-zinc-100"),
50
+ children: pm
51
+ }, pm))
52
+ }), /* @__PURE__ */ jsxs("div", {
53
+ className: "relative p-4",
54
+ role: "tabpanel",
55
+ children: [/* @__PURE__ */ jsx(CopyButton, {
56
+ value: currentCommand,
57
+ className: "absolute top-3 right-3"
58
+ }), /* @__PURE__ */ jsx("pre", {
59
+ className: "overflow-x-auto pr-10 font-mono text-[13px] leading-6 text-white",
60
+ children: /* @__PURE__ */ jsx("code", { children: currentCommand })
61
+ })]
62
+ })]
63
+ });
64
+ }
65
+
66
+ //#endregion
67
+ export { CommandTabs };
68
+ //# sourceMappingURL=CommandTabs.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ import { CommandTabsProps, PackageManager, PackageManagerContextValue } from "./types.js";
2
+ import { CommandTabs } from "./CommandTabs.js";
@@ -0,0 +1,19 @@
1
+ import { HTMLAttributes } from "react";
2
+
3
+ //#region src/components/molecules/CommandTabs/types.d.ts
4
+ type PackageManager = 'bun' | 'npm' | 'yarn' | 'pnpm';
5
+ interface CommandTabsProps extends HTMLAttributes<HTMLDivElement> {
6
+ /** Commands for each package manager */
7
+ commands: Partial<Record<PackageManager, string>>;
8
+ /** Initial package manager preference (overridden by context if available) */
9
+ initialPreference?: PackageManager;
10
+ }
11
+ interface PackageManagerContextValue {
12
+ /** Current package manager preference */
13
+ preference: PackageManager;
14
+ /** Set the package manager preference */
15
+ setPreference: (pm: PackageManager) => void;
16
+ }
17
+ //#endregion
18
+ export { CommandTabsProps, PackageManager, PackageManagerContextValue };
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,13 @@
1
+ import { CopyButtonProps } from "./types.js";
2
+ import * as react_jsx_runtime116 from "react/jsx-runtime";
3
+
4
+ //#region src/components/molecules/CopyButton/CopyButton.d.ts
5
+ declare function CopyButton({
6
+ value,
7
+ onCopy,
8
+ className,
9
+ ...props
10
+ }: CopyButtonProps): react_jsx_runtime116.JSX.Element;
11
+ //#endregion
12
+ export { CopyButton };
13
+ //# sourceMappingURL=CopyButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CopyButton.d.ts","names":[],"sources":["../../../../src/components/molecules/CopyButton/CopyButton.tsx"],"sourcesContent":[],"mappings":";;;;iBAOgB,UAAA;;;;;GAKb,kBAAe,oBAAA,CAAA,GAAA,CAAA"}
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+
3
+ import { cn } from "../../../lib/utils.js";
4
+ import { useCallback, useEffect, useState } from "react";
5
+ import { Check, Copy } from "lucide-react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+
8
+ //#region src/components/molecules/CopyButton/CopyButton.tsx
9
+ function CopyButton({ value, onCopy, className, ...props }) {
10
+ const [hasCopied, setHasCopied] = useState(false);
11
+ useEffect(() => {
12
+ if (!hasCopied) return;
13
+ const timeout = setTimeout(() => {
14
+ setHasCopied(false);
15
+ }, 2e3);
16
+ return () => clearTimeout(timeout);
17
+ }, [hasCopied]);
18
+ const copyToClipboard = useCallback(async () => {
19
+ try {
20
+ await navigator.clipboard.writeText(value);
21
+ setHasCopied(true);
22
+ onCopy?.();
23
+ } catch (err) {
24
+ console.error("Failed to copy to clipboard:", err);
25
+ }
26
+ }, [value, onCopy]);
27
+ return /* @__PURE__ */ jsxs("button", {
28
+ type: "button",
29
+ className: cn("relative z-10 inline-flex h-6 w-6 items-center justify-center rounded-md", "border border-zinc-700 bg-zinc-800 text-zinc-400", "transition-all hover:bg-zinc-700 hover:text-zinc-100", "focus:ring-2 focus:ring-zinc-600 focus:ring-offset-2 focus:ring-offset-zinc-900 focus:outline-none", className),
30
+ onClick: copyToClipboard,
31
+ "aria-label": hasCopied ? "Copied" : "Copy to clipboard",
32
+ ...props,
33
+ children: [/* @__PURE__ */ jsx("span", {
34
+ className: "sr-only",
35
+ children: hasCopied ? "Copied" : "Copy"
36
+ }), hasCopied ? /* @__PURE__ */ jsx(Check, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx(Copy, { className: "h-3 w-3" })]
37
+ });
38
+ }
39
+
40
+ //#endregion
41
+ export { CopyButton };
42
+ //# sourceMappingURL=CopyButton.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ import { CopyButtonProps } from "./types.js";
2
+ import { CopyButton } from "./CopyButton.js";
@@ -0,0 +1,12 @@
1
+ import { HTMLAttributes } from "react";
2
+
3
+ //#region src/components/molecules/CopyButton/types.d.ts
4
+ interface CopyButtonProps extends HTMLAttributes<HTMLButtonElement> {
5
+ /** The value to copy to clipboard */
6
+ value: string;
7
+ /** Optional callback when copy succeeds */
8
+ onCopy?: () => void;
9
+ }
10
+ //#endregion
11
+ export { CopyButtonProps };
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/components/molecules/CopyButton/types.ts"],"sourcesContent":[],"mappings":";;;UAEiB,eAAA,SAAwB,eAAe;;EAAvC,KAAA,EAAA,MAAA"}
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import * as react_jsx_runtime46 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime47 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_runtime46.JSX.Element;
35
+ }: EntityCardProps): react_jsx_runtime47.JSX.Element;
36
36
  //#endregion
37
37
  export { EntityCard };
38
38
  //# sourceMappingURL=EntityCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityCard.js","names":["Wrapper: React.ElementType"],"sources":["../../../src/components/molecules/EntityCard.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Card, CardContent } from '@contractspec/lib.ui-kit-web/ui/card';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\n\nconst entityCardVariants = cva('transition-all hover:shadow-2xs', {\n variants: {\n emphasis: {\n default: '',\n subtle: 'border-muted/60 bg-muted/20',\n strong: 'border-primary/50 bg-primary/5',\n },\n density: {\n compact: 'p-3',\n comfortable: 'p-4 md:p-5',\n },\n },\n defaultVariants: { emphasis: 'default', density: 'comfortable' },\n});\n\nexport type EntityCardProps = React.ComponentProps<typeof Card> &\n VariantProps<typeof entityCardVariants> & {\n cardTitle: React.ReactNode;\n cardSubtitle?: React.ReactNode;\n chips?: React.ReactNode; // right-aligned small chips\n meta?: React.ReactNode; // rows of icon+text data\n footer?: React.ReactNode; // actions area\n href?: string; // optional link wrapper\n contentClassName?: string;\n preview?: React.ReactNode; // hover preview content\n };\n\nexport function EntityCard({\n cardTitle,\n cardSubtitle,\n chips,\n meta,\n footer,\n emphasis,\n density,\n className,\n contentClassName,\n href,\n preview,\n ...cardProps\n}: EntityCardProps) {\n const Wrapper: React.ElementType = href ? 'a' : 'div';\n const cardContent = (\n <Card\n className={cn(entityCardVariants({ emphasis }), className)}\n {...cardProps}\n >\n <CardContent\n className={cn(entityCardVariants({ density }), contentClassName)}\n >\n <div className=\"space-y-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-lg font-medium\">{cardTitle}</div>\n {cardSubtitle && (\n <div className=\"text-muted-foreground text-base\">\n {cardSubtitle}\n </div>\n )}\n </div>\n {chips && (\n <div className=\"inline-flex shrink-0 items-center gap-1\">\n {chips}\n </div>\n )}\n </div>\n {meta && <div className=\"space-y-1\">{meta}</div>}\n {footer && (\n <div className=\"flex items-center justify-between\">{footer}</div>\n )}\n </div>\n </CardContent>\n </Card>\n );\n\n const maybePreview = (() => {\n if (!preview) return cardContent;\n try {\n /* eslint-disable @typescript-eslint/no-require-imports */\n const { HoverPreview } =\n require('./HoverPreview') as typeof import('./HoverPreview');\n /* eslint-enable @typescript-eslint/no-require-imports */\n return <HoverPreview trigger={cardContent} content={preview} />;\n } catch {\n return cardContent;\n }\n })();\n\n return (\n <Wrapper href={href} className={href ? 'block' : undefined}>\n {maybePreview}\n </Wrapper>\n );\n}\n"],"mappings":";;;;;;;;;;;AAOA,MAAM,qBAAqB,IAAI,mCAAmC;CAChE,UAAU;EACR,UAAU;GACR,SAAS;GACT,QAAQ;GACR,QAAQ;GACT;EACD,SAAS;GACP,SAAS;GACT,aAAa;GACd;EACF;CACD,iBAAiB;EAAE,UAAU;EAAW,SAAS;EAAe;CACjE,CAAC;AAcF,SAAgB,WAAW,EACzB,WACA,cACA,OACA,MACA,QACA,UACA,SACA,WACA,kBACA,MACA,SACA,GAAG,aACe;CAClB,MAAMA,UAA6B,OAAO,MAAM;CAChD,MAAM,cACJ,oBAAC;EACC,WAAW,GAAG,mBAAmB,EAAE,UAAU,CAAC,EAAE,UAAU;EAC1D,GAAI;YAEJ,oBAAC;GACC,WAAW,GAAG,mBAAmB,EAAE,SAAS,CAAC,EAAE,iBAAiB;aAEhE,qBAAC;IAAI,WAAU;;KACb,qBAAC;MAAI,WAAU;iBACb,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAI,WAAU;kBAAgC;SAAgB,EAC9D,gBACC,oBAAC;QAAI,WAAU;kBACZ;SACG;QAEJ,EACL,SACC,oBAAC;OAAI,WAAU;iBACZ;QACG;OAEJ;KACL,QAAQ,oBAAC;MAAI,WAAU;gBAAa;OAAW;KAC/C,UACC,oBAAC;MAAI,WAAU;gBAAqC;OAAa;;KAE/D;IACM;GACT;CAGT,MAAM,sBAAsB;AAC1B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;GAEF,MAAM,EAAE;AAGR,UAAO,oBAAC;IAAa,SAAS;IAAa,SAAS;KAAW;UACzD;AACN,UAAO;;KAEP;AAEJ,QACE,oBAAC;EAAc;EAAM,WAAW,OAAO,UAAU;YAC9C;GACO"}
1
+ {"version":3,"file":"EntityCard.js","names":[],"sources":["../../../src/components/molecules/EntityCard.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Card, CardContent } from '@contractspec/lib.ui-kit-web/ui/card';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\n\nconst entityCardVariants = cva('transition-all hover:shadow-2xs', {\n variants: {\n emphasis: {\n default: '',\n subtle: 'border-muted/60 bg-muted/20',\n strong: 'border-primary/50 bg-primary/5',\n },\n density: {\n compact: 'p-3',\n comfortable: 'p-4 md:p-5',\n },\n },\n defaultVariants: { emphasis: 'default', density: 'comfortable' },\n});\n\nexport type EntityCardProps = React.ComponentProps<typeof Card> &\n VariantProps<typeof entityCardVariants> & {\n cardTitle: React.ReactNode;\n cardSubtitle?: React.ReactNode;\n chips?: React.ReactNode; // right-aligned small chips\n meta?: React.ReactNode; // rows of icon+text data\n footer?: React.ReactNode; // actions area\n href?: string; // optional link wrapper\n contentClassName?: string;\n preview?: React.ReactNode; // hover preview content\n };\n\nexport function EntityCard({\n cardTitle,\n cardSubtitle,\n chips,\n meta,\n footer,\n emphasis,\n density,\n className,\n contentClassName,\n href,\n preview,\n ...cardProps\n}: EntityCardProps) {\n const Wrapper: React.ElementType = href ? 'a' : 'div';\n const cardContent = (\n <Card\n className={cn(entityCardVariants({ emphasis }), className)}\n {...cardProps}\n >\n <CardContent\n className={cn(entityCardVariants({ density }), contentClassName)}\n >\n <div className=\"space-y-3\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-lg font-medium\">{cardTitle}</div>\n {cardSubtitle && (\n <div className=\"text-muted-foreground text-base\">\n {cardSubtitle}\n </div>\n )}\n </div>\n {chips && (\n <div className=\"inline-flex shrink-0 items-center gap-1\">\n {chips}\n </div>\n )}\n </div>\n {meta && <div className=\"space-y-1\">{meta}</div>}\n {footer && (\n <div className=\"flex items-center justify-between\">{footer}</div>\n )}\n </div>\n </CardContent>\n </Card>\n );\n\n const maybePreview = (() => {\n if (!preview) return cardContent;\n try {\n /* eslint-disable @typescript-eslint/no-require-imports */\n const { HoverPreview } =\n require('./HoverPreview') as typeof import('./HoverPreview');\n /* eslint-enable @typescript-eslint/no-require-imports */\n return <HoverPreview trigger={cardContent} content={preview} />;\n } catch {\n return cardContent;\n }\n })();\n\n return (\n <Wrapper href={href} className={href ? 'block' : undefined}>\n {maybePreview}\n </Wrapper>\n );\n}\n"],"mappings":";;;;;;;;;;;AAOA,MAAM,qBAAqB,IAAI,mCAAmC;CAChE,UAAU;EACR,UAAU;GACR,SAAS;GACT,QAAQ;GACR,QAAQ;GACT;EACD,SAAS;GACP,SAAS;GACT,aAAa;GACd;EACF;CACD,iBAAiB;EAAE,UAAU;EAAW,SAAS;EAAe;CACjE,CAAC;AAcF,SAAgB,WAAW,EACzB,WACA,cACA,OACA,MACA,QACA,UACA,SACA,WACA,kBACA,MACA,SACA,GAAG,aACe;CAClB,MAAM,UAA6B,OAAO,MAAM;CAChD,MAAM,cACJ,oBAAC;EACC,WAAW,GAAG,mBAAmB,EAAE,UAAU,CAAC,EAAE,UAAU;EAC1D,GAAI;YAEJ,oBAAC;GACC,WAAW,GAAG,mBAAmB,EAAE,SAAS,CAAC,EAAE,iBAAiB;aAEhE,qBAAC;IAAI,WAAU;;KACb,qBAAC;MAAI,WAAU;iBACb,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAI,WAAU;kBAAgC;SAAgB,EAC9D,gBACC,oBAAC;QAAI,WAAU;kBACZ;SACG;QAEJ,EACL,SACC,oBAAC;OAAI,WAAU;iBACZ;QACG;OAEJ;KACL,QAAQ,oBAAC;MAAI,WAAU;gBAAa;OAAW;KAC/C,UACC,oBAAC;MAAI,WAAU;gBAAqC;OAAa;;KAE/D;IACM;GACT;CAGT,MAAM,sBAAsB;AAC1B,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;GAEF,MAAM,EAAE;AAGR,UAAO,oBAAC;IAAa,SAAS;IAAa,SAAS;KAAW;UACzD;AACN,UAAO;;KAEP;AAEJ,QACE,oBAAC;EAAc;EAAM,WAAW,OAAO,UAAU;YAC9C;GACO"}