@discourser/design-system 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/{chunk-SNUJBT5R.js → chunk-3HS2YGGX.js} +213 -83
  2. package/dist/chunk-3HS2YGGX.js.map +1 -0
  3. package/dist/{chunk-52D45DUF.js → chunk-NU6GI57K.js} +25 -13
  4. package/dist/chunk-NU6GI57K.js.map +1 -0
  5. package/dist/{chunk-PFWU7QSM.cjs → chunk-OZBQAALG.cjs} +213 -83
  6. package/dist/chunk-OZBQAALG.cjs.map +1 -0
  7. package/dist/{chunk-4QASRPVX.cjs → chunk-WSJLKVXZ.cjs} +25 -13
  8. package/dist/chunk-WSJLKVXZ.cjs.map +1 -0
  9. package/dist/components/Breadcrumb.d.ts +8 -3
  10. package/dist/components/Breadcrumb.d.ts.map +1 -1
  11. package/dist/components/Checkbox.d.ts +3 -3
  12. package/dist/components/Icons/TrashIcon.d.ts +6 -0
  13. package/dist/components/Icons/TrashIcon.d.ts.map +1 -0
  14. package/dist/components/Icons/index.d.ts +1 -0
  15. package/dist/components/Icons/index.d.ts.map +1 -1
  16. package/dist/components/index.cjs +69 -69
  17. package/dist/components/index.js +1 -1
  18. package/dist/figma-codex.json +2 -7
  19. package/dist/index.cjs +73 -73
  20. package/dist/index.js +2 -2
  21. package/dist/languages/transform.d.ts +1 -8
  22. package/dist/languages/transform.d.ts.map +1 -1
  23. package/dist/preset/index.cjs +2 -2
  24. package/dist/preset/index.d.ts.map +1 -1
  25. package/dist/preset/index.js +1 -1
  26. package/dist/preset/recipes/breadcrumb.d.ts.map +1 -1
  27. package/dist/preset/semantic-tokens.d.ts +186 -45
  28. package/dist/preset/semantic-tokens.d.ts.map +1 -1
  29. package/package.json +1 -1
  30. package/src/__tests__/token-contract.test.ts +168 -0
  31. package/src/components/Breadcrumb.tsx +39 -13
  32. package/src/components/Icons/TrashIcon.tsx +34 -0
  33. package/src/components/Icons/index.ts +1 -0
  34. package/src/components/__tests__/Breadcrumb.test.tsx +82 -0
  35. package/src/languages/transform.ts +74 -52
  36. package/src/preset/index.ts +15 -3
  37. package/src/preset/recipes/breadcrumb.ts +22 -0
  38. package/src/preset/semantic-tokens.ts +164 -53
  39. package/dist/chunk-4QASRPVX.cjs.map +0 -1
  40. package/dist/chunk-52D45DUF.js.map +0 -1
  41. package/dist/chunk-PFWU7QSM.cjs.map +0 -1
  42. package/dist/chunk-SNUJBT5R.js.map +0 -1
@@ -353,45 +353,55 @@ var material3Language = {
353
353
  function transformToPandaTheme(language) {
354
354
  return {
355
355
  tokens: transformTokens(language),
356
- semanticTokens: transformSemanticTokens(language),
356
+ semanticTokens: transformSemanticTokens(),
357
357
  textStyles: transformTextStyles(language)
358
358
  };
359
359
  }
360
360
  function transformTokens(language) {
361
361
  return {
362
- colors: transformColorPalettes(language.colors),
362
+ colors: transformColorPalettes(
363
+ language.colors
364
+ ),
363
365
  fonts: {
364
366
  display: { value: language.typography.fonts.display },
365
367
  body: { value: language.typography.fonts.body },
366
368
  mono: { value: language.typography.fonts.mono }
367
369
  },
368
- fontSizes: extractFontSizes(language.typography.scale),
369
- lineHeights: extractLineHeights(language.typography.scale),
370
- fontWeights: extractFontWeights(language.typography.scale),
371
- letterSpacings: extractLetterSpacings(language.typography.scale),
372
- spacing: objectToTokens(language.spacing),
373
- radii: objectToTokens(language.shape.radii),
374
- shadows: objectToTokens(language.elevation.levels),
375
- durations: objectToTokens(language.motion.durations),
376
- easings: objectToTokens(language.motion.easings),
377
- borderWidths: objectToTokens(language.border.widths)
370
+ fontSizes: extractFontSizes(
371
+ language.typography.scale
372
+ ),
373
+ lineHeights: extractLineHeights(
374
+ language.typography.scale
375
+ ),
376
+ fontWeights: extractFontWeights(
377
+ language.typography.scale
378
+ ),
379
+ letterSpacings: extractLetterSpacings(
380
+ language.typography.scale
381
+ ),
382
+ spacing: objectToTokens(
383
+ language.spacing
384
+ ),
385
+ radii: objectToTokens(
386
+ language.shape.radii
387
+ ),
388
+ shadows: objectToTokens(
389
+ language.elevation.levels
390
+ ),
391
+ durations: objectToTokens(
392
+ language.motion.durations
393
+ ),
394
+ easings: objectToTokens(
395
+ language.motion.easings
396
+ ),
397
+ borderWidths: objectToTokens(
398
+ language.border.widths
399
+ )
378
400
  };
379
401
  }
380
- function transformSemanticTokens(language) {
381
- const light = language.semantic;
382
- const dark = language.semanticDark || light;
402
+ function transformSemanticTokens(_language) {
383
403
  return {
384
- colors: Object.fromEntries(
385
- Object.entries(light).map(([key, lightValue]) => [
386
- key,
387
- {
388
- value: {
389
- base: lightValue,
390
- _dark: dark[key] || lightValue
391
- }
392
- }
393
- ])
394
- )
404
+ colors: {}
395
405
  };
396
406
  }
397
407
  function transformTextStyles(language) {
@@ -416,10 +426,7 @@ function transformColorPalettes(palettes) {
416
426
  Object.entries(palettes).map(([name, palette]) => [
417
427
  name,
418
428
  Object.fromEntries(
419
- Object.entries(palette).map(([tone, value]) => [
420
- tone,
421
- { value }
422
- ])
429
+ Object.entries(palette).map(([tone, value]) => [tone, { value }])
423
430
  )
424
431
  ])
425
432
  );
@@ -451,10 +458,7 @@ function extractFontWeights(scale) {
451
458
  weights.set(style.fontWeight, style.fontWeight);
452
459
  });
453
460
  return Object.fromEntries(
454
- Array.from(weights.entries()).map(([key, value]) => [
455
- key,
456
- { value }
457
- ])
461
+ Array.from(weights.entries()).map(([key, value]) => [key, { value }])
458
462
  );
459
463
  }
460
464
  function extractLetterSpacings(scale) {
@@ -714,68 +718,162 @@ var colors = {
714
718
  // Map red to error for Park UI compatibility
715
719
  red: error
716
720
  };
717
- var semantic = material3Language.semantic;
718
- var semanticDark = material3Language.semanticDark;
719
- var m3SemanticTokens = dev.defineSemanticTokens.colors({
720
- // M3 Surface System
721
+ var s = material3Language.semantic;
722
+ var d = material3Language.semanticDark;
723
+ var semanticColorTokens = dev.defineSemanticTokens.colors({
724
+ // Primary
725
+ primary: {
726
+ DEFAULT: { value: { base: s.primary, _dark: d.primary } },
727
+ container: {
728
+ value: { base: s.primaryContainer, _dark: d.primaryContainer }
729
+ }
730
+ },
731
+ onPrimary: {
732
+ DEFAULT: { value: { base: s.onPrimary, _dark: d.onPrimary } },
733
+ container: {
734
+ value: { base: s.onPrimaryContainer, _dark: d.onPrimaryContainer }
735
+ }
736
+ },
737
+ // Secondary
738
+ secondary: {
739
+ DEFAULT: { value: { base: s.secondary, _dark: d.secondary } },
740
+ container: {
741
+ value: { base: s.secondaryContainer, _dark: d.secondaryContainer }
742
+ }
743
+ },
744
+ onSecondary: {
745
+ DEFAULT: { value: { base: s.onSecondary, _dark: d.onSecondary } },
746
+ container: {
747
+ value: { base: s.onSecondaryContainer, _dark: d.onSecondaryContainer }
748
+ }
749
+ },
750
+ // Tertiary
751
+ tertiary: {
752
+ DEFAULT: { value: { base: s.tertiary, _dark: d.tertiary } },
753
+ container: {
754
+ value: { base: s.tertiaryContainer, _dark: d.tertiaryContainer }
755
+ }
756
+ },
757
+ onTertiary: {
758
+ DEFAULT: { value: { base: s.onTertiary, _dark: d.onTertiary } },
759
+ container: {
760
+ value: { base: s.onTertiaryContainer, _dark: d.onTertiaryContainer }
761
+ }
762
+ },
763
+ // Error
764
+ error: {
765
+ DEFAULT: { value: { base: s.error, _dark: d.error } },
766
+ container: { value: { base: s.errorContainer, _dark: d.errorContainer } }
767
+ },
768
+ onError: {
769
+ DEFAULT: { value: { base: s.onError, _dark: d.onError } },
770
+ container: {
771
+ value: { base: s.onErrorContainer, _dark: d.onErrorContainer }
772
+ }
773
+ },
774
+ // Surface system
721
775
  surface: {
722
- DEFAULT: { value: { base: semantic.surface, _dark: semanticDark.surface } },
723
- dim: { value: { base: semantic.surfaceContainerLow, _dark: semanticDark.surfaceContainerLow } },
724
- bright: { value: { base: semantic.surfaceContainerHigh, _dark: semanticDark.surfaceContainerHigh } },
776
+ DEFAULT: { value: { base: s.surface, _dark: d.surface } },
777
+ dim: {
778
+ value: { base: s.surfaceContainerLow, _dark: d.surfaceContainerLow }
779
+ },
780
+ bright: {
781
+ value: { base: s.surfaceContainerHigh, _dark: d.surfaceContainerHigh }
782
+ },
725
783
  container: {
726
- DEFAULT: { value: { base: semantic.surfaceContainer, _dark: semanticDark.surfaceContainer } },
727
- low: { value: { base: semantic.surfaceContainerLow, _dark: semanticDark.surfaceContainerLow } },
728
- lowest: { value: { base: semantic.surfaceContainerLowest, _dark: semanticDark.surfaceContainerLowest } },
729
- high: { value: { base: semantic.surfaceContainerHigh, _dark: semanticDark.surfaceContainerHigh } },
730
- highest: { value: { base: semantic.surfaceContainerHighest, _dark: semanticDark.surfaceContainerHighest } }
784
+ DEFAULT: {
785
+ value: { base: s.surfaceContainer, _dark: d.surfaceContainer }
786
+ },
787
+ low: {
788
+ value: { base: s.surfaceContainerLow, _dark: d.surfaceContainerLow }
789
+ },
790
+ lowest: {
791
+ value: {
792
+ base: s.surfaceContainerLowest,
793
+ _dark: d.surfaceContainerLowest
794
+ }
795
+ },
796
+ high: {
797
+ value: { base: s.surfaceContainerHigh, _dark: d.surfaceContainerHigh }
798
+ },
799
+ highest: {
800
+ value: {
801
+ base: s.surfaceContainerHighest,
802
+ _dark: d.surfaceContainerHighest
803
+ }
804
+ }
731
805
  }
732
806
  },
733
807
  onSurface: {
734
- DEFAULT: { value: { base: semantic.onSurface, _dark: semanticDark.onSurface } },
735
- variant: { value: { base: semantic.onSurfaceVariant, _dark: semanticDark.onSurfaceVariant } }
808
+ DEFAULT: { value: { base: s.onSurface, _dark: d.onSurface } },
809
+ variant: { value: { base: s.onSurfaceVariant, _dark: d.onSurfaceVariant } }
810
+ },
811
+ surfaceVariant: {
812
+ value: { base: s.surfaceVariant, _dark: d.surfaceVariant }
736
813
  },
737
- // M3 Primary tokens (for explicit M3 usage)
814
+ // Background
815
+ background: { value: { base: s.background, _dark: d.background } },
816
+ onBackground: { value: { base: s.onBackground, _dark: d.onBackground } },
817
+ // Outline
818
+ outline: {
819
+ DEFAULT: { value: { base: s.outline, _dark: d.outline } },
820
+ variant: { value: { base: s.outlineVariant, _dark: d.outlineVariant } }
821
+ },
822
+ // Inverse
823
+ inverseSurface: {
824
+ value: { base: s.inverseSurface, _dark: d.inverseSurface }
825
+ },
826
+ inverseOnSurface: {
827
+ value: { base: s.inverseOnSurface, _dark: d.inverseOnSurface }
828
+ },
829
+ inversePrimary: {
830
+ value: { base: s.inversePrimary, _dark: d.inversePrimary }
831
+ },
832
+ // Not standard M3 tokens, but follow inversePrimary's pattern:
833
+ // light mode = dark-palette value, dark mode = light-palette value.
834
+ inverseSecondary: { value: { base: d.secondary, _dark: s.secondary } },
835
+ inverseTertiary: { value: { base: d.tertiary, _dark: s.tertiary } },
836
+ // Utility
837
+ scrim: { value: { base: s.scrim, _dark: d.scrim } },
838
+ shadow: { value: { base: s.shadow, _dark: d.shadow } }
839
+ });
840
+ var m3SemanticTokens = dev.defineSemanticTokens.colors({
738
841
  m3Primary: {
739
- DEFAULT: { value: { base: semantic.primary, _dark: semanticDark.primary } },
740
- container: { value: { base: semantic.primaryContainer, _dark: semanticDark.primaryContainer } }
842
+ DEFAULT: { value: { base: s.primary, _dark: d.primary } },
843
+ container: {
844
+ value: { base: s.primaryContainer, _dark: d.primaryContainer }
845
+ }
741
846
  },
742
847
  onM3Primary: {
743
- DEFAULT: { value: { base: semantic.onPrimary, _dark: semanticDark.onPrimary } },
744
- container: { value: { base: semantic.onPrimaryContainer, _dark: semanticDark.onPrimaryContainer } }
848
+ DEFAULT: { value: { base: s.onPrimary, _dark: d.onPrimary } },
849
+ container: {
850
+ value: { base: s.onPrimaryContainer, _dark: d.onPrimaryContainer }
851
+ }
745
852
  },
746
- // M3 Secondary (prefixed to avoid conflict with Park UI Radix-scale bridge)
747
853
  m3Secondary: {
748
- DEFAULT: { value: { base: semantic.secondary, _dark: semanticDark.secondary } },
749
- container: { value: { base: semantic.secondaryContainer, _dark: semanticDark.secondaryContainer } }
854
+ DEFAULT: { value: { base: s.secondary, _dark: d.secondary } },
855
+ container: {
856
+ value: { base: s.secondaryContainer, _dark: d.secondaryContainer }
857
+ }
750
858
  },
751
859
  onM3Secondary: {
752
- DEFAULT: { value: { base: semantic.onSecondary, _dark: semanticDark.onSecondary } },
753
- container: { value: { base: semantic.onSecondaryContainer, _dark: semanticDark.onSecondaryContainer } }
860
+ DEFAULT: { value: { base: s.onSecondary, _dark: d.onSecondary } },
861
+ container: {
862
+ value: { base: s.onSecondaryContainer, _dark: d.onSecondaryContainer }
863
+ }
754
864
  },
755
- // M3 Tertiary (prefixed to avoid conflict with Park UI Radix-scale bridge)
756
865
  m3Tertiary: {
757
- DEFAULT: { value: { base: semantic.tertiary, _dark: semanticDark.tertiary } },
758
- container: { value: { base: semantic.tertiaryContainer, _dark: semanticDark.tertiaryContainer } }
866
+ DEFAULT: { value: { base: s.tertiary, _dark: d.tertiary } },
867
+ container: {
868
+ value: { base: s.tertiaryContainer, _dark: d.tertiaryContainer }
869
+ }
759
870
  },
760
871
  onM3Tertiary: {
761
- DEFAULT: { value: { base: semantic.onTertiary, _dark: semanticDark.onTertiary } },
762
- container: { value: { base: semantic.onTertiaryContainer, _dark: semanticDark.onTertiaryContainer } }
763
- },
764
- // M3 Outline
765
- outline: {
766
- DEFAULT: { value: { base: semantic.outline, _dark: semanticDark.outline } },
767
- variant: { value: { base: semantic.outlineVariant, _dark: semanticDark.outlineVariant } }
768
- },
769
- // M3 Inverse
770
- inverseSurface: { value: { base: semantic.inverseSurface, _dark: semanticDark.inverseSurface } },
771
- inverseOnSurface: { value: { base: semantic.inverseOnSurface, _dark: semanticDark.inverseOnSurface } },
772
- inversePrimary: { value: { base: semantic.inversePrimary, _dark: semanticDark.inversePrimary } },
773
- // Not standard M3 tokens, but follow inversePrimary's pattern:
774
- // light mode = dark-palette value, dark mode = light-palette value.
775
- inverseSecondary: { value: { base: semanticDark.secondary, _dark: semantic.secondary } },
776
- inverseTertiary: { value: { base: semanticDark.tertiary, _dark: semantic.tertiary } },
777
- // Scrim/Shadow
778
- scrim: { value: { base: semantic.scrim, _dark: semanticDark.scrim } }
872
+ DEFAULT: { value: { base: s.onTertiary, _dark: d.onTertiary } },
873
+ container: {
874
+ value: { base: s.onTertiaryContainer, _dark: d.onTertiaryContainer }
875
+ }
876
+ }
779
877
  });
780
878
  var button = dev.defineRecipe({
781
879
  className: "button",
@@ -1902,6 +2000,27 @@ var breadcrumb = dev.defineSlotRecipe({
1902
2000
  lg: { list: { gap: "2", textStyle: "lg" } }
1903
2001
  }
1904
2002
  },
2003
+ compoundVariants: [
2004
+ {
2005
+ variant: "discourser",
2006
+ css: {
2007
+ link: {
2008
+ "&[data-disabled]": {
2009
+ color: "fg.subtle",
2010
+ opacity: 0.45,
2011
+ pointerEvents: "none",
2012
+ cursor: "default",
2013
+ _hover: { color: "fg.subtle" }
2014
+ }
2015
+ },
2016
+ item: {
2017
+ "&[data-disabled]": {
2018
+ opacity: 0.45
2019
+ }
2020
+ }
2021
+ }
2022
+ }
2023
+ ],
1905
2024
  defaultVariants: {
1906
2025
  variant: "plain",
1907
2026
  size: "md"
@@ -4290,8 +4409,19 @@ var discourserPandaPreset = dev.definePreset({
4290
4409
  // Semantic tokens: M3 colors + Park UI aliases + shadows + radii
4291
4410
  semanticTokens: {
4292
4411
  colors: {
4293
- // M3-to-Radix color bridges
4412
+ // Non-conflicting M3 semantic tokens land here first
4413
+ // (onPrimary, onSecondary, surface, outline, etc.)
4414
+ ...semanticColorTokens,
4415
+ // M3-to-Radix color bridges — overwrite conflicting top-level keys,
4416
+ // then re-merge the M3 semantic DEFAULT+container back in
4294
4417
  ...colors,
4418
+ primary: { ...colors.primary, ...semanticColorTokens.primary },
4419
+ secondary: {
4420
+ ...colors.secondary,
4421
+ ...semanticColorTokens.secondary
4422
+ },
4423
+ tertiary: { ...colors.tertiary, ...semanticColorTokens.tertiary },
4424
+ error: { ...colors.error, ...semanticColorTokens.error },
4295
4425
  // Park UI-style aliases for component compatibility
4296
4426
  fg: {
4297
4427
  default: {
@@ -4310,7 +4440,7 @@ var discourserPandaPreset = dev.definePreset({
4310
4440
  border: {
4311
4441
  value: { base: "{colors.gray.6}", _dark: "{colors.gray.6}" }
4312
4442
  },
4313
- // M3 semantic tokens (surface, onSurface, etc.)
4443
+ // DEPRECATED: m3-prefixed aliases (still needed by discourser.ai)
4314
4444
  ...m3SemanticTokens,
4315
4445
  // Base colors
4316
4446
  white: { value: "#FFFFFF" },
@@ -4399,5 +4529,5 @@ var discourserPandaPreset = dev.definePreset({
4399
4529
  exports.discourserPandaPreset = discourserPandaPreset;
4400
4530
  exports.material3Language = material3Language;
4401
4531
  exports.transformToPandaTheme = transformToPandaTheme;
4402
- //# sourceMappingURL=chunk-PFWU7QSM.cjs.map
4403
- //# sourceMappingURL=chunk-PFWU7QSM.cjs.map
4532
+ //# sourceMappingURL=chunk-OZBQAALG.cjs.map
4533
+ //# sourceMappingURL=chunk-OZBQAALG.cjs.map