@ship-it-ui/shipit 0.0.15 → 0.0.16

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/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { BadgeProps, DataTableProps, DataTableColumn } from '@ship-it-ui/ui';
1
+ import { BadgeProps, HeadingLevel, DataTableProps, DataTableColumn } from '@ship-it-ui/ui';
2
2
  export { cn } from '@ship-it-ui/ui';
3
3
  import * as react from 'react';
4
4
  import { HTMLAttributes, ReactNode, ButtonHTMLAttributes, MouseEventHandler, SVGAttributes, Ref } from 'react';
@@ -567,6 +567,12 @@ declare const PathOverlay: react.ForwardRefExoticComponent<PathOverlayProps & re
567
567
  */
568
568
  interface CTAStripProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
569
569
  title: ReactNode;
570
+ /**
571
+ * Heading level for the title. Default `'h2'`. Marketing pages typically
572
+ * place a CTAStrip between sections, so an `h2` matches the section
573
+ * hierarchy under the page `h1`.
574
+ */
575
+ titleAs?: HeadingLevel;
570
576
  description?: ReactNode;
571
577
  actions?: ReactNode;
572
578
  }
@@ -585,12 +591,23 @@ interface FeatureGridProps extends HTMLAttributes<HTMLDivElement> {
585
591
  features: ReadonlyArray<Feature>;
586
592
  /** Columns at the largest breakpoint. Default 3. */
587
593
  columns?: 2 | 3 | 4;
594
+ /**
595
+ * Heading level for each feature's title. Default `'h3'` — features sit
596
+ * under a section `h2` on most marketing pages.
597
+ */
598
+ featureTitleAs?: HeadingLevel;
588
599
  }
589
600
  declare const FeatureGrid: react.ForwardRefExoticComponent<FeatureGridProps & react.RefAttributes<HTMLDivElement>>;
590
601
 
591
602
  /**
592
603
  * Footer — site footer with brand on the left and grouped link columns on
593
604
  * the right, plus a copyright line below a divider.
605
+ *
606
+ * Each link column is rendered as a proper `<ul>` of `<li>` link rows so
607
+ * search engines pick up the footer-nav hierarchy correctly. Pass
608
+ * `address` for a contact block that renders inside `<address>` (the
609
+ * semantic element for organization contact info — improves local SEO and
610
+ * structured-data extraction).
594
611
  */
595
612
  interface FooterLink {
596
613
  label: ReactNode;
@@ -608,12 +625,18 @@ interface FooterProps extends HTMLAttributes<HTMLElement> {
608
625
  copyright?: ReactNode;
609
626
  /** Right-side closing line (e.g., `made with care · san francisco`). */
610
627
  closing?: ReactNode;
628
+ /**
629
+ * Optional contact / address block. Rendered inside `<address>` next to the
630
+ * brand for org contact info (phone, email, mailing address).
631
+ */
632
+ address?: ReactNode;
611
633
  }
612
634
  declare const Footer: react.ForwardRefExoticComponent<FooterProps & react.RefAttributes<HTMLElement>>;
613
635
 
614
636
  /**
615
637
  * Hero — landing-page top section. Optional eyebrow / pill above the headline,
616
- * a large heading (children of `<h1>`), a body description, and an action row.
638
+ * a large heading (children of `<h1>` by default), a body description, and an
639
+ * action row.
617
640
  *
618
641
  * Designed for marketing surfaces only — do not bring this into the app.
619
642
  */
@@ -622,6 +645,12 @@ interface HeroProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
622
645
  eyebrow?: ReactNode;
623
646
  /** Headline. Pass JSX to highlight a phrase (e.g., `<span className="text-accent">…</span>`). */
624
647
  title: ReactNode;
648
+ /**
649
+ * Heading level for the title. Default `'h1'` — only override on pages that
650
+ * already have an `<h1>` elsewhere (e.g., a section hero inside a longer
651
+ * landing page).
652
+ */
653
+ titleAs?: HeadingLevel;
625
654
  /** Subheading. */
626
655
  description?: ReactNode;
627
656
  /** Action buttons row. */
@@ -644,6 +673,12 @@ declare const Hero: react.ForwardRefExoticComponent<HeroProps & react.RefAttribu
644
673
  * background for the "recommended" tier. Use `priceUnit` for per-period
645
674
  * suffixes (e.g. `/ user / mo`) so the unit lays out next to the price
646
675
  * baseline-aligned and wraps cleanly when there isn't room.
676
+ *
677
+ * Emits a schema.org `Offer` JSON-LD entity when `priceCurrency` is
678
+ * provided AND a numeric `priceAmount` (or a parseable `price` string like
679
+ * `"$29"`) is supplied. Cards where the price isn't machine-readable
680
+ * (e.g. `"Talk to us"`) skip JSON-LD emission unless the consumer passes
681
+ * `priceAmount` explicitly. Pass `noStructuredData` to opt out entirely.
647
682
  */
648
683
  interface PricingCardProps extends HTMLAttributes<HTMLDivElement> {
649
684
  /** Tier name — e.g., `Pro`, `Team`. */
@@ -660,12 +695,46 @@ interface PricingCardProps extends HTMLAttributes<HTMLDivElement> {
660
695
  action?: ReactNode;
661
696
  /** Highlight as the recommended tier. */
662
697
  featured?: boolean;
698
+ /**
699
+ * Heading level for the tier name. Default `'h3'` — pricing tables live
700
+ * under a section `h2` on most pricing pages.
701
+ */
702
+ tierAs?: HeadingLevel;
703
+ /**
704
+ * ISO 4217 currency code (e.g. `'USD'`, `'EUR'`). REQUIRED to emit the
705
+ * `Offer` JSON-LD — without it the script is suppressed.
706
+ */
707
+ priceCurrency?: string;
708
+ /**
709
+ * Explicit machine-readable price (number). When omitted, parsed from the
710
+ * visible `price` string by stripping non-numeric characters. Pass this
711
+ * directly when `price` is JSX or contains unusual formatting.
712
+ */
713
+ priceAmount?: number;
714
+ /**
715
+ * schema.org `availability` URL, typically `'https://schema.org/InStock'`.
716
+ */
717
+ availability?: string;
718
+ /** Optional URL of the tier's product/checkout page. */
719
+ url?: string;
720
+ /** String version of `tier` for the JSON-LD `name`. Required if `tier` is JSX. */
721
+ tierName?: string;
722
+ /** String version of `description` for the JSON-LD `description`. */
723
+ descriptionText?: string;
724
+ /** Opt out of emitting the `Offer` JSON-LD script. */
725
+ noStructuredData?: boolean;
663
726
  }
664
727
  declare const PricingCard: react.ForwardRefExoticComponent<PricingCardProps & react.RefAttributes<HTMLDivElement>>;
665
728
 
666
729
  /**
667
730
  * Testimonial — pull-quote with author + role. Centered for marketing
668
731
  * surfaces.
732
+ *
733
+ * Emits a schema.org `Review` JSON-LD entity by default. Pass `rating`
734
+ * (1–5) for `reviewRating` and `itemReviewedName` (plus optional `url`)
735
+ * for `itemReviewed` to make the JSON-LD eligible for Google's Review
736
+ * rich results. Without those it still emits a minimal `Review`. Pass
737
+ * `noStructuredData` to suppress the JSON-LD script entirely.
669
738
  */
670
739
  interface TestimonialProps extends Omit<HTMLAttributes<HTMLElement>, 'cite' | 'role'> {
671
740
  /** The quoted body. */
@@ -676,6 +745,23 @@ interface TestimonialProps extends Omit<HTMLAttributes<HTMLElement>, 'cite' | 'r
676
745
  role?: ReactNode;
677
746
  /** Avatar initials or full node. */
678
747
  avatar?: ReactNode;
748
+ /**
749
+ * String version of `quote` for the JSON-LD `reviewBody` field. Required
750
+ * when `quote` is JSX — without it the JSON-LD script is suppressed.
751
+ */
752
+ quoteText?: string;
753
+ /** String version of `author` for the JSON-LD `author.name`. */
754
+ authorName?: string;
755
+ /** String version of `role` for the JSON-LD `author.jobTitle`. */
756
+ authorJobTitle?: string;
757
+ /** Star rating (1–5). When provided, emitted as `reviewRating`. */
758
+ rating?: number;
759
+ /** Name of the thing being endorsed (product / service / company). */
760
+ itemReviewedName?: string;
761
+ /** Optional URL of the thing being endorsed. */
762
+ url?: string;
763
+ /** Opt out of emitting the schema.org `Review` JSON-LD script. */
764
+ noStructuredData?: boolean;
679
765
  }
680
766
  declare const Testimonial: react.ForwardRefExoticComponent<TestimonialProps & react.RefAttributes<HTMLElement>>;
681
767
 
@@ -687,6 +773,11 @@ declare const Testimonial: react.ForwardRefExoticComponent<TestimonialProps & re
687
773
  *
688
774
  * When `onClick` is provided the whole card becomes a button; otherwise it
689
775
  * renders as a plain `<div>`.
776
+ *
777
+ * Emits a schema.org `SoftwareApplication` JSON-LD entity by default with
778
+ * `name`, `dateModified` (from `lastSyncedAt`), and consumer-supplied
779
+ * `applicationCategory` / `url` / `softwareVersion`. Skipped when `name` is
780
+ * JSX without a string fallback. Pass `noStructuredData` to suppress.
690
781
  */
691
782
  type ConnectorStatus = 'connected' | 'syncing' | 'error' | 'disconnected';
692
783
  interface ConnectorCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'onClick'> {
@@ -712,6 +803,16 @@ interface ConnectorCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title
712
803
  * `button-name`). Optional otherwise.
713
804
  */
714
805
  accessibleName?: string;
806
+ /** String version of `name` for the JSON-LD `name` field. */
807
+ nameText?: string;
808
+ /** schema.org `applicationCategory` (e.g. `'CRM'`, `'DataConnector'`). */
809
+ applicationCategory?: string;
810
+ /** Connector detail URL — emitted as the entity `url`. */
811
+ url?: string;
812
+ /** Optional `softwareVersion` string. */
813
+ softwareVersion?: string;
814
+ /** Opt out of emitting the `SoftwareApplication` JSON-LD script. */
815
+ noStructuredData?: boolean;
715
816
  }
716
817
  declare const ConnectorCard: react.ForwardRefExoticComponent<ConnectorCardProps & react.RefAttributes<HTMLDivElement>>;
717
818
 
@@ -766,6 +867,12 @@ interface NotifRowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
766
867
  body?: ReactNode;
767
868
  /** Right-aligned relative time string (e.g. `9:32`, `Mon`). */
768
869
  time?: ReactNode;
870
+ /**
871
+ * Machine-readable ISO 8601 string or `Date` for the notification's
872
+ * timestamp. When set, the visible `time` is wrapped in
873
+ * `<time dateTime="…">` so the row is crawlable / AI-readable.
874
+ */
875
+ dateTime?: string | Date;
769
876
  /** Coloring of the unread dot. */
770
877
  tone?: NotifTone;
771
878
  /** When true, render the unread dot. */
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { BadgeProps, DataTableProps, DataTableColumn } from '@ship-it-ui/ui';
1
+ import { BadgeProps, HeadingLevel, DataTableProps, DataTableColumn } from '@ship-it-ui/ui';
2
2
  export { cn } from '@ship-it-ui/ui';
3
3
  import * as react from 'react';
4
4
  import { HTMLAttributes, ReactNode, ButtonHTMLAttributes, MouseEventHandler, SVGAttributes, Ref } from 'react';
@@ -567,6 +567,12 @@ declare const PathOverlay: react.ForwardRefExoticComponent<PathOverlayProps & re
567
567
  */
568
568
  interface CTAStripProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
569
569
  title: ReactNode;
570
+ /**
571
+ * Heading level for the title. Default `'h2'`. Marketing pages typically
572
+ * place a CTAStrip between sections, so an `h2` matches the section
573
+ * hierarchy under the page `h1`.
574
+ */
575
+ titleAs?: HeadingLevel;
570
576
  description?: ReactNode;
571
577
  actions?: ReactNode;
572
578
  }
@@ -585,12 +591,23 @@ interface FeatureGridProps extends HTMLAttributes<HTMLDivElement> {
585
591
  features: ReadonlyArray<Feature>;
586
592
  /** Columns at the largest breakpoint. Default 3. */
587
593
  columns?: 2 | 3 | 4;
594
+ /**
595
+ * Heading level for each feature's title. Default `'h3'` — features sit
596
+ * under a section `h2` on most marketing pages.
597
+ */
598
+ featureTitleAs?: HeadingLevel;
588
599
  }
589
600
  declare const FeatureGrid: react.ForwardRefExoticComponent<FeatureGridProps & react.RefAttributes<HTMLDivElement>>;
590
601
 
591
602
  /**
592
603
  * Footer — site footer with brand on the left and grouped link columns on
593
604
  * the right, plus a copyright line below a divider.
605
+ *
606
+ * Each link column is rendered as a proper `<ul>` of `<li>` link rows so
607
+ * search engines pick up the footer-nav hierarchy correctly. Pass
608
+ * `address` for a contact block that renders inside `<address>` (the
609
+ * semantic element for organization contact info — improves local SEO and
610
+ * structured-data extraction).
594
611
  */
595
612
  interface FooterLink {
596
613
  label: ReactNode;
@@ -608,12 +625,18 @@ interface FooterProps extends HTMLAttributes<HTMLElement> {
608
625
  copyright?: ReactNode;
609
626
  /** Right-side closing line (e.g., `made with care · san francisco`). */
610
627
  closing?: ReactNode;
628
+ /**
629
+ * Optional contact / address block. Rendered inside `<address>` next to the
630
+ * brand for org contact info (phone, email, mailing address).
631
+ */
632
+ address?: ReactNode;
611
633
  }
612
634
  declare const Footer: react.ForwardRefExoticComponent<FooterProps & react.RefAttributes<HTMLElement>>;
613
635
 
614
636
  /**
615
637
  * Hero — landing-page top section. Optional eyebrow / pill above the headline,
616
- * a large heading (children of `<h1>`), a body description, and an action row.
638
+ * a large heading (children of `<h1>` by default), a body description, and an
639
+ * action row.
617
640
  *
618
641
  * Designed for marketing surfaces only — do not bring this into the app.
619
642
  */
@@ -622,6 +645,12 @@ interface HeroProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
622
645
  eyebrow?: ReactNode;
623
646
  /** Headline. Pass JSX to highlight a phrase (e.g., `<span className="text-accent">…</span>`). */
624
647
  title: ReactNode;
648
+ /**
649
+ * Heading level for the title. Default `'h1'` — only override on pages that
650
+ * already have an `<h1>` elsewhere (e.g., a section hero inside a longer
651
+ * landing page).
652
+ */
653
+ titleAs?: HeadingLevel;
625
654
  /** Subheading. */
626
655
  description?: ReactNode;
627
656
  /** Action buttons row. */
@@ -644,6 +673,12 @@ declare const Hero: react.ForwardRefExoticComponent<HeroProps & react.RefAttribu
644
673
  * background for the "recommended" tier. Use `priceUnit` for per-period
645
674
  * suffixes (e.g. `/ user / mo`) so the unit lays out next to the price
646
675
  * baseline-aligned and wraps cleanly when there isn't room.
676
+ *
677
+ * Emits a schema.org `Offer` JSON-LD entity when `priceCurrency` is
678
+ * provided AND a numeric `priceAmount` (or a parseable `price` string like
679
+ * `"$29"`) is supplied. Cards where the price isn't machine-readable
680
+ * (e.g. `"Talk to us"`) skip JSON-LD emission unless the consumer passes
681
+ * `priceAmount` explicitly. Pass `noStructuredData` to opt out entirely.
647
682
  */
648
683
  interface PricingCardProps extends HTMLAttributes<HTMLDivElement> {
649
684
  /** Tier name — e.g., `Pro`, `Team`. */
@@ -660,12 +695,46 @@ interface PricingCardProps extends HTMLAttributes<HTMLDivElement> {
660
695
  action?: ReactNode;
661
696
  /** Highlight as the recommended tier. */
662
697
  featured?: boolean;
698
+ /**
699
+ * Heading level for the tier name. Default `'h3'` — pricing tables live
700
+ * under a section `h2` on most pricing pages.
701
+ */
702
+ tierAs?: HeadingLevel;
703
+ /**
704
+ * ISO 4217 currency code (e.g. `'USD'`, `'EUR'`). REQUIRED to emit the
705
+ * `Offer` JSON-LD — without it the script is suppressed.
706
+ */
707
+ priceCurrency?: string;
708
+ /**
709
+ * Explicit machine-readable price (number). When omitted, parsed from the
710
+ * visible `price` string by stripping non-numeric characters. Pass this
711
+ * directly when `price` is JSX or contains unusual formatting.
712
+ */
713
+ priceAmount?: number;
714
+ /**
715
+ * schema.org `availability` URL, typically `'https://schema.org/InStock'`.
716
+ */
717
+ availability?: string;
718
+ /** Optional URL of the tier's product/checkout page. */
719
+ url?: string;
720
+ /** String version of `tier` for the JSON-LD `name`. Required if `tier` is JSX. */
721
+ tierName?: string;
722
+ /** String version of `description` for the JSON-LD `description`. */
723
+ descriptionText?: string;
724
+ /** Opt out of emitting the `Offer` JSON-LD script. */
725
+ noStructuredData?: boolean;
663
726
  }
664
727
  declare const PricingCard: react.ForwardRefExoticComponent<PricingCardProps & react.RefAttributes<HTMLDivElement>>;
665
728
 
666
729
  /**
667
730
  * Testimonial — pull-quote with author + role. Centered for marketing
668
731
  * surfaces.
732
+ *
733
+ * Emits a schema.org `Review` JSON-LD entity by default. Pass `rating`
734
+ * (1–5) for `reviewRating` and `itemReviewedName` (plus optional `url`)
735
+ * for `itemReviewed` to make the JSON-LD eligible for Google's Review
736
+ * rich results. Without those it still emits a minimal `Review`. Pass
737
+ * `noStructuredData` to suppress the JSON-LD script entirely.
669
738
  */
670
739
  interface TestimonialProps extends Omit<HTMLAttributes<HTMLElement>, 'cite' | 'role'> {
671
740
  /** The quoted body. */
@@ -676,6 +745,23 @@ interface TestimonialProps extends Omit<HTMLAttributes<HTMLElement>, 'cite' | 'r
676
745
  role?: ReactNode;
677
746
  /** Avatar initials or full node. */
678
747
  avatar?: ReactNode;
748
+ /**
749
+ * String version of `quote` for the JSON-LD `reviewBody` field. Required
750
+ * when `quote` is JSX — without it the JSON-LD script is suppressed.
751
+ */
752
+ quoteText?: string;
753
+ /** String version of `author` for the JSON-LD `author.name`. */
754
+ authorName?: string;
755
+ /** String version of `role` for the JSON-LD `author.jobTitle`. */
756
+ authorJobTitle?: string;
757
+ /** Star rating (1–5). When provided, emitted as `reviewRating`. */
758
+ rating?: number;
759
+ /** Name of the thing being endorsed (product / service / company). */
760
+ itemReviewedName?: string;
761
+ /** Optional URL of the thing being endorsed. */
762
+ url?: string;
763
+ /** Opt out of emitting the schema.org `Review` JSON-LD script. */
764
+ noStructuredData?: boolean;
679
765
  }
680
766
  declare const Testimonial: react.ForwardRefExoticComponent<TestimonialProps & react.RefAttributes<HTMLElement>>;
681
767
 
@@ -687,6 +773,11 @@ declare const Testimonial: react.ForwardRefExoticComponent<TestimonialProps & re
687
773
  *
688
774
  * When `onClick` is provided the whole card becomes a button; otherwise it
689
775
  * renders as a plain `<div>`.
776
+ *
777
+ * Emits a schema.org `SoftwareApplication` JSON-LD entity by default with
778
+ * `name`, `dateModified` (from `lastSyncedAt`), and consumer-supplied
779
+ * `applicationCategory` / `url` / `softwareVersion`. Skipped when `name` is
780
+ * JSX without a string fallback. Pass `noStructuredData` to suppress.
690
781
  */
691
782
  type ConnectorStatus = 'connected' | 'syncing' | 'error' | 'disconnected';
692
783
  interface ConnectorCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'onClick'> {
@@ -712,6 +803,16 @@ interface ConnectorCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title
712
803
  * `button-name`). Optional otherwise.
713
804
  */
714
805
  accessibleName?: string;
806
+ /** String version of `name` for the JSON-LD `name` field. */
807
+ nameText?: string;
808
+ /** schema.org `applicationCategory` (e.g. `'CRM'`, `'DataConnector'`). */
809
+ applicationCategory?: string;
810
+ /** Connector detail URL — emitted as the entity `url`. */
811
+ url?: string;
812
+ /** Optional `softwareVersion` string. */
813
+ softwareVersion?: string;
814
+ /** Opt out of emitting the `SoftwareApplication` JSON-LD script. */
815
+ noStructuredData?: boolean;
715
816
  }
716
817
  declare const ConnectorCard: react.ForwardRefExoticComponent<ConnectorCardProps & react.RefAttributes<HTMLDivElement>>;
717
818
 
@@ -766,6 +867,12 @@ interface NotifRowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
766
867
  body?: ReactNode;
767
868
  /** Right-aligned relative time string (e.g. `9:32`, `Mon`). */
768
869
  time?: ReactNode;
870
+ /**
871
+ * Machine-readable ISO 8601 string or `Date` for the notification's
872
+ * timestamp. When set, the visible `time` is wrapped in
873
+ * `<time dateTime="…">` so the row is crawlable / AI-readable.
874
+ */
875
+ dateTime?: string | Date;
769
876
  /** Coloring of the unread dot. */
770
877
  tone?: NotifTone;
771
878
  /** When true, render the unread dot. */