@contractspec/lib.design-system 1.46.2 → 1.48.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.
- package/dist/components/agent/AgentMonitor.d.ts +2 -2
- package/dist/components/agent/ApprovalQueue.d.ts +2 -2
- package/dist/components/atoms/ActionButtons.d.ts +7 -7
- package/dist/components/atoms/ButtonLink.d.ts +2 -2
- package/dist/components/atoms/Cta.d.ts +1 -1
- package/dist/components/atoms/Cta.js.map +1 -1
- package/dist/components/atoms/DataChips.d.ts +5 -5
- package/dist/components/atoms/EmptyState.d.ts +2 -2
- package/dist/components/atoms/ErrorState.d.ts +2 -2
- package/dist/components/atoms/Input.d.ts +2 -2
- package/dist/components/atoms/Link.d.ts +2 -2
- package/dist/components/atoms/LoaderCircular.d.ts +2 -2
- package/dist/components/atoms/NavBrand.d.ts +2 -2
- package/dist/components/atoms/Stepper.d.ts +2 -2
- package/dist/components/atoms/Textarea.d.ts +2 -2
- package/dist/components/data-view/DataViewDetail.d.ts +2 -2
- package/dist/components/data-view/DataViewList.d.ts +2 -2
- package/dist/components/data-view/DataViewRenderer.d.ts +2 -2
- package/dist/components/data-view/DataViewRenderer.d.ts.map +1 -1
- package/dist/components/data-view/DataViewRenderer.js.map +1 -1
- package/dist/components/data-view/DataViewTable.d.ts +2 -2
- package/dist/components/data-view/utils.js.map +1 -1
- package/dist/components/forms/ActionForm.d.ts +2 -2
- package/dist/components/forms/FormCardLayout.d.ts +2 -2
- package/dist/components/forms/FormDialog.d.ts +2 -2
- package/dist/components/forms/FormLayout.d.ts +4 -4
- package/dist/components/forms/FormOneByOneLayout.d.ts +2 -2
- package/dist/components/forms/FormStepsLayout.d.ts +2 -2
- package/dist/components/forms/ZodForm.d.ts +2 -2
- package/dist/components/legal/atoms/DefinitionList.d.ts +2 -2
- package/dist/components/legal/atoms/KeyValueList.d.ts +2 -2
- package/dist/components/legal/atoms/LegalCallout.d.ts +2 -2
- package/dist/components/legal/atoms/LegalHeading.d.ts +2 -2
- package/dist/components/legal/atoms/LegalList.d.ts +2 -2
- package/dist/components/legal/atoms/LegalSection.d.ts +2 -2
- package/dist/components/legal/atoms/LegalText.d.ts +2 -2
- package/dist/components/legal/molecules/Consent.d.ts +3 -3
- package/dist/components/legal/molecules/ContactFields.d.ts +2 -2
- package/dist/components/legal/molecules/LegalMeta.d.ts +2 -2
- package/dist/components/legal/molecules/LegalTOC.d.ts +2 -2
- package/dist/components/legal/organisms/ContactForm.d.ts +2 -2
- package/dist/components/legal/organisms/GDPRDataRequest.d.ts +2 -2
- package/dist/components/legal/organisms/GDPRRights.d.ts +2 -2
- package/dist/components/legal/organisms/LegalPageLayout.d.ts +2 -2
- package/dist/components/legal/templates/ContactTemplate.d.ts +2 -2
- package/dist/components/legal/templates/ContactTemplate.js +0 -1
- package/dist/components/legal/templates/ContactTemplate.js.map +1 -1
- package/dist/components/legal/templates/CookiesTemplate.d.ts +2 -2
- package/dist/components/legal/templates/PrivacyTemplate.d.ts +2 -2
- package/dist/components/legal/templates/SalesTermsTemplate.d.ts +2 -2
- package/dist/components/legal/templates/TermsTemplate.d.ts +2 -2
- package/dist/components/marketing/MarketingCard.d.ts +2 -2
- package/dist/components/marketing/MarketingCard.js.map +1 -1
- package/dist/components/marketing/MarketingCardsSection.d.ts +2 -2
- package/dist/components/marketing/MarketingComparisonSection.d.ts +2 -2
- package/dist/components/marketing/MarketingIconCard.d.ts +2 -2
- package/dist/components/marketing/MarketingSection.d.ts +2 -2
- package/dist/components/marketing/MarketingStepCard.d.ts +2 -2
- package/dist/components/molecules/AiLinkButton.d.ts +2 -2
- package/dist/components/molecules/Breadcrumbs.d.ts +2 -2
- package/dist/components/molecules/CodeBlock/CodeBlock.d.ts +16 -0
- package/dist/components/molecules/CodeBlock/CodeBlock.d.ts.map +1 -0
- package/dist/components/molecules/CodeBlock/CodeBlock.js +54 -0
- package/dist/components/molecules/CodeBlock/CodeBlock.js.map +1 -0
- package/dist/components/molecules/CodeBlock/index.d.ts +2 -0
- package/dist/components/molecules/CodeBlock/types.d.ts +19 -0
- package/dist/components/molecules/CodeBlock/types.d.ts.map +1 -0
- package/dist/components/molecules/CommandPalette.d.ts +2 -2
- package/dist/components/molecules/CommandSearchTrigger.d.ts +2 -2
- package/dist/components/molecules/CommandTabs/CommandTabs.d.ts +13 -0
- package/dist/components/molecules/CommandTabs/CommandTabs.d.ts.map +1 -0
- package/dist/components/molecules/CommandTabs/CommandTabs.js +68 -0
- package/dist/components/molecules/CommandTabs/CommandTabs.js.map +1 -0
- package/dist/components/molecules/CommandTabs/index.d.ts +2 -0
- package/dist/components/molecules/CommandTabs/types.d.ts +19 -0
- package/dist/components/molecules/CommandTabs/types.d.ts.map +1 -0
- package/dist/components/molecules/CopyButton/CopyButton.d.ts +13 -0
- package/dist/components/molecules/CopyButton/CopyButton.d.ts.map +1 -0
- package/dist/components/molecules/CopyButton/CopyButton.js +42 -0
- package/dist/components/molecules/CopyButton/CopyButton.js.map +1 -0
- package/dist/components/molecules/CopyButton/index.d.ts +2 -0
- package/dist/components/molecules/CopyButton/types.d.ts +12 -0
- package/dist/components/molecules/CopyButton/types.d.ts.map +1 -0
- package/dist/components/molecules/EntityCard.d.ts +3 -3
- package/dist/components/molecules/EntityCard.js.map +1 -1
- package/dist/components/molecules/FiltersToolbar.d.ts +2 -2
- package/dist/components/molecules/FiltersToolbar.js +0 -1
- package/dist/components/molecules/FiltersToolbar.js.map +1 -1
- package/dist/components/molecules/HoverPreview.d.ts +2 -2
- package/dist/components/molecules/InstallCommand/InstallCommand.d.ts +27 -0
- package/dist/components/molecules/InstallCommand/InstallCommand.d.ts.map +1 -0
- package/dist/components/molecules/InstallCommand/InstallCommand.js +68 -0
- package/dist/components/molecules/InstallCommand/InstallCommand.js.map +1 -0
- package/dist/components/molecules/InstallCommand/index.d.ts +2 -0
- package/dist/components/molecules/InstallCommand/types.d.ts +17 -0
- package/dist/components/molecules/InstallCommand/types.d.ts.map +1 -0
- package/dist/components/molecules/LangSwitch.d.ts +2 -2
- package/dist/components/molecules/LoaderBlock.d.ts +2 -2
- package/dist/components/molecules/NavMain.d.ts +2 -2
- package/dist/components/molecules/NavUser.d.ts +2 -2
- package/dist/components/molecules/OverviewCard.d.ts +2 -2
- package/dist/components/molecules/SkeletonBlock/index.web.d.ts +2 -2
- package/dist/components/molecules/SkeletonCircle/index.web.d.ts +2 -2
- package/dist/components/molecules/SkeletonList/index.web.d.ts +2 -2
- package/dist/components/molecules/StatCard.d.ts +4 -4
- package/dist/components/molecules/StatusChip.d.ts +2 -2
- package/dist/components/molecules/hover-previews/Doc.d.ts +2 -2
- package/dist/components/molecules/hover-previews/Media.d.ts +2 -2
- package/dist/components/molecules/hover-previews/Simple.d.ts +2 -2
- package/dist/components/molecules/hover-previews/Stats.d.ts +2 -2
- package/dist/components/molecules/hover-previews/User.d.ts +2 -2
- package/dist/components/organisms/AcademyLayout.d.ts +2 -2
- package/dist/components/organisms/AppHeader.d.ts +2 -2
- package/dist/components/organisms/AppLayout.d.ts +2 -2
- package/dist/components/organisms/AppSidebar.d.ts +2 -2
- package/dist/components/organisms/EmptyDataList.d.ts +2 -2
- package/dist/components/organisms/EmptySearchResult.d.ts +2 -2
- package/dist/components/organisms/FAQSection.d.ts +2 -2
- package/dist/components/organisms/FeatureCarousel.d.ts +2 -2
- package/dist/components/organisms/FeaturesSection.d.ts +2 -2
- package/dist/components/organisms/Footer.d.ts +2 -2
- package/dist/components/organisms/Header.d.ts +4 -4
- package/dist/components/organisms/HeroResponsive.d.ts +2 -2
- package/dist/components/organisms/HeroSection.d.ts +2 -2
- package/dist/components/organisms/ListCardPage.d.ts +2 -2
- package/dist/components/organisms/ListGridPage.d.ts +2 -2
- package/dist/components/organisms/ListPageResponsive.d.ts +2 -2
- package/dist/components/organisms/ListTablePage.d.ts +2 -2
- package/dist/components/organisms/MarketingHeader.d.ts +2 -2
- package/dist/components/organisms/MarketingHeader.js +1 -1
- package/dist/components/organisms/MarketingHeader.js.map +1 -1
- package/dist/components/organisms/MarketingHeaderDesktop.d.ts +2 -2
- package/dist/components/organisms/MarketingHeaderMobile.d.ts +2 -2
- package/dist/components/organisms/MarketingLayout.d.ts +2 -2
- package/dist/components/organisms/PageHeaderResponsive.d.ts +2 -2
- package/dist/components/organisms/PricingCarousel.d.ts +2 -2
- package/dist/components/organisms/PricingSection.d.ts +2 -2
- package/dist/components/organisms/TestimonialCarousel.d.ts +2 -2
- package/dist/components/providers/PackageManagerProvider.d.ts +26 -0
- package/dist/components/providers/PackageManagerProvider.d.ts.map +1 -0
- package/dist/components/providers/PackageManagerProvider.js +50 -0
- package/dist/components/providers/PackageManagerProvider.js.map +1 -0
- package/dist/components/templates/lists/ListPageTemplate/index.web.d.ts +2 -2
- package/dist/components/templates/lists/ListPageTemplate/index.web.js +0 -1
- package/dist/components/templates/lists/ListPageTemplate/index.web.js.map +1 -1
- package/dist/hooks/useListUrlState.js.map +1 -1
- package/dist/index.d.ts +14 -1
- package/dist/index.js +6 -7
- package/dist/index.js.map +1 -1
- package/dist/lib/keyboard.js.map +1 -1
- package/dist/platform/useResponsive.js.map +1 -1
- package/dist/platform/withPlatformUI.js.map +1 -1
- package/dist/renderers/form-contract.d.ts +2 -2
- package/dist/theme/tokens.js.map +1 -1
- package/dist/theme/variants.d.ts +1 -1
- package/package.json +16 -13
- package/dist/components/molecules/SkeletonBlock/index.js +0 -1
- package/dist/components/molecules/SkeletonCircle/index.js +0 -1
- package/dist/components/molecules/SkeletonList/index.js +0 -1
- package/dist/components/templates/lists/ListPageTemplate/index.js +0 -2
- package/dist/components/templates/lists/ListPageTemplate/types.js +0 -1
- package/dist/renderers/index.js +0 -1
- package/dist/types/navigation.js +0 -1
|
@@ -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,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_runtime112 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_runtime112.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,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,12 +1,12 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import * as
|
|
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";
|
|
6
6
|
|
|
7
7
|
//#region src/components/molecules/EntityCard.d.ts
|
|
8
8
|
declare const entityCardVariants: (props?: ({
|
|
9
|
-
emphasis?: "
|
|
9
|
+
emphasis?: "strong" | "default" | "subtle" | null | undefined;
|
|
10
10
|
density?: "compact" | "comfortable" | null | undefined;
|
|
11
11
|
} & class_variance_authority_types7.ClassProp) | undefined) => string;
|
|
12
12
|
type EntityCardProps = React.ComponentProps<typeof Card> & VariantProps<typeof entityCardVariants> & {
|
|
@@ -32,7 +32,7 @@ declare function EntityCard({
|
|
|
32
32
|
href,
|
|
33
33
|
preview,
|
|
34
34
|
...cardProps
|
|
35
|
-
}: EntityCardProps):
|
|
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":[
|
|
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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime69 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):
|
|
33
|
+
}: FiltersToolbarProps): react_jsx_runtime69.JSX.Element;
|
|
34
34
|
//#endregion
|
|
35
35
|
export { FiltersToolbar };
|
|
36
36
|
//# sourceMappingURL=FiltersToolbar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiltersToolbar.js","names":[],"sources":["../../../src/components/molecules/FiltersToolbar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\nimport { Button, Input } from '../../index';\nimport { Badge } from '@contractspec/lib.ui-kit-web/ui/badge';\n\nexport interface ActiveFilterChip {\n key: string;\n label: React.ReactNode;\n onRemove?: () => void;\n}\n\nexport interface FiltersToolbarProps {\n className?: string;\n children?: React.ReactNode;\n right?: React.ReactNode;\n searchPlaceholder?: string;\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n onSearchSubmit?: () => void;\n debounceMs?: number;\n activeChips?: ActiveFilterChip[];\n onClearAll?: () => void;\n}\n\nexport function FiltersToolbar({\n className,\n children,\n right,\n searchPlaceholder,\n searchValue,\n onSearchChange,\n onSearchSubmit,\n debounceMs = 250,\n activeChips = [],\n onClearAll,\n}: FiltersToolbarProps) {\n const [q, setQ] = React.useState<string>(searchValue ?? '');\n\n React.useEffect(() => {\n setQ(searchValue ?? '');\n }, [searchValue]);\n\n React.useEffect(() => {\n if (!onSearchChange) return;\n const id = setTimeout(() => onSearchChange(q), debounceMs);\n return () => clearTimeout(id);\n }, [q, debounceMs, onSearchChange]);\n\n return (\n <div className={cn('space-y-2', className)}>\n <div className=\"flex flex-col items-stretch gap-2 md:flex-row md:items-center md:justify-between\">\n <div className=\"flex flex-1 items-center gap-2\">\n {onSearchChange ? (\n <div className=\"flex flex-1 items-center gap-2\">\n <Input\n value={q}\n onChange={(e) => setQ(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') onSearchSubmit?.();\n }}\n placeholder={searchPlaceholder}\n keyboard={{ kind: 'search' }}\n />\n <Button\n variant=\"outline\"\n onPress={() => onSearchSubmit?.()}\n className=\"shrink-0\"\n >\n Rechercher\n </Button>\n </div>\n ) : null}\n {children}\n </div>\n {right}\n </div>\n\n {(activeChips.length > 0 || onClearAll) && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {activeChips.map((c) => (\n <Badge\n key={c.key}\n variant=\"secondary\"\n className=\"inline-flex items-center gap-2\"\n >\n <span>{c.label}</span>\n {c.onRemove && (\n <button\n type=\"button\"\n aria-label=\"Supprimer le filtre\"\n onClick={c.onRemove}\n className=\"hover:bg-muted rounded-xs px-1 text-base\"\n >\n ×\n </button>\n )}\n </Badge>\n ))}\n {onClearAll && (\n <Button size=\"sm\" variant=\"ghost\" onPress={onClearAll}>\n Effacer les filtres\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"FiltersToolbar.js","names":[],"sources":["../../../src/components/molecules/FiltersToolbar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\nimport { Button, Input } from '../../index';\nimport { Badge } from '@contractspec/lib.ui-kit-web/ui/badge';\n\nexport interface ActiveFilterChip {\n key: string;\n label: React.ReactNode;\n onRemove?: () => void;\n}\n\nexport interface FiltersToolbarProps {\n className?: string;\n children?: React.ReactNode;\n right?: React.ReactNode;\n searchPlaceholder?: string;\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n onSearchSubmit?: () => void;\n debounceMs?: number;\n activeChips?: ActiveFilterChip[];\n onClearAll?: () => void;\n}\n\nexport function FiltersToolbar({\n className,\n children,\n right,\n searchPlaceholder,\n searchValue,\n onSearchChange,\n onSearchSubmit,\n debounceMs = 250,\n activeChips = [],\n onClearAll,\n}: FiltersToolbarProps) {\n const [q, setQ] = React.useState<string>(searchValue ?? '');\n\n React.useEffect(() => {\n setQ(searchValue ?? '');\n }, [searchValue]);\n\n React.useEffect(() => {\n if (!onSearchChange) return;\n const id = setTimeout(() => onSearchChange(q), debounceMs);\n return () => clearTimeout(id);\n }, [q, debounceMs, onSearchChange]);\n\n return (\n <div className={cn('space-y-2', className)}>\n <div className=\"flex flex-col items-stretch gap-2 md:flex-row md:items-center md:justify-between\">\n <div className=\"flex flex-1 items-center gap-2\">\n {onSearchChange ? (\n <div className=\"flex flex-1 items-center gap-2\">\n <Input\n value={q}\n onChange={(e) => setQ(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') onSearchSubmit?.();\n }}\n placeholder={searchPlaceholder}\n keyboard={{ kind: 'search' }}\n />\n <Button\n variant=\"outline\"\n onPress={() => onSearchSubmit?.()}\n className=\"shrink-0\"\n >\n Rechercher\n </Button>\n </div>\n ) : null}\n {children}\n </div>\n {right}\n </div>\n\n {(activeChips.length > 0 || onClearAll) && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {activeChips.map((c) => (\n <Badge\n key={c.key}\n variant=\"secondary\"\n className=\"inline-flex items-center gap-2\"\n >\n <span>{c.label}</span>\n {c.onRemove && (\n <button\n type=\"button\"\n aria-label=\"Supprimer le filtre\"\n onClick={c.onRemove}\n className=\"hover:bg-muted rounded-xs px-1 text-base\"\n >\n ×\n </button>\n )}\n </Badge>\n ))}\n {onClearAll && (\n <Button size=\"sm\" variant=\"ghost\" onPress={onClearAll}>\n Effacer les filtres\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAwBA,SAAgB,eAAe,EAC7B,WACA,UACA,OACA,mBACA,aACA,gBACA,gBACA,aAAa,KACb,cAAc,EAAE,EAChB,cACsB;CACtB,MAAM,CAAC,GAAG,QAAQ,MAAM,SAAiB,eAAe,GAAG;AAE3D,OAAM,gBAAgB;AACpB,OAAK,eAAe,GAAG;IACtB,CAAC,YAAY,CAAC;AAEjB,OAAM,gBAAgB;AACpB,MAAI,CAAC,eAAgB;EACrB,MAAM,KAAK,iBAAiB,eAAe,EAAE,EAAE,WAAW;AAC1D,eAAa,aAAa,GAAG;IAC5B;EAAC;EAAG;EAAY;EAAe,CAAC;AAEnC,QACE,qBAAC;EAAI,WAAW,GAAG,aAAa,UAAU;aACxC,qBAAC;GAAI,WAAU;cACb,qBAAC;IAAI,WAAU;eACZ,iBACC,qBAAC;KAAI,WAAU;gBACb,oBAAC;MACC,OAAO;MACP,WAAW,MAAM,KAAK,EAAE,OAAO,MAAM;MACrC,YAAY,MAAM;AAChB,WAAI,EAAE,QAAQ,QAAS,mBAAkB;;MAE3C,aAAa;MACb,UAAU,EAAE,MAAM,UAAU;OAC5B,EACF,oBAAC;MACC,SAAQ;MACR,eAAe,kBAAkB;MACjC,WAAU;gBACX;OAEQ;MACL,GACJ,MACH;KACG,EACL;IACG,GAEJ,YAAY,SAAS,KAAK,eAC1B,qBAAC;GAAI,WAAU;cACZ,YAAY,KAAK,MAChB,qBAAC;IAEC,SAAQ;IACR,WAAU;eAEV,oBAAC,oBAAM,EAAE,QAAa,EACrB,EAAE,YACD,oBAAC;KACC,MAAK;KACL,cAAW;KACX,SAAS,EAAE;KACX,WAAU;eACX;MAEQ;MAbN,EAAE,IAeD,CACR,EACD,cACC,oBAAC;IAAO,MAAK;IAAK,SAAQ;IAAQ,SAAS;cAAY;KAE9C;IAEP;GAEJ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime51 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):
|
|
18
|
+
}: HoverPreviewProps): react_jsx_runtime51.JSX.Element;
|
|
19
19
|
//#endregion
|
|
20
20
|
export { HoverPreview };
|
|
21
21
|
//# sourceMappingURL=HoverPreview.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { InstallCommandProps } from "./types.js";
|
|
2
|
+
import * as react_jsx_runtime114 from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/components/molecules/InstallCommand/InstallCommand.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Convenience component for displaying package installation commands.
|
|
8
|
+
* Automatically generates the correct command for each package manager.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <InstallCommand package="@contractspec/lib.contracts" />
|
|
13
|
+
* <InstallCommand package={["react", "react-dom"]} />
|
|
14
|
+
* <InstallCommand package="typescript" dev />
|
|
15
|
+
* <InstallCommand package="create-next-app" type="exec" />
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
declare function InstallCommand({
|
|
19
|
+
package: packageName,
|
|
20
|
+
type,
|
|
21
|
+
dev,
|
|
22
|
+
global,
|
|
23
|
+
...props
|
|
24
|
+
}: InstallCommandProps): react_jsx_runtime114.JSX.Element;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { InstallCommand };
|
|
27
|
+
//# sourceMappingURL=InstallCommand.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { CommandTabs } from "../CommandTabs/CommandTabs.js";
|
|
4
|
+
import { useMemo } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/components/molecules/InstallCommand/InstallCommand.tsx
|
|
8
|
+
function buildCommand(pm, packageNames, type, dev, global) {
|
|
9
|
+
const packages = packageNames.join(" ");
|
|
10
|
+
if (type === "exec") switch (pm) {
|
|
11
|
+
case "bun": return `bunx ${packages}`;
|
|
12
|
+
case "npm": return `npx ${packages}`;
|
|
13
|
+
case "yarn": return `yarn dlx ${packages}`;
|
|
14
|
+
case "pnpm": return `pnpm dlx ${packages}`;
|
|
15
|
+
}
|
|
16
|
+
if (type === "create") switch (pm) {
|
|
17
|
+
case "bun": return `bun create ${packages}`;
|
|
18
|
+
case "npm": return `npm create ${packages}`;
|
|
19
|
+
case "yarn": return `yarn create ${packages}`;
|
|
20
|
+
case "pnpm": return `pnpm create ${packages}`;
|
|
21
|
+
}
|
|
22
|
+
if (type === "run") switch (pm) {
|
|
23
|
+
case "bun": return `bun run ${packages}`;
|
|
24
|
+
case "npm": return `npm run ${packages}`;
|
|
25
|
+
case "yarn": return `yarn ${packages}`;
|
|
26
|
+
case "pnpm": return `pnpm ${packages}`;
|
|
27
|
+
}
|
|
28
|
+
const flags = [dev ? pm === "npm" ? "--save-dev" : "-D" : "", global ? "-g" : ""].filter(Boolean).join(" ");
|
|
29
|
+
switch (pm) {
|
|
30
|
+
case "bun": return `bun add ${packages}${flags ? ` ${flags}` : ""}`;
|
|
31
|
+
case "npm": return `npm install ${packages}${flags ? ` ${flags}` : ""}`;
|
|
32
|
+
case "yarn": return `yarn add ${packages}${flags ? ` ${flags}` : ""}`;
|
|
33
|
+
case "pnpm": return `pnpm add ${packages}${flags ? ` ${flags}` : ""}`;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Convenience component for displaying package installation commands.
|
|
38
|
+
* Automatically generates the correct command for each package manager.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```tsx
|
|
42
|
+
* <InstallCommand package="@contractspec/lib.contracts" />
|
|
43
|
+
* <InstallCommand package={["react", "react-dom"]} />
|
|
44
|
+
* <InstallCommand package="typescript" dev />
|
|
45
|
+
* <InstallCommand package="create-next-app" type="exec" />
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
function InstallCommand({ package: packageName, type = "add", dev = false, global = false, ...props }) {
|
|
49
|
+
const packageNames = useMemo(() => Array.isArray(packageName) ? packageName : [packageName], [packageName]);
|
|
50
|
+
return /* @__PURE__ */ jsx(CommandTabs, {
|
|
51
|
+
commands: useMemo(() => ({
|
|
52
|
+
bun: buildCommand("bun", packageNames, type, dev, global),
|
|
53
|
+
npm: buildCommand("npm", packageNames, type, dev, global),
|
|
54
|
+
yarn: buildCommand("yarn", packageNames, type, dev, global),
|
|
55
|
+
pnpm: buildCommand("pnpm", packageNames, type, dev, global)
|
|
56
|
+
}), [
|
|
57
|
+
packageNames,
|
|
58
|
+
type,
|
|
59
|
+
dev,
|
|
60
|
+
global
|
|
61
|
+
]),
|
|
62
|
+
...props
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
//#endregion
|
|
67
|
+
export { InstallCommand };
|
|
68
|
+
//# sourceMappingURL=InstallCommand.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { HTMLAttributes } from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/components/molecules/InstallCommand/types.d.ts
|
|
4
|
+
type InstallCommandType = 'add' | 'install' | 'create' | 'run' | 'exec';
|
|
5
|
+
interface InstallCommandProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
6
|
+
/** The package name(s) to install */
|
|
7
|
+
package: string | string[];
|
|
8
|
+
/** The type of command (defaults to 'add' for package installation) */
|
|
9
|
+
type?: InstallCommandType;
|
|
10
|
+
/** Whether this is a dev dependency (adds -D flag) */
|
|
11
|
+
dev?: boolean;
|
|
12
|
+
/** Whether this is a global installation (adds -g flag) */
|
|
13
|
+
global?: boolean;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { InstallCommandProps, InstallCommandType };
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime42 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):
|
|
20
|
+
}: LangSwitchProps): react_jsx_runtime42.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
|
|
2
|
+
import * as react_jsx_runtime74 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):
|
|
16
|
+
}: LoaderBlockProps): react_jsx_runtime74.JSX.Element;
|
|
17
17
|
//#endregion
|
|
18
18
|
export { LoaderBlock };
|
|
19
19
|
//# sourceMappingURL=LoaderBlock.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HeaderNavItem } from "../../types/navigation.js";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime16 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/molecules/NavMain.d.ts
|
|
5
5
|
declare function NavMain({
|
|
@@ -8,7 +8,7 @@ declare function NavMain({
|
|
|
8
8
|
}: {
|
|
9
9
|
items: HeaderNavItem[];
|
|
10
10
|
className?: string;
|
|
11
|
-
}):
|
|
11
|
+
}): react_jsx_runtime16.JSX.Element;
|
|
12
12
|
//#endregion
|
|
13
13
|
export { NavMain };
|
|
14
14
|
//# sourceMappingURL=NavMain.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UserMenuItem } from "../../types/navigation.js";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime17 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/molecules/NavUser.d.ts
|
|
5
5
|
declare function NavUser({
|
|
@@ -12,7 +12,7 @@ declare function NavUser({
|
|
|
12
12
|
email?: string;
|
|
13
13
|
imageUrl?: string;
|
|
14
14
|
items: UserMenuItem[];
|
|
15
|
-
}):
|
|
15
|
+
}): react_jsx_runtime17.JSX.Element;
|
|
16
16
|
//#endregion
|
|
17
17
|
export { NavUser };
|
|
18
18
|
//# sourceMappingURL=NavUser.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime50 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/molecules/OverviewCard.d.ts
|
|
5
5
|
interface OverviewCardProps {
|
|
@@ -15,7 +15,7 @@ declare function OverviewCard({
|
|
|
15
15
|
href,
|
|
16
16
|
preview,
|
|
17
17
|
ctaLabel
|
|
18
|
-
}: OverviewCardProps):
|
|
18
|
+
}: OverviewCardProps): react_jsx_runtime50.JSX.Element;
|
|
19
19
|
//#endregion
|
|
20
20
|
export { OverviewCard };
|
|
21
21
|
//# sourceMappingURL=OverviewCard.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SkeletonBlockProps } from "./types.js";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime117 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/molecules/SkeletonBlock/index.web.d.ts
|
|
5
5
|
declare function SkeletonBlock({
|
|
@@ -7,7 +7,7 @@ declare function SkeletonBlock({
|
|
|
7
7
|
h,
|
|
8
8
|
rounded,
|
|
9
9
|
className
|
|
10
|
-
}: SkeletonBlockProps):
|
|
10
|
+
}: SkeletonBlockProps): react_jsx_runtime117.JSX.Element;
|
|
11
11
|
//#endregion
|
|
12
12
|
export { SkeletonBlock };
|
|
13
13
|
//# sourceMappingURL=index.web.d.ts.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { SkeletonCircleProps } from "./types.js";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime116 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/molecules/SkeletonCircle/index.web.d.ts
|
|
5
5
|
declare function SkeletonCircle({
|
|
6
6
|
size,
|
|
7
7
|
sizeClass,
|
|
8
8
|
className
|
|
9
|
-
}: SkeletonCircleProps):
|
|
9
|
+
}: SkeletonCircleProps): react_jsx_runtime116.JSX.Element;
|
|
10
10
|
//#endregion
|
|
11
11
|
export { SkeletonCircle };
|
|
12
12
|
//# sourceMappingURL=index.web.d.ts.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { SkeletonListProps } from "./types.js";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime118 from "react/jsx-runtime";
|
|
3
3
|
|
|
4
4
|
//#region src/components/molecules/SkeletonList/index.web.d.ts
|
|
5
5
|
declare function SkeletonList({
|
|
6
6
|
count,
|
|
7
7
|
className
|
|
8
|
-
}: SkeletonListProps):
|
|
8
|
+
}: SkeletonListProps): react_jsx_runtime118.JSX.Element;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { SkeletonList };
|
|
11
11
|
//# sourceMappingURL=index.web.d.ts.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import * as
|
|
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_types8 from "class-variance-authority/types";
|
|
6
6
|
|
|
7
7
|
//#region src/components/molecules/StatCard.d.ts
|
|
8
8
|
declare const statVariants: (props?: ({
|
|
9
|
-
emphasis?: "
|
|
9
|
+
emphasis?: "strong" | "default" | "subtle" | null | undefined;
|
|
10
10
|
density?: "compact" | "comfortable" | null | undefined;
|
|
11
11
|
} & class_variance_authority_types8.ClassProp) | undefined) => string;
|
|
12
12
|
type StatCardProps = React.ComponentProps<typeof Card> & VariantProps<typeof statVariants> & {
|
|
@@ -24,14 +24,14 @@ declare function StatCard({
|
|
|
24
24
|
density,
|
|
25
25
|
className,
|
|
26
26
|
...props
|
|
27
|
-
}: StatCardProps):
|
|
27
|
+
}: StatCardProps): react_jsx_runtime48.JSX.Element;
|
|
28
28
|
declare function StatCardGroup({
|
|
29
29
|
children,
|
|
30
30
|
className
|
|
31
31
|
}: {
|
|
32
32
|
children: React.ReactNode;
|
|
33
33
|
className?: string;
|
|
34
|
-
}):
|
|
34
|
+
}): react_jsx_runtime48.JSX.Element;
|
|
35
35
|
//#endregion
|
|
36
36
|
export { StatCard, StatCardGroup };
|
|
37
37
|
//# sourceMappingURL=StatCard.d.ts.map
|