@phcdevworks/spectre-ui 2.2.0 → 2.4.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/index.d.ts CHANGED
@@ -358,6 +358,26 @@ interface NavLinkRecipeOptions {
358
358
  }
359
359
  declare function getNavLinkClasses(opts?: NavLinkRecipeOptions): string;
360
360
 
361
+ interface SidebarRecipeOptions {
362
+ bordered?: boolean;
363
+ }
364
+ declare function getSidebarClasses(opts?: SidebarRecipeOptions): string;
365
+ interface SidebarLinkRecipeOptions {
366
+ active?: boolean;
367
+ disabled?: boolean;
368
+ hovered?: boolean;
369
+ focused?: boolean;
370
+ }
371
+ declare function getSidebarLinkClasses(opts?: SidebarLinkRecipeOptions): string;
372
+ declare function getSidebarBackdropClasses(): string;
373
+ declare function getSidebarToggleClasses(): string;
374
+
375
+ interface FooterRecipeOptions {
376
+ bordered?: boolean;
377
+ fullWidth?: boolean;
378
+ }
379
+ declare function getFooterClasses(opts?: FooterRecipeOptions): string;
380
+
361
381
  declare const TOAST_VARIANTS: {
362
382
  readonly info: true;
363
383
  readonly success: true;
@@ -423,17 +443,35 @@ interface ModalRecipeOptions {
423
443
  }
424
444
  declare function getModalClasses(opts?: ModalRecipeOptions): string;
425
445
 
446
+ declare const CONTAINER_MAX_WIDTHS: {
447
+ readonly none: true;
448
+ readonly prose: true;
449
+ };
450
+ type ContainerMaxWidth = Exclude<keyof typeof CONTAINER_MAX_WIDTHS, 'none'>;
426
451
  interface ContainerRecipeOptions {
452
+ maxWidth?: ContainerMaxWidth;
427
453
  }
428
- declare function getContainerClasses(_opts?: ContainerRecipeOptions): string;
454
+ declare function getContainerClasses(opts?: ContainerRecipeOptions): string;
429
455
 
430
456
  declare const STACK_DIRECTIONS: {
431
457
  readonly vertical: true;
432
458
  readonly horizontal: true;
433
459
  };
460
+ declare const STACK_BASES: {
461
+ readonly none: true;
462
+ readonly sidebar: true;
463
+ };
464
+ declare const STACK_ALIGNS: {
465
+ readonly center: true;
466
+ readonly stretch: true;
467
+ };
434
468
  type StackDirection = keyof typeof STACK_DIRECTIONS;
469
+ type StackBasis = Exclude<keyof typeof STACK_BASES, 'none'>;
470
+ type StackAlign = keyof typeof STACK_ALIGNS;
435
471
  interface StackRecipeOptions {
436
472
  direction?: StackDirection;
473
+ basis?: StackBasis;
474
+ align?: StackAlign;
437
475
  }
438
476
  declare function getStackClasses(opts?: StackRecipeOptions): string;
439
477
 
@@ -454,4 +492,4 @@ interface GridRecipeOptions {
454
492
  }
455
493
  declare function getGridClasses(opts?: GridRecipeOptions): string;
456
494
 
457
- export { type AlertRecipeOptions, type AlertSize, type AlertVariant, type AvatarRecipeOptions, type AvatarShape, type AvatarSize, type BadgeRecipeOptions, type BadgeSize, type BadgeVariant, type ButtonRecipeOptions, type ButtonSize, type ButtonVariant, type CardRecipeOptions, type CardVariant, type ContainerRecipeOptions, type DropdownItemRecipeOptions, type DropdownMenuRecipeOptions, type DropdownPlacement, type DropdownRecipeOptions, type GridColumns, type GridGap, type GridRecipeOptions, type IconBoxRecipeOptions, type IconBoxSize, type IconBoxVariant, type InputRecipeOptions, type InputSize, type InputState, type ModalOverlayRecipeOptions, type ModalRecipeOptions, type NavLinkRecipeOptions, type NavRecipeOptions, type PricingCardRecipeOptions, type RatingRecipeOptions, type RatingSize, type SectionRecipeOptions, type SpinnerRecipeOptions, type SpinnerSize, type SpinnerVariant, type StackDirection, type StackRecipeOptions, type TagRecipeOptions, type TagSize, type TagVariant, type TestimonialRecipeOptions, type ToastIconRecipeOptions, type ToastRecipeOptions, type ToastVariant, type TooltipPlacement, type TooltipRecipeOptions, getAlertClasses, getAvatarClasses, getBadgeClasses, getButtonClasses, getCardClasses, getContainerClasses, getDropdownClasses, getDropdownItemClasses, getDropdownMenuClasses, getGridClasses, getIconBoxClasses, getInputClasses, getInputErrorMessageClasses, getInputHelperTextClasses, getInputLabelClasses, getInputWrapperClasses, getModalClasses, getModalOverlayClasses, getNavClasses, getNavLinkClasses, getNavLinksClasses, getPricingCardBadgeClasses, getPricingCardClasses, getPricingCardDescriptionClasses, getPricingCardPriceClasses, getPricingCardPriceContainerClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getSectionClasses, getSpinnerClasses, getStackClasses, getTagClasses, getTestimonialAuthorClasses, getTestimonialAuthorInfoClasses, getTestimonialAuthorNameClasses, getTestimonialAuthorTitleClasses, getTestimonialClasses, getTestimonialQuoteClasses, getToastClasses, getToastIconClasses, getTooltipClasses, spectreBaseStylesPath, spectreComponentsStylesPath, spectreIndexStylesPath, spectreStyles, spectreUtilitiesStylesPath };
495
+ export { type AlertRecipeOptions, type AlertSize, type AlertVariant, type AvatarRecipeOptions, type AvatarShape, type AvatarSize, type BadgeRecipeOptions, type BadgeSize, type BadgeVariant, type ButtonRecipeOptions, type ButtonSize, type ButtonVariant, type CardRecipeOptions, type CardVariant, type ContainerMaxWidth, type ContainerRecipeOptions, type DropdownItemRecipeOptions, type DropdownMenuRecipeOptions, type DropdownPlacement, type DropdownRecipeOptions, type FooterRecipeOptions, type GridColumns, type GridGap, type GridRecipeOptions, type IconBoxRecipeOptions, type IconBoxSize, type IconBoxVariant, type InputRecipeOptions, type InputSize, type InputState, type ModalOverlayRecipeOptions, type ModalRecipeOptions, type NavLinkRecipeOptions, type NavRecipeOptions, type PricingCardRecipeOptions, type RatingRecipeOptions, type RatingSize, type SectionRecipeOptions, type SidebarLinkRecipeOptions, type SidebarRecipeOptions, type SpinnerRecipeOptions, type SpinnerSize, type SpinnerVariant, type StackAlign, type StackBasis, type StackDirection, type StackRecipeOptions, type TagRecipeOptions, type TagSize, type TagVariant, type TestimonialRecipeOptions, type ToastIconRecipeOptions, type ToastRecipeOptions, type ToastVariant, type TooltipPlacement, type TooltipRecipeOptions, getAlertClasses, getAvatarClasses, getBadgeClasses, getButtonClasses, getCardClasses, getContainerClasses, getDropdownClasses, getDropdownItemClasses, getDropdownMenuClasses, getFooterClasses, getGridClasses, getIconBoxClasses, getInputClasses, getInputErrorMessageClasses, getInputHelperTextClasses, getInputLabelClasses, getInputWrapperClasses, getModalClasses, getModalOverlayClasses, getNavClasses, getNavLinkClasses, getNavLinksClasses, getPricingCardBadgeClasses, getPricingCardClasses, getPricingCardDescriptionClasses, getPricingCardPriceClasses, getPricingCardPriceContainerClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getSectionClasses, getSidebarBackdropClasses, getSidebarClasses, getSidebarLinkClasses, getSidebarToggleClasses, getSpinnerClasses, getStackClasses, getTagClasses, getTestimonialAuthorClasses, getTestimonialAuthorInfoClasses, getTestimonialAuthorNameClasses, getTestimonialAuthorTitleClasses, getTestimonialClasses, getTestimonialQuoteClasses, getToastClasses, getToastIconClasses, getTooltipClasses, spectreBaseStylesPath, spectreComponentsStylesPath, spectreIndexStylesPath, spectreStyles, spectreUtilitiesStylesPath };
package/dist/index.js CHANGED
@@ -786,6 +786,39 @@ function getNavLinkClasses(opts = {}) {
786
786
  );
787
787
  }
788
788
 
789
+ // src/recipes/sidebar.ts
790
+ function getSidebarClasses(opts = {}) {
791
+ const { bordered = false } = opts;
792
+ return cx("sp-sidebar", bordered && "sp-sidebar--bordered");
793
+ }
794
+ function getSidebarLinkClasses(opts = {}) {
795
+ const {
796
+ active = false,
797
+ disabled = false,
798
+ hovered = false,
799
+ focused = false
800
+ } = opts;
801
+ return cx(
802
+ "sp-sidebar__link",
803
+ active && "sp-sidebar__link--active",
804
+ disabled && "sp-sidebar__link--disabled",
805
+ hovered && "sp-sidebar__link--hover is-hover",
806
+ focused && "sp-sidebar__link--focus is-focus"
807
+ );
808
+ }
809
+ function getSidebarBackdropClasses() {
810
+ return cx("sp-sidebar-backdrop");
811
+ }
812
+ function getSidebarToggleClasses() {
813
+ return cx("sp-sidebar-toggle");
814
+ }
815
+
816
+ // src/recipes/footer.ts
817
+ function getFooterClasses(opts = {}) {
818
+ const { bordered = false, fullWidth = false } = opts;
819
+ return cx("sp-footer", bordered && "sp-footer--bordered", fullWidth && "sp-footer--full");
820
+ }
821
+
789
822
  // src/recipes/toast.ts
790
823
  var TOAST_VARIANTS = {
791
824
  info: true,
@@ -897,8 +930,19 @@ function getModalClasses(opts = {}) {
897
930
  }
898
931
 
899
932
  // src/recipes/container.ts
900
- function getContainerClasses(_opts = {}) {
901
- return "sp-container";
933
+ var CONTAINER_MAX_WIDTHS = {
934
+ none: true,
935
+ prose: true
936
+ };
937
+ function getContainerClasses(opts = {}) {
938
+ const { maxWidth: maxWidthInput } = opts;
939
+ const maxWidth = resolveOption({
940
+ name: "container maxWidth",
941
+ value: maxWidthInput,
942
+ allowed: CONTAINER_MAX_WIDTHS,
943
+ fallback: "none"
944
+ });
945
+ return cx("sp-container", maxWidth !== "none" && `sp-container--max-width-${maxWidth}`);
902
946
  }
903
947
 
904
948
  // src/recipes/stack.ts
@@ -906,15 +950,39 @@ var STACK_DIRECTIONS = {
906
950
  vertical: true,
907
951
  horizontal: true
908
952
  };
953
+ var STACK_BASES = {
954
+ none: true,
955
+ sidebar: true
956
+ };
957
+ var STACK_ALIGNS = {
958
+ center: true,
959
+ stretch: true
960
+ };
909
961
  function getStackClasses(opts = {}) {
910
- const { direction: directionInput } = opts;
962
+ const { direction: directionInput, basis: basisInput, align: alignInput } = opts;
911
963
  const direction = resolveOption({
912
964
  name: "stack direction",
913
965
  value: directionInput,
914
966
  allowed: STACK_DIRECTIONS,
915
967
  fallback: "vertical"
916
968
  });
917
- return direction === "horizontal" ? "sp-hstack" : "sp-stack";
969
+ const basis = resolveOption({
970
+ name: "stack basis",
971
+ value: basisInput,
972
+ allowed: STACK_BASES,
973
+ fallback: "none"
974
+ });
975
+ const align = resolveOption({
976
+ name: "stack align",
977
+ value: alignInput,
978
+ allowed: STACK_ALIGNS,
979
+ fallback: "center"
980
+ });
981
+ return cx(
982
+ direction === "horizontal" ? "sp-hstack" : "sp-stack",
983
+ basis !== "none" && `sp-stack--basis-${basis}`,
984
+ align !== "center" && `sp-stack--align-${align}`
985
+ );
918
986
  }
919
987
 
920
988
  // src/recipes/section.ts
@@ -953,6 +1021,6 @@ function getGridClasses(opts = {}) {
953
1021
  return cx("sp-grid", `sp-grid--gap-${gap}`, `sp-grid-cols-${columns}`);
954
1022
  }
955
1023
 
956
- export { getAlertClasses, getAvatarClasses, getBadgeClasses, getButtonClasses, getCardClasses, getContainerClasses, getDropdownClasses, getDropdownItemClasses, getDropdownMenuClasses, getGridClasses, getIconBoxClasses, getInputClasses, getInputErrorMessageClasses, getInputHelperTextClasses, getInputLabelClasses, getInputWrapperClasses, getModalClasses, getModalOverlayClasses, getNavClasses, getNavLinkClasses, getNavLinksClasses, getPricingCardBadgeClasses, getPricingCardClasses, getPricingCardDescriptionClasses, getPricingCardPriceClasses, getPricingCardPriceContainerClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getSectionClasses, getSpinnerClasses, getStackClasses, getTagClasses, getTestimonialAuthorClasses, getTestimonialAuthorInfoClasses, getTestimonialAuthorNameClasses, getTestimonialAuthorTitleClasses, getTestimonialClasses, getTestimonialQuoteClasses, getToastClasses, getToastIconClasses, getTooltipClasses, spectreBaseStylesPath, spectreComponentsStylesPath, spectreIndexStylesPath, spectreStyles, spectreUtilitiesStylesPath };
1024
+ export { getAlertClasses, getAvatarClasses, getBadgeClasses, getButtonClasses, getCardClasses, getContainerClasses, getDropdownClasses, getDropdownItemClasses, getDropdownMenuClasses, getFooterClasses, getGridClasses, getIconBoxClasses, getInputClasses, getInputErrorMessageClasses, getInputHelperTextClasses, getInputLabelClasses, getInputWrapperClasses, getModalClasses, getModalOverlayClasses, getNavClasses, getNavLinkClasses, getNavLinksClasses, getPricingCardBadgeClasses, getPricingCardClasses, getPricingCardDescriptionClasses, getPricingCardPriceClasses, getPricingCardPriceContainerClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getSectionClasses, getSidebarBackdropClasses, getSidebarClasses, getSidebarLinkClasses, getSidebarToggleClasses, getSpinnerClasses, getStackClasses, getTagClasses, getTestimonialAuthorClasses, getTestimonialAuthorInfoClasses, getTestimonialAuthorNameClasses, getTestimonialAuthorTitleClasses, getTestimonialClasses, getTestimonialQuoteClasses, getToastClasses, getToastIconClasses, getTooltipClasses, spectreBaseStylesPath, spectreComponentsStylesPath, spectreIndexStylesPath, spectreStyles, spectreUtilitiesStylesPath };
957
1025
  //# sourceMappingURL=index.js.map
958
1026
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/css-constants.ts","../src/internal/cx.ts","../src/internal/resolve-option.ts","../src/recipes/button.ts","../src/recipes/card.ts","../src/recipes/input.ts","../src/recipes/badge.ts","../src/recipes/iconbox.ts","../src/recipes/testimonial.ts","../src/recipes/pricing-card.ts","../src/recipes/rating.ts","../src/recipes/alert.ts","../src/recipes/avatar.ts","../src/recipes/tag.ts","../src/recipes/spinner.ts","../src/recipes/nav.ts","../src/recipes/toast.ts","../src/recipes/tooltip.ts","../src/recipes/dropdown.ts","../src/recipes/modal.ts","../src/recipes/container.ts","../src/recipes/stack.ts","../src/recipes/section.ts","../src/recipes/grid.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const spectreBaseStylesPath = \"@phcdevworks/spectre-ui/base.css\";\nexport const spectreComponentsStylesPath = \"@phcdevworks/spectre-ui/components.css\";\nexport const spectreUtilitiesStylesPath = \"@phcdevworks/spectre-ui/utilities.css\";\nexport const spectreIndexStylesPath = \"@phcdevworks/spectre-ui/index.css\";\n\nexport const spectreStyles = {\n index: spectreIndexStylesPath,\n base: spectreBaseStylesPath,\n components: spectreComponentsStylesPath,\n utilities: spectreUtilitiesStylesPath,\n};\n","export function cx(...parts: Array<string | false | null | undefined>): string {\n const seen = new Set<string>();\n const classes: string[] = [];\n\n for (const part of parts) {\n if (!part) continue;\n const trimmed = part.trim();\n if (!trimmed) continue;\n\n if (!/\\s/.test(trimmed)) {\n if (!seen.has(trimmed)) {\n seen.add(trimmed);\n classes.push(trimmed);\n }\n continue;\n }\n\n for (const token of trimmed.split(/\\s+/)) {\n if (!token || seen.has(token)) continue;\n seen.add(token);\n classes.push(token);\n }\n }\n\n return classes.join(\" \");\n}\n","type AllowedValues<T extends string> = readonly T[] | Record<T, unknown>;\n\nconst hasOwn = (value: object, key: string): boolean =>\n Object.prototype.hasOwnProperty.call(value, key);\n\nconst isAllowedValue = <T extends string>(value: T, allowed: AllowedValues<T>): boolean =>\n Array.isArray(allowed) ? allowed.includes(value) : hasOwn(allowed, value);\n\nexport function resolveOption<T extends string>(config: {\n name: string;\n value: T | undefined;\n allowed: AllowedValues<T>;\n fallback: T;\n}): T {\n const { name, value, allowed, fallback } = config;\n\n if (value === undefined) return fallback;\n if (isAllowedValue(value, allowed)) return value;\n\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(`[spectre-ui] Unknown ${name}: ${value}`);\n }\n\n return fallback;\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst BUTTON_VARIANTS = {\n primary: true,\n secondary: true,\n ghost: true,\n danger: true,\n success: true,\n cta: true,\n accent: true,\n} as const;\n\nconst BUTTON_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const;\n\nexport type ButtonVariant = keyof typeof BUTTON_VARIANTS;\nexport type ButtonSize = keyof typeof BUTTON_SIZES;\n\nexport interface ButtonRecipeOptions {\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n loading?: boolean;\n disabled?: boolean;\n hovered?: boolean;\n focused?: boolean;\n active?: boolean;\n iconOnly?: boolean;\n pill?: boolean;\n}\n\nexport function getButtonClasses(opts: ButtonRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n fullWidth = false,\n loading = false,\n disabled = false,\n hovered = false,\n focused = false,\n active = false,\n iconOnly = false,\n pill = false,\n } = opts;\n\n const variant = resolveOption({\n name: \"button variant\",\n value: variantInput,\n allowed: BUTTON_VARIANTS,\n fallback: \"primary\",\n });\n const size = resolveOption({\n name: \"button size\",\n value: sizeInput,\n allowed: BUTTON_SIZES,\n fallback: \"md\",\n });\n\n const variantMap: Record<ButtonVariant, string> = {\n primary: \"sp-btn--primary\",\n secondary: \"sp-btn--secondary\",\n ghost: \"sp-btn--ghost\",\n danger: \"sp-btn--danger\",\n success: \"sp-btn--success\",\n cta: \"sp-btn--cta\",\n accent: \"sp-btn--accent\",\n };\n const variantClass = variantMap[variant];\n\n const sizeMap: Record<ButtonSize, string> = {\n sm: \"sp-btn--sm\",\n md: \"sp-btn--md\",\n lg: \"sp-btn--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-btn\",\n variantClass,\n sizeClass,\n fullWidth && \"sp-btn--full\",\n loading && \"sp-btn--loading\",\n disabled && \"sp-btn--disabled\",\n hovered && \"sp-btn--hover is-hover\",\n focused && \"sp-btn--focus is-focus\",\n active && \"sp-btn--active is-active\",\n iconOnly && \"sp-btn--icon\",\n pill && \"sp-btn--pill\",\n );\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst CARD_VARIANTS = {\n elevated: true,\n flat: true,\n outline: true,\n ghost: true,\n} as const;\n\nexport type CardVariant = keyof typeof CARD_VARIANTS;\n\nexport interface CardRecipeOptions {\n variant?: CardVariant;\n interactive?: boolean;\n padded?: boolean;\n fullHeight?: boolean;\n disabled?: boolean;\n loading?: boolean;\n hovered?: boolean;\n focused?: boolean;\n active?: boolean;\n}\n\nexport function getCardClasses(opts: CardRecipeOptions = {}): string {\n const {\n variant: variantInput,\n interactive = false,\n padded = false,\n fullHeight = false,\n disabled = false,\n loading = false,\n hovered = false,\n focused = false,\n active = false,\n } = opts;\n\n const variant = resolveOption({\n name: \"card variant\",\n value: variantInput,\n allowed: CARD_VARIANTS,\n fallback: \"elevated\",\n });\n\n const variantMap: Record<CardVariant, string> = {\n elevated: \"sp-card--elevated\",\n flat: \"sp-card--flat\",\n outline: \"sp-card--outline\",\n ghost: \"sp-card--ghost\",\n };\n const variantClass = variantMap[variant];\n\n return cx(\n \"sp-card\",\n variantClass,\n interactive && \"sp-card--interactive\",\n padded && \"sp-card--padded\",\n fullHeight && \"sp-card--full\",\n disabled && \"sp-card--disabled\",\n loading && \"sp-card--loading\",\n hovered && \"sp-card--hover is-hover\",\n focused && \"sp-card--focus is-focus\",\n active && \"sp-card--active is-active\",\n );\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst INPUT_STATES = {\n default: true,\n error: true,\n success: true,\n disabled: true,\n loading: true,\n} as const;\n\nconst INPUT_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const;\n\nexport type InputState = keyof typeof INPUT_STATES;\nexport type InputSize = keyof typeof INPUT_SIZES;\n\nexport interface InputRecipeOptions {\n state?: InputState;\n size?: InputSize;\n fullWidth?: boolean;\n pill?: boolean;\n focused?: boolean;\n hovered?: boolean;\n active?: boolean;\n disabled?: boolean;\n loading?: boolean;\n}\n\nexport function getInputClasses(opts: InputRecipeOptions = {}): string {\n const {\n state: stateInput,\n size: sizeInput,\n fullWidth = false,\n pill = false,\n focused = false,\n hovered = false,\n active = false,\n disabled = false,\n loading = false,\n } = opts;\n\n const state = resolveOption({\n name: \"input state\",\n value: stateInput,\n allowed: INPUT_STATES,\n fallback: \"default\",\n });\n const size = resolveOption({\n name: \"input size\",\n value: sizeInput,\n allowed: INPUT_SIZES,\n fallback: \"md\",\n });\n\n const sizeMap: Record<InputSize, string> = {\n sm: \"sp-input--sm\",\n md: \"sp-input--md\",\n lg: \"sp-input--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-input\",\n sizeClass,\n state === \"error\" && \"sp-input--error\",\n state === \"success\" && \"sp-input--success\",\n // Visual state only; actual disabled attribute is handled by adapters.\n (state === \"disabled\" || disabled) && \"sp-input--disabled\",\n (state === \"loading\" || loading) && \"sp-input--loading\",\n focused && \"sp-input--focus is-focus\",\n hovered && \"sp-input--hover is-hover\",\n active && \"sp-input--active is-active\",\n fullWidth && \"sp-input--full\",\n pill && \"sp-input--pill\",\n );\n}\n\nexport function getInputWrapperClasses(): string {\n return cx(\"sp-input-wrapper\");\n}\n\nexport function getInputLabelClasses(opts: { disabled?: boolean } = {}): string {\n const { disabled = false } = opts;\n return cx(\n \"sp-label\",\n disabled && \"sp-label--disabled\"\n );\n}\n\nexport function getInputHelperTextClasses(opts: { disabled?: boolean } = {}): string {\n const { disabled = false } = opts;\n return cx(\n \"sp-helper-text\",\n disabled && \"sp-helper-text--disabled\"\n );\n}\n\nexport function getInputErrorMessageClasses(): string {\n return cx(\"sp-error-message\");\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst BADGE_VARIANTS = {\n primary: true,\n secondary: true,\n success: true,\n warning: true,\n danger: true,\n neutral: true,\n info: true,\n ghost: true,\n outline: true,\n accent: true,\n cta: true,\n} as const;\n\nconst BADGE_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const;\n\nexport type BadgeVariant = keyof typeof BADGE_VARIANTS;\nexport type BadgeSize = keyof typeof BADGE_SIZES;\n\nexport interface BadgeRecipeOptions {\n variant?: BadgeVariant;\n size?: BadgeSize;\n interactive?: boolean;\n hovered?: boolean;\n focused?: boolean;\n active?: boolean;\n disabled?: boolean;\n loading?: boolean;\n fullWidth?: boolean;\n}\n\nexport function getBadgeClasses(opts: BadgeRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n disabled = false,\n loading = false,\n fullWidth = false,\n } = opts;\n\n const variant = resolveOption({\n name: \"badge variant\",\n value: variantInput,\n allowed: BADGE_VARIANTS,\n fallback: \"primary\",\n });\n const size = resolveOption({\n name: \"badge size\",\n value: sizeInput,\n allowed: BADGE_SIZES,\n fallback: \"md\",\n });\n\n const variantMap: Record<BadgeVariant, string> = {\n primary: \"sp-badge--primary\",\n secondary: \"sp-badge--secondary\",\n success: \"sp-badge--success\",\n warning: \"sp-badge--warning\",\n danger: \"sp-badge--danger\",\n neutral: \"sp-badge--neutral\",\n info: \"sp-badge--info\",\n ghost: \"sp-badge--ghost\",\n outline: \"sp-badge--outline\",\n accent: \"sp-badge--accent\",\n cta: \"sp-badge--cta\",\n };\n const variantClass = variantMap[variant];\n\n const sizeMap: Record<BadgeSize, string> = {\n sm: \"sp-badge--sm\",\n md: \"sp-badge--md\",\n lg: \"sp-badge--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-badge\",\n variantClass,\n sizeClass,\n interactive && \"sp-badge--interactive\",\n hovered && \"sp-badge--hover is-hover\",\n focused && \"sp-badge--focus is-focus\",\n active && \"sp-badge--active is-active\",\n disabled && \"sp-badge--disabled\",\n loading && \"sp-badge--loading\",\n fullWidth && \"sp-badge--full\"\n );\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst ICONBOX_VARIANTS = {\n primary: true,\n secondary: true,\n success: true,\n warning: true,\n danger: true,\n info: true,\n neutral: true,\n ghost: true,\n accent: true,\n cta: true,\n outline: true,\n} as const;\n\nconst ICONBOX_SIZES = {\n xs: true,\n sm: true,\n md: true,\n lg: true,\n} as const;\n\nexport type IconBoxVariant = keyof typeof ICONBOX_VARIANTS;\nexport type IconBoxSize = keyof typeof ICONBOX_SIZES;\n\nexport interface IconBoxRecipeOptions {\n variant?: IconBoxVariant;\n size?: IconBoxSize;\n disabled?: boolean;\n loading?: boolean;\n interactive?: boolean;\n hovered?: boolean;\n focused?: boolean;\n active?: boolean;\n pill?: boolean;\n fullWidth?: boolean;\n}\n\nexport function getIconBoxClasses(opts: IconBoxRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n pill = false,\n fullWidth = false,\n } = opts;\n\n const variant = resolveOption({\n name: \"icon box variant\",\n value: variantInput,\n allowed: ICONBOX_VARIANTS,\n fallback: \"primary\",\n });\n const size = resolveOption({\n name: \"icon box size\",\n value: sizeInput,\n allowed: ICONBOX_SIZES,\n fallback: \"md\",\n });\n\n const variantMap: Record<IconBoxVariant, string> = {\n primary: \"sp-iconbox--primary\",\n secondary: \"sp-iconbox--secondary\",\n success: \"sp-iconbox--success\",\n warning: \"sp-iconbox--warning\",\n danger: \"sp-iconbox--danger\",\n info: \"sp-iconbox--info\",\n neutral: \"sp-iconbox--neutral\",\n ghost: \"sp-iconbox--ghost\",\n accent: \"sp-iconbox--accent\",\n cta: \"sp-iconbox--cta\",\n outline: \"sp-iconbox--outline\",\n };\n const variantClass = variantMap[variant];\n\n const sizeMap: Record<IconBoxSize, string> = {\n xs: \"sp-iconbox--xs\",\n sm: \"sp-iconbox--sm\",\n md: \"sp-iconbox--md\",\n lg: \"sp-iconbox--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-iconbox\",\n variantClass,\n sizeClass,\n disabled && \"sp-iconbox--disabled\",\n loading && \"sp-iconbox--loading\",\n interactive && \"sp-iconbox--interactive\",\n hovered && \"sp-iconbox--hover is-hover\",\n focused && \"sp-iconbox--focus is-focus\",\n active && \"sp-iconbox--active is-active\",\n pill && \"sp-iconbox--pill\",\n fullWidth && \"sp-iconbox--full\"\n );\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst TESTIMONIAL_VARIANTS = {\n elevated: true,\n flat: true,\n outline: true,\n ghost: true,\n} as const;\n\nexport type TestimonialVariant = keyof typeof TESTIMONIAL_VARIANTS;\n\nexport interface TestimonialRecipeOptions {\n variant?: TestimonialVariant;\n disabled?: boolean;\n loading?: boolean;\n interactive?: boolean;\n hovered?: boolean;\n focused?: boolean;\n active?: boolean;\n fullHeight?: boolean;\n}\n\nexport function getTestimonialClasses(opts: TestimonialRecipeOptions = {}): string {\n const {\n variant: variantInput,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n fullHeight = false,\n } = opts;\n\n const variant = resolveOption({\n name: \"testimonial variant\",\n value: variantInput,\n allowed: TESTIMONIAL_VARIANTS,\n fallback: \"outline\",\n });\n\n const variantMap: Record<TestimonialVariant, string> = {\n elevated: \"sp-testimonial--elevated\",\n flat: \"sp-testimonial--flat\",\n outline: \"sp-testimonial--outline\",\n ghost: \"sp-testimonial--ghost\",\n };\n const variantClass = variantMap[variant];\n\n return cx(\n \"sp-testimonial\",\n variantClass,\n disabled && \"sp-testimonial--disabled\",\n loading && \"sp-testimonial--loading\",\n interactive && \"sp-testimonial--interactive\",\n hovered && \"sp-testimonial--hover is-hover\",\n focused && \"sp-testimonial--focus is-focus\",\n active && \"sp-testimonial--active is-active\",\n fullHeight && \"sp-testimonial--full\"\n );\n}\n\nexport function getTestimonialQuoteClasses(): string {\n return cx(\"sp-testimonial-quote\");\n}\n\nexport function getTestimonialAuthorClasses(): string {\n return cx(\"sp-testimonial-author\");\n}\n\nexport function getTestimonialAuthorInfoClasses(): string {\n return cx(\"sp-testimonial-author-info\");\n}\n\nexport function getTestimonialAuthorNameClasses(): string {\n return cx(\"sp-testimonial-author-name\");\n}\n\nexport function getTestimonialAuthorTitleClasses(): string {\n return cx(\"sp-testimonial-author-title\");\n}\n","import { cx } from '../internal/cx'\n\nexport interface PricingCardRecipeOptions {\n featured?: boolean\n disabled?: boolean\n loading?: boolean\n interactive?: boolean\n hovered?: boolean\n focused?: boolean\n active?: boolean\n fullHeight?: boolean\n}\n\nexport function getPricingCardClasses(opts: PricingCardRecipeOptions = {}): string {\n const {\n featured = false,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n fullHeight = false,\n } = opts\n\n return cx(\n 'sp-pricing-card',\n featured && 'sp-pricing-card--featured',\n disabled && 'sp-pricing-card--disabled',\n loading && 'sp-pricing-card--loading',\n interactive && 'sp-pricing-card--interactive',\n hovered && 'sp-pricing-card--hover is-hover',\n focused && 'sp-pricing-card--focus is-focus',\n active && 'sp-pricing-card--active is-active',\n fullHeight && 'sp-pricing-card--full'\n )\n}\n\nexport function getPricingCardBadgeClasses(): string {\n return cx('sp-pricing-card-badge')\n}\n\nexport function getPricingCardPriceContainerClasses(): string {\n return cx('sp-pricing-card-price-container')\n}\n\nexport function getPricingCardPriceClasses(): string {\n return cx('sp-pricing-card-price')\n}\n\nexport function getPricingCardDescriptionClasses(): string {\n return cx('sp-pricing-card-description')\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst RATING_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const\n\nexport type RatingSize = keyof typeof RATING_SIZES\n\nexport interface RatingRecipeOptions {\n size?: RatingSize\n disabled?: boolean\n loading?: boolean\n interactive?: boolean\n hovered?: boolean\n focused?: boolean\n active?: boolean\n pill?: boolean\n fullWidth?: boolean\n}\n\nexport function getRatingClasses(opts: RatingRecipeOptions = {}): string {\n const {\n size: sizeInput,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n pill = false,\n fullWidth = false,\n } = opts\n\n const size = resolveOption({\n name: 'rating size',\n value: sizeInput,\n allowed: RATING_SIZES,\n fallback: 'md',\n })\n\n return cx(\n 'sp-rating',\n `sp-rating--${size}`,\n disabled && 'sp-rating--disabled',\n loading && 'sp-rating--loading',\n interactive && 'sp-rating--interactive',\n hovered && 'sp-rating--hover is-hover',\n focused && 'sp-rating--focus is-focus',\n active && 'sp-rating--active is-active',\n pill && 'sp-rating--pill',\n fullWidth && 'sp-rating--full'\n )\n}\n\nexport function getRatingStarsClasses(): string {\n return cx('sp-rating-stars')\n}\n\nexport function getRatingStarClasses(isFilled: boolean = false): string {\n return cx('sp-rating-star', isFilled && 'sp-rating-star--filled')\n}\n\nexport function getRatingTextClasses(opts: { disabled?: boolean } = {}): string {\n const { disabled = false } = opts\n return cx('sp-rating-text', disabled && 'sp-rating-text--disabled')\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst ALERT_VARIANTS = {\n info: true,\n success: true,\n warning: true,\n danger: true,\n neutral: true,\n} as const\n\nconst ALERT_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const\n\nexport type AlertVariant = keyof typeof ALERT_VARIANTS\nexport type AlertSize = keyof typeof ALERT_SIZES\n\nexport interface AlertRecipeOptions {\n variant?: AlertVariant\n size?: AlertSize\n dismissed?: boolean\n fullWidth?: boolean\n interactive?: boolean\n hovered?: boolean\n focused?: boolean\n active?: boolean\n disabled?: boolean\n loading?: boolean\n}\n\nexport function getAlertClasses(opts: AlertRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n dismissed = false,\n fullWidth = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n disabled = false,\n loading = false,\n } = opts\n\n const variant = resolveOption({\n name: 'alert variant',\n value: variantInput,\n allowed: ALERT_VARIANTS,\n fallback: 'info',\n })\n\n const size = resolveOption({\n name: 'alert size',\n value: sizeInput,\n allowed: ALERT_SIZES,\n fallback: 'md',\n })\n\n return cx(\n 'sp-alert',\n `sp-alert--${variant}`,\n `sp-alert--${size}`,\n dismissed && 'sp-alert--dismissed',\n fullWidth && 'sp-alert--full',\n interactive && 'sp-alert--interactive',\n hovered && 'sp-alert--hover is-hover',\n focused && 'sp-alert--focus is-focus',\n active && 'sp-alert--active is-active',\n disabled && 'sp-alert--disabled',\n loading && 'sp-alert--loading'\n )\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst AVATAR_SIZES = {\n xs: true,\n sm: true,\n md: true,\n lg: true,\n xl: true,\n} as const\n\nconst AVATAR_SHAPES = {\n circle: true,\n square: true,\n} as const\n\nexport type AvatarSize = keyof typeof AVATAR_SIZES\nexport type AvatarShape = keyof typeof AVATAR_SHAPES\n\nexport interface AvatarRecipeOptions {\n size?: AvatarSize\n shape?: AvatarShape\n disabled?: boolean\n loading?: boolean\n interactive?: boolean\n hovered?: boolean\n focused?: boolean\n active?: boolean\n fullWidth?: boolean\n placeholder?: boolean\n}\n\nexport function getAvatarClasses(opts: AvatarRecipeOptions = {}): string {\n const {\n size: sizeInput,\n shape: shapeInput,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n fullWidth = false,\n placeholder = false,\n } = opts\n\n const size = resolveOption({\n name: 'avatar size',\n value: sizeInput,\n allowed: AVATAR_SIZES,\n fallback: 'md',\n })\n\n const shape = resolveOption({\n name: 'avatar shape',\n value: shapeInput,\n allowed: AVATAR_SHAPES,\n fallback: 'circle',\n })\n\n return cx(\n 'sp-avatar',\n `sp-avatar--${size}`,\n `sp-avatar--${shape}`,\n disabled && 'sp-avatar--disabled',\n loading && 'sp-avatar--loading',\n interactive && 'sp-avatar--interactive',\n hovered && 'sp-avatar--hover is-hover',\n focused && 'sp-avatar--focus is-focus',\n active && 'sp-avatar--active is-active',\n fullWidth && 'sp-avatar--full',\n placeholder && 'sp-avatar--placeholder'\n )\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst TAG_VARIANTS = {\n default: true,\n primary: true,\n secondary: true,\n success: true,\n warning: true,\n danger: true,\n info: true,\n neutral: true,\n accent: true,\n cta: true,\n outline: true,\n ghost: true,\n} as const\n\nconst TAG_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const\n\nexport type TagVariant = keyof typeof TAG_VARIANTS\nexport type TagSize = keyof typeof TAG_SIZES\n\nexport interface TagRecipeOptions {\n variant?: TagVariant\n size?: TagSize\n dismissible?: boolean\n selected?: boolean\n disabled?: boolean\n loading?: boolean\n interactive?: boolean\n hovered?: boolean\n focused?: boolean\n active?: boolean\n fullWidth?: boolean\n}\n\nexport function getTagClasses(opts: TagRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n dismissible = false,\n selected = false,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n fullWidth = false,\n } = opts\n\n const variant = resolveOption({\n name: 'tag variant',\n value: variantInput,\n allowed: TAG_VARIANTS,\n fallback: 'default',\n })\n\n const size =\n sizeInput &&\n resolveOption({\n name: 'tag size',\n value: sizeInput,\n allowed: TAG_SIZES,\n fallback: 'md',\n })\n\n return cx(\n 'sp-tag',\n `sp-tag--${variant}`,\n size && `sp-tag--${size}`,\n dismissible && 'sp-tag--dismissible',\n selected && 'sp-tag--selected',\n disabled && 'sp-tag--disabled',\n loading && 'sp-tag--loading',\n interactive && 'sp-tag--interactive',\n hovered && 'sp-tag--hover is-hover',\n focused && 'sp-tag--focus is-focus',\n active && 'sp-tag--active is-active',\n fullWidth && 'sp-tag--full'\n )\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst SPINNER_VARIANTS = {\n primary: true,\n secondary: true,\n success: true,\n warning: true,\n danger: true,\n info: true,\n neutral: true,\n accent: true,\n cta: true,\n} as const\n\nconst SPINNER_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const\n\nexport type SpinnerVariant = keyof typeof SPINNER_VARIANTS\nexport type SpinnerSize = keyof typeof SPINNER_SIZES\n\nexport interface SpinnerRecipeOptions {\n variant?: SpinnerVariant\n size?: SpinnerSize\n disabled?: boolean\n loading?: boolean\n}\n\nexport function getSpinnerClasses(opts: SpinnerRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n disabled = false,\n loading = false,\n } = opts\n\n const variant =\n variantInput &&\n resolveOption({\n name: 'spinner variant',\n value: variantInput,\n allowed: SPINNER_VARIANTS,\n fallback: 'primary',\n })\n\n const size = resolveOption({\n name: 'spinner size',\n value: sizeInput,\n allowed: SPINNER_SIZES,\n fallback: 'md',\n })\n\n return cx(\n 'sp-spinner',\n variant && `sp-spinner--${variant}`,\n `sp-spinner--${size}`,\n disabled && 'sp-spinner--disabled',\n loading && 'sp-spinner--loading'\n )\n}\n","import { cx } from '../internal/cx'\n\nexport interface NavRecipeOptions {\n bordered?: boolean\n sticky?: boolean\n fullWidth?: boolean\n}\n\nexport function getNavClasses(opts: NavRecipeOptions = {}): string {\n const { bordered = false, sticky = false, fullWidth = false } = opts\n\n return cx(\n 'sp-nav',\n bordered && 'sp-nav--bordered',\n sticky && 'sp-nav--sticky',\n fullWidth && 'sp-nav--full'\n )\n}\n\nexport function getNavLinksClasses(): string {\n return cx('sp-nav__links')\n}\n\nexport interface NavLinkRecipeOptions {\n active?: boolean\n disabled?: boolean\n hovered?: boolean\n focused?: boolean\n}\n\nexport function getNavLinkClasses(opts: NavLinkRecipeOptions = {}): string {\n const {\n active = false,\n disabled = false,\n hovered = false,\n focused = false,\n } = opts\n\n return cx(\n 'sp-nav__link',\n active && 'sp-nav__link--active',\n disabled && 'sp-nav__link--disabled',\n hovered && 'sp-nav__link--hover is-hover',\n focused && 'sp-nav__link--focus is-focus'\n )\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst TOAST_VARIANTS = {\n info: true,\n success: true,\n warning: true,\n danger: true,\n} as const\n\nexport type ToastVariant = keyof typeof TOAST_VARIANTS\n\nexport interface ToastRecipeOptions {\n variant?: ToastVariant\n dismissed?: boolean\n fullWidth?: boolean\n}\n\nexport function getToastClasses(opts: ToastRecipeOptions = {}): string {\n const { variant: variantInput, dismissed = false, fullWidth = false } = opts\n\n const variant = resolveOption({\n name: 'toast variant',\n value: variantInput,\n allowed: TOAST_VARIANTS,\n fallback: 'info',\n })\n\n return cx(\n 'sp-toast',\n `sp-toast--${variant}`,\n dismissed && 'sp-toast--dismissed',\n fullWidth && 'sp-toast--full'\n )\n}\n\nexport interface ToastIconRecipeOptions {\n variant?: ToastVariant\n}\n\nexport function getToastIconClasses(\n opts: ToastIconRecipeOptions = {}\n): string {\n const { variant: variantInput } = opts\n\n const variant = resolveOption({\n name: 'toast variant',\n value: variantInput,\n allowed: TOAST_VARIANTS,\n fallback: 'info',\n })\n\n return cx('sp-toast__icon', `sp-toast__icon--${variant}`)\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst TOOLTIP_PLACEMENTS = {\n top: true,\n bottom: true,\n left: true,\n right: true,\n} as const\n\nexport type TooltipPlacement = keyof typeof TOOLTIP_PLACEMENTS\n\nexport interface TooltipRecipeOptions {\n placement?: TooltipPlacement\n visible?: boolean\n}\n\nexport function getTooltipClasses(opts: TooltipRecipeOptions = {}): string {\n const { placement: placementInput, visible = false } = opts\n\n const placement = resolveOption({\n name: 'tooltip placement',\n value: placementInput,\n allowed: TOOLTIP_PLACEMENTS,\n fallback: 'top',\n })\n\n return cx(\n 'sp-tooltip',\n `sp-tooltip--${placement}`,\n visible && 'sp-tooltip--visible'\n )\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst DROPDOWN_PLACEMENTS = {\n 'bottom-start': true,\n 'bottom-end': true,\n 'top-start': true,\n 'top-end': true,\n} as const\n\nexport type DropdownPlacement = keyof typeof DROPDOWN_PLACEMENTS\n\nexport interface DropdownRecipeOptions {\n fullWidth?: boolean\n}\n\nexport function getDropdownClasses(opts: DropdownRecipeOptions = {}): string {\n const { fullWidth = false } = opts\n\n return cx('sp-dropdown', fullWidth && 'sp-dropdown--full')\n}\n\nexport interface DropdownMenuRecipeOptions {\n placement?: DropdownPlacement\n open?: boolean\n}\n\nexport function getDropdownMenuClasses(\n opts: DropdownMenuRecipeOptions = {}\n): string {\n const { placement: placementInput, open = false } = opts\n\n const placement = resolveOption({\n name: 'dropdown menu placement',\n value: placementInput,\n allowed: DROPDOWN_PLACEMENTS,\n fallback: 'bottom-start',\n })\n\n return cx(\n 'sp-dropdown__menu',\n `sp-dropdown__menu--${placement}`,\n open && 'sp-dropdown__menu--open'\n )\n}\n\nexport interface DropdownItemRecipeOptions {\n active?: boolean\n disabled?: boolean\n hovered?: boolean\n focused?: boolean\n}\n\nexport function getDropdownItemClasses(\n opts: DropdownItemRecipeOptions = {}\n): string {\n const {\n active = false,\n disabled = false,\n hovered = false,\n focused = false,\n } = opts\n\n return cx(\n 'sp-dropdown__item',\n active && 'sp-dropdown__item--active',\n disabled && 'sp-dropdown__item--disabled',\n hovered && 'sp-dropdown__item--hover is-hover',\n focused && 'sp-dropdown__item--focus is-focus'\n )\n}\n","import { cx } from '../internal/cx'\n\nexport interface ModalOverlayRecipeOptions {\n open?: boolean\n}\n\nexport function getModalOverlayClasses(\n opts: ModalOverlayRecipeOptions = {}\n): string {\n const { open = false } = opts\n\n return cx('sp-modal-overlay', open && 'sp-modal-overlay--open')\n}\n\nexport interface ModalRecipeOptions {\n open?: boolean\n fullWidth?: boolean\n}\n\nexport function getModalClasses(opts: ModalRecipeOptions = {}): string {\n const { open = false, fullWidth = false } = opts\n\n return cx(\n 'sp-modal',\n open && 'sp-modal--open',\n fullWidth && 'sp-modal--full'\n )\n}\n","export interface ContainerRecipeOptions {}\n\nexport function getContainerClasses(_opts: ContainerRecipeOptions = {}): string {\n return 'sp-container'\n}\n","import { resolveOption } from '../internal/resolve-option'\n\nconst STACK_DIRECTIONS = {\n vertical: true,\n horizontal: true,\n} as const\n\nexport type StackDirection = keyof typeof STACK_DIRECTIONS\n\nexport interface StackRecipeOptions {\n direction?: StackDirection\n}\n\nexport function getStackClasses(opts: StackRecipeOptions = {}): string {\n const { direction: directionInput } = opts\n\n const direction = resolveOption({\n name: 'stack direction',\n value: directionInput,\n allowed: STACK_DIRECTIONS,\n fallback: 'vertical',\n })\n\n return direction === 'horizontal' ? 'sp-hstack' : 'sp-stack'\n}\n","export interface SectionRecipeOptions {}\n\nexport function getSectionClasses(_opts: SectionRecipeOptions = {}): string {\n return 'sp-section'\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst GRID_COLUMNS = {\n '1': true,\n '2': true,\n '3': true,\n '4': true,\n '6': true,\n '12': true,\n} as const\n\nconst GRID_GAPS = {\n sm: true,\n md: true,\n lg: true,\n} as const\n\nexport type GridColumns = 1 | 2 | 3 | 4 | 6 | 12\nexport type GridGap = keyof typeof GRID_GAPS\n\nexport interface GridRecipeOptions {\n columns?: GridColumns\n gap?: GridGap\n}\n\nexport function getGridClasses(opts: GridRecipeOptions = {}): string {\n const { columns: columnsInput, gap: gapInput } = opts\n\n const columns = resolveOption({\n name: 'grid columns',\n value: columnsInput === undefined ? undefined : String(columnsInput),\n allowed: GRID_COLUMNS,\n fallback: '1',\n })\n\n const gap = resolveOption({\n name: 'grid gap',\n value: gapInput,\n allowed: GRID_GAPS,\n fallback: 'md',\n })\n\n return cx('sp-grid', `sp-grid--gap-${gap}`, `sp-grid-cols-${columns}`)\n}\n"]}
1
+ {"version":3,"sources":["../src/css-constants.ts","../src/internal/cx.ts","../src/internal/resolve-option.ts","../src/recipes/button.ts","../src/recipes/card.ts","../src/recipes/input.ts","../src/recipes/badge.ts","../src/recipes/iconbox.ts","../src/recipes/testimonial.ts","../src/recipes/pricing-card.ts","../src/recipes/rating.ts","../src/recipes/alert.ts","../src/recipes/avatar.ts","../src/recipes/tag.ts","../src/recipes/spinner.ts","../src/recipes/nav.ts","../src/recipes/sidebar.ts","../src/recipes/footer.ts","../src/recipes/toast.ts","../src/recipes/tooltip.ts","../src/recipes/dropdown.ts","../src/recipes/modal.ts","../src/recipes/container.ts","../src/recipes/stack.ts","../src/recipes/section.ts","../src/recipes/grid.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const spectreBaseStylesPath = \"@phcdevworks/spectre-ui/base.css\";\nexport const spectreComponentsStylesPath = \"@phcdevworks/spectre-ui/components.css\";\nexport const spectreUtilitiesStylesPath = \"@phcdevworks/spectre-ui/utilities.css\";\nexport const spectreIndexStylesPath = \"@phcdevworks/spectre-ui/index.css\";\n\nexport const spectreStyles = {\n index: spectreIndexStylesPath,\n base: spectreBaseStylesPath,\n components: spectreComponentsStylesPath,\n utilities: spectreUtilitiesStylesPath,\n};\n","export function cx(...parts: Array<string | false | null | undefined>): string {\n const seen = new Set<string>();\n const classes: string[] = [];\n\n for (const part of parts) {\n if (!part) continue;\n const trimmed = part.trim();\n if (!trimmed) continue;\n\n if (!/\\s/.test(trimmed)) {\n if (!seen.has(trimmed)) {\n seen.add(trimmed);\n classes.push(trimmed);\n }\n continue;\n }\n\n for (const token of trimmed.split(/\\s+/)) {\n if (!token || seen.has(token)) continue;\n seen.add(token);\n classes.push(token);\n }\n }\n\n return classes.join(\" \");\n}\n","type AllowedValues<T extends string> = readonly T[] | Record<T, unknown>;\n\nconst hasOwn = (value: object, key: string): boolean =>\n Object.prototype.hasOwnProperty.call(value, key);\n\nconst isAllowedValue = <T extends string>(value: T, allowed: AllowedValues<T>): boolean =>\n Array.isArray(allowed) ? allowed.includes(value) : hasOwn(allowed, value);\n\nexport function resolveOption<T extends string>(config: {\n name: string;\n value: T | undefined;\n allowed: AllowedValues<T>;\n fallback: T;\n}): T {\n const { name, value, allowed, fallback } = config;\n\n if (value === undefined) return fallback;\n if (isAllowedValue(value, allowed)) return value;\n\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error(`[spectre-ui] Unknown ${name}: ${value}`);\n }\n\n return fallback;\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst BUTTON_VARIANTS = {\n primary: true,\n secondary: true,\n ghost: true,\n danger: true,\n success: true,\n cta: true,\n accent: true,\n} as const;\n\nconst BUTTON_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const;\n\nexport type ButtonVariant = keyof typeof BUTTON_VARIANTS;\nexport type ButtonSize = keyof typeof BUTTON_SIZES;\n\nexport interface ButtonRecipeOptions {\n variant?: ButtonVariant;\n size?: ButtonSize;\n fullWidth?: boolean;\n loading?: boolean;\n disabled?: boolean;\n hovered?: boolean;\n focused?: boolean;\n active?: boolean;\n iconOnly?: boolean;\n pill?: boolean;\n}\n\nexport function getButtonClasses(opts: ButtonRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n fullWidth = false,\n loading = false,\n disabled = false,\n hovered = false,\n focused = false,\n active = false,\n iconOnly = false,\n pill = false,\n } = opts;\n\n const variant = resolveOption({\n name: \"button variant\",\n value: variantInput,\n allowed: BUTTON_VARIANTS,\n fallback: \"primary\",\n });\n const size = resolveOption({\n name: \"button size\",\n value: sizeInput,\n allowed: BUTTON_SIZES,\n fallback: \"md\",\n });\n\n const variantMap: Record<ButtonVariant, string> = {\n primary: \"sp-btn--primary\",\n secondary: \"sp-btn--secondary\",\n ghost: \"sp-btn--ghost\",\n danger: \"sp-btn--danger\",\n success: \"sp-btn--success\",\n cta: \"sp-btn--cta\",\n accent: \"sp-btn--accent\",\n };\n const variantClass = variantMap[variant];\n\n const sizeMap: Record<ButtonSize, string> = {\n sm: \"sp-btn--sm\",\n md: \"sp-btn--md\",\n lg: \"sp-btn--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-btn\",\n variantClass,\n sizeClass,\n fullWidth && \"sp-btn--full\",\n loading && \"sp-btn--loading\",\n disabled && \"sp-btn--disabled\",\n hovered && \"sp-btn--hover is-hover\",\n focused && \"sp-btn--focus is-focus\",\n active && \"sp-btn--active is-active\",\n iconOnly && \"sp-btn--icon\",\n pill && \"sp-btn--pill\",\n );\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst CARD_VARIANTS = {\n elevated: true,\n flat: true,\n outline: true,\n ghost: true,\n} as const;\n\nexport type CardVariant = keyof typeof CARD_VARIANTS;\n\nexport interface CardRecipeOptions {\n variant?: CardVariant;\n interactive?: boolean;\n padded?: boolean;\n fullHeight?: boolean;\n disabled?: boolean;\n loading?: boolean;\n hovered?: boolean;\n focused?: boolean;\n active?: boolean;\n}\n\nexport function getCardClasses(opts: CardRecipeOptions = {}): string {\n const {\n variant: variantInput,\n interactive = false,\n padded = false,\n fullHeight = false,\n disabled = false,\n loading = false,\n hovered = false,\n focused = false,\n active = false,\n } = opts;\n\n const variant = resolveOption({\n name: \"card variant\",\n value: variantInput,\n allowed: CARD_VARIANTS,\n fallback: \"elevated\",\n });\n\n const variantMap: Record<CardVariant, string> = {\n elevated: \"sp-card--elevated\",\n flat: \"sp-card--flat\",\n outline: \"sp-card--outline\",\n ghost: \"sp-card--ghost\",\n };\n const variantClass = variantMap[variant];\n\n return cx(\n \"sp-card\",\n variantClass,\n interactive && \"sp-card--interactive\",\n padded && \"sp-card--padded\",\n fullHeight && \"sp-card--full\",\n disabled && \"sp-card--disabled\",\n loading && \"sp-card--loading\",\n hovered && \"sp-card--hover is-hover\",\n focused && \"sp-card--focus is-focus\",\n active && \"sp-card--active is-active\",\n );\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst INPUT_STATES = {\n default: true,\n error: true,\n success: true,\n disabled: true,\n loading: true,\n} as const;\n\nconst INPUT_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const;\n\nexport type InputState = keyof typeof INPUT_STATES;\nexport type InputSize = keyof typeof INPUT_SIZES;\n\nexport interface InputRecipeOptions {\n state?: InputState;\n size?: InputSize;\n fullWidth?: boolean;\n pill?: boolean;\n focused?: boolean;\n hovered?: boolean;\n active?: boolean;\n disabled?: boolean;\n loading?: boolean;\n}\n\nexport function getInputClasses(opts: InputRecipeOptions = {}): string {\n const {\n state: stateInput,\n size: sizeInput,\n fullWidth = false,\n pill = false,\n focused = false,\n hovered = false,\n active = false,\n disabled = false,\n loading = false,\n } = opts;\n\n const state = resolveOption({\n name: \"input state\",\n value: stateInput,\n allowed: INPUT_STATES,\n fallback: \"default\",\n });\n const size = resolveOption({\n name: \"input size\",\n value: sizeInput,\n allowed: INPUT_SIZES,\n fallback: \"md\",\n });\n\n const sizeMap: Record<InputSize, string> = {\n sm: \"sp-input--sm\",\n md: \"sp-input--md\",\n lg: \"sp-input--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-input\",\n sizeClass,\n state === \"error\" && \"sp-input--error\",\n state === \"success\" && \"sp-input--success\",\n // Visual state only; actual disabled attribute is handled by adapters.\n (state === \"disabled\" || disabled) && \"sp-input--disabled\",\n (state === \"loading\" || loading) && \"sp-input--loading\",\n focused && \"sp-input--focus is-focus\",\n hovered && \"sp-input--hover is-hover\",\n active && \"sp-input--active is-active\",\n fullWidth && \"sp-input--full\",\n pill && \"sp-input--pill\",\n );\n}\n\nexport function getInputWrapperClasses(): string {\n return cx(\"sp-input-wrapper\");\n}\n\nexport function getInputLabelClasses(opts: { disabled?: boolean } = {}): string {\n const { disabled = false } = opts;\n return cx(\n \"sp-label\",\n disabled && \"sp-label--disabled\"\n );\n}\n\nexport function getInputHelperTextClasses(opts: { disabled?: boolean } = {}): string {\n const { disabled = false } = opts;\n return cx(\n \"sp-helper-text\",\n disabled && \"sp-helper-text--disabled\"\n );\n}\n\nexport function getInputErrorMessageClasses(): string {\n return cx(\"sp-error-message\");\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst BADGE_VARIANTS = {\n primary: true,\n secondary: true,\n success: true,\n warning: true,\n danger: true,\n neutral: true,\n info: true,\n ghost: true,\n outline: true,\n accent: true,\n cta: true,\n} as const;\n\nconst BADGE_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const;\n\nexport type BadgeVariant = keyof typeof BADGE_VARIANTS;\nexport type BadgeSize = keyof typeof BADGE_SIZES;\n\nexport interface BadgeRecipeOptions {\n variant?: BadgeVariant;\n size?: BadgeSize;\n interactive?: boolean;\n hovered?: boolean;\n focused?: boolean;\n active?: boolean;\n disabled?: boolean;\n loading?: boolean;\n fullWidth?: boolean;\n}\n\nexport function getBadgeClasses(opts: BadgeRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n disabled = false,\n loading = false,\n fullWidth = false,\n } = opts;\n\n const variant = resolveOption({\n name: \"badge variant\",\n value: variantInput,\n allowed: BADGE_VARIANTS,\n fallback: \"primary\",\n });\n const size = resolveOption({\n name: \"badge size\",\n value: sizeInput,\n allowed: BADGE_SIZES,\n fallback: \"md\",\n });\n\n const variantMap: Record<BadgeVariant, string> = {\n primary: \"sp-badge--primary\",\n secondary: \"sp-badge--secondary\",\n success: \"sp-badge--success\",\n warning: \"sp-badge--warning\",\n danger: \"sp-badge--danger\",\n neutral: \"sp-badge--neutral\",\n info: \"sp-badge--info\",\n ghost: \"sp-badge--ghost\",\n outline: \"sp-badge--outline\",\n accent: \"sp-badge--accent\",\n cta: \"sp-badge--cta\",\n };\n const variantClass = variantMap[variant];\n\n const sizeMap: Record<BadgeSize, string> = {\n sm: \"sp-badge--sm\",\n md: \"sp-badge--md\",\n lg: \"sp-badge--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-badge\",\n variantClass,\n sizeClass,\n interactive && \"sp-badge--interactive\",\n hovered && \"sp-badge--hover is-hover\",\n focused && \"sp-badge--focus is-focus\",\n active && \"sp-badge--active is-active\",\n disabled && \"sp-badge--disabled\",\n loading && \"sp-badge--loading\",\n fullWidth && \"sp-badge--full\"\n );\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst ICONBOX_VARIANTS = {\n primary: true,\n secondary: true,\n success: true,\n warning: true,\n danger: true,\n info: true,\n neutral: true,\n ghost: true,\n accent: true,\n cta: true,\n outline: true,\n} as const;\n\nconst ICONBOX_SIZES = {\n xs: true,\n sm: true,\n md: true,\n lg: true,\n} as const;\n\nexport type IconBoxVariant = keyof typeof ICONBOX_VARIANTS;\nexport type IconBoxSize = keyof typeof ICONBOX_SIZES;\n\nexport interface IconBoxRecipeOptions {\n variant?: IconBoxVariant;\n size?: IconBoxSize;\n disabled?: boolean;\n loading?: boolean;\n interactive?: boolean;\n hovered?: boolean;\n focused?: boolean;\n active?: boolean;\n pill?: boolean;\n fullWidth?: boolean;\n}\n\nexport function getIconBoxClasses(opts: IconBoxRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n pill = false,\n fullWidth = false,\n } = opts;\n\n const variant = resolveOption({\n name: \"icon box variant\",\n value: variantInput,\n allowed: ICONBOX_VARIANTS,\n fallback: \"primary\",\n });\n const size = resolveOption({\n name: \"icon box size\",\n value: sizeInput,\n allowed: ICONBOX_SIZES,\n fallback: \"md\",\n });\n\n const variantMap: Record<IconBoxVariant, string> = {\n primary: \"sp-iconbox--primary\",\n secondary: \"sp-iconbox--secondary\",\n success: \"sp-iconbox--success\",\n warning: \"sp-iconbox--warning\",\n danger: \"sp-iconbox--danger\",\n info: \"sp-iconbox--info\",\n neutral: \"sp-iconbox--neutral\",\n ghost: \"sp-iconbox--ghost\",\n accent: \"sp-iconbox--accent\",\n cta: \"sp-iconbox--cta\",\n outline: \"sp-iconbox--outline\",\n };\n const variantClass = variantMap[variant];\n\n const sizeMap: Record<IconBoxSize, string> = {\n xs: \"sp-iconbox--xs\",\n sm: \"sp-iconbox--sm\",\n md: \"sp-iconbox--md\",\n lg: \"sp-iconbox--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-iconbox\",\n variantClass,\n sizeClass,\n disabled && \"sp-iconbox--disabled\",\n loading && \"sp-iconbox--loading\",\n interactive && \"sp-iconbox--interactive\",\n hovered && \"sp-iconbox--hover is-hover\",\n focused && \"sp-iconbox--focus is-focus\",\n active && \"sp-iconbox--active is-active\",\n pill && \"sp-iconbox--pill\",\n fullWidth && \"sp-iconbox--full\"\n );\n}\n","import { cx } from \"../internal/cx\";\nimport { resolveOption } from \"../internal/resolve-option\";\n\nconst TESTIMONIAL_VARIANTS = {\n elevated: true,\n flat: true,\n outline: true,\n ghost: true,\n} as const;\n\nexport type TestimonialVariant = keyof typeof TESTIMONIAL_VARIANTS;\n\nexport interface TestimonialRecipeOptions {\n variant?: TestimonialVariant;\n disabled?: boolean;\n loading?: boolean;\n interactive?: boolean;\n hovered?: boolean;\n focused?: boolean;\n active?: boolean;\n fullHeight?: boolean;\n}\n\nexport function getTestimonialClasses(opts: TestimonialRecipeOptions = {}): string {\n const {\n variant: variantInput,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n fullHeight = false,\n } = opts;\n\n const variant = resolveOption({\n name: \"testimonial variant\",\n value: variantInput,\n allowed: TESTIMONIAL_VARIANTS,\n fallback: \"outline\",\n });\n\n const variantMap: Record<TestimonialVariant, string> = {\n elevated: \"sp-testimonial--elevated\",\n flat: \"sp-testimonial--flat\",\n outline: \"sp-testimonial--outline\",\n ghost: \"sp-testimonial--ghost\",\n };\n const variantClass = variantMap[variant];\n\n return cx(\n \"sp-testimonial\",\n variantClass,\n disabled && \"sp-testimonial--disabled\",\n loading && \"sp-testimonial--loading\",\n interactive && \"sp-testimonial--interactive\",\n hovered && \"sp-testimonial--hover is-hover\",\n focused && \"sp-testimonial--focus is-focus\",\n active && \"sp-testimonial--active is-active\",\n fullHeight && \"sp-testimonial--full\"\n );\n}\n\nexport function getTestimonialQuoteClasses(): string {\n return cx(\"sp-testimonial-quote\");\n}\n\nexport function getTestimonialAuthorClasses(): string {\n return cx(\"sp-testimonial-author\");\n}\n\nexport function getTestimonialAuthorInfoClasses(): string {\n return cx(\"sp-testimonial-author-info\");\n}\n\nexport function getTestimonialAuthorNameClasses(): string {\n return cx(\"sp-testimonial-author-name\");\n}\n\nexport function getTestimonialAuthorTitleClasses(): string {\n return cx(\"sp-testimonial-author-title\");\n}\n","import { cx } from '../internal/cx'\n\nexport interface PricingCardRecipeOptions {\n featured?: boolean\n disabled?: boolean\n loading?: boolean\n interactive?: boolean\n hovered?: boolean\n focused?: boolean\n active?: boolean\n fullHeight?: boolean\n}\n\nexport function getPricingCardClasses(opts: PricingCardRecipeOptions = {}): string {\n const {\n featured = false,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n fullHeight = false,\n } = opts\n\n return cx(\n 'sp-pricing-card',\n featured && 'sp-pricing-card--featured',\n disabled && 'sp-pricing-card--disabled',\n loading && 'sp-pricing-card--loading',\n interactive && 'sp-pricing-card--interactive',\n hovered && 'sp-pricing-card--hover is-hover',\n focused && 'sp-pricing-card--focus is-focus',\n active && 'sp-pricing-card--active is-active',\n fullHeight && 'sp-pricing-card--full'\n )\n}\n\nexport function getPricingCardBadgeClasses(): string {\n return cx('sp-pricing-card-badge')\n}\n\nexport function getPricingCardPriceContainerClasses(): string {\n return cx('sp-pricing-card-price-container')\n}\n\nexport function getPricingCardPriceClasses(): string {\n return cx('sp-pricing-card-price')\n}\n\nexport function getPricingCardDescriptionClasses(): string {\n return cx('sp-pricing-card-description')\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst RATING_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const\n\nexport type RatingSize = keyof typeof RATING_SIZES\n\nexport interface RatingRecipeOptions {\n size?: RatingSize\n disabled?: boolean\n loading?: boolean\n interactive?: boolean\n hovered?: boolean\n focused?: boolean\n active?: boolean\n pill?: boolean\n fullWidth?: boolean\n}\n\nexport function getRatingClasses(opts: RatingRecipeOptions = {}): string {\n const {\n size: sizeInput,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n pill = false,\n fullWidth = false,\n } = opts\n\n const size = resolveOption({\n name: 'rating size',\n value: sizeInput,\n allowed: RATING_SIZES,\n fallback: 'md',\n })\n\n return cx(\n 'sp-rating',\n `sp-rating--${size}`,\n disabled && 'sp-rating--disabled',\n loading && 'sp-rating--loading',\n interactive && 'sp-rating--interactive',\n hovered && 'sp-rating--hover is-hover',\n focused && 'sp-rating--focus is-focus',\n active && 'sp-rating--active is-active',\n pill && 'sp-rating--pill',\n fullWidth && 'sp-rating--full'\n )\n}\n\nexport function getRatingStarsClasses(): string {\n return cx('sp-rating-stars')\n}\n\nexport function getRatingStarClasses(isFilled: boolean = false): string {\n return cx('sp-rating-star', isFilled && 'sp-rating-star--filled')\n}\n\nexport function getRatingTextClasses(opts: { disabled?: boolean } = {}): string {\n const { disabled = false } = opts\n return cx('sp-rating-text', disabled && 'sp-rating-text--disabled')\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst ALERT_VARIANTS = {\n info: true,\n success: true,\n warning: true,\n danger: true,\n neutral: true,\n} as const\n\nconst ALERT_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const\n\nexport type AlertVariant = keyof typeof ALERT_VARIANTS\nexport type AlertSize = keyof typeof ALERT_SIZES\n\nexport interface AlertRecipeOptions {\n variant?: AlertVariant\n size?: AlertSize\n dismissed?: boolean\n fullWidth?: boolean\n interactive?: boolean\n hovered?: boolean\n focused?: boolean\n active?: boolean\n disabled?: boolean\n loading?: boolean\n}\n\nexport function getAlertClasses(opts: AlertRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n dismissed = false,\n fullWidth = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n disabled = false,\n loading = false,\n } = opts\n\n const variant = resolveOption({\n name: 'alert variant',\n value: variantInput,\n allowed: ALERT_VARIANTS,\n fallback: 'info',\n })\n\n const size = resolveOption({\n name: 'alert size',\n value: sizeInput,\n allowed: ALERT_SIZES,\n fallback: 'md',\n })\n\n return cx(\n 'sp-alert',\n `sp-alert--${variant}`,\n `sp-alert--${size}`,\n dismissed && 'sp-alert--dismissed',\n fullWidth && 'sp-alert--full',\n interactive && 'sp-alert--interactive',\n hovered && 'sp-alert--hover is-hover',\n focused && 'sp-alert--focus is-focus',\n active && 'sp-alert--active is-active',\n disabled && 'sp-alert--disabled',\n loading && 'sp-alert--loading'\n )\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst AVATAR_SIZES = {\n xs: true,\n sm: true,\n md: true,\n lg: true,\n xl: true,\n} as const\n\nconst AVATAR_SHAPES = {\n circle: true,\n square: true,\n} as const\n\nexport type AvatarSize = keyof typeof AVATAR_SIZES\nexport type AvatarShape = keyof typeof AVATAR_SHAPES\n\nexport interface AvatarRecipeOptions {\n size?: AvatarSize\n shape?: AvatarShape\n disabled?: boolean\n loading?: boolean\n interactive?: boolean\n hovered?: boolean\n focused?: boolean\n active?: boolean\n fullWidth?: boolean\n placeholder?: boolean\n}\n\nexport function getAvatarClasses(opts: AvatarRecipeOptions = {}): string {\n const {\n size: sizeInput,\n shape: shapeInput,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n fullWidth = false,\n placeholder = false,\n } = opts\n\n const size = resolveOption({\n name: 'avatar size',\n value: sizeInput,\n allowed: AVATAR_SIZES,\n fallback: 'md',\n })\n\n const shape = resolveOption({\n name: 'avatar shape',\n value: shapeInput,\n allowed: AVATAR_SHAPES,\n fallback: 'circle',\n })\n\n return cx(\n 'sp-avatar',\n `sp-avatar--${size}`,\n `sp-avatar--${shape}`,\n disabled && 'sp-avatar--disabled',\n loading && 'sp-avatar--loading',\n interactive && 'sp-avatar--interactive',\n hovered && 'sp-avatar--hover is-hover',\n focused && 'sp-avatar--focus is-focus',\n active && 'sp-avatar--active is-active',\n fullWidth && 'sp-avatar--full',\n placeholder && 'sp-avatar--placeholder'\n )\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst TAG_VARIANTS = {\n default: true,\n primary: true,\n secondary: true,\n success: true,\n warning: true,\n danger: true,\n info: true,\n neutral: true,\n accent: true,\n cta: true,\n outline: true,\n ghost: true,\n} as const\n\nconst TAG_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const\n\nexport type TagVariant = keyof typeof TAG_VARIANTS\nexport type TagSize = keyof typeof TAG_SIZES\n\nexport interface TagRecipeOptions {\n variant?: TagVariant\n size?: TagSize\n dismissible?: boolean\n selected?: boolean\n disabled?: boolean\n loading?: boolean\n interactive?: boolean\n hovered?: boolean\n focused?: boolean\n active?: boolean\n fullWidth?: boolean\n}\n\nexport function getTagClasses(opts: TagRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n dismissible = false,\n selected = false,\n disabled = false,\n loading = false,\n interactive = false,\n hovered = false,\n focused = false,\n active = false,\n fullWidth = false,\n } = opts\n\n const variant = resolveOption({\n name: 'tag variant',\n value: variantInput,\n allowed: TAG_VARIANTS,\n fallback: 'default',\n })\n\n const size =\n sizeInput &&\n resolveOption({\n name: 'tag size',\n value: sizeInput,\n allowed: TAG_SIZES,\n fallback: 'md',\n })\n\n return cx(\n 'sp-tag',\n `sp-tag--${variant}`,\n size && `sp-tag--${size}`,\n dismissible && 'sp-tag--dismissible',\n selected && 'sp-tag--selected',\n disabled && 'sp-tag--disabled',\n loading && 'sp-tag--loading',\n interactive && 'sp-tag--interactive',\n hovered && 'sp-tag--hover is-hover',\n focused && 'sp-tag--focus is-focus',\n active && 'sp-tag--active is-active',\n fullWidth && 'sp-tag--full'\n )\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst SPINNER_VARIANTS = {\n primary: true,\n secondary: true,\n success: true,\n warning: true,\n danger: true,\n info: true,\n neutral: true,\n accent: true,\n cta: true,\n} as const\n\nconst SPINNER_SIZES = {\n sm: true,\n md: true,\n lg: true,\n} as const\n\nexport type SpinnerVariant = keyof typeof SPINNER_VARIANTS\nexport type SpinnerSize = keyof typeof SPINNER_SIZES\n\nexport interface SpinnerRecipeOptions {\n variant?: SpinnerVariant\n size?: SpinnerSize\n disabled?: boolean\n loading?: boolean\n}\n\nexport function getSpinnerClasses(opts: SpinnerRecipeOptions = {}): string {\n const {\n variant: variantInput,\n size: sizeInput,\n disabled = false,\n loading = false,\n } = opts\n\n const variant =\n variantInput &&\n resolveOption({\n name: 'spinner variant',\n value: variantInput,\n allowed: SPINNER_VARIANTS,\n fallback: 'primary',\n })\n\n const size = resolveOption({\n name: 'spinner size',\n value: sizeInput,\n allowed: SPINNER_SIZES,\n fallback: 'md',\n })\n\n return cx(\n 'sp-spinner',\n variant && `sp-spinner--${variant}`,\n `sp-spinner--${size}`,\n disabled && 'sp-spinner--disabled',\n loading && 'sp-spinner--loading'\n )\n}\n","import { cx } from '../internal/cx'\n\nexport interface NavRecipeOptions {\n bordered?: boolean\n sticky?: boolean\n fullWidth?: boolean\n}\n\nexport function getNavClasses(opts: NavRecipeOptions = {}): string {\n const { bordered = false, sticky = false, fullWidth = false } = opts\n\n return cx(\n 'sp-nav',\n bordered && 'sp-nav--bordered',\n sticky && 'sp-nav--sticky',\n fullWidth && 'sp-nav--full'\n )\n}\n\nexport function getNavLinksClasses(): string {\n return cx('sp-nav__links')\n}\n\nexport interface NavLinkRecipeOptions {\n active?: boolean\n disabled?: boolean\n hovered?: boolean\n focused?: boolean\n}\n\nexport function getNavLinkClasses(opts: NavLinkRecipeOptions = {}): string {\n const {\n active = false,\n disabled = false,\n hovered = false,\n focused = false,\n } = opts\n\n return cx(\n 'sp-nav__link',\n active && 'sp-nav__link--active',\n disabled && 'sp-nav__link--disabled',\n hovered && 'sp-nav__link--hover is-hover',\n focused && 'sp-nav__link--focus is-focus'\n )\n}\n","import { cx } from '../internal/cx'\n\nexport interface SidebarRecipeOptions {\n bordered?: boolean\n}\n\nexport function getSidebarClasses(opts: SidebarRecipeOptions = {}): string {\n const { bordered = false } = opts\n\n return cx('sp-sidebar', bordered && 'sp-sidebar--bordered')\n}\n\nexport interface SidebarLinkRecipeOptions {\n active?: boolean\n disabled?: boolean\n hovered?: boolean\n focused?: boolean\n}\n\nexport function getSidebarLinkClasses(opts: SidebarLinkRecipeOptions = {}): string {\n const {\n active = false,\n disabled = false,\n hovered = false,\n focused = false,\n } = opts\n\n return cx(\n 'sp-sidebar__link',\n active && 'sp-sidebar__link--active',\n disabled && 'sp-sidebar__link--disabled',\n hovered && 'sp-sidebar__link--hover is-hover',\n focused && 'sp-sidebar__link--focus is-focus'\n )\n}\n\nexport function getSidebarBackdropClasses(): string {\n return cx('sp-sidebar-backdrop')\n}\n\nexport function getSidebarToggleClasses(): string {\n return cx('sp-sidebar-toggle')\n}\n","import { cx } from '../internal/cx'\n\nexport interface FooterRecipeOptions {\n bordered?: boolean\n fullWidth?: boolean\n}\n\nexport function getFooterClasses(opts: FooterRecipeOptions = {}): string {\n const { bordered = false, fullWidth = false } = opts\n\n return cx('sp-footer', bordered && 'sp-footer--bordered', fullWidth && 'sp-footer--full')\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst TOAST_VARIANTS = {\n info: true,\n success: true,\n warning: true,\n danger: true,\n} as const\n\nexport type ToastVariant = keyof typeof TOAST_VARIANTS\n\nexport interface ToastRecipeOptions {\n variant?: ToastVariant\n dismissed?: boolean\n fullWidth?: boolean\n}\n\nexport function getToastClasses(opts: ToastRecipeOptions = {}): string {\n const { variant: variantInput, dismissed = false, fullWidth = false } = opts\n\n const variant = resolveOption({\n name: 'toast variant',\n value: variantInput,\n allowed: TOAST_VARIANTS,\n fallback: 'info',\n })\n\n return cx(\n 'sp-toast',\n `sp-toast--${variant}`,\n dismissed && 'sp-toast--dismissed',\n fullWidth && 'sp-toast--full'\n )\n}\n\nexport interface ToastIconRecipeOptions {\n variant?: ToastVariant\n}\n\nexport function getToastIconClasses(\n opts: ToastIconRecipeOptions = {}\n): string {\n const { variant: variantInput } = opts\n\n const variant = resolveOption({\n name: 'toast variant',\n value: variantInput,\n allowed: TOAST_VARIANTS,\n fallback: 'info',\n })\n\n return cx('sp-toast__icon', `sp-toast__icon--${variant}`)\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst TOOLTIP_PLACEMENTS = {\n top: true,\n bottom: true,\n left: true,\n right: true,\n} as const\n\nexport type TooltipPlacement = keyof typeof TOOLTIP_PLACEMENTS\n\nexport interface TooltipRecipeOptions {\n placement?: TooltipPlacement\n visible?: boolean\n}\n\nexport function getTooltipClasses(opts: TooltipRecipeOptions = {}): string {\n const { placement: placementInput, visible = false } = opts\n\n const placement = resolveOption({\n name: 'tooltip placement',\n value: placementInput,\n allowed: TOOLTIP_PLACEMENTS,\n fallback: 'top',\n })\n\n return cx(\n 'sp-tooltip',\n `sp-tooltip--${placement}`,\n visible && 'sp-tooltip--visible'\n )\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst DROPDOWN_PLACEMENTS = {\n 'bottom-start': true,\n 'bottom-end': true,\n 'top-start': true,\n 'top-end': true,\n} as const\n\nexport type DropdownPlacement = keyof typeof DROPDOWN_PLACEMENTS\n\nexport interface DropdownRecipeOptions {\n fullWidth?: boolean\n}\n\nexport function getDropdownClasses(opts: DropdownRecipeOptions = {}): string {\n const { fullWidth = false } = opts\n\n return cx('sp-dropdown', fullWidth && 'sp-dropdown--full')\n}\n\nexport interface DropdownMenuRecipeOptions {\n placement?: DropdownPlacement\n open?: boolean\n}\n\nexport function getDropdownMenuClasses(\n opts: DropdownMenuRecipeOptions = {}\n): string {\n const { placement: placementInput, open = false } = opts\n\n const placement = resolveOption({\n name: 'dropdown menu placement',\n value: placementInput,\n allowed: DROPDOWN_PLACEMENTS,\n fallback: 'bottom-start',\n })\n\n return cx(\n 'sp-dropdown__menu',\n `sp-dropdown__menu--${placement}`,\n open && 'sp-dropdown__menu--open'\n )\n}\n\nexport interface DropdownItemRecipeOptions {\n active?: boolean\n disabled?: boolean\n hovered?: boolean\n focused?: boolean\n}\n\nexport function getDropdownItemClasses(\n opts: DropdownItemRecipeOptions = {}\n): string {\n const {\n active = false,\n disabled = false,\n hovered = false,\n focused = false,\n } = opts\n\n return cx(\n 'sp-dropdown__item',\n active && 'sp-dropdown__item--active',\n disabled && 'sp-dropdown__item--disabled',\n hovered && 'sp-dropdown__item--hover is-hover',\n focused && 'sp-dropdown__item--focus is-focus'\n )\n}\n","import { cx } from '../internal/cx'\n\nexport interface ModalOverlayRecipeOptions {\n open?: boolean\n}\n\nexport function getModalOverlayClasses(\n opts: ModalOverlayRecipeOptions = {}\n): string {\n const { open = false } = opts\n\n return cx('sp-modal-overlay', open && 'sp-modal-overlay--open')\n}\n\nexport interface ModalRecipeOptions {\n open?: boolean\n fullWidth?: boolean\n}\n\nexport function getModalClasses(opts: ModalRecipeOptions = {}): string {\n const { open = false, fullWidth = false } = opts\n\n return cx(\n 'sp-modal',\n open && 'sp-modal--open',\n fullWidth && 'sp-modal--full'\n )\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst CONTAINER_MAX_WIDTHS = {\n none: true,\n prose: true,\n} as const\n\nexport type ContainerMaxWidth = Exclude<keyof typeof CONTAINER_MAX_WIDTHS, 'none'>\n\nexport interface ContainerRecipeOptions {\n maxWidth?: ContainerMaxWidth\n}\n\nexport function getContainerClasses(opts: ContainerRecipeOptions = {}): string {\n const { maxWidth: maxWidthInput } = opts\n\n const maxWidth = resolveOption({\n name: 'container maxWidth',\n value: maxWidthInput,\n allowed: CONTAINER_MAX_WIDTHS,\n fallback: 'none',\n })\n\n return cx('sp-container', maxWidth !== 'none' && `sp-container--max-width-${maxWidth}`)\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst STACK_DIRECTIONS = {\n vertical: true,\n horizontal: true,\n} as const\n\nconst STACK_BASES = {\n none: true,\n sidebar: true,\n} as const\n\nconst STACK_ALIGNS = {\n center: true,\n stretch: true,\n} as const\n\nexport type StackDirection = keyof typeof STACK_DIRECTIONS\nexport type StackBasis = Exclude<keyof typeof STACK_BASES, 'none'>\nexport type StackAlign = keyof typeof STACK_ALIGNS\n\nexport interface StackRecipeOptions {\n direction?: StackDirection\n basis?: StackBasis\n align?: StackAlign\n}\n\nexport function getStackClasses(opts: StackRecipeOptions = {}): string {\n const { direction: directionInput, basis: basisInput, align: alignInput } = opts\n\n const direction = resolveOption({\n name: 'stack direction',\n value: directionInput,\n allowed: STACK_DIRECTIONS,\n fallback: 'vertical',\n })\n\n const basis = resolveOption({\n name: 'stack basis',\n value: basisInput,\n allowed: STACK_BASES,\n fallback: 'none',\n })\n\n const align = resolveOption({\n name: 'stack align',\n value: alignInput,\n allowed: STACK_ALIGNS,\n fallback: 'center',\n })\n\n return cx(\n direction === 'horizontal' ? 'sp-hstack' : 'sp-stack',\n basis !== 'none' && `sp-stack--basis-${basis}`,\n align !== 'center' && `sp-stack--align-${align}`\n )\n}\n","export interface SectionRecipeOptions {}\n\nexport function getSectionClasses(_opts: SectionRecipeOptions = {}): string {\n return 'sp-section'\n}\n","import { cx } from '../internal/cx'\nimport { resolveOption } from '../internal/resolve-option'\n\nconst GRID_COLUMNS = {\n '1': true,\n '2': true,\n '3': true,\n '4': true,\n '6': true,\n '12': true,\n} as const\n\nconst GRID_GAPS = {\n sm: true,\n md: true,\n lg: true,\n} as const\n\nexport type GridColumns = 1 | 2 | 3 | 4 | 6 | 12\nexport type GridGap = keyof typeof GRID_GAPS\n\nexport interface GridRecipeOptions {\n columns?: GridColumns\n gap?: GridGap\n}\n\nexport function getGridClasses(opts: GridRecipeOptions = {}): string {\n const { columns: columnsInput, gap: gapInput } = opts\n\n const columns = resolveOption({\n name: 'grid columns',\n value: columnsInput === undefined ? undefined : String(columnsInput),\n allowed: GRID_COLUMNS,\n fallback: '1',\n })\n\n const gap = resolveOption({\n name: 'grid gap',\n value: gapInput,\n allowed: GRID_GAPS,\n fallback: 'md',\n })\n\n return cx('sp-grid', `sp-grid--gap-${gap}`, `sp-grid-cols-${columns}`)\n}\n"]}
@@ -5,6 +5,10 @@
5
5
  --sp-surface-overlay: rgba(0, 0, 0, 0.6);
6
6
  --sp-surface-subtle: #eef1f6;
7
7
  --sp-surface-hero: linear-gradient(135deg, #5b6ee1 0%, #6f3fd7 100%);
8
+ --sp-surface-hover: #eef1f6;
9
+ --sp-surface-selected: #f0f9ff;
10
+ --sp-surface-active: #d9dfeb;
11
+ --sp-surface-divider: #d9dfeb;
8
12
  --sp-text-on-page-default: #141b24;
9
13
  --sp-text-on-page-muted: #4b576a;
10
14
  --sp-text-on-page-subtle: #657287;
@@ -72,6 +76,10 @@
72
76
  --sp-dropdown-item-hover: #eef1f6;
73
77
  --sp-dropdown-item-active: #f0f9ff;
74
78
  --sp-dropdown-item-text: #141b24;
79
+ --sp-link-default: #1f57db;
80
+ --sp-link-hover: #1946b4;
81
+ --sp-link-active: #173b8f;
82
+ --sp-link-visited: #5d28b8;
75
83
  --sp-color-brand-50: #eef4ff;
76
84
  --sp-color-brand-100: #d9e7ff;
77
85
  --sp-color-brand-200: #b9d2ff;
@@ -184,6 +192,8 @@
184
192
  --sp-layout-container-padding-inline-md: 1.5rem;
185
193
  --sp-layout-container-padding-inline-lg: 2rem;
186
194
  --sp-layout-container-max-width: 72rem;
195
+ --sp-layout-container-max-width-prose: 65ch;
196
+ --sp-layout-sidebar-width: 16rem;
187
197
  --sp-border-width-none: 0;
188
198
  --sp-border-width-base: 1px;
189
199
  --sp-border-width-thick: 2px;
@@ -424,6 +434,10 @@
424
434
  --sp-surface-overlay: rgba(0, 0, 0, 0.6);
425
435
  --sp-surface-subtle: #222b38;
426
436
  --sp-surface-hero: linear-gradient(135deg, #5d28b8 0%, #401f75 100%);
437
+ --sp-surface-hover: #374253;
438
+ --sp-surface-selected: #082f49;
439
+ --sp-surface-active: #4b576a;
440
+ --sp-surface-divider: #374253;
427
441
  --sp-text-on-page-default: #f7f8fb;
428
442
  --sp-text-on-page-muted: #b7c1d4;
429
443
  --sp-text-on-page-subtle: #8a96ad;
@@ -491,6 +505,10 @@
491
505
  --sp-dropdown-item-hover: #374253;
492
506
  --sp-dropdown-item-active: #082f49;
493
507
  --sp-dropdown-item-text: #eef1f6;
508
+ --sp-link-default: #1f57db;
509
+ --sp-link-hover: #1946b4;
510
+ --sp-link-active: #173b8f;
511
+ --sp-link-visited: #5d28b8;
494
512
  }
495
513
  @layer utilities {
496
514
  .sp-stack {
@@ -506,6 +524,14 @@
506
524
  gap: var(--sp-layout-stack-gap-md);
507
525
  }
508
526
 
527
+ .sp-stack--basis-sidebar {
528
+ flex: 0 0 var(--sp-layout-sidebar-width);
529
+ }
530
+
531
+ .sp-stack--align-stretch {
532
+ align-items: stretch;
533
+ }
534
+
509
535
  .sp-container {
510
536
  width: 100%;
511
537
  margin-left: auto;
@@ -515,6 +541,10 @@
515
541
  max-width: var(--sp-layout-container-max-width);
516
542
  }
517
543
 
544
+ .sp-container--max-width-prose {
545
+ max-width: var(--sp-layout-container-max-width-prose);
546
+ }
547
+
518
548
  .sp-section {
519
549
  padding-top: var(--sp-layout-section-padding-md);
520
550
  padding-bottom: var(--sp-layout-section-padding-md);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phcdevworks/spectre-ui",
3
- "version": "2.2.0",
3
+ "version": "2.4.0",
4
4
  "description": "@phcdevworks/spectre-ui is the Layer 2 styling contract between @phcdevworks/spectre-tokens and downstream adapters or apps.",
5
5
  "keywords": [
6
6
  "phcdevworks",
@@ -101,14 +101,14 @@
101
101
  "typescript": "^5.9 || ^6.0"
102
102
  },
103
103
  "dependencies": {
104
- "@phcdevworks/spectre-tokens": "^3.0.0"
104
+ "@phcdevworks/spectre-tokens": "^3.1.0"
105
105
  },
106
106
  "devDependencies": {
107
107
  "@phcdevworks/spectre-manifest": "^1.0.0",
108
- "@types/node": "^25.9.3",
109
- "@typescript-eslint/eslint-plugin": "^8.61.1",
110
- "@typescript-eslint/parser": "^8.61.1",
111
- "autoprefixer": "^10.5.0",
108
+ "@types/node": "^26.0.0",
109
+ "@typescript-eslint/eslint-plugin": "^8.62.0",
110
+ "@typescript-eslint/parser": "^8.62.0",
111
+ "autoprefixer": "^10.5.1",
112
112
  "eslint": "^10.5.0",
113
113
  "jiti": "^2.7.0",
114
114
  "postcss": "^8.5.15",
@@ -118,8 +118,8 @@
118
118
  "tailwindcss": "^4.3.1",
119
119
  "tsup": "^8.5.1",
120
120
  "typescript": "^6.0.3",
121
- "typescript-eslint": "^8.61.1",
122
- "vite": "^8.0.16",
121
+ "typescript-eslint": "^8.62.0",
122
+ "vite": "^8.1.0",
123
123
  "vitest": "^4.1.9"
124
124
  },
125
125
  "cSpell.words": [