lucent-ui 0.29.0 → 0.31.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 (34) hide show
  1. package/dist/index.cjs +102 -45
  2. package/dist/index.d.ts +143 -0
  3. package/dist/index.js +2578 -1885
  4. package/dist-cli/cli/entry.js +0 -0
  5. package/dist-cli/cli/index.js +0 -0
  6. package/dist-server/server/index.js +29 -29
  7. package/dist-server/server/pattern-registry.js +18 -0
  8. package/dist-server/server/registry.js +8 -0
  9. package/dist-server/src/components/molecules/Card/Card.manifest.js +2 -2
  10. package/dist-server/src/components/molecules/Collapsible/Collapsible.manifest.js +4 -4
  11. package/dist-server/src/components/molecules/FilterDateRange/FilterDateRange.manifest.js +46 -0
  12. package/dist-server/src/components/molecules/FilterMultiSelect/FilterMultiSelect.manifest.js +66 -0
  13. package/dist-server/src/components/molecules/FilterSearch/FilterSearch.manifest.js +37 -0
  14. package/dist-server/src/components/molecules/FilterSelect/FilterSelect.manifest.js +58 -0
  15. package/dist-server/src/components/molecules/Stepper/Stepper.manifest.js +115 -0
  16. package/dist-server/src/components/molecules/Timeline/Timeline.manifest.js +23 -9
  17. package/dist-server/src/manifest/{recipes/action-bar.recipe.js → patterns/action-bar.pattern.js} +1 -1
  18. package/dist-server/src/manifest/{recipes/collapsible-card.recipe.js → patterns/collapsible-card.pattern.js} +1 -1
  19. package/dist-server/src/manifest/patterns/dashboard-header.pattern.js +98 -0
  20. package/dist-server/src/manifest/{recipes/empty-state-card.recipe.js → patterns/empty-state-card.pattern.js} +1 -1
  21. package/dist-server/src/manifest/{recipes/form-layout.recipe.js → patterns/form-layout.pattern.js} +1 -1
  22. package/dist-server/src/manifest/patterns/index.js +12 -0
  23. package/dist-server/src/manifest/patterns/notification-feed.pattern.js +91 -0
  24. package/dist-server/src/manifest/patterns/onboarding-flow.pattern.js +107 -0
  25. package/dist-server/src/manifest/patterns/pricing-table.pattern.js +108 -0
  26. package/dist-server/src/manifest/{recipes/profile-card.recipe.js → patterns/profile-card.pattern.js} +1 -1
  27. package/dist-server/src/manifest/patterns/search-filter-bar.pattern.js +122 -0
  28. package/dist-server/src/manifest/{recipes/settings-panel.recipe.js → patterns/settings-panel.pattern.js} +1 -1
  29. package/dist-server/src/manifest/{recipes/stats-row.recipe.js → patterns/stats-row.pattern.js} +1 -1
  30. package/package.json +13 -15
  31. package/dist-server/server/recipe-registry.js +0 -18
  32. package/dist-server/src/manifest/recipes/index.js +0 -8
  33. package/dist-server/src/manifest/recipes/search-filter-bar.recipe.js +0 -197
  34. package/dist-server/src/manifest/validate.test.js +0 -28
package/dist/index.d.ts CHANGED
@@ -559,6 +559,8 @@ export declare interface DataTableColumn<T> {
559
559
  sortable?: boolean;
560
560
  /** Adds a searchable, multi-select dropdown filter above the table for this column */
561
561
  filterable?: boolean;
562
+ /** Render a custom filter trigger in the column header (e.g. an icon that opens an external filter). */
563
+ headerFilter?: ReactNode;
562
564
  width?: string;
563
565
  align?: 'left' | 'center' | 'right';
564
566
  }
@@ -742,6 +744,111 @@ export declare interface FileUploadProps {
742
744
  style?: CSSProperties;
743
745
  }
744
746
 
747
+ export declare function FilterDateRange({ label, value, defaultValue, onChange, variant, size, min, max, disabled, style, }: FilterDateRangeProps): JSX_2.Element;
748
+
749
+ export declare interface FilterDateRangeProps {
750
+ /** Label shown on the trigger button when no range is selected. */
751
+ label?: string;
752
+ value?: DateRange;
753
+ defaultValue?: DateRange;
754
+ onChange?: (range: DateRange) => void;
755
+ /** Button style. "outline" switches to "secondary" when a range is selected. Default: "secondary". */
756
+ variant?: FilterDateRangeVariant;
757
+ size?: FilterDateRangeSize;
758
+ min?: Date;
759
+ max?: Date;
760
+ disabled?: boolean;
761
+ style?: CSSProperties;
762
+ }
763
+
764
+ export declare type FilterDateRangeSize = 'sm' | 'md' | 'lg';
765
+
766
+ export declare type FilterDateRangeVariant = 'secondary' | 'outline';
767
+
768
+ export declare function FilterMultiSelect({ label, options, value: controlledValue, defaultValue, onChange, variant, size, disabled, icon, style, }: FilterMultiSelectProps): JSX_2.Element;
769
+
770
+ export declare interface FilterMultiSelectOption {
771
+ value: string;
772
+ label: string;
773
+ /** Hex color — renders a Chip with swatch dot instead of plain text. */
774
+ swatch?: string;
775
+ disabled?: boolean;
776
+ }
777
+
778
+ export declare interface FilterMultiSelectProps {
779
+ /** Label shown on the trigger button. */
780
+ label: string;
781
+ options: FilterMultiSelectOption[];
782
+ /** Controlled selected values. */
783
+ value?: string[];
784
+ /** Initial values for uncontrolled usage. */
785
+ defaultValue?: string[];
786
+ onChange?: (values: string[]) => void;
787
+ /** Button style. "outline" switches to "secondary" when items are selected. Default: "secondary". */
788
+ variant?: FilterMultiSelectVariant;
789
+ size?: FilterMultiSelectSize;
790
+ disabled?: boolean;
791
+ /** Icon rendered before the label in the trigger button. */
792
+ icon?: ReactNode;
793
+ style?: CSSProperties;
794
+ }
795
+
796
+ export declare type FilterMultiSelectSize = 'xs' | 'sm' | 'md' | 'lg';
797
+
798
+ export declare type FilterMultiSelectVariant = 'secondary' | 'outline' | 'ghost';
799
+
800
+ export declare function FilterSearch({ value: controlledValue, defaultValue, onChange, placeholder, variant, size, width, disabled, style, }: FilterSearchProps): JSX_2.Element;
801
+
802
+ export declare interface FilterSearchProps {
803
+ /** Controlled search value. */
804
+ value?: string;
805
+ /** Initial value for uncontrolled usage. */
806
+ defaultValue?: string;
807
+ onChange?: (value: string) => void;
808
+ placeholder?: string;
809
+ /** Button style when collapsed. Default: "secondary". */
810
+ variant?: FilterSearchVariant;
811
+ size?: FilterSearchSize;
812
+ /** Width of the expanded input. Default: 260. */
813
+ width?: number;
814
+ disabled?: boolean;
815
+ style?: CSSProperties;
816
+ }
817
+
818
+ export declare type FilterSearchSize = 'sm' | 'md' | 'lg';
819
+
820
+ export declare type FilterSearchVariant = 'secondary' | 'outline';
821
+
822
+ export declare function FilterSelect({ label, options, value: controlledValue, defaultValue, onChange, variant, size, disabled, icon, style, }: FilterSelectProps): JSX_2.Element;
823
+
824
+ export declare interface FilterSelectOption {
825
+ value: string;
826
+ label: string;
827
+ disabled?: boolean;
828
+ }
829
+
830
+ export declare interface FilterSelectProps {
831
+ /** Label shown on the trigger button when no value is selected. */
832
+ label: string;
833
+ options: FilterSelectOption[];
834
+ /** Controlled selected value. */
835
+ value?: string;
836
+ /** Initial value for uncontrolled usage. */
837
+ defaultValue?: string;
838
+ onChange?: (value: string | undefined) => void;
839
+ /** Button style. "outline" switches to "secondary" when a value is selected. Default: "secondary". */
840
+ variant?: FilterSelectVariant;
841
+ size?: FilterSelectSize;
842
+ disabled?: boolean;
843
+ /** Icon rendered before the label in the trigger button. */
844
+ icon?: ReactNode;
845
+ style?: CSSProperties;
846
+ }
847
+
848
+ export declare type FilterSelectSize = 'sm' | 'md' | 'lg';
849
+
850
+ export declare type FilterSelectVariant = 'secondary' | 'outline';
851
+
745
852
  export declare const flatShadow: ShadowPreset;
746
853
 
747
854
  export declare function FormField({ label, htmlFor, required, helperText, errorMessage, children, style, }: FormFieldProps): JSX_2.Element;
@@ -1595,6 +1702,40 @@ export declare interface StackProps {
1595
1702
  'aria-labelledby'?: string;
1596
1703
  }
1597
1704
 
1705
+ export declare interface StepDef {
1706
+ /** Step label */
1707
+ label: string;
1708
+ /** Optional description shown below the label */
1709
+ description?: string;
1710
+ /** Optional custom icon for the circle (overrides number/checkmark) */
1711
+ icon?: ReactNode;
1712
+ }
1713
+
1714
+ export declare function Stepper({ steps, current, size, orientation, numbered, showStatus, style, }: StepperProps): JSX_2.Element;
1715
+
1716
+ export declare const StepperManifest: ComponentManifest;
1717
+
1718
+ export declare type StepperOrientation = 'horizontal' | 'vertical';
1719
+
1720
+ export declare interface StepperProps {
1721
+ /** Step labels — strings or objects with label/description/icon */
1722
+ steps: readonly (string | StepDef)[];
1723
+ /** Zero-based index of the current step */
1724
+ current: number;
1725
+ /** Circle and connector sizing */
1726
+ size?: StepperSize;
1727
+ /** Layout direction */
1728
+ orientation?: StepperOrientation;
1729
+ /** Show "STEP N" prefix above labels */
1730
+ numbered?: boolean;
1731
+ /** Show Completed / In Progress / Pending status badges */
1732
+ showStatus?: boolean;
1733
+ /** Inline style overrides for the root container */
1734
+ style?: CSSProperties;
1735
+ }
1736
+
1737
+ export declare type StepperSize = 'sm' | 'md' | 'lg';
1738
+
1598
1739
  /**
1599
1740
  * Subtle — light mode uses wide, low-opacity diffused shadows.
1600
1741
  * Dark mode shifts to "ambient" — an enormous, barely-visible
@@ -1770,6 +1911,8 @@ export declare interface TimelineItem {
1770
1911
  id: string;
1771
1912
  title: ReactNode;
1772
1913
  description?: ReactNode;
1914
+ /** Rich nested content — comment cards, embedded blocks, etc. */
1915
+ content?: ReactNode;
1773
1916
  date?: string;
1774
1917
  status?: TimelineItemStatus;
1775
1918
  icon?: ReactNode;