@orangecheck/design 0.22.0 → 0.24.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.
@@ -1,5 +1,5 @@
1
- export { AccentList, AccentListItem, AccentListProps, AccentNote, AccentNoteProps, BrandBand, Callout, CalloutProps, CalloutTone, CheckList, CheckListProps, ComparisonRow, ComparisonTable, ComparisonTableProps, DataRow, DataRowProps, DefinitionItem, DefinitionList, DefinitionListProps, EmailCapture, EmailCaptureProps, EmptyState, EmptyStateCta, EmptyStateProps, Faq, FaqItem, FaqProps, FeatureCard, FeatureCardProps, HelpHint, HelpHintProps, MarketingHeading, MarketingHeadingProps, NumberedStep, NumberedStepProps, Section, SectionHeader, SectionHeaderProps, SectionProps, StatCard, StatCardProps, StatGrid, StatGridProps, StatItem, StatTile, Step, StepList, StepListProps, TwoToneHeading, TwoToneHeadingProps, VerifiedChip, VerifiedChipProps } from './composites.mjs';
2
- export { AppShell, AppShellProps, EcosystemSlug, EcosystemSwitcher, EcosystemSwitcherProps, FAMILY_PROPERTIES, FamilyCategory, FamilyProperty, LayoutSubHeader, LayoutSubHeaderProps, LayoutSubHeaderTag, OcAccountMenu, OcAccountMenuBuildInfo, OcAccountMenuItem, OcAccountMenuProps, OcAccountMenuSession, OcAccountMenuView, OcAccountMenuViewProps, OcAppBar, OcAppBarProps, OcDashboardHub, OcDashboardHubProps, OcDashboardShell, OcDashboardShellProps, OcDashboardTool, OcLogoDropdown, OcLogoDropdownProps, OcPrimaryNav, OcPrimaryNavLink, OcPrimaryNavProps, SITE_STATE_LABEL, SiteState, findFamilyProperty } from './chrome.mjs';
1
+ export { AccentList, AccentListItem, AccentListProps, AccentNote, AccentNoteProps, BrandBand, Callout, CalloutProps, CalloutTone, CheckList, CheckListProps, ComparisonRow, ComparisonTable, ComparisonTableProps, DataRow, DataRowProps, DefinitionItem, DefinitionList, DefinitionListProps, EmailCapture, EmailCaptureProps, EmptyState, EmptyStateCta, EmptyStateProps, Faq, FaqItem, FaqProps, FeatureCard, FeatureCardProps, HelpHint, HelpHintProps, MarketingHeading, MarketingHeadingProps, NumberedStep, NumberedStepProps, Panel, PanelProps, Section, SectionHeader, SectionHeaderProps, SectionProps, StatCard, StatCardProps, StatGrid, StatGridProps, StatItem, StatTile, Step, StepList, StepListProps, TwoToneHeading, TwoToneHeadingProps, VerifiedChip, VerifiedChipProps } from './composites.mjs';
2
+ export { AppShell, AppShellProps, EcosystemSlug, EcosystemSwitcher, EcosystemSwitcherProps, FAMILY_PROPERTIES, FamilyCategory, FamilyProperty, FooterColumn, FooterLink, LayoutSubHeader, LayoutSubHeaderProps, LayoutSubHeaderTag, OcAccountMenu, OcAccountMenuBuildInfo, OcAccountMenuItem, OcAccountMenuProps, OcAccountMenuSession, OcAccountMenuView, OcAccountMenuViewProps, OcAppBar, OcAppBarProps, OcDashboardHub, OcDashboardHubProps, OcDashboardShell, OcDashboardShellProps, OcDashboardTool, OcFamilyFooter, OcFamilyFooterBrand, OcFamilyFooterProps, OcLogoDropdown, OcLogoDropdownProps, OcPrimaryNav, OcPrimaryNavLink, OcPrimaryNavProps, SITE_STATE_LABEL, SiteState, findFamilyProperty } from './chrome.mjs';
3
3
  import 'react/jsx-runtime';
4
4
  import 'react';
5
5
  import '@orangecheck/auth-client';
@@ -1,5 +1,5 @@
1
- export { AccentList, AccentListItem, AccentListProps, AccentNote, AccentNoteProps, BrandBand, Callout, CalloutProps, CalloutTone, CheckList, CheckListProps, ComparisonRow, ComparisonTable, ComparisonTableProps, DataRow, DataRowProps, DefinitionItem, DefinitionList, DefinitionListProps, EmailCapture, EmailCaptureProps, EmptyState, EmptyStateCta, EmptyStateProps, Faq, FaqItem, FaqProps, FeatureCard, FeatureCardProps, HelpHint, HelpHintProps, MarketingHeading, MarketingHeadingProps, NumberedStep, NumberedStepProps, Section, SectionHeader, SectionHeaderProps, SectionProps, StatCard, StatCardProps, StatGrid, StatGridProps, StatItem, StatTile, Step, StepList, StepListProps, TwoToneHeading, TwoToneHeadingProps, VerifiedChip, VerifiedChipProps } from './composites.js';
2
- export { AppShell, AppShellProps, EcosystemSlug, EcosystemSwitcher, EcosystemSwitcherProps, FAMILY_PROPERTIES, FamilyCategory, FamilyProperty, LayoutSubHeader, LayoutSubHeaderProps, LayoutSubHeaderTag, OcAccountMenu, OcAccountMenuBuildInfo, OcAccountMenuItem, OcAccountMenuProps, OcAccountMenuSession, OcAccountMenuView, OcAccountMenuViewProps, OcAppBar, OcAppBarProps, OcDashboardHub, OcDashboardHubProps, OcDashboardShell, OcDashboardShellProps, OcDashboardTool, OcLogoDropdown, OcLogoDropdownProps, OcPrimaryNav, OcPrimaryNavLink, OcPrimaryNavProps, SITE_STATE_LABEL, SiteState, findFamilyProperty } from './chrome.js';
1
+ export { AccentList, AccentListItem, AccentListProps, AccentNote, AccentNoteProps, BrandBand, Callout, CalloutProps, CalloutTone, CheckList, CheckListProps, ComparisonRow, ComparisonTable, ComparisonTableProps, DataRow, DataRowProps, DefinitionItem, DefinitionList, DefinitionListProps, EmailCapture, EmailCaptureProps, EmptyState, EmptyStateCta, EmptyStateProps, Faq, FaqItem, FaqProps, FeatureCard, FeatureCardProps, HelpHint, HelpHintProps, MarketingHeading, MarketingHeadingProps, NumberedStep, NumberedStepProps, Panel, PanelProps, Section, SectionHeader, SectionHeaderProps, SectionProps, StatCard, StatCardProps, StatGrid, StatGridProps, StatItem, StatTile, Step, StepList, StepListProps, TwoToneHeading, TwoToneHeadingProps, VerifiedChip, VerifiedChipProps } from './composites.js';
2
+ export { AppShell, AppShellProps, EcosystemSlug, EcosystemSwitcher, EcosystemSwitcherProps, FAMILY_PROPERTIES, FamilyCategory, FamilyProperty, FooterColumn, FooterLink, LayoutSubHeader, LayoutSubHeaderProps, LayoutSubHeaderTag, OcAccountMenu, OcAccountMenuBuildInfo, OcAccountMenuItem, OcAccountMenuProps, OcAccountMenuSession, OcAccountMenuView, OcAccountMenuViewProps, OcAppBar, OcAppBarProps, OcDashboardHub, OcDashboardHubProps, OcDashboardShell, OcDashboardShellProps, OcDashboardTool, OcFamilyFooter, OcFamilyFooterBrand, OcFamilyFooterProps, OcLogoDropdown, OcLogoDropdownProps, OcPrimaryNav, OcPrimaryNavLink, OcPrimaryNavProps, SITE_STATE_LABEL, SiteState, findFamilyProperty } from './chrome.js';
3
3
  import 'react/jsx-runtime';
4
4
  import 'react';
5
5
  import '@orangecheck/auth-client';
@@ -179,11 +179,11 @@ var COL_CLASS = {
179
179
  4: "md:grid-cols-2 lg:grid-cols-4"
180
180
  };
181
181
  function StatGrid({ items, columns = 3, className = "" }) {
182
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `bg-border grid gap-px border ${COL_CLASS[columns]} ${className}`, children: items.map((it, i) => /* @__PURE__ */ jsxRuntime.jsx(Tile, { item: it }, `${it.label}-${i}`)) });
182
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `oc-stat-grid bg-border grid gap-px border ${COL_CLASS[columns]} ${className}`, children: items.map((it, i) => /* @__PURE__ */ jsxRuntime.jsx(Tile, { item: it }, `${it.label}-${i}`)) });
183
183
  }
184
184
  function Tile({ item }) {
185
185
  const tone = item.tone ?? (item.accent ? "primary" : "default");
186
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-background p-5", children: [
186
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "oc-stat-tile bg-background p-5", children: [
187
187
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground/80 font-mono text-[10px] tracking-widest uppercase", children: item.label }),
188
188
  /* @__PURE__ */ jsxRuntime.jsx(
189
189
  "div",
@@ -236,7 +236,7 @@ function StatBlock({ label, value, sub, delta, tone = "default", className }) {
236
236
  ] });
237
237
  }
238
238
  function StatCard({ pad = "default", className, ...stat }) {
239
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("border bg-card", pad === "sm" ? "p-3 md:p-4" : "p-5", className), children: /* @__PURE__ */ jsxRuntime.jsx(StatBlock, { ...stat }) });
239
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("oc-stat-card border bg-card", pad === "sm" ? "p-3 md:p-4" : "p-5", className), children: /* @__PURE__ */ jsxRuntime.jsx(StatBlock, { ...stat }) });
240
240
  }
241
241
  var FRAME = {
242
242
  info: "border-primary/30 bg-primary/5",
@@ -273,7 +273,7 @@ function DefinitionList({ items, className }) {
273
273
  "dl",
274
274
  {
275
275
  className: cn(
276
- "grid gap-x-5 gap-y-2 text-sm sm:grid-cols-[auto_1fr] sm:items-baseline",
276
+ "oc-deflist grid gap-x-5 gap-y-2 text-sm sm:grid-cols-[auto_1fr] sm:items-baseline",
277
277
  className
278
278
  ),
279
279
  children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(React2.Fragment, { children: [
@@ -289,7 +289,7 @@ function DataRow({ children, meta, action, as, className }) {
289
289
  Tag,
290
290
  {
291
291
  className: cn(
292
- "flex flex-col gap-1 py-3 sm:flex-row sm:items-baseline sm:justify-between sm:gap-4",
292
+ "oc-data-row flex flex-col gap-1 py-3 sm:flex-row sm:items-baseline sm:justify-between sm:gap-4",
293
293
  className
294
294
  ),
295
295
  children: [
@@ -302,6 +302,19 @@ function DataRow({ children, meta, action, as, className }) {
302
302
  }
303
303
  );
304
304
  }
305
+ function Panel({ label, title, action, flush, className, children }) {
306
+ const hasHeader = label || title || action;
307
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cn("oc-panel py-8", !flush && "border-t", className), children: [
308
+ hasHeader && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 flex items-start justify-between gap-3", children: [
309
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
310
+ label && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "label-mono text-primary mb-1", children: label }),
311
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "font-display text-lg font-bold tracking-tight", children: title })
312
+ ] }),
313
+ action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: action })
314
+ ] }),
315
+ children
316
+ ] });
317
+ }
305
318
  function TwoToneHeading({
306
319
  lead,
307
320
  muted,
@@ -2973,6 +2986,130 @@ function OcAppBar({
2973
2986
  }
2974
2987
  );
2975
2988
  }
2989
+ var GRID = {
2990
+ 1: "md:grid-cols-[1.2fr_1fr]",
2991
+ 2: "md:grid-cols-[1.2fr_1fr_1fr]",
2992
+ 3: "md:grid-cols-[1.2fr_1fr_1fr_1fr]",
2993
+ 4: "md:grid-cols-[1.2fr_1fr_1fr_1fr_1fr]",
2994
+ 5: "md:grid-cols-[1.2fr_1fr_1fr_1fr_1fr_1fr]"
2995
+ };
2996
+ var LINK_CLS = "text-muted-foreground hover:text-foreground font-mono text-xs tracking-wide lowercase transition-colors";
2997
+ function FooterLinkItem({ link }) {
2998
+ if (link.external) {
2999
+ return /* @__PURE__ */ jsxRuntime.jsxs("a", { href: link.href, target: "_blank", rel: "noreferrer", className: LINK_CLS, children: [
3000
+ "> ",
3001
+ link.label,
3002
+ " \u2197"
3003
+ ] });
3004
+ }
3005
+ return /* @__PURE__ */ jsxRuntime.jsxs(Link6__default.default, { href: link.href, className: LINK_CLS, children: [
3006
+ "> ",
3007
+ link.label
3008
+ ] });
3009
+ }
3010
+ function FooterColumnView({ column }) {
3011
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3012
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "label-mono text-primary mb-3", children: column.label }),
3013
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-2", children: column.links.map((link) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(FooterLinkItem, { link }) }, `${column.label}:${link.href}`)) })
3014
+ ] });
3015
+ }
3016
+ function familyColumn(category, label) {
3017
+ return {
3018
+ label,
3019
+ links: FAMILY_PROPERTIES.filter((p) => p.category === category).map(
3020
+ (p) => ({
3021
+ href: p.origin,
3022
+ label: p.label,
3023
+ external: true
3024
+ })
3025
+ )
3026
+ };
3027
+ }
3028
+ function OcFamilyFooter({
3029
+ brand,
3030
+ columns = [],
3031
+ family,
3032
+ legalBase = "https://ochk.io",
3033
+ className
3034
+ }) {
3035
+ const familyCols = [];
3036
+ if (family === "products" || family === "both") {
3037
+ familyCols.push(familyColumn("product", "\xA7 products"));
3038
+ }
3039
+ if (family === "protocols" || family === "both") {
3040
+ familyCols.push(familyColumn("protocol", "\xA7 protocols"));
3041
+ }
3042
+ const allColumns = [...familyCols, ...columns];
3043
+ const grid = GRID[allColumns.length] ?? GRID[3];
3044
+ const year = (/* @__PURE__ */ new Date()).getFullYear();
3045
+ const legal = (path) => `${legalBase}${path}`;
3046
+ return /* @__PURE__ */ jsxRuntime.jsx("footer", { className: cn("border-t", className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "container py-10 sm:py-12 md:py-16", children: [
3047
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-8 sm:grid-cols-2 sm:gap-10", grid), children: [
3048
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3049
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3050
+ brand.mark,
3051
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-display text-sm font-bold tracking-tight", children: brand.wordmark })
3052
+ ] }),
3053
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground mt-3 max-w-[34ch] text-sm leading-relaxed", children: brand.tagline }),
3054
+ brand.meta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: brand.meta })
3055
+ ] }),
3056
+ allColumns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(FooterColumnView, { column }, column.label))
3057
+ ] }),
3058
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-10 flex flex-col items-start justify-between gap-3 border-t pt-6 font-mono text-[11px] tracking-widest uppercase sm:flex-row sm:items-center", children: [
3059
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
3060
+ "\xA9 ",
3061
+ year,
3062
+ " orangecheck \xB7 mit + cc-by-4.0"
3063
+ ] }),
3064
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-muted-foreground/80 flex flex-wrap items-center gap-x-4 gap-y-1", children: [
3065
+ /* @__PURE__ */ jsxRuntime.jsx(
3066
+ "a",
3067
+ {
3068
+ href: legal("/privacy"),
3069
+ className: "hover:text-foreground transition-colors",
3070
+ children: "privacy"
3071
+ }
3072
+ ),
3073
+ /* @__PURE__ */ jsxRuntime.jsx(
3074
+ "a",
3075
+ {
3076
+ href: legal("/terms"),
3077
+ className: "hover:text-foreground transition-colors",
3078
+ children: "terms"
3079
+ }
3080
+ ),
3081
+ /* @__PURE__ */ jsxRuntime.jsx(
3082
+ "a",
3083
+ {
3084
+ href: legal("/security"),
3085
+ className: "hover:text-foreground transition-colors",
3086
+ children: "security"
3087
+ }
3088
+ ),
3089
+ /* @__PURE__ */ jsxRuntime.jsx(
3090
+ "a",
3091
+ {
3092
+ href: legal("/trademark"),
3093
+ className: "hover:text-foreground transition-colors",
3094
+ children: "trademarks"
3095
+ }
3096
+ ),
3097
+ /* @__PURE__ */ jsxRuntime.jsx(
3098
+ "a",
3099
+ {
3100
+ href: legal("/contact"),
3101
+ className: "hover:text-foreground transition-colors",
3102
+ children: "contact"
3103
+ }
3104
+ )
3105
+ ] }),
3106
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground inline-flex items-center gap-1.5", children: [
3107
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-primary text-[13px] leading-none", children: "\u20BF" }),
3108
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "built with bitcoin" })
3109
+ ] })
3110
+ ] })
3111
+ ] }) });
3112
+ }
2976
3113
 
2977
3114
  exports.AccentList = AccentList;
2978
3115
  exports.AccentNote = AccentNote;
@@ -2998,8 +3135,10 @@ exports.OcAccountMenuView = OcAccountMenuView;
2998
3135
  exports.OcAppBar = OcAppBar;
2999
3136
  exports.OcDashboardHub = OcDashboardHub;
3000
3137
  exports.OcDashboardShell = OcDashboardShell;
3138
+ exports.OcFamilyFooter = OcFamilyFooter;
3001
3139
  exports.OcLogoDropdown = OcLogoDropdown;
3002
3140
  exports.OcPrimaryNav = OcPrimaryNav;
3141
+ exports.Panel = Panel;
3003
3142
  exports.SITE_STATE_LABEL = SITE_STATE_LABEL;
3004
3143
  exports.Section = Section;
3005
3144
  exports.SectionHeader = SectionHeader;