opus-react 0.2.19 → 0.2.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -456,6 +456,9 @@ __export(src_exports, {
456
456
  Accordion: () => Accordion,
457
457
  AccordionGroup: () => AccordionGroup,
458
458
  Alert: () => Alert,
459
+ Avatar: () => Avatar,
460
+ AvatarGroup: () => AvatarGroup,
461
+ Badge: () => Badge,
459
462
  Button: () => Button,
460
463
  Card: () => Card,
461
464
  Carousel: () => Carousel,
@@ -465,15 +468,21 @@ __export(src_exports, {
465
468
  CheckboxField: () => CheckboxField,
466
469
  ChipInput: () => ChipInput,
467
470
  ChipInputField: () => ChipInputField,
471
+ Clipboard: () => Clipboard,
472
+ ClipboardProvider: () => ClipboardProvider,
468
473
  ColorField: () => ColorField,
469
474
  CommandPalette: () => CommandPalette,
475
+ ContentTimeline: () => ContentTimeline,
470
476
  ContextMenuProvider: () => ContextMenuProvider,
471
477
  ContextMenuTarget: () => ContextMenuTarget,
478
+ CopyButton: () => CopyButton,
472
479
  CountryPickerField: () => CountryPickerField,
473
480
  DEFAULT_TOAST_DURATION_MS: () => DEFAULT_TOAST_DURATION_MS,
474
481
  DataGrid: () => DataGrid,
475
482
  DateField: () => DateField,
483
+ DescriptionList: () => DescriptionList,
476
484
  Dialog: () => Dialog,
485
+ Divider: () => Divider,
477
486
  Drawer: () => Drawer,
478
487
  DrawerDefaultActions: () => DrawerDefaultActions,
479
488
  DropdownMenu: () => DropdownMenu,
@@ -482,12 +491,20 @@ __export(src_exports, {
482
491
  FieldShell: () => FieldShell,
483
492
  FileField: () => FileField,
484
493
  FilterSelectField: () => FilterSelectField,
494
+ FocusTrap: () => FocusTrap,
485
495
  Gauge: () => Gauge,
486
496
  HiddenField: () => HiddenField,
497
+ HotkeyManager: () => HotkeyManager,
498
+ Icon: () => Icon,
487
499
  IconPicker: () => IconPicker,
488
500
  ImageGallery: () => ImageGallery,
489
501
  ImageThumbnail: () => ImageThumbnail,
502
+ IntersectionObserver: () => IntersectionObserver2,
503
+ JsonViewer: () => JsonViewer,
504
+ KeyboardShortcut: () => KeyboardShortcut,
490
505
  Lightbox: () => Lightbox,
506
+ List: () => List,
507
+ MasonryGrid: () => MasonryGrid,
491
508
  MegaMenu: () => MegaMenu,
492
509
  MetricTile: () => MetricTile,
493
510
  Modal: () => Modal,
@@ -503,12 +520,16 @@ __export(src_exports, {
503
520
  PasswordStrengthField: () => PasswordStrengthField,
504
521
  PhoneNumberField: () => PhoneNumberField,
505
522
  Popover: () => Popover,
523
+ Portal: () => Portal,
524
+ PortalHost: () => PortalHost,
506
525
  ProgressBar: () => ProgressBar,
507
526
  ProgressRing: () => ProgressRing,
527
+ PropertyGrid: () => PropertyGrid,
508
528
  Radio: () => Radio,
509
529
  RadioGroup: () => RadioGroup,
510
530
  RangeField: () => RangeField,
511
531
  RatingField: () => RatingField,
532
+ ResizeObserver: () => ResizeObserver2,
512
533
  RichTextField: () => RichTextField,
513
534
  Section: () => Section,
514
535
  SegmentedControlField: () => SegmentedControlField,
@@ -524,13 +545,17 @@ __export(src_exports, {
524
545
  SliderRangeField: () => SliderRangeField,
525
546
  Sparkline: () => Sparkline,
526
547
  Speedometer: () => Speedometer,
548
+ Spinner: () => Spinner,
527
549
  StatCard: () => StatCard,
550
+ Statistic: () => Statistic,
528
551
  StatusIndicator: () => StatusIndicator,
529
552
  SwitchField: () => SwitchField,
530
553
  Table: () => Table,
531
554
  Tabs: () => Tabs,
532
555
  TextAreaField: () => TextAreaField,
533
556
  TextField: () => TextField,
557
+ ThemeProvider: () => OpusThemeProvider,
558
+ ThemeSwitcher: () => ThemeSwitcher,
534
559
  ThemeToggleField: () => ThemeToggleField,
535
560
  Toast: () => Toast,
536
561
  ToastProvider: () => ToastProvider,
@@ -539,7 +564,9 @@ __export(src_exports, {
539
564
  TopNavigationMenu: () => TopNavigationMenu,
540
565
  TransferListField: () => TransferListField,
541
566
  TreeSelectField: () => TreeSelectField,
567
+ TreeView: () => TreeView,
542
568
  TrendBadge: () => TrendBadge,
569
+ VisuallyHidden: () => VisuallyHidden,
543
570
  accentColors: () => accentColors,
544
571
  cartesianSpecializedVariants: () => cartesianSpecializedVariants,
545
572
  countryCodeToFlag: () => countryCodeToFlag,
@@ -554,9 +581,15 @@ __export(src_exports, {
554
581
  fieldInputAriaProps: () => fieldInputAriaProps,
555
582
  phoneCountries: () => countries,
556
583
  useAccentPreference: () => useAccentPreference,
584
+ useClipboard: () => useClipboard,
557
585
  useContextMenu: () => useContextMenu,
558
586
  useFieldShellAria: () => useFieldShellAria,
587
+ useHotkey: () => useHotkey,
588
+ useHotkeyManager: () => useHotkeyManager,
589
+ useIntersectionObserver: () => useIntersectionObserver,
559
590
  useOpusTheme: () => useOpusTheme,
591
+ usePortalHost: () => usePortalHost,
592
+ useResizeObserver: () => useResizeObserver,
560
593
  useToast: () => useToast,
561
594
  useTopNavigation: () => useTopNavigation,
562
595
  worldMapRegionIds: () => worldMapRegionIds
@@ -564,7 +597,7 @@ __export(src_exports, {
564
597
  module.exports = __toCommonJS(src_exports);
565
598
 
566
599
  // ../../components/fields/Button/Button.module.css
567
- var Button_default = {"warning":"opus_lZkc26_warning","button":"opus_lZkc26_button","primary":"opus_lZkc26_primary","dark":"opus_lZkc26_dark","secondary":"opus_lZkc26_secondary","success":"opus_lZkc26_success","info":"opus_lZkc26_info","link":"opus_lZkc26_link","danger":"opus_lZkc26_danger","light":"opus_lZkc26_light"};
600
+ var Button_default = {"secondary":"opus_lZkc26_secondary","success":"opus_lZkc26_success","dark":"opus_lZkc26_dark","link":"opus_lZkc26_link","light":"opus_lZkc26_light","button":"opus_lZkc26_button","info":"opus_lZkc26_info","primary":"opus_lZkc26_primary","danger":"opus_lZkc26_danger","warning":"opus_lZkc26_warning"};
568
601
 
569
602
  // ../../components/fields/Button/Button.tsx
570
603
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -589,7 +622,7 @@ var import_react = require("react");
589
622
  var import_react_dom = require("react-dom");
590
623
 
591
624
  // ../../components/Tooltip/Tooltip.module.css
592
- var Tooltip_default = {"left":"opus_R70RbH_left","bottom":"opus_R70RbH_bottom","triggerWrap":"opus_R70RbH_triggerWrap","top":"opus_R70RbH_top","right":"opus_R70RbH_right","arrow":"opus_R70RbH_arrow","root":"opus_R70RbH_root","popup":"opus_R70RbH_popup","trigger":"opus_R70RbH_trigger"};
625
+ var Tooltip_default = {"trigger":"opus_R70RbH_trigger","popup":"opus_R70RbH_popup","top":"opus_R70RbH_top","bottom":"opus_R70RbH_bottom","root":"opus_R70RbH_root","triggerWrap":"opus_R70RbH_triggerWrap","arrow":"opus_R70RbH_arrow","left":"opus_R70RbH_left","right":"opus_R70RbH_right"};
593
626
 
594
627
  // ../../components/Tooltip/Tooltip.tsx
595
628
  var import_jsx_runtime2 = require("react/jsx-runtime");
@@ -758,7 +791,7 @@ function Tooltip({
758
791
  }
759
792
 
760
793
  // ../../components/fields/FieldShell/FieldShell.module.css
761
- var FieldShell_default = {"error":"opus_zNi12Z_error","labelRight":"opus_zNi12Z_labelRight","label":"opus_zNi12Z_label","controlFlagged":"opus_zNi12Z_controlFlagged","flagged":"opus_zNi12Z_flagged","visuallyHidden":"opus_zNi12Z_visuallyHidden","labelFlagged":"opus_zNi12Z_labelFlagged","stacked":"opus_zNi12Z_stacked","flaggedCenter":"opus_zNi12Z_flaggedCenter","labelLeft":"opus_zNi12Z_labelLeft","stackedLeft":"opus_zNi12Z_stackedLeft","fitContent":"opus_zNi12Z_fitContent","flaggedStart":"opus_zNi12Z_flaggedStart","required":"opus_zNi12Z_required","root":"opus_zNi12Z_root","control":"opus_zNi12Z_control","compactControl":"opus_zNi12Z_compactControl","stackedRight":"opus_zNi12Z_stackedRight","errorFlagged":"opus_zNi12Z_errorFlagged"};
794
+ var FieldShell_default = {"labelRight":"opus_zNi12Z_labelRight","flagged":"opus_zNi12Z_flagged","stackedLeft":"opus_zNi12Z_stackedLeft","stacked":"opus_zNi12Z_stacked","stackedRight":"opus_zNi12Z_stackedRight","root":"opus_zNi12Z_root","compactControl":"opus_zNi12Z_compactControl","labelFlagged":"opus_zNi12Z_labelFlagged","errorFlagged":"opus_zNi12Z_errorFlagged","required":"opus_zNi12Z_required","label":"opus_zNi12Z_label","flaggedStart":"opus_zNi12Z_flaggedStart","labelLeft":"opus_zNi12Z_labelLeft","control":"opus_zNi12Z_control","flaggedCenter":"opus_zNi12Z_flaggedCenter","error":"opus_zNi12Z_error","visuallyHidden":"opus_zNi12Z_visuallyHidden","fitContent":"opus_zNi12Z_fitContent","controlFlagged":"opus_zNi12Z_controlFlagged"};
762
795
 
763
796
  // ../../components/fields/FieldShell/FieldShell.tsx
764
797
  var import_jsx_runtime3 = require("react/jsx-runtime");
@@ -883,7 +916,7 @@ function FieldShell({
883
916
  }
884
917
 
885
918
  // ../../components/fields/CheckboxField/CheckboxField.module.css
886
- var CheckboxField_default = {"shell":"opus_g-5tlR_shell","round":"opus_g-5tlR_round","error":"opus_g-5tlR_error","toggle":"opus_g-5tlR_toggle","nativeInput":"opus_g-5tlR_nativeInput","visual":"opus_g-5tlR_visual","square":"opus_g-5tlR_square"};
919
+ var CheckboxField_default = {"round":"opus_g-5tlR_round","shell":"opus_g-5tlR_shell","square":"opus_g-5tlR_square","nativeInput":"opus_g-5tlR_nativeInput","error":"opus_g-5tlR_error","toggle":"opus_g-5tlR_toggle","visual":"opus_g-5tlR_visual"};
887
920
 
888
921
  // ../../components/fields/CheckboxField/CheckboxField.tsx
889
922
  var import_jsx_runtime4 = require("react/jsx-runtime");
@@ -940,7 +973,7 @@ function CheckboxField({
940
973
  }
941
974
 
942
975
  // ../../components/fields/ColorField/ColorField.module.css
943
- var ColorField_default = {"picker":"opus_Z7jeX4_picker","swatch":"opus_Z7jeX4_swatch","value":"opus_Z7jeX4_value","nativeInput":"opus_Z7jeX4_nativeInput","error":"opus_Z7jeX4_error","icon":"opus_Z7jeX4_icon"};
976
+ var ColorField_default = {"picker":"opus_Z7jeX4_picker","swatch":"opus_Z7jeX4_swatch","nativeInput":"opus_Z7jeX4_nativeInput","value":"opus_Z7jeX4_value","icon":"opus_Z7jeX4_icon","error":"opus_Z7jeX4_error"};
944
977
 
945
978
  // ../../components/fields/ColorField/ColorField.tsx
946
979
  var import_jsx_runtime5 = require("react/jsx-runtime");
@@ -990,7 +1023,7 @@ function ColorField({
990
1023
  }
991
1024
 
992
1025
  // ../../components/fields/DateField/DateField.module.css
993
- var DateField_default = {"error":"opus_G3y11z_error","input":"opus_G3y11z_input"};
1026
+ var DateField_default = {"input":"opus_G3y11z_input","error":"opus_G3y11z_error"};
994
1027
 
995
1028
  // ../../components/fields/DateField/DateField.tsx
996
1029
  var import_jsx_runtime6 = require("react/jsx-runtime");
@@ -1081,7 +1114,7 @@ function HiddenField({
1081
1114
  }
1082
1115
 
1083
1116
  // ../../components/fields/FileField/FileField.module.css
1084
- var FileField_default = {"drop":"opus_aOsPA7_drop","dropError":"opus_aOsPA7_dropError","title":"opus_aOsPA7_title","action":"opus_aOsPA7_action","iconSvg":"opus_aOsPA7_iconSvg","input":"opus_aOsPA7_input","icon":"opus_aOsPA7_icon","hint":"opus_aOsPA7_hint","footnote":"opus_aOsPA7_footnote","content":"opus_aOsPA7_content","wrapper":"opus_aOsPA7_wrapper","dragging":"opus_aOsPA7_dragging"};
1117
+ var FileField_default = {"icon":"opus_aOsPA7_icon","footnote":"opus_aOsPA7_footnote","content":"opus_aOsPA7_content","dragging":"opus_aOsPA7_dragging","iconSvg":"opus_aOsPA7_iconSvg","action":"opus_aOsPA7_action","input":"opus_aOsPA7_input","dropError":"opus_aOsPA7_dropError","drop":"opus_aOsPA7_drop","wrapper":"opus_aOsPA7_wrapper","title":"opus_aOsPA7_title","hint":"opus_aOsPA7_hint"};
1085
1118
 
1086
1119
  // ../../components/fields/FileField/FileField.tsx
1087
1120
  var import_react3 = require("react");
@@ -1386,7 +1419,7 @@ function NumberField({
1386
1419
  var import_react5 = require("react");
1387
1420
 
1388
1421
  // ../../components/fields/RadioGroup/RadioGroup.module.css
1389
- var RadioGroup_default = {"visual":"opus_O-1nor_visual","choice":"opus_O-1nor_choice","round":"opus_O-1nor_round","shell":"opus_O-1nor_shell","options":"opus_O-1nor_options","nativeInput":"opus_O-1nor_nativeInput","square":"opus_O-1nor_square","error":"opus_O-1nor_error","option":"opus_O-1nor_option"};
1422
+ var RadioGroup_default = {"choice":"opus_O-1nor_choice","square":"opus_O-1nor_square","option":"opus_O-1nor_option","options":"opus_O-1nor_options","nativeInput":"opus_O-1nor_nativeInput","error":"opus_O-1nor_error","round":"opus_O-1nor_round","visual":"opus_O-1nor_visual","shell":"opus_O-1nor_shell"};
1390
1423
 
1391
1424
  // ../../components/fields/RadioGroup/RadioGroup.tsx
1392
1425
  var import_jsx_runtime10 = require("react/jsx-runtime");
@@ -1483,7 +1516,7 @@ function Radio({ children, error, name, shape, value, defaultChecked }) {
1483
1516
  var import_react6 = require("react");
1484
1517
 
1485
1518
  // ../../components/fields/ChipInputField/ChipInputField.module.css
1486
- var ChipInputField_default = {"remove":"opus_IOOYwh_remove","error":"opus_IOOYwh_error","readOnly":"opus_IOOYwh_readOnly","chipLabel":"opus_IOOYwh_chipLabel","shell":"opus_IOOYwh_shell","input":"opus_IOOYwh_input","disabled":"opus_IOOYwh_disabled","field":"opus_IOOYwh_field","chip":"opus_IOOYwh_chip"};
1519
+ var ChipInputField_default = {"remove":"opus_IOOYwh_remove","field":"opus_IOOYwh_field","shell":"opus_IOOYwh_shell","error":"opus_IOOYwh_error","input":"opus_IOOYwh_input","readOnly":"opus_IOOYwh_readOnly","chipLabel":"opus_IOOYwh_chipLabel","disabled":"opus_IOOYwh_disabled","chip":"opus_IOOYwh_chip"};
1487
1520
 
1488
1521
  // ../../components/fields/ChipInputField/ChipInputField.tsx
1489
1522
  var import_jsx_runtime11 = require("react/jsx-runtime");
@@ -1619,7 +1652,7 @@ function ChipInput({
1619
1652
  var ChipInputField = ChipInput;
1620
1653
 
1621
1654
  // ../../components/fields/RangeField/RangeField.module.css
1622
- var RangeField_default = {"error":"opus_iRHQuG_error","footer":"opus_iRHQuG_footer","value":"opus_iRHQuG_value","topRow":"opus_iRHQuG_topRow","fieldLabel":"opus_iRHQuG_fieldLabel","slider":"opus_iRHQuG_slider","wrap":"opus_iRHQuG_wrap"};
1655
+ var RangeField_default = {"value":"opus_iRHQuG_value","slider":"opus_iRHQuG_slider","error":"opus_iRHQuG_error","fieldLabel":"opus_iRHQuG_fieldLabel","topRow":"opus_iRHQuG_topRow","wrap":"opus_iRHQuG_wrap","footer":"opus_iRHQuG_footer"};
1623
1656
 
1624
1657
  // ../../components/fields/RangeField/RangeField.tsx
1625
1658
  var import_jsx_runtime12 = require("react/jsx-runtime");
@@ -1791,7 +1824,7 @@ function SwitchField({
1791
1824
  var import_react7 = require("react");
1792
1825
 
1793
1826
  // ../../components/fields/TextAreaField/TextAreaField.module.css
1794
- var TextAreaField_default = {"footer":"opus_FjhWmh_footer","withCount":"opus_FjhWmh_withCount","error":"opus_FjhWmh_error","field":"opus_FjhWmh_field","footerError":"opus_FjhWmh_footerError","inlineCount":"opus_FjhWmh_inlineCount","externalCount":"opus_FjhWmh_externalCount","textarea":"opus_FjhWmh_textarea","inputWrap":"opus_FjhWmh_inputWrap"};
1827
+ var TextAreaField_default = {"externalCount":"opus_FjhWmh_externalCount","inlineCount":"opus_FjhWmh_inlineCount","field":"opus_FjhWmh_field","withCount":"opus_FjhWmh_withCount","footer":"opus_FjhWmh_footer","inputWrap":"opus_FjhWmh_inputWrap","footerError":"opus_FjhWmh_footerError","textarea":"opus_FjhWmh_textarea","error":"opus_FjhWmh_error"};
1795
1828
 
1796
1829
  // ../../components/fields/TextAreaField/TextAreaField.tsx
1797
1830
  var import_jsx_runtime15 = require("react/jsx-runtime");
@@ -1875,7 +1908,7 @@ var import_react_fontawesome = require("@fortawesome/react-fontawesome");
1875
1908
  var import_free_solid_svg_icons = require("@fortawesome/free-solid-svg-icons");
1876
1909
 
1877
1910
  // ../../components/fields/RichTextField/RichTextField.module.css
1878
- var RichTextField_default = {"modalActions":"opus_6HFqZH_modalActions","blockSelect":"opus_6HFqZH_blockSelect","field":"opus_6HFqZH_field","toolbarButton":"opus_6HFqZH_toolbarButton","modal":"opus_6HFqZH_modal","modalNumber":"opus_6HFqZH_modalNumber","toolbarIcon":"opus_6HFqZH_toolbarIcon","modalDimensionField":"opus_6HFqZH_modalDimensionField","modalTitle":"opus_6HFqZH_modalTitle","colorSwatch":"opus_6HFqZH_colorSwatch","modalOverlay":"opus_6HFqZH_modalOverlay","toolbarButtonActive":"opus_6HFqZH_toolbarButtonActive","readOnly":"opus_6HFqZH_readOnly","editorShell":"opus_6HFqZH_editorShell","editor":"opus_6HFqZH_editor","colorInput":"opus_6HFqZH_colorInput","toolbar":"opus_6HFqZH_toolbar","modalDimensions":"opus_6HFqZH_modalDimensions","modalConfirm":"opus_6HFqZH_modalConfirm","modalField":"opus_6HFqZH_modalField","modalTimes":"opus_6HFqZH_modalTimes","divider":"opus_6HFqZH_divider","modalCancel":"opus_6HFqZH_modalCancel","error":"opus_6HFqZH_error","modalLabel":"opus_6HFqZH_modalLabel","modalInput":"opus_6HFqZH_modalInput"};
1911
+ var RichTextField_default = {"modalActions":"opus_6HFqZH_modalActions","modalCancel":"opus_6HFqZH_modalCancel","modalConfirm":"opus_6HFqZH_modalConfirm","field":"opus_6HFqZH_field","readOnly":"opus_6HFqZH_readOnly","modalOverlay":"opus_6HFqZH_modalOverlay","editor":"opus_6HFqZH_editor","modalDimensionField":"opus_6HFqZH_modalDimensionField","divider":"opus_6HFqZH_divider","modalField":"opus_6HFqZH_modalField","toolbarButton":"opus_6HFqZH_toolbarButton","toolbar":"opus_6HFqZH_toolbar","blockSelect":"opus_6HFqZH_blockSelect","modalTitle":"opus_6HFqZH_modalTitle","modalLabel":"opus_6HFqZH_modalLabel","modalInput":"opus_6HFqZH_modalInput","modalDimensions":"opus_6HFqZH_modalDimensions","modalTimes":"opus_6HFqZH_modalTimes","error":"opus_6HFqZH_error","colorInput":"opus_6HFqZH_colorInput","modal":"opus_6HFqZH_modal","editorShell":"opus_6HFqZH_editorShell","toolbarIcon":"opus_6HFqZH_toolbarIcon","toolbarButtonActive":"opus_6HFqZH_toolbarButtonActive","colorSwatch":"opus_6HFqZH_colorSwatch","modalNumber":"opus_6HFqZH_modalNumber"};
1879
1912
 
1880
1913
  // ../../components/fields/RichTextField/RichTextField.tsx
1881
1914
  var import_jsx_runtime16 = require("react/jsx-runtime");
@@ -2523,7 +2556,7 @@ var import_react9 = require("react");
2523
2556
  var TextField_default = {"input":"opus_SOck2f_input","error":"opus_SOck2f_error"};
2524
2557
 
2525
2558
  // ../../components/fields/shared/fieldControl.module.css
2526
- var fieldControl_default = {"trigger":"opus_1Q5xBh_trigger","input":"opus_1Q5xBh_input","error":"opus_1Q5xBh_error","placeholder":"opus_1Q5xBh_placeholder","passwordToggle":"opus_1Q5xBh_passwordToggle","groupLabel":"opus_1Q5xBh_groupLabel","passwordInput":"opus_1Q5xBh_passwordInput","panel":"opus_1Q5xBh_panel","panelFooter":"opus_1Q5xBh_panelFooter","search":"opus_1Q5xBh_search","passwordToggleSlot":"opus_1Q5xBh_passwordToggleSlot","actionButtonPrimary":"opus_1Q5xBh_actionButtonPrimary","option":"opus_1Q5xBh_option","list":"opus_1Q5xBh_list","chevron":"opus_1Q5xBh_chevron","passwordWrap":"opus_1Q5xBh_passwordWrap","triggerOpen":"opus_1Q5xBh_triggerOpen","actionButton":"opus_1Q5xBh_actionButton","triggerError":"opus_1Q5xBh_triggerError"};
2559
+ var fieldControl_default = {"actionButtonPrimary":"opus_1Q5xBh_actionButtonPrimary","actionButton":"opus_1Q5xBh_actionButton","passwordWrap":"opus_1Q5xBh_passwordWrap","passwordToggle":"opus_1Q5xBh_passwordToggle","triggerOpen":"opus_1Q5xBh_triggerOpen","triggerError":"opus_1Q5xBh_triggerError","passwordInput":"opus_1Q5xBh_passwordInput","trigger":"opus_1Q5xBh_trigger","groupLabel":"opus_1Q5xBh_groupLabel","option":"opus_1Q5xBh_option","panelFooter":"opus_1Q5xBh_panelFooter","passwordToggleSlot":"opus_1Q5xBh_passwordToggleSlot","chevron":"opus_1Q5xBh_chevron","search":"opus_1Q5xBh_search","list":"opus_1Q5xBh_list","input":"opus_1Q5xBh_input","panel":"opus_1Q5xBh_panel","error":"opus_1Q5xBh_error","placeholder":"opus_1Q5xBh_placeholder"};
2527
2560
 
2528
2561
  // ../../components/fields/shared/PasswordToggle.tsx
2529
2562
  var import_react_fontawesome2 = require("@fortawesome/react-fontawesome");
@@ -2606,12 +2639,13 @@ var import_react_fontawesome3 = require("@fortawesome/react-fontawesome");
2606
2639
  var import_free_solid_svg_icons3 = require("@fortawesome/free-solid-svg-icons");
2607
2640
 
2608
2641
  // ../../components/fields/ThemeToggleField/ThemeToggleField.module.css
2609
- var ThemeToggleField_default = {"toggle":"opus_SwerMA_toggle","indicator":"opus_SwerMA_indicator","active":"opus_SwerMA_active","option":"opus_SwerMA_option"};
2642
+ var ThemeToggleField_default = {"toggle":"opus_SwerMA_toggle","indicator":"opus_SwerMA_indicator","option":"opus_SwerMA_option","active":"opus_SwerMA_active"};
2610
2643
 
2611
2644
  // ../../components/fields/ThemeToggleField/ThemeToggleField.tsx
2612
2645
  var import_jsx_runtime19 = require("react/jsx-runtime");
2613
2646
  function ThemeToggleField({
2614
2647
  className,
2648
+ help,
2615
2649
  id,
2616
2650
  label = "Theme",
2617
2651
  labelPosition = "left",
@@ -2626,6 +2660,7 @@ function ThemeToggleField({
2626
2660
  className,
2627
2661
  fitContent: true,
2628
2662
  flaggedAlign: "center",
2663
+ help,
2629
2664
  id,
2630
2665
  label,
2631
2666
  labelPosition,
@@ -2937,7 +2972,7 @@ function MultiSelectField({
2937
2972
  var import_react12 = require("react");
2938
2973
 
2939
2974
  // ../../components/fields/TransferListField/TransferListField.module.css
2940
- var TransferListField_default = {"column":"opus_NPBFZk_column","controlButton":"opus_NPBFZk_controlButton","item":"opus_NPBFZk_item","root":"opus_NPBFZk_root","columnHeader":"opus_NPBFZk_columnHeader","controls":"opus_NPBFZk_controls","itemActive":"opus_NPBFZk_itemActive","list":"opus_NPBFZk_list"};
2975
+ var TransferListField_default = {"list":"opus_NPBFZk_list","controls":"opus_NPBFZk_controls","root":"opus_NPBFZk_root","column":"opus_NPBFZk_column","columnHeader":"opus_NPBFZk_columnHeader","controlButton":"opus_NPBFZk_controlButton","itemActive":"opus_NPBFZk_itemActive","item":"opus_NPBFZk_item"};
2941
2976
 
2942
2977
  // ../../components/fields/TransferListField/TransferListField.tsx
2943
2978
  var import_jsx_runtime22 = require("react/jsx-runtime");
@@ -3057,7 +3092,7 @@ var import_react_fontawesome4 = require("@fortawesome/react-fontawesome");
3057
3092
  var import_free_solid_svg_icons4 = require("@fortawesome/free-solid-svg-icons");
3058
3093
 
3059
3094
  // ../../components/fields/PasswordStrengthField/PasswordStrengthField.module.css
3060
- var PasswordStrengthField_default = {"meterTrack":"opus_S1A372_meterTrack","meterWrap":"opus_S1A372_meterWrap","meterLabel":"opus_S1A372_meterLabel","meterFill":"opus_S1A372_meterFill","root":"opus_S1A372_root","requirementIcon":"opus_S1A372_requirementIcon","requirements":"opus_S1A372_requirements","requirementMet":"opus_S1A372_requirementMet","requirement":"opus_S1A372_requirement"};
3095
+ var PasswordStrengthField_default = {"meterLabel":"opus_S1A372_meterLabel","meterWrap":"opus_S1A372_meterWrap","meterFill":"opus_S1A372_meterFill","requirementIcon":"opus_S1A372_requirementIcon","root":"opus_S1A372_root","requirements":"opus_S1A372_requirements","requirement":"opus_S1A372_requirement","requirementMet":"opus_S1A372_requirementMet","meterTrack":"opus_S1A372_meterTrack"};
3061
3096
 
3062
3097
  // ../../components/fields/PasswordStrengthField/PasswordStrengthField.tsx
3063
3098
  var import_jsx_runtime23 = require("react/jsx-runtime");
@@ -3165,7 +3200,7 @@ function PasswordStrengthField({
3165
3200
  }
3166
3201
 
3167
3202
  // ../../components/fields/RatingField/RatingField.module.css
3168
- var RatingField_default = {"numericActive":"opus_0tdNUz_numericActive","root":"opus_0tdNUz_root","symbolActive":"opus_0tdNUz_symbolActive","symbol":"opus_0tdNUz_symbol","numeric":"opus_0tdNUz_numeric"};
3203
+ var RatingField_default = {"numeric":"opus_0tdNUz_numeric","symbol":"opus_0tdNUz_symbol","symbolActive":"opus_0tdNUz_symbolActive","root":"opus_0tdNUz_root","numericActive":"opus_0tdNUz_numericActive"};
3169
3204
 
3170
3205
  // ../../components/fields/RatingField/RatingField.tsx
3171
3206
  var import_jsx_runtime24 = require("react/jsx-runtime");
@@ -3240,7 +3275,7 @@ function RatingField({
3240
3275
  }
3241
3276
 
3242
3277
  // ../../components/fields/SegmentedControlField/SegmentedControlField.module.css
3243
- var SegmentedControlField_default = {"root":"opus_ZHwfiN_root","segmentActive":"opus_ZHwfiN_segmentActive","segment":"opus_ZHwfiN_segment"};
3278
+ var SegmentedControlField_default = {"segment":"opus_ZHwfiN_segment","root":"opus_ZHwfiN_root","segmentActive":"opus_ZHwfiN_segmentActive"};
3244
3279
 
3245
3280
  // ../../components/fields/SegmentedControlField/SegmentedControlField.tsx
3246
3281
  var import_jsx_runtime25 = require("react/jsx-runtime");
@@ -3295,7 +3330,7 @@ function SegmentedControlField({
3295
3330
  var import_react14 = require("react");
3296
3331
 
3297
3332
  // ../../components/fields/SliderRangeField/SliderRangeField.module.css
3298
- var SliderRangeField_default = {"header":"opus_k3d0sS_header","value":"opus_k3d0sS_value","track":"opus_k3d0sS_track","root":"opus_k3d0sS_root","trackWrap":"opus_k3d0sS_trackWrap","footer":"opus_k3d0sS_footer","slider":"opus_k3d0sS_slider"};
3333
+ var SliderRangeField_default = {"root":"opus_k3d0sS_root","slider":"opus_k3d0sS_slider","track":"opus_k3d0sS_track","header":"opus_k3d0sS_header","value":"opus_k3d0sS_value","trackWrap":"opus_k3d0sS_trackWrap","footer":"opus_k3d0sS_footer"};
3299
3334
 
3300
3335
  // ../../components/fields/SliderRangeField/SliderRangeField.tsx
3301
3336
  var import_jsx_runtime26 = require("react/jsx-runtime");
@@ -3392,7 +3427,7 @@ function SliderRangeField({
3392
3427
  var import_react15 = require("react");
3393
3428
 
3394
3429
  // ../../components/fields/PhoneNumberField/PhoneNumberField.module.css
3395
- var PhoneNumberField_default = {"empty":"opus_WC4gnN_empty","optionActive":"opus_WC4gnN_optionActive","countryWrap":"opus_WC4gnN_countryWrap","root":"opus_WC4gnN_root","country":"opus_WC4gnN_country","option":"opus_WC4gnN_option","panel":"opus_WC4gnN_panel","code":"opus_WC4gnN_code","optionLabel":"opus_WC4gnN_optionLabel","dial":"opus_WC4gnN_dial","flag":"opus_WC4gnN_flag","chevron":"opus_WC4gnN_chevron","countryValue":"opus_WC4gnN_countryValue","optionDial":"opus_WC4gnN_optionDial"};
3430
+ var PhoneNumberField_default = {"root":"opus_WC4gnN_root","countryValue":"opus_WC4gnN_countryValue","panel":"opus_WC4gnN_panel","code":"opus_WC4gnN_code","optionActive":"opus_WC4gnN_optionActive","flag":"opus_WC4gnN_flag","option":"opus_WC4gnN_option","optionLabel":"opus_WC4gnN_optionLabel","optionDial":"opus_WC4gnN_optionDial","chevron":"opus_WC4gnN_chevron","countryWrap":"opus_WC4gnN_countryWrap","country":"opus_WC4gnN_country","dial":"opus_WC4gnN_dial","empty":"opus_WC4gnN_empty"};
3396
3431
 
3397
3432
  // ../../components/fields/PhoneNumberField/countries.ts
3398
3433
  function countryCodeToFlag(code) {
@@ -3795,7 +3830,7 @@ function PhoneNumberField({
3795
3830
  var import_react16 = require("react");
3796
3831
 
3797
3832
  // ../../components/fields/CountryPickerField/CountryPickerField.module.css
3798
- var CountryPickerField_default = {"triggerValue":"opus_O7qqfR_triggerValue","optionCode":"opus_O7qqfR_optionCode","root":"opus_O7qqfR_root","empty":"opus_O7qqfR_empty","option":"opus_O7qqfR_option","optionActive":"opus_O7qqfR_optionActive","optionLabel":"opus_O7qqfR_optionLabel","flag":"opus_O7qqfR_flag"};
3833
+ var CountryPickerField_default = {"triggerValue":"opus_O7qqfR_triggerValue","root":"opus_O7qqfR_root","flag":"opus_O7qqfR_flag","optionActive":"opus_O7qqfR_optionActive","optionLabel":"opus_O7qqfR_optionLabel","empty":"opus_O7qqfR_empty","optionCode":"opus_O7qqfR_optionCode","option":"opus_O7qqfR_option"};
3799
3834
 
3800
3835
  // ../../components/fields/CountryPickerField/CountryPickerField.tsx
3801
3836
  var import_jsx_runtime28 = require("react/jsx-runtime");
@@ -3951,7 +3986,7 @@ function CountryPickerField({
3951
3986
  var import_react17 = require("react");
3952
3987
 
3953
3988
  // ../../components/fields/TreeSelectField/TreeSelectField.module.css
3954
- var TreeSelectField_default = {"root":"opus_Mq6C00_root","treeOption":"opus_Mq6C00_treeOption","treeOptionActive":"opus_Mq6C00_treeOptionActive"};
3989
+ var TreeSelectField_default = {"treeOptionActive":"opus_Mq6C00_treeOptionActive","treeOption":"opus_Mq6C00_treeOption","root":"opus_Mq6C00_root"};
3955
3990
 
3956
3991
  // ../../components/fields/TreeSelectField/TreeSelectField.tsx
3957
3992
  var import_jsx_runtime29 = require("react/jsx-runtime");
@@ -4080,7 +4115,7 @@ function TreeSelectField({
4080
4115
  var import_react18 = require("react");
4081
4116
 
4082
4117
  // ../../components/fields/CascaderField/CascaderField.module.css
4083
- var CascaderField_default = {"root":"opus_1Fg59A_root","option":"opus_1Fg59A_option","optionActive":"opus_1Fg59A_optionActive","column":"opus_1Fg59A_column","panel":"opus_1Fg59A_panel"};
4118
+ var CascaderField_default = {"option":"opus_1Fg59A_option","root":"opus_1Fg59A_root","panel":"opus_1Fg59A_panel","optionActive":"opus_1Fg59A_optionActive","column":"opus_1Fg59A_column"};
4084
4119
 
4085
4120
  // ../../components/fields/CascaderField/CascaderField.tsx
4086
4121
  var import_jsx_runtime30 = require("react/jsx-runtime");
@@ -4283,7 +4318,7 @@ function OpusThemeProvider({
4283
4318
  }
4284
4319
 
4285
4320
  // ../../components/Alert/Alert.module.css
4286
- var Alert_default = {"alert":"opus_eh3eeT_alert","icon":"opus_eh3eeT_icon","iconSvg":"opus_eh3eeT_iconSvg","title":"opus_eh3eeT_title","dismissIcon":"opus_eh3eeT_dismissIcon","iconMark":"opus_eh3eeT_iconMark","iconFlagged":"opus_eh3eeT_iconFlagged","dismiss":"opus_eh3eeT_dismiss","content":"opus_eh3eeT_content","description":"opus_eh3eeT_description"};
4321
+ var Alert_default = {"icon":"opus_eh3eeT_icon","dismiss":"opus_eh3eeT_dismiss","dismissIcon":"opus_eh3eeT_dismissIcon","content":"opus_eh3eeT_content","iconMark":"opus_eh3eeT_iconMark","title":"opus_eh3eeT_title","description":"opus_eh3eeT_description","alert":"opus_eh3eeT_alert","iconSvg":"opus_eh3eeT_iconSvg","iconFlagged":"opus_eh3eeT_iconFlagged"};
4287
4322
 
4288
4323
  // ../../components/Alert/Alert.tsx
4289
4324
  var import_jsx_runtime33 = require("react/jsx-runtime");
@@ -4432,7 +4467,7 @@ function useOverlayAccessibility(active, containerRef, {
4432
4467
  }
4433
4468
 
4434
4469
  // ../../components/Dialog/Dialog.module.css
4435
- var Dialog_default = {"backdrop":"opus_sz-ZGI_backdrop","backdropIn":"opus_sz-ZGI_backdropIn","backdropOut":"opus_sz-ZGI_backdropOut","dialogIn":"opus_sz-ZGI_dialogIn","dialogOut":"opus_sz-ZGI_dialogOut","visuallyHidden":"opus_sz-ZGI_visuallyHidden","content":"opus_sz-ZGI_content","dialog":"opus_sz-ZGI_dialog","icon":"opus_sz-ZGI_icon","actions":"opus_sz-ZGI_actions","iconSvg":"opus_sz-ZGI_iconSvg","description":"opus_sz-ZGI_description","title":"opus_sz-ZGI_title","iconMark":"opus_sz-ZGI_iconMark","body":"opus_sz-ZGI_body"};
4470
+ var Dialog_default = {"backdrop":"opus_sz-ZGI_backdrop","visuallyHidden":"opus_sz-ZGI_visuallyHidden","backdropIn":"opus_sz-ZGI_backdropIn","dialogOut":"opus_sz-ZGI_dialogOut","dialogIn":"opus_sz-ZGI_dialogIn","body":"opus_sz-ZGI_body","iconMark":"opus_sz-ZGI_iconMark","content":"opus_sz-ZGI_content","dialog":"opus_sz-ZGI_dialog","iconSvg":"opus_sz-ZGI_iconSvg","actions":"opus_sz-ZGI_actions","backdropOut":"opus_sz-ZGI_backdropOut","title":"opus_sz-ZGI_title","description":"opus_sz-ZGI_description","icon":"opus_sz-ZGI_icon"};
4436
4471
 
4437
4472
  // ../../components/Dialog/Dialog.tsx
4438
4473
  var import_jsx_runtime34 = require("react/jsx-runtime");
@@ -4563,7 +4598,7 @@ function Dialog({
4563
4598
  var import_react22 = require("react");
4564
4599
 
4565
4600
  // ../../components/Modal/Modal.module.css
4566
- var Modal_default = {"modal":"opus_LQbzGS_modal","header":"opus_LQbzGS_header","title":"opus_LQbzGS_title","close":"opus_LQbzGS_close","closeIcon":"opus_LQbzGS_closeIcon","body":"opus_LQbzGS_body","footer":"opus_LQbzGS_footer","footerContent":"opus_LQbzGS_footerContent","actions":"opus_LQbzGS_actions","heading":"opus_LQbzGS_heading","modalBackdropIn":"opus_LQbzGS_modalBackdropIn","description":"opus_LQbzGS_description","modalPanelOut":"opus_LQbzGS_modalPanelOut","modalBackdropOut":"opus_LQbzGS_modalBackdropOut","backdrop":"opus_LQbzGS_backdrop","modalPanelIn":"opus_LQbzGS_modalPanelIn"};
4601
+ var Modal_default = {"backdrop":"opus_LQbzGS_backdrop","footer":"opus_LQbzGS_footer","close":"opus_LQbzGS_close","modalBackdropIn":"opus_LQbzGS_modalBackdropIn","header":"opus_LQbzGS_header","modalPanelOut":"opus_LQbzGS_modalPanelOut","actions":"opus_LQbzGS_actions","body":"opus_LQbzGS_body","footerContent":"opus_LQbzGS_footerContent","closeIcon":"opus_LQbzGS_closeIcon","title":"opus_LQbzGS_title","modalPanelIn":"opus_LQbzGS_modalPanelIn","modalBackdropOut":"opus_LQbzGS_modalBackdropOut","modal":"opus_LQbzGS_modal","heading":"opus_LQbzGS_heading","description":"opus_LQbzGS_description"};
4567
4602
 
4568
4603
  // ../../components/Modal/Modal.tsx
4569
4604
  var import_jsx_runtime35 = require("react/jsx-runtime");
@@ -4694,7 +4729,7 @@ function ModalDefaultActions({ onClose }) {
4694
4729
  var import_react23 = require("react");
4695
4730
 
4696
4731
  // ../../components/Drawer/Drawer.module.css
4697
- var Drawer_default = {"header":"opus_0CaGbZ_header","close":"opus_0CaGbZ_close","actions":"opus_0CaGbZ_actions","backdrop":"opus_0CaGbZ_backdrop","description":"opus_0CaGbZ_description","drawerOutBottom":"opus_0CaGbZ_drawerOutBottom","heading":"opus_0CaGbZ_heading","drawerBackdropIn":"opus_0CaGbZ_drawerBackdropIn","drawerInLeft":"opus_0CaGbZ_drawerInLeft","title":"opus_0CaGbZ_title","drawerOutLeft":"opus_0CaGbZ_drawerOutLeft","drawerInTop":"opus_0CaGbZ_drawerInTop","footer":"opus_0CaGbZ_footer","drawerOutTop":"opus_0CaGbZ_drawerOutTop","drawerInRight":"opus_0CaGbZ_drawerInRight","drawerBackdropOut":"opus_0CaGbZ_drawerBackdropOut","drawerOutRight":"opus_0CaGbZ_drawerOutRight","closeIcon":"opus_0CaGbZ_closeIcon","body":"opus_0CaGbZ_body","footerContent":"opus_0CaGbZ_footerContent","drawer":"opus_0CaGbZ_drawer","drawerInBottom":"opus_0CaGbZ_drawerInBottom"};
4732
+ var Drawer_default = {"drawerOutTop":"opus_0CaGbZ_drawerOutTop","footer":"opus_0CaGbZ_footer","drawerOutRight":"opus_0CaGbZ_drawerOutRight","backdrop":"opus_0CaGbZ_backdrop","drawer":"opus_0CaGbZ_drawer","title":"opus_0CaGbZ_title","drawerInRight":"opus_0CaGbZ_drawerInRight","description":"opus_0CaGbZ_description","heading":"opus_0CaGbZ_heading","drawerBackdropIn":"opus_0CaGbZ_drawerBackdropIn","drawerOutBottom":"opus_0CaGbZ_drawerOutBottom","closeIcon":"opus_0CaGbZ_closeIcon","actions":"opus_0CaGbZ_actions","drawerInLeft":"opus_0CaGbZ_drawerInLeft","drawerOutLeft":"opus_0CaGbZ_drawerOutLeft","body":"opus_0CaGbZ_body","header":"opus_0CaGbZ_header","close":"opus_0CaGbZ_close","drawerInBottom":"opus_0CaGbZ_drawerInBottom","footerContent":"opus_0CaGbZ_footerContent","drawerBackdropOut":"opus_0CaGbZ_drawerBackdropOut","drawerInTop":"opus_0CaGbZ_drawerInTop"};
4698
4733
 
4699
4734
  // ../../components/Drawer/Drawer.tsx
4700
4735
  var import_jsx_runtime36 = require("react/jsx-runtime");
@@ -4826,7 +4861,7 @@ function DrawerDefaultActions({ onClose }) {
4826
4861
  var import_react24 = require("react");
4827
4862
 
4828
4863
  // ../../components/Popover/Popover.module.css
4829
- var Popover_default = {"content":"opus_yq4OU0_content","title":"opus_yq4OU0_title","arrow":"opus_yq4OU0_arrow","panel":"opus_yq4OU0_panel","root":"opus_yq4OU0_root","popoverIn":"opus_yq4OU0_popoverIn"};
4864
+ var Popover_default = {"popoverIn":"opus_yq4OU0_popoverIn","panel":"opus_yq4OU0_panel","title":"opus_yq4OU0_title","content":"opus_yq4OU0_content","root":"opus_yq4OU0_root","arrow":"opus_yq4OU0_arrow"};
4830
4865
 
4831
4866
  // ../../components/Popover/Popover.tsx
4832
4867
  var import_jsx_runtime37 = require("react/jsx-runtime");
@@ -4977,7 +5012,7 @@ function resolveMegaMenuPortalStyle(root, inTopNavigation) {
4977
5012
  }
4978
5013
 
4979
5014
  // ../../components/MegaMenu/MegaMenu.module.css
4980
- var MegaMenu_default = {"megaMenuIn":"opus_Y_ikQV_megaMenuIn","itemCopy":"opus_Y_ikQV_itemCopy","menuBar":"opus_Y_ikQV_menuBar","trigger":"opus_Y_ikQV_trigger","featured":"opus_Y_ikQV_featured","panelContent":"opus_Y_ikQV_panelContent","item":"opus_Y_ikQV_item","items":"opus_Y_ikQV_items","section":"opus_Y_ikQV_section","root":"opus_Y_ikQV_root","featuredAction":"opus_Y_ikQV_featuredAction","itemIcon":"opus_Y_ikQV_itemIcon","panel":"opus_Y_ikQV_panel","eyebrow":"opus_Y_ikQV_eyebrow","megaMenuOut":"opus_Y_ikQV_megaMenuOut","sections":"opus_Y_ikQV_sections"};
5015
+ var MegaMenu_default = {"megaMenuOut":"opus_Y_ikQV_megaMenuOut","root":"opus_Y_ikQV_root","panelContent":"opus_Y_ikQV_panelContent","items":"opus_Y_ikQV_items","panel":"opus_Y_ikQV_panel","eyebrow":"opus_Y_ikQV_eyebrow","sections":"opus_Y_ikQV_sections","featuredAction":"opus_Y_ikQV_featuredAction","megaMenuIn":"opus_Y_ikQV_megaMenuIn","featured":"opus_Y_ikQV_featured","section":"opus_Y_ikQV_section","item":"opus_Y_ikQV_item","itemIcon":"opus_Y_ikQV_itemIcon","trigger":"opus_Y_ikQV_trigger","menuBar":"opus_Y_ikQV_menuBar","itemCopy":"opus_Y_ikQV_itemCopy"};
4981
5016
 
4982
5017
  // ../../components/MegaMenu/MegaMenu.tsx
4983
5018
  var import_jsx_runtime38 = require("react/jsx-runtime");
@@ -5420,7 +5455,7 @@ function MegaMenu({
5420
5455
  }
5421
5456
 
5422
5457
  // ../../components/TopNavigation/TopNavigation.module.css
5423
- var TopNavigation_default = {"bar":"opus_OIomR6_bar","menuSlot":"opus_OIomR6_menuSlot","menuSlotMega":"opus_OIomR6_menuSlotMega","menuTrigger":"opus_OIomR6_menuTrigger","nav":"opus_OIomR6_nav"};
5458
+ var TopNavigation_default = {"nav":"opus_OIomR6_nav","menuSlotMega":"opus_OIomR6_menuSlotMega","menuSlot":"opus_OIomR6_menuSlot","menuTrigger":"opus_OIomR6_menuTrigger","bar":"opus_OIomR6_bar"};
5424
5459
 
5425
5460
  // ../../components/TopNavigation/TopNavigation.tsx
5426
5461
  var import_jsx_runtime39 = require("react/jsx-runtime");
@@ -5777,7 +5812,7 @@ function handleMenuKeyDown(event, menu, onEscape) {
5777
5812
  }
5778
5813
 
5779
5814
  // ../../components/DropdownMenu/DropdownMenu.module.css
5780
- var DropdownMenu_default = {"menu":"opus_UUVDVQ_menu","dropdownIn":"opus_UUVDVQ_dropdownIn","dropdownOut":"opus_UUVDVQ_dropdownOut","shortcut":"opus_UUVDVQ_shortcut","label":"opus_UUVDVQ_label","root":"opus_UUVDVQ_root","item":"opus_UUVDVQ_item","icon":"opus_UUVDVQ_icon"};
5815
+ var DropdownMenu_default = {"dropdownOut":"opus_UUVDVQ_dropdownOut","root":"opus_UUVDVQ_root","dropdownIn":"opus_UUVDVQ_dropdownIn","shortcut":"opus_UUVDVQ_shortcut","icon":"opus_UUVDVQ_icon","item":"opus_UUVDVQ_item","menu":"opus_UUVDVQ_menu","label":"opus_UUVDVQ_label"};
5781
5816
 
5782
5817
  // ../../components/DropdownMenu/DropdownMenu.tsx
5783
5818
  var import_jsx_runtime40 = require("react/jsx-runtime");
@@ -6108,7 +6143,7 @@ var import_react29 = require("react");
6108
6143
  var import_react_dom4 = require("react-dom");
6109
6144
 
6110
6145
  // ../../components/ContextMenu/ContextMenu.module.css
6111
- var ContextMenu_default = {"target":"opus_nMhhae_target","contextMenuBackdropIn":"opus_nMhhae_contextMenuBackdropIn","contextMenuIn":"opus_nMhhae_contextMenuIn","menu":"opus_nMhhae_menu","layer":"opus_nMhhae_layer","backdrop":"opus_nMhhae_backdrop"};
6146
+ var ContextMenu_default = {"contextMenuBackdropIn":"opus_nMhhae_contextMenuBackdropIn","menu":"opus_nMhhae_menu","contextMenuIn":"opus_nMhhae_contextMenuIn","layer":"opus_nMhhae_layer","target":"opus_nMhhae_target","backdrop":"opus_nMhhae_backdrop"};
6112
6147
 
6113
6148
  // ../../components/ContextMenu/ContextMenuProvider.tsx
6114
6149
  var import_jsx_runtime41 = require("react/jsx-runtime");
@@ -6413,7 +6448,7 @@ var import_free_solid_svg_icons5 = require("@fortawesome/free-solid-svg-icons");
6413
6448
  var import_react_fontawesome5 = require("@fortawesome/react-fontawesome");
6414
6449
 
6415
6450
  // ../../components/CommandPalette/CommandPalette.module.css
6416
- var CommandPalette_default = {"results":"opus_k1ypuy_results","itemMain":"opus_k1ypuy_itemMain","shortcut":"opus_k1ypuy_shortcut","group":"opus_k1ypuy_group","backdrop":"opus_k1ypuy_backdrop","searchInput":"opus_k1ypuy_searchInput","item":"opus_k1ypuy_item","groupLabel":"opus_k1ypuy_groupLabel","commandPaletteBackdropIn":"opus_k1ypuy_commandPaletteBackdropIn","searchWrap":"opus_k1ypuy_searchWrap","searchIcon":"opus_k1ypuy_searchIcon","itemDescription":"opus_k1ypuy_itemDescription","empty":"opus_k1ypuy_empty","itemLabel":"opus_k1ypuy_itemLabel","visuallyHidden":"opus_k1ypuy_visuallyHidden","panel":"opus_k1ypuy_panel","commandPalettePanelOut":"opus_k1ypuy_commandPalettePanelOut","commandPalettePanelIn":"opus_k1ypuy_commandPalettePanelIn","footer":"opus_k1ypuy_footer","commandPaletteBackdropOut":"opus_k1ypuy_commandPaletteBackdropOut","searchIconSvg":"opus_k1ypuy_searchIconSvg"};
6451
+ var CommandPalette_default = {"searchIcon":"opus_k1ypuy_searchIcon","itemLabel":"opus_k1ypuy_itemLabel","searchInput":"opus_k1ypuy_searchInput","commandPalettePanelIn":"opus_k1ypuy_commandPalettePanelIn","footer":"opus_k1ypuy_footer","shortcut":"opus_k1ypuy_shortcut","commandPalettePanelOut":"opus_k1ypuy_commandPalettePanelOut","empty":"opus_k1ypuy_empty","commandPaletteBackdropOut":"opus_k1ypuy_commandPaletteBackdropOut","visuallyHidden":"opus_k1ypuy_visuallyHidden","itemDescription":"opus_k1ypuy_itemDescription","panel":"opus_k1ypuy_panel","itemMain":"opus_k1ypuy_itemMain","item":"opus_k1ypuy_item","backdrop":"opus_k1ypuy_backdrop","results":"opus_k1ypuy_results","group":"opus_k1ypuy_group","searchIconSvg":"opus_k1ypuy_searchIconSvg","groupLabel":"opus_k1ypuy_groupLabel","commandPaletteBackdropIn":"opus_k1ypuy_commandPaletteBackdropIn","searchWrap":"opus_k1ypuy_searchWrap"};
6417
6452
 
6418
6453
  // ../../components/CommandPalette/CommandPalette.tsx
6419
6454
  var import_jsx_runtime42 = require("react/jsx-runtime");
@@ -6749,7 +6784,7 @@ function AccordionGroup({
6749
6784
  }
6750
6785
 
6751
6786
  // ../../components/Accordion/Accordion.module.css
6752
- var Accordion_default = {"standalone":"opus_WNZQMV_standalone","content":"opus_WNZQMV_content","triggerLabel":"opus_WNZQMV_triggerLabel","panel":"opus_WNZQMV_panel","trigger":"opus_WNZQMV_trigger","chevron":"opus_WNZQMV_chevron","panelInner":"opus_WNZQMV_panelInner","item":"opus_WNZQMV_item"};
6787
+ var Accordion_default = {"content":"opus_WNZQMV_content","panelInner":"opus_WNZQMV_panelInner","standalone":"opus_WNZQMV_standalone","triggerLabel":"opus_WNZQMV_triggerLabel","panel":"opus_WNZQMV_panel","trigger":"opus_WNZQMV_trigger","chevron":"opus_WNZQMV_chevron","item":"opus_WNZQMV_item"};
6753
6788
 
6754
6789
  // ../../components/Accordion/Accordion.tsx
6755
6790
  var import_jsx_runtime44 = require("react/jsx-runtime");
@@ -6836,7 +6871,7 @@ function Accordion({
6836
6871
  var import_react33 = require("react");
6837
6872
 
6838
6873
  // ../../components/ShowMore/ShowMore.module.css
6839
- var ShowMore_default = {"toggleLabel":"opus_dSk-ve_toggleLabel","showMoreLabelIn":"opus_dSk-ve_showMoreLabelIn","chevron":"opus_dSk-ve_chevron","inner":"opus_dSk-ve_inner","contentShell":"opus_dSk-ve_contentShell","toggle":"opus_dSk-ve_toggle","root":"opus_dSk-ve_root"};
6874
+ var ShowMore_default = {"toggleLabel":"opus_dSk-ve_toggleLabel","chevron":"opus_dSk-ve_chevron","root":"opus_dSk-ve_root","toggle":"opus_dSk-ve_toggle","inner":"opus_dSk-ve_inner","contentShell":"opus_dSk-ve_contentShell","showMoreLabelIn":"opus_dSk-ve_showMoreLabelIn"};
6840
6875
 
6841
6876
  // ../../components/ShowMore/ShowMore.tsx
6842
6877
  var import_jsx_runtime45 = require("react/jsx-runtime");
@@ -6940,7 +6975,7 @@ function ShowMore({
6940
6975
  }
6941
6976
 
6942
6977
  // ../../components/Toast/Toast.module.css
6943
- var Toast_default = {"toastProgress":"opus_cklQPW_toastProgress","iconMark":"opus_cklQPW_iconMark","icon":"opus_cklQPW_icon","progressTrack":"opus_cklQPW_progressTrack","main":"opus_cklQPW_main","dismiss":"opus_cklQPW_dismiss","toast":"opus_cklQPW_toast","iconSvg":"opus_cklQPW_iconSvg","title":"opus_cklQPW_title","dismissIcon":"opus_cklQPW_dismissIcon","body":"opus_cklQPW_body","content":"opus_cklQPW_content","description":"opus_cklQPW_description","progressBar":"opus_cklQPW_progressBar"};
6978
+ var Toast_default = {"main":"opus_cklQPW_main","title":"opus_cklQPW_title","progressBar":"opus_cklQPW_progressBar","toastProgress":"opus_cklQPW_toastProgress","description":"opus_cklQPW_description","iconMark":"opus_cklQPW_iconMark","toast":"opus_cklQPW_toast","dismiss":"opus_cklQPW_dismiss","progressTrack":"opus_cklQPW_progressTrack","content":"opus_cklQPW_content","icon":"opus_cklQPW_icon","body":"opus_cklQPW_body","dismissIcon":"opus_cklQPW_dismissIcon","iconSvg":"opus_cklQPW_iconSvg"};
6944
6979
 
6945
6980
  // ../../components/Toast/Toast.tsx
6946
6981
  var import_jsx_runtime46 = require("react/jsx-runtime");
@@ -7012,7 +7047,7 @@ function Toast({
7012
7047
  var import_react34 = require("react");
7013
7048
 
7014
7049
  // ../../components/ToastProvider/ToastProvider.module.css
7015
- var ToastProvider_default = {"itemClip":"opus_z3pSp7_itemClip","itemSurface":"opus_z3pSp7_itemSurface","viewportTop":"opus_z3pSp7_viewportTop","itemBackdrop":"opus_z3pSp7_itemBackdrop","item":"opus_z3pSp7_item","viewport":"opus_z3pSp7_viewport","viewportBottom":"opus_z3pSp7_viewportBottom","viewportLeft":"opus_z3pSp7_viewportLeft","viewportRight":"opus_z3pSp7_viewportRight"};
7050
+ var ToastProvider_default = {"viewportLeft":"opus_z3pSp7_viewportLeft","item":"opus_z3pSp7_item","itemClip":"opus_z3pSp7_itemClip","itemSurface":"opus_z3pSp7_itemSurface","viewport":"opus_z3pSp7_viewport","itemBackdrop":"opus_z3pSp7_itemBackdrop","viewportRight":"opus_z3pSp7_viewportRight","viewportTop":"opus_z3pSp7_viewportTop","viewportBottom":"opus_z3pSp7_viewportBottom"};
7016
7051
 
7017
7052
  // ../../components/ToastProvider/ToastProvider.tsx
7018
7053
  var import_jsx_runtime47 = require("react/jsx-runtime");
@@ -7382,7 +7417,7 @@ function ToastProvider({
7382
7417
  var import_react35 = require("react");
7383
7418
 
7384
7419
  // ../../components/Tabs/Tabs.module.css
7385
- var Tabs_default = {"list":"opus_ADVJmy_list","panel":"opus_ADVJmy_panel","root":"opus_ADVJmy_root","tab":"opus_ADVJmy_tab"};
7420
+ var Tabs_default = {"panel":"opus_ADVJmy_panel","list":"opus_ADVJmy_list","root":"opus_ADVJmy_root","tab":"opus_ADVJmy_tab"};
7386
7421
 
7387
7422
  // ../../components/Tabs/Tabs.tsx
7388
7423
  var import_jsx_runtime48 = require("react/jsx-runtime");
@@ -7496,7 +7531,7 @@ function Tabs({
7496
7531
  }
7497
7532
 
7498
7533
  // ../../components/Card/Card.module.css
7499
- var Card_default = {"body":"opus_qWo1sP_body","heading":"opus_qWo1sP_heading","content":"opus_qWo1sP_content","card":"opus_qWo1sP_card","footer":"opus_qWo1sP_footer","media":"opus_qWo1sP_media","title":"opus_qWo1sP_title","footerContent":"opus_qWo1sP_footerContent","actions":"opus_qWo1sP_actions","eyebrow":"opus_qWo1sP_eyebrow"};
7534
+ var Card_default = {"footerContent":"opus_qWo1sP_footerContent","actions":"opus_qWo1sP_actions","card":"opus_qWo1sP_card","content":"opus_qWo1sP_content","body":"opus_qWo1sP_body","footer":"opus_qWo1sP_footer","media":"opus_qWo1sP_media","title":"opus_qWo1sP_title","eyebrow":"opus_qWo1sP_eyebrow","heading":"opus_qWo1sP_heading"};
7500
7535
 
7501
7536
  // ../../components/Card/Card.tsx
7502
7537
  var import_jsx_runtime49 = require("react/jsx-runtime");
@@ -7527,7 +7562,7 @@ function Card({
7527
7562
  }
7528
7563
 
7529
7564
  // ../../components/dashboardMetricCardLayout/dashboardMetricCardLayout.module.css
7530
- var dashboardMetricCardLayout_default = {"iconSlot":"opus_6_sptY_iconSlot","header":"opus_6_sptY_header","label":"opus_6_sptY_label","metaPlaceholder":"opus_6_sptY_metaPlaceholder","shell":"opus_6_sptY_shell","value":"opus_6_sptY_value","iconPlaceholder":"opus_6_sptY_iconPlaceholder","metaSlot":"opus_6_sptY_metaSlot"};
7565
+ var dashboardMetricCardLayout_default = {"header":"opus_6_sptY_header","iconPlaceholder":"opus_6_sptY_iconPlaceholder","value":"opus_6_sptY_value","metaPlaceholder":"opus_6_sptY_metaPlaceholder","iconSlot":"opus_6_sptY_iconSlot","label":"opus_6_sptY_label","shell":"opus_6_sptY_shell","metaSlot":"opus_6_sptY_metaSlot"};
7531
7566
 
7532
7567
  // ../../components/StatCard/StatCard.module.css
7533
7568
  var StatCard_default = {"change":"opus_KIXsQY_change"};
@@ -7557,7 +7592,7 @@ function StatCard({
7557
7592
  }
7558
7593
 
7559
7594
  // ../../components/Gauge/Gauge.module.css
7560
- var Gauge_default = {"summary":"opus_t6IuQe_summary","gauge":"opus_t6IuQe_gauge","heading":"opus_t6IuQe_heading","footerTrend":"opus_t6IuQe_footerTrend","title":"opus_t6IuQe_title","footerItem":"opus_t6IuQe_footerItem","footerValue":"opus_t6IuQe_footerValue","gaugeTrack":"opus_t6IuQe_gaugeTrack","body":"opus_t6IuQe_body","gaugeSvg":"opus_t6IuQe_gaugeSvg","change":"opus_t6IuQe_change","subtitle":"opus_t6IuQe_subtitle","gaugeCenter":"opus_t6IuQe_gaugeCenter","header":"opus_t6IuQe_header","gaugeSlot":"opus_t6IuQe_gaugeSlot","footerLabel":"opus_t6IuQe_footerLabel","gaugeValue":"opus_t6IuQe_gaugeValue","footer":"opus_t6IuQe_footer","widget":"opus_t6IuQe_widget"};
7595
+ var Gauge_default = {"gaugeValue":"opus_t6IuQe_gaugeValue","gaugeCenter":"opus_t6IuQe_gaugeCenter","gaugeSlot":"opus_t6IuQe_gaugeSlot","footer":"opus_t6IuQe_footer","header":"opus_t6IuQe_header","footerLabel":"opus_t6IuQe_footerLabel","change":"opus_t6IuQe_change","subtitle":"opus_t6IuQe_subtitle","heading":"opus_t6IuQe_heading","widget":"opus_t6IuQe_widget","body":"opus_t6IuQe_body","summary":"opus_t6IuQe_summary","gaugeTrack":"opus_t6IuQe_gaugeTrack","title":"opus_t6IuQe_title","footerTrend":"opus_t6IuQe_footerTrend","gauge":"opus_t6IuQe_gauge","gaugeSvg":"opus_t6IuQe_gaugeSvg","footerValue":"opus_t6IuQe_footerValue","footerItem":"opus_t6IuQe_footerItem"};
7561
7596
 
7562
7597
  // ../../components/Gauge/Gauge.tsx
7563
7598
  var import_jsx_runtime51 = require("react/jsx-runtime");
@@ -7691,7 +7726,7 @@ function Gauge({
7691
7726
  var import_react36 = require("react");
7692
7727
 
7693
7728
  // ../../components/Sparkline/Sparkline.module.css
7694
- var Sparkline_default = {"area":"opus_xXtB87_area","svg":"opus_xXtB87_svg","endPoint":"opus_xXtB87_endPoint","label":"opus_xXtB87_label","chart":"opus_xXtB87_chart","sparkline":"opus_xXtB87_sparkline","line":"opus_xXtB87_line"};
7729
+ var Sparkline_default = {"area":"opus_xXtB87_area","svg":"opus_xXtB87_svg","endPoint":"opus_xXtB87_endPoint","chart":"opus_xXtB87_chart","sparkline":"opus_xXtB87_sparkline","label":"opus_xXtB87_label","line":"opus_xXtB87_line"};
7695
7730
 
7696
7731
  // ../../components/Sparkline/Sparkline.tsx
7697
7732
  var import_jsx_runtime52 = require("react/jsx-runtime");
@@ -7757,7 +7792,7 @@ function Sparkline({
7757
7792
  }
7758
7793
 
7759
7794
  // ../../components/ProgressRing/ProgressRing.module.css
7760
- var ProgressRing_default = {"ring":"opus_YxX6Hh_ring","track":"opus_YxX6Hh_track","svg":"opus_YxX6Hh_svg","center":"opus_YxX6Hh_center","value":"opus_YxX6Hh_value"};
7795
+ var ProgressRing_default = {"ring":"opus_YxX6Hh_ring","svg":"opus_YxX6Hh_svg","center":"opus_YxX6Hh_center","track":"opus_YxX6Hh_track","value":"opus_YxX6Hh_value"};
7761
7796
 
7762
7797
  // ../../components/ProgressRing/ProgressRing.tsx
7763
7798
  var import_jsx_runtime53 = require("react/jsx-runtime");
@@ -7790,7 +7825,7 @@ function ProgressRing({ label, max = 100, value }) {
7790
7825
  }
7791
7826
 
7792
7827
  // ../../components/ProgressBar/ProgressBar.module.css
7793
- var ProgressBar_default = {"track":"opus_q04AvA_track","value":"opus_q04AvA_value","fill":"opus_q04AvA_fill","bar":"opus_q04AvA_bar","header":"opus_q04AvA_header","label":"opus_q04AvA_label"};
7828
+ var ProgressBar_default = {"fill":"opus_q04AvA_fill","header":"opus_q04AvA_header","track":"opus_q04AvA_track","label":"opus_q04AvA_label","value":"opus_q04AvA_value","bar":"opus_q04AvA_bar"};
7794
7829
 
7795
7830
  // ../../components/ProgressBar/ProgressBar.tsx
7796
7831
  var import_jsx_runtime54 = require("react/jsx-runtime");
@@ -7810,7 +7845,7 @@ function ProgressBar({ label, max = 100, value }) {
7810
7845
  }
7811
7846
 
7812
7847
  // ../../components/Speedometer/Speedometer.module.css
7813
- var Speedometer_default = {"speedometer":"opus__jpB7z_speedometer","needle":"opus__jpB7z_needle","hub":"opus__jpB7z_hub","track":"opus__jpB7z_track","svg":"opus__jpB7z_svg","value":"opus__jpB7z_value","center":"opus__jpB7z_center"};
7848
+ var Speedometer_default = {"needle":"opus__jpB7z_needle","hub":"opus__jpB7z_hub","svg":"opus__jpB7z_svg","speedometer":"opus__jpB7z_speedometer","track":"opus__jpB7z_track","value":"opus__jpB7z_value","center":"opus__jpB7z_center"};
7814
7849
 
7815
7850
  // ../../components/Speedometer/Speedometer.tsx
7816
7851
  var import_jsx_runtime55 = require("react/jsx-runtime");
@@ -7843,7 +7878,7 @@ function Speedometer({ label, max = 100, value }) {
7843
7878
  }
7844
7879
 
7845
7880
  // ../../components/MetricTile/MetricTile.module.css
7846
- var MetricTile_default = {"sparklineRail":"opus_-dz9KL_sparklineRail","tile":"opus_-dz9KL_tile","sparklineReserve":"opus_-dz9KL_sparklineReserve"};
7881
+ var MetricTile_default = {"tile":"opus_-dz9KL_tile","sparklineRail":"opus_-dz9KL_sparklineRail","sparklineReserve":"opus_-dz9KL_sparklineReserve"};
7847
7882
 
7848
7883
  // ../../components/MetricTile/MetricTile.tsx
7849
7884
  var import_jsx_runtime56 = require("react/jsx-runtime");
@@ -7886,7 +7921,7 @@ function TrendBadge({ direction, value }) {
7886
7921
  }
7887
7922
 
7888
7923
  // ../../components/Panel/Panel.module.css
7889
- var Panel_default = {"heading":"opus_JZHUc__heading","title":"opus_JZHUc__title","description":"opus_JZHUc__description","headerActions":"opus_JZHUc__headerActions","body":"opus_JZHUc__body","header":"opus_JZHUc__header","panel":"opus_JZHUc__panel","footer":"opus_JZHUc__footer"};
7924
+ var Panel_default = {"panel":"opus_JZHUc__panel","description":"opus_JZHUc__description","title":"opus_JZHUc__title","footer":"opus_JZHUc__footer","headerActions":"opus_JZHUc__headerActions","body":"opus_JZHUc__body","heading":"opus_JZHUc__heading","header":"opus_JZHUc__header"};
7890
7925
 
7891
7926
  // ../../components/Panel/Panel.tsx
7892
7927
  var import_jsx_runtime59 = require("react/jsx-runtime");
@@ -8070,7 +8105,7 @@ function resolveSectionGapVars(gap = "md") {
8070
8105
  }
8071
8106
 
8072
8107
  // ../../components/Section/Section.module.css
8073
- var Section_default = {"header":"opus_FajZiH_header","title":"opus_FajZiH_title","section":"opus_FajZiH_section","description":"opus_FajZiH_description","body":"opus_FajZiH_body","row":"opus_FajZiH_row","column":"opus_FajZiH_column"};
8108
+ var Section_default = {"title":"opus_FajZiH_title","description":"opus_FajZiH_description","section":"opus_FajZiH_section","body":"opus_FajZiH_body","header":"opus_FajZiH_header","column":"opus_FajZiH_column","row":"opus_FajZiH_row"};
8074
8109
 
8075
8110
  // ../../components/Section/Section.tsx
8076
8111
  var import_jsx_runtime60 = require("react/jsx-runtime");
@@ -8151,7 +8186,7 @@ var Section = Object.assign(SectionRoot, {
8151
8186
  });
8152
8187
 
8153
8188
  // ../../components/Table/Table.module.css
8154
- var Table_default = {"table":"opus_2q7S14_table","caption":"opus_2q7S14_caption","visuallyHidden":"opus_2q7S14_visuallyHidden","wrap":"opus_2q7S14_wrap","empty":"opus_2q7S14_empty"};
8189
+ var Table_default = {"visuallyHidden":"opus_2q7S14_visuallyHidden","table":"opus_2q7S14_table","caption":"opus_2q7S14_caption","wrap":"opus_2q7S14_wrap","empty":"opus_2q7S14_empty"};
8155
8190
 
8156
8191
  // ../../components/Table/Table.tsx
8157
8192
  var import_jsx_runtime61 = require("react/jsx-runtime");
@@ -8184,8 +8219,196 @@ var import_react37 = require("react");
8184
8219
  var import_free_solid_svg_icons6 = require("@fortawesome/free-solid-svg-icons");
8185
8220
  var import_react_fontawesome6 = require("@fortawesome/react-fontawesome");
8186
8221
 
8222
+ // ../../components/DataGrid/dataGridLayout.ts
8223
+ function cellText(value) {
8224
+ if (value === null || value === void 0 || typeof value === "boolean") {
8225
+ return "";
8226
+ }
8227
+ if (typeof value === "number" || typeof value === "string") {
8228
+ return String(value);
8229
+ }
8230
+ if (Array.isArray(value)) {
8231
+ return value.map(cellText).join(" ");
8232
+ }
8233
+ return "";
8234
+ }
8235
+ function getRowCellText(row, key) {
8236
+ var _a2;
8237
+ if (key === "team") {
8238
+ return cellText((_a2 = row.values.team) != null ? _a2 : row.label);
8239
+ }
8240
+ return cellText(row.values[key]);
8241
+ }
8242
+ function buildGroupedDisplayRows(rows, groupBy, collapsedGroupIds) {
8243
+ var _a2;
8244
+ const groups = /* @__PURE__ */ new Map();
8245
+ for (const row of rows) {
8246
+ const label = getRowCellText(row, groupBy) || "Ungrouped";
8247
+ const bucket = (_a2 = groups.get(label)) != null ? _a2 : [];
8248
+ bucket.push(row);
8249
+ groups.set(label, bucket);
8250
+ }
8251
+ const display = [];
8252
+ for (const [label, groupRows] of groups) {
8253
+ const id = `group:${label}`;
8254
+ const expanded = !collapsedGroupIds.has(id);
8255
+ display.push({
8256
+ kind: "group",
8257
+ id,
8258
+ label,
8259
+ count: groupRows.length,
8260
+ expanded
8261
+ });
8262
+ if (expanded) {
8263
+ for (const row of groupRows) {
8264
+ display.push({
8265
+ kind: "data",
8266
+ row,
8267
+ depth: 1,
8268
+ expandable: false,
8269
+ expanded: false,
8270
+ hasChildren: false
8271
+ });
8272
+ }
8273
+ }
8274
+ }
8275
+ return display;
8276
+ }
8277
+ function buildTreeDisplayRows(rows, expandedIds, depth = 0) {
8278
+ var _a2;
8279
+ const display = [];
8280
+ for (const row of rows) {
8281
+ const children = (_a2 = row.children) != null ? _a2 : [];
8282
+ const hasChildren = children.length > 0;
8283
+ const expanded = hasChildren && expandedIds.has(row.id);
8284
+ display.push({
8285
+ kind: "data",
8286
+ row,
8287
+ depth,
8288
+ expandable: hasChildren,
8289
+ expanded,
8290
+ hasChildren
8291
+ });
8292
+ if (expanded) {
8293
+ display.push(...buildTreeDisplayRows(children, expandedIds, depth + 1));
8294
+ }
8295
+ }
8296
+ return display;
8297
+ }
8298
+ function buildFlatDisplayRows(rows) {
8299
+ return rows.map((row) => ({
8300
+ kind: "data",
8301
+ row,
8302
+ depth: 0,
8303
+ expandable: false,
8304
+ expanded: false,
8305
+ hasChildren: false
8306
+ }));
8307
+ }
8308
+ function collectTreeIds(rows) {
8309
+ var _a2;
8310
+ const ids = [];
8311
+ for (const row of rows) {
8312
+ if ((_a2 = row.children) == null ? void 0 : _a2.length) {
8313
+ ids.push(row.id);
8314
+ ids.push(...collectTreeIds(row.children));
8315
+ }
8316
+ }
8317
+ return ids;
8318
+ }
8319
+
8320
+ // ../../components/DataGrid/dataGridPivot.ts
8321
+ function toNumber(value) {
8322
+ const cleaned = value.replace(/%/g, "").replace(/^\+/, "").trim();
8323
+ if (!cleaned || Number.isNaN(Number(cleaned))) {
8324
+ return null;
8325
+ }
8326
+ return Number(cleaned);
8327
+ }
8328
+ function aggregate(values, mode) {
8329
+ if (mode === "count") {
8330
+ return values.length;
8331
+ }
8332
+ if (!values.length) {
8333
+ return 0;
8334
+ }
8335
+ const sum = values.reduce((total, value) => total + value, 0);
8336
+ return mode === "avg" ? sum / values.length : sum;
8337
+ }
8338
+ function formatMeasure(value, sample) {
8339
+ if (sample.includes("%")) {
8340
+ return `${Math.round(value)}%`;
8341
+ }
8342
+ if (Number.isInteger(value)) {
8343
+ return value;
8344
+ }
8345
+ return Math.round(value * 10) / 10;
8346
+ }
8347
+ function buildPivotGrid(sourceRows, config2) {
8348
+ var _a2, _b2;
8349
+ const aggregator = (_a2 = config2.aggregator) != null ? _a2 : "sum";
8350
+ const rowDims = config2.rows.length ? config2.rows : ["team"];
8351
+ const colDims = config2.columns.length ? config2.columns : ["group"];
8352
+ const valueKeys = config2.values.length ? config2.values : ["q1"];
8353
+ const columnLabels = /* @__PURE__ */ new Set();
8354
+ const matrix = /* @__PURE__ */ new Map();
8355
+ const rowLabels = /* @__PURE__ */ new Map();
8356
+ const samples = /* @__PURE__ */ new Map();
8357
+ for (const source of sourceRows) {
8358
+ const rowKey = rowDims.map((key) => getRowCellText(source, key) || "\u2014").join(" \xB7 ");
8359
+ const colKey = colDims.map((key) => getRowCellText(source, key) || "\u2014").join(" \xB7 ");
8360
+ rowLabels.set(rowKey, rowKey);
8361
+ if (!matrix.has(rowKey)) {
8362
+ matrix.set(rowKey, /* @__PURE__ */ new Map());
8363
+ }
8364
+ const rowBucket = matrix.get(rowKey);
8365
+ for (const valueKey of valueKeys) {
8366
+ const cellKey = valueKeys.length === 1 ? colKey : `${colKey} \xB7 ${valueKey}`;
8367
+ columnLabels.add(cellKey);
8368
+ const raw = getRowCellText(source, valueKey);
8369
+ const numeric = toNumber(raw);
8370
+ if (!samples.has(valueKey) && raw) {
8371
+ samples.set(valueKey, raw);
8372
+ }
8373
+ const values = (_b2 = rowBucket.get(cellKey)) != null ? _b2 : [];
8374
+ if (aggregator === "count") {
8375
+ values.push(1);
8376
+ } else if (numeric !== null) {
8377
+ values.push(numeric);
8378
+ }
8379
+ rowBucket.set(cellKey, values);
8380
+ }
8381
+ }
8382
+ const sortedColumnLabels = Array.from(columnLabels).sort((a, b) => a.localeCompare(b));
8383
+ const columns = [
8384
+ { key: "team", label: rowDims.join(" \xB7 "), align: "left", sortable: true, filterable: true },
8385
+ ...sortedColumnLabels.map((label) => ({
8386
+ key: label,
8387
+ label,
8388
+ align: "right",
8389
+ sortable: true,
8390
+ filterable: true
8391
+ }))
8392
+ ];
8393
+ const rows = Array.from(matrix.entries()).map(([rowKey, cells], index) => {
8394
+ var _a3, _b3, _c2;
8395
+ const values = { team: rowKey };
8396
+ for (const columnLabel of sortedColumnLabels) {
8397
+ const nums = (_a3 = cells.get(columnLabel)) != null ? _a3 : [];
8398
+ const sampleKey = (_b3 = valueKeys.find((key) => columnLabel.includes(key))) != null ? _b3 : valueKeys[0];
8399
+ const sample = (_c2 = samples.get(sampleKey)) != null ? _c2 : "";
8400
+ values[columnLabel] = formatMeasure(aggregate(nums, aggregator), sample);
8401
+ }
8402
+ return {
8403
+ id: `pivot-${index + 1}`,
8404
+ values
8405
+ };
8406
+ });
8407
+ return { columns, rows };
8408
+ }
8409
+
8187
8410
  // ../../components/DataGrid/DataGrid.module.css
8188
- var DataGrid_default = {"wrap":"opus_zN0bNb_wrap","menuSection":"opus_zN0bNb_menuSection","menuAction":"opus_zN0bNb_menuAction","sortButton":"opus_zN0bNb_sortButton","sortIndicator":"opus_zN0bNb_sortIndicator","menuButton":"opus_zN0bNb_menuButton","visuallyHidden":"opus_zN0bNb_visuallyHidden","rowHeader":"opus_zN0bNb_rowHeader","menuFilterIcon":"opus_zN0bNb_menuFilterIcon","headerLabel":"opus_zN0bNb_headerLabel","caption":"opus_zN0bNb_caption","headerMenu":"opus_zN0bNb_headerMenu","grid":"opus_zN0bNb_grid","frame":"opus_zN0bNb_frame","headerCell":"opus_zN0bNb_headerCell","menuLabel":"opus_zN0bNb_menuLabel","columnResizeHandle":"opus_zN0bNb_columnResizeHandle","sortIndicatorButton":"opus_zN0bNb_sortIndicatorButton","menuChevron":"opus_zN0bNb_menuChevron","menuHost":"opus_zN0bNb_menuHost","filterInput":"opus_zN0bNb_filterInput","empty":"opus_zN0bNb_empty","headerControls":"opus_zN0bNb_headerControls","gridBody":"opus_zN0bNb_gridBody","corner":"opus_zN0bNb_corner","sortButtonLabel":"opus_zN0bNb_sortButtonLabel"};
8411
+ var DataGrid_default = {"detailCell":"opus_zN0bNb_detailCell","filterInput":"opus_zN0bNb_filterInput","sortIndicatorButton":"opus_zN0bNb_sortIndicatorButton","chevron":"opus_zN0bNb_chevron","grid":"opus_zN0bNb_grid","wrap":"opus_zN0bNb_wrap","spacerRow":"opus_zN0bNb_spacerRow","rowHeader":"opus_zN0bNb_rowHeader","menuChevron":"opus_zN0bNb_menuChevron","expandSpacer":"opus_zN0bNb_expandSpacer","headerControls":"opus_zN0bNb_headerControls","groupRow":"opus_zN0bNb_groupRow","sortButtonLabel":"opus_zN0bNb_sortButtonLabel","menuAction":"opus_zN0bNb_menuAction","menuButton":"opus_zN0bNb_menuButton","menuHost":"opus_zN0bNb_menuHost","sortButton":"opus_zN0bNb_sortButton","headerMenu":"opus_zN0bNb_headerMenu","headerCell":"opus_zN0bNb_headerCell","menuFilterIcon":"opus_zN0bNb_menuFilterIcon","empty":"opus_zN0bNb_empty","expandButton":"opus_zN0bNb_expandButton","caption":"opus_zN0bNb_caption","gridBody":"opus_zN0bNb_gridBody","sortIndicator":"opus_zN0bNb_sortIndicator","columnResizeHandle":"opus_zN0bNb_columnResizeHandle","groupCount":"opus_zN0bNb_groupCount","visuallyHidden":"opus_zN0bNb_visuallyHidden","detailRow":"opus_zN0bNb_detailRow","infiniteFooter":"opus_zN0bNb_infiniteFooter","rowHeaderInner":"opus_zN0bNb_rowHeaderInner","corner":"opus_zN0bNb_corner","menuSection":"opus_zN0bNb_menuSection","menuLabel":"opus_zN0bNb_menuLabel","headerLabel":"opus_zN0bNb_headerLabel","frame":"opus_zN0bNb_frame","groupCell":"opus_zN0bNb_groupCell","rowHeaderLabel":"opus_zN0bNb_rowHeaderLabel","groupButton":"opus_zN0bNb_groupButton"};
8189
8412
 
8190
8413
  // ../../components/DataGrid/DataGrid.tsx
8191
8414
  var import_jsx_runtime62 = require("react/jsx-runtime");
@@ -8200,6 +8423,8 @@ var HEADER_CONTROL_GAP = 6;
8200
8423
  var SORT_INDICATOR_WIDTH = 8;
8201
8424
  var SORT_LABEL_GAP = 8;
8202
8425
  var RESIZE_HANDLE_WIDTH = 14;
8426
+ var DEFAULT_VIEWPORT = 360;
8427
+ var OVERSCAN = 6;
8203
8428
  function resolveColumnFeatures(column) {
8204
8429
  return {
8205
8430
  filterable: (column == null ? void 0 : column.filterable) === true,
@@ -8218,21 +8443,8 @@ function getMinColumnWidth(sortable, hasMenu, density) {
8218
8443
  }
8219
8444
  return width;
8220
8445
  }
8221
- function cellText(value) {
8222
- if (value === null || value === void 0 || typeof value === "boolean") {
8223
- return "";
8224
- }
8225
- if (typeof value === "number" || typeof value === "string") {
8226
- return String(value);
8227
- }
8228
- if (Array.isArray(value)) {
8229
- return value.map(cellText).join(" ");
8230
- }
8231
- return "";
8232
- }
8233
8446
  function rowTeamValue(row) {
8234
- var _a2;
8235
- return cellText((_a2 = row.values.team) != null ? _a2 : row.label);
8447
+ return getRowCellText(row, "team");
8236
8448
  }
8237
8449
  function isNumericValue(value) {
8238
8450
  return /^-?\d+(?:\.\d+)?$/.test(value);
@@ -8245,33 +8457,67 @@ function compareValues(a, b) {
8245
8457
  }
8246
8458
  return aTrim.localeCompare(bTrim, void 0, { numeric: true, sensitivity: "base" });
8247
8459
  }
8460
+ function defaultRowHeight(density) {
8461
+ return density === "comfortable" ? 44 : 36;
8462
+ }
8248
8463
  function DataGrid({
8249
8464
  bordered = true,
8250
8465
  caption,
8251
8466
  columns,
8467
+ defaultExpandedIds,
8252
8468
  density = "compact",
8469
+ detailExpandedIds,
8470
+ getDetailContent,
8471
+ groupBy = "group",
8472
+ hasMore = false,
8473
+ layout = "flat",
8474
+ loadingMore = false,
8475
+ onExpandedChange,
8476
+ onLoadMore,
8477
+ pivot,
8253
8478
  rowHeader,
8479
+ rowHeight,
8254
8480
  rows,
8255
8481
  stickyFirstColumn = true,
8256
8482
  stickyHeader = true,
8257
- striped = true
8483
+ striped = true,
8484
+ viewportHeight = DEFAULT_VIEWPORT,
8485
+ virtualized = false
8258
8486
  }) {
8259
- var _a2, _b2, _c2, _d2;
8487
+ var _a2, _b2, _c2, _d2, _e2, _f2;
8260
8488
  const [columnWidths, setColumnWidths] = (0, import_react37.useState)({});
8261
8489
  const [filters, setFilters] = (0, import_react37.useState)({});
8262
8490
  const [openMenu, setOpenMenu] = (0, import_react37.useState)(null);
8263
8491
  const [resizing, setResizing] = (0, import_react37.useState)(null);
8264
8492
  const [sort, setSort] = (0, import_react37.useState)(null);
8493
+ const [collapsedGroupIds, setCollapsedGroupIds] = (0, import_react37.useState)(() => /* @__PURE__ */ new Set());
8494
+ const [treeExpandedIds, setTreeExpandedIds] = (0, import_react37.useState)(
8495
+ () => new Set(defaultExpandedIds != null ? defaultExpandedIds : [])
8496
+ );
8497
+ const [uncontrolledDetailIds, setUncontrolledDetailIds] = (0, import_react37.useState)(() => /* @__PURE__ */ new Set());
8498
+ const [scrollTop, setScrollTop] = (0, import_react37.useState)(0);
8265
8499
  const menuAnchorRef = (0, import_react37.useRef)(null);
8266
8500
  const menuHostRef = (0, import_react37.useRef)(null);
8267
8501
  const menuRef = (0, import_react37.useRef)(null);
8268
8502
  const menuFrameRef = (0, import_react37.useRef)(null);
8269
8503
  const resizeDragRef = (0, import_react37.useRef)(null);
8270
8504
  const wrapRef = (0, import_react37.useRef)(null);
8271
- const hasTeamColumn = columns.some((column) => column.key === "team");
8505
+ const sentinelRef = (0, import_react37.useRef)(null);
8506
+ const resolvedRowHeight = rowHeight != null ? rowHeight : defaultRowHeight(density);
8507
+ const detailIds = detailExpandedIds ? new Set(detailExpandedIds) : uncontrolledDetailIds;
8508
+ const masterDetail = Boolean(getDetailContent) && layout !== "pivot";
8509
+ const pivotResult = (0, import_react37.useMemo)(() => {
8510
+ if (layout !== "pivot") {
8511
+ return null;
8512
+ }
8513
+ return buildPivotGrid(rows, pivot != null ? pivot : { rows: ["group"], columns: ["a11y"], values: ["q1", "q2"] });
8514
+ }, [layout, pivot, rows]);
8515
+ const activeColumns = (_a2 = pivotResult == null ? void 0 : pivotResult.columns) != null ? _a2 : columns;
8516
+ const activeRows = (_b2 = pivotResult == null ? void 0 : pivotResult.rows) != null ? _b2 : rows;
8517
+ const hasTeamColumn = activeColumns.some((column) => column.key === "team");
8272
8518
  const gridColumns = (0, import_react37.useMemo)(
8273
- () => hasTeamColumn ? columns : [{ key: "team", label: "Team", align: "left" }, ...columns],
8274
- [columns, hasTeamColumn]
8519
+ () => hasTeamColumn ? activeColumns : [{ key: "team", label: "Team", align: "left" }, ...activeColumns],
8520
+ [activeColumns, hasTeamColumn]
8275
8521
  );
8276
8522
  const dataColumns = (0, import_react37.useMemo)(
8277
8523
  () => gridColumns.filter((column) => column.key !== "team"),
@@ -8285,34 +8531,92 @@ function DataGrid({
8285
8531
  }
8286
8532
  return features;
8287
8533
  }, [gridColumns, hasTeamColumn, rowHeader]);
8288
- const visibleRows = rows.filter(
8289
- (row) => gridColumns.every((column) => {
8290
- var _a3;
8291
- const features = columnFeatures[column.key];
8292
- if (!(features == null ? void 0 : features.filterable)) {
8293
- return true;
8294
- }
8295
- const filter = (_a3 = filters[column.key]) == null ? void 0 : _a3.trim().toLowerCase();
8296
- if (!filter) {
8297
- return true;
8298
- }
8299
- const value = column.key === "team" ? rowTeamValue(row) : cellText(row.values[column.key]);
8300
- return value.toLowerCase().includes(filter);
8301
- })
8302
- ).sort((a, b) => {
8303
- var _a3;
8304
- if (!sort) {
8305
- return 0;
8534
+ const filterSortRows = (0, import_react37.useCallback)(
8535
+ (source) => {
8536
+ return source.filter(
8537
+ (row) => gridColumns.every((column) => {
8538
+ var _a3;
8539
+ const features = columnFeatures[column.key];
8540
+ if (!(features == null ? void 0 : features.filterable)) {
8541
+ return true;
8542
+ }
8543
+ const filter = (_a3 = filters[column.key]) == null ? void 0 : _a3.trim().toLowerCase();
8544
+ if (!filter) {
8545
+ return true;
8546
+ }
8547
+ const value = column.key === "team" ? rowTeamValue(row) : getRowCellText(row, column.key);
8548
+ return value.toLowerCase().includes(filter);
8549
+ })
8550
+ ).sort((a, b) => {
8551
+ var _a3;
8552
+ if (!sort || !((_a3 = columnFeatures[sort.key]) == null ? void 0 : _a3.sortable)) {
8553
+ return 0;
8554
+ }
8555
+ const aValue = sort.key === "team" ? rowTeamValue(a) : getRowCellText(a, sort.key);
8556
+ const bValue = sort.key === "team" ? rowTeamValue(b) : getRowCellText(b, sort.key);
8557
+ const result = compareValues(aValue, bValue);
8558
+ return sort.direction === "ascending" ? result : -result;
8559
+ });
8560
+ },
8561
+ [columnFeatures, filters, gridColumns, sort]
8562
+ );
8563
+ (0, import_react37.useEffect)(() => {
8564
+ if (layout === "tree" && defaultExpandedIds === void 0 && treeExpandedIds.size === 0) {
8565
+ setTreeExpandedIds(new Set(collectTreeIds(activeRows).slice(0, 4)));
8306
8566
  }
8307
- if (!((_a3 = columnFeatures[sort.key]) == null ? void 0 : _a3.sortable)) {
8308
- return 0;
8567
+ }, [activeRows, defaultExpandedIds, layout, treeExpandedIds.size]);
8568
+ const displayRows = (0, import_react37.useMemo)(() => {
8569
+ if (layout === "tree") {
8570
+ return buildTreeDisplayRows(filterSortRows(activeRows), treeExpandedIds);
8309
8571
  }
8310
- const aValue = sort.key === "team" ? rowTeamValue(a) : cellText(a.values[sort.key]);
8311
- const bValue = sort.key === "team" ? rowTeamValue(b) : cellText(b.values[sort.key]);
8312
- const result = compareValues(aValue, bValue);
8313
- return sort.direction === "ascending" ? result : -result;
8314
- });
8572
+ const flat = filterSortRows(activeRows);
8573
+ if (layout === "grouped") {
8574
+ return buildGroupedDisplayRows(flat, groupBy, collapsedGroupIds);
8575
+ }
8576
+ return buildFlatDisplayRows(flat);
8577
+ }, [activeRows, collapsedGroupIds, filterSortRows, groupBy, layout, treeExpandedIds]);
8315
8578
  const openMenuFeatures = openMenu ? columnFeatures[openMenu.key] : void 0;
8579
+ const setExpandedIds = (0, import_react37.useCallback)(
8580
+ (next) => {
8581
+ setTreeExpandedIds(next);
8582
+ onExpandedChange == null ? void 0 : onExpandedChange(Array.from(next));
8583
+ },
8584
+ [onExpandedChange]
8585
+ );
8586
+ const toggleTreeExpand = (id) => {
8587
+ const next = new Set(treeExpandedIds);
8588
+ if (next.has(id)) {
8589
+ next.delete(id);
8590
+ } else {
8591
+ next.add(id);
8592
+ }
8593
+ setExpandedIds(next);
8594
+ };
8595
+ const toggleGroup = (id) => {
8596
+ setCollapsedGroupIds((current) => {
8597
+ const next = new Set(current);
8598
+ if (next.has(id)) {
8599
+ next.delete(id);
8600
+ } else {
8601
+ next.add(id);
8602
+ }
8603
+ return next;
8604
+ });
8605
+ };
8606
+ const toggleDetail = (id) => {
8607
+ if (detailExpandedIds) {
8608
+ return;
8609
+ }
8610
+ setUncontrolledDetailIds((current) => {
8611
+ const next = new Set(current);
8612
+ if (next.has(id)) {
8613
+ next.delete(id);
8614
+ } else {
8615
+ next.add(id);
8616
+ }
8617
+ return next;
8618
+ });
8619
+ };
8316
8620
  const resetWrapMinHeight = (0, import_react37.useCallback)(() => {
8317
8621
  if (wrapRef.current) {
8318
8622
  wrapRef.current.style.minHeight = "";
@@ -8323,7 +8627,7 @@ function DataGrid({
8323
8627
  resetWrapMinHeight();
8324
8628
  setOpenMenu(null);
8325
8629
  }, [resetWrapMinHeight]);
8326
- const activeMenuFilter = openMenu ? (_a2 = filters[openMenu.key]) != null ? _a2 : "" : "";
8630
+ const activeMenuFilter = openMenu ? (_c2 = filters[openMenu.key]) != null ? _c2 : "" : "";
8327
8631
  const applyMenuPosition = (0, import_react37.useCallback)(() => {
8328
8632
  const anchor = menuAnchorRef.current;
8329
8633
  const menu = menuRef.current;
@@ -8436,6 +8740,26 @@ function DataGrid({
8436
8740
  }
8437
8741
  scheduleMenuPosition();
8438
8742
  }, [columnWidths, openMenu, scheduleMenuPosition]);
8743
+ (0, import_react37.useEffect)(() => {
8744
+ if (!onLoadMore || !hasMore) {
8745
+ return;
8746
+ }
8747
+ const root = wrapRef.current;
8748
+ const target = sentinelRef.current;
8749
+ if (!root || !target) {
8750
+ return;
8751
+ }
8752
+ const observer = new IntersectionObserver(
8753
+ (entries) => {
8754
+ if (entries.some((entry) => entry.isIntersecting) && !loadingMore) {
8755
+ onLoadMore();
8756
+ }
8757
+ },
8758
+ { root, rootMargin: "120px" }
8759
+ );
8760
+ observer.observe(target);
8761
+ return () => observer.disconnect();
8762
+ }, [displayRows.length, hasMore, loadingMore, onLoadMore]);
8439
8763
  const toggleSort = (key) => {
8440
8764
  var _a3;
8441
8765
  if (!((_a3 = columnFeatures[key]) == null ? void 0 : _a3.sortable)) {
@@ -8537,10 +8861,108 @@ function DataGrid({
8537
8861
  }
8538
8862
  beginResize(event, columnKey, width);
8539
8863
  }, [beginResize, columnFeatures]);
8864
+ const colSpan = gridColumns.length;
8865
+ const virtualWindow = (0, import_react37.useMemo)(() => {
8866
+ if (!virtualized) {
8867
+ return {
8868
+ offset: 0,
8869
+ items: displayRows,
8870
+ paddingTop: 0,
8871
+ paddingBottom: 0
8872
+ };
8873
+ }
8874
+ const start = Math.max(0, Math.floor(scrollTop / resolvedRowHeight) - OVERSCAN);
8875
+ const visibleCount = Math.ceil(viewportHeight / resolvedRowHeight) + OVERSCAN * 2;
8876
+ const end = Math.min(displayRows.length, start + visibleCount);
8877
+ const items = displayRows.slice(start, end);
8878
+ return {
8879
+ offset: start,
8880
+ items,
8881
+ paddingTop: start * resolvedRowHeight,
8882
+ paddingBottom: Math.max(0, (displayRows.length - end) * resolvedRowHeight)
8883
+ };
8884
+ }, [displayRows, resolvedRowHeight, scrollTop, viewportHeight, virtualized]);
8885
+ const renderDataRow = (entry) => {
8886
+ var _a3;
8887
+ const { row, depth, expandable, expanded, hasChildren } = entry;
8888
+ const detailOpen = masterDetail && detailIds.has(row.id);
8889
+ const showTreeToggle = layout === "tree" && expandable;
8890
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_react37.Fragment, { children: [
8891
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("tr", { "data-row-kind": "data", children: [
8892
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8893
+ "th",
8894
+ {
8895
+ className: DataGrid_default.rowHeader,
8896
+ scope: "row",
8897
+ style: columnWidths.team ? { width: columnWidths.team, minWidth: columnWidths.team } : void 0,
8898
+ children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("span", { className: DataGrid_default.rowHeaderInner, style: { paddingLeft: depth * 14 }, children: [
8899
+ masterDetail ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8900
+ "button",
8901
+ {
8902
+ "aria-expanded": detailOpen,
8903
+ "aria-label": detailOpen ? `Hide details for ${rowTeamValue(row)}` : `Show details for ${rowTeamValue(row)}`,
8904
+ className: DataGrid_default.expandButton,
8905
+ onClick: () => toggleDetail(row.id),
8906
+ type: "button",
8907
+ children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_fontawesome6.FontAwesomeIcon, { className: DataGrid_default.chevron, icon: detailOpen ? import_free_solid_svg_icons6.faChevronDown : import_free_solid_svg_icons6.faChevronRight })
8908
+ }
8909
+ ) : null,
8910
+ showTreeToggle ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8911
+ "button",
8912
+ {
8913
+ "aria-expanded": expanded,
8914
+ "aria-label": expanded ? `Collapse ${rowTeamValue(row)}` : `Expand ${rowTeamValue(row)}`,
8915
+ className: DataGrid_default.expandButton,
8916
+ onClick: () => toggleTreeExpand(row.id),
8917
+ type: "button",
8918
+ children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_fontawesome6.FontAwesomeIcon, { className: DataGrid_default.chevron, icon: expanded ? import_free_solid_svg_icons6.faChevronDown : import_free_solid_svg_icons6.faChevronRight })
8919
+ }
8920
+ ) : layout === "tree" && !hasChildren ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { "aria-hidden": "true", className: DataGrid_default.expandSpacer }) : null,
8921
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: DataGrid_default.rowHeaderLabel, children: (_a3 = row.values.team) != null ? _a3 : row.label })
8922
+ ] })
8923
+ }
8924
+ ),
8925
+ dataColumns.map((column) => {
8926
+ var _a4;
8927
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8928
+ "td",
8929
+ {
8930
+ "data-align": (_a4 = column.align) != null ? _a4 : "left",
8931
+ "data-column-key": column.key,
8932
+ "data-column-resizable": columnFeatures[column.key].resizable,
8933
+ style: columnWidths[column.key] ? { width: columnWidths[column.key], minWidth: columnWidths[column.key] } : void 0,
8934
+ children: row.values[column.key]
8935
+ },
8936
+ column.key
8937
+ );
8938
+ })
8939
+ ] }),
8940
+ detailOpen && getDetailContent ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("tr", { className: DataGrid_default.detailRow, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("td", { className: DataGrid_default.detailCell, colSpan, children: getDetailContent(row) }) }, `${row.id}-detail`) : null
8941
+ ] }, row.id);
8942
+ };
8943
+ const renderDisplayRow = (entry, index) => {
8944
+ if (entry.kind === "group") {
8945
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("tr", { className: DataGrid_default.groupRow, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("td", { className: DataGrid_default.groupCell, colSpan, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
8946
+ "button",
8947
+ {
8948
+ "aria-expanded": entry.expanded,
8949
+ className: DataGrid_default.groupButton,
8950
+ onClick: () => toggleGroup(entry.id),
8951
+ type: "button",
8952
+ children: [
8953
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_fontawesome6.FontAwesomeIcon, { className: DataGrid_default.chevron, icon: entry.expanded ? import_free_solid_svg_icons6.faChevronDown : import_free_solid_svg_icons6.faChevronRight }),
8954
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { children: entry.label }),
8955
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: DataGrid_default.groupCount, children: entry.count })
8956
+ ]
8957
+ }
8958
+ ) }) }, entry.id);
8959
+ }
8960
+ return renderDataRow(entry);
8961
+ };
8540
8962
  return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: DataGrid_default.frame, children: [
8541
8963
  caption ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: DataGrid_default.caption, children: caption }) : null,
8542
8964
  /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: DataGrid_default.gridBody, children: [
8543
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8965
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
8544
8966
  "div",
8545
8967
  {
8546
8968
  ref: wrapRef,
@@ -8554,114 +8976,98 @@ function DataGrid({
8554
8976
  "data-sticky-column": stickyFirstColumn,
8555
8977
  "data-sticky-header": stickyHeader,
8556
8978
  "data-striped": striped,
8557
- children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("table", { className: DataGrid_default.grid, children: [
8558
- caption ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("caption", { className: DataGrid_default.visuallyHidden, children: caption }) : null,
8559
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("colgroup", { children: gridColumns.map((column) => {
8560
- var _a3;
8561
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8562
- "col",
8563
- {
8564
- style: { width: (_a3 = columnWidths[column.key]) != null ? _a3 : column.key === "team" ? 180 : 130 }
8565
- },
8566
- column.key
8567
- );
8568
- }) }),
8569
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("tr", { children: gridColumns.map((column) => {
8570
- var _a3, _b3;
8571
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
8572
- "th",
8573
- {
8574
- "aria-sort": columnFeatures[column.key].sortable ? (sort == null ? void 0 : sort.key) === column.key ? sort.direction : "none" : void 0,
8575
- className: column.key === "team" ? DataGrid_default.corner : void 0,
8576
- "data-column-resizable": columnFeatures[column.key].resizable,
8577
- "data-filter-active": Boolean((_a3 = filters[column.key]) == null ? void 0 : _a3.trim()),
8578
- "data-menu-open": (openMenu == null ? void 0 : openMenu.key) === column.key,
8579
- scope: "col",
8580
- style: columnWidths[column.key] ? { width: columnWidths[column.key], minWidth: columnWidths[column.key] } : void 0,
8581
- children: [
8582
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8583
- HeaderContent,
8584
- {
8585
- filterActive: Boolean((_b3 = filters[column.key]) == null ? void 0 : _b3.trim()),
8586
- filterable: columnFeatures[column.key].filterable,
8587
- label: column.label,
8588
- menuId: column.key,
8589
- sortDirection: (sort == null ? void 0 : sort.key) === column.key ? sort.direction : void 0,
8590
- sortable: columnFeatures[column.key].sortable,
8591
- menuOpen: (openMenu == null ? void 0 : openMenu.key) === column.key,
8592
- onMenuToggle: (button) => {
8593
- if ((openMenu == null ? void 0 : openMenu.key) === column.key) {
8594
- closeHeaderMenu();
8595
- return;
8596
- }
8597
- openHeaderMenu({
8598
- align: column.key === "team" ? "left" : "right",
8599
- button,
8600
- key: column.key,
8601
- label: column.label
8602
- });
8603
- },
8604
- onSort: () => toggleSort(column.key)
8605
- }
8606
- ),
8607
- columnFeatures[column.key].resizable ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8608
- ColumnResizeHandle,
8609
- {
8610
- onResizeStart: (event) => beginResize(event, column.key)
8611
- }
8612
- ) : null
8613
- ]
8614
- },
8615
- column.key
8616
- );
8617
- }) }) }),
8618
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("tbody", { onPointerDown: handleBodyPointerDown, children: [
8619
- visibleRows.map((row) => {
8979
+ onScroll: (event) => {
8980
+ if (virtualized) {
8981
+ setScrollTop(event.currentTarget.scrollTop);
8982
+ }
8983
+ },
8984
+ style: { maxHeight: viewportHeight },
8985
+ children: [
8986
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("table", { className: DataGrid_default.grid, children: [
8987
+ caption ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("caption", { className: DataGrid_default.visuallyHidden, children: caption }) : null,
8988
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("colgroup", { children: gridColumns.map((column) => {
8620
8989
  var _a3;
8621
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("tr", { children: [
8622
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8623
- "th",
8624
- {
8625
- className: DataGrid_default.rowHeader,
8626
- scope: "row",
8627
- style: columnWidths.team ? { width: columnWidths.team, minWidth: columnWidths.team } : void 0,
8628
- children: (_a3 = row.values.team) != null ? _a3 : row.label
8629
- }
8630
- ),
8631
- dataColumns.map((column) => {
8632
- var _a4;
8633
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8634
- "td",
8635
- {
8636
- "data-align": (_a4 = column.align) != null ? _a4 : "left",
8637
- "data-column-key": column.key,
8638
- "data-column-resizable": columnFeatures[column.key].resizable,
8639
- style: columnWidths[column.key] ? { width: columnWidths[column.key], minWidth: columnWidths[column.key] } : void 0,
8640
- children: row.values[column.key]
8641
- },
8642
- column.key
8643
- );
8644
- })
8645
- ] }, row.id);
8646
- }),
8647
- !visibleRows.length ? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("tr", { children: [
8648
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("th", { className: DataGrid_default.rowHeader, scope: "row", children: "No rows" }),
8649
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("td", { className: DataGrid_default.empty, colSpan: Math.max(dataColumns.length, 1), children: "No matching rows." })
8650
- ] }) : null
8651
- ] })
8652
- ] })
8990
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8991
+ "col",
8992
+ {
8993
+ style: { width: (_a3 = columnWidths[column.key]) != null ? _a3 : column.key === "team" ? 180 : 130 }
8994
+ },
8995
+ column.key
8996
+ );
8997
+ }) }),
8998
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("tr", { children: gridColumns.map((column) => {
8999
+ var _a3, _b3;
9000
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
9001
+ "th",
9002
+ {
9003
+ "aria-sort": columnFeatures[column.key].sortable ? (sort == null ? void 0 : sort.key) === column.key ? sort.direction : "none" : void 0,
9004
+ className: column.key === "team" ? DataGrid_default.corner : void 0,
9005
+ "data-column-resizable": columnFeatures[column.key].resizable,
9006
+ "data-filter-active": Boolean((_a3 = filters[column.key]) == null ? void 0 : _a3.trim()),
9007
+ "data-menu-open": (openMenu == null ? void 0 : openMenu.key) === column.key,
9008
+ scope: "col",
9009
+ style: columnWidths[column.key] ? { width: columnWidths[column.key], minWidth: columnWidths[column.key] } : void 0,
9010
+ children: [
9011
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
9012
+ HeaderContent,
9013
+ {
9014
+ filterActive: Boolean((_b3 = filters[column.key]) == null ? void 0 : _b3.trim()),
9015
+ filterable: columnFeatures[column.key].filterable,
9016
+ label: column.label,
9017
+ menuId: column.key,
9018
+ sortDirection: (sort == null ? void 0 : sort.key) === column.key ? sort.direction : void 0,
9019
+ sortable: columnFeatures[column.key].sortable,
9020
+ menuOpen: (openMenu == null ? void 0 : openMenu.key) === column.key,
9021
+ onMenuToggle: (button) => {
9022
+ if ((openMenu == null ? void 0 : openMenu.key) === column.key) {
9023
+ closeHeaderMenu();
9024
+ return;
9025
+ }
9026
+ openHeaderMenu({
9027
+ align: column.key === "team" ? "left" : "right",
9028
+ button,
9029
+ key: column.key,
9030
+ label: column.label
9031
+ });
9032
+ },
9033
+ onSort: () => toggleSort(column.key)
9034
+ }
9035
+ ),
9036
+ columnFeatures[column.key].resizable ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
9037
+ ColumnResizeHandle,
9038
+ {
9039
+ onResizeStart: (event) => beginResize(event, column.key)
9040
+ }
9041
+ ) : null
9042
+ ]
9043
+ },
9044
+ column.key
9045
+ );
9046
+ }) }) }),
9047
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("tbody", { onPointerDown: handleBodyPointerDown, children: [
9048
+ virtualized && virtualWindow.paddingTop > 0 ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("tr", { "aria-hidden": "true", className: DataGrid_default.spacerRow, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("td", { colSpan, style: { height: virtualWindow.paddingTop, padding: 0 } }) }) : null,
9049
+ virtualWindow.items.map((entry, index) => renderDisplayRow(entry, virtualWindow.offset + index)),
9050
+ virtualized && virtualWindow.paddingBottom > 0 ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("tr", { "aria-hidden": "true", className: DataGrid_default.spacerRow, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("td", { colSpan, style: { height: virtualWindow.paddingBottom, padding: 0 } }) }) : null,
9051
+ !displayRows.length ? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("tr", { children: [
9052
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("th", { className: DataGrid_default.rowHeader, scope: "row", children: "No rows" }),
9053
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("td", { className: DataGrid_default.empty, colSpan: Math.max(dataColumns.length, 1), children: "No matching rows." })
9054
+ ] }) : null
9055
+ ] })
9056
+ ] }),
9057
+ onLoadMore || hasMore ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: DataGrid_default.infiniteFooter, ref: sentinelRef, children: loadingMore ? "Loading more\u2026" : hasMore ? "Scroll for more" : "End of results" }) : null
9058
+ ]
8653
9059
  }
8654
9060
  ),
8655
9061
  openMenu ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: DataGrid_default.menuHost, ref: menuHostRef, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
8656
9062
  GridHeaderMenu,
8657
9063
  {
8658
9064
  ref: menuRef,
8659
- filter: (_b2 = filters[openMenu.key]) != null ? _b2 : "",
8660
- filterable: (_c2 = openMenuFeatures == null ? void 0 : openMenuFeatures.filterable) != null ? _c2 : false,
9065
+ filter: (_d2 = filters[openMenu.key]) != null ? _d2 : "",
9066
+ filterable: (_e2 = openMenuFeatures == null ? void 0 : openMenuFeatures.filterable) != null ? _e2 : false,
8661
9067
  label: openMenu.label,
8662
9068
  menuId: openMenu.menuId,
8663
9069
  sortDirection: (sort == null ? void 0 : sort.key) === openMenu.key ? sort.direction : void 0,
8664
- sortable: (_d2 = openMenuFeatures == null ? void 0 : openMenuFeatures.sortable) != null ? _d2 : false,
9070
+ sortable: (_f2 = openMenuFeatures == null ? void 0 : openMenuFeatures.sortable) != null ? _f2 : false,
8665
9071
  onFilterChange: (filter) => setFilters((current) => __spreadProps(__spreadValues({}, current), { [openMenu.key]: filter })),
8666
9072
  onMenuClose: closeHeaderMenu,
8667
9073
  onSortDirection: (direction) => setSortDirection(openMenu.key, direction)
@@ -8953,6 +9359,12 @@ var chartDemoData = [
8953
9359
  { label: "May", value: 58, values: [58, 56, 36], x: 74, y: 58 },
8954
9360
  { label: "Jun", value: 88, values: [88, 62, 42], x: 88, y: 92 }
8955
9361
  ];
9362
+ var chartContourData = Array.from({ length: 36 }, (_, index) => {
9363
+ const x = index % 6;
9364
+ const y = Math.floor(index / 6);
9365
+ const value = 35 + Math.round(45 * Math.exp(-((x - 2.4) ** 2 + (y - 2.8) ** 2) / 4));
9366
+ return { label: `${x},${y}`, value, x, y };
9367
+ });
8956
9368
  function branchLeaves(prefix, parent, group, count = 5) {
8957
9369
  return Array.from({ length: count }, (_, index) => ({
8958
9370
  label: `${prefix}${index + 1}`,
@@ -10031,6 +10443,15 @@ var specializedChartVariants = /* @__PURE__ */ new Set([
10031
10443
  "sankey",
10032
10444
  "waterfall",
10033
10445
  "candlestick",
10446
+ "ohlc",
10447
+ "range-area",
10448
+ "range-bar",
10449
+ "error-bar",
10450
+ "parallel-coordinates",
10451
+ "contour",
10452
+ "surface",
10453
+ "bullet",
10454
+ "pareto",
10034
10455
  "box-plot",
10035
10456
  "histogram",
10036
10457
  "violin",
@@ -10057,6 +10478,12 @@ var cartesianSpecializedVariants = [
10057
10478
  "histogram",
10058
10479
  "waterfall",
10059
10480
  "candlestick",
10481
+ "ohlc",
10482
+ "range-area",
10483
+ "range-bar",
10484
+ "error-bar",
10485
+ "bullet",
10486
+ "pareto",
10060
10487
  "box-plot",
10061
10488
  "violin",
10062
10489
  "hexbin",
@@ -10068,15 +10495,30 @@ var cartesianSpecializedVariants = [
10068
10495
  "milestone-timeline"
10069
10496
  ];
10070
10497
  function specializedVariantHasYNumericAxis(variant) {
10071
- return !["timeline", "milestone-timeline", "gantt", "heatmap", "calendar-heatmap", "ridgeline", "hexbin"].includes(
10072
- variant
10073
- );
10498
+ return ![
10499
+ "timeline",
10500
+ "milestone-timeline",
10501
+ "gantt",
10502
+ "heatmap",
10503
+ "calendar-heatmap",
10504
+ "ridgeline",
10505
+ "hexbin",
10506
+ "contour",
10507
+ "surface",
10508
+ "parallel-coordinates"
10509
+ ].includes(variant);
10074
10510
  }
10075
10511
  function specializedVariantHasXCategoryLabels(variant) {
10076
10512
  return [
10077
10513
  "histogram",
10078
10514
  "waterfall",
10079
10515
  "candlestick",
10516
+ "ohlc",
10517
+ "range-area",
10518
+ "range-bar",
10519
+ "error-bar",
10520
+ "bullet",
10521
+ "pareto",
10080
10522
  "box-plot",
10081
10523
  "violin",
10082
10524
  "stream",
@@ -10087,7 +10529,7 @@ function specializedVariantHasXCategoryLabels(variant) {
10087
10529
  ].includes(variant);
10088
10530
  }
10089
10531
  function specializedVariantUsesSlotLabels(variant) {
10090
- return ["waterfall"].includes(variant);
10532
+ return ["waterfall", "range-area", "bullet"].includes(variant);
10091
10533
  }
10092
10534
  function getSeriesPlotBounds(plot) {
10093
10535
  return {
@@ -10355,59 +10797,445 @@ function Candlestick({ data, plot, showValues, styles, yMax, yMin }) {
10355
10797
  })
10356
10798
  ] });
10357
10799
  }
10358
- function BoxPlot({ data, plot, showValues, styles, yMax, yMin }) {
10359
- const barHalfWidth = getBoxPlotBarHalfWidth(plot, data.length);
10360
- const boxWidth = barHalfWidth * 2;
10800
+ function OhlcChart({ data, plot, showValues, styles, yMax, yMin }) {
10801
+ const bodyWidth = candlestickBodyWidth(plot, data.length);
10802
+ const barHalfWidth = bodyWidth / 2;
10803
+ const tick = Math.max(4, bodyWidth * 0.45);
10361
10804
  return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("g", { children: data.map((item, index) => {
10362
- var _a2, _b2, _c2, _d2, _e2;
10363
- const min = (_a2 = item.min) != null ? _a2 : item.value * 0.6;
10364
- const q1 = (_b2 = item.q1) != null ? _b2 : item.value * 0.78;
10365
- const median = (_c2 = item.median) != null ? _c2 : item.value;
10366
- const q3 = (_d2 = item.q3) != null ? _d2 : item.value * 1.18;
10367
- const maxV = (_e2 = item.max) != null ? _e2 : item.value * 1.35;
10805
+ var _a2, _b2, _c2, _d2;
10806
+ const open = (_a2 = item.open) != null ? _a2 : item.value * 0.9;
10807
+ const close = (_b2 = item.close) != null ? _b2 : item.value;
10808
+ const high = (_c2 = item.high) != null ? _c2 : item.value * 1.08;
10809
+ const low = (_d2 = item.low) != null ? _d2 : item.value * 0.82;
10368
10810
  const x = xForEdgeBarIndex(plot, index, data.length, barHalfWidth);
10369
- const seriesClass = chartClass(styles, index % paletteClasses.length);
10811
+ const bullish = close >= open;
10812
+ const openY = yForDomain(open, yMin, yMax, plot);
10813
+ const closeY = yForDomain(close, yMin, yMax, plot);
10814
+ const seriesClass = chartClass(styles, bullish ? 1 : 3);
10370
10815
  return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
10371
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x, x2: x, y1: yForDomain(min, yMin, yMax, plot), y2: yForDomain(maxV, yMin, yMax, plot) }),
10372
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x - boxWidth / 2, x2: x + boxWidth / 2, y1: yForDomain(min, yMin, yMax, plot), y2: yForDomain(min, yMin, yMax, plot) }),
10373
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x - boxWidth / 2, x2: x + boxWidth / 2, y1: yForDomain(maxV, yMin, yMax, plot), y2: yForDomain(maxV, yMin, yMax, plot) }),
10374
10816
  /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10375
- "rect",
10817
+ "line",
10376
10818
  {
10377
- className: `${styles.area} ${seriesClass}`,
10378
- height: yForDomain(q1, yMin, yMax, plot) - yForDomain(q3, yMin, yMax, plot),
10379
- width: boxWidth,
10380
- x: x - boxWidth / 2,
10381
- y: yForDomain(q3, yMin, yMax, plot)
10819
+ className: `${styles.wick} ${seriesClass}`,
10820
+ x1: x,
10821
+ x2: x,
10822
+ y1: yForDomain(high, yMin, yMax, plot),
10823
+ y2: yForDomain(low, yMin, yMax, plot)
10382
10824
  }
10383
10825
  ),
10384
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, strokeWidth: "2", x1: x - boxWidth / 2, x2: x + boxWidth / 2, y1: yForDomain(median, yMin, yMax, plot), y2: yForDomain(median, yMin, yMax, plot) }),
10385
- showValues ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.valueLabel, textAnchor: "middle", x, y: yForDomain(maxV, yMin, yMax, plot) - 6, children: formatValue(median) }) : null
10826
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x - tick, x2: x, y1: openY, y2: openY }),
10827
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x, x2: x + tick, y1: closeY, y2: closeY }),
10828
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.valueLabel, textAnchor: "middle", x, y: yForDomain(high, yMin, yMax, plot) - 6, children: formatValue(close) }) : null
10386
10829
  ] }, item.label);
10387
10830
  }) });
10388
10831
  }
10389
- function truncateLabel(label, maxChars) {
10390
- if (maxChars < 4) {
10391
- return "";
10392
- }
10393
- if (label.length <= maxChars) {
10394
- return label;
10832
+ function RangeAreaChart({ data, plot, showValues, styles, yMax, yMin }) {
10833
+ if (!data.length) {
10834
+ return null;
10395
10835
  }
10396
- return `${label.slice(0, maxChars - 1)}\u2026`;
10836
+ const points = data.map((item, index) => {
10837
+ var _a2, _b2, _c2, _d2;
10838
+ const low = (_b2 = (_a2 = item.low) != null ? _a2 : item.min) != null ? _b2 : item.value * 0.75;
10839
+ const high = (_d2 = (_c2 = item.high) != null ? _c2 : item.max) != null ? _d2 : item.value * 1.25;
10840
+ const mid = item.value;
10841
+ const x = xForSeriesCategoryIndex(plot, index, data.length);
10842
+ return {
10843
+ x,
10844
+ lowY: yForDomain(low, yMin, yMax, plot),
10845
+ midY: yForDomain(mid, yMin, yMax, plot),
10846
+ highY: yForDomain(high, yMin, yMax, plot),
10847
+ label: item.label,
10848
+ mid
10849
+ };
10850
+ });
10851
+ const band = [
10852
+ ...points.map((point) => `${point.x},${point.highY}`),
10853
+ ...[...points].reverse().map((point) => `${point.x},${point.lowY}`)
10854
+ ].join(" ");
10855
+ const midLine = points.map((point) => `${point.x},${point.midY}`).join(" ");
10856
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
10857
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("polygon", { className: `${styles.area} ${chartClass(styles, 0)}`, points: band }),
10858
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("polyline", { className: `${styles.line} ${chartClass(styles, 1)}`, fill: "none", points: midLine }),
10859
+ showValues ? points.map((point) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.valueLabel, textAnchor: "middle", x: point.x, y: point.highY - 6, children: formatValue(point.mid) }, point.label)) : null
10860
+ ] });
10397
10861
  }
10398
- function Treemap({ data, plot, showValues, styles }) {
10399
- const gap = 2;
10400
- const labelHeight = 18;
10401
- const items = data.map((item, index) => ({
10402
- group: item.group,
10403
- index,
10404
- label: item.label,
10405
- value: Math.max(0, item.value)
10406
- }));
10407
- const layout = layoutGroupedTreemap(
10408
- items,
10409
- plot.gridLeft,
10410
- plot.top + labelHeight,
10862
+ function RangeBarChart({ data, plot, showValues, styles, yMax, yMin }) {
10863
+ const bodyWidth = candlestickBodyWidth(plot, data.length);
10864
+ const barHalfWidth = bodyWidth / 2;
10865
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("g", { children: data.map((item, index) => {
10866
+ var _a2, _b2, _c2, _d2;
10867
+ const low = (_b2 = (_a2 = item.low) != null ? _a2 : item.min) != null ? _b2 : item.value * 0.75;
10868
+ const high = (_d2 = (_c2 = item.high) != null ? _c2 : item.max) != null ? _d2 : item.value * 1.25;
10869
+ const x = xForEdgeBarIndex(plot, index, data.length, barHalfWidth);
10870
+ const top = yForDomain(high, yMin, yMax, plot);
10871
+ const bottom = yForDomain(low, yMin, yMax, plot);
10872
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
10873
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10874
+ "rect",
10875
+ {
10876
+ className: `${styles.bar} ${chartClass(styles, index % paletteClasses.length)}`,
10877
+ height: Math.max(4, bottom - top),
10878
+ rx: "3",
10879
+ width: bodyWidth,
10880
+ x: x - bodyWidth / 2,
10881
+ y: top
10882
+ }
10883
+ ),
10884
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.valueLabel, textAnchor: "middle", x, y: top - 6, children: formatValue(high) }) : null
10885
+ ] }, item.label);
10886
+ }) });
10887
+ }
10888
+ function ErrorBarChart({ data, plot, showValues, styles, yMax, yMin }) {
10889
+ const bodyWidth = Math.min(18, candlestickBodyWidth(plot, data.length));
10890
+ const barHalfWidth = bodyWidth / 2;
10891
+ const cap = Math.max(4, bodyWidth * 0.55);
10892
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("g", { children: data.map((item, index) => {
10893
+ var _a2, _b2, _c2;
10894
+ const error = (_a2 = item.error) != null ? _a2 : item.value * 0.12;
10895
+ const low = (_b2 = item.low) != null ? _b2 : item.value - error;
10896
+ const high = (_c2 = item.high) != null ? _c2 : item.value + error;
10897
+ const x = xForEdgeBarIndex(plot, index, data.length, barHalfWidth);
10898
+ const valueY = yForDomain(item.value, yMin, yMax, plot);
10899
+ const highY = yForDomain(high, yMin, yMax, plot);
10900
+ const lowY = yForDomain(low, yMin, yMax, plot);
10901
+ const seriesClass = chartClass(styles, index % paletteClasses.length);
10902
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
10903
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10904
+ "rect",
10905
+ {
10906
+ className: `${styles.bar} ${seriesClass}`,
10907
+ height: Math.max(4, plot.bottom - valueY),
10908
+ rx: "2",
10909
+ width: bodyWidth,
10910
+ x: x - bodyWidth / 2,
10911
+ y: valueY
10912
+ }
10913
+ ),
10914
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x, x2: x, y1: highY, y2: lowY }),
10915
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x - cap, x2: x + cap, y1: highY, y2: highY }),
10916
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x - cap, x2: x + cap, y1: lowY, y2: lowY }),
10917
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.valueLabel, textAnchor: "middle", x, y: highY - 6, children: formatValue(item.value) }) : null
10918
+ ] }, item.label);
10919
+ }) });
10920
+ }
10921
+ function ParallelCoordinates({ data, plot, showValues, styles }) {
10922
+ const dims = Math.max(2, ...data.map((item) => {
10923
+ var _a2, _b2;
10924
+ return (_b2 = (_a2 = item.values) == null ? void 0 : _a2.length) != null ? _b2 : 0;
10925
+ }));
10926
+ if (!data.length || dims < 2) {
10927
+ return null;
10928
+ }
10929
+ const axes = Array.from({ length: dims }, (_, dim) => {
10930
+ const values = data.map((item) => {
10931
+ var _a2, _b2;
10932
+ return (_b2 = (_a2 = item.values) == null ? void 0 : _a2[dim]) != null ? _b2 : item.value;
10933
+ });
10934
+ const min = Math.min(...values);
10935
+ const max = Math.max(...values);
10936
+ return { min, max: max === min ? min + 1 : max };
10937
+ });
10938
+ const xAt = (dim) => dims <= 1 ? (plot.gridLeft + plot.gridRight) / 2 : plot.gridLeft + dim * (plot.gridRight - plot.gridLeft) / (dims - 1);
10939
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
10940
+ axes.map((axis, dim) => {
10941
+ const x = xAt(dim);
10942
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
10943
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: styles.gridLine, x1: x, x2: x, y1: plot.top, y2: plot.bottom }),
10944
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("text", { className: styles.axisLabel, textAnchor: "middle", x, y: plot.bottom + 16, children: [
10945
+ "D",
10946
+ dim + 1
10947
+ ] }),
10948
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.axisLabel, textAnchor: "middle", x, y: plot.top - 8, children: formatValue(axis.max) })
10949
+ ] }, `axis-${dim}`);
10950
+ }),
10951
+ data.map((item, index) => {
10952
+ var _a2, _b2;
10953
+ const points = Array.from({ length: dims }, (_, dim) => {
10954
+ var _a3, _b3;
10955
+ const value = (_b3 = (_a3 = item.values) == null ? void 0 : _a3[dim]) != null ? _b3 : item.value;
10956
+ const axis = axes[dim];
10957
+ const y = plot.bottom - (value - axis.min) / (axis.max - axis.min) * (plot.bottom - plot.top);
10958
+ return `${xAt(dim)},${y}`;
10959
+ }).join(" ");
10960
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
10961
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("polyline", { className: `${styles.line} ${chartClass(styles, index % paletteClasses.length)}`, fill: "none", points }),
10962
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10963
+ "text",
10964
+ {
10965
+ className: styles.valueLabel,
10966
+ textAnchor: "start",
10967
+ x: xAt(dims - 1) + 6,
10968
+ y: plot.bottom - (((_b2 = (_a2 = item.values) == null ? void 0 : _a2[dims - 1]) != null ? _b2 : item.value) - axes[dims - 1].min) / (axes[dims - 1].max - axes[dims - 1].min) * (plot.bottom - plot.top),
10969
+ children: item.label
10970
+ }
10971
+ ) : null
10972
+ ] }, item.label);
10973
+ })
10974
+ ] });
10975
+ }
10976
+ function ContourPlot({ data, plot, showValues, styles }) {
10977
+ const cols = Math.max(4, Math.ceil(Math.sqrt(Math.max(data.length, 1))));
10978
+ const rows = Math.max(3, Math.ceil(data.length / cols));
10979
+ const values = data.length ? data.map((item) => item.value) : Array.from({ length: cols * rows }, (_, index) => 20 + index * 17 % 80);
10980
+ const min = Math.min(...values);
10981
+ const max = Math.max(...values);
10982
+ const cellW = (plot.gridRight - plot.gridLeft) / cols;
10983
+ const cellH = (plot.bottom - plot.top) / rows;
10984
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
10985
+ Array.from({ length: rows * cols }, (_, index) => {
10986
+ const value = values[index % values.length];
10987
+ const col = index % cols;
10988
+ const row = Math.floor(index / cols);
10989
+ const intensity = (value - min) / Math.max(1, max - min);
10990
+ const band = Math.min(5, Math.floor(intensity * 6));
10991
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10992
+ "rect",
10993
+ {
10994
+ className: `${styles.area} ${chartClass(styles, band)}`,
10995
+ height: Math.max(2, cellH - 1),
10996
+ opacity: 0.35 + intensity * 0.55,
10997
+ rx: "2",
10998
+ width: Math.max(2, cellW - 1),
10999
+ x: plot.gridLeft + col * cellW,
11000
+ y: plot.top + row * cellH
11001
+ },
11002
+ `contour-${index}`
11003
+ );
11004
+ }),
11005
+ Array.from({ length: 4 }, (_, ring) => {
11006
+ const t = (ring + 1) / 5;
11007
+ const cx = plot.gridLeft + (plot.gridRight - plot.gridLeft) * 0.55;
11008
+ const cy = plot.top + (plot.bottom - plot.top) * 0.48;
11009
+ const rx = (plot.gridRight - plot.gridLeft) * (0.16 + t * 0.28);
11010
+ const ry = (plot.bottom - plot.top) * (0.14 + t * 0.24);
11011
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
11012
+ "ellipse",
11013
+ {
11014
+ className: `${styles.line} ${chartClass(styles, ring % paletteClasses.length)}`,
11015
+ cx,
11016
+ cy,
11017
+ fill: "none",
11018
+ rx,
11019
+ ry
11020
+ },
11021
+ `contour-ring-${ring}`
11022
+ );
11023
+ }),
11024
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
11025
+ "text",
11026
+ {
11027
+ className: styles.valueLabel,
11028
+ textAnchor: "middle",
11029
+ x: (plot.gridLeft + plot.gridRight) / 2,
11030
+ y: plot.top + 14,
11031
+ children: [
11032
+ formatValue(max),
11033
+ " peak"
11034
+ ]
11035
+ }
11036
+ ) : null
11037
+ ] });
11038
+ }
11039
+ function SurfacePlot({ data, plot, showValues, styles }) {
11040
+ const cols = 8;
11041
+ const rows = 6;
11042
+ const values = data.length ? data.map((item) => item.value) : Array.from({ length: cols * rows }, (_, index) => 30 + index * 13 % 70);
11043
+ const min = Math.min(...values);
11044
+ const max = Math.max(...values);
11045
+ const cellW = (plot.gridRight - plot.gridLeft) / cols;
11046
+ const cellH = (plot.bottom - plot.top) / rows;
11047
+ const project = (col, row, value) => {
11048
+ const intensity = (value - min) / Math.max(1, max - min);
11049
+ const x = plot.gridLeft + col * cellW + row * cellW * 0.18;
11050
+ const y = plot.top + row * cellH * 0.72 + (1 - intensity) * cellH * 0.55;
11051
+ return { x, y };
11052
+ };
11053
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
11054
+ Array.from(
11055
+ { length: rows - 1 },
11056
+ (_, row) => Array.from({ length: cols - 1 }, (_2, col) => {
11057
+ const i = row * cols + col;
11058
+ const v00 = values[i % values.length];
11059
+ const v10 = values[(i + 1) % values.length];
11060
+ const v01 = values[(i + cols) % values.length];
11061
+ const v11 = values[(i + cols + 1) % values.length];
11062
+ const p00 = project(col, row, v00);
11063
+ const p10 = project(col + 1, row, v10);
11064
+ const p01 = project(col, row + 1, v01);
11065
+ const p11 = project(col + 1, row + 1, v11);
11066
+ const avg = (v00 + v10 + v01 + v11) / 4;
11067
+ const band = Math.min(5, Math.floor((avg - min) / Math.max(1, max - min) * 6));
11068
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
11069
+ "polygon",
11070
+ {
11071
+ className: `${styles.area} ${chartClass(styles, band)}`,
11072
+ opacity: 0.55 + (avg - min) / Math.max(1, max - min) * 0.35,
11073
+ points: `${p00.x},${p00.y} ${p10.x},${p10.y} ${p11.x},${p11.y} ${p01.x},${p01.y}`
11074
+ },
11075
+ `surface-${row}-${col}`
11076
+ );
11077
+ })
11078
+ ),
11079
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
11080
+ "text",
11081
+ {
11082
+ className: styles.valueLabel,
11083
+ textAnchor: "middle",
11084
+ x: (plot.gridLeft + plot.gridRight) / 2,
11085
+ y: plot.top + 14,
11086
+ children: "Surface 2D projection"
11087
+ }
11088
+ ) : null
11089
+ ] });
11090
+ }
11091
+ function BulletChart({ data, plot, showValues, styles, yMax, yMin }) {
11092
+ const laneHeight = Math.min(28, (plot.bottom - plot.top) / Math.max(data.length, 1) * 0.62);
11093
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("g", { children: data.map((item, index) => {
11094
+ var _a2, _b2, _c2, _d2;
11095
+ const slot = (plot.bottom - plot.top) / Math.max(data.length, 1);
11096
+ const y = plot.top + index * slot + (slot - laneHeight) / 2;
11097
+ const max = Math.max((_a2 = item.max) != null ? _a2 : yMax, (_b2 = item.target) != null ? _b2 : item.value, item.value, 1);
11098
+ const scale = (value) => plot.gridLeft + (value - yMin) / Math.max(1, max - yMin) * (plot.gridRight - plot.gridLeft);
11099
+ const actual = scale(item.value);
11100
+ const target = scale((_c2 = item.target) != null ? _c2 : item.value * 0.85);
11101
+ const qualitative = scale((_d2 = item.max) != null ? _d2 : max);
11102
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
11103
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
11104
+ "rect",
11105
+ {
11106
+ className: `${styles.area} ${chartClass(styles, 5)}`,
11107
+ height: laneHeight,
11108
+ rx: "4",
11109
+ width: Math.max(4, qualitative - plot.gridLeft),
11110
+ x: plot.gridLeft,
11111
+ y
11112
+ }
11113
+ ),
11114
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
11115
+ "rect",
11116
+ {
11117
+ className: `${styles.bar} ${chartClass(styles, 0)}`,
11118
+ height: laneHeight * 0.45,
11119
+ rx: "2",
11120
+ width: Math.max(4, actual - plot.gridLeft),
11121
+ x: plot.gridLeft,
11122
+ y: y + laneHeight * 0.275
11123
+ }
11124
+ ),
11125
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
11126
+ "line",
11127
+ {
11128
+ className: `${styles.wick} ${chartClass(styles, 3)}`,
11129
+ strokeWidth: "3",
11130
+ x1: target,
11131
+ x2: target,
11132
+ y1: y,
11133
+ y2: y + laneHeight
11134
+ }
11135
+ ),
11136
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.axisLabel, dominantBaseline: "middle", x: plot.gridLeft - 8, y: y + laneHeight / 2, textAnchor: "end", children: item.label }),
11137
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.valueLabel, x: actual + 6, y: y + laneHeight / 2 + 4, children: formatValue(item.value) }) : null
11138
+ ] }, item.label);
11139
+ }) });
11140
+ }
11141
+ function ParetoChart({ data, plot, showValues, styles }) {
11142
+ const sorted = [...data].sort((a, b) => b.value - a.value);
11143
+ const total = sorted.reduce((sum, item) => sum + Math.max(0, item.value), 0) || 1;
11144
+ const valueMax = Math.max(1, ...sorted.map((item) => item.value));
11145
+ let running = 0;
11146
+ const bodyWidth = candlestickBodyWidth(plot, sorted.length);
11147
+ const barHalfWidth = bodyWidth / 2;
11148
+ const points = sorted.map((item, index) => {
11149
+ running += Math.max(0, item.value);
11150
+ const cumulative = running / total * 100;
11151
+ const x = xForEdgeBarIndex(plot, index, sorted.length, barHalfWidth);
11152
+ return __spreadProps(__spreadValues({}, item), { cumulative, x });
11153
+ });
11154
+ const linePoints = points.map((item) => `${item.x},${yForDomain(item.cumulative, 0, 100, plot)}`).join(" ");
11155
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
11156
+ points.map((item) => {
11157
+ const top = yForDomain(item.value, 0, valueMax, plot);
11158
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
11159
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
11160
+ "rect",
11161
+ {
11162
+ className: `${styles.bar} ${chartClass(styles, 0)}`,
11163
+ height: Math.max(4, plot.bottom - top),
11164
+ rx: "2",
11165
+ width: bodyWidth,
11166
+ x: item.x - bodyWidth / 2,
11167
+ y: top
11168
+ }
11169
+ ),
11170
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.valueLabel, textAnchor: "middle", x: item.x, y: top - 6, children: formatValue(item.value) }) : null,
11171
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
11172
+ "circle",
11173
+ {
11174
+ className: `${styles.point} ${chartClass(styles, 1)}`,
11175
+ cx: item.x,
11176
+ cy: yForDomain(item.cumulative, 0, 100, plot),
11177
+ r: "3.5"
11178
+ }
11179
+ )
11180
+ ] }, item.label);
11181
+ }),
11182
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("polyline", { className: `${styles.line} ${chartClass(styles, 1)}`, fill: "none", points: linePoints }),
11183
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.axisLabel, textAnchor: "start", x: plot.gridRight + 6, y: plot.top + 4, children: "%" })
11184
+ ] });
11185
+ }
11186
+ function BoxPlot({ data, plot, showValues, styles, yMax, yMin }) {
11187
+ const barHalfWidth = getBoxPlotBarHalfWidth(plot, data.length);
11188
+ const boxWidth = barHalfWidth * 2;
11189
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("g", { children: data.map((item, index) => {
11190
+ var _a2, _b2, _c2, _d2, _e2;
11191
+ const min = (_a2 = item.min) != null ? _a2 : item.value * 0.6;
11192
+ const q1 = (_b2 = item.q1) != null ? _b2 : item.value * 0.78;
11193
+ const median = (_c2 = item.median) != null ? _c2 : item.value;
11194
+ const q3 = (_d2 = item.q3) != null ? _d2 : item.value * 1.18;
11195
+ const maxV = (_e2 = item.max) != null ? _e2 : item.value * 1.35;
11196
+ const x = xForEdgeBarIndex(plot, index, data.length, barHalfWidth);
11197
+ const seriesClass = chartClass(styles, index % paletteClasses.length);
11198
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { children: [
11199
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x, x2: x, y1: yForDomain(min, yMin, yMax, plot), y2: yForDomain(maxV, yMin, yMax, plot) }),
11200
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x - boxWidth / 2, x2: x + boxWidth / 2, y1: yForDomain(min, yMin, yMax, plot), y2: yForDomain(min, yMin, yMax, plot) }),
11201
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, x1: x - boxWidth / 2, x2: x + boxWidth / 2, y1: yForDomain(maxV, yMin, yMax, plot), y2: yForDomain(maxV, yMin, yMax, plot) }),
11202
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
11203
+ "rect",
11204
+ {
11205
+ className: `${styles.area} ${seriesClass}`,
11206
+ height: yForDomain(q1, yMin, yMax, plot) - yForDomain(q3, yMin, yMax, plot),
11207
+ width: boxWidth,
11208
+ x: x - boxWidth / 2,
11209
+ y: yForDomain(q3, yMin, yMax, plot)
11210
+ }
11211
+ ),
11212
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("line", { className: `${styles.wick} ${seriesClass}`, strokeWidth: "2", x1: x - boxWidth / 2, x2: x + boxWidth / 2, y1: yForDomain(median, yMin, yMax, plot), y2: yForDomain(median, yMin, yMax, plot) }),
11213
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { className: styles.valueLabel, textAnchor: "middle", x, y: yForDomain(maxV, yMin, yMax, plot) - 6, children: formatValue(median) }) : null
11214
+ ] }, item.label);
11215
+ }) });
11216
+ }
11217
+ function truncateLabel(label, maxChars) {
11218
+ if (maxChars < 4) {
11219
+ return "";
11220
+ }
11221
+ if (label.length <= maxChars) {
11222
+ return label;
11223
+ }
11224
+ return `${label.slice(0, maxChars - 1)}\u2026`;
11225
+ }
11226
+ function Treemap({ data, plot, showValues, styles }) {
11227
+ const gap = 2;
11228
+ const labelHeight = 18;
11229
+ const items = data.map((item, index) => ({
11230
+ group: item.group,
11231
+ index,
11232
+ label: item.label,
11233
+ value: Math.max(0, item.value)
11234
+ }));
11235
+ const layout = layoutGroupedTreemap(
11236
+ items,
11237
+ plot.gridLeft,
11238
+ plot.top + labelHeight,
10411
11239
  plot.gridRight - plot.gridLeft,
10412
11240
  plotSpan(plot) - labelHeight
10413
11241
  );
@@ -11084,6 +11912,24 @@ function SpecializedChart(props) {
11084
11912
  return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Waterfall, __spreadValues({}, props));
11085
11913
  case "candlestick":
11086
11914
  return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Candlestick, __spreadValues({}, props));
11915
+ case "ohlc":
11916
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(OhlcChart, __spreadValues({}, props));
11917
+ case "range-area":
11918
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(RangeAreaChart, __spreadValues({}, props));
11919
+ case "range-bar":
11920
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(RangeBarChart, __spreadValues({}, props));
11921
+ case "error-bar":
11922
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(ErrorBarChart, __spreadValues({}, props));
11923
+ case "parallel-coordinates":
11924
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(ParallelCoordinates, __spreadValues({}, props));
11925
+ case "contour":
11926
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(ContourPlot, __spreadValues({}, props));
11927
+ case "surface":
11928
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(SurfacePlot, __spreadValues({}, props));
11929
+ case "bullet":
11930
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(BulletChart, __spreadValues({}, props));
11931
+ case "pareto":
11932
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(ParetoChart, __spreadValues({}, props));
11087
11933
  case "box-plot":
11088
11934
  return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(BoxPlot, __spreadValues({}, props));
11089
11935
  case "treemap":
@@ -11128,7 +11974,7 @@ function SpecializedChart(props) {
11128
11974
  }
11129
11975
 
11130
11976
  // ../../components/Chart/Chart.module.css
11131
- var Chart_default = {"slice":"opus_L6guCK_slice","land":"opus_L6guCK_land","mapLand":"opus_L6guCK_mapLand","axisGuide":"opus_L6guCK_axisGuide","graphLink":"opus_L6guCK_graphLink","radarGrid":"opus_L6guCK_radarGrid","wick":"opus_L6guCK_wick","link":"opus_L6guCK_link","sankeyNode":"opus_L6guCK_sankeyNode","legendItem":"opus_L6guCK_legendItem","seriesE":"opus_L6guCK_seriesE","axisLabels":"opus_L6guCK_axisLabels","meta":"opus_L6guCK_meta","area":"opus_L6guCK_area","valueLabel":"opus_L6guCK_valueLabel","seriesF":"opus_L6guCK_seriesF","header":"opus_L6guCK_header","grid":"opus_L6guCK_grid","seriesB":"opus_L6guCK_seriesB","legend":"opus_L6guCK_legend","sankeyCenterLabel":"opus_L6guCK_sankeyCenterLabel","ring":"opus_L6guCK_ring","graphLinkColored":"opus_L6guCK_graphLinkColored","funnel":"opus_L6guCK_funnel","svg":"opus_L6guCK_svg","mapValue":"opus_L6guCK_mapValue","violin":"opus_L6guCK_violin","ridge":"opus_L6guCK_ridge","sankeySideName":"opus_L6guCK_sankeySideName","bar":"opus_L6guCK_bar","sankeySideValue":"opus_L6guCK_sankeySideValue","treemapLabel":"opus_L6guCK_treemapLabel","graphNode":"opus_L6guCK_graphNode","axisTick":"opus_L6guCK_axisTick","mapRegion":"opus_L6guCK_mapRegion","seriesD":"opus_L6guCK_seriesD","seriesA":"opus_L6guCK_seriesA","sankeySideLabel":"opus_L6guCK_sankeySideLabel","funnelText":"opus_L6guCK_funnelText","seriesC":"opus_L6guCK_seriesC","packParent":"opus_L6guCK_packParent","graphNodeRing":"opus_L6guCK_graphNodeRing","radarArea":"opus_L6guCK_radarArea","axisTitle":"opus_L6guCK_axisTitle","line":"opus_L6guCK_line","point":"opus_L6guCK_point","treemapGroupLabel":"opus_L6guCK_treemapGroupLabel","sankeyLabelBox":"opus_L6guCK_sankeyLabelBox","legendSwatch":"opus_L6guCK_legendSwatch","title":"opus_L6guCK_title","axes":"opus_L6guCK_axes","funnelGuide":"opus_L6guCK_funnelGuide","sankeyLink":"opus_L6guCK_sankeyLink","packLabel":"opus_L6guCK_packLabel","graphLabel":"opus_L6guCK_graphLabel","axisLine":"opus_L6guCK_axisLine","chart":"opus_L6guCK_chart","mapLabel":"opus_L6guCK_mapLabel"};
11977
+ var Chart_default = {"mapValue":"opus_L6guCK_mapValue","header":"opus_L6guCK_header","graphLink":"opus_L6guCK_graphLink","graphLinkColored":"opus_L6guCK_graphLinkColored","wick":"opus_L6guCK_wick","legendItem":"opus_L6guCK_legendItem","sankeyCenterLabel":"opus_L6guCK_sankeyCenterLabel","mapRegion":"opus_L6guCK_mapRegion","sankeyLink":"opus_L6guCK_sankeyLink","link":"opus_L6guCK_link","sankeySideName":"opus_L6guCK_sankeySideName","violin":"opus_L6guCK_violin","sankeySideLabel":"opus_L6guCK_sankeySideLabel","treemapGroupLabel":"opus_L6guCK_treemapGroupLabel","mapLabel":"opus_L6guCK_mapLabel","meta":"opus_L6guCK_meta","funnel":"opus_L6guCK_funnel","graphNode":"opus_L6guCK_graphNode","area":"opus_L6guCK_area","axes":"opus_L6guCK_axes","seriesE":"opus_L6guCK_seriesE","funnelGuide":"opus_L6guCK_funnelGuide","land":"opus_L6guCK_land","seriesA":"opus_L6guCK_seriesA","radarArea":"opus_L6guCK_radarArea","ridge":"opus_L6guCK_ridge","sankeyLabelBox":"opus_L6guCK_sankeyLabelBox","bar":"opus_L6guCK_bar","legendSwatch":"opus_L6guCK_legendSwatch","seriesC":"opus_L6guCK_seriesC","point":"opus_L6guCK_point","line":"opus_L6guCK_line","radarGrid":"opus_L6guCK_radarGrid","packLabel":"opus_L6guCK_packLabel","axisLine":"opus_L6guCK_axisLine","chart":"opus_L6guCK_chart","mapLand":"opus_L6guCK_mapLand","sankeyNode":"opus_L6guCK_sankeyNode","ring":"opus_L6guCK_ring","valueLabel":"opus_L6guCK_valueLabel","seriesF":"opus_L6guCK_seriesF","graphNodeRing":"opus_L6guCK_graphNodeRing","graphLabel":"opus_L6guCK_graphLabel","seriesB":"opus_L6guCK_seriesB","title":"opus_L6guCK_title","slice":"opus_L6guCK_slice","svg":"opus_L6guCK_svg","treemapLabel":"opus_L6guCK_treemapLabel","axisTitle":"opus_L6guCK_axisTitle","legend":"opus_L6guCK_legend","sankeySideValue":"opus_L6guCK_sankeySideValue","axisLabels":"opus_L6guCK_axisLabels","grid":"opus_L6guCK_grid","axisTick":"opus_L6guCK_axisTick","axisGuide":"opus_L6guCK_axisGuide","seriesD":"opus_L6guCK_seriesD","packParent":"opus_L6guCK_packParent","funnelText":"opus_L6guCK_funnelText"};
11132
11978
 
11133
11979
  // ../../components/Chart/Chart.tsx
11134
11980
  var import_jsx_runtime64 = require("react/jsx-runtime");
@@ -11353,7 +12199,7 @@ function getWaterfallDomain(data) {
11353
12199
  return { min: min - pad, max: max + pad };
11354
12200
  }
11355
12201
  function getChartYDomain(variant, data, series, fallbackMax) {
11356
- if (variant === "candlestick") {
12202
+ if (variant === "candlestick" || variant === "ohlc") {
11357
12203
  const lows = data.map((item) => {
11358
12204
  var _a2;
11359
12205
  return (_a2 = item.low) != null ? _a2 : item.value * 0.82;
@@ -11367,6 +12213,45 @@ function getChartYDomain(variant, data, series, fallbackMax) {
11367
12213
  const pad = Math.max(0, (max - min) * 0.04);
11368
12214
  return { min: min - pad, max: max + pad };
11369
12215
  }
12216
+ if (variant === "range-area" || variant === "range-bar") {
12217
+ const lows = data.map((item) => {
12218
+ var _a2, _b2;
12219
+ return (_b2 = (_a2 = item.low) != null ? _a2 : item.min) != null ? _b2 : item.value * 0.75;
12220
+ });
12221
+ const highs = data.map((item) => {
12222
+ var _a2, _b2;
12223
+ return (_b2 = (_a2 = item.high) != null ? _a2 : item.max) != null ? _b2 : item.value * 1.25;
12224
+ });
12225
+ const min = Math.min(...lows);
12226
+ const max = Math.max(...highs);
12227
+ const pad = Math.max(0, (max - min) * 0.06);
12228
+ return { min: Math.max(0, min - pad), max: max + pad };
12229
+ }
12230
+ if (variant === "error-bar") {
12231
+ const lows = data.map((item) => {
12232
+ var _a2, _b2;
12233
+ const error = (_a2 = item.error) != null ? _a2 : item.value * 0.12;
12234
+ return ((_b2 = item.low) != null ? _b2 : item.value) - (item.low == null ? error : 0);
12235
+ });
12236
+ const highs = data.map((item) => {
12237
+ var _a2, _b2;
12238
+ const error = (_a2 = item.error) != null ? _a2 : item.value * 0.12;
12239
+ return ((_b2 = item.high) != null ? _b2 : item.value) + (item.high == null ? error : 0);
12240
+ });
12241
+ const min = Math.min(0, ...lows);
12242
+ const max = Math.max(...highs);
12243
+ return { min, max: max * 1.08 };
12244
+ }
12245
+ if (variant === "bullet") {
12246
+ const highs = data.map((item) => {
12247
+ var _a2, _b2;
12248
+ return Math.max(item.value, (_a2 = item.target) != null ? _a2 : item.value, (_b2 = item.max) != null ? _b2 : item.value);
12249
+ });
12250
+ return { min: 0, max: Math.max(1, ...highs) * 1.08 };
12251
+ }
12252
+ if (variant === "pareto") {
12253
+ return { min: 0, max: Math.max(1, ...data.map((item) => item.value)) * 1.08 };
12254
+ }
11370
12255
  if (variant === "box-plot") {
11371
12256
  const lows = data.map((item) => {
11372
12257
  var _a2;
@@ -12211,7 +13096,7 @@ function Chart({
12211
13096
  slotBounds: specializedVariantUsesSlotLabels(variant) ? { left: activePlot.gridLeft, right: activePlot.gridRight } : void 0,
12212
13097
  slotCentered: specializedVariantUsesSlotLabels(variant),
12213
13098
  timeline: variant === "timeline" || variant === "milestone-timeline",
12214
- edgeBarHalfWidth: variant === "candlestick" ? getCandlestickBarHalfWidth(activePlot, data.length) : variant === "histogram" ? getHistogramBarHalfWidth(activePlot, data.length) : variant === "box-plot" ? getBoxPlotBarHalfWidth(activePlot, data.length) : variant === "violin" ? getViolinBarHalfWidth(activePlot, data.length) : void 0
13099
+ edgeBarHalfWidth: variant === "candlestick" || variant === "ohlc" || variant === "range-bar" || variant === "error-bar" || variant === "pareto" ? getCandlestickBarHalfWidth(activePlot, data.length) : variant === "histogram" ? getHistogramBarHalfWidth(activePlot, data.length) : variant === "box-plot" ? getBoxPlotBarHalfWidth(activePlot, data.length) : variant === "violin" ? getViolinBarHalfWidth(activePlot, data.length) : void 0
12215
13100
  }
12216
13101
  ) : null
12217
13102
  ] }),
@@ -12228,7 +13113,7 @@ function Chart({
12228
13113
  }
12229
13114
 
12230
13115
  // ../../components/Skeleton/Skeleton.module.css
12231
- var Skeleton_default = {"skeletonPulse":"opus_27r9Md_skeletonPulse","avatar":"opus_27r9Md_avatar","line":"opus_27r9Md_line","tableCell":"opus_27r9Md_tableCell","skeletonShimmer":"opus_27r9Md_skeletonShimmer","avatarContent":"opus_27r9Md_avatarContent","media":"opus_27r9Md_media","stack":"opus_27r9Md_stack","tableRow":"opus_27r9Md_tableRow","skeleton":"opus_27r9Md_skeleton"};
13116
+ var Skeleton_default = {"skeleton":"opus_27r9Md_skeleton","skeletonPulse":"opus_27r9Md_skeletonPulse","tableCell":"opus_27r9Md_tableCell","media":"opus_27r9Md_media","avatar":"opus_27r9Md_avatar","avatarContent":"opus_27r9Md_avatarContent","stack":"opus_27r9Md_stack","line":"opus_27r9Md_line","tableRow":"opus_27r9Md_tableRow","skeletonShimmer":"opus_27r9Md_skeletonShimmer"};
12232
13117
 
12233
13118
  // ../../components/Skeleton/Skeleton.tsx
12234
13119
  var import_jsx_runtime65 = require("react/jsx-runtime");
@@ -12279,7 +13164,7 @@ var import_free_solid_svg_icons7 = require("@fortawesome/free-solid-svg-icons");
12279
13164
  var import_react_fontawesome7 = require("@fortawesome/react-fontawesome");
12280
13165
 
12281
13166
  // ../../components/Lightbox/Lightbox.module.css
12282
- var Lightbox_default = {"lightbox":"opus_s7Rpyv_lightbox","lightboxPanelOut":"opus_s7Rpyv_lightboxPanelOut","close":"opus_s7Rpyv_close","trigger":"opus_s7Rpyv_trigger","lightboxFadeOut":"opus_s7Rpyv_lightboxFadeOut","lightboxPanelIn":"opus_s7Rpyv_lightboxPanelIn","overlay":"opus_s7Rpyv_overlay","panel":"opus_s7Rpyv_panel","image":"opus_s7Rpyv_image","caption":"opus_s7Rpyv_caption","frame":"opus_s7Rpyv_frame","closeIcon":"opus_s7Rpyv_closeIcon","lightboxFadeIn":"opus_s7Rpyv_lightboxFadeIn"};
13167
+ var Lightbox_default = {"lightboxPanelIn":"opus_s7Rpyv_lightboxPanelIn","trigger":"opus_s7Rpyv_trigger","lightboxFadeOut":"opus_s7Rpyv_lightboxFadeOut","lightbox":"opus_s7Rpyv_lightbox","close":"opus_s7Rpyv_close","image":"opus_s7Rpyv_image","closeIcon":"opus_s7Rpyv_closeIcon","lightboxFadeIn":"opus_s7Rpyv_lightboxFadeIn","caption":"opus_s7Rpyv_caption","lightboxPanelOut":"opus_s7Rpyv_lightboxPanelOut","overlay":"opus_s7Rpyv_overlay","frame":"opus_s7Rpyv_frame","panel":"opus_s7Rpyv_panel"};
12283
13168
 
12284
13169
  // ../../components/Lightbox/Lightbox.tsx
12285
13170
  var import_jsx_runtime66 = require("react/jsx-runtime");
@@ -12394,7 +13279,7 @@ function Lightbox({
12394
13279
  }
12395
13280
 
12396
13281
  // ../../components/Carousel/Carousel.module.css
12397
- var Carousel_default = {"visuallyHidden":"opus_N4occJ_visuallyHidden","stage":"opus_N4occJ_stage","slide":"opus_N4occJ_slide","pips":"opus_N4occJ_pips","track":"opus_N4occJ_track","nav":"opus_N4occJ_nav","navIcon":"opus_N4occJ_navIcon","footer":"opus_N4occJ_footer","carousel":"opus_N4occJ_carousel","image":"opus_N4occJ_image","caption":"opus_N4occJ_caption","pip":"opus_N4occJ_pip","empty":"opus_N4occJ_empty"};
13282
+ var Carousel_default = {"pips":"opus_N4occJ_pips","pip":"opus_N4occJ_pip","navIcon":"opus_N4occJ_navIcon","visuallyHidden":"opus_N4occJ_visuallyHidden","slide":"opus_N4occJ_slide","stage":"opus_N4occJ_stage","empty":"opus_N4occJ_empty","track":"opus_N4occJ_track","image":"opus_N4occJ_image","footer":"opus_N4occJ_footer","carousel":"opus_N4occJ_carousel","nav":"opus_N4occJ_nav","caption":"opus_N4occJ_caption"};
12398
13283
 
12399
13284
  // ../../components/Carousel/Carousel.tsx
12400
13285
  var import_jsx_runtime67 = require("react/jsx-runtime");
@@ -12646,7 +13531,7 @@ function Carousel({
12646
13531
  }
12647
13532
 
12648
13533
  // ../../components/ImageThumbnail/ImageThumbnail.module.css
12649
- var ImageThumbnail_default = {"thumbnail":"opus_Gp1o-9_thumbnail","figure":"opus_Gp1o-9_figure","image":"opus_Gp1o-9_image","caption":"opus_Gp1o-9_caption"};
13534
+ var ImageThumbnail_default = {"thumbnail":"opus_Gp1o-9_thumbnail","caption":"opus_Gp1o-9_caption","image":"opus_Gp1o-9_image","figure":"opus_Gp1o-9_figure"};
12650
13535
 
12651
13536
  // ../../components/ImageThumbnail/ImageThumbnail.tsx
12652
13537
  var import_jsx_runtime68 = require("react/jsx-runtime");
@@ -12721,7 +13606,7 @@ var import_react42 = require("react");
12721
13606
  var import_react41 = require("react");
12722
13607
 
12723
13608
  // ../../components/ModelViewer/ModelViewer.module.css
12724
- var ModelViewer_default = {"caption":"opus_f7gfHI_caption","stage":"opus_f7gfHI_stage","canvasHost":"opus_f7gfHI_canvasHost","viewer":"opus_f7gfHI_viewer","loading":"opus_f7gfHI_loading","model":"opus_f7gfHI_model"};
13609
+ var ModelViewer_default = {"stage":"opus_f7gfHI_stage","canvasHost":"opus_f7gfHI_canvasHost","loading":"opus_f7gfHI_loading","viewer":"opus_f7gfHI_viewer","model":"opus_f7gfHI_model","caption":"opus_f7gfHI_caption"};
12725
13610
 
12726
13611
  // ../../components/ModelViewer/FireBarrelModelViewer.tsx
12727
13612
  var import_jsx_runtime70 = require("react/jsx-runtime");
@@ -12939,7 +13824,7 @@ var import_free_solid_svg_icons9 = require("@fortawesome/free-solid-svg-icons");
12939
13824
  var import_react_fontawesome9 = require("@fortawesome/react-fontawesome");
12940
13825
 
12941
13826
  // ../../components/ModelLightbox/ModelLightbox.module.css
12942
- var ModelLightbox_default = {"overlay":"opus_YYKGIB_overlay","frame":"opus_YYKGIB_frame","trigger":"opus_YYKGIB_trigger","modelLightboxPanelIn":"opus_YYKGIB_modelLightboxPanelIn","modelLightboxPanelOut":"opus_YYKGIB_modelLightboxPanelOut","close":"opus_YYKGIB_close","closeIcon":"opus_YYKGIB_closeIcon","modelLightboxFadeOut":"opus_YYKGIB_modelLightboxFadeOut","lightbox":"opus_YYKGIB_lightbox","modelLightboxFadeIn":"opus_YYKGIB_modelLightboxFadeIn"};
13827
+ var ModelLightbox_default = {"close":"opus_YYKGIB_close","trigger":"opus_YYKGIB_trigger","modelLightboxFadeIn":"opus_YYKGIB_modelLightboxFadeIn","frame":"opus_YYKGIB_frame","lightbox":"opus_YYKGIB_lightbox","closeIcon":"opus_YYKGIB_closeIcon","modelLightboxPanelOut":"opus_YYKGIB_modelLightboxPanelOut","modelLightboxPanelIn":"opus_YYKGIB_modelLightboxPanelIn","overlay":"opus_YYKGIB_overlay","modelLightboxFadeOut":"opus_YYKGIB_modelLightboxFadeOut"};
12943
13828
 
12944
13829
  // ../../components/ModelLightbox/ModelLightbox.tsx
12945
13830
  var import_jsx_runtime72 = require("react/jsx-runtime");
@@ -13044,27 +13929,29 @@ function ModelLightbox({
13044
13929
  }
13045
13930
 
13046
13931
  // ../../components/ModelThumbnail/ModelThumbnail.module.css
13047
- var ModelThumbnail_default = {"caption":"opus_NkO9Yb_caption","content":"opus_NkO9Yb_content","staticThumbnail":"opus_NkO9Yb_staticThumbnail"};
13932
+ var ModelThumbnail_default = {"staticThumbnail":"opus_NkO9Yb_staticThumbnail","content":"opus_NkO9Yb_content","caption":"opus_NkO9Yb_caption"};
13048
13933
 
13049
13934
  // ../../components/ModelThumbnail/ModelThumbnail.tsx
13050
13935
  var import_jsx_runtime73 = require("react/jsx-runtime");
13051
13936
  function ThumbnailContent({
13052
13937
  asset,
13938
+ fill,
13053
13939
  showCaption,
13054
13940
  size
13055
13941
  }) {
13056
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { className: ModelThumbnail_default.content, "data-size": size, children: [
13942
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { className: ModelThumbnail_default.content, "data-fill": fill ? "true" : void 0, "data-size": size, children: [
13057
13943
  /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(ModelViewer, { asset, cameraControls: false, height: "compact", showCaption: false }),
13058
13944
  showCaption ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: ModelThumbnail_default.caption, children: asset.name }) : null
13059
13945
  ] });
13060
13946
  }
13061
13947
  function ModelThumbnail({
13062
13948
  asset,
13949
+ fill = false,
13063
13950
  openInLightbox = true,
13064
13951
  showCaption = true,
13065
13952
  size = "medium"
13066
13953
  }) {
13067
- const content = /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(ThumbnailContent, { asset, showCaption, size });
13954
+ const content = /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(ThumbnailContent, { asset, fill, showCaption, size });
13068
13955
  if (openInLightbox) {
13069
13956
  return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13070
13957
  ModelLightbox,
@@ -13079,7 +13966,7 @@ function ModelThumbnail({
13079
13966
  }
13080
13967
 
13081
13968
  // ../../components/ModelGallery/ModelGallery.module.css
13082
- var ModelGallery_default = {"empty":"opus_8llAjm_empty","gallery":"opus_8llAjm_gallery"};
13969
+ var ModelGallery_default = {"gallery":"opus_8llAjm_gallery","empty":"opus_8llAjm_empty"};
13083
13970
 
13084
13971
  // ../../components/ModelGallery/ModelGallery.tsx
13085
13972
  var import_jsx_runtime74 = require("react/jsx-runtime");
@@ -13098,6 +13985,7 @@ function ModelGallery({
13098
13985
  ModelThumbnail,
13099
13986
  {
13100
13987
  asset,
13988
+ fill: true,
13101
13989
  openInLightbox: true,
13102
13990
  showCaption: showCaptions,
13103
13991
  size: thumbnailSize
@@ -13162,7 +14050,7 @@ function CatalogIcon({ iconName }) {
13162
14050
  }
13163
14051
 
13164
14052
  // ../../components/EmptyState/EmptyState.module.css
13165
- var EmptyState_default = {"actions":"opus_1KckGY_actions","iconWrap":"opus_1KckGY_iconWrap","root":"opus_1KckGY_root","title":"opus_1KckGY_title","description":"opus_1KckGY_description","copy":"opus_1KckGY_copy"};
14053
+ var EmptyState_default = {"root":"opus_1KckGY_root","copy":"opus_1KckGY_copy","title":"opus_1KckGY_title","actions":"opus_1KckGY_actions","description":"opus_1KckGY_description","iconWrap":"opus_1KckGY_iconWrap"};
13166
14054
 
13167
14055
  // ../../components/EmptyState/EmptyState.tsx
13168
14056
  var import_jsx_runtime76 = require("react/jsx-runtime");
@@ -13195,68 +14083,1044 @@ function EmptyState({
13195
14083
  );
13196
14084
  }
13197
14085
 
13198
- // ../../components/Sidebar/Sidebar.tsx
13199
- var import_react45 = require("react");
13200
-
13201
- // ../../components/Sidebar/Sidebar.module.css
13202
- var Sidebar_default = {"main":"opus_4Pogux_main","group":"opus_4Pogux_group","groupHeader":"opus_4Pogux_groupHeader","footer":"opus_4Pogux_footer","groupChevronOpen":"opus_4Pogux_groupChevronOpen","sidebar":"opus_4Pogux_sidebar","headerTitle":"opus_4Pogux_headerTitle","groupItems":"opus_4Pogux_groupItems","linkActive":"opus_4Pogux_linkActive","headerInner":"opus_4Pogux_headerInner","link":"opus_4Pogux_link","layout":"opus_4Pogux_layout","body":"opus_4Pogux_body","groupLabel":"opus_4Pogux_groupLabel","header":"opus_4Pogux_header","nav":"opus_4Pogux_nav","groupItemsWrap":"opus_4Pogux_groupItemsWrap","visuallyHidden":"opus_4Pogux_visuallyHidden","groupChevron":"opus_4Pogux_groupChevron","groupToggle":"opus_4Pogux_groupToggle"};
14086
+ // ../../components/Badge/Badge.module.css
14087
+ var Badge_default = {"badge":"opus_1GJHzl_badge","dot":"opus_1GJHzl_dot"};
13203
14088
 
13204
- // ../../components/Sidebar/Sidebar.tsx
14089
+ // ../../components/Badge/Badge.tsx
13205
14090
  var import_jsx_runtime77 = require("react/jsx-runtime");
13206
- var SidebarContext = (0, import_react45.createContext)({
13207
- collapsed: false,
13208
- density: "comfortable"
13209
- });
13210
- function Sidebar({
13211
- children,
13212
- collapsed = false,
13213
- density = "comfortable",
13214
- footer,
13215
- header,
13216
- side = "left"
14091
+ function Badge({
14092
+ dot = false,
14093
+ label,
14094
+ size = "md",
14095
+ tone = "neutral",
14096
+ variant = "soft"
13217
14097
  }) {
13218
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(SidebarContext.Provider, { value: { collapsed, density }, children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
13219
- "aside",
13220
- {
13221
- "aria-label": "Sidebar",
13222
- className: Sidebar_default.sidebar,
13223
- "data-collapsed": collapsed ? "true" : "false",
13224
- "data-density": density,
13225
- "data-side": side,
13226
- children: [
13227
- header ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: Sidebar_default.header, children: header }) : null,
13228
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: Sidebar_default.body, children }),
13229
- footer ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: Sidebar_default.footer, children: footer }) : null
13230
- ]
13231
- }
13232
- ) });
13233
- }
13234
- function SidebarHeader({ children, title }) {
13235
- const { collapsed } = (0, import_react45.useContext)(SidebarContext);
13236
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: Sidebar_default.headerInner, children: [
13237
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("h2", { className: collapsed ? Sidebar_default.visuallyHidden : Sidebar_default.headerTitle, children: title }),
13238
- children
14098
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("span", { className: Badge_default.badge, "data-size": size, "data-tone": tone, "data-variant": variant, children: [
14099
+ dot ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { "aria-hidden": "true", className: Badge_default.dot }) : null,
14100
+ label
13239
14101
  ] });
13240
14102
  }
13241
- function SidebarNav({ "aria-label": ariaLabel, children }) {
13242
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("nav", { "aria-label": ariaLabel, className: Sidebar_default.nav, children });
13243
- }
13244
- function SidebarLink({ active = false, children, href, onClick }) {
13245
- const { collapsed } = (0, import_react45.useContext)(SidebarContext);
13246
- const className = [Sidebar_default.link, active ? Sidebar_default.linkActive : ""].filter(Boolean).join(" ");
13247
- const label = typeof children === "string" ? children : null;
13248
- const content = /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_jsx_runtime77.Fragment, { children: [
13249
- collapsed && label ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { "aria-hidden": "true", children: label.charAt(0) }) : null,
13250
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: collapsed ? Sidebar_default.visuallyHidden : void 0, children })
13251
- ] });
13252
- if (href) {
13253
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("a", { "aria-current": active ? "page" : void 0, className, href, children: content });
13254
- }
13255
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
13256
- "button",
13257
- {
13258
- "aria-current": active ? "page" : void 0,
13259
- className,
14103
+
14104
+ // ../../components/Divider/Divider.module.css
14105
+ var Divider_default = {"divider":"opus_ux1i0D_divider","label":"opus_ux1i0D_label","line":"opus_ux1i0D_line","labelled":"opus_ux1i0D_labelled"};
14106
+
14107
+ // ../../components/Divider/Divider.tsx
14108
+ var import_jsx_runtime78 = require("react/jsx-runtime");
14109
+ function Divider({
14110
+ label,
14111
+ orientation = "horizontal",
14112
+ tone = "default"
14113
+ }) {
14114
+ if (orientation === "vertical") {
14115
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
14116
+ "div",
14117
+ {
14118
+ "aria-orientation": "vertical",
14119
+ className: Divider_default.divider,
14120
+ "data-orientation": "vertical",
14121
+ "data-tone": tone,
14122
+ role: "separator"
14123
+ }
14124
+ );
14125
+ }
14126
+ if (label) {
14127
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: Divider_default.labelled, "data-tone": tone, role: "separator", children: [
14128
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { "aria-hidden": "true", className: Divider_default.line }),
14129
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: Divider_default.label, children: label }),
14130
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { "aria-hidden": "true", className: Divider_default.line })
14131
+ ] });
14132
+ }
14133
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
14134
+ "hr",
14135
+ {
14136
+ className: Divider_default.divider,
14137
+ "data-orientation": "horizontal",
14138
+ "data-tone": tone
14139
+ }
14140
+ );
14141
+ }
14142
+
14143
+ // ../../components/Avatar/Avatar.tsx
14144
+ var import_react45 = require("react");
14145
+
14146
+ // ../../components/Avatar/Avatar.module.css
14147
+ var Avatar_default = {"initials":"opus_jsRWxO_initials","image":"opus_jsRWxO_image","avatar":"opus_jsRWxO_avatar"};
14148
+
14149
+ // ../../components/Avatar/Avatar.tsx
14150
+ var import_jsx_runtime79 = (
14151
+ // eslint-disable-next-line @next/next/no-img-element
14152
+ require("react/jsx-runtime")
14153
+ );
14154
+ function initialsFromName(name) {
14155
+ var _a2, _b2;
14156
+ const parts = name.trim().split(/\s+/).filter(Boolean);
14157
+ if (parts.length === 0) {
14158
+ return "?";
14159
+ }
14160
+ if (parts.length === 1) {
14161
+ return parts[0].slice(0, 2).toUpperCase();
14162
+ }
14163
+ return `${(_a2 = parts[0][0]) != null ? _a2 : ""}${(_b2 = parts[1][0]) != null ? _b2 : ""}`.toUpperCase();
14164
+ }
14165
+ function Avatar({
14166
+ name,
14167
+ shape = "circle",
14168
+ size = "md",
14169
+ src
14170
+ }) {
14171
+ const [failed, setFailed] = (0, import_react45.useState)(false);
14172
+ const initials = (0, import_react45.useMemo)(() => initialsFromName(name), [name]);
14173
+ const showImage = Boolean(src) && !failed;
14174
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
14175
+ "span",
14176
+ {
14177
+ "aria-label": name,
14178
+ className: Avatar_default.avatar,
14179
+ "data-shape": shape,
14180
+ "data-size": size,
14181
+ role: "img",
14182
+ title: name,
14183
+ children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
14184
+ "img",
14185
+ {
14186
+ alt: "",
14187
+ className: Avatar_default.image,
14188
+ onError: () => setFailed(true),
14189
+ src
14190
+ }
14191
+ ) : /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { "aria-hidden": "true", className: Avatar_default.initials, children: initials })
14192
+ }
14193
+ );
14194
+ }
14195
+
14196
+ // ../../components/AvatarGroup/AvatarGroup.module.css
14197
+ var AvatarGroup_default = {"group":"opus_Vv36ne_group","overflow":"opus_Vv36ne_overflow","item":"opus_Vv36ne_item"};
14198
+
14199
+ // ../../components/AvatarGroup/AvatarGroup.tsx
14200
+ var import_jsx_runtime80 = require("react/jsx-runtime");
14201
+ function AvatarGroup({ items, max = 4, size = "md" }) {
14202
+ const safeMax = Math.max(1, Math.round(max));
14203
+ const visible = items.slice(0, safeMax);
14204
+ const overflow = Math.max(0, items.length - visible.length);
14205
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { "aria-label": `${items.length} people`, className: AvatarGroup_default.group, role: "group", children: [
14206
+ visible.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: AvatarGroup_default.item, style: { zIndex: visible.length - index }, children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Avatar, { name: item.name, size, src: item.src }) }, `${item.name}-${index}`)),
14207
+ overflow > 0 ? /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
14208
+ "span",
14209
+ {
14210
+ "aria-label": `${overflow} more`,
14211
+ className: AvatarGroup_default.overflow,
14212
+ "data-size": size,
14213
+ children: [
14214
+ "+",
14215
+ overflow
14216
+ ]
14217
+ }
14218
+ ) : null
14219
+ ] });
14220
+ }
14221
+
14222
+ // ../../components/Statistic/Statistic.module.css
14223
+ var Statistic_default = {"label":"opus_vCN1bv_label","root":"opus_vCN1bv_root","value":"opus_vCN1bv_value","affix":"opus_vCN1bv_affix","trend":"opus_vCN1bv_trend"};
14224
+
14225
+ // ../../components/Statistic/Statistic.tsx
14226
+ var import_jsx_runtime81 = require("react/jsx-runtime");
14227
+ function Statistic({
14228
+ label,
14229
+ prefix,
14230
+ suffix,
14231
+ trend,
14232
+ trendLabel,
14233
+ value
14234
+ }) {
14235
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: Statistic_default.root, children: [
14236
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("p", { className: Statistic_default.label, children: label }),
14237
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("p", { className: Statistic_default.value, children: [
14238
+ prefix ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: Statistic_default.affix, children: prefix }) : null,
14239
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { children: value }),
14240
+ suffix ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: Statistic_default.affix, children: suffix }) : null
14241
+ ] }),
14242
+ trend && trendLabel ? /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("p", { className: Statistic_default.trend, "data-trend": trend, children: [
14243
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { "aria-hidden": "true", children: trend === "up" ? "\u2191" : trend === "down" ? "\u2193" : "\u2192" }),
14244
+ trendLabel
14245
+ ] }) : null
14246
+ ] });
14247
+ }
14248
+
14249
+ // ../../components/List/List.module.css
14250
+ var List_default = {"description":"opus_ys3xlo_description","meta":"opus_ys3xlo_meta","icon":"opus_ys3xlo_icon","item":"opus_ys3xlo_item","list":"opus_ys3xlo_list","title":"opus_ys3xlo_title","head":"opus_ys3xlo_head","body":"opus_ys3xlo_body"};
14251
+
14252
+ // ../../components/List/List.tsx
14253
+ var import_jsx_runtime82 = require("react/jsx-runtime");
14254
+ function List({ density = "comfortable", items, ordered = false }) {
14255
+ const Tag = ordered ? "ol" : "ul";
14256
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Tag, { className: List_default.list, "data-density": density, "data-ordered": ordered ? "true" : "false", children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("li", { className: List_default.item, children: [
14257
+ item.icon ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { "aria-hidden": "true", className: List_default.icon, children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(CatalogIcon, { iconName: item.icon }) }) : null,
14258
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: List_default.body, children: [
14259
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: List_default.head, children: [
14260
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: List_default.title, children: item.title }),
14261
+ item.meta ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: List_default.meta, children: item.meta }) : null
14262
+ ] }),
14263
+ item.description ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("p", { className: List_default.description, children: item.description }) : null
14264
+ ] })
14265
+ ] }, `${item.title}-${index}`)) });
14266
+ }
14267
+
14268
+ // ../../components/DescriptionList/DescriptionList.module.css
14269
+ var DescriptionList_default = {"list":"opus_FY8OsC_list","term":"opus_FY8OsC_term","row":"opus_FY8OsC_row","details":"opus_FY8OsC_details"};
14270
+
14271
+ // ../../components/DescriptionList/DescriptionList.tsx
14272
+ var import_jsx_runtime83 = require("react/jsx-runtime");
14273
+ function DescriptionList({
14274
+ items,
14275
+ layout = "stacked"
14276
+ }) {
14277
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("dl", { className: DescriptionList_default.list, "data-layout": layout, children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: DescriptionList_default.row, children: [
14278
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("dt", { className: DescriptionList_default.term, children: item.term }),
14279
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("dd", { className: DescriptionList_default.details, children: item.details })
14280
+ ] }, `${item.term}-${index}`)) });
14281
+ }
14282
+
14283
+ // ../../components/PropertyGrid/PropertyGrid.tsx
14284
+ var import_react46 = require("react");
14285
+
14286
+ // ../../components/PropertyGrid/PropertyGrid.module.css
14287
+ var PropertyGrid_default = {"row":"opus_Bnfsue_row","valueCell":"opus_Bnfsue_valueCell","copy":"opus_Bnfsue_copy","value":"opus_Bnfsue_value","grid":"opus_Bnfsue_grid","label":"opus_Bnfsue_label"};
14288
+
14289
+ // ../../components/PropertyGrid/PropertyGrid.tsx
14290
+ var import_jsx_runtime84 = require("react/jsx-runtime");
14291
+ function PropertyGrid({ items }) {
14292
+ const [copiedIndex, setCopiedIndex] = (0, import_react46.useState)(null);
14293
+ async function copyValue(value, index) {
14294
+ try {
14295
+ await navigator.clipboard.writeText(value);
14296
+ setCopiedIndex(index);
14297
+ window.setTimeout(() => setCopiedIndex((current) => current === index ? null : current), 1200);
14298
+ } catch (e) {
14299
+ setCopiedIndex(null);
14300
+ }
14301
+ }
14302
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: PropertyGrid_default.grid, role: "table", "aria-label": "Properties", children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: PropertyGrid_default.row, role: "row", children: [
14303
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: PropertyGrid_default.label, role: "rowheader", children: item.label }),
14304
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: PropertyGrid_default.valueCell, role: "cell", children: [
14305
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: PropertyGrid_default.value, children: item.value }),
14306
+ item.copyable ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
14307
+ "button",
14308
+ {
14309
+ "aria-label": `Copy ${item.label}`,
14310
+ className: PropertyGrid_default.copy,
14311
+ onClick: () => void copyValue(item.value, index),
14312
+ type: "button",
14313
+ children: copiedIndex === index ? "Copied" : "Copy"
14314
+ }
14315
+ ) : null
14316
+ ] })
14317
+ ] }, `${item.label}-${index}`)) });
14318
+ }
14319
+
14320
+ // ../../components/ContentTimeline/ContentTimeline.module.css
14321
+ var ContentTimeline_default = {"body":"opus_vApy-v_body","list":"opus_vApy-v_list","description":"opus_vApy-v_description","line":"opus_vApy-v_line","time":"opus_vApy-v_time","title":"opus_vApy-v_title","dot":"opus_vApy-v_dot","item":"opus_vApy-v_item","head":"opus_vApy-v_head","rail":"opus_vApy-v_rail"};
14322
+
14323
+ // ../../components/ContentTimeline/ContentTimeline.tsx
14324
+ var import_jsx_runtime85 = require("react/jsx-runtime");
14325
+ function ContentTimeline({ items }) {
14326
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("ol", { className: ContentTimeline_default.list, children: items.map((item, index) => {
14327
+ var _a2;
14328
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(
14329
+ "li",
14330
+ {
14331
+ className: ContentTimeline_default.item,
14332
+ "data-status": (_a2 = item.status) != null ? _a2 : "default",
14333
+ children: [
14334
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { "aria-hidden": "true", className: ContentTimeline_default.rail, children: [
14335
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: ContentTimeline_default.dot }),
14336
+ index < items.length - 1 ? /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: ContentTimeline_default.line }) : null
14337
+ ] }),
14338
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: ContentTimeline_default.body, children: [
14339
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: ContentTimeline_default.head, children: [
14340
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("h3", { className: ContentTimeline_default.title, children: item.title }),
14341
+ item.time ? /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("time", { className: ContentTimeline_default.time, children: item.time }) : null
14342
+ ] }),
14343
+ item.description ? /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: ContentTimeline_default.description, children: item.description }) : null
14344
+ ] })
14345
+ ]
14346
+ },
14347
+ `${item.title}-${index}`
14348
+ );
14349
+ }) });
14350
+ }
14351
+
14352
+ // ../../components/TreeView/TreeView.tsx
14353
+ var import_react47 = require("react");
14354
+
14355
+ // ../../components/TreeView/TreeView.module.css
14356
+ var TreeView_default = {"tree":"opus_NlkzXy_tree","leafMark":"opus_NlkzXy_leafMark","children":"opus_NlkzXy_children","node":"opus_NlkzXy_node","row":"opus_NlkzXy_row","label":"opus_NlkzXy_label","toggle":"opus_NlkzXy_toggle"};
14357
+
14358
+ // ../../components/TreeView/TreeView.tsx
14359
+ var import_jsx_runtime86 = require("react/jsx-runtime");
14360
+ function collectExpandableIds(nodes) {
14361
+ var _a2;
14362
+ const ids = [];
14363
+ for (const node of nodes) {
14364
+ if ((_a2 = node.children) == null ? void 0 : _a2.length) {
14365
+ ids.push(node.id);
14366
+ ids.push(...collectExpandableIds(node.children));
14367
+ }
14368
+ }
14369
+ return ids;
14370
+ }
14371
+ function TreeNode({
14372
+ depth,
14373
+ expandedIds,
14374
+ node,
14375
+ onToggle
14376
+ }) {
14377
+ var _a2;
14378
+ const hasChildren = Boolean((_a2 = node.children) == null ? void 0 : _a2.length);
14379
+ const expanded = expandedIds.has(node.id);
14380
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("li", { className: TreeView_default.node, children: [
14381
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: TreeView_default.row, style: { paddingLeft: `${depth * 16 + 8}px` }, children: [
14382
+ hasChildren ? /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
14383
+ "button",
14384
+ {
14385
+ "aria-expanded": expanded,
14386
+ "aria-label": `${expanded ? "Collapse" : "Expand"} ${node.label}`,
14387
+ className: TreeView_default.toggle,
14388
+ onClick: () => onToggle(node.id),
14389
+ type: "button",
14390
+ children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { "aria-hidden": "true", children: expanded ? "\u25BE" : "\u25B8" })
14391
+ }
14392
+ ) : /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { "aria-hidden": "true", className: TreeView_default.leafMark }),
14393
+ /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: TreeView_default.label, children: node.label })
14394
+ ] }),
14395
+ hasChildren && expanded ? /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("ul", { className: TreeView_default.children, children: node.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
14396
+ TreeNode,
14397
+ {
14398
+ depth: depth + 1,
14399
+ expandedIds,
14400
+ node: child,
14401
+ onToggle
14402
+ },
14403
+ child.id
14404
+ )) }) : null
14405
+ ] });
14406
+ }
14407
+ function TreeView({ defaultExpandedIds, nodes }) {
14408
+ const fallbackIds = (0, import_react47.useMemo)(() => collectExpandableIds(nodes).slice(0, 2), [nodes]);
14409
+ const [expandedIds, setExpandedIds] = (0, import_react47.useState)(
14410
+ () => new Set(defaultExpandedIds != null ? defaultExpandedIds : fallbackIds)
14411
+ );
14412
+ function toggle(id) {
14413
+ setExpandedIds((current) => {
14414
+ const next = new Set(current);
14415
+ if (next.has(id)) {
14416
+ next.delete(id);
14417
+ } else {
14418
+ next.add(id);
14419
+ }
14420
+ return next;
14421
+ });
14422
+ }
14423
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("ul", { "aria-label": "Tree", className: TreeView_default.tree, role: "tree", children: nodes.map((node) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
14424
+ TreeNode,
14425
+ {
14426
+ depth: 0,
14427
+ expandedIds,
14428
+ node,
14429
+ onToggle: toggle
14430
+ },
14431
+ node.id
14432
+ )) });
14433
+ }
14434
+
14435
+ // ../../components/MasonryGrid/MasonryGrid.module.css
14436
+ var MasonryGrid_default = {"card":"opus_Fxxd7-_card","body":"opus_Fxxd7-_body","grid":"opus_Fxxd7-_grid","title":"opus_Fxxd7-_title"};
14437
+
14438
+ // ../../components/MasonryGrid/MasonryGrid.tsx
14439
+ var import_jsx_runtime87 = require("react/jsx-runtime");
14440
+ function MasonryGrid({ columns = 3, gap = 12, items }) {
14441
+ const safeColumns = Math.min(Math.max(Math.round(columns), 2), 4);
14442
+ const safeGap = Math.min(Math.max(Math.round(gap), 8), 28);
14443
+ return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
14444
+ "div",
14445
+ {
14446
+ className: MasonryGrid_default.grid,
14447
+ style: {
14448
+ columnCount: safeColumns,
14449
+ columnGap: `${safeGap}px`
14450
+ },
14451
+ children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
14452
+ "article",
14453
+ {
14454
+ className: MasonryGrid_default.card,
14455
+ style: {
14456
+ marginBottom: `${safeGap}px`,
14457
+ minHeight: item.height ? `${item.height}px` : void 0
14458
+ },
14459
+ children: [
14460
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("h3", { className: MasonryGrid_default.title, children: item.title }),
14461
+ item.body ? /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("p", { className: MasonryGrid_default.body, children: item.body }) : null
14462
+ ]
14463
+ },
14464
+ `${item.title}-${index}`
14465
+ ))
14466
+ }
14467
+ );
14468
+ }
14469
+
14470
+ // ../../components/JsonViewer/JsonViewer.tsx
14471
+ var import_react48 = require("react");
14472
+
14473
+ // ../../components/JsonViewer/JsonViewer.module.css
14474
+ var JsonViewer_default = {"block":"opus_uLDgXq_block","summary":"opus_uLDgXq_summary","children":"opus_uLDgXq_children","toggleLine":"opus_uLDgXq_toggleLine","line":"opus_uLDgXq_line","boolean":"opus_uLDgXq_boolean","null":"opus_uLDgXq_null","key":"opus_uLDgXq_key","string":"opus_uLDgXq_string","root":"opus_uLDgXq_root","chevron":"opus_uLDgXq_chevron","number":"opus_uLDgXq_number"};
14475
+
14476
+ // ../../components/JsonViewer/JsonViewer.tsx
14477
+ var import_jsx_runtime88 = require("react/jsx-runtime");
14478
+ function isPlainObject(value) {
14479
+ return typeof value === "object" && value !== null && !Array.isArray(value);
14480
+ }
14481
+ function PrimitiveValue({ value }) {
14482
+ if (value === null) {
14483
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: JsonViewer_default.null, children: "null" });
14484
+ }
14485
+ if (typeof value === "string") {
14486
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("span", { className: JsonViewer_default.string, children: [
14487
+ '"',
14488
+ value,
14489
+ '"'
14490
+ ] });
14491
+ }
14492
+ if (typeof value === "number") {
14493
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: JsonViewer_default.number, children: value });
14494
+ }
14495
+ if (typeof value === "boolean") {
14496
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: JsonViewer_default.boolean, children: String(value) });
14497
+ }
14498
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: JsonViewer_default.string, children: String(value) });
14499
+ }
14500
+ function JsonNode({ collapsedDepth, depth, name, value }) {
14501
+ const isExpandable = Array.isArray(value) || isPlainObject(value);
14502
+ const [open, setOpen] = (0, import_react48.useState)(depth < collapsedDepth);
14503
+ if (!isExpandable) {
14504
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: JsonViewer_default.line, style: { paddingLeft: `${depth * 14}px` }, children: [
14505
+ name !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("span", { className: JsonViewer_default.key, children: [
14506
+ name,
14507
+ ": "
14508
+ ] }) : null,
14509
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(PrimitiveValue, { value })
14510
+ ] });
14511
+ }
14512
+ const entries = Array.isArray(value) ? value.map((entry, index) => [String(index), entry]) : Object.entries(value);
14513
+ const summary = Array.isArray(value) ? `Array(${value.length})` : `Object(${entries.length})`;
14514
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: JsonViewer_default.block, children: [
14515
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
14516
+ "button",
14517
+ {
14518
+ "aria-expanded": open,
14519
+ className: JsonViewer_default.toggleLine,
14520
+ onClick: () => setOpen((current) => !current),
14521
+ style: { paddingLeft: `${depth * 14}px` },
14522
+ type: "button",
14523
+ children: [
14524
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { "aria-hidden": "true", className: JsonViewer_default.chevron, children: open ? "\u25BE" : "\u25B8" }),
14525
+ name !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("span", { className: JsonViewer_default.key, children: [
14526
+ name,
14527
+ ": "
14528
+ ] }) : null,
14529
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: JsonViewer_default.summary, children: summary })
14530
+ ]
14531
+ }
14532
+ ),
14533
+ open ? /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: JsonViewer_default.children, children: entries.map(([childName, childValue]) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
14534
+ JsonNode,
14535
+ {
14536
+ collapsedDepth,
14537
+ depth: depth + 1,
14538
+ name: childName,
14539
+ value: childValue
14540
+ },
14541
+ childName
14542
+ )) }) : null
14543
+ ] });
14544
+ }
14545
+ function JsonViewer({ collapsedDepth = 1, value }) {
14546
+ const parsed = (0, import_react48.useMemo)(() => value, [value]);
14547
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: JsonViewer_default.root, role: "tree", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(JsonNode, { collapsedDepth: Math.max(0, collapsedDepth), depth: 0, value: parsed }) });
14548
+ }
14549
+
14550
+ // ../../components/Icon/Icon.tsx
14551
+ var import_react_fontawesome11 = require("@fortawesome/react-fontawesome");
14552
+
14553
+ // ../../components/Icon/Icon.module.css
14554
+ var Icon_default = {"icon":"opus_7ASn4M_icon"};
14555
+
14556
+ // ../../components/Icon/Icon.tsx
14557
+ var import_jsx_runtime89 = require("react/jsx-runtime");
14558
+ function Icon({ label, name, size = "md", tone = "default" }) {
14559
+ const option = getFontAwesomeIconOption(name);
14560
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
14561
+ "span",
14562
+ {
14563
+ "aria-hidden": label ? void 0 : true,
14564
+ "aria-label": label,
14565
+ className: Icon_default.icon,
14566
+ "data-size": size,
14567
+ "data-tone": tone,
14568
+ role: label ? "img" : void 0,
14569
+ children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(import_react_fontawesome11.FontAwesomeIcon, { icon: option.icon })
14570
+ }
14571
+ );
14572
+ }
14573
+
14574
+ // ../../components/Spinner/Spinner.module.css
14575
+ var Spinner_default = {"spinner":"opus_g5cd4Q_spinner","ring":"opus_g5cd4Q_ring","opus-spinner-rotate":"opus_g5cd4Q_opus-spinner-rotate"};
14576
+
14577
+ // ../../components/Spinner/Spinner.tsx
14578
+ var import_jsx_runtime90 = require("react/jsx-runtime");
14579
+ function Spinner({ label = "Loading", size = "md", tone = "accent" }) {
14580
+ return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
14581
+ "span",
14582
+ {
14583
+ "aria-label": label,
14584
+ className: Spinner_default.spinner,
14585
+ "data-size": size,
14586
+ "data-tone": tone,
14587
+ role: "status",
14588
+ children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { "aria-hidden": "true", className: Spinner_default.ring })
14589
+ }
14590
+ );
14591
+ }
14592
+
14593
+ // ../../components/Portal/Portal.tsx
14594
+ var import_react49 = require("react");
14595
+ var import_react_dom5 = require("react-dom");
14596
+ var import_jsx_runtime91 = require("react/jsx-runtime");
14597
+ var PortalHostContext = (0, import_react49.createContext)({ container: null });
14598
+ function usePortalHost() {
14599
+ return (0, import_react49.useContext)(PortalHostContext);
14600
+ }
14601
+ function PortalHost({ children, id = "opus-portal-host" }) {
14602
+ const [container, setContainer] = (0, import_react49.useState)(null);
14603
+ (0, import_react49.useEffect)(() => {
14604
+ let host = document.getElementById(id);
14605
+ let created = false;
14606
+ if (!host) {
14607
+ host = document.createElement("div");
14608
+ host.id = id;
14609
+ document.body.appendChild(host);
14610
+ created = true;
14611
+ }
14612
+ setContainer(host);
14613
+ return () => {
14614
+ if (created && (host == null ? void 0 : host.parentNode)) {
14615
+ host.parentNode.removeChild(host);
14616
+ }
14617
+ };
14618
+ }, [id]);
14619
+ const value = (0, import_react49.useMemo)(() => ({ container }), [container]);
14620
+ return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(PortalHostContext.Provider, { value, children });
14621
+ }
14622
+ function Portal({ children, container, disabled = false }) {
14623
+ var _a2;
14624
+ const host = usePortalHost();
14625
+ const [fallback, setFallback] = (0, import_react49.useState)(null);
14626
+ (0, import_react49.useEffect)(() => {
14627
+ setFallback(document.body);
14628
+ }, []);
14629
+ if (disabled) {
14630
+ return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(import_jsx_runtime91.Fragment, { children });
14631
+ }
14632
+ const target = (_a2 = container != null ? container : host.container) != null ? _a2 : fallback;
14633
+ if (!target) {
14634
+ return null;
14635
+ }
14636
+ return (0, import_react_dom5.createPortal)(children, target);
14637
+ }
14638
+
14639
+ // ../../components/VisuallyHidden/VisuallyHidden.module.css
14640
+ var VisuallyHidden_default = {"hidden":"opus_DIv7wy_hidden"};
14641
+
14642
+ // ../../components/VisuallyHidden/VisuallyHidden.tsx
14643
+ var import_jsx_runtime92 = require("react/jsx-runtime");
14644
+ function VisuallyHidden({ as = "span", children }) {
14645
+ const Tag = as;
14646
+ return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(Tag, { className: VisuallyHidden_default.hidden, children });
14647
+ }
14648
+
14649
+ // ../../components/FocusTrap/FocusTrap.tsx
14650
+ var import_react50 = require("react");
14651
+
14652
+ // ../../components/FocusTrap/FocusTrap.module.css
14653
+ var FocusTrap_default = {"trap":"opus_fJckCZ_trap"};
14654
+
14655
+ // ../../components/FocusTrap/FocusTrap.tsx
14656
+ var import_jsx_runtime93 = require("react/jsx-runtime");
14657
+ function FocusTrap({
14658
+ active = true,
14659
+ children,
14660
+ initialFocusRef,
14661
+ restoreFocus = true
14662
+ }) {
14663
+ const containerRef = (0, import_react50.useRef)(null);
14664
+ const previouslyFocusedRef = (0, import_react50.useRef)(null);
14665
+ (0, import_react50.useEffect)(() => {
14666
+ if (!active) {
14667
+ return;
14668
+ }
14669
+ previouslyFocusedRef.current = document.activeElement;
14670
+ const frame = window.requestAnimationFrame(() => {
14671
+ var _a2;
14672
+ const preferred = initialFocusRef == null ? void 0 : initialFocusRef.current;
14673
+ if (preferred) {
14674
+ preferred.focus();
14675
+ return;
14676
+ }
14677
+ const container = containerRef.current;
14678
+ if (!container) {
14679
+ return;
14680
+ }
14681
+ (_a2 = getFocusableElements(container)[0]) == null ? void 0 : _a2.focus();
14682
+ });
14683
+ return () => {
14684
+ var _a2, _b2;
14685
+ window.cancelAnimationFrame(frame);
14686
+ if (restoreFocus) {
14687
+ (_b2 = (_a2 = previouslyFocusedRef.current) == null ? void 0 : _a2.focus) == null ? void 0 : _b2.call(_a2);
14688
+ }
14689
+ };
14690
+ }, [active, initialFocusRef, restoreFocus]);
14691
+ (0, import_react50.useEffect)(() => {
14692
+ if (!active) {
14693
+ return;
14694
+ }
14695
+ const onKeyDown = (event) => {
14696
+ if (event.key !== "Tab") {
14697
+ return;
14698
+ }
14699
+ const container = containerRef.current;
14700
+ if (!container) {
14701
+ return;
14702
+ }
14703
+ const focusable = getFocusableElements(container);
14704
+ if (!focusable.length) {
14705
+ event.preventDefault();
14706
+ return;
14707
+ }
14708
+ const first = focusable[0];
14709
+ const last = focusable[focusable.length - 1];
14710
+ const activeElement = document.activeElement;
14711
+ if (event.shiftKey) {
14712
+ if (activeElement === first || !container.contains(activeElement)) {
14713
+ event.preventDefault();
14714
+ last.focus();
14715
+ }
14716
+ return;
14717
+ }
14718
+ if (activeElement === last || !container.contains(activeElement)) {
14719
+ event.preventDefault();
14720
+ first.focus();
14721
+ }
14722
+ };
14723
+ document.addEventListener("keydown", onKeyDown);
14724
+ return () => document.removeEventListener("keydown", onKeyDown);
14725
+ }, [active]);
14726
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: FocusTrap_default.trap, "data-active": active, ref: containerRef, children });
14727
+ }
14728
+
14729
+ // ../../components/KeyboardShortcut/KeyboardShortcut.module.css
14730
+ var KeyboardShortcut_default = {"plus":"opus_pZh5vX_plus","shortcut":"opus_pZh5vX_shortcut","key":"opus_pZh5vX_key"};
14731
+
14732
+ // ../../components/KeyboardShortcut/KeyboardShortcut.tsx
14733
+ var import_jsx_runtime94 = require("react/jsx-runtime");
14734
+ function KeyboardShortcut({ keys, size = "md" }) {
14735
+ return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("kbd", { "aria-label": keys.join(" + "), className: KeyboardShortcut_default.shortcut, "data-size": size, children: keys.map((key, index) => /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("span", { children: [
14736
+ index > 0 ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { "aria-hidden": "true", className: KeyboardShortcut_default.plus, children: "+" }) : null,
14737
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { className: KeyboardShortcut_default.key, children: key })
14738
+ ] }, `${key}-${index}`)) });
14739
+ }
14740
+
14741
+ // ../../components/HotkeyManager/HotkeyManager.tsx
14742
+ var import_react51 = require("react");
14743
+ var import_jsx_runtime95 = require("react/jsx-runtime");
14744
+ var HotkeyManagerContext = (0, import_react51.createContext)(null);
14745
+ function matchesCombo(event, combo) {
14746
+ const key = event.key.length === 1 ? event.key.toLowerCase() : event.key;
14747
+ const expected = combo.key.length === 1 ? combo.key.toLowerCase() : combo.key;
14748
+ return key === expected && Boolean(combo.meta) === event.metaKey && Boolean(combo.ctrl) === event.ctrlKey && Boolean(combo.alt) === event.altKey && Boolean(combo.shift) === event.shiftKey;
14749
+ }
14750
+ function shortcutsEqual(a, b) {
14751
+ if (a.length !== b.length) {
14752
+ return false;
14753
+ }
14754
+ return a.every((combo, index) => {
14755
+ const other = b[index];
14756
+ return combo.id === other.id && combo.key === other.key && Boolean(combo.meta) === Boolean(other.meta) && Boolean(combo.ctrl) === Boolean(other.ctrl) && Boolean(combo.alt) === Boolean(other.alt) && Boolean(combo.shift) === Boolean(other.shift) && combo.enabled === other.enabled && combo.description === other.description;
14757
+ });
14758
+ }
14759
+ function HotkeyManager({ children, enabled = true }) {
14760
+ const handlersRef = (0, import_react51.useRef)(/* @__PURE__ */ new Map());
14761
+ const [shortcuts, setShortcuts] = (0, import_react51.useState)([]);
14762
+ const syncShortcuts = (0, import_react51.useCallback)(() => {
14763
+ const next = Array.from(handlersRef.current.values()).map((entry) => entry.combo);
14764
+ setShortcuts((current) => shortcutsEqual(current, next) ? current : next);
14765
+ }, []);
14766
+ const register = (0, import_react51.useCallback)(
14767
+ (combo, handler) => {
14768
+ handlersRef.current.set(combo.id, { combo, handler });
14769
+ syncShortcuts();
14770
+ return () => {
14771
+ handlersRef.current.delete(combo.id);
14772
+ syncShortcuts();
14773
+ };
14774
+ },
14775
+ [syncShortcuts]
14776
+ );
14777
+ (0, import_react51.useEffect)(() => {
14778
+ if (!enabled) {
14779
+ return;
14780
+ }
14781
+ const onKeyDown = (event) => {
14782
+ var _a2;
14783
+ const target = event.target;
14784
+ const tag = (_a2 = target == null ? void 0 : target.tagName) == null ? void 0 : _a2.toLowerCase();
14785
+ if (tag === "input" || tag === "textarea" || (target == null ? void 0 : target.isContentEditable)) {
14786
+ return;
14787
+ }
14788
+ for (const entry of handlersRef.current.values()) {
14789
+ if (entry.combo.enabled === false) {
14790
+ continue;
14791
+ }
14792
+ if (matchesCombo(event, entry.combo)) {
14793
+ event.preventDefault();
14794
+ entry.handler();
14795
+ break;
14796
+ }
14797
+ }
14798
+ };
14799
+ window.addEventListener("keydown", onKeyDown);
14800
+ return () => window.removeEventListener("keydown", onKeyDown);
14801
+ }, [enabled]);
14802
+ const value = (0, import_react51.useMemo)(() => ({ register, shortcuts }), [register, shortcuts]);
14803
+ return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(HotkeyManagerContext.Provider, { value, children });
14804
+ }
14805
+ function useHotkey(combo, handler) {
14806
+ const context = (0, import_react51.useContext)(HotkeyManagerContext);
14807
+ const register = context == null ? void 0 : context.register;
14808
+ const handlerRef = (0, import_react51.useRef)(handler);
14809
+ handlerRef.current = handler;
14810
+ const { alt, ctrl, description, enabled, id, key, meta, shift } = combo;
14811
+ (0, import_react51.useEffect)(() => {
14812
+ if (!register) {
14813
+ return;
14814
+ }
14815
+ return register(
14816
+ { alt, ctrl, description, enabled, id, key, meta, shift },
14817
+ () => {
14818
+ handlerRef.current();
14819
+ }
14820
+ );
14821
+ }, [alt, ctrl, description, enabled, id, key, meta, register, shift]);
14822
+ }
14823
+ function useHotkeyManager() {
14824
+ const context = (0, import_react51.useContext)(HotkeyManagerContext);
14825
+ if (!context) {
14826
+ throw new Error("useHotkeyManager must be used within HotkeyManager");
14827
+ }
14828
+ return context;
14829
+ }
14830
+
14831
+ // ../../components/CopyButton/CopyButton.tsx
14832
+ var import_react52 = require("react");
14833
+
14834
+ // ../../components/CopyButton/CopyButton.module.css
14835
+ var CopyButton_default = {"wrap":"opus_Ij6tWr_wrap"};
14836
+
14837
+ // ../../components/CopyButton/CopyButton.tsx
14838
+ var import_jsx_runtime96 = require("react/jsx-runtime");
14839
+ async function writeClipboard(value) {
14840
+ var _a2;
14841
+ if ((_a2 = navigator.clipboard) == null ? void 0 : _a2.writeText) {
14842
+ await navigator.clipboard.writeText(value);
14843
+ return;
14844
+ }
14845
+ const textarea = document.createElement("textarea");
14846
+ textarea.value = value;
14847
+ textarea.setAttribute("readonly", "");
14848
+ textarea.style.position = "fixed";
14849
+ textarea.style.left = "-9999px";
14850
+ document.body.appendChild(textarea);
14851
+ textarea.select();
14852
+ document.execCommand("copy");
14853
+ document.body.removeChild(textarea);
14854
+ }
14855
+ function CopyButton({
14856
+ children,
14857
+ copiedLabel = "Copied",
14858
+ label = "Copy",
14859
+ resetMs = 1600,
14860
+ value,
14861
+ variant = "secondary",
14862
+ onCopied
14863
+ }) {
14864
+ const [copied, setCopied] = (0, import_react52.useState)(false);
14865
+ (0, import_react52.useEffect)(() => {
14866
+ if (!copied) {
14867
+ return;
14868
+ }
14869
+ const timer = window.setTimeout(() => setCopied(false), resetMs);
14870
+ return () => window.clearTimeout(timer);
14871
+ }, [copied, resetMs]);
14872
+ const handleCopy = (0, import_react52.useCallback)(async () => {
14873
+ try {
14874
+ await writeClipboard(value);
14875
+ setCopied(true);
14876
+ onCopied == null ? void 0 : onCopied();
14877
+ } catch (e) {
14878
+ setCopied(false);
14879
+ }
14880
+ }, [onCopied, value]);
14881
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: CopyButton_default.wrap, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Button, { onClick: handleCopy, type: "button", variant, children: children != null ? children : copied ? copiedLabel : label }) });
14882
+ }
14883
+
14884
+ // ../../components/Clipboard/Clipboard.tsx
14885
+ var import_react53 = require("react");
14886
+ var import_jsx_runtime97 = require("react/jsx-runtime");
14887
+ var ClipboardContext = (0, import_react53.createContext)(null);
14888
+ async function fallbackWrite(value) {
14889
+ const textarea = document.createElement("textarea");
14890
+ textarea.value = value;
14891
+ textarea.setAttribute("readonly", "");
14892
+ textarea.style.position = "fixed";
14893
+ textarea.style.left = "-9999px";
14894
+ document.body.appendChild(textarea);
14895
+ textarea.select();
14896
+ document.execCommand("copy");
14897
+ document.body.removeChild(textarea);
14898
+ }
14899
+ function ClipboardProvider({ children }) {
14900
+ const [lastCopied, setLastCopied] = (0, import_react53.useState)(null);
14901
+ const writeText = (0, import_react53.useCallback)(async (value2) => {
14902
+ var _a2;
14903
+ if ((_a2 = navigator.clipboard) == null ? void 0 : _a2.writeText) {
14904
+ await navigator.clipboard.writeText(value2);
14905
+ } else {
14906
+ await fallbackWrite(value2);
14907
+ }
14908
+ setLastCopied(value2);
14909
+ }, []);
14910
+ const readText = (0, import_react53.useCallback)(async () => {
14911
+ var _a2;
14912
+ if ((_a2 = navigator.clipboard) == null ? void 0 : _a2.readText) {
14913
+ return navigator.clipboard.readText();
14914
+ }
14915
+ return lastCopied != null ? lastCopied : "";
14916
+ }, [lastCopied]);
14917
+ const value = (0, import_react53.useMemo)(
14918
+ () => ({ lastCopied, readText, writeText }),
14919
+ [lastCopied, readText, writeText]
14920
+ );
14921
+ return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(ClipboardContext.Provider, { value, children });
14922
+ }
14923
+ function useClipboard() {
14924
+ const context = (0, import_react53.useContext)(ClipboardContext);
14925
+ if (!context) {
14926
+ throw new Error("useClipboard must be used within ClipboardProvider");
14927
+ }
14928
+ return context;
14929
+ }
14930
+ function Clipboard({ children }) {
14931
+ return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(ClipboardProvider, { children });
14932
+ }
14933
+
14934
+ // ../../components/ThemeSwitcher/ThemeSwitcher.tsx
14935
+ var import_jsx_runtime98 = require("react/jsx-runtime");
14936
+ function ThemeSwitcher({
14937
+ id = "opus-theme-switcher",
14938
+ label = "Theme",
14939
+ value,
14940
+ onChange
14941
+ }) {
14942
+ return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
14943
+ ThemeToggleField,
14944
+ {
14945
+ id,
14946
+ label,
14947
+ mode: "flagged",
14948
+ value,
14949
+ onChange
14950
+ }
14951
+ );
14952
+ }
14953
+
14954
+ // ../../components/ResizeObserver/ResizeObserver.tsx
14955
+ var import_react54 = require("react");
14956
+ var import_jsx_runtime99 = require("react/jsx-runtime");
14957
+ function ResizeObserver2({ children, className, onResize }) {
14958
+ const ref = (0, import_react54.useRef)(null);
14959
+ const [size, setSize] = (0, import_react54.useState)({ width: 0, height: 0 });
14960
+ (0, import_react54.useEffect)(() => {
14961
+ const node = ref.current;
14962
+ if (!node || typeof window.ResizeObserver === "undefined") {
14963
+ return;
14964
+ }
14965
+ const observer = new window.ResizeObserver((entries) => {
14966
+ const entry = entries[0];
14967
+ if (!entry) {
14968
+ return;
14969
+ }
14970
+ const next = {
14971
+ width: Math.round(entry.contentRect.width),
14972
+ height: Math.round(entry.contentRect.height)
14973
+ };
14974
+ setSize(next);
14975
+ onResize == null ? void 0 : onResize(next);
14976
+ });
14977
+ observer.observe(node);
14978
+ return () => observer.disconnect();
14979
+ }, [onResize]);
14980
+ return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { className, ref, children: children(size) });
14981
+ }
14982
+ function useResizeObserver(targetRef) {
14983
+ const [size, setSize] = (0, import_react54.useState)({ width: 0, height: 0 });
14984
+ (0, import_react54.useEffect)(() => {
14985
+ const node = targetRef.current;
14986
+ if (!node || typeof window.ResizeObserver === "undefined") {
14987
+ return;
14988
+ }
14989
+ const observer = new window.ResizeObserver((entries) => {
14990
+ const entry = entries[0];
14991
+ if (!entry) {
14992
+ return;
14993
+ }
14994
+ setSize({
14995
+ width: Math.round(entry.contentRect.width),
14996
+ height: Math.round(entry.contentRect.height)
14997
+ });
14998
+ });
14999
+ observer.observe(node);
15000
+ return () => observer.disconnect();
15001
+ }, [targetRef]);
15002
+ return size;
15003
+ }
15004
+
15005
+ // ../../components/IntersectionObserver/IntersectionObserver.tsx
15006
+ var import_react55 = require("react");
15007
+ var import_jsx_runtime100 = require("react/jsx-runtime");
15008
+ function IntersectionObserver2({
15009
+ children,
15010
+ className,
15011
+ rootMargin = "0px",
15012
+ threshold = 0.25,
15013
+ onChange
15014
+ }) {
15015
+ const ref = (0, import_react55.useRef)(null);
15016
+ const [isIntersecting, setIsIntersecting] = (0, import_react55.useState)(false);
15017
+ (0, import_react55.useEffect)(() => {
15018
+ const node = ref.current;
15019
+ if (!node || typeof window.IntersectionObserver === "undefined") {
15020
+ return;
15021
+ }
15022
+ const observer = new window.IntersectionObserver(
15023
+ (entries) => {
15024
+ const entry = entries[0];
15025
+ if (!entry) {
15026
+ return;
15027
+ }
15028
+ setIsIntersecting(entry.isIntersecting);
15029
+ onChange == null ? void 0 : onChange(entry.isIntersecting);
15030
+ },
15031
+ { rootMargin, threshold }
15032
+ );
15033
+ observer.observe(node);
15034
+ return () => observer.disconnect();
15035
+ }, [onChange, rootMargin, threshold]);
15036
+ return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("div", { className, ref, children: children(isIntersecting) });
15037
+ }
15038
+ function useIntersectionObserver(targetRef, options = {}) {
15039
+ const { rootMargin = "0px", threshold = 0.25 } = options;
15040
+ const [isIntersecting, setIsIntersecting] = (0, import_react55.useState)(false);
15041
+ (0, import_react55.useEffect)(() => {
15042
+ const node = targetRef.current;
15043
+ if (!node || typeof window.IntersectionObserver === "undefined") {
15044
+ return;
15045
+ }
15046
+ const observer = new window.IntersectionObserver(
15047
+ (entries) => {
15048
+ const entry = entries[0];
15049
+ if (!entry) {
15050
+ return;
15051
+ }
15052
+ setIsIntersecting(entry.isIntersecting);
15053
+ },
15054
+ { rootMargin, threshold }
15055
+ );
15056
+ observer.observe(node);
15057
+ return () => observer.disconnect();
15058
+ }, [rootMargin, targetRef, threshold]);
15059
+ return isIntersecting;
15060
+ }
15061
+
15062
+ // ../../components/Sidebar/Sidebar.tsx
15063
+ var import_react56 = require("react");
15064
+
15065
+ // ../../components/Sidebar/Sidebar.module.css
15066
+ var Sidebar_default = {"groupToggle":"opus_4Pogux_groupToggle","groupItems":"opus_4Pogux_groupItems","sidebar":"opus_4Pogux_sidebar","visuallyHidden":"opus_4Pogux_visuallyHidden","group":"opus_4Pogux_group","main":"opus_4Pogux_main","footer":"opus_4Pogux_footer","headerInner":"opus_4Pogux_headerInner","groupLabel":"opus_4Pogux_groupLabel","link":"opus_4Pogux_link","groupChevronOpen":"opus_4Pogux_groupChevronOpen","layout":"opus_4Pogux_layout","groupItemsWrap":"opus_4Pogux_groupItemsWrap","groupChevron":"opus_4Pogux_groupChevron","body":"opus_4Pogux_body","nav":"opus_4Pogux_nav","headerTitle":"opus_4Pogux_headerTitle","header":"opus_4Pogux_header","groupHeader":"opus_4Pogux_groupHeader","linkActive":"opus_4Pogux_linkActive"};
15067
+
15068
+ // ../../components/Sidebar/Sidebar.tsx
15069
+ var import_jsx_runtime101 = require("react/jsx-runtime");
15070
+ var SidebarContext = (0, import_react56.createContext)({
15071
+ collapsed: false,
15072
+ density: "comfortable"
15073
+ });
15074
+ function Sidebar({
15075
+ children,
15076
+ collapsed = false,
15077
+ density = "comfortable",
15078
+ footer,
15079
+ header,
15080
+ side = "left"
15081
+ }) {
15082
+ return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(SidebarContext.Provider, { value: { collapsed, density }, children: /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(
15083
+ "aside",
15084
+ {
15085
+ "aria-label": "Sidebar",
15086
+ className: Sidebar_default.sidebar,
15087
+ "data-collapsed": collapsed ? "true" : "false",
15088
+ "data-density": density,
15089
+ "data-side": side,
15090
+ children: [
15091
+ header ? /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: Sidebar_default.header, children: header }) : null,
15092
+ /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: Sidebar_default.body, children }),
15093
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: Sidebar_default.footer, children: footer }) : null
15094
+ ]
15095
+ }
15096
+ ) });
15097
+ }
15098
+ function SidebarHeader({ children, title }) {
15099
+ const { collapsed } = (0, import_react56.useContext)(SidebarContext);
15100
+ return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { className: Sidebar_default.headerInner, children: [
15101
+ /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("h2", { className: collapsed ? Sidebar_default.visuallyHidden : Sidebar_default.headerTitle, children: title }),
15102
+ children
15103
+ ] });
15104
+ }
15105
+ function SidebarNav({ "aria-label": ariaLabel, children }) {
15106
+ return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("nav", { "aria-label": ariaLabel, className: Sidebar_default.nav, children });
15107
+ }
15108
+ function SidebarLink({ active = false, children, href, onClick }) {
15109
+ const { collapsed } = (0, import_react56.useContext)(SidebarContext);
15110
+ const className = [Sidebar_default.link, active ? Sidebar_default.linkActive : ""].filter(Boolean).join(" ");
15111
+ const label = typeof children === "string" ? children : null;
15112
+ const content = /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(import_jsx_runtime101.Fragment, { children: [
15113
+ collapsed && label ? /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("span", { "aria-hidden": "true", children: label.charAt(0) }) : null,
15114
+ /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("span", { className: collapsed ? Sidebar_default.visuallyHidden : void 0, children })
15115
+ ] });
15116
+ if (href) {
15117
+ return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("a", { "aria-current": active ? "page" : void 0, className, href, children: content });
15118
+ }
15119
+ return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
15120
+ "button",
15121
+ {
15122
+ "aria-current": active ? "page" : void 0,
15123
+ className,
13260
15124
  onClick,
13261
15125
  type: "button",
13262
15126
  children: content
@@ -13271,16 +15135,16 @@ function createGroupListId(label, id) {
13271
15135
  return slug ? `sidebar-group-${slug}` : "sidebar-group";
13272
15136
  }
13273
15137
  function SidebarGroup({ children, defaultOpen = true, id, label }) {
13274
- const { collapsed } = (0, import_react45.useContext)(SidebarContext);
15138
+ const { collapsed } = (0, import_react56.useContext)(SidebarContext);
13275
15139
  const listId = createGroupListId(label, id);
13276
- const [open, setOpen] = (0, import_react45.useState)(defaultOpen);
15140
+ const [open, setOpen] = (0, import_react56.useState)(defaultOpen);
13277
15141
  if (collapsed) {
13278
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { "aria-label": label, className: Sidebar_default.group, role: "group", children });
15142
+ return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { "aria-label": label, className: Sidebar_default.group, role: "group", children });
13279
15143
  }
13280
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { "aria-label": label, className: Sidebar_default.group, role: "group", children: [
13281
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: Sidebar_default.groupHeader, children: [
13282
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: Sidebar_default.groupLabel, children: label }),
13283
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
15144
+ return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { "aria-label": label, className: Sidebar_default.group, role: "group", children: [
15145
+ /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { className: Sidebar_default.groupHeader, children: [
15146
+ /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("span", { className: Sidebar_default.groupLabel, children: label }),
15147
+ /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
13284
15148
  "button",
13285
15149
  {
13286
15150
  "aria-controls": listId,
@@ -13289,29 +15153,29 @@ function SidebarGroup({ children, defaultOpen = true, id, label }) {
13289
15153
  className: Sidebar_default.groupToggle,
13290
15154
  onClick: () => setOpen((current) => !current),
13291
15155
  type: "button",
13292
- children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { "aria-hidden": "true", className: open ? Sidebar_default.groupChevronOpen : Sidebar_default.groupChevron })
15156
+ children: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("span", { "aria-hidden": "true", className: open ? Sidebar_default.groupChevronOpen : Sidebar_default.groupChevron })
13293
15157
  }
13294
15158
  )
13295
15159
  ] }),
13296
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: Sidebar_default.groupItemsWrap, "data-open": open ? "true" : "false", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: Sidebar_default.groupItems, id: listId, inert: !open || void 0, children }) })
15160
+ /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: Sidebar_default.groupItemsWrap, "data-open": open ? "true" : "false", children: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: Sidebar_default.groupItems, id: listId, inert: !open || void 0, children }) })
13297
15161
  ] });
13298
15162
  }
13299
15163
  function SidebarLayout({ children, collapsed = false, main, side = "left" }) {
13300
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: Sidebar_default.layout, "data-collapsed": collapsed ? "true" : "false", "data-side": side, children: [
15164
+ return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)("div", { className: Sidebar_default.layout, "data-collapsed": collapsed ? "true" : "false", "data-side": side, children: [
13301
15165
  side === "left" ? children : null,
13302
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: Sidebar_default.main, children: main }),
15166
+ /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: Sidebar_default.main, children: main }),
13303
15167
  side === "right" ? children : null
13304
15168
  ] });
13305
15169
  }
13306
15170
 
13307
15171
  // ../../components/AccentColorPicker/AccentColorPicker.tsx
13308
- var import_react46 = require("react");
15172
+ var import_react57 = require("react");
13309
15173
 
13310
15174
  // ../../components/AccentColorPicker/AccentColorPicker.module.css
13311
- var AccentColorPicker_default = {"swatch":"opus_scMnrW_swatch","swatches":"opus_scMnrW_swatches"};
15175
+ var AccentColorPicker_default = {"swatches":"opus_scMnrW_swatches","swatch":"opus_scMnrW_swatch"};
13312
15176
 
13313
15177
  // ../../components/AccentColorPicker/AccentColorPicker.tsx
13314
- var import_jsx_runtime78 = require("react/jsx-runtime");
15178
+ var import_jsx_runtime102 = require("react/jsx-runtime");
13315
15179
  var ACCENT_STORAGE_KEY = "opus-components-accent";
13316
15180
  var DEFAULT_ACCENT_COLOR = "#8f6cff";
13317
15181
  var accentColors = [
@@ -13345,8 +15209,8 @@ function applyDocumentAccent(accent) {
13345
15209
  );
13346
15210
  }
13347
15211
  function useAccentPreference() {
13348
- const [accent, setAccentState] = (0, import_react46.useState)(DEFAULT_ACCENT_COLOR);
13349
- (0, import_react46.useEffect)(() => {
15212
+ const [accent, setAccentState] = (0, import_react57.useState)(DEFAULT_ACCENT_COLOR);
15213
+ (0, import_react57.useEffect)(() => {
13350
15214
  const timeout = window.setTimeout(() => {
13351
15215
  const stored = window.localStorage.getItem(ACCENT_STORAGE_KEY);
13352
15216
  if (isAccentColor(stored)) {
@@ -13358,7 +15222,7 @@ function useAccentPreference() {
13358
15222
  }, 0);
13359
15223
  return () => window.clearTimeout(timeout);
13360
15224
  }, []);
13361
- const setAccent = (0, import_react46.useCallback)((next) => {
15225
+ const setAccent = (0, import_react57.useCallback)((next) => {
13362
15226
  if (!isAccentColor(next)) {
13363
15227
  return;
13364
15228
  }
@@ -13366,10 +15230,11 @@ function useAccentPreference() {
13366
15230
  applyDocumentAccent(next);
13367
15231
  window.localStorage.setItem(ACCENT_STORAGE_KEY, next);
13368
15232
  }, []);
13369
- const accentStyle = (0, import_react46.useMemo)(() => createAccentStyle(accent), [accent]);
15233
+ const accentStyle = (0, import_react57.useMemo)(() => createAccentStyle(accent), [accent]);
13370
15234
  return { accent, accentStyle, setAccent };
13371
15235
  }
13372
15236
  function AccentColorPicker({
15237
+ help,
13373
15238
  id,
13374
15239
  label = "Accent",
13375
15240
  labelPosition = "left",
@@ -13377,19 +15242,20 @@ function AccentColorPicker({
13377
15242
  onChange,
13378
15243
  value
13379
15244
  }) {
13380
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15245
+ return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
13381
15246
  FieldShell,
13382
15247
  {
13383
15248
  fitContent: true,
13384
15249
  flaggedAlign: "center",
15250
+ help,
13385
15251
  id,
13386
15252
  label,
13387
15253
  labelPosition,
13388
15254
  labelTag: "div",
13389
15255
  mode,
13390
- children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { "aria-labelledby": `${id}-label`, className: AccentColorPicker_default.swatches, role: "radiogroup", children: accentColors.map((option) => {
15256
+ children: /* @__PURE__ */ (0, import_jsx_runtime102.jsx)("div", { "aria-labelledby": `${id}-label`, className: AccentColorPicker_default.swatches, role: "radiogroup", children: accentColors.map((option) => {
13391
15257
  const selected = value === option.value;
13392
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
15258
+ return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
13393
15259
  "button",
13394
15260
  {
13395
15261
  "aria-checked": selected,
@@ -13410,15 +15276,16 @@ function AccentColorPicker({
13410
15276
  }
13411
15277
 
13412
15278
  // ../../components/IconPicker/IconPicker.tsx
13413
- var import_react47 = require("react");
13414
- var import_react_fontawesome11 = require("@fortawesome/react-fontawesome");
15279
+ var import_react58 = require("react");
15280
+ var import_react_fontawesome12 = require("@fortawesome/react-fontawesome");
13415
15281
 
13416
15282
  // ../../components/IconPicker/IconPicker.module.css
13417
- var IconPicker_default = {"triggerLabel":"opus_4E-Oa1_triggerLabel","root":"opus_4E-Oa1_root","trigger":"opus_4E-Oa1_trigger","chevron":"opus_4E-Oa1_chevron","option":"opus_4E-Oa1_option","menu":"opus_4E-Oa1_menu","search":"opus_4E-Oa1_search","empty":"opus_4E-Oa1_empty","optionIcon":"opus_4E-Oa1_optionIcon","triggerIcon":"opus_4E-Oa1_triggerIcon","grid":"opus_4E-Oa1_grid"};
15283
+ var IconPicker_default = {"grid":"opus_4E-Oa1_grid","triggerLabel":"opus_4E-Oa1_triggerLabel","root":"opus_4E-Oa1_root","triggerIcon":"opus_4E-Oa1_triggerIcon","chevron":"opus_4E-Oa1_chevron","empty":"opus_4E-Oa1_empty","optionIcon":"opus_4E-Oa1_optionIcon","menu":"opus_4E-Oa1_menu","trigger":"opus_4E-Oa1_trigger","search":"opus_4E-Oa1_search","option":"opus_4E-Oa1_option"};
13418
15284
 
13419
15285
  // ../../components/IconPicker/IconPicker.tsx
13420
- var import_jsx_runtime79 = require("react/jsx-runtime");
15286
+ var import_jsx_runtime103 = require("react/jsx-runtime");
13421
15287
  function IconPicker({
15288
+ help,
13422
15289
  id,
13423
15290
  label = "Icon",
13424
15291
  labelPosition = "left",
@@ -13427,14 +15294,14 @@ function IconPicker({
13427
15294
  searchPlaceholder = "Search icons",
13428
15295
  value
13429
15296
  }) {
13430
- const [open, setOpen] = (0, import_react47.useState)(false);
13431
- const [query, setQuery] = (0, import_react47.useState)("");
13432
- const rootRef = (0, import_react47.useRef)(null);
13433
- const searchRef = (0, import_react47.useRef)(null);
13434
- const listboxId = (0, import_react47.useId)();
15297
+ const [open, setOpen] = (0, import_react58.useState)(false);
15298
+ const [query, setQuery] = (0, import_react58.useState)("");
15299
+ const rootRef = (0, import_react58.useRef)(null);
15300
+ const searchRef = (0, import_react58.useRef)(null);
15301
+ const listboxId = (0, import_react58.useId)();
13435
15302
  const selected = getFontAwesomeIconOption(value);
13436
- const filteredIcons = (0, import_react47.useMemo)(() => filterFontAwesomeIcons(query), [query]);
13437
- (0, import_react47.useEffect)(() => {
15303
+ const filteredIcons = (0, import_react58.useMemo)(() => filterFontAwesomeIcons(query), [query]);
15304
+ (0, import_react58.useEffect)(() => {
13438
15305
  if (!open) {
13439
15306
  return;
13440
15307
  }
@@ -13461,8 +15328,8 @@ function IconPicker({
13461
15328
  document.removeEventListener("keydown", handleKeyDown);
13462
15329
  };
13463
15330
  }, [open]);
13464
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(FieldShell, { id, label, labelPosition, mode, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: IconPicker_default.root, ref: rootRef, children: [
13465
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
15331
+ return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(FieldShell, { help, id, label, labelPosition, mode, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: IconPicker_default.root, ref: rootRef, children: [
15332
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(
13466
15333
  "button",
13467
15334
  {
13468
15335
  "aria-controls": open ? listboxId : void 0,
@@ -13473,14 +15340,14 @@ function IconPicker({
13473
15340
  type: "button",
13474
15341
  onClick: () => setOpen((current) => !current),
13475
15342
  children: [
13476
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { "aria-hidden": "true", className: IconPicker_default.triggerIcon, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_react_fontawesome11.FontAwesomeIcon, { icon: selected.icon }) }),
13477
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: IconPicker_default.triggerLabel, children: selected.label })
15343
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("span", { "aria-hidden": "true", className: IconPicker_default.triggerIcon, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_react_fontawesome12.FontAwesomeIcon, { icon: selected.icon }) }),
15344
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("span", { className: IconPicker_default.triggerLabel, children: selected.label })
13478
15345
  ]
13479
15346
  }
13480
15347
  ),
13481
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { "aria-hidden": "true", className: IconPicker_default.chevron }),
13482
- open ? /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: IconPicker_default.menu, children: [
13483
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
15348
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("span", { "aria-hidden": "true", className: IconPicker_default.chevron }),
15349
+ open ? /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)("div", { className: IconPicker_default.menu, children: [
15350
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
13484
15351
  "input",
13485
15352
  {
13486
15353
  "aria-label": searchPlaceholder,
@@ -13492,7 +15359,7 @@ function IconPicker({
13492
15359
  onChange: (event) => setQuery(event.target.value)
13493
15360
  }
13494
15361
  ),
13495
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: IconPicker_default.grid, id: listboxId, role: "listbox", children: filteredIcons.length ? filteredIcons.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
15362
+ /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("div", { className: IconPicker_default.grid, id: listboxId, role: "listbox", children: filteredIcons.length ? filteredIcons.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
13496
15363
  "button",
13497
15364
  {
13498
15365
  "aria-label": entry.label,
@@ -13507,10 +15374,10 @@ function IconPicker({
13507
15374
  setOpen(false);
13508
15375
  setQuery("");
13509
15376
  },
13510
- children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { "aria-hidden": "true", className: IconPicker_default.optionIcon, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_react_fontawesome11.FontAwesomeIcon, { icon: entry.icon }) })
15377
+ children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("span", { "aria-hidden": "true", className: IconPicker_default.optionIcon, children: /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(import_react_fontawesome12.FontAwesomeIcon, { icon: entry.icon }) })
13511
15378
  },
13512
15379
  entry.iconName
13513
- )) : /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("p", { className: IconPicker_default.empty, children: "No icons match your search." }) })
15380
+ )) : /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("p", { className: IconPicker_default.empty, children: "No icons match your search." }) })
13514
15381
  ] }) : null
13515
15382
  ] }) });
13516
15383
  }
@@ -13520,6 +15387,9 @@ function IconPicker({
13520
15387
  Accordion,
13521
15388
  AccordionGroup,
13522
15389
  Alert,
15390
+ Avatar,
15391
+ AvatarGroup,
15392
+ Badge,
13523
15393
  Button,
13524
15394
  Card,
13525
15395
  Carousel,
@@ -13529,15 +15399,21 @@ function IconPicker({
13529
15399
  CheckboxField,
13530
15400
  ChipInput,
13531
15401
  ChipInputField,
15402
+ Clipboard,
15403
+ ClipboardProvider,
13532
15404
  ColorField,
13533
15405
  CommandPalette,
15406
+ ContentTimeline,
13534
15407
  ContextMenuProvider,
13535
15408
  ContextMenuTarget,
15409
+ CopyButton,
13536
15410
  CountryPickerField,
13537
15411
  DEFAULT_TOAST_DURATION_MS,
13538
15412
  DataGrid,
13539
15413
  DateField,
15414
+ DescriptionList,
13540
15415
  Dialog,
15416
+ Divider,
13541
15417
  Drawer,
13542
15418
  DrawerDefaultActions,
13543
15419
  DropdownMenu,
@@ -13546,12 +15422,20 @@ function IconPicker({
13546
15422
  FieldShell,
13547
15423
  FileField,
13548
15424
  FilterSelectField,
15425
+ FocusTrap,
13549
15426
  Gauge,
13550
15427
  HiddenField,
15428
+ HotkeyManager,
15429
+ Icon,
13551
15430
  IconPicker,
13552
15431
  ImageGallery,
13553
15432
  ImageThumbnail,
15433
+ IntersectionObserver,
15434
+ JsonViewer,
15435
+ KeyboardShortcut,
13554
15436
  Lightbox,
15437
+ List,
15438
+ MasonryGrid,
13555
15439
  MegaMenu,
13556
15440
  MetricTile,
13557
15441
  Modal,
@@ -13567,12 +15451,16 @@ function IconPicker({
13567
15451
  PasswordStrengthField,
13568
15452
  PhoneNumberField,
13569
15453
  Popover,
15454
+ Portal,
15455
+ PortalHost,
13570
15456
  ProgressBar,
13571
15457
  ProgressRing,
15458
+ PropertyGrid,
13572
15459
  Radio,
13573
15460
  RadioGroup,
13574
15461
  RangeField,
13575
15462
  RatingField,
15463
+ ResizeObserver,
13576
15464
  RichTextField,
13577
15465
  Section,
13578
15466
  SegmentedControlField,
@@ -13588,13 +15476,17 @@ function IconPicker({
13588
15476
  SliderRangeField,
13589
15477
  Sparkline,
13590
15478
  Speedometer,
15479
+ Spinner,
13591
15480
  StatCard,
15481
+ Statistic,
13592
15482
  StatusIndicator,
13593
15483
  SwitchField,
13594
15484
  Table,
13595
15485
  Tabs,
13596
15486
  TextAreaField,
13597
15487
  TextField,
15488
+ ThemeProvider,
15489
+ ThemeSwitcher,
13598
15490
  ThemeToggleField,
13599
15491
  Toast,
13600
15492
  ToastProvider,
@@ -13603,7 +15495,9 @@ function IconPicker({
13603
15495
  TopNavigationMenu,
13604
15496
  TransferListField,
13605
15497
  TreeSelectField,
15498
+ TreeView,
13606
15499
  TrendBadge,
15500
+ VisuallyHidden,
13607
15501
  accentColors,
13608
15502
  cartesianSpecializedVariants,
13609
15503
  countryCodeToFlag,
@@ -13618,9 +15512,15 @@ function IconPicker({
13618
15512
  fieldInputAriaProps,
13619
15513
  phoneCountries,
13620
15514
  useAccentPreference,
15515
+ useClipboard,
13621
15516
  useContextMenu,
13622
15517
  useFieldShellAria,
15518
+ useHotkey,
15519
+ useHotkeyManager,
15520
+ useIntersectionObserver,
13623
15521
  useOpusTheme,
15522
+ usePortalHost,
15523
+ useResizeObserver,
13624
15524
  useToast,
13625
15525
  useTopNavigation,
13626
15526
  worldMapRegionIds