@discourser/design-system 0.15.0 → 0.15.1

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 (88) hide show
  1. package/dist/{chunk-QC44JPCA.cjs → chunk-ABC7N32K.cjs} +316 -10
  2. package/dist/chunk-ABC7N32K.cjs.map +1 -0
  3. package/dist/{chunk-F7LHARS4.js → chunk-GD6Q2FUE.js} +446 -6
  4. package/dist/chunk-GD6Q2FUE.js.map +1 -0
  5. package/dist/{chunk-M7J7WKJY.js → chunk-SBKRSXSZ.js} +317 -11
  6. package/dist/chunk-SBKRSXSZ.js.map +1 -0
  7. package/dist/{chunk-QP4EJI3G.cjs → chunk-UNWXE6UB.cjs} +450 -2
  8. package/dist/chunk-UNWXE6UB.cjs.map +1 -0
  9. package/dist/components/Breadcrumb.d.ts +9 -0
  10. package/dist/components/Breadcrumb.d.ts.map +1 -0
  11. package/dist/components/Checkbox.d.ts +6 -6
  12. package/dist/components/Icons/ClockIcon.d.ts +6 -0
  13. package/dist/components/Icons/ClockIcon.d.ts.map +1 -0
  14. package/dist/components/Icons/GripDotsVerticalIcon.d.ts +6 -0
  15. package/dist/components/Icons/GripDotsVerticalIcon.d.ts.map +1 -0
  16. package/dist/components/Icons/index.d.ts +3 -0
  17. package/dist/components/Icons/index.d.ts.map +1 -0
  18. package/dist/components/ScenarioQueue/AddScenarioDialog.d.ts +16 -0
  19. package/dist/components/ScenarioQueue/AddScenarioDialog.d.ts.map +1 -0
  20. package/dist/components/ScenarioQueue/ScenarioCard.d.ts +10 -0
  21. package/dist/components/ScenarioQueue/ScenarioCard.d.ts.map +1 -0
  22. package/dist/components/ScenarioQueue/ScenarioCardDraggable.d.ts +15 -0
  23. package/dist/components/ScenarioQueue/ScenarioCardDraggable.d.ts.map +1 -0
  24. package/dist/components/ScenarioQueue/ScenarioQueue.d.ts +3 -0
  25. package/dist/components/ScenarioQueue/ScenarioQueue.d.ts.map +1 -0
  26. package/dist/components/ScenarioQueue/index.d.ts +6 -0
  27. package/dist/components/ScenarioQueue/index.d.ts.map +1 -0
  28. package/dist/components/ScenarioQueue/types.d.ts +56 -0
  29. package/dist/components/ScenarioQueue/types.d.ts.map +1 -0
  30. package/dist/components/index.cjs +65 -33
  31. package/dist/components/index.d.ts +4 -0
  32. package/dist/components/index.d.ts.map +1 -1
  33. package/dist/components/index.js +1 -1
  34. package/dist/index.cjs +69 -37
  35. package/dist/index.js +2 -2
  36. package/dist/preset/index.cjs +2 -2
  37. package/dist/preset/index.d.ts.map +1 -1
  38. package/dist/preset/index.js +1 -1
  39. package/dist/preset/recipes/avatar.d.ts.map +1 -1
  40. package/dist/preset/recipes/breadcrumb.d.ts +2 -0
  41. package/dist/preset/recipes/breadcrumb.d.ts.map +1 -0
  42. package/dist/preset/recipes/checkbox.d.ts.map +1 -1
  43. package/dist/preset/recipes/field.d.ts.map +1 -1
  44. package/dist/preset/recipes/index.d.ts +3 -0
  45. package/dist/preset/recipes/index.d.ts.map +1 -1
  46. package/dist/preset/recipes/progress.d.ts.map +1 -1
  47. package/dist/preset/recipes/radio-group.d.ts.map +1 -1
  48. package/dist/preset/recipes/scenario-card.d.ts +2 -0
  49. package/dist/preset/recipes/scenario-card.d.ts.map +1 -0
  50. package/dist/preset/recipes/scenario-queue.d.ts +2 -0
  51. package/dist/preset/recipes/scenario-queue.d.ts.map +1 -0
  52. package/dist/preset/recipes/steps.d.ts.map +1 -1
  53. package/dist/preset/recipes/toast.d.ts.map +1 -1
  54. package/dist/preset/recipes/tooltip.d.ts.map +1 -1
  55. package/dist/preset/semantic-tokens.d.ts +12 -0
  56. package/dist/preset/semantic-tokens.d.ts.map +1 -1
  57. package/package.json +10 -1
  58. package/src/components/Breadcrumb.tsx +34 -0
  59. package/src/components/Icons/ClockIcon.tsx +40 -0
  60. package/src/components/Icons/GripDotsVerticalIcon.tsx +26 -0
  61. package/src/components/Icons/index.ts +2 -0
  62. package/src/components/ScenarioQueue/AddScenarioDialog.tsx +137 -0
  63. package/src/components/ScenarioQueue/ScenarioCard.tsx +120 -0
  64. package/src/components/ScenarioQueue/ScenarioCardDraggable.tsx +41 -0
  65. package/src/components/ScenarioQueue/ScenarioQueue.test.tsx +398 -0
  66. package/src/components/ScenarioQueue/ScenarioQueue.tsx +162 -0
  67. package/src/components/ScenarioQueue/index.ts +11 -0
  68. package/src/components/ScenarioQueue/types.ts +86 -0
  69. package/src/components/index.ts +19 -0
  70. package/src/preset/index.ts +9 -0
  71. package/src/preset/recipes/avatar.ts +1 -2
  72. package/src/preset/recipes/breadcrumb.ts +77 -0
  73. package/src/preset/recipes/checkbox.ts +1 -2
  74. package/src/preset/recipes/field.ts +1 -2
  75. package/src/preset/recipes/index.ts +7 -0
  76. package/src/preset/recipes/progress.ts +1 -2
  77. package/src/preset/recipes/radio-group.ts +1 -2
  78. package/src/preset/recipes/scenario-card.ts +151 -0
  79. package/src/preset/recipes/scenario-queue.ts +99 -0
  80. package/src/preset/recipes/steps.ts +1 -2
  81. package/src/preset/recipes/toast.ts +1 -2
  82. package/src/preset/recipes/tooltip.ts +1 -2
  83. package/src/preset/semantic-tokens.ts +4 -0
  84. package/src/test/setup.ts +12 -0
  85. package/dist/chunk-F7LHARS4.js.map +0 -1
  86. package/dist/chunk-M7J7WKJY.js.map +0 -1
  87. package/dist/chunk-QC44JPCA.cjs.map +0 -1
  88. package/dist/chunk-QP4EJI3G.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { defineSemanticTokens, defineRecipe, defineSlotRecipe, defineLayerStyles, defineTextStyles, definePreset } from '@pandacss/dev';
2
- import { fieldAnatomy, accordionAnatomy, dialogAnatomy, tabsAnatomy, switchAnatomy, checkboxAnatomy, radioGroupAnatomy, selectAnatomy, sliderAnatomy, avatarAnatomy, progressAnatomy, toastAnatomy, popoverAnatomy, tooltipAnatomy } from '@ark-ui/react/anatomy';
2
+ import { accordionAnatomy, dialogAnatomy, tabsAnatomy, switchAnatomy, selectAnatomy, sliderAnatomy, popoverAnatomy } from '@ark-ui/react/anatomy';
3
3
 
4
4
  // src/languages/material3.language.ts
5
5
  var material3Language = {
@@ -768,6 +768,10 @@ var m3SemanticTokens = defineSemanticTokens.colors({
768
768
  inverseSurface: { value: { base: semantic.inverseSurface, _dark: semanticDark.inverseSurface } },
769
769
  inverseOnSurface: { value: { base: semantic.inverseOnSurface, _dark: semanticDark.inverseOnSurface } },
770
770
  inversePrimary: { value: { base: semantic.inversePrimary, _dark: semanticDark.inversePrimary } },
771
+ // Not standard M3 tokens, but follow inversePrimary's pattern:
772
+ // light mode = dark-palette value, dark mode = light-palette value.
773
+ inverseSecondary: { value: { base: semanticDark.secondary, _dark: semantic.secondary } },
774
+ inverseTertiary: { value: { base: semanticDark.tertiary, _dark: semantic.tertiary } },
771
775
  // Scrim/Shadow
772
776
  scrim: { value: { base: semantic.scrim, _dark: semanticDark.scrim } }
773
777
  });
@@ -1091,7 +1095,7 @@ var inputGroup = defineSlotRecipe({
1091
1095
  });
1092
1096
  var field = defineSlotRecipe({
1093
1097
  className: "field",
1094
- slots: fieldAnatomy.keys(),
1098
+ slots: ["root", "errorText", "helperText", "input", "label", "select", "textarea", "requiredIndicator"],
1095
1099
  base: {
1096
1100
  root: {
1097
1101
  display: "flex",
@@ -1793,6 +1797,79 @@ var tabs = defineSlotRecipe({
1793
1797
  variant: "line"
1794
1798
  }
1795
1799
  });
1800
+ var breadcrumb = defineSlotRecipe({
1801
+ className: "breadcrumb",
1802
+ slots: ["root", "list", "link", "item", "separator", "ellipsis"],
1803
+ base: {
1804
+ list: {
1805
+ alignItems: "center",
1806
+ display: "flex",
1807
+ listStyle: "none",
1808
+ wordBreak: "break-word"
1809
+ },
1810
+ link: {
1811
+ alignItems: "center",
1812
+ borderRadius: "l1",
1813
+ display: "inline-flex",
1814
+ focusRing: "outside",
1815
+ gap: "2",
1816
+ outline: "0",
1817
+ textDecoration: "none",
1818
+ transition: "color",
1819
+ _icon: { boxSize: "1em" }
1820
+ },
1821
+ item: {
1822
+ display: "inline-flex",
1823
+ alignItems: "center",
1824
+ color: "fg.muted",
1825
+ _last: {
1826
+ color: "fg.default"
1827
+ }
1828
+ },
1829
+ separator: {
1830
+ color: "fg.subtle",
1831
+ _icon: { boxSize: "1em" },
1832
+ _rtl: { rotate: "180deg" }
1833
+ },
1834
+ ellipsis: {
1835
+ alignItems: "center",
1836
+ color: "fg.muted",
1837
+ display: "inline-flex",
1838
+ justifyContent: "center",
1839
+ _icon: { boxSize: "1em" }
1840
+ }
1841
+ },
1842
+ variants: {
1843
+ variant: {
1844
+ underline: {
1845
+ link: {
1846
+ textDecoration: "underline",
1847
+ textDecorationThickness: "0.1em",
1848
+ textUnderlineOffset: "0.125em",
1849
+ textDecorationColor: "fg.subtle",
1850
+ _hover: { textDecorationColor: "fg.default" }
1851
+ }
1852
+ },
1853
+ plain: {
1854
+ link: {
1855
+ color: "fg.muted",
1856
+ _hover: { color: "fg.default" },
1857
+ _currentPage: { color: "fg.default" }
1858
+ }
1859
+ }
1860
+ },
1861
+ size: {
1862
+ xs: { list: { gap: "1", textStyle: "xs" } },
1863
+ sm: { list: { gap: "1", textStyle: "sm" } },
1864
+ md: { list: { gap: "1.5", textStyle: "md" } },
1865
+ lg: { list: { gap: "2", textStyle: "lg" } }
1866
+ }
1867
+ },
1868
+ defaultVariants: {
1869
+ variant: "plain",
1870
+ size: "md"
1871
+ }
1872
+ });
1796
1873
  var switchRecipe = defineSlotRecipe({
1797
1874
  className: "switchComponent",
1798
1875
  jsx: ["Switch", /Switch\.+/],
@@ -1927,7 +2004,7 @@ var switchRecipe = defineSlotRecipe({
1927
2004
  }
1928
2005
  });
1929
2006
  var checkbox = defineSlotRecipe({
1930
- slots: checkboxAnatomy.keys(),
2007
+ slots: ["root", "label", "control", "indicator", "group"],
1931
2008
  className: "checkbox",
1932
2009
  base: {
1933
2010
  root: {
@@ -2030,7 +2107,7 @@ var checkbox = defineSlotRecipe({
2030
2107
  });
2031
2108
  var radioGroup = defineSlotRecipe({
2032
2109
  className: "radio-group",
2033
- slots: radioGroupAnatomy.keys(),
2110
+ slots: ["root", "label", "item", "itemText", "itemControl", "indicator"],
2034
2111
  base: {
2035
2112
  root: {
2036
2113
  display: "flex",
@@ -2548,7 +2625,7 @@ var slider = defineSlotRecipe({
2548
2625
  });
2549
2626
  var avatar = defineSlotRecipe({
2550
2627
  className: "avatar",
2551
- slots: avatarAnatomy.keys(),
2628
+ slots: ["root", "image", "fallback"],
2552
2629
  base: {
2553
2630
  root: {
2554
2631
  display: "inline-flex",
@@ -2743,7 +2820,7 @@ var badge = defineRecipe({
2743
2820
  }
2744
2821
  });
2745
2822
  var progress = defineSlotRecipe({
2746
- slots: progressAnatomy.keys(),
2823
+ slots: ["root", "label", "track", "range", "valueText", "view", "circle", "circleTrack", "circleRange"],
2747
2824
  className: "progress",
2748
2825
  base: {
2749
2826
  root: {
@@ -2913,7 +2990,7 @@ var skeleton = defineRecipe({
2913
2990
  });
2914
2991
  var toast = defineSlotRecipe({
2915
2992
  className: "toast",
2916
- slots: toastAnatomy.keys(),
2993
+ slots: ["group", "root", "title", "description", "actionTrigger", "closeTrigger"],
2917
2994
  base: {
2918
2995
  root: {
2919
2996
  alignItems: "start",
@@ -3187,7 +3264,7 @@ var popover = defineSlotRecipe({
3187
3264
  });
3188
3265
  var tooltip = defineSlotRecipe({
3189
3266
  className: "tooltip",
3190
- slots: tooltipAnatomy.keys(),
3267
+ slots: ["trigger", "arrow", "arrowTip", "positioner", "content"],
3191
3268
  base: {
3192
3269
  content: {
3193
3270
  "--tooltip-bg": "colors.gray.solid.bg",
@@ -3450,6 +3527,231 @@ var stepper = defineSlotRecipe({
3450
3527
  colorPalette: "primary"
3451
3528
  }
3452
3529
  });
3530
+ var scenarioCard = defineSlotRecipe({
3531
+ className: "scenario-card",
3532
+ // Slots cover only scenario-specific styling.
3533
+ // Base card appearance (bg, border, borderRadius, overflow) comes from
3534
+ // Card.Root variant="outline" via the card slot recipe.
3535
+ // Layout structure (flex, gap, alignment) comes from Panda CSS JSX primitives.
3536
+ slots: ["root", "positionBadge", "dragHandle", "title", "switchRow", "switchLabel", "difficultyBadge", "durationBadge"],
3537
+ base: {
3538
+ root: {
3539
+ // Left accent border — inactive cards use transparent to preserve card width.
3540
+ borderLeftWidth: "3px",
3541
+ borderLeftStyle: "solid",
3542
+ borderLeftColor: "transparent",
3543
+ // Custom purple-tinted shadow from Figma spec (0px 2px 8px 0px rgba(167,139,250,0.15)).
3544
+ // This overrides Card.Root variant="elevated" (M3 level4) which is too heavy.
3545
+ // Raw value intentional: this non-standard shadow has no M3 elevation equivalent.
3546
+ boxShadow: "0px 2px 8px 0px rgba(167, 139, 250, 0.15)",
3547
+ // Figma cards use neutral/99 (#FDFCF5) — a warm off-white.
3548
+ // neutral.surface.bg resolves to white (#FFFFFF) in light mode, so we override.
3549
+ bg: "neutral.1",
3550
+ transition: "border-color",
3551
+ transitionDuration: "normal"
3552
+ },
3553
+ // Circle primitive handles: w/h (size="12"), borderRadius:full, flex centering.
3554
+ // Recipe handles: visual appearance (border, color, font).
3555
+ positionBadge: {
3556
+ fontSize: "md",
3557
+ fontWeight: "semibold",
3558
+ flexShrink: 0,
3559
+ borderWidth: "1px",
3560
+ borderStyle: "solid",
3561
+ borderColor: "neutral.6",
3562
+ color: "fg.default",
3563
+ bg: "transparent",
3564
+ transition: "all",
3565
+ transitionDuration: "normal"
3566
+ },
3567
+ dragHandle: {
3568
+ display: "flex",
3569
+ alignItems: "center",
3570
+ justifyContent: "center",
3571
+ // TODO: Create semantic token (e.g. colors.icon.subdued) that maps to secondary.6
3572
+ // Using palette bridge value directly until semantic token is defined
3573
+ color: "secondary.6",
3574
+ cursor: "grab",
3575
+ flexShrink: 0,
3576
+ width: "9",
3577
+ height: "10",
3578
+ _active: { cursor: "grabbing" }
3579
+ },
3580
+ title: {
3581
+ width: "full",
3582
+ fontSize: "sm",
3583
+ fontWeight: "semibold",
3584
+ lineHeight: "1.4",
3585
+ color: "fg.default"
3586
+ },
3587
+ // HStack handles: display:flex, alignItems:center, justifyContent:space-between.
3588
+ switchRow: {
3589
+ width: "full",
3590
+ pt: "1",
3591
+ mt: "1"
3592
+ },
3593
+ switchLabel: {
3594
+ fontSize: "sm",
3595
+ color: "fg.muted",
3596
+ fontWeight: "medium"
3597
+ },
3598
+ // Difficulty pill: M3 container tokens selected by data-difficulty attribute.
3599
+ // Default (beginner) = primaryContainer; overridden for intermediate/advanced.
3600
+ difficultyBadge: {
3601
+ display: "inline-flex",
3602
+ alignItems: "center",
3603
+ borderRadius: "l2",
3604
+ px: "2",
3605
+ h: "5",
3606
+ fontSize: "xs",
3607
+ fontWeight: "medium",
3608
+ bg: "m3Primary.container",
3609
+ color: "onM3Primary.container",
3610
+ '&[data-difficulty="intermediate"]': {
3611
+ bg: "m3Secondary.container",
3612
+ color: "onM3Secondary.container"
3613
+ },
3614
+ '&[data-difficulty="advanced"]': {
3615
+ bg: "m3Tertiary.container",
3616
+ color: "onM3Tertiary.container"
3617
+ }
3618
+ },
3619
+ // Duration pill: per-difficulty inverse palette colors.
3620
+ // Default (beginner): inversePrimary → semanticDark.primary (#B1D18A light, #4C662B dark)
3621
+ // Intermediate: inverseSecondary → semanticDark.secondary (#BFCBAD light, #586249 dark)
3622
+ // Advanced: inverseTertiary → semanticDark.tertiary (#A0D0CB light, #386663 dark)
3623
+ durationBadge: {
3624
+ display: "inline-flex",
3625
+ alignItems: "center",
3626
+ gap: "1",
3627
+ borderRadius: "l2",
3628
+ px: "2",
3629
+ h: "5",
3630
+ fontSize: "xs",
3631
+ fontWeight: "medium",
3632
+ bg: "inversePrimary",
3633
+ color: "onSurface",
3634
+ '&[data-difficulty="intermediate"]': {
3635
+ bg: "inverseSecondary"
3636
+ },
3637
+ '&[data-difficulty="advanced"]': {
3638
+ bg: "inverseTertiary"
3639
+ }
3640
+ }
3641
+ },
3642
+ variants: {
3643
+ isActive: {
3644
+ true: {
3645
+ root: {
3646
+ borderLeftColor: "primary.6"
3647
+ },
3648
+ positionBadge: {
3649
+ bg: "primary.6",
3650
+ color: "white",
3651
+ borderColor: "primary.6"
3652
+ }
3653
+ },
3654
+ false: {}
3655
+ },
3656
+ isDragging: {
3657
+ true: {
3658
+ root: {
3659
+ opacity: "0.4"
3660
+ }
3661
+ },
3662
+ false: {}
3663
+ }
3664
+ },
3665
+ defaultVariants: {
3666
+ isActive: false,
3667
+ isDragging: false
3668
+ }
3669
+ });
3670
+ var scenarioQueue = defineSlotRecipe({
3671
+ className: "scenario-queue",
3672
+ description: "Panel component with tabs and draggable scenario cards",
3673
+ slots: [
3674
+ "root",
3675
+ "header",
3676
+ "title",
3677
+ "count",
3678
+ "tabsInner",
3679
+ "tabList",
3680
+ "tabsContent",
3681
+ "scrollArea",
3682
+ "emptyState",
3683
+ "addButtonArea",
3684
+ "addButton"
3685
+ ],
3686
+ base: {
3687
+ root: {
3688
+ display: "flex",
3689
+ flexDirection: "column",
3690
+ h: "full",
3691
+ minH: "320px",
3692
+ minW: "250px",
3693
+ maxW: "300px",
3694
+ overflow: "hidden",
3695
+ bg: "surface"
3696
+ },
3697
+ header: {
3698
+ px: "4",
3699
+ pt: "4",
3700
+ pb: "2",
3701
+ flexShrink: 0
3702
+ },
3703
+ title: {
3704
+ fontWeight: "semibold",
3705
+ fontSize: "md",
3706
+ color: "fg.default"
3707
+ },
3708
+ count: {
3709
+ fontSize: "xs",
3710
+ color: "fg.muted",
3711
+ mt: "0.5"
3712
+ },
3713
+ // Applied directly to Tabs.Root className — handles the flex column growth
3714
+ // and scroll containment without a redundant wrapper div.
3715
+ tabsInner: {
3716
+ flex: "1",
3717
+ minHeight: "0",
3718
+ overflow: "hidden",
3719
+ display: "flex",
3720
+ flexDirection: "column"
3721
+ },
3722
+ tabList: {
3723
+ px: "4",
3724
+ flexShrink: 0
3725
+ },
3726
+ // Applied to each Tabs.Content — allows independent scrolling per tab.
3727
+ tabsContent: {
3728
+ flex: "1",
3729
+ minHeight: "0",
3730
+ overflowY: "auto"
3731
+ },
3732
+ // Block layout so cards size to natural height and the container scrolls.
3733
+ scrollArea: {
3734
+ px: "4",
3735
+ py: "3",
3736
+ "& > * + *": { marginTop: "6" }
3737
+ },
3738
+ // Center primitive handles the flex centering; recipe provides spacing/text.
3739
+ emptyState: {
3740
+ py: "12",
3741
+ fontSize: "sm",
3742
+ color: "fg.muted"
3743
+ },
3744
+ addButtonArea: {
3745
+ px: "4",
3746
+ pb: "4",
3747
+ pt: "2",
3748
+ flexShrink: 0
3749
+ },
3750
+ addButton: {
3751
+ width: "full"
3752
+ }
3753
+ }
3754
+ });
3453
3755
  var layerStyles = defineLayerStyles({
3454
3756
  disabled: {
3455
3757
  value: {
@@ -3596,6 +3898,8 @@ var discourserPandaPreset = definePreset({
3596
3898
  accordion,
3597
3899
  drawer,
3598
3900
  tabs,
3901
+ // Navigation
3902
+ breadcrumb,
3599
3903
  // Form Elements
3600
3904
  switchComponent: switchRecipe,
3601
3905
  checkbox,
@@ -3611,7 +3915,9 @@ var discourserPandaPreset = definePreset({
3611
3915
  popover,
3612
3916
  tooltip,
3613
3917
  // Custom Components
3614
- stepper
3918
+ stepper,
3919
+ scenarioCard,
3920
+ scenarioQueue
3615
3921
  }
3616
3922
  }
3617
3923
  },
@@ -3633,5 +3939,5 @@ var discourserPandaPreset = definePreset({
3633
3939
  });
3634
3940
 
3635
3941
  export { discourserPandaPreset, material3Language, transformToPandaTheme };
3636
- //# sourceMappingURL=chunk-M7J7WKJY.js.map
3637
- //# sourceMappingURL=chunk-M7J7WKJY.js.map
3942
+ //# sourceMappingURL=chunk-SBKRSXSZ.js.map
3943
+ //# sourceMappingURL=chunk-SBKRSXSZ.js.map