@phcdevworks/spectre-ui 1.4.0 → 1.5.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/base.css +3 -3
- package/dist/components.css +66 -9
- package/dist/index.cjs +27 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +66 -9
- package/dist/index.d.cts +6 -21
- package/dist/index.d.ts +6 -21
- package/dist/index.js +27 -8
- package/dist/index.js.map +1 -1
- package/dist/utilities.css +3 -3
- package/package.json +7 -7
package/dist/base.css
CHANGED
|
@@ -294,9 +294,9 @@
|
|
|
294
294
|
--sp-button-cta-textdisabled: #8a96ad;
|
|
295
295
|
--sp-button-cta-shadow: 0 4px 14px 0 rgba(51, 109, 244, 0.39);
|
|
296
296
|
--sp-button-cta-focusring: rgba(51, 109, 244, 0.4);
|
|
297
|
-
--sp-button-accent-bg: #
|
|
298
|
-
--sp-button-accent-bghover: #
|
|
299
|
-
--sp-button-accent-bgactive: #
|
|
297
|
+
--sp-button-accent-bg: #5d28b8;
|
|
298
|
+
--sp-button-accent-bghover: #4d2393;
|
|
299
|
+
--sp-button-accent-bgactive: #401f75;
|
|
300
300
|
--sp-button-accent-bgdisabled: #ddccff;
|
|
301
301
|
--sp-button-accent-text: #ffffff;
|
|
302
302
|
--sp-button-accent-textdisabled: #8a96ad;
|
package/dist/components.css
CHANGED
|
@@ -294,9 +294,9 @@
|
|
|
294
294
|
--sp-button-cta-textdisabled: #8a96ad;
|
|
295
295
|
--sp-button-cta-shadow: 0 4px 14px 0 rgba(51, 109, 244, 0.39);
|
|
296
296
|
--sp-button-cta-focusring: rgba(51, 109, 244, 0.4);
|
|
297
|
-
--sp-button-accent-bg: #
|
|
298
|
-
--sp-button-accent-bghover: #
|
|
299
|
-
--sp-button-accent-bgactive: #
|
|
297
|
+
--sp-button-accent-bg: #5d28b8;
|
|
298
|
+
--sp-button-accent-bghover: #4d2393;
|
|
299
|
+
--sp-button-accent-bgactive: #401f75;
|
|
300
300
|
--sp-button-accent-bgdisabled: #ddccff;
|
|
301
301
|
--sp-button-accent-text: #ffffff;
|
|
302
302
|
--sp-button-accent-textdisabled: #8a96ad;
|
|
@@ -496,6 +496,8 @@
|
|
|
496
496
|
--sp-component-badge-info-text: var(--sp-badge-info-text);
|
|
497
497
|
--sp-component-badge-ghost-bg: var(--sp-button-ghost-bg);
|
|
498
498
|
--sp-component-badge-ghost-text: var(--sp-button-ghost-text);
|
|
499
|
+
--sp-component-badge-accent-bg: var(--sp-button-accent-bg);
|
|
500
|
+
--sp-component-badge-accent-text: var(--sp-button-accent-text);
|
|
499
501
|
|
|
500
502
|
/* badge hover states derived from Spectre token semantics */
|
|
501
503
|
--sp-component-badge-primary-bg-hover: var(--sp-button-primary-bghover);
|
|
@@ -506,6 +508,7 @@
|
|
|
506
508
|
--sp-component-badge-neutral-bg-hover: var(--sp-color-neutral-200);
|
|
507
509
|
--sp-component-badge-info-bg-hover: var(--sp-color-info-200);
|
|
508
510
|
--sp-component-badge-ghost-bg-hover: var(--sp-button-ghost-bghover);
|
|
511
|
+
--sp-component-badge-accent-bg-hover: var(--sp-button-accent-bghover);
|
|
509
512
|
|
|
510
513
|
--sp-component-badge-padding-x-sm: var(--sp-space-8);
|
|
511
514
|
--sp-component-badge-padding-x-md: var(--sp-space-12);
|
|
@@ -536,17 +539,21 @@
|
|
|
536
539
|
--sp-component-iconbox-neutral-text: var(--sp-badge-neutral-text);
|
|
537
540
|
--sp-component-iconbox-ghost-bg: var(--sp-button-ghost-bg);
|
|
538
541
|
--sp-component-iconbox-ghost-text: var(--sp-button-ghost-text);
|
|
542
|
+
--sp-component-iconbox-accent-bg: var(--sp-button-accent-bg);
|
|
543
|
+
--sp-component-iconbox-accent-text: var(--sp-button-accent-text);
|
|
539
544
|
|
|
540
545
|
/* testimonial roles */
|
|
541
546
|
--sp-component-testimonial-bg: var(--sp-surface-card);
|
|
547
|
+
--sp-component-testimonial-bg-hover: var(--sp-color-neutral-50);
|
|
542
548
|
--sp-component-testimonial-border: var(--sp-color-neutral-200);
|
|
543
549
|
--sp-component-testimonial-text: var(--sp-color-neutral-700);
|
|
544
550
|
--sp-component-testimonial-author-name: var(--sp-color-neutral-900);
|
|
545
|
-
--sp-component-testimonial-author-title: var(--sp-color-neutral-
|
|
546
|
-
--sp-component-testimonial-quote-mark: var(--sp-color-neutral-
|
|
551
|
+
--sp-component-testimonial-author-title: var(--sp-color-neutral-600);
|
|
552
|
+
--sp-component-testimonial-quote-mark: var(--sp-color-neutral-600);
|
|
547
553
|
|
|
548
554
|
/* pricing card roles */
|
|
549
555
|
--sp-component-pricing-card-bg: var(--sp-surface-card);
|
|
556
|
+
--sp-component-pricing-card-bg-hover: var(--sp-color-neutral-50);
|
|
550
557
|
--sp-component-pricing-card-border: var(--sp-color-neutral-200);
|
|
551
558
|
--sp-component-pricing-card-featured-bg: var(--sp-color-info-600);
|
|
552
559
|
--sp-component-pricing-card-featured-text: var(--sp-button-text-on-primary);
|
|
@@ -554,7 +561,7 @@
|
|
|
554
561
|
--sp-component-pricing-card-featured-badge-text: var(--sp-color-neutral-900);
|
|
555
562
|
--sp-component-pricing-card-price: var(--sp-color-neutral-900);
|
|
556
563
|
--sp-component-pricing-card-featured-price: var(--sp-color-white);
|
|
557
|
-
--sp-component-pricing-card-price-description: var(--sp-color-neutral-
|
|
564
|
+
--sp-component-pricing-card-price-description: var(--sp-color-neutral-600);
|
|
558
565
|
|
|
559
566
|
/* rating roles */
|
|
560
567
|
--sp-component-rating-star-filled: var(--sp-color-warning-500);
|
|
@@ -567,17 +574,37 @@
|
|
|
567
574
|
|
|
568
575
|
/* dark mode overrides mapped from Spectre token mode definitions */
|
|
569
576
|
:where(:root[data-spectre-theme="dark"]) {
|
|
577
|
+
/* badge hover states remain manual as they are not currently exported as tokens */
|
|
578
|
+
--sp-component-badge-success-bg-hover: var(--sp-color-success-700);
|
|
579
|
+
--sp-component-badge-warning-bg-hover: var(--sp-color-warning-800);
|
|
580
|
+
--sp-component-badge-danger-bg-hover: var(--sp-color-error-700);
|
|
581
|
+
--sp-component-badge-neutral-bg-hover: var(--sp-color-neutral-600);
|
|
582
|
+
--sp-component-badge-info-bg-hover: var(--sp-color-info-700);
|
|
583
|
+
|
|
584
|
+
--sp-component-iconbox-primary-bg: var(--sp-color-neutral-800);
|
|
585
|
+
--sp-component-iconbox-primary-text: var(--sp-color-brand-400);
|
|
586
|
+
--sp-component-iconbox-success-bg: var(--sp-color-neutral-800);
|
|
587
|
+
--sp-component-iconbox-success-text: var(--sp-color-success-400);
|
|
588
|
+
--sp-component-iconbox-warning-bg: var(--sp-color-neutral-800);
|
|
589
|
+
--sp-component-iconbox-warning-text: var(--sp-color-warning-400);
|
|
590
|
+
--sp-component-iconbox-danger-bg: var(--sp-color-neutral-800);
|
|
591
|
+
--sp-component-iconbox-danger-text: var(--sp-color-error-400);
|
|
592
|
+
--sp-component-iconbox-info-bg: var(--sp-color-neutral-800);
|
|
593
|
+
--sp-component-iconbox-info-text: var(--sp-color-info-400);
|
|
594
|
+
|
|
570
595
|
--sp-component-testimonial-bg: var(--sp-color-neutral-800);
|
|
596
|
+
--sp-component-testimonial-bg-hover: var(--sp-color-neutral-700);
|
|
571
597
|
--sp-component-testimonial-border: var(--sp-color-neutral-700);
|
|
572
598
|
--sp-component-testimonial-text: var(--sp-color-neutral-200);
|
|
573
599
|
--sp-component-testimonial-author-name: var(--sp-color-neutral-100);
|
|
574
|
-
--sp-component-testimonial-author-title: var(--sp-color-neutral-
|
|
575
|
-
--sp-component-testimonial-quote-mark: var(--sp-color-neutral-
|
|
600
|
+
--sp-component-testimonial-author-title: var(--sp-color-neutral-300);
|
|
601
|
+
--sp-component-testimonial-quote-mark: var(--sp-color-neutral-300);
|
|
576
602
|
|
|
577
603
|
--sp-component-pricing-card-bg: var(--sp-color-neutral-800);
|
|
604
|
+
--sp-component-pricing-card-bg-hover: var(--sp-color-neutral-700);
|
|
578
605
|
--sp-component-pricing-card-border: var(--sp-color-neutral-700);
|
|
579
606
|
--sp-component-pricing-card-price: var(--sp-color-neutral-100);
|
|
580
|
-
--sp-component-pricing-card-price-description: var(--sp-color-neutral-
|
|
607
|
+
--sp-component-pricing-card-price-description: var(--sp-color-neutral-300);
|
|
581
608
|
|
|
582
609
|
--sp-component-rating-star-filled: var(--sp-color-warning-400);
|
|
583
610
|
--sp-component-rating-star-empty: var(--sp-color-neutral-700);
|
|
@@ -1072,6 +1099,10 @@
|
|
|
1072
1099
|
white-space: nowrap;
|
|
1073
1100
|
}
|
|
1074
1101
|
|
|
1102
|
+
.sp-badge--full {
|
|
1103
|
+
width: 100%;
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1075
1106
|
.sp-badge--sm {
|
|
1076
1107
|
padding: var(--sp-component-badge-padding-y-sm) var(--sp-component-badge-padding-x-sm);
|
|
1077
1108
|
font-size: var(--sp-font-xs-size);
|
|
@@ -1179,6 +1210,17 @@
|
|
|
1179
1210
|
background-color: var(--sp-component-badge-ghost-bg-hover);
|
|
1180
1211
|
}
|
|
1181
1212
|
|
|
1213
|
+
.sp-badge--accent {
|
|
1214
|
+
background-color: var(--sp-component-badge-accent-bg);
|
|
1215
|
+
color: var(--sp-component-badge-accent-text);
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
.sp-badge--accent.sp-badge--interactive:hover,
|
|
1219
|
+
.sp-badge--accent.sp-badge--interactive.sp-badge--hover,
|
|
1220
|
+
.sp-badge--accent.sp-badge--interactive.is-hover {
|
|
1221
|
+
background-color: var(--sp-component-badge-accent-bg-hover);
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1182
1224
|
.sp-badge--interactive {
|
|
1183
1225
|
cursor: pointer;
|
|
1184
1226
|
transition:
|
|
@@ -1337,6 +1379,11 @@
|
|
|
1337
1379
|
color: var(--sp-component-iconbox-ghost-text);
|
|
1338
1380
|
}
|
|
1339
1381
|
|
|
1382
|
+
.sp-iconbox--accent {
|
|
1383
|
+
background-color: var(--sp-component-iconbox-accent-bg);
|
|
1384
|
+
color: var(--sp-component-iconbox-accent-text);
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1340
1387
|
.sp-iconbox--interactive {
|
|
1341
1388
|
cursor: pointer;
|
|
1342
1389
|
}
|
|
@@ -1413,6 +1460,7 @@
|
|
|
1413
1460
|
.sp-testimonial--interactive.is-hover {
|
|
1414
1461
|
transform: translateY(calc(var(--sp-component-border-width) * -1));
|
|
1415
1462
|
box-shadow: var(--sp-shadow-lg);
|
|
1463
|
+
background-color: var(--sp-component-testimonial-bg-hover);
|
|
1416
1464
|
}
|
|
1417
1465
|
|
|
1418
1466
|
.sp-testimonial--interactive:active,
|
|
@@ -1519,6 +1567,7 @@
|
|
|
1519
1567
|
.sp-pricing-card--interactive.is-hover {
|
|
1520
1568
|
transform: translateY(calc(var(--sp-component-border-width) * -1));
|
|
1521
1569
|
box-shadow: var(--sp-shadow-lg);
|
|
1570
|
+
background-color: var(--sp-component-pricing-card-bg-hover);
|
|
1522
1571
|
}
|
|
1523
1572
|
|
|
1524
1573
|
.sp-pricing-card--featured.sp-pricing-card--interactive:hover,
|
|
@@ -1615,6 +1664,14 @@
|
|
|
1615
1664
|
font-size: var(--sp-component-rating-size-lg);
|
|
1616
1665
|
}
|
|
1617
1666
|
|
|
1667
|
+
.sp-rating--full {
|
|
1668
|
+
width: 100%;
|
|
1669
|
+
}
|
|
1670
|
+
|
|
1671
|
+
.sp-rating--pill {
|
|
1672
|
+
border-radius: var(--sp-radius-pill);
|
|
1673
|
+
}
|
|
1674
|
+
|
|
1618
1675
|
.sp-rating:disabled,
|
|
1619
1676
|
.sp-rating[aria-disabled="true"],
|
|
1620
1677
|
.sp-rating--disabled {
|
package/dist/index.cjs
CHANGED
|
@@ -234,7 +234,8 @@ var BADGE_VARIANTS = {
|
|
|
234
234
|
danger: true,
|
|
235
235
|
neutral: true,
|
|
236
236
|
info: true,
|
|
237
|
-
ghost: true
|
|
237
|
+
ghost: true,
|
|
238
|
+
accent: true
|
|
238
239
|
};
|
|
239
240
|
var BADGE_SIZES = {
|
|
240
241
|
sm: true,
|
|
@@ -242,7 +243,17 @@ var BADGE_SIZES = {
|
|
|
242
243
|
lg: true
|
|
243
244
|
};
|
|
244
245
|
function getBadgeClasses(opts = {}) {
|
|
245
|
-
const {
|
|
246
|
+
const {
|
|
247
|
+
variant: variantInput,
|
|
248
|
+
size: sizeInput,
|
|
249
|
+
interactive,
|
|
250
|
+
hovered,
|
|
251
|
+
focused,
|
|
252
|
+
active,
|
|
253
|
+
disabled,
|
|
254
|
+
loading,
|
|
255
|
+
fullWidth = false
|
|
256
|
+
} = opts;
|
|
246
257
|
const variant = resolveOption({
|
|
247
258
|
name: "badge variant",
|
|
248
259
|
value: variantInput,
|
|
@@ -263,7 +274,8 @@ function getBadgeClasses(opts = {}) {
|
|
|
263
274
|
danger: "sp-badge--danger",
|
|
264
275
|
neutral: "sp-badge--neutral",
|
|
265
276
|
info: "sp-badge--info",
|
|
266
|
-
ghost: "sp-badge--ghost"
|
|
277
|
+
ghost: "sp-badge--ghost",
|
|
278
|
+
accent: "sp-badge--accent"
|
|
267
279
|
};
|
|
268
280
|
const variantClass = variantMap[variant];
|
|
269
281
|
const sizeMap = {
|
|
@@ -281,7 +293,8 @@ function getBadgeClasses(opts = {}) {
|
|
|
281
293
|
focused && "sp-badge--focus",
|
|
282
294
|
active && "sp-badge--active",
|
|
283
295
|
disabled && "sp-badge--disabled",
|
|
284
|
-
loading && "sp-badge--loading"
|
|
296
|
+
loading && "sp-badge--loading",
|
|
297
|
+
fullWidth && "sp-badge--full"
|
|
285
298
|
);
|
|
286
299
|
}
|
|
287
300
|
|
|
@@ -294,7 +307,8 @@ var ICONBOX_VARIANTS = {
|
|
|
294
307
|
danger: true,
|
|
295
308
|
info: true,
|
|
296
309
|
neutral: true,
|
|
297
|
-
ghost: true
|
|
310
|
+
ghost: true,
|
|
311
|
+
accent: true
|
|
298
312
|
};
|
|
299
313
|
var ICONBOX_SIZES = {
|
|
300
314
|
sm: true,
|
|
@@ -333,7 +347,8 @@ function getIconBoxClasses(opts = {}) {
|
|
|
333
347
|
danger: "sp-iconbox--danger",
|
|
334
348
|
info: "sp-iconbox--info",
|
|
335
349
|
neutral: "sp-iconbox--neutral",
|
|
336
|
-
ghost: "sp-iconbox--ghost"
|
|
350
|
+
ghost: "sp-iconbox--ghost",
|
|
351
|
+
accent: "sp-iconbox--accent"
|
|
337
352
|
};
|
|
338
353
|
const variantClass = variantMap[variant];
|
|
339
354
|
const sizeMap = {
|
|
@@ -445,7 +460,9 @@ function getRatingClasses(opts = {}) {
|
|
|
445
460
|
interactive = false,
|
|
446
461
|
hovered = false,
|
|
447
462
|
focused = false,
|
|
448
|
-
active = false
|
|
463
|
+
active = false,
|
|
464
|
+
pill = false,
|
|
465
|
+
fullWidth = false
|
|
449
466
|
} = opts;
|
|
450
467
|
const size = resolveOption({
|
|
451
468
|
name: "rating size",
|
|
@@ -467,7 +484,9 @@ function getRatingClasses(opts = {}) {
|
|
|
467
484
|
interactive && "sp-rating--interactive",
|
|
468
485
|
hovered && "sp-rating--hover",
|
|
469
486
|
focused && "sp-rating--focus",
|
|
470
|
-
active && "sp-rating--active"
|
|
487
|
+
active && "sp-rating--active",
|
|
488
|
+
pill && "sp-rating--pill",
|
|
489
|
+
fullWidth && "sp-rating--full"
|
|
471
490
|
);
|
|
472
491
|
}
|
|
473
492
|
function getRatingStarsClasses() {
|
package/dist/index.cjs.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"],"names":[],"mappings":"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","file":"index.cjs","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\n/**\n * Generate classes for the Button component.\n * @sync v2.x - Synced with latest design tokens, including CTA variants.\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\",\n focused && \"sp-btn--focus\",\n active && \"sp-btn--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; // hover/focus styles\n padded?: boolean; // apply default padding\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\",\n focused && \"sp-card--focus\",\n active && \"sp-card--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 // State\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\",\n hovered && \"sp-input--hover\",\n active && \"sp-input--active\",\n fullWidth && \"sp-input--full\",\n pill && \"sp-input--pill\",\n );\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} 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\n/**\n * Generate classes for the Badge component.\n * @sync v2.x - Synced with latest design tokens, including hover states.\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}\n\nexport function getBadgeClasses(opts: BadgeRecipeOptions = {}): string {\n const { variant: variantInput, size: sizeInput, interactive, hovered, focused, active, disabled, loading } = 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 };\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\",\n focused && \"sp-badge--focus\",\n active && \"sp-badge--active\",\n disabled && \"sp-badge--disabled\",\n loading && \"sp-badge--loading\"\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} as const;\n\nconst ICONBOX_SIZES = {\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}\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 } = 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 };\n const variantClass = variantMap[variant];\n\n const sizeMap: Record<IconBoxSize, string> = {\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\",\n focused && \"sp-iconbox--focus\",\n active && \"sp-iconbox--active\",\n pill && \"sp-iconbox--pill\"\n );\n}\n","import { cx } from \"../internal/cx\";\n\n/**\n * Generate classes for the Testimonial component.\n * @sync v2.x - Synced with latest design tokens.\n */\nexport interface TestimonialRecipeOptions {\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 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-testimonial\",\n disabled && \"sp-testimonial--disabled\",\n loading && \"sp-testimonial--loading\",\n interactive && \"sp-testimonial--interactive\",\n hovered && \"sp-testimonial--hover\",\n focused && \"sp-testimonial--focus\",\n active && \"sp-testimonial--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\n/**\n * Generate classes for the PricingCard component.\n * @sync v2.x - Synced with latest design tokens.\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\",\n focused && \"sp-pricing-card--focus\",\n active && \"sp-pricing-card--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\n/**\n * Generate classes for the Rating component.\n * @sync v2.x - Synced with latest design tokens.\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}\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 } = opts;\n\n const size = resolveOption({\n name: \"rating size\",\n value: sizeInput,\n allowed: RATING_SIZES,\n fallback: \"md\",\n });\n\n const sizeMap: Record<RatingSize, string> = {\n sm: \"sp-rating--sm\",\n md: \"sp-rating--md\",\n lg: \"sp-rating--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-rating\",\n sizeClass,\n disabled && \"sp-rating--disabled\",\n loading && \"sp-rating--loading\",\n interactive && \"sp-rating--interactive\",\n hovered && \"sp-rating--hover\",\n focused && \"sp-rating--focus\",\n active && \"sp-rating--active\"\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(\n \"sp-rating-star\",\n isFilled && \"sp-rating-star--filled\"\n );\n}\n\nexport function getRatingTextClasses(): string {\n return cx(\"sp-rating-text\");\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"],"names":[],"mappings":"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","file":"index.cjs","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\",\n focused && \"sp-btn--focus\",\n active && \"sp-btn--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\",\n focused && \"sp-card--focus\",\n active && \"sp-card--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\",\n hovered && \"sp-input--hover\",\n active && \"sp-input--active\",\n fullWidth && \"sp-input--full\",\n pill && \"sp-input--pill\",\n );\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 accent: 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,\n hovered,\n focused,\n active,\n disabled,\n loading,\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 accent: \"sp-badge--accent\",\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\",\n focused && \"sp-badge--focus\",\n active && \"sp-badge--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} as const;\n\nconst ICONBOX_SIZES = {\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}\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 } = 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 };\n const variantClass = variantMap[variant];\n\n const sizeMap: Record<IconBoxSize, string> = {\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\",\n focused && \"sp-iconbox--focus\",\n active && \"sp-iconbox--active\",\n pill && \"sp-iconbox--pill\"\n );\n}\n","import { cx } from \"../internal/cx\";\n\nexport interface TestimonialRecipeOptions {\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 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-testimonial\",\n disabled && \"sp-testimonial--disabled\",\n loading && \"sp-testimonial--loading\",\n interactive && \"sp-testimonial--interactive\",\n hovered && \"sp-testimonial--hover\",\n focused && \"sp-testimonial--focus\",\n active && \"sp-testimonial--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\",\n focused && \"sp-pricing-card--focus\",\n active && \"sp-pricing-card--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 const sizeMap: Record<RatingSize, string> = {\n sm: \"sp-rating--sm\",\n md: \"sp-rating--md\",\n lg: \"sp-rating--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-rating\",\n sizeClass,\n disabled && \"sp-rating--disabled\",\n loading && \"sp-rating--loading\",\n interactive && \"sp-rating--interactive\",\n hovered && \"sp-rating--hover\",\n focused && \"sp-rating--focus\",\n active && \"sp-rating--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(\n \"sp-rating-star\",\n isFilled && \"sp-rating-star--filled\"\n );\n}\n\nexport function getRatingTextClasses(): string {\n return cx(\"sp-rating-text\");\n}\n"]}
|
package/dist/index.css
CHANGED
|
@@ -298,9 +298,9 @@
|
|
|
298
298
|
--sp-button-cta-textdisabled: #8a96ad;
|
|
299
299
|
--sp-button-cta-shadow: 0 4px 14px 0 rgba(51, 109, 244, 0.39);
|
|
300
300
|
--sp-button-cta-focusring: rgba(51, 109, 244, 0.4);
|
|
301
|
-
--sp-button-accent-bg: #
|
|
302
|
-
--sp-button-accent-bghover: #
|
|
303
|
-
--sp-button-accent-bgactive: #
|
|
301
|
+
--sp-button-accent-bg: #5d28b8;
|
|
302
|
+
--sp-button-accent-bghover: #4d2393;
|
|
303
|
+
--sp-button-accent-bgactive: #401f75;
|
|
304
304
|
--sp-button-accent-bgdisabled: #ddccff;
|
|
305
305
|
--sp-button-accent-text: #ffffff;
|
|
306
306
|
--sp-button-accent-textdisabled: #8a96ad;
|
|
@@ -566,6 +566,8 @@
|
|
|
566
566
|
--sp-component-badge-info-text: var(--sp-badge-info-text);
|
|
567
567
|
--sp-component-badge-ghost-bg: var(--sp-button-ghost-bg);
|
|
568
568
|
--sp-component-badge-ghost-text: var(--sp-button-ghost-text);
|
|
569
|
+
--sp-component-badge-accent-bg: var(--sp-button-accent-bg);
|
|
570
|
+
--sp-component-badge-accent-text: var(--sp-button-accent-text);
|
|
569
571
|
|
|
570
572
|
/* badge hover states derived from Spectre token semantics */
|
|
571
573
|
--sp-component-badge-primary-bg-hover: var(--sp-button-primary-bghover);
|
|
@@ -576,6 +578,7 @@
|
|
|
576
578
|
--sp-component-badge-neutral-bg-hover: var(--sp-color-neutral-200);
|
|
577
579
|
--sp-component-badge-info-bg-hover: var(--sp-color-info-200);
|
|
578
580
|
--sp-component-badge-ghost-bg-hover: var(--sp-button-ghost-bghover);
|
|
581
|
+
--sp-component-badge-accent-bg-hover: var(--sp-button-accent-bghover);
|
|
579
582
|
|
|
580
583
|
--sp-component-badge-padding-x-sm: var(--sp-space-8);
|
|
581
584
|
--sp-component-badge-padding-x-md: var(--sp-space-12);
|
|
@@ -606,17 +609,21 @@
|
|
|
606
609
|
--sp-component-iconbox-neutral-text: var(--sp-badge-neutral-text);
|
|
607
610
|
--sp-component-iconbox-ghost-bg: var(--sp-button-ghost-bg);
|
|
608
611
|
--sp-component-iconbox-ghost-text: var(--sp-button-ghost-text);
|
|
612
|
+
--sp-component-iconbox-accent-bg: var(--sp-button-accent-bg);
|
|
613
|
+
--sp-component-iconbox-accent-text: var(--sp-button-accent-text);
|
|
609
614
|
|
|
610
615
|
/* testimonial roles */
|
|
611
616
|
--sp-component-testimonial-bg: var(--sp-surface-card);
|
|
617
|
+
--sp-component-testimonial-bg-hover: var(--sp-color-neutral-50);
|
|
612
618
|
--sp-component-testimonial-border: var(--sp-color-neutral-200);
|
|
613
619
|
--sp-component-testimonial-text: var(--sp-color-neutral-700);
|
|
614
620
|
--sp-component-testimonial-author-name: var(--sp-color-neutral-900);
|
|
615
|
-
--sp-component-testimonial-author-title: var(--sp-color-neutral-
|
|
616
|
-
--sp-component-testimonial-quote-mark: var(--sp-color-neutral-
|
|
621
|
+
--sp-component-testimonial-author-title: var(--sp-color-neutral-600);
|
|
622
|
+
--sp-component-testimonial-quote-mark: var(--sp-color-neutral-600);
|
|
617
623
|
|
|
618
624
|
/* pricing card roles */
|
|
619
625
|
--sp-component-pricing-card-bg: var(--sp-surface-card);
|
|
626
|
+
--sp-component-pricing-card-bg-hover: var(--sp-color-neutral-50);
|
|
620
627
|
--sp-component-pricing-card-border: var(--sp-color-neutral-200);
|
|
621
628
|
--sp-component-pricing-card-featured-bg: var(--sp-color-info-600);
|
|
622
629
|
--sp-component-pricing-card-featured-text: var(--sp-button-text-on-primary);
|
|
@@ -624,7 +631,7 @@
|
|
|
624
631
|
--sp-component-pricing-card-featured-badge-text: var(--sp-color-neutral-900);
|
|
625
632
|
--sp-component-pricing-card-price: var(--sp-color-neutral-900);
|
|
626
633
|
--sp-component-pricing-card-featured-price: var(--sp-color-white);
|
|
627
|
-
--sp-component-pricing-card-price-description: var(--sp-color-neutral-
|
|
634
|
+
--sp-component-pricing-card-price-description: var(--sp-color-neutral-600);
|
|
628
635
|
|
|
629
636
|
/* rating roles */
|
|
630
637
|
--sp-component-rating-star-filled: var(--sp-color-warning-500);
|
|
@@ -637,17 +644,37 @@
|
|
|
637
644
|
|
|
638
645
|
/* dark mode overrides mapped from Spectre token mode definitions */
|
|
639
646
|
:where(:root[data-spectre-theme="dark"]) {
|
|
647
|
+
/* badge hover states remain manual as they are not currently exported as tokens */
|
|
648
|
+
--sp-component-badge-success-bg-hover: var(--sp-color-success-700);
|
|
649
|
+
--sp-component-badge-warning-bg-hover: var(--sp-color-warning-800);
|
|
650
|
+
--sp-component-badge-danger-bg-hover: var(--sp-color-error-700);
|
|
651
|
+
--sp-component-badge-neutral-bg-hover: var(--sp-color-neutral-600);
|
|
652
|
+
--sp-component-badge-info-bg-hover: var(--sp-color-info-700);
|
|
653
|
+
|
|
654
|
+
--sp-component-iconbox-primary-bg: var(--sp-color-neutral-800);
|
|
655
|
+
--sp-component-iconbox-primary-text: var(--sp-color-brand-400);
|
|
656
|
+
--sp-component-iconbox-success-bg: var(--sp-color-neutral-800);
|
|
657
|
+
--sp-component-iconbox-success-text: var(--sp-color-success-400);
|
|
658
|
+
--sp-component-iconbox-warning-bg: var(--sp-color-neutral-800);
|
|
659
|
+
--sp-component-iconbox-warning-text: var(--sp-color-warning-400);
|
|
660
|
+
--sp-component-iconbox-danger-bg: var(--sp-color-neutral-800);
|
|
661
|
+
--sp-component-iconbox-danger-text: var(--sp-color-error-400);
|
|
662
|
+
--sp-component-iconbox-info-bg: var(--sp-color-neutral-800);
|
|
663
|
+
--sp-component-iconbox-info-text: var(--sp-color-info-400);
|
|
664
|
+
|
|
640
665
|
--sp-component-testimonial-bg: var(--sp-color-neutral-800);
|
|
666
|
+
--sp-component-testimonial-bg-hover: var(--sp-color-neutral-700);
|
|
641
667
|
--sp-component-testimonial-border: var(--sp-color-neutral-700);
|
|
642
668
|
--sp-component-testimonial-text: var(--sp-color-neutral-200);
|
|
643
669
|
--sp-component-testimonial-author-name: var(--sp-color-neutral-100);
|
|
644
|
-
--sp-component-testimonial-author-title: var(--sp-color-neutral-
|
|
645
|
-
--sp-component-testimonial-quote-mark: var(--sp-color-neutral-
|
|
670
|
+
--sp-component-testimonial-author-title: var(--sp-color-neutral-300);
|
|
671
|
+
--sp-component-testimonial-quote-mark: var(--sp-color-neutral-300);
|
|
646
672
|
|
|
647
673
|
--sp-component-pricing-card-bg: var(--sp-color-neutral-800);
|
|
674
|
+
--sp-component-pricing-card-bg-hover: var(--sp-color-neutral-700);
|
|
648
675
|
--sp-component-pricing-card-border: var(--sp-color-neutral-700);
|
|
649
676
|
--sp-component-pricing-card-price: var(--sp-color-neutral-100);
|
|
650
|
-
--sp-component-pricing-card-price-description: var(--sp-color-neutral-
|
|
677
|
+
--sp-component-pricing-card-price-description: var(--sp-color-neutral-300);
|
|
651
678
|
|
|
652
679
|
--sp-component-rating-star-filled: var(--sp-color-warning-400);
|
|
653
680
|
--sp-component-rating-star-empty: var(--sp-color-neutral-700);
|
|
@@ -1142,6 +1169,10 @@
|
|
|
1142
1169
|
white-space: nowrap;
|
|
1143
1170
|
}
|
|
1144
1171
|
|
|
1172
|
+
.sp-badge--full {
|
|
1173
|
+
width: 100%;
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1145
1176
|
.sp-badge--sm {
|
|
1146
1177
|
padding: var(--sp-component-badge-padding-y-sm) var(--sp-component-badge-padding-x-sm);
|
|
1147
1178
|
font-size: var(--sp-font-xs-size);
|
|
@@ -1249,6 +1280,17 @@
|
|
|
1249
1280
|
background-color: var(--sp-component-badge-ghost-bg-hover);
|
|
1250
1281
|
}
|
|
1251
1282
|
|
|
1283
|
+
.sp-badge--accent {
|
|
1284
|
+
background-color: var(--sp-component-badge-accent-bg);
|
|
1285
|
+
color: var(--sp-component-badge-accent-text);
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
.sp-badge--accent.sp-badge--interactive:hover,
|
|
1289
|
+
.sp-badge--accent.sp-badge--interactive.sp-badge--hover,
|
|
1290
|
+
.sp-badge--accent.sp-badge--interactive.is-hover {
|
|
1291
|
+
background-color: var(--sp-component-badge-accent-bg-hover);
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1252
1294
|
.sp-badge--interactive {
|
|
1253
1295
|
cursor: pointer;
|
|
1254
1296
|
transition:
|
|
@@ -1407,6 +1449,11 @@
|
|
|
1407
1449
|
color: var(--sp-component-iconbox-ghost-text);
|
|
1408
1450
|
}
|
|
1409
1451
|
|
|
1452
|
+
.sp-iconbox--accent {
|
|
1453
|
+
background-color: var(--sp-component-iconbox-accent-bg);
|
|
1454
|
+
color: var(--sp-component-iconbox-accent-text);
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1410
1457
|
.sp-iconbox--interactive {
|
|
1411
1458
|
cursor: pointer;
|
|
1412
1459
|
}
|
|
@@ -1483,6 +1530,7 @@
|
|
|
1483
1530
|
.sp-testimonial--interactive.is-hover {
|
|
1484
1531
|
transform: translateY(calc(var(--sp-component-border-width) * -1));
|
|
1485
1532
|
box-shadow: var(--sp-shadow-lg);
|
|
1533
|
+
background-color: var(--sp-component-testimonial-bg-hover);
|
|
1486
1534
|
}
|
|
1487
1535
|
|
|
1488
1536
|
.sp-testimonial--interactive:active,
|
|
@@ -1589,6 +1637,7 @@
|
|
|
1589
1637
|
.sp-pricing-card--interactive.is-hover {
|
|
1590
1638
|
transform: translateY(calc(var(--sp-component-border-width) * -1));
|
|
1591
1639
|
box-shadow: var(--sp-shadow-lg);
|
|
1640
|
+
background-color: var(--sp-component-pricing-card-bg-hover);
|
|
1592
1641
|
}
|
|
1593
1642
|
|
|
1594
1643
|
.sp-pricing-card--featured.sp-pricing-card--interactive:hover,
|
|
@@ -1685,6 +1734,14 @@
|
|
|
1685
1734
|
font-size: var(--sp-component-rating-size-lg);
|
|
1686
1735
|
}
|
|
1687
1736
|
|
|
1737
|
+
.sp-rating--full {
|
|
1738
|
+
width: 100%;
|
|
1739
|
+
}
|
|
1740
|
+
|
|
1741
|
+
.sp-rating--pill {
|
|
1742
|
+
border-radius: var(--sp-radius-pill);
|
|
1743
|
+
}
|
|
1744
|
+
|
|
1688
1745
|
.sp-rating:disabled,
|
|
1689
1746
|
.sp-rating[aria-disabled="true"],
|
|
1690
1747
|
.sp-rating--disabled {
|
package/dist/index.d.cts
CHANGED
|
@@ -25,10 +25,6 @@ declare const BUTTON_SIZES: {
|
|
|
25
25
|
};
|
|
26
26
|
type ButtonVariant = keyof typeof BUTTON_VARIANTS;
|
|
27
27
|
type ButtonSize = keyof typeof BUTTON_SIZES;
|
|
28
|
-
/**
|
|
29
|
-
* Generate classes for the Button component.
|
|
30
|
-
* @sync v2.x - Synced with latest design tokens, including CTA variants.
|
|
31
|
-
*/
|
|
32
28
|
interface ButtonRecipeOptions {
|
|
33
29
|
variant?: ButtonVariant;
|
|
34
30
|
size?: ButtonSize;
|
|
@@ -99,6 +95,7 @@ declare const BADGE_VARIANTS: {
|
|
|
99
95
|
readonly neutral: true;
|
|
100
96
|
readonly info: true;
|
|
101
97
|
readonly ghost: true;
|
|
98
|
+
readonly accent: true;
|
|
102
99
|
};
|
|
103
100
|
declare const BADGE_SIZES: {
|
|
104
101
|
readonly sm: true;
|
|
@@ -107,10 +104,6 @@ declare const BADGE_SIZES: {
|
|
|
107
104
|
};
|
|
108
105
|
type BadgeVariant = keyof typeof BADGE_VARIANTS;
|
|
109
106
|
type BadgeSize = keyof typeof BADGE_SIZES;
|
|
110
|
-
/**
|
|
111
|
-
* Generate classes for the Badge component.
|
|
112
|
-
* @sync v2.x - Synced with latest design tokens, including hover states.
|
|
113
|
-
*/
|
|
114
107
|
interface BadgeRecipeOptions {
|
|
115
108
|
variant?: BadgeVariant;
|
|
116
109
|
size?: BadgeSize;
|
|
@@ -120,6 +113,7 @@ interface BadgeRecipeOptions {
|
|
|
120
113
|
active?: boolean;
|
|
121
114
|
disabled?: boolean;
|
|
122
115
|
loading?: boolean;
|
|
116
|
+
fullWidth?: boolean;
|
|
123
117
|
}
|
|
124
118
|
declare function getBadgeClasses(opts?: BadgeRecipeOptions): string;
|
|
125
119
|
|
|
@@ -132,6 +126,7 @@ declare const ICONBOX_VARIANTS: {
|
|
|
132
126
|
readonly info: true;
|
|
133
127
|
readonly neutral: true;
|
|
134
128
|
readonly ghost: true;
|
|
129
|
+
readonly accent: true;
|
|
135
130
|
};
|
|
136
131
|
declare const ICONBOX_SIZES: {
|
|
137
132
|
readonly sm: true;
|
|
@@ -153,10 +148,6 @@ interface IconBoxRecipeOptions {
|
|
|
153
148
|
}
|
|
154
149
|
declare function getIconBoxClasses(opts?: IconBoxRecipeOptions): string;
|
|
155
150
|
|
|
156
|
-
/**
|
|
157
|
-
* Generate classes for the Testimonial component.
|
|
158
|
-
* @sync v2.x - Synced with latest design tokens.
|
|
159
|
-
*/
|
|
160
151
|
interface TestimonialRecipeOptions {
|
|
161
152
|
disabled?: boolean;
|
|
162
153
|
loading?: boolean;
|
|
@@ -173,10 +164,6 @@ declare function getTestimonialAuthorInfoClasses(): string;
|
|
|
173
164
|
declare function getTestimonialAuthorNameClasses(): string;
|
|
174
165
|
declare function getTestimonialAuthorTitleClasses(): string;
|
|
175
166
|
|
|
176
|
-
/**
|
|
177
|
-
* Generate classes for the PricingCard component.
|
|
178
|
-
* @sync v2.x - Synced with latest design tokens.
|
|
179
|
-
*/
|
|
180
167
|
interface PricingCardRecipeOptions {
|
|
181
168
|
featured?: boolean;
|
|
182
169
|
disabled?: boolean;
|
|
@@ -199,10 +186,6 @@ declare const RATING_SIZES: {
|
|
|
199
186
|
readonly lg: true;
|
|
200
187
|
};
|
|
201
188
|
type RatingSize = keyof typeof RATING_SIZES;
|
|
202
|
-
/**
|
|
203
|
-
* Generate classes for the Rating component.
|
|
204
|
-
* @sync v2.x - Synced with latest design tokens.
|
|
205
|
-
*/
|
|
206
189
|
interface RatingRecipeOptions {
|
|
207
190
|
size?: RatingSize;
|
|
208
191
|
disabled?: boolean;
|
|
@@ -211,10 +194,12 @@ interface RatingRecipeOptions {
|
|
|
211
194
|
hovered?: boolean;
|
|
212
195
|
focused?: boolean;
|
|
213
196
|
active?: boolean;
|
|
197
|
+
pill?: boolean;
|
|
198
|
+
fullWidth?: boolean;
|
|
214
199
|
}
|
|
215
200
|
declare function getRatingClasses(opts?: RatingRecipeOptions): string;
|
|
216
201
|
declare function getRatingStarsClasses(): string;
|
|
217
202
|
declare function getRatingStarClasses(isFilled?: boolean): string;
|
|
218
203
|
declare function getRatingTextClasses(): string;
|
|
219
204
|
|
|
220
|
-
export { type BadgeRecipeOptions, type BadgeSize, type BadgeVariant, type ButtonRecipeOptions, type ButtonSize, type ButtonVariant, type CardRecipeOptions, type CardVariant, type IconBoxRecipeOptions, type IconBoxSize, type IconBoxVariant, type InputRecipeOptions, type InputSize, type InputState, type PricingCardRecipeOptions, type RatingRecipeOptions, type TestimonialRecipeOptions, getBadgeClasses, getButtonClasses, getCardClasses, getIconBoxClasses, getInputClasses, getPricingCardBadgeClasses, getPricingCardClasses, getPricingCardDescriptionClasses, getPricingCardPriceClasses, getPricingCardPriceContainerClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getTestimonialAuthorClasses, getTestimonialAuthorInfoClasses, getTestimonialAuthorNameClasses, getTestimonialAuthorTitleClasses, getTestimonialClasses, getTestimonialQuoteClasses, spectreBaseStylesPath, spectreComponentsStylesPath, spectreIndexStylesPath, spectreStyles, spectreUtilitiesStylesPath };
|
|
205
|
+
export { type BadgeRecipeOptions, type BadgeSize, type BadgeVariant, type ButtonRecipeOptions, type ButtonSize, type ButtonVariant, type CardRecipeOptions, type CardVariant, type IconBoxRecipeOptions, type IconBoxSize, type IconBoxVariant, type InputRecipeOptions, type InputSize, type InputState, type PricingCardRecipeOptions, type RatingRecipeOptions, type RatingSize, type TestimonialRecipeOptions, getBadgeClasses, getButtonClasses, getCardClasses, getIconBoxClasses, getInputClasses, getPricingCardBadgeClasses, getPricingCardClasses, getPricingCardDescriptionClasses, getPricingCardPriceClasses, getPricingCardPriceContainerClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getTestimonialAuthorClasses, getTestimonialAuthorInfoClasses, getTestimonialAuthorNameClasses, getTestimonialAuthorTitleClasses, getTestimonialClasses, getTestimonialQuoteClasses, spectreBaseStylesPath, spectreComponentsStylesPath, spectreIndexStylesPath, spectreStyles, spectreUtilitiesStylesPath };
|
package/dist/index.d.ts
CHANGED
|
@@ -25,10 +25,6 @@ declare const BUTTON_SIZES: {
|
|
|
25
25
|
};
|
|
26
26
|
type ButtonVariant = keyof typeof BUTTON_VARIANTS;
|
|
27
27
|
type ButtonSize = keyof typeof BUTTON_SIZES;
|
|
28
|
-
/**
|
|
29
|
-
* Generate classes for the Button component.
|
|
30
|
-
* @sync v2.x - Synced with latest design tokens, including CTA variants.
|
|
31
|
-
*/
|
|
32
28
|
interface ButtonRecipeOptions {
|
|
33
29
|
variant?: ButtonVariant;
|
|
34
30
|
size?: ButtonSize;
|
|
@@ -99,6 +95,7 @@ declare const BADGE_VARIANTS: {
|
|
|
99
95
|
readonly neutral: true;
|
|
100
96
|
readonly info: true;
|
|
101
97
|
readonly ghost: true;
|
|
98
|
+
readonly accent: true;
|
|
102
99
|
};
|
|
103
100
|
declare const BADGE_SIZES: {
|
|
104
101
|
readonly sm: true;
|
|
@@ -107,10 +104,6 @@ declare const BADGE_SIZES: {
|
|
|
107
104
|
};
|
|
108
105
|
type BadgeVariant = keyof typeof BADGE_VARIANTS;
|
|
109
106
|
type BadgeSize = keyof typeof BADGE_SIZES;
|
|
110
|
-
/**
|
|
111
|
-
* Generate classes for the Badge component.
|
|
112
|
-
* @sync v2.x - Synced with latest design tokens, including hover states.
|
|
113
|
-
*/
|
|
114
107
|
interface BadgeRecipeOptions {
|
|
115
108
|
variant?: BadgeVariant;
|
|
116
109
|
size?: BadgeSize;
|
|
@@ -120,6 +113,7 @@ interface BadgeRecipeOptions {
|
|
|
120
113
|
active?: boolean;
|
|
121
114
|
disabled?: boolean;
|
|
122
115
|
loading?: boolean;
|
|
116
|
+
fullWidth?: boolean;
|
|
123
117
|
}
|
|
124
118
|
declare function getBadgeClasses(opts?: BadgeRecipeOptions): string;
|
|
125
119
|
|
|
@@ -132,6 +126,7 @@ declare const ICONBOX_VARIANTS: {
|
|
|
132
126
|
readonly info: true;
|
|
133
127
|
readonly neutral: true;
|
|
134
128
|
readonly ghost: true;
|
|
129
|
+
readonly accent: true;
|
|
135
130
|
};
|
|
136
131
|
declare const ICONBOX_SIZES: {
|
|
137
132
|
readonly sm: true;
|
|
@@ -153,10 +148,6 @@ interface IconBoxRecipeOptions {
|
|
|
153
148
|
}
|
|
154
149
|
declare function getIconBoxClasses(opts?: IconBoxRecipeOptions): string;
|
|
155
150
|
|
|
156
|
-
/**
|
|
157
|
-
* Generate classes for the Testimonial component.
|
|
158
|
-
* @sync v2.x - Synced with latest design tokens.
|
|
159
|
-
*/
|
|
160
151
|
interface TestimonialRecipeOptions {
|
|
161
152
|
disabled?: boolean;
|
|
162
153
|
loading?: boolean;
|
|
@@ -173,10 +164,6 @@ declare function getTestimonialAuthorInfoClasses(): string;
|
|
|
173
164
|
declare function getTestimonialAuthorNameClasses(): string;
|
|
174
165
|
declare function getTestimonialAuthorTitleClasses(): string;
|
|
175
166
|
|
|
176
|
-
/**
|
|
177
|
-
* Generate classes for the PricingCard component.
|
|
178
|
-
* @sync v2.x - Synced with latest design tokens.
|
|
179
|
-
*/
|
|
180
167
|
interface PricingCardRecipeOptions {
|
|
181
168
|
featured?: boolean;
|
|
182
169
|
disabled?: boolean;
|
|
@@ -199,10 +186,6 @@ declare const RATING_SIZES: {
|
|
|
199
186
|
readonly lg: true;
|
|
200
187
|
};
|
|
201
188
|
type RatingSize = keyof typeof RATING_SIZES;
|
|
202
|
-
/**
|
|
203
|
-
* Generate classes for the Rating component.
|
|
204
|
-
* @sync v2.x - Synced with latest design tokens.
|
|
205
|
-
*/
|
|
206
189
|
interface RatingRecipeOptions {
|
|
207
190
|
size?: RatingSize;
|
|
208
191
|
disabled?: boolean;
|
|
@@ -211,10 +194,12 @@ interface RatingRecipeOptions {
|
|
|
211
194
|
hovered?: boolean;
|
|
212
195
|
focused?: boolean;
|
|
213
196
|
active?: boolean;
|
|
197
|
+
pill?: boolean;
|
|
198
|
+
fullWidth?: boolean;
|
|
214
199
|
}
|
|
215
200
|
declare function getRatingClasses(opts?: RatingRecipeOptions): string;
|
|
216
201
|
declare function getRatingStarsClasses(): string;
|
|
217
202
|
declare function getRatingStarClasses(isFilled?: boolean): string;
|
|
218
203
|
declare function getRatingTextClasses(): string;
|
|
219
204
|
|
|
220
|
-
export { type BadgeRecipeOptions, type BadgeSize, type BadgeVariant, type ButtonRecipeOptions, type ButtonSize, type ButtonVariant, type CardRecipeOptions, type CardVariant, type IconBoxRecipeOptions, type IconBoxSize, type IconBoxVariant, type InputRecipeOptions, type InputSize, type InputState, type PricingCardRecipeOptions, type RatingRecipeOptions, type TestimonialRecipeOptions, getBadgeClasses, getButtonClasses, getCardClasses, getIconBoxClasses, getInputClasses, getPricingCardBadgeClasses, getPricingCardClasses, getPricingCardDescriptionClasses, getPricingCardPriceClasses, getPricingCardPriceContainerClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getTestimonialAuthorClasses, getTestimonialAuthorInfoClasses, getTestimonialAuthorNameClasses, getTestimonialAuthorTitleClasses, getTestimonialClasses, getTestimonialQuoteClasses, spectreBaseStylesPath, spectreComponentsStylesPath, spectreIndexStylesPath, spectreStyles, spectreUtilitiesStylesPath };
|
|
205
|
+
export { type BadgeRecipeOptions, type BadgeSize, type BadgeVariant, type ButtonRecipeOptions, type ButtonSize, type ButtonVariant, type CardRecipeOptions, type CardVariant, type IconBoxRecipeOptions, type IconBoxSize, type IconBoxVariant, type InputRecipeOptions, type InputSize, type InputState, type PricingCardRecipeOptions, type RatingRecipeOptions, type RatingSize, type TestimonialRecipeOptions, getBadgeClasses, getButtonClasses, getCardClasses, getIconBoxClasses, getInputClasses, getPricingCardBadgeClasses, getPricingCardClasses, getPricingCardDescriptionClasses, getPricingCardPriceClasses, getPricingCardPriceContainerClasses, getRatingClasses, getRatingStarClasses, getRatingStarsClasses, getRatingTextClasses, getTestimonialAuthorClasses, getTestimonialAuthorInfoClasses, getTestimonialAuthorNameClasses, getTestimonialAuthorTitleClasses, getTestimonialClasses, getTestimonialQuoteClasses, spectreBaseStylesPath, spectreComponentsStylesPath, spectreIndexStylesPath, spectreStyles, spectreUtilitiesStylesPath };
|
package/dist/index.js
CHANGED
|
@@ -232,7 +232,8 @@ var BADGE_VARIANTS = {
|
|
|
232
232
|
danger: true,
|
|
233
233
|
neutral: true,
|
|
234
234
|
info: true,
|
|
235
|
-
ghost: true
|
|
235
|
+
ghost: true,
|
|
236
|
+
accent: true
|
|
236
237
|
};
|
|
237
238
|
var BADGE_SIZES = {
|
|
238
239
|
sm: true,
|
|
@@ -240,7 +241,17 @@ var BADGE_SIZES = {
|
|
|
240
241
|
lg: true
|
|
241
242
|
};
|
|
242
243
|
function getBadgeClasses(opts = {}) {
|
|
243
|
-
const {
|
|
244
|
+
const {
|
|
245
|
+
variant: variantInput,
|
|
246
|
+
size: sizeInput,
|
|
247
|
+
interactive,
|
|
248
|
+
hovered,
|
|
249
|
+
focused,
|
|
250
|
+
active,
|
|
251
|
+
disabled,
|
|
252
|
+
loading,
|
|
253
|
+
fullWidth = false
|
|
254
|
+
} = opts;
|
|
244
255
|
const variant = resolveOption({
|
|
245
256
|
name: "badge variant",
|
|
246
257
|
value: variantInput,
|
|
@@ -261,7 +272,8 @@ function getBadgeClasses(opts = {}) {
|
|
|
261
272
|
danger: "sp-badge--danger",
|
|
262
273
|
neutral: "sp-badge--neutral",
|
|
263
274
|
info: "sp-badge--info",
|
|
264
|
-
ghost: "sp-badge--ghost"
|
|
275
|
+
ghost: "sp-badge--ghost",
|
|
276
|
+
accent: "sp-badge--accent"
|
|
265
277
|
};
|
|
266
278
|
const variantClass = variantMap[variant];
|
|
267
279
|
const sizeMap = {
|
|
@@ -279,7 +291,8 @@ function getBadgeClasses(opts = {}) {
|
|
|
279
291
|
focused && "sp-badge--focus",
|
|
280
292
|
active && "sp-badge--active",
|
|
281
293
|
disabled && "sp-badge--disabled",
|
|
282
|
-
loading && "sp-badge--loading"
|
|
294
|
+
loading && "sp-badge--loading",
|
|
295
|
+
fullWidth && "sp-badge--full"
|
|
283
296
|
);
|
|
284
297
|
}
|
|
285
298
|
|
|
@@ -292,7 +305,8 @@ var ICONBOX_VARIANTS = {
|
|
|
292
305
|
danger: true,
|
|
293
306
|
info: true,
|
|
294
307
|
neutral: true,
|
|
295
|
-
ghost: true
|
|
308
|
+
ghost: true,
|
|
309
|
+
accent: true
|
|
296
310
|
};
|
|
297
311
|
var ICONBOX_SIZES = {
|
|
298
312
|
sm: true,
|
|
@@ -331,7 +345,8 @@ function getIconBoxClasses(opts = {}) {
|
|
|
331
345
|
danger: "sp-iconbox--danger",
|
|
332
346
|
info: "sp-iconbox--info",
|
|
333
347
|
neutral: "sp-iconbox--neutral",
|
|
334
|
-
ghost: "sp-iconbox--ghost"
|
|
348
|
+
ghost: "sp-iconbox--ghost",
|
|
349
|
+
accent: "sp-iconbox--accent"
|
|
335
350
|
};
|
|
336
351
|
const variantClass = variantMap[variant];
|
|
337
352
|
const sizeMap = {
|
|
@@ -443,7 +458,9 @@ function getRatingClasses(opts = {}) {
|
|
|
443
458
|
interactive = false,
|
|
444
459
|
hovered = false,
|
|
445
460
|
focused = false,
|
|
446
|
-
active = false
|
|
461
|
+
active = false,
|
|
462
|
+
pill = false,
|
|
463
|
+
fullWidth = false
|
|
447
464
|
} = opts;
|
|
448
465
|
const size = resolveOption({
|
|
449
466
|
name: "rating size",
|
|
@@ -465,7 +482,9 @@ function getRatingClasses(opts = {}) {
|
|
|
465
482
|
interactive && "sp-rating--interactive",
|
|
466
483
|
hovered && "sp-rating--hover",
|
|
467
484
|
focused && "sp-rating--focus",
|
|
468
|
-
active && "sp-rating--active"
|
|
485
|
+
active && "sp-rating--active",
|
|
486
|
+
pill && "sp-rating--pill",
|
|
487
|
+
fullWidth && "sp-rating--full"
|
|
469
488
|
);
|
|
470
489
|
}
|
|
471
490
|
function getRatingStarsClasses() {
|
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"],"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\n/**\n * Generate classes for the Button component.\n * @sync v2.x - Synced with latest design tokens, including CTA variants.\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\",\n focused && \"sp-btn--focus\",\n active && \"sp-btn--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; // hover/focus styles\n padded?: boolean; // apply default padding\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\",\n focused && \"sp-card--focus\",\n active && \"sp-card--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 // State\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\",\n hovered && \"sp-input--hover\",\n active && \"sp-input--active\",\n fullWidth && \"sp-input--full\",\n pill && \"sp-input--pill\",\n );\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} 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\n/**\n * Generate classes for the Badge component.\n * @sync v2.x - Synced with latest design tokens, including hover states.\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}\n\nexport function getBadgeClasses(opts: BadgeRecipeOptions = {}): string {\n const { variant: variantInput, size: sizeInput, interactive, hovered, focused, active, disabled, loading } = 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 };\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\",\n focused && \"sp-badge--focus\",\n active && \"sp-badge--active\",\n disabled && \"sp-badge--disabled\",\n loading && \"sp-badge--loading\"\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} as const;\n\nconst ICONBOX_SIZES = {\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}\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 } = 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 };\n const variantClass = variantMap[variant];\n\n const sizeMap: Record<IconBoxSize, string> = {\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\",\n focused && \"sp-iconbox--focus\",\n active && \"sp-iconbox--active\",\n pill && \"sp-iconbox--pill\"\n );\n}\n","import { cx } from \"../internal/cx\";\n\n/**\n * Generate classes for the Testimonial component.\n * @sync v2.x - Synced with latest design tokens.\n */\nexport interface TestimonialRecipeOptions {\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 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-testimonial\",\n disabled && \"sp-testimonial--disabled\",\n loading && \"sp-testimonial--loading\",\n interactive && \"sp-testimonial--interactive\",\n hovered && \"sp-testimonial--hover\",\n focused && \"sp-testimonial--focus\",\n active && \"sp-testimonial--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\n/**\n * Generate classes for the PricingCard component.\n * @sync v2.x - Synced with latest design tokens.\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\",\n focused && \"sp-pricing-card--focus\",\n active && \"sp-pricing-card--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\n/**\n * Generate classes for the Rating component.\n * @sync v2.x - Synced with latest design tokens.\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}\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 } = opts;\n\n const size = resolveOption({\n name: \"rating size\",\n value: sizeInput,\n allowed: RATING_SIZES,\n fallback: \"md\",\n });\n\n const sizeMap: Record<RatingSize, string> = {\n sm: \"sp-rating--sm\",\n md: \"sp-rating--md\",\n lg: \"sp-rating--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-rating\",\n sizeClass,\n disabled && \"sp-rating--disabled\",\n loading && \"sp-rating--loading\",\n interactive && \"sp-rating--interactive\",\n hovered && \"sp-rating--hover\",\n focused && \"sp-rating--focus\",\n active && \"sp-rating--active\"\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(\n \"sp-rating-star\",\n isFilled && \"sp-rating-star--filled\"\n );\n}\n\nexport function getRatingTextClasses(): string {\n return cx(\"sp-rating-text\");\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"],"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\",\n focused && \"sp-btn--focus\",\n active && \"sp-btn--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\",\n focused && \"sp-card--focus\",\n active && \"sp-card--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\",\n hovered && \"sp-input--hover\",\n active && \"sp-input--active\",\n fullWidth && \"sp-input--full\",\n pill && \"sp-input--pill\",\n );\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 accent: 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,\n hovered,\n focused,\n active,\n disabled,\n loading,\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 accent: \"sp-badge--accent\",\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\",\n focused && \"sp-badge--focus\",\n active && \"sp-badge--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} as const;\n\nconst ICONBOX_SIZES = {\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}\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 } = 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 };\n const variantClass = variantMap[variant];\n\n const sizeMap: Record<IconBoxSize, string> = {\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\",\n focused && \"sp-iconbox--focus\",\n active && \"sp-iconbox--active\",\n pill && \"sp-iconbox--pill\"\n );\n}\n","import { cx } from \"../internal/cx\";\n\nexport interface TestimonialRecipeOptions {\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 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-testimonial\",\n disabled && \"sp-testimonial--disabled\",\n loading && \"sp-testimonial--loading\",\n interactive && \"sp-testimonial--interactive\",\n hovered && \"sp-testimonial--hover\",\n focused && \"sp-testimonial--focus\",\n active && \"sp-testimonial--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\",\n focused && \"sp-pricing-card--focus\",\n active && \"sp-pricing-card--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 const sizeMap: Record<RatingSize, string> = {\n sm: \"sp-rating--sm\",\n md: \"sp-rating--md\",\n lg: \"sp-rating--lg\",\n };\n const sizeClass = sizeMap[size];\n\n return cx(\n \"sp-rating\",\n sizeClass,\n disabled && \"sp-rating--disabled\",\n loading && \"sp-rating--loading\",\n interactive && \"sp-rating--interactive\",\n hovered && \"sp-rating--hover\",\n focused && \"sp-rating--focus\",\n active && \"sp-rating--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(\n \"sp-rating-star\",\n isFilled && \"sp-rating-star--filled\"\n );\n}\n\nexport function getRatingTextClasses(): string {\n return cx(\"sp-rating-text\");\n}\n"]}
|
package/dist/utilities.css
CHANGED
|
@@ -294,9 +294,9 @@
|
|
|
294
294
|
--sp-button-cta-textdisabled: #8a96ad;
|
|
295
295
|
--sp-button-cta-shadow: 0 4px 14px 0 rgba(51, 109, 244, 0.39);
|
|
296
296
|
--sp-button-cta-focusring: rgba(51, 109, 244, 0.4);
|
|
297
|
-
--sp-button-accent-bg: #
|
|
298
|
-
--sp-button-accent-bghover: #
|
|
299
|
-
--sp-button-accent-bgactive: #
|
|
297
|
+
--sp-button-accent-bg: #5d28b8;
|
|
298
|
+
--sp-button-accent-bghover: #4d2393;
|
|
299
|
+
--sp-button-accent-bgactive: #401f75;
|
|
300
300
|
--sp-button-accent-bgdisabled: #ddccff;
|
|
301
301
|
--sp-button-accent-text: #ffffff;
|
|
302
302
|
--sp-button-accent-textdisabled: #8a96ad;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@phcdevworks/spectre-ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "@phcdevworks/spectre-ui is the implementation layer between @phcdevworks/spectre-tokens and downstream adapters or apps.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"phcdevworks",
|
|
@@ -95,23 +95,23 @@
|
|
|
95
95
|
"typescript": "^5.9 || ^6.0"
|
|
96
96
|
},
|
|
97
97
|
"dependencies": {
|
|
98
|
-
"@phcdevworks/spectre-tokens": "^2.
|
|
98
|
+
"@phcdevworks/spectre-tokens": "^2.5.0"
|
|
99
99
|
},
|
|
100
100
|
"devDependencies": {
|
|
101
101
|
"@types/node": "^25.6.0",
|
|
102
|
-
"@typescript-eslint/eslint-plugin": "^8.59.
|
|
103
|
-
"@typescript-eslint/parser": "^8.59.
|
|
102
|
+
"@typescript-eslint/eslint-plugin": "^8.59.1",
|
|
103
|
+
"@typescript-eslint/parser": "^8.59.1",
|
|
104
104
|
"autoprefixer": "^10.5.0",
|
|
105
|
-
"eslint": "^10.
|
|
105
|
+
"eslint": "^10.3.0",
|
|
106
106
|
"jiti": "^2.6.1",
|
|
107
|
-
"postcss": "^8.5.
|
|
107
|
+
"postcss": "^8.5.13",
|
|
108
108
|
"postcss-cli": "^11.0.1",
|
|
109
109
|
"postcss-import": "^16.1.1",
|
|
110
110
|
"prettier": "^3.8.3",
|
|
111
111
|
"tailwindcss": "^4.2.4",
|
|
112
112
|
"tsup": "^8.5.1",
|
|
113
113
|
"typescript": "^6.0.3",
|
|
114
|
-
"typescript-eslint": "^8.59.
|
|
114
|
+
"typescript-eslint": "^8.59.1",
|
|
115
115
|
"vite": "^8.0.10",
|
|
116
116
|
"vitest": "^4.1.5"
|
|
117
117
|
},
|