@ceed/ads 1.15.0 → 1.16.0-next.4

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.js CHANGED
@@ -4409,17 +4409,200 @@ var InsetDrawer = styled19(JoyDrawer)(({ theme }) => ({
4409
4409
  }
4410
4410
  }));
4411
4411
 
4412
+ // src/components/FilterableCheckboxGroup/FilterableCheckboxGroup.tsx
4413
+ import React30, { useCallback as useCallback13, useEffect as useEffect8, useMemo as useMemo12, useRef as useRef8, useState as useState10 } from "react";
4414
+ import { Input as Input2, Stack as Stack2 } from "@mui/joy";
4415
+ import SearchIcon from "@mui/icons-material/Search";
4416
+ import { useVirtualizer as useVirtualizer3 } from "@tanstack/react-virtual";
4417
+ function FilterableCheckboxGroup(props) {
4418
+ const { value, options, label, placeholder, helperText, size = "md", required, onChange, maxHeight = 300 } = props;
4419
+ const [searchTerm, setSearchTerm] = useState10("");
4420
+ const [sortedOptions, setSortedOptions] = useState10(options);
4421
+ const [internalValue, setInternalValue] = useControlledState(
4422
+ value,
4423
+ value ?? [],
4424
+ useCallback13((newValue) => onChange?.(newValue), [onChange])
4425
+ );
4426
+ const parentRef = useRef8(null);
4427
+ const isInitialSortRef = useRef8(false);
4428
+ const filteredOptions = useMemo12(() => {
4429
+ if (!searchTerm) return sortedOptions;
4430
+ return sortedOptions.filter((option) => option.label.toLowerCase().includes(searchTerm.toLowerCase()));
4431
+ }, [sortedOptions, searchTerm]);
4432
+ const itemSize = useMemo12(() => {
4433
+ switch (size) {
4434
+ case "sm":
4435
+ return 28;
4436
+ case "md":
4437
+ return 32;
4438
+ case "lg":
4439
+ return 36;
4440
+ }
4441
+ }, [size]);
4442
+ const noOptionsFontSize = useMemo12(() => {
4443
+ switch (size) {
4444
+ case "sm":
4445
+ return "14px";
4446
+ case "md":
4447
+ return "16px";
4448
+ case "lg":
4449
+ return "18px";
4450
+ }
4451
+ }, [size]);
4452
+ const virtualizer = useVirtualizer3({
4453
+ count: filteredOptions.length,
4454
+ estimateSize: () => itemSize,
4455
+ measureElement: (element) => element.clientHeight,
4456
+ getScrollElement: () => parentRef.current,
4457
+ overscan: 5
4458
+ });
4459
+ const items = virtualizer.getVirtualItems();
4460
+ useEffect8(() => {
4461
+ if (isInitialSortRef.current) return;
4462
+ const initialValue = value ?? [];
4463
+ const sorted = [...options].sort((a, b) => {
4464
+ const aSelected = initialValue.includes(a.value);
4465
+ const bSelected = initialValue.includes(b.value);
4466
+ if (aSelected !== bSelected) {
4467
+ return aSelected ? -1 : 1;
4468
+ }
4469
+ const aIsAlpha = /^[a-zA-Z]/.test(a.label);
4470
+ const bIsAlpha = /^[a-zA-Z]/.test(b.label);
4471
+ if (aIsAlpha !== bIsAlpha) {
4472
+ return aIsAlpha ? -1 : 1;
4473
+ }
4474
+ return a.label.localeCompare(b.label);
4475
+ });
4476
+ setSortedOptions(sorted);
4477
+ isInitialSortRef.current = true;
4478
+ }, [options, value]);
4479
+ useEffect8(() => {
4480
+ virtualizer.measure();
4481
+ }, [virtualizer, filteredOptions]);
4482
+ const handleSearchChange = useCallback13((event) => {
4483
+ setSearchTerm(event.target.value);
4484
+ }, []);
4485
+ const handleCheckboxChange = useCallback13(
4486
+ (optionValue) => (event) => {
4487
+ const checked = event.target.checked;
4488
+ const newValue = checked ? [...internalValue, optionValue] : internalValue.filter((v) => v !== optionValue);
4489
+ setInternalValue(newValue);
4490
+ },
4491
+ [internalValue, setInternalValue]
4492
+ );
4493
+ const handleSelectAll = useCallback13(
4494
+ (event) => {
4495
+ const checked = event.target.checked;
4496
+ if (checked) {
4497
+ setInternalValue(filteredOptions.map((option) => option.value));
4498
+ } else {
4499
+ setInternalValue([]);
4500
+ }
4501
+ },
4502
+ [filteredOptions, setInternalValue]
4503
+ );
4504
+ const isAllSelected = filteredOptions.length > 0 && filteredOptions.every((option) => internalValue.includes(option.value));
4505
+ const isIndeterminate = !isAllSelected && filteredOptions.some((option) => internalValue.includes(option.value));
4506
+ return /* @__PURE__ */ React30.createElement("div", { style: { width: "100%" } }, /* @__PURE__ */ React30.createElement(FormControl_default, { required, size }, label && /* @__PURE__ */ React30.createElement(FormLabel_default, null, label), /* @__PURE__ */ React30.createElement(
4507
+ Input2,
4508
+ {
4509
+ variant: "outlined",
4510
+ color: "neutral",
4511
+ placeholder,
4512
+ value: searchTerm,
4513
+ onChange: handleSearchChange,
4514
+ size,
4515
+ endDecorator: /* @__PURE__ */ React30.createElement(SearchIcon, null)
4516
+ }
4517
+ ), helperText && /* @__PURE__ */ React30.createElement(FormHelperText_default, null, helperText)), filteredOptions.length === 0 ? /* @__PURE__ */ React30.createElement(
4518
+ Stack2,
4519
+ {
4520
+ sx: {
4521
+ padding: "20px 12px",
4522
+ justifyContent: "center",
4523
+ alignItems: "center",
4524
+ fontSize: noOptionsFontSize,
4525
+ color: "#A2AAB8"
4526
+ }
4527
+ },
4528
+ "No options found."
4529
+ ) : /* @__PURE__ */ React30.createElement(
4530
+ "div",
4531
+ {
4532
+ ref: parentRef,
4533
+ style: {
4534
+ overflow: "auto",
4535
+ maxHeight: typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight,
4536
+ padding: "8px 0px",
4537
+ marginTop: "8px"
4538
+ }
4539
+ },
4540
+ !searchTerm && /* @__PURE__ */ React30.createElement(
4541
+ Checkbox_default,
4542
+ {
4543
+ label: "Select all",
4544
+ checked: isAllSelected,
4545
+ indeterminate: isIndeterminate,
4546
+ onChange: handleSelectAll,
4547
+ size,
4548
+ slotProps: {
4549
+ action: {
4550
+ sx: { top: 0, left: 0, bottom: 0, right: 0 }
4551
+ }
4552
+ },
4553
+ sx: { width: "100%", height: itemSize }
4554
+ }
4555
+ ),
4556
+ /* @__PURE__ */ React30.createElement(
4557
+ Stack2,
4558
+ {
4559
+ sx: {
4560
+ height: `${virtualizer.getTotalSize()}px`,
4561
+ position: "relative"
4562
+ }
4563
+ },
4564
+ items.map((virtualRow) => {
4565
+ const option = filteredOptions[virtualRow.index];
4566
+ return /* @__PURE__ */ React30.createElement(
4567
+ Checkbox_default,
4568
+ {
4569
+ key: virtualRow.key,
4570
+ label: option.label,
4571
+ checked: internalValue.includes(option.value),
4572
+ onChange: handleCheckboxChange(option.value),
4573
+ size,
4574
+ slotProps: {
4575
+ action: {
4576
+ sx: { top: 0, left: 0, bottom: 0, right: 0 }
4577
+ }
4578
+ },
4579
+ sx: {
4580
+ position: "absolute",
4581
+ top: 0,
4582
+ left: 0,
4583
+ width: "100%",
4584
+ height: `${virtualRow.size}px`,
4585
+ transform: `translateY(${virtualRow.start}px)`
4586
+ }
4587
+ }
4588
+ );
4589
+ })
4590
+ )
4591
+ ));
4592
+ }
4593
+ FilterableCheckboxGroup.displayName = "FilterableCheckboxGroup";
4594
+
4412
4595
  // src/components/FilterMenu/FilterMenu.tsx
4413
- import React39, { useCallback as useCallback21 } from "react";
4414
- import { Button as Button2, Stack as Stack10 } from "@mui/joy";
4596
+ import React41, { useCallback as useCallback23 } from "react";
4597
+ import { Button as Button2, Stack as Stack12 } from "@mui/joy";
4415
4598
 
4416
4599
  // src/components/FilterMenu/components/CheckboxGroup.tsx
4417
- import React30, { useCallback as useCallback13 } from "react";
4418
- import { Stack as Stack2 } from "@mui/joy";
4600
+ import React31, { useCallback as useCallback14 } from "react";
4601
+ import { Stack as Stack3 } from "@mui/joy";
4419
4602
  function CheckboxGroup(props) {
4420
4603
  const { id, label, options, value, onChange, hidden } = props;
4421
4604
  const [internalValue, setInternalValue] = useControlledState(value, [], onChange);
4422
- const handleCheckboxChange = useCallback13(
4605
+ const handleCheckboxChange = useCallback14(
4423
4606
  (optionValue) => (event) => {
4424
4607
  const checked = event.target.checked;
4425
4608
  let newValue;
@@ -4435,7 +4618,7 @@ function CheckboxGroup(props) {
4435
4618
  if (hidden) {
4436
4619
  return null;
4437
4620
  }
4438
- return /* @__PURE__ */ React30.createElement(Stack2, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React30.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), options.map((option) => /* @__PURE__ */ React30.createElement(
4621
+ return /* @__PURE__ */ React31.createElement(Stack3, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React31.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), options.map((option) => /* @__PURE__ */ React31.createElement(
4439
4622
  Checkbox_default,
4440
4623
  {
4441
4624
  key: `${id}-${option.value}`,
@@ -4447,8 +4630,36 @@ function CheckboxGroup(props) {
4447
4630
  }
4448
4631
  CheckboxGroup.displayName = "CheckboxGroup";
4449
4632
 
4633
+ // src/components/FilterMenu/components/FilterableCheckboxGroup.tsx
4634
+ import React32, { useCallback as useCallback15 } from "react";
4635
+ import { Stack as Stack4 } from "@mui/joy";
4636
+ function FilterableCheckboxGroup2(props) {
4637
+ const { id, label, options, value, onChange, hidden, placeholder, maxHeight } = props;
4638
+ const [internalValue, setInternalValue] = useControlledState(value, [], onChange);
4639
+ const handleChange = useCallback15(
4640
+ (newValue) => {
4641
+ setInternalValue(newValue);
4642
+ },
4643
+ [setInternalValue]
4644
+ );
4645
+ if (hidden) {
4646
+ return null;
4647
+ }
4648
+ return /* @__PURE__ */ React32.createElement(Stack4, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React32.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React32.createElement(
4649
+ FilterableCheckboxGroup,
4650
+ {
4651
+ value: internalValue,
4652
+ onChange: handleChange,
4653
+ options,
4654
+ placeholder,
4655
+ maxHeight
4656
+ }
4657
+ ));
4658
+ }
4659
+ FilterableCheckboxGroup2.displayName = "FilterableCheckboxGroup";
4660
+
4450
4661
  // src/components/FilterMenu/components/RadioGroup.tsx
4451
- import React31, { useCallback as useCallback14 } from "react";
4662
+ import React33, { useCallback as useCallback16 } from "react";
4452
4663
 
4453
4664
  // src/components/Radio/Radio.tsx
4454
4665
  import { Radio as JoyRadio, RadioGroup as JoyRadioGroup } from "@mui/joy";
@@ -4461,11 +4672,11 @@ var RadioGroup = MotionRadioGroup;
4461
4672
  RadioGroup.displayName = "RadioGroup";
4462
4673
 
4463
4674
  // src/components/FilterMenu/components/RadioGroup.tsx
4464
- import { Stack as Stack3 } from "@mui/joy";
4675
+ import { Stack as Stack5 } from "@mui/joy";
4465
4676
  function RadioGroup2(props) {
4466
4677
  const { id, label, options, value, onChange, hidden } = props;
4467
4678
  const [internalValue, setInternalValue] = useControlledState(value, value ?? "", onChange);
4468
- const handleRadioChange = useCallback14(
4679
+ const handleRadioChange = useCallback16(
4469
4680
  (event) => {
4470
4681
  const newValue = event.target.value;
4471
4682
  const option = options.find((opt) => opt.value.toString() === newValue);
@@ -4477,13 +4688,13 @@ function RadioGroup2(props) {
4477
4688
  if (hidden) {
4478
4689
  return null;
4479
4690
  }
4480
- return /* @__PURE__ */ React31.createElement(Stack3, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React31.createElement(Stack3, { spacing: 1 }, /* @__PURE__ */ React31.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label)), /* @__PURE__ */ React31.createElement(RadioGroup, { name: id, value: internalValue?.toString(), onChange: handleRadioChange }, options.map((option) => /* @__PURE__ */ React31.createElement(Radio, { key: `${id}-${option.value}`, value: option.value.toString(), label: option.label }))));
4691
+ return /* @__PURE__ */ React33.createElement(Stack5, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React33.createElement(Stack5, { spacing: 1 }, /* @__PURE__ */ React33.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label)), /* @__PURE__ */ React33.createElement(RadioGroup, { name: id, value: internalValue?.toString(), onChange: handleRadioChange }, options.map((option) => /* @__PURE__ */ React33.createElement(Radio, { key: `${id}-${option.value}`, value: option.value.toString(), label: option.label }))));
4481
4692
  }
4482
4693
  RadioGroup2.displayName = "RadioGroup";
4483
4694
 
4484
4695
  // src/components/FilterMenu/components/DateRange.tsx
4485
- import React32, { useCallback as useCallback15, useMemo as useMemo12, useState as useState10, useEffect as useEffect8 } from "react";
4486
- import { Stack as Stack4 } from "@mui/joy";
4696
+ import React34, { useCallback as useCallback17, useMemo as useMemo13, useState as useState11, useEffect as useEffect9 } from "react";
4697
+ import { Stack as Stack6 } from "@mui/joy";
4487
4698
  function DateRange(props) {
4488
4699
  const {
4489
4700
  id,
@@ -4501,8 +4712,8 @@ function DateRange(props) {
4501
4712
  hideClearButton
4502
4713
  } = props;
4503
4714
  const [internalValue, setInternalValue] = useControlledState(value, null, onChange);
4504
- const [selectedOption, setSelectedOption] = useState10("all-time");
4505
- const dateRangeOptions = useMemo12(
4715
+ const [selectedOption, setSelectedOption] = useState11("all-time");
4716
+ const dateRangeOptions = useMemo13(
4506
4717
  () => [
4507
4718
  { label: "All Time", value: "all-time" },
4508
4719
  { label: "This Month", value: "this-month" },
@@ -4512,7 +4723,7 @@ function DateRange(props) {
4512
4723
  ],
4513
4724
  []
4514
4725
  );
4515
- const getDateRangeForOption = useCallback15(
4726
+ const getDateRangeForOption = useCallback17(
4516
4727
  (option) => {
4517
4728
  const now = /* @__PURE__ */ new Date();
4518
4729
  const currentYear = now.getFullYear();
@@ -4551,7 +4762,7 @@ function DateRange(props) {
4551
4762
  },
4552
4763
  [internalValue]
4553
4764
  );
4554
- const determineOptionFromValue = useCallback15(
4765
+ const determineOptionFromValue = useCallback17(
4555
4766
  (value2) => {
4556
4767
  if (!value2) {
4557
4768
  return "all-time";
@@ -4567,17 +4778,17 @@ function DateRange(props) {
4567
4778
  },
4568
4779
  [getDateRangeForOption]
4569
4780
  );
4570
- const customDateRangeValue = useMemo12(() => {
4781
+ const customDateRangeValue = useMemo13(() => {
4571
4782
  if (selectedOption === "custom" && internalValue) {
4572
4783
  return `${internalValue[0]} - ${internalValue[1]}`;
4573
4784
  }
4574
4785
  return "";
4575
4786
  }, [selectedOption, internalValue]);
4576
- useEffect8(() => {
4787
+ useEffect9(() => {
4577
4788
  const newOption = determineOptionFromValue(internalValue);
4578
4789
  setSelectedOption(newOption);
4579
4790
  }, [internalValue, determineOptionFromValue]);
4580
- const handleOptionChange = useCallback15(
4791
+ const handleOptionChange = useCallback17(
4581
4792
  (event) => {
4582
4793
  const newOption = event.target.value;
4583
4794
  setSelectedOption(newOption);
@@ -4586,7 +4797,7 @@ function DateRange(props) {
4586
4797
  },
4587
4798
  [getDateRangeForOption, setInternalValue]
4588
4799
  );
4589
- const handleCustomDateChange = useCallback15(
4800
+ const handleCustomDateChange = useCallback17(
4590
4801
  (event) => {
4591
4802
  const dateRangeString = event.target.value;
4592
4803
  if (dateRangeString && dateRangeString.includes(" - ")) {
@@ -4604,7 +4815,7 @@ function DateRange(props) {
4604
4815
  if (hidden) {
4605
4816
  return null;
4606
4817
  }
4607
- return /* @__PURE__ */ React32.createElement(Stack4, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React32.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React32.createElement(RadioGroup, { name: `${id}-options`, value: selectedOption, onChange: handleOptionChange }, dateRangeOptions.map((option) => /* @__PURE__ */ React32.createElement(Radio, { key: `${id}-${option.value}`, value: option.value, label: option.label }))), selectedOption === "custom" && /* @__PURE__ */ React32.createElement(
4818
+ return /* @__PURE__ */ React34.createElement(Stack6, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React34.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React34.createElement(RadioGroup, { name: `${id}-options`, value: selectedOption, onChange: handleOptionChange }, dateRangeOptions.map((option) => /* @__PURE__ */ React34.createElement(Radio, { key: `${id}-${option.value}`, value: option.value, label: option.label }))), selectedOption === "custom" && /* @__PURE__ */ React34.createElement(
4608
4819
  DateRangePicker,
4609
4820
  {
4610
4821
  value: customDateRangeValue,
@@ -4623,12 +4834,12 @@ function DateRange(props) {
4623
4834
  DateRange.displayName = "DateRange";
4624
4835
 
4625
4836
  // src/components/FilterMenu/components/CurrencyInput.tsx
4626
- import React33, { useCallback as useCallback16 } from "react";
4627
- import { Stack as Stack5 } from "@mui/joy";
4837
+ import React35, { useCallback as useCallback18 } from "react";
4838
+ import { Stack as Stack7 } from "@mui/joy";
4628
4839
  function CurrencyInput3(props) {
4629
4840
  const { id, label, value, onChange, hidden, max, placeholder, useMinorUnit, currency = "USD" } = props;
4630
4841
  const [internalValue, setInternalValue] = useControlledState(value, value, onChange);
4631
- const handleCurrencyChange = useCallback16(
4842
+ const handleCurrencyChange = useCallback18(
4632
4843
  (event) => {
4633
4844
  const newValue = event.target.value;
4634
4845
  setInternalValue(newValue);
@@ -4638,7 +4849,7 @@ function CurrencyInput3(props) {
4638
4849
  if (hidden) {
4639
4850
  return null;
4640
4851
  }
4641
- return /* @__PURE__ */ React33.createElement(Stack5, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React33.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React33.createElement(
4852
+ return /* @__PURE__ */ React35.createElement(Stack7, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React35.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React35.createElement(
4642
4853
  CurrencyInput,
4643
4854
  {
4644
4855
  value: internalValue,
@@ -4654,14 +4865,14 @@ function CurrencyInput3(props) {
4654
4865
  CurrencyInput3.displayName = "CurrencyInput";
4655
4866
 
4656
4867
  // src/components/FilterMenu/components/CurrencyRange.tsx
4657
- import React34, { useCallback as useCallback17 } from "react";
4658
- import { Stack as Stack6 } from "@mui/joy";
4868
+ import React36, { useCallback as useCallback19 } from "react";
4869
+ import { Stack as Stack8 } from "@mui/joy";
4659
4870
  function CurrencyRange(props) {
4660
4871
  const { id, label, value, onChange, hidden, max, placeholder, useMinorUnit, currency = "USD" } = props;
4661
4872
  const [internalValue, setInternalValue] = useControlledState(value, null, onChange);
4662
4873
  const minValue = internalValue?.[0];
4663
4874
  const maxValue = internalValue?.[1];
4664
- const handleMinChange = useCallback17(
4875
+ const handleMinChange = useCallback19(
4665
4876
  (event) => {
4666
4877
  const newMinValue = event.target.value;
4667
4878
  const currentMaxValue = maxValue;
@@ -4675,7 +4886,7 @@ function CurrencyRange(props) {
4675
4886
  },
4676
4887
  [maxValue, setInternalValue]
4677
4888
  );
4678
- const handleMaxChange = useCallback17(
4889
+ const handleMaxChange = useCallback19(
4679
4890
  (event) => {
4680
4891
  const newMaxValue = event.target.value;
4681
4892
  const currentMinValue = minValue;
@@ -4692,7 +4903,7 @@ function CurrencyRange(props) {
4692
4903
  if (hidden) {
4693
4904
  return null;
4694
4905
  }
4695
- return /* @__PURE__ */ React34.createElement(Stack6, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React34.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React34.createElement(Stack6, { direction: "row", spacing: 2, alignItems: "flex-end" }, /* @__PURE__ */ React34.createElement(
4906
+ return /* @__PURE__ */ React36.createElement(Stack8, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React36.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React36.createElement(Stack8, { direction: "row", spacing: 2, alignItems: "flex-end" }, /* @__PURE__ */ React36.createElement(
4696
4907
  CurrencyInput,
4697
4908
  {
4698
4909
  label: "Minimum",
@@ -4705,7 +4916,7 @@ function CurrencyRange(props) {
4705
4916
  "aria-labelledby": label ? id : void 0,
4706
4917
  "aria-label": "Minimum amount"
4707
4918
  }
4708
- ), /* @__PURE__ */ React34.createElement(
4919
+ ), /* @__PURE__ */ React36.createElement(
4709
4920
  CurrencyInput,
4710
4921
  {
4711
4922
  label: "Maximum",
@@ -4723,20 +4934,20 @@ function CurrencyRange(props) {
4723
4934
  CurrencyRange.displayName = "CurrencyRange";
4724
4935
 
4725
4936
  // src/components/FilterMenu/components/PercentageInput.tsx
4726
- import React36 from "react";
4727
- import { Stack as Stack7, Typography as Typography2 } from "@mui/joy";
4937
+ import React38 from "react";
4938
+ import { Stack as Stack9, Typography as Typography2 } from "@mui/joy";
4728
4939
 
4729
4940
  // src/components/PercentageInput/PercentageInput.tsx
4730
- import React35, { useCallback as useCallback18, useMemo as useMemo13, useState as useState11 } from "react";
4941
+ import React37, { useCallback as useCallback20, useMemo as useMemo14, useState as useState12 } from "react";
4731
4942
  import { NumericFormat as NumericFormat2 } from "react-number-format";
4732
4943
  import { styled as styled20, useThemeProps as useThemeProps6 } from "@mui/joy";
4733
4944
  var padDecimal = (value, decimalScale) => {
4734
4945
  const [integer, decimal = ""] = `${value}`.split(".");
4735
4946
  return Number(`${integer}${decimal.padEnd(decimalScale, "0")}`);
4736
4947
  };
4737
- var TextMaskAdapter7 = React35.forwardRef(function TextMaskAdapter8(props, ref) {
4948
+ var TextMaskAdapter7 = React37.forwardRef(function TextMaskAdapter8(props, ref) {
4738
4949
  const { onChange, min, max, ...innerProps } = props;
4739
- return /* @__PURE__ */ React35.createElement(
4950
+ return /* @__PURE__ */ React37.createElement(
4740
4951
  NumericFormat2,
4741
4952
  {
4742
4953
  ...innerProps,
@@ -4761,7 +4972,7 @@ var PercentageInputRoot = styled20(Input_default, {
4761
4972
  slot: "Root",
4762
4973
  overridesResolver: (props, styles) => styles.root
4763
4974
  })({});
4764
- var PercentageInput = React35.forwardRef(
4975
+ var PercentageInput = React37.forwardRef(
4765
4976
  function PercentageInput2(inProps, ref) {
4766
4977
  const props = useThemeProps6({ props: inProps, name: "PercentageInput" });
4767
4978
  const {
@@ -4784,18 +4995,18 @@ var PercentageInput = React35.forwardRef(
4784
4995
  const [_value, setValue] = useControlledState(
4785
4996
  props.value,
4786
4997
  props.defaultValue,
4787
- useCallback18((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
4998
+ useCallback20((value2) => onChange?.({ target: { name, value: value2 } }), [onChange, name])
4788
4999
  );
4789
- const [internalError, setInternalError] = useState11(
5000
+ const [internalError, setInternalError] = useState12(
4790
5001
  max && _value && _value > max || min && _value && _value < min
4791
5002
  );
4792
- const value = useMemo13(() => {
5003
+ const value = useMemo14(() => {
4793
5004
  if (_value && useMinorUnit) {
4794
5005
  return _value / Math.pow(10, maxDecimalScale);
4795
5006
  }
4796
5007
  return _value;
4797
5008
  }, [_value, useMinorUnit, maxDecimalScale]);
4798
- const handleChange = useCallback18(
5009
+ const handleChange = useCallback20(
4799
5010
  (event) => {
4800
5011
  if (event.target.value === "") {
4801
5012
  setValue(void 0);
@@ -4812,7 +5023,7 @@ var PercentageInput = React35.forwardRef(
4812
5023
  },
4813
5024
  [setValue, useMinorUnit, maxDecimalScale, min, max]
4814
5025
  );
4815
- return /* @__PURE__ */ React35.createElement(
5026
+ return /* @__PURE__ */ React37.createElement(
4816
5027
  PercentageInputRoot,
4817
5028
  {
4818
5029
  ...innerProps,
@@ -4859,7 +5070,7 @@ var PercentageInput3 = ({
4859
5070
  if (hidden) {
4860
5071
  return null;
4861
5072
  }
4862
- return /* @__PURE__ */ React36.createElement(Stack7, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React36.createElement(Typography2, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React36.createElement(
5073
+ return /* @__PURE__ */ React38.createElement(Stack9, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React38.createElement(Typography2, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React38.createElement(
4863
5074
  PercentageInput,
4864
5075
  {
4865
5076
  value: _value,
@@ -4874,8 +5085,8 @@ var PercentageInput3 = ({
4874
5085
  };
4875
5086
 
4876
5087
  // src/components/FilterMenu/components/PercentageRange.tsx
4877
- import React37, { useCallback as useCallback19 } from "react";
4878
- import { Stack as Stack8 } from "@mui/joy";
5088
+ import React39, { useCallback as useCallback21 } from "react";
5089
+ import { Stack as Stack10 } from "@mui/joy";
4879
5090
  function PercentageRange(props) {
4880
5091
  const { id, label, value, onChange, hidden, useMinorUnit, maxDecimalScale, min, max } = props;
4881
5092
  const [internalValue, setInternalValue] = useControlledState(
@@ -4885,7 +5096,7 @@ function PercentageRange(props) {
4885
5096
  );
4886
5097
  const minValue = internalValue?.[0];
4887
5098
  const maxValue = internalValue?.[1];
4888
- const handleMinChange = useCallback19(
5099
+ const handleMinChange = useCallback21(
4889
5100
  (event) => {
4890
5101
  const newMinValue = event.target.value;
4891
5102
  const currentMaxValue = maxValue;
@@ -4897,7 +5108,7 @@ function PercentageRange(props) {
4897
5108
  },
4898
5109
  [maxValue, setInternalValue]
4899
5110
  );
4900
- const handleMaxChange = useCallback19(
5111
+ const handleMaxChange = useCallback21(
4901
5112
  (event) => {
4902
5113
  const newMaxValue = event.target.value;
4903
5114
  const currentMinValue = minValue;
@@ -4912,7 +5123,7 @@ function PercentageRange(props) {
4912
5123
  if (hidden) {
4913
5124
  return null;
4914
5125
  }
4915
- return /* @__PURE__ */ React37.createElement(Stack8, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React37.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React37.createElement(Stack8, { direction: "row", spacing: 2, alignItems: "flex-end" }, /* @__PURE__ */ React37.createElement(
5126
+ return /* @__PURE__ */ React39.createElement(Stack10, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React39.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React39.createElement(Stack10, { direction: "row", spacing: 2, alignItems: "flex-end" }, /* @__PURE__ */ React39.createElement(
4916
5127
  PercentageInput,
4917
5128
  {
4918
5129
  label: "Minimum",
@@ -4926,7 +5137,7 @@ function PercentageRange(props) {
4926
5137
  "aria-label": "Minimum percentage",
4927
5138
  placeholder: "0%"
4928
5139
  }
4929
- ), /* @__PURE__ */ React37.createElement(
5140
+ ), /* @__PURE__ */ React39.createElement(
4930
5141
  PercentageInput,
4931
5142
  {
4932
5143
  label: "Maximum",
@@ -4945,13 +5156,13 @@ function PercentageRange(props) {
4945
5156
  PercentageRange.displayName = "PercentageRange";
4946
5157
 
4947
5158
  // src/components/FilterMenu/components/Autocomplete.tsx
4948
- import React38, { useCallback as useCallback20 } from "react";
4949
- import { Stack as Stack9 } from "@mui/joy";
5159
+ import React40, { useCallback as useCallback22 } from "react";
5160
+ import { Stack as Stack11 } from "@mui/joy";
4950
5161
  function Autocomplete2(props) {
4951
5162
  const { id, label, value, onChange, options, multiple, hidden, placeholder } = props;
4952
5163
  const [internalValue, setInternalValue] = useControlledState(value, void 0, onChange);
4953
5164
  const autocompleteValue = typeof internalValue === "string" || typeof internalValue === "number" ? String(internalValue) : void 0;
4954
- const handleChange = useCallback20(
5165
+ const handleChange = useCallback22(
4955
5166
  (event) => {
4956
5167
  const val = event.target.value;
4957
5168
  if (val) {
@@ -4966,7 +5177,7 @@ function Autocomplete2(props) {
4966
5177
  if (hidden) {
4967
5178
  return null;
4968
5179
  }
4969
- return /* @__PURE__ */ React38.createElement(Stack9, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React38.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React38.createElement(
5180
+ return /* @__PURE__ */ React40.createElement(Stack11, { spacing: 3, role: "group", "aria-labelledby": id }, !!label && /* @__PURE__ */ React40.createElement(Typography_default, { id, level: "title-sm", component: "label", textColor: "text.tertiary" }, label), /* @__PURE__ */ React40.createElement(
4970
5181
  Autocomplete,
4971
5182
  {
4972
5183
  value: autocompleteValue,
@@ -4983,6 +5194,7 @@ Autocomplete2.displayName = "Autocomplete";
4983
5194
  // src/components/FilterMenu/FilterMenu.tsx
4984
5195
  var componentMap = {
4985
5196
  "checkbox-group": CheckboxGroup,
5197
+ "filterable-checkbox-group": FilterableCheckboxGroup2,
4986
5198
  "radio-group": RadioGroup2,
4987
5199
  "date-range": DateRange,
4988
5200
  "currency-input": CurrencyInput3,
@@ -4999,7 +5211,7 @@ function FilterMenu(props) {
4999
5211
  void 0
5000
5212
  // onChange는 Apply 버튼에서만 호출
5001
5213
  );
5002
- const handleFilterChange = useCallback21(
5214
+ const handleFilterChange = useCallback23(
5003
5215
  (filterId, value) => {
5004
5216
  setInternalValues((prev) => ({
5005
5217
  ...prev,
@@ -5008,17 +5220,17 @@ function FilterMenu(props) {
5008
5220
  },
5009
5221
  [setInternalValues]
5010
5222
  );
5011
- const handleApply = useCallback21(() => {
5223
+ const handleApply = useCallback23(() => {
5012
5224
  onChange?.(internalValues);
5013
5225
  onClose?.();
5014
5226
  }, [onChange, onClose, internalValues]);
5015
- const handleClear = useCallback21(() => {
5227
+ const handleClear = useCallback23(() => {
5016
5228
  const clearedValues = resetValues || {};
5017
5229
  setInternalValues(clearedValues);
5018
5230
  onChange?.(clearedValues);
5019
5231
  onClose?.();
5020
5232
  }, [resetValues, setInternalValues, onChange, onClose]);
5021
- return /* @__PURE__ */ React39.createElement(
5233
+ return /* @__PURE__ */ React41.createElement(
5022
5234
  ModalDialog,
5023
5235
  {
5024
5236
  sx: {
@@ -5028,9 +5240,9 @@ function FilterMenu(props) {
5028
5240
  top: "initial"
5029
5241
  }
5030
5242
  },
5031
- /* @__PURE__ */ React39.createElement(DialogContent, { sx: { paddingTop: 5 } }, /* @__PURE__ */ React39.createElement(Stack10, { spacing: 6 }, filters?.map((filter) => {
5243
+ /* @__PURE__ */ React41.createElement(DialogContent, { sx: { paddingTop: 5 } }, /* @__PURE__ */ React41.createElement(Stack12, { spacing: 6 }, filters?.map((filter) => {
5032
5244
  const FilterComponent = componentMap[filter.type];
5033
- return FilterComponent ? /* @__PURE__ */ React39.createElement(
5245
+ return FilterComponent ? /* @__PURE__ */ React41.createElement(
5034
5246
  FilterComponent,
5035
5247
  {
5036
5248
  key: filter.id,
@@ -5042,14 +5254,14 @@ function FilterMenu(props) {
5042
5254
  }
5043
5255
  ) : null;
5044
5256
  }))),
5045
- /* @__PURE__ */ React39.createElement(DialogActions, { sx: { justifyContent: "space-between" } }, useClear && filters?.length === 1 && /* @__PURE__ */ React39.createElement(Button2, { variant: "plain", color: "neutral", size: "md", onClick: handleClear }, "Clear"), useReset && !useClear && /* @__PURE__ */ React39.createElement(Button2, { variant: "plain", color: "neutral", size: "md", onClick: handleClear }, "Reset"), /* @__PURE__ */ React39.createElement(Button2, { variant: "solid", color: "primary", size: "md", onClick: handleApply }, "Apply"))
5257
+ /* @__PURE__ */ React41.createElement(DialogActions, { sx: { justifyContent: "space-between" } }, useClear && filters?.length === 1 && /* @__PURE__ */ React41.createElement(Button2, { variant: "plain", color: "neutral", size: "md", onClick: handleClear }, "Clear"), useReset && !useClear && /* @__PURE__ */ React41.createElement(Button2, { variant: "plain", color: "neutral", size: "md", onClick: handleClear }, "Reset"), /* @__PURE__ */ React41.createElement(Button2, { variant: "solid", color: "primary", size: "md", onClick: handleApply }, "Apply"))
5046
5258
  );
5047
5259
  }
5048
5260
  FilterMenu.displayName = "FilterMenu";
5049
5261
 
5050
5262
  // src/components/Uploader/Uploader.tsx
5051
- import React40, { useCallback as useCallback22, useEffect as useEffect9, useMemo as useMemo14, useRef as useRef8, useState as useState12 } from "react";
5052
- import { styled as styled21, Input as Input2 } from "@mui/joy";
5263
+ import React42, { useCallback as useCallback24, useEffect as useEffect10, useMemo as useMemo15, useRef as useRef9, useState as useState13 } from "react";
5264
+ import { styled as styled21, Input as Input3 } from "@mui/joy";
5053
5265
  import MuiFileUploadIcon from "@mui/icons-material/CloudUploadRounded";
5054
5266
  import MuiUploadFileIcon from "@mui/icons-material/UploadFileRounded";
5055
5267
  import MuiClearIcon from "@mui/icons-material/ClearRounded";
@@ -5071,7 +5283,7 @@ var esmFiles = {
5071
5283
  "@atlaskit/pragmatic-drag-and-drop/dist/esm/entry-point/prevent-unhandled.js"
5072
5284
  )
5073
5285
  };
5074
- var VisuallyHiddenInput = styled21(Input2)({
5286
+ var VisuallyHiddenInput = styled21(Input3)({
5075
5287
  width: "1px",
5076
5288
  height: "1px",
5077
5289
  overflow: "hidden",
@@ -5125,7 +5337,7 @@ var getFileSize = (n) => {
5125
5337
  };
5126
5338
  var Preview = (props) => {
5127
5339
  const { files, uploaded, onDelete } = props;
5128
- return /* @__PURE__ */ React40.createElement(PreviewRoot, { gap: 1 }, [...uploaded, ...files].map((file) => /* @__PURE__ */ React40.createElement(UploadCard, { key: file.name, size: "sm", color: "neutral" }, /* @__PURE__ */ React40.createElement(Stack_default, { direction: "row", alignItems: "center", gap: 2 }, /* @__PURE__ */ React40.createElement(UploadFileIcon, null), /* @__PURE__ */ React40.createElement(Stack_default, { flex: "1", sx: { overflow: "hidden" } }, /* @__PURE__ */ React40.createElement(
5340
+ return /* @__PURE__ */ React42.createElement(PreviewRoot, { gap: 1 }, [...uploaded, ...files].map((file) => /* @__PURE__ */ React42.createElement(UploadCard, { key: file.name, size: "sm", color: "neutral" }, /* @__PURE__ */ React42.createElement(Stack_default, { direction: "row", alignItems: "center", gap: 2 }, /* @__PURE__ */ React42.createElement(UploadFileIcon, null), /* @__PURE__ */ React42.createElement(Stack_default, { flex: "1", sx: { overflow: "hidden" } }, /* @__PURE__ */ React42.createElement(
5129
5341
  Typography_default,
5130
5342
  {
5131
5343
  level: "body-sm",
@@ -5137,7 +5349,7 @@ var Preview = (props) => {
5137
5349
  }
5138
5350
  },
5139
5351
  file.name
5140
- ), !!file.size && /* @__PURE__ */ React40.createElement(Typography_default, { level: "body-xs", fontWeight: "300", lineHeight: "1.33", textColor: "text.tertiary" }, getFileSize(file.size))), /* @__PURE__ */ React40.createElement(IconButton_default, { onClick: () => onDelete?.(file) }, /* @__PURE__ */ React40.createElement(ClearIcon2, null))))));
5352
+ ), !!file.size && /* @__PURE__ */ React42.createElement(Typography_default, { level: "body-xs", fontWeight: "300", lineHeight: "1.33", textColor: "text.tertiary" }, getFileSize(file.size))), /* @__PURE__ */ React42.createElement(IconButton_default, { onClick: () => onDelete?.(file) }, /* @__PURE__ */ React42.createElement(ClearIcon2, null))))));
5141
5353
  };
5142
5354
  var UploaderRoot = styled21(Stack_default, {
5143
5355
  name: "Uploader",
@@ -5180,7 +5392,7 @@ var UploaderIcon = styled21(MuiFileUploadIcon, {
5180
5392
  }
5181
5393
  })
5182
5394
  );
5183
- var Uploader = React40.memo(
5395
+ var Uploader = React42.memo(
5184
5396
  (props) => {
5185
5397
  const {
5186
5398
  accept,
@@ -5197,14 +5409,14 @@ var Uploader = React40.memo(
5197
5409
  error: errorProp,
5198
5410
  helperText: helperTextProp
5199
5411
  } = props;
5200
- const dropZoneRef = useRef8(null);
5201
- const inputRef = useRef8(null);
5202
- const [errorText, setErrorText] = useState12();
5203
- const [files, setFiles] = useState12([]);
5204
- const [uploaded, setUploaded] = useState12(props.uploaded || []);
5205
- const [previewState, setPreviewState] = useState12("idle");
5206
- const accepts = useMemo14(() => accept.split(",").map((accept2) => accept2.trim()), [accept]);
5207
- const parsedAccepts = useMemo14(
5412
+ const dropZoneRef = useRef9(null);
5413
+ const inputRef = useRef9(null);
5414
+ const [errorText, setErrorText] = useState13();
5415
+ const [files, setFiles] = useState13([]);
5416
+ const [uploaded, setUploaded] = useState13(props.uploaded || []);
5417
+ const [previewState, setPreviewState] = useState13("idle");
5418
+ const accepts = useMemo15(() => accept.split(",").map((accept2) => accept2.trim()), [accept]);
5419
+ const parsedAccepts = useMemo15(
5208
5420
  () => accepts.flatMap((type) => {
5209
5421
  if (["image/*", "video/*", "audio/*"].includes(type)) {
5210
5422
  return ALL_EXTENSIONS_BY_TYPE[type];
@@ -5213,7 +5425,7 @@ var Uploader = React40.memo(
5213
5425
  }),
5214
5426
  [accepts]
5215
5427
  );
5216
- const helperText = useMemo14(() => {
5428
+ const helperText = useMemo15(() => {
5217
5429
  if (helperTextProp) {
5218
5430
  return helperTextProp;
5219
5431
  }
@@ -5243,12 +5455,12 @@ var Uploader = React40.memo(
5243
5455
  }
5244
5456
  return helperTexts.join(", ");
5245
5457
  }, [accepts, maxFileTotalSize, maxCount, helperTextProp]);
5246
- const error = useMemo14(() => !!errorText || errorProp, [errorProp, errorText]);
5247
- const showDropZone = useMemo14(
5458
+ const error = useMemo15(() => !!errorText || errorProp, [errorProp, errorText]);
5459
+ const showDropZone = useMemo15(
5248
5460
  () => !maxCount || maxCount && [...uploaded, ...files].length !== maxCount,
5249
5461
  [files, maxCount, uploaded]
5250
5462
  );
5251
- const addFiles = useCallback22(
5463
+ const addFiles = useCallback24(
5252
5464
  (uploads) => {
5253
5465
  try {
5254
5466
  const types = parsedAccepts.map((type) => type.replace(".", "")) || [];
@@ -5293,7 +5505,7 @@ var Uploader = React40.memo(
5293
5505
  },
5294
5506
  [files, uploaded, maxCount, parsedAccepts, maxFileSize, maxFileTotalSize, name, onChange]
5295
5507
  );
5296
- useEffect9(() => {
5508
+ useEffect10(() => {
5297
5509
  if (!dropZoneRef.current || disabled) {
5298
5510
  return;
5299
5511
  }
@@ -5331,7 +5543,7 @@ var Uploader = React40.memo(
5331
5543
  );
5332
5544
  return () => cleanup?.();
5333
5545
  }, [disabled, addFiles]);
5334
- useEffect9(() => {
5546
+ useEffect10(() => {
5335
5547
  if (inputRef.current && minCount) {
5336
5548
  if (files.length < minCount) {
5337
5549
  inputRef.current.setCustomValidity(`At least ${minCount} files are required.`);
@@ -5340,14 +5552,14 @@ var Uploader = React40.memo(
5340
5552
  }
5341
5553
  }
5342
5554
  }, [inputRef, files, minCount]);
5343
- const handleFileChanged = useCallback22(
5555
+ const handleFileChanged = useCallback24(
5344
5556
  (event) => {
5345
5557
  const files2 = Array.from(event.target.files || []);
5346
5558
  addFiles(files2);
5347
5559
  },
5348
5560
  [addFiles]
5349
5561
  );
5350
- const handleDeleteFile = useCallback22(
5562
+ const handleDeleteFile = useCallback24(
5351
5563
  (deletedFile) => {
5352
5564
  if (deletedFile instanceof File) {
5353
5565
  setFiles((current) => {
@@ -5367,10 +5579,10 @@ var Uploader = React40.memo(
5367
5579
  },
5368
5580
  [name, onChange, onDelete]
5369
5581
  );
5370
- const handleUploaderButtonClick = useCallback22(() => {
5582
+ const handleUploaderButtonClick = useCallback24(() => {
5371
5583
  inputRef.current?.click();
5372
5584
  }, []);
5373
- const uploader = /* @__PURE__ */ React40.createElement(
5585
+ const uploader = /* @__PURE__ */ React42.createElement(
5374
5586
  FileDropZone,
5375
5587
  {
5376
5588
  state: previewState,
@@ -5379,8 +5591,8 @@ var Uploader = React40.memo(
5379
5591
  ref: dropZoneRef,
5380
5592
  onClick: handleUploaderButtonClick
5381
5593
  },
5382
- /* @__PURE__ */ React40.createElement(Stack_default, { alignItems: "center", gap: 1 }, /* @__PURE__ */ React40.createElement(UploaderIcon, { state: previewState, error: !!(error || errorText), disabled })),
5383
- /* @__PURE__ */ React40.createElement(
5594
+ /* @__PURE__ */ React42.createElement(Stack_default, { alignItems: "center", gap: 1 }, /* @__PURE__ */ React42.createElement(UploaderIcon, { state: previewState, error: !!(error || errorText), disabled })),
5595
+ /* @__PURE__ */ React42.createElement(
5384
5596
  VisuallyHiddenInput,
5385
5597
  {
5386
5598
  disabled,
@@ -5403,7 +5615,7 @@ var Uploader = React40.memo(
5403
5615
  }
5404
5616
  )
5405
5617
  );
5406
- return /* @__PURE__ */ React40.createElement(UploaderRoot, null, showDropZone && /* @__PURE__ */ React40.createElement(FormControl_default, { size, error: !!(error || errorText), disabled, required: !!minCount }, label && /* @__PURE__ */ React40.createElement(FormLabel_default, null, label), uploader, /* @__PURE__ */ React40.createElement(FormHelperText_default, null, /* @__PURE__ */ React40.createElement(Stack_default, null, errorText && /* @__PURE__ */ React40.createElement("div", null, errorText), /* @__PURE__ */ React40.createElement("div", null, helperText)))), [...uploaded, ...files].length > 0 && /* @__PURE__ */ React40.createElement(Preview, { files, uploaded, onDelete: handleDeleteFile }));
5618
+ return /* @__PURE__ */ React42.createElement(UploaderRoot, null, showDropZone && /* @__PURE__ */ React42.createElement(FormControl_default, { size, error: !!(error || errorText), disabled, required: !!minCount }, label && /* @__PURE__ */ React42.createElement(FormLabel_default, null, label), uploader, /* @__PURE__ */ React42.createElement(FormHelperText_default, null, /* @__PURE__ */ React42.createElement(Stack_default, null, errorText && /* @__PURE__ */ React42.createElement("div", null, errorText), /* @__PURE__ */ React42.createElement("div", null, helperText)))), [...uploaded, ...files].length > 0 && /* @__PURE__ */ React42.createElement(Preview, { files, uploaded, onDelete: handleDeleteFile }));
5407
5619
  }
5408
5620
  );
5409
5621
  Uploader.displayName = "Uploader";
@@ -5412,7 +5624,7 @@ Uploader.displayName = "Uploader";
5412
5624
  import { Grid } from "@mui/joy";
5413
5625
 
5414
5626
  // src/components/IconMenuButton/IconMenuButton.tsx
5415
- import React41 from "react";
5627
+ import React43 from "react";
5416
5628
  import { MenuButton as JoyMenuButton2, IconButton as JoyIconButton2 } from "@mui/joy";
5417
5629
  function IconMenuButton(props) {
5418
5630
  const {
@@ -5426,7 +5638,7 @@ function IconMenuButton(props) {
5426
5638
  placement = "bottom"
5427
5639
  } = props;
5428
5640
  if (!items.length) {
5429
- return /* @__PURE__ */ React41.createElement(
5641
+ return /* @__PURE__ */ React43.createElement(
5430
5642
  JoyIconButton2,
5431
5643
  {
5432
5644
  component: props.buttonComponent ?? "button",
@@ -5440,7 +5652,7 @@ function IconMenuButton(props) {
5440
5652
  icon
5441
5653
  );
5442
5654
  }
5443
- return /* @__PURE__ */ React41.createElement(Dropdown_default, null, /* @__PURE__ */ React41.createElement(
5655
+ return /* @__PURE__ */ React43.createElement(Dropdown_default, null, /* @__PURE__ */ React43.createElement(
5444
5656
  JoyMenuButton2,
5445
5657
  {
5446
5658
  slots: { root: JoyIconButton2 },
@@ -5457,19 +5669,19 @@ function IconMenuButton(props) {
5457
5669
  }
5458
5670
  },
5459
5671
  icon
5460
- ), /* @__PURE__ */ React41.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ React41.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
5672
+ ), /* @__PURE__ */ React43.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ React43.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
5461
5673
  }
5462
5674
  IconMenuButton.displayName = "IconMenuButton";
5463
5675
 
5464
5676
  // src/components/Markdown/Markdown.tsx
5465
- import React42, { lazy, Suspense, useEffect as useEffect10, useState as useState13 } from "react";
5677
+ import React44, { lazy, Suspense, useEffect as useEffect11, useState as useState14 } from "react";
5466
5678
  import { Skeleton } from "@mui/joy";
5467
5679
  import { Link as Link2 } from "@mui/joy";
5468
5680
  import remarkGfm from "remark-gfm";
5469
5681
  var LazyReactMarkdown = lazy(() => import("react-markdown"));
5470
5682
  var Markdown = (props) => {
5471
- const [rehypeAccent2, setRehypeAccent] = useState13(null);
5472
- useEffect10(() => {
5683
+ const [rehypeAccent2, setRehypeAccent] = useState14(null);
5684
+ useEffect11(() => {
5473
5685
  const loadRehypeAccent = async () => {
5474
5686
  const module = await Promise.resolve().then(() => (init_rehype_accent(), rehype_accent_exports));
5475
5687
  setRehypeAccent(() => module.rehypeAccent);
@@ -5491,12 +5703,12 @@ var Markdown = (props) => {
5491
5703
  if (!rehypeAccent2) {
5492
5704
  return null;
5493
5705
  }
5494
- return /* @__PURE__ */ React42.createElement(Typography, { component: "div", color, textColor, level: defaultLevel, ...innerProps }, /* @__PURE__ */ React42.createElement(
5706
+ return /* @__PURE__ */ React44.createElement(Typography, { component: "div", color, textColor, level: defaultLevel, ...innerProps }, /* @__PURE__ */ React44.createElement(
5495
5707
  Suspense,
5496
5708
  {
5497
- fallback: fallback || /* @__PURE__ */ React42.createElement(Typography, null, /* @__PURE__ */ React42.createElement(Skeleton, null, content || ""))
5709
+ fallback: fallback || /* @__PURE__ */ React44.createElement(Typography, null, /* @__PURE__ */ React44.createElement(Skeleton, null, content || ""))
5498
5710
  },
5499
- /* @__PURE__ */ React42.createElement(
5711
+ /* @__PURE__ */ React44.createElement(
5500
5712
  LazyReactMarkdown,
5501
5713
  {
5502
5714
  ...markdownOptions,
@@ -5504,15 +5716,15 @@ var Markdown = (props) => {
5504
5716
  rehypePlugins: [[rehypeAccent2, { accentColor }]],
5505
5717
  remarkPlugins: [remarkGfm],
5506
5718
  components: {
5507
- h1: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { color, textColor, level: "h1" }, children),
5508
- h2: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { color, textColor, level: "h2" }, children),
5509
- h3: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { color, textColor, level: "h3" }, children),
5510
- h4: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { color, textColor, level: "h4" }, children),
5511
- p: ({ children, node }) => /* @__PURE__ */ React42.createElement(Typography, { color, textColor, level: defaultLevel, ...node?.properties }, children),
5512
- a: ({ children, href }) => /* @__PURE__ */ React42.createElement(Link2, { href, target: defaultLinkAction }, children),
5513
- hr: () => /* @__PURE__ */ React42.createElement(Divider, null),
5514
- b: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { fontWeight: boldFontWeight }, children),
5515
- strong: ({ children }) => /* @__PURE__ */ React42.createElement(Typography, { fontWeight: boldFontWeight }, children),
5719
+ h1: ({ children }) => /* @__PURE__ */ React44.createElement(Typography, { color, textColor, level: "h1" }, children),
5720
+ h2: ({ children }) => /* @__PURE__ */ React44.createElement(Typography, { color, textColor, level: "h2" }, children),
5721
+ h3: ({ children }) => /* @__PURE__ */ React44.createElement(Typography, { color, textColor, level: "h3" }, children),
5722
+ h4: ({ children }) => /* @__PURE__ */ React44.createElement(Typography, { color, textColor, level: "h4" }, children),
5723
+ p: ({ children, node }) => /* @__PURE__ */ React44.createElement(Typography, { color, textColor, level: defaultLevel, ...node?.properties }, children),
5724
+ a: ({ children, href }) => /* @__PURE__ */ React44.createElement(Link2, { href, target: defaultLinkAction }, children),
5725
+ hr: () => /* @__PURE__ */ React44.createElement(Divider, null),
5726
+ b: ({ children }) => /* @__PURE__ */ React44.createElement(Typography, { fontWeight: boldFontWeight }, children),
5727
+ strong: ({ children }) => /* @__PURE__ */ React44.createElement(Typography, { fontWeight: boldFontWeight }, children),
5516
5728
  ...markdownOptions?.components
5517
5729
  }
5518
5730
  }
@@ -5522,7 +5734,7 @@ var Markdown = (props) => {
5522
5734
  Markdown.displayName = "Markdown";
5523
5735
 
5524
5736
  // src/components/MenuButton/MenuButton.tsx
5525
- import React43 from "react";
5737
+ import React45 from "react";
5526
5738
  import { MenuButton as JoyMenuButton3, Button as JoyButton2 } from "@mui/joy";
5527
5739
  import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
5528
5740
  function MenuButton(props) {
@@ -5540,7 +5752,7 @@ function MenuButton(props) {
5540
5752
  placement = "bottom"
5541
5753
  } = props;
5542
5754
  if (!items.length) {
5543
- return /* @__PURE__ */ React43.createElement(
5755
+ return /* @__PURE__ */ React45.createElement(
5544
5756
  JoyButton2,
5545
5757
  {
5546
5758
  component: props.buttonComponent ?? "button",
@@ -5551,12 +5763,12 @@ function MenuButton(props) {
5551
5763
  loading,
5552
5764
  startDecorator,
5553
5765
  ...props.buttonComponentProps ?? {},
5554
- endDecorator: showIcon ? /* @__PURE__ */ React43.createElement(React43.Fragment, null, endDecorator, /* @__PURE__ */ React43.createElement(ExpandMoreIcon, null)) : /* @__PURE__ */ React43.createElement(React43.Fragment, null, endDecorator)
5766
+ endDecorator: showIcon ? /* @__PURE__ */ React45.createElement(React45.Fragment, null, endDecorator, /* @__PURE__ */ React45.createElement(ExpandMoreIcon, null)) : /* @__PURE__ */ React45.createElement(React45.Fragment, null, endDecorator)
5555
5767
  },
5556
5768
  buttonText
5557
5769
  );
5558
5770
  }
5559
- return /* @__PURE__ */ React43.createElement(Dropdown_default, null, /* @__PURE__ */ React43.createElement(
5771
+ return /* @__PURE__ */ React45.createElement(Dropdown_default, null, /* @__PURE__ */ React45.createElement(
5560
5772
  JoyMenuButton3,
5561
5773
  {
5562
5774
  component: props.buttonComponent ?? "button",
@@ -5567,15 +5779,15 @@ function MenuButton(props) {
5567
5779
  loading,
5568
5780
  startDecorator,
5569
5781
  ...props.buttonComponentProps ?? {},
5570
- endDecorator: showIcon ? /* @__PURE__ */ React43.createElement(React43.Fragment, null, endDecorator, /* @__PURE__ */ React43.createElement(ExpandMoreIcon, null)) : /* @__PURE__ */ React43.createElement(React43.Fragment, null, endDecorator)
5782
+ endDecorator: showIcon ? /* @__PURE__ */ React45.createElement(React45.Fragment, null, endDecorator, /* @__PURE__ */ React45.createElement(ExpandMoreIcon, null)) : /* @__PURE__ */ React45.createElement(React45.Fragment, null, endDecorator)
5571
5783
  },
5572
5784
  buttonText
5573
- ), /* @__PURE__ */ React43.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ React43.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
5785
+ ), /* @__PURE__ */ React45.createElement(Menu, { placement, size }, items.map((i) => /* @__PURE__ */ React45.createElement(MenuItem, { key: i.text, component: i.component, ...i.componentProps ?? {} }, i.text))));
5574
5786
  }
5575
5787
  MenuButton.displayName = "MenuButton";
5576
5788
 
5577
5789
  // src/components/MonthPicker/MonthPicker.tsx
5578
- import React44, { forwardRef as forwardRef9, useCallback as useCallback23, useEffect as useEffect11, useImperativeHandle as useImperativeHandle4, useRef as useRef9, useState as useState14 } from "react";
5790
+ import React46, { forwardRef as forwardRef9, useCallback as useCallback25, useEffect as useEffect12, useImperativeHandle as useImperativeHandle4, useRef as useRef10, useState as useState15 } from "react";
5579
5791
  import CalendarTodayIcon3 from "@mui/icons-material/CalendarToday";
5580
5792
  import { styled as styled22, useThemeProps as useThemeProps7 } from "@mui/joy";
5581
5793
  import { FocusTrap as FocusTrap3, ClickAwayListener as ClickAwayListener3, Popper as Popper4 } from "@mui/base";
@@ -5657,14 +5869,14 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5657
5869
  locale,
5658
5870
  ...innerProps
5659
5871
  } = props;
5660
- const innerRef = useRef9(null);
5661
- const buttonRef = useRef9(null);
5872
+ const innerRef = useRef10(null);
5873
+ const buttonRef = useRef10(null);
5662
5874
  const [value, setValue, isControlled] = useControlledState(
5663
5875
  props.value,
5664
5876
  props.defaultValue || "",
5665
- useCallback23((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
5877
+ useCallback25((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
5666
5878
  );
5667
- const getFormattedDisplayValue = useCallback23(
5879
+ const getFormattedDisplayValue = useCallback25(
5668
5880
  (inputValue) => {
5669
5881
  if (!inputValue) return "";
5670
5882
  try {
@@ -5675,19 +5887,19 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5675
5887
  },
5676
5888
  [format, displayFormat, locale]
5677
5889
  );
5678
- const [displayValue, setDisplayValue] = useState14(() => getFormattedDisplayValue(value));
5679
- const [anchorEl, setAnchorEl] = useState14(null);
5890
+ const [displayValue, setDisplayValue] = useState15(() => getFormattedDisplayValue(value));
5891
+ const [anchorEl, setAnchorEl] = useState15(null);
5680
5892
  const open = Boolean(anchorEl);
5681
- useEffect11(() => {
5893
+ useEffect12(() => {
5682
5894
  if (!anchorEl) {
5683
5895
  innerRef.current?.blur();
5684
5896
  }
5685
5897
  }, [anchorEl, innerRef]);
5686
5898
  useImperativeHandle4(ref, () => innerRef.current, [innerRef]);
5687
- useEffect11(() => {
5899
+ useEffect12(() => {
5688
5900
  setDisplayValue(getFormattedDisplayValue(value));
5689
5901
  }, [value, getFormattedDisplayValue]);
5690
- const handleChange = useCallback23(
5902
+ const handleChange = useCallback25(
5691
5903
  (event) => {
5692
5904
  const newValue = event.target.value;
5693
5905
  setValue(newValue);
@@ -5697,21 +5909,21 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5697
5909
  },
5698
5910
  [setValue, getFormattedDisplayValue, isControlled]
5699
5911
  );
5700
- const handleCalendarToggle = useCallback23(
5912
+ const handleCalendarToggle = useCallback25(
5701
5913
  (event) => {
5702
5914
  setAnchorEl(anchorEl ? null : event.currentTarget);
5703
5915
  innerRef.current?.focus();
5704
5916
  },
5705
5917
  [anchorEl, setAnchorEl, innerRef]
5706
5918
  );
5707
- const handleInputMouseDown = useCallback23(
5919
+ const handleInputMouseDown = useCallback25(
5708
5920
  (event) => {
5709
5921
  event.preventDefault();
5710
5922
  buttonRef.current?.focus();
5711
5923
  },
5712
5924
  [buttonRef]
5713
5925
  );
5714
- return /* @__PURE__ */ React44.createElement(MonthPickerRoot, null, /* @__PURE__ */ React44.createElement(FocusTrap3, { open: true }, /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement(
5926
+ return /* @__PURE__ */ React46.createElement(MonthPickerRoot, null, /* @__PURE__ */ React46.createElement(FocusTrap3, { open: true }, /* @__PURE__ */ React46.createElement(React46.Fragment, null, /* @__PURE__ */ React46.createElement(
5715
5927
  Input_default,
5716
5928
  {
5717
5929
  ...innerProps,
@@ -5741,7 +5953,7 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5741
5953
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
5742
5954
  fontFamily: "monospace"
5743
5955
  },
5744
- endDecorator: /* @__PURE__ */ React44.createElement(
5956
+ endDecorator: /* @__PURE__ */ React46.createElement(
5745
5957
  IconButton_default,
5746
5958
  {
5747
5959
  ref: buttonRef,
@@ -5753,12 +5965,12 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5753
5965
  "aria-expanded": open,
5754
5966
  disabled
5755
5967
  },
5756
- /* @__PURE__ */ React44.createElement(CalendarTodayIcon3, null)
5968
+ /* @__PURE__ */ React46.createElement(CalendarTodayIcon3, null)
5757
5969
  ),
5758
5970
  label,
5759
5971
  helperText
5760
5972
  }
5761
- ), open && /* @__PURE__ */ React44.createElement(ClickAwayListener3, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React44.createElement(
5973
+ ), open && /* @__PURE__ */ React46.createElement(ClickAwayListener3, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React46.createElement(
5762
5974
  StyledPopper3,
5763
5975
  {
5764
5976
  id: "month-picker-popper",
@@ -5777,7 +5989,7 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5777
5989
  "aria-label": "Calendar Tooltip",
5778
5990
  "aria-expanded": open
5779
5991
  },
5780
- /* @__PURE__ */ React44.createElement(CalendarSheet3, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React44.createElement(
5992
+ /* @__PURE__ */ React46.createElement(CalendarSheet3, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React46.createElement(
5781
5993
  Calendar_default,
5782
5994
  {
5783
5995
  view: "month",
@@ -5798,14 +6010,14 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5798
6010
  disablePast,
5799
6011
  locale
5800
6012
  }
5801
- ), /* @__PURE__ */ React44.createElement(
6013
+ ), /* @__PURE__ */ React46.createElement(
5802
6014
  DialogActions_default,
5803
6015
  {
5804
6016
  sx: {
5805
6017
  p: 1
5806
6018
  }
5807
6019
  },
5808
- /* @__PURE__ */ React44.createElement(
6020
+ /* @__PURE__ */ React46.createElement(
5809
6021
  Button_default,
5810
6022
  {
5811
6023
  size,
@@ -5828,7 +6040,7 @@ var MonthPicker = forwardRef9((inProps, ref) => {
5828
6040
  });
5829
6041
 
5830
6042
  // src/components/MonthRangePicker/MonthRangePicker.tsx
5831
- import React45, { forwardRef as forwardRef10, useCallback as useCallback24, useEffect as useEffect12, useImperativeHandle as useImperativeHandle5, useMemo as useMemo15, useRef as useRef10, useState as useState15 } from "react";
6043
+ import React47, { forwardRef as forwardRef10, useCallback as useCallback26, useEffect as useEffect13, useImperativeHandle as useImperativeHandle5, useMemo as useMemo16, useRef as useRef11, useState as useState16 } from "react";
5832
6044
  import { IMaskInput as IMaskInput3, IMask as IMask3 } from "react-imask";
5833
6045
  import CalendarTodayIcon4 from "@mui/icons-material/CalendarToday";
5834
6046
  import { styled as styled23, useThemeProps as useThemeProps8 } from "@mui/joy";
@@ -5886,9 +6098,9 @@ var parseDates2 = (str) => {
5886
6098
  var formatToPattern3 = (format) => {
5887
6099
  return `${format} - ${format}`.replace(/YYYY/g, "Y").replace(/MM/g, "m").replace(/[^YMm\s]/g, (match) => `${match}\``);
5888
6100
  };
5889
- var TextMaskAdapter9 = React45.forwardRef(function TextMaskAdapter10(props, ref) {
6101
+ var TextMaskAdapter9 = React47.forwardRef(function TextMaskAdapter10(props, ref) {
5890
6102
  const { onChange, format, ...other } = props;
5891
- return /* @__PURE__ */ React45.createElement(
6103
+ return /* @__PURE__ */ React47.createElement(
5892
6104
  IMaskInput3,
5893
6105
  {
5894
6106
  ...other,
@@ -5936,35 +6148,35 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
5936
6148
  size,
5937
6149
  ...innerProps
5938
6150
  } = props;
5939
- const innerRef = useRef10(null);
6151
+ const innerRef = useRef11(null);
5940
6152
  const [value, setValue] = useControlledState(
5941
6153
  props.value,
5942
6154
  props.defaultValue || "",
5943
- useCallback24((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
6155
+ useCallback26((value2) => onChange?.({ target: { name: props.name, value: value2 } }), [props.name, onChange])
5944
6156
  );
5945
- const [anchorEl, setAnchorEl] = useState15(null);
6157
+ const [anchorEl, setAnchorEl] = useState16(null);
5946
6158
  const open = Boolean(anchorEl);
5947
- const calendarValue = useMemo15(() => value ? parseDates2(value) : void 0, [value]);
5948
- useEffect12(() => {
6159
+ const calendarValue = useMemo16(() => value ? parseDates2(value) : void 0, [value]);
6160
+ useEffect13(() => {
5949
6161
  if (!anchorEl) {
5950
6162
  innerRef.current?.blur();
5951
6163
  }
5952
6164
  }, [anchorEl, innerRef]);
5953
6165
  useImperativeHandle5(ref, () => innerRef.current, [innerRef]);
5954
- const handleChange = useCallback24(
6166
+ const handleChange = useCallback26(
5955
6167
  (event) => {
5956
6168
  setValue(event.target.value);
5957
6169
  },
5958
6170
  [setValue]
5959
6171
  );
5960
- const handleCalendarToggle = useCallback24(
6172
+ const handleCalendarToggle = useCallback26(
5961
6173
  (event) => {
5962
6174
  setAnchorEl(anchorEl ? null : event.currentTarget);
5963
6175
  innerRef.current?.focus();
5964
6176
  },
5965
6177
  [anchorEl, setAnchorEl, innerRef]
5966
6178
  );
5967
- const handleCalendarChange = useCallback24(
6179
+ const handleCalendarChange = useCallback26(
5968
6180
  ([date1, date2]) => {
5969
6181
  if (!date1 || !date2) return;
5970
6182
  setValue(formatValueString4([date1, date2], format));
@@ -5972,7 +6184,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
5972
6184
  },
5973
6185
  [setValue, setAnchorEl, format]
5974
6186
  );
5975
- return /* @__PURE__ */ React45.createElement(MonthRangePickerRoot, null, /* @__PURE__ */ React45.createElement(FocusTrap4, { open: true }, /* @__PURE__ */ React45.createElement(React45.Fragment, null, /* @__PURE__ */ React45.createElement(
6187
+ return /* @__PURE__ */ React47.createElement(MonthRangePickerRoot, null, /* @__PURE__ */ React47.createElement(FocusTrap4, { open: true }, /* @__PURE__ */ React47.createElement(React47.Fragment, null, /* @__PURE__ */ React47.createElement(
5976
6188
  Input_default,
5977
6189
  {
5978
6190
  ...innerProps,
@@ -5994,7 +6206,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
5994
6206
  // NOTE: placeholder char 를 텍스트로 표시하므로 동일한 너비를 가지는 mono font 를 사용해야 이질감이 없다.
5995
6207
  fontFamily: "monospace"
5996
6208
  },
5997
- endDecorator: /* @__PURE__ */ React45.createElement(
6209
+ endDecorator: /* @__PURE__ */ React47.createElement(
5998
6210
  IconButton_default,
5999
6211
  {
6000
6212
  variant: "plain",
@@ -6004,12 +6216,12 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
6004
6216
  "aria-haspopup": "dialog",
6005
6217
  "aria-expanded": open
6006
6218
  },
6007
- /* @__PURE__ */ React45.createElement(CalendarTodayIcon4, null)
6219
+ /* @__PURE__ */ React47.createElement(CalendarTodayIcon4, null)
6008
6220
  ),
6009
6221
  label,
6010
6222
  helperText
6011
6223
  }
6012
- ), open && /* @__PURE__ */ React45.createElement(ClickAwayListener4, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React45.createElement(
6224
+ ), open && /* @__PURE__ */ React47.createElement(ClickAwayListener4, { onClickAway: () => setAnchorEl(null) }, /* @__PURE__ */ React47.createElement(
6013
6225
  StyledPopper4,
6014
6226
  {
6015
6227
  id: "month-range-picker-popper",
@@ -6028,7 +6240,7 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
6028
6240
  "aria-label": "Calendar Tooltip",
6029
6241
  "aria-expanded": open
6030
6242
  },
6031
- /* @__PURE__ */ React45.createElement(CalendarSheet4, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React45.createElement(
6243
+ /* @__PURE__ */ React47.createElement(CalendarSheet4, { tabIndex: -1, role: "presentation" }, /* @__PURE__ */ React47.createElement(
6032
6244
  Calendar_default,
6033
6245
  {
6034
6246
  view: "month",
@@ -6041,14 +6253,14 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
6041
6253
  disableFuture,
6042
6254
  disablePast
6043
6255
  }
6044
- ), /* @__PURE__ */ React45.createElement(
6256
+ ), /* @__PURE__ */ React47.createElement(
6045
6257
  DialogActions_default,
6046
6258
  {
6047
6259
  sx: {
6048
6260
  p: 1
6049
6261
  }
6050
6262
  },
6051
- /* @__PURE__ */ React45.createElement(
6263
+ /* @__PURE__ */ React47.createElement(
6052
6264
  Button_default,
6053
6265
  {
6054
6266
  size,
@@ -6067,14 +6279,14 @@ var MonthRangePicker = forwardRef10((inProps, ref) => {
6067
6279
  MonthRangePicker.displayName = "MonthRangePicker";
6068
6280
 
6069
6281
  // src/components/NavigationGroup/NavigationGroup.tsx
6070
- import React46 from "react";
6282
+ import React48 from "react";
6071
6283
  import {
6072
6284
  Accordion as JoyAccordion2,
6073
6285
  AccordionSummary as JoyAccordionSummary2,
6074
6286
  AccordionDetails as JoyAccordionDetails2,
6075
6287
  styled as styled24,
6076
6288
  accordionSummaryClasses,
6077
- Stack as Stack11
6289
+ Stack as Stack13
6078
6290
  } from "@mui/joy";
6079
6291
  var AccordionSummary2 = styled24(JoyAccordionSummary2, {
6080
6292
  name: "NavigationGroup",
@@ -6098,11 +6310,11 @@ var AccordionDetails2 = styled24(JoyAccordionDetails2, {
6098
6310
  }));
6099
6311
  function NavigationGroup(props) {
6100
6312
  const { title, children, startDecorator, level, ...rest } = props;
6101
- return /* @__PURE__ */ React46.createElement(JoyAccordion2, { ...rest }, /* @__PURE__ */ React46.createElement(AccordionSummary2, { useIcon: !!startDecorator, level }, /* @__PURE__ */ React46.createElement(Stack11, { direction: "row", gap: 4 }, startDecorator, title)), /* @__PURE__ */ React46.createElement(AccordionDetails2, null, children));
6313
+ return /* @__PURE__ */ React48.createElement(JoyAccordion2, { ...rest }, /* @__PURE__ */ React48.createElement(AccordionSummary2, { useIcon: !!startDecorator, level }, /* @__PURE__ */ React48.createElement(Stack13, { direction: "row", gap: 4 }, startDecorator, title)), /* @__PURE__ */ React48.createElement(AccordionDetails2, null, children));
6102
6314
  }
6103
6315
 
6104
6316
  // src/components/NavigationItem/NavigationItem.tsx
6105
- import React47 from "react";
6317
+ import React49 from "react";
6106
6318
  import {
6107
6319
  ListItem as JoyListItem,
6108
6320
  ListItemButton as JoyListItemButton,
@@ -6137,7 +6349,7 @@ function NavigationItem(props) {
6137
6349
  const handleClick = () => {
6138
6350
  onClick?.(id);
6139
6351
  };
6140
- return /* @__PURE__ */ React47.createElement(JoyListItem, { ...rest }, /* @__PURE__ */ React47.createElement(
6352
+ return /* @__PURE__ */ React49.createElement(JoyListItem, { ...rest }, /* @__PURE__ */ React49.createElement(
6141
6353
  ListItemButton,
6142
6354
  {
6143
6355
  level,
@@ -6146,21 +6358,21 @@ function NavigationItem(props) {
6146
6358
  "aria-current": selected,
6147
6359
  onClick: handleClick
6148
6360
  },
6149
- startDecorator && /* @__PURE__ */ React47.createElement(JoyListItemDecorator, null, startDecorator),
6361
+ startDecorator && /* @__PURE__ */ React49.createElement(JoyListItemDecorator, null, startDecorator),
6150
6362
  children
6151
6363
  ));
6152
6364
  }
6153
6365
 
6154
6366
  // src/components/Navigator/Navigator.tsx
6155
- import React48 from "react";
6367
+ import React50 from "react";
6156
6368
  function Navigator(props) {
6157
6369
  const { items, level = 0, onSelect } = props;
6158
6370
  const handleItemClick = (id) => {
6159
6371
  onSelect?.(id);
6160
6372
  };
6161
- return /* @__PURE__ */ React48.createElement("div", null, items.map((item, index) => {
6373
+ return /* @__PURE__ */ React50.createElement("div", null, items.map((item, index) => {
6162
6374
  if (item.type === "item") {
6163
- return /* @__PURE__ */ React48.createElement(
6375
+ return /* @__PURE__ */ React50.createElement(
6164
6376
  NavigationItem,
6165
6377
  {
6166
6378
  key: item.id,
@@ -6173,7 +6385,7 @@ function Navigator(props) {
6173
6385
  item.title
6174
6386
  );
6175
6387
  } else if (item.type === "group") {
6176
- return /* @__PURE__ */ React48.createElement(
6388
+ return /* @__PURE__ */ React50.createElement(
6177
6389
  NavigationGroup,
6178
6390
  {
6179
6391
  key: `${item.title}-${index}`,
@@ -6191,7 +6403,7 @@ function Navigator(props) {
6191
6403
  Navigator.displayName = "Navigator";
6192
6404
 
6193
6405
  // src/components/ProfileMenu/ProfileMenu.tsx
6194
- import React49, { useCallback as useCallback25, useMemo as useMemo16 } from "react";
6406
+ import React51, { useCallback as useCallback27, useMemo as useMemo17 } from "react";
6195
6407
  import { Dropdown as Dropdown2, ListDivider, menuItemClasses, styled as styled26, MenuButton as MenuButton2 } from "@mui/joy";
6196
6408
  import { ClickAwayListener as ClickAwayListener5 } from "@mui/base";
6197
6409
  import DropdownIcon from "@mui/icons-material/ArrowDropDown";
@@ -6201,9 +6413,9 @@ var StyledProfileCard = styled26(Stack, {
6201
6413
  })({});
6202
6414
  function ProfileCard(props) {
6203
6415
  const { children, chip, caption, size } = props;
6204
- const captionLevel = useMemo16(() => size === "sm" ? "body-xs" : "body-sm", [size]);
6205
- const nameLevel = useMemo16(() => size === "sm" ? "body-sm" : "body-md", [size]);
6206
- return /* @__PURE__ */ React49.createElement(StyledProfileCard, { px: 4, py: 2 }, /* @__PURE__ */ React49.createElement(Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React49.createElement(Typography, { level: nameLevel, fontWeight: "bold", textColor: "text.primary" }, children), chip && /* @__PURE__ */ React49.createElement(Chip, { size, color: "neutral", variant: "outlined" }, chip)), caption && /* @__PURE__ */ React49.createElement(Typography, { level: captionLevel, textColor: "text.tertiary" }, caption));
6416
+ const captionLevel = useMemo17(() => size === "sm" ? "body-xs" : "body-sm", [size]);
6417
+ const nameLevel = useMemo17(() => size === "sm" ? "body-sm" : "body-md", [size]);
6418
+ return /* @__PURE__ */ React51.createElement(StyledProfileCard, { px: 4, py: 2 }, /* @__PURE__ */ React51.createElement(Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React51.createElement(Typography, { level: nameLevel, fontWeight: "bold", textColor: "text.primary" }, children), chip && /* @__PURE__ */ React51.createElement(Chip, { size, color: "neutral", variant: "outlined" }, chip)), caption && /* @__PURE__ */ React51.createElement(Typography, { level: captionLevel, textColor: "text.tertiary" }, caption));
6207
6419
  }
6208
6420
  ProfileCard.displayName = "ProfileCard";
6209
6421
  var StyledProfileMenuButton = styled26(MenuButton2, {
@@ -6215,16 +6427,16 @@ var StyledProfileMenuButton = styled26(MenuButton2, {
6215
6427
  }));
6216
6428
  function ProfileMenuButton(props) {
6217
6429
  const { size = "md", src, alt, children, getInitial, ...innerProps } = props;
6218
- return /* @__PURE__ */ React49.createElement(
6430
+ return /* @__PURE__ */ React51.createElement(
6219
6431
  StyledProfileMenuButton,
6220
6432
  {
6221
6433
  variant: "plain",
6222
6434
  color: "neutral",
6223
6435
  size,
6224
- endDecorator: /* @__PURE__ */ React49.createElement(DropdownIcon, null),
6436
+ endDecorator: /* @__PURE__ */ React51.createElement(DropdownIcon, null),
6225
6437
  ...innerProps
6226
6438
  },
6227
- /* @__PURE__ */ React49.createElement(Avatar, { variant: "soft", color: "primary", size, src, alt, getInitial }, children)
6439
+ /* @__PURE__ */ React51.createElement(Avatar, { variant: "soft", color: "primary", size, src, alt, getInitial }, children)
6228
6440
  );
6229
6441
  }
6230
6442
  ProfileMenuButton.displayName = "ProfileMenuButton";
@@ -6243,9 +6455,9 @@ function ProfileMenu(props) {
6243
6455
  const [open, setOpen] = useControlledState(
6244
6456
  _open,
6245
6457
  defaultOpen ?? false,
6246
- useCallback25((value) => onOpenChange?.(value), [onOpenChange])
6458
+ useCallback27((value) => onOpenChange?.(value), [onOpenChange])
6247
6459
  );
6248
- return /* @__PURE__ */ React49.createElement(ClickAwayListener5, { onClickAway: () => setOpen(false) }, /* @__PURE__ */ React49.createElement("div", null, /* @__PURE__ */ React49.createElement(Dropdown2, { open }, /* @__PURE__ */ React49.createElement(
6460
+ return /* @__PURE__ */ React51.createElement(ClickAwayListener5, { onClickAway: () => setOpen(false) }, /* @__PURE__ */ React51.createElement("div", null, /* @__PURE__ */ React51.createElement(Dropdown2, { open }, /* @__PURE__ */ React51.createElement(
6249
6461
  ProfileMenuButton,
6250
6462
  {
6251
6463
  size,
@@ -6255,7 +6467,7 @@ function ProfileMenu(props) {
6255
6467
  getInitial
6256
6468
  },
6257
6469
  profile.name
6258
- ), /* @__PURE__ */ React49.createElement(ProfileMenuRoot, { size, placement: "bottom-end", ...innerProps, onClose: () => setOpen(false) }, /* @__PURE__ */ React49.createElement(ProfileCard, { size, caption: profile.caption, chip: profile.chip }, profile.name), !!menuItems.length && /* @__PURE__ */ React49.createElement(ListDivider, null), menuItems.map(({ label, ...menuProps }) => /* @__PURE__ */ React49.createElement(
6470
+ ), /* @__PURE__ */ React51.createElement(ProfileMenuRoot, { size, placement: "bottom-end", ...innerProps, onClose: () => setOpen(false) }, /* @__PURE__ */ React51.createElement(ProfileCard, { size, caption: profile.caption, chip: profile.chip }, profile.name), !!menuItems.length && /* @__PURE__ */ React51.createElement(ListDivider, null), menuItems.map(({ label, ...menuProps }) => /* @__PURE__ */ React51.createElement(
6259
6471
  MenuItem,
6260
6472
  {
6261
6473
  key: label,
@@ -6271,7 +6483,7 @@ function ProfileMenu(props) {
6271
6483
  ProfileMenu.displayName = "ProfileMenu";
6272
6484
 
6273
6485
  // src/components/RadioTileGroup/RadioTileGroup.tsx
6274
- import React50 from "react";
6486
+ import React52 from "react";
6275
6487
  import { styled as styled27, radioClasses, sheetClasses } from "@mui/joy";
6276
6488
  var RadioTileGroupRoot = styled27(RadioGroup, {
6277
6489
  name: "RadioTileGroup",
@@ -6359,7 +6571,7 @@ function RadioTileGroup(props) {
6359
6571
  error,
6360
6572
  required
6361
6573
  } = props;
6362
- const radioGroup = /* @__PURE__ */ React50.createElement(
6574
+ const radioGroup = /* @__PURE__ */ React52.createElement(
6363
6575
  RadioTileGroupRoot,
6364
6576
  {
6365
6577
  overlay: true,
@@ -6370,7 +6582,7 @@ function RadioTileGroup(props) {
6370
6582
  flex,
6371
6583
  columns
6372
6584
  },
6373
- options.map((option) => /* @__PURE__ */ React50.createElement(
6585
+ options.map((option) => /* @__PURE__ */ React52.createElement(
6374
6586
  RadioTileSheet,
6375
6587
  {
6376
6588
  key: option.value,
@@ -6380,7 +6592,7 @@ function RadioTileGroup(props) {
6380
6592
  flex,
6381
6593
  textAlign
6382
6594
  },
6383
- /* @__PURE__ */ React50.createElement(
6595
+ /* @__PURE__ */ React52.createElement(
6384
6596
  Radio,
6385
6597
  {
6386
6598
  id: `${option.value}`,
@@ -6408,7 +6620,7 @@ function RadioTileGroup(props) {
6408
6620
  }
6409
6621
  }
6410
6622
  ),
6411
- option.startDecorator && /* @__PURE__ */ React50.createElement(
6623
+ option.startDecorator && /* @__PURE__ */ React52.createElement(
6412
6624
  Box_default,
6413
6625
  {
6414
6626
  sx: {
@@ -6429,20 +6641,20 @@ function RadioTileGroup(props) {
6429
6641
  )
6430
6642
  ))
6431
6643
  );
6432
- return /* @__PURE__ */ React50.createElement(FormControl_default, { required, disabled: allDisabled, error, size, sx, className }, label && /* @__PURE__ */ React50.createElement(FormLabel_default, null, label), radioGroup, helperText && /* @__PURE__ */ React50.createElement(FormHelperText_default, null, helperText));
6644
+ return /* @__PURE__ */ React52.createElement(FormControl_default, { required, disabled: allDisabled, error, size, sx, className }, label && /* @__PURE__ */ React52.createElement(FormLabel_default, null, label), radioGroup, helperText && /* @__PURE__ */ React52.createElement(FormHelperText_default, null, helperText));
6433
6645
  }
6434
6646
  RadioTileGroup.displayName = "RadioTileGroup";
6435
6647
 
6436
6648
  // src/components/RadioList/RadioList.tsx
6437
- import React51 from "react";
6649
+ import React53 from "react";
6438
6650
  function RadioList(props) {
6439
6651
  const { items, ...innerProps } = props;
6440
- return /* @__PURE__ */ React51.createElement(RadioGroup, { ...innerProps }, items.map((item) => /* @__PURE__ */ React51.createElement(Radio, { key: `${item.value}`, value: item.value, label: item.label })));
6652
+ return /* @__PURE__ */ React53.createElement(RadioGroup, { ...innerProps }, items.map((item) => /* @__PURE__ */ React53.createElement(Radio, { key: `${item.value}`, value: item.value, label: item.label })));
6441
6653
  }
6442
6654
  RadioList.displayName = "RadioList";
6443
6655
 
6444
6656
  // src/components/Stepper/Stepper.tsx
6445
- import React52 from "react";
6657
+ import React54 from "react";
6446
6658
  import {
6447
6659
  Stepper as JoyStepper,
6448
6660
  Step as JoyStep,
@@ -6478,7 +6690,7 @@ function Stepper(props) {
6478
6690
  stepOrientation = "horizontal"
6479
6691
  } = props;
6480
6692
  const effectiveStepOrientation = orientation === "vertical" ? "horizontal" : stepOrientation;
6481
- return /* @__PURE__ */ React52.createElement(
6693
+ return /* @__PURE__ */ React54.createElement(
6482
6694
  MotionStepper,
6483
6695
  {
6484
6696
  orientation,
@@ -6517,23 +6729,23 @@ function Stepper(props) {
6517
6729
  const completed = activeStep > i + 1;
6518
6730
  const disabled = activeStep < i + 1;
6519
6731
  const hasContent = step.label || step.extraContent;
6520
- return /* @__PURE__ */ React52.createElement(
6732
+ return /* @__PURE__ */ React54.createElement(
6521
6733
  Step,
6522
6734
  {
6523
6735
  key: `step-${i}`,
6524
- indicator: /* @__PURE__ */ React52.createElement(StepIndicator, { variant: disabled ? "outlined" : "solid", color: disabled ? "neutral" : "primary" }, completed ? /* @__PURE__ */ React52.createElement(CheckIcon, null) : step.indicatorContent),
6736
+ indicator: /* @__PURE__ */ React54.createElement(StepIndicator, { variant: disabled ? "outlined" : "solid", color: disabled ? "neutral" : "primary" }, completed ? /* @__PURE__ */ React54.createElement(CheckIcon, null) : step.indicatorContent),
6525
6737
  active,
6526
6738
  completed,
6527
6739
  disabled,
6528
6740
  orientation: effectiveStepOrientation
6529
6741
  },
6530
- hasContent && /* @__PURE__ */ React52.createElement(
6742
+ hasContent && /* @__PURE__ */ React54.createElement(
6531
6743
  Stack_default,
6532
6744
  {
6533
6745
  sx: orientation === "horizontal" && effectiveStepOrientation === "vertical" ? { alignItems: "center" } : {}
6534
6746
  },
6535
- step.label && /* @__PURE__ */ React52.createElement(Typography_default, { level: "title-sm" }, step.label),
6536
- step.extraContent && /* @__PURE__ */ React52.createElement(Typography_default, { level: "body-xs" }, step.extraContent)
6747
+ step.label && /* @__PURE__ */ React54.createElement(Typography_default, { level: "title-sm" }, step.label),
6748
+ step.extraContent && /* @__PURE__ */ React54.createElement(Typography_default, { level: "body-xs" }, step.extraContent)
6537
6749
  )
6538
6750
  );
6539
6751
  })
@@ -6542,7 +6754,7 @@ function Stepper(props) {
6542
6754
  Stepper.displayName = "Stepper";
6543
6755
 
6544
6756
  // src/components/Switch/Switch.tsx
6545
- import React53 from "react";
6757
+ import React55 from "react";
6546
6758
  import { Switch as JoySwitch, styled as styled29, switchClasses } from "@mui/joy";
6547
6759
  import { motion as motion27 } from "framer-motion";
6548
6760
  var MotionSwitch = motion27(JoySwitch);
@@ -6564,14 +6776,14 @@ var StyledThumb = styled29(motion27.div)({
6564
6776
  right: "var(--Switch-thumbOffset)"
6565
6777
  }
6566
6778
  });
6567
- var Thumb = (props) => /* @__PURE__ */ React53.createElement(StyledThumb, { ...props, layout: true, transition: spring });
6779
+ var Thumb = (props) => /* @__PURE__ */ React55.createElement(StyledThumb, { ...props, layout: true, transition: spring });
6568
6780
  var spring = {
6569
6781
  type: "spring",
6570
6782
  stiffness: 700,
6571
6783
  damping: 30
6572
6784
  };
6573
6785
  var Switch = (props) => {
6574
- return /* @__PURE__ */ React53.createElement(
6786
+ return /* @__PURE__ */ React55.createElement(
6575
6787
  MotionSwitch,
6576
6788
  {
6577
6789
  ...props,
@@ -6585,7 +6797,7 @@ var Switch = (props) => {
6585
6797
  Switch.displayName = "Switch";
6586
6798
 
6587
6799
  // src/components/Tabs/Tabs.tsx
6588
- import React54, { forwardRef as forwardRef11 } from "react";
6800
+ import React56, { forwardRef as forwardRef11 } from "react";
6589
6801
  import {
6590
6802
  Tabs as JoyTabs,
6591
6803
  Tab as JoyTab,
@@ -6609,14 +6821,14 @@ var StyledTab = styled30(JoyTab)(({ theme }) => ({
6609
6821
  }
6610
6822
  }));
6611
6823
  var Tab = forwardRef11(function Tab2({ startDecorator, endDecorator, children, ...props }, ref) {
6612
- return /* @__PURE__ */ React54.createElement(StyledTab, { ...props, ref }, startDecorator, children, endDecorator);
6824
+ return /* @__PURE__ */ React56.createElement(StyledTab, { ...props, ref }, startDecorator, children, endDecorator);
6613
6825
  });
6614
6826
  Tab.displayName = "Tab";
6615
6827
  var TabList = JoyTabList;
6616
6828
  var TabPanel = JoyTabPanel;
6617
6829
 
6618
6830
  // src/components/ThemeProvider/ThemeProvider.tsx
6619
- import React55 from "react";
6831
+ import React57 from "react";
6620
6832
  import { CssBaseline, CssVarsProvider, checkboxClasses, extendTheme, inputClasses } from "@mui/joy";
6621
6833
  var colorScheme = {
6622
6834
  palette: {
@@ -6895,7 +7107,7 @@ var defaultTheme = extendTheme({
6895
7107
  });
6896
7108
  function ThemeProvider(props) {
6897
7109
  const theme = props.theme || defaultTheme;
6898
- return /* @__PURE__ */ React55.createElement(React55.Fragment, null, /* @__PURE__ */ React55.createElement(CssVarsProvider, { theme }, /* @__PURE__ */ React55.createElement(CssBaseline, null), props.children));
7110
+ return /* @__PURE__ */ React57.createElement(React57.Fragment, null, /* @__PURE__ */ React57.createElement(CssVarsProvider, { theme }, /* @__PURE__ */ React57.createElement(CssBaseline, null), props.children));
6899
7111
  }
6900
7112
  ThemeProvider.displayName = "ThemeProvider";
6901
7113
  export {
@@ -6938,6 +7150,7 @@ export {
6938
7150
  Drawer,
6939
7151
  Dropdown,
6940
7152
  FilterMenu,
7153
+ FilterableCheckboxGroup,
6941
7154
  FormControl,
6942
7155
  FormHelperText,
6943
7156
  FormLabel,