@teach-in/react 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +9 -9
  3. package/dist/{chunk-AMNORHD6.mjs → chunk-2ASQXBDD.mjs} +1 -1
  4. package/dist/{chunk-3VAZY2QK.mjs → chunk-2CEZXLZR.mjs} +1 -1
  5. package/dist/chunk-2UHA3DYG.mjs +62 -0
  6. package/dist/{chunk-LJIVY6GU.mjs → chunk-46SKVFMZ.mjs} +1 -1
  7. package/dist/{chunk-JDFRAN4S.mjs → chunk-5FFWQB7D.mjs} +12 -2
  8. package/dist/chunk-C2VWADF5.mjs +34 -0
  9. package/dist/{chunk-NLHQDWUK.mjs → chunk-CKJ5U5Q4.mjs} +1 -1
  10. package/dist/chunk-CUEG2BFV.mjs +34 -0
  11. package/dist/{chunk-CETCW7DS.mjs → chunk-IU2JYI7W.mjs} +1 -1
  12. package/dist/{chunk-KTUGFQWJ.mjs → chunk-KTWHCUYV.mjs} +1 -1
  13. package/dist/chunk-MCQGBAUS.mjs +73 -0
  14. package/dist/chunk-NSU66J5E.mjs +59 -0
  15. package/dist/{chunk-CFG5V7VB.mjs → chunk-QCLLPJMB.mjs} +2 -2
  16. package/dist/{chunk-R7LDL5CU.mjs → chunk-R46SWVWL.mjs} +1 -1
  17. package/dist/chunk-SEJXJZSK.mjs +64 -0
  18. package/dist/chunk-TUIN5YJW.mjs +33 -0
  19. package/dist/chunk-UQAG7TKJ.mjs +1 -0
  20. package/dist/chunk-VXYV37IM.mjs +74 -0
  21. package/dist/index.js +575 -230
  22. package/dist/index.mjs +163 -147
  23. package/dist/ui/data/index.mjs +4 -4
  24. package/dist/ui/feedback/index.mjs +5 -5
  25. package/dist/ui/form/index.js +447 -106
  26. package/dist/ui/form/index.mjs +31 -21
  27. package/dist/ui/form/rhf/fields/autocomplete-field.mjs +20 -14
  28. package/dist/ui/form/rhf/fields/checkbox-field.mjs +20 -14
  29. package/dist/ui/form/rhf/fields/date-picker-field.mjs +20 -14
  30. package/dist/ui/form/rhf/fields/email-field.js +147 -10
  31. package/dist/ui/form/rhf/fields/email-field.mjs +21 -15
  32. package/dist/ui/form/rhf/fields/index.d.ts +1 -0
  33. package/dist/ui/form/rhf/fields/index.js +443 -102
  34. package/dist/ui/form/rhf/fields/index.mjs +31 -21
  35. package/dist/ui/form/rhf/fields/input-field.js +153 -6
  36. package/dist/ui/form/rhf/fields/input-field.mjs +21 -15
  37. package/dist/ui/form/rhf/fields/radio-field.mjs +20 -14
  38. package/dist/ui/form/rhf/fields/search-field.d.ts +10 -0
  39. package/dist/ui/form/rhf/fields/search-field.js +296 -0
  40. package/dist/ui/form/rhf/fields/search-field.mjs +37 -0
  41. package/dist/ui/form/rhf/fields/select-field.js +136 -26
  42. package/dist/ui/form/rhf/fields/select-field.mjs +21 -15
  43. package/dist/ui/form/rhf/fields/switch-field.mjs +20 -14
  44. package/dist/ui/form/rhf/fields/text-field.js +147 -10
  45. package/dist/ui/form/rhf/fields/text-field.mjs +21 -15
  46. package/dist/ui/form/rhf/fields/textarea-field.mjs +20 -14
  47. package/dist/ui/form/rhf/index.js +443 -102
  48. package/dist/ui/form/rhf/index.mjs +31 -21
  49. package/dist/ui/format/index.mjs +15 -15
  50. package/dist/ui/index.js +575 -230
  51. package/dist/ui/index.mjs +161 -145
  52. package/dist/ui/inputs/checkbox/index.mjs +3 -3
  53. package/dist/ui/inputs/clear-button.d.ts +5 -0
  54. package/dist/ui/inputs/clear-button.js +67 -0
  55. package/dist/ui/inputs/clear-button.mjs +8 -0
  56. package/dist/ui/inputs/email/email.js +144 -7
  57. package/dist/ui/inputs/email/email.mjs +4 -2
  58. package/dist/ui/inputs/email/index.js +144 -7
  59. package/dist/ui/inputs/email/index.mjs +4 -2
  60. package/dist/ui/inputs/index.d.ts +2 -0
  61. package/dist/ui/inputs/index.js +363 -56
  62. package/dist/ui/inputs/index.mjs +35 -23
  63. package/dist/ui/inputs/input/index.js +140 -3
  64. package/dist/ui/inputs/input/index.mjs +3 -1
  65. package/dist/ui/inputs/input/input.d.ts +1 -0
  66. package/dist/ui/inputs/input/input.js +140 -3
  67. package/dist/ui/inputs/input/input.mjs +3 -1
  68. package/dist/ui/inputs/input/use-input.d.ts +19 -0
  69. package/dist/ui/inputs/input/use-input.js +82 -0
  70. package/dist/ui/inputs/input/use-input.mjs +7 -0
  71. package/dist/ui/inputs/radio/index.mjs +3 -3
  72. package/dist/ui/inputs/search/index.d.ts +1 -0
  73. package/dist/ui/inputs/search/index.js +270 -0
  74. package/dist/ui/inputs/search/index.mjs +13 -0
  75. package/dist/ui/inputs/search/search.d.ts +7 -0
  76. package/dist/ui/inputs/search/search.js +268 -0
  77. package/dist/ui/inputs/search/search.mjs +12 -0
  78. package/dist/ui/inputs/search/use-search.d.ts +12 -0
  79. package/dist/ui/inputs/search/use-search.js +57 -0
  80. package/dist/ui/inputs/search/use-search.mjs +7 -0
  81. package/dist/ui/inputs/select/index.js +132 -22
  82. package/dist/ui/inputs/select/index.mjs +3 -1
  83. package/dist/ui/inputs/select/select.d.ts +4 -0
  84. package/dist/ui/inputs/select/select.js +132 -22
  85. package/dist/ui/inputs/select/select.mjs +3 -1
  86. package/dist/ui/inputs/select/use-select.d.ts +17 -0
  87. package/dist/ui/inputs/select/use-select.js +85 -0
  88. package/dist/ui/inputs/select/use-select.mjs +7 -0
  89. package/dist/ui/inputs/text/index.js +144 -7
  90. package/dist/ui/inputs/text/index.mjs +4 -2
  91. package/dist/ui/inputs/text/text.js +144 -7
  92. package/dist/ui/inputs/text/text.mjs +4 -2
  93. package/dist/ui/layout/container/container.mjs +81 -74
  94. package/dist/ui/layout/container/index.mjs +81 -74
  95. package/dist/ui/layout/index.mjs +84 -77
  96. package/dist/ui/layout/page/index.mjs +4 -4
  97. package/dist/ui/layout/page/page-loading.mjs +3 -3
  98. package/dist/ui/layout/page/section-loading.mjs +3 -3
  99. package/dist/ui/navigation/index.mjs +11 -11
  100. package/dist/ui/overlays/index.mjs +5 -5
  101. package/dist/ui/provider/index.mjs +3 -3
  102. package/dist/ui/provider/ui-provider.mjs +3 -3
  103. package/dist/ui/surface/index.mjs +3 -3
  104. package/dist/ui/theme/colors/common.mjs +5 -5
  105. package/dist/ui/theme/colors/index.mjs +7 -7
  106. package/dist/ui/theme/colors/semantic.mjs +6 -6
  107. package/dist/ui/theme/colors.mjs +7 -7
  108. package/dist/ui/theme/index.mjs +8 -8
  109. package/dist/ui/theme/theme.mjs +8 -8
  110. package/package.json +1 -1
  111. package/dist/chunk-3YOW5DEZ.mjs +0 -45
  112. package/dist/chunk-V2G5QHZZ.mjs +0 -14
  113. package/dist/{chunk-CZEO3U25.mjs → chunk-5RNCFTW5.mjs} +0 -0
  114. package/dist/{chunk-STVN4B47.mjs → chunk-IXPMUODA.mjs} +12 -12
  115. /package/dist/{chunk-Q6JSJOU4.mjs → chunk-PTCNYQVY.mjs} +0 -0
package/dist/index.js CHANGED
@@ -49,6 +49,7 @@ __export(index_exports, {
49
49
  CheckboxGroup: () => CheckboxGroup,
50
50
  Chip: () => Chip,
51
51
  CircularProgress: () => CircularProgress,
52
+ ClearButton: () => ClearButton,
52
53
  Container: () => Container,
53
54
  DatePicker: () => DatePicker,
54
55
  DatePickerField: () => DatePickerField,
@@ -97,6 +98,8 @@ __export(index_exports, {
97
98
  RadioGroup: () => RadioGroup,
98
99
  Root: () => Root2,
99
100
  ScrollShadow: () => ScrollShadow,
101
+ Search: () => Search,
102
+ SearchField: () => SearchField,
100
103
  Section: () => Section,
101
104
  SectionActions: () => SectionActions,
102
105
  SectionHeader: () => SectionHeader,
@@ -351,58 +354,361 @@ var DatePicker = import_react16.default.forwardRef(
351
354
  DatePicker.displayName = "TeachInUI.DatePicker";
352
355
 
353
356
  // src/ui/inputs/email/email.tsx
354
- var import_react18 = __toESM(require("react"));
357
+ var import_react20 = __toESM(require("react"));
355
358
 
356
359
  // src/ui/inputs/input/input.tsx
357
- var import_react17 = __toESM(require("react"));
360
+ var import_react19 = __toESM(require("react"));
358
361
  var import_input = require("@heroui/input");
362
+ var import_tailwind_variants = require("tailwind-variants");
363
+
364
+ // src/ui/inputs/clear-button.tsx
365
+ var import_react17 = __toESM(require("react"));
366
+ var import_button3 = require("@heroui/button");
367
+ var import_lucide_react = require("lucide-react");
359
368
  var import_jsx_runtime17 = require("react/jsx-runtime");
360
- var Input = import_react17.default.forwardRef(({ ...props }, ref) => {
361
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_input.Input, { ref, ...props });
369
+ var ClearButton = import_react17.default.forwardRef(
370
+ ({ onClear }, ref) => {
371
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
372
+ import_button3.Button,
373
+ {
374
+ ref,
375
+ isIconOnly: true,
376
+ "aria-label": "\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C",
377
+ as: "span",
378
+ className: "opacity-0 transition-opacity group-hover:opacity-100",
379
+ color: "default",
380
+ radius: "full",
381
+ size: "sm",
382
+ tabIndex: 0,
383
+ variant: "light",
384
+ onPress: onClear,
385
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react.XIcon, { className: "size-4 text-default-500" })
386
+ }
387
+ );
388
+ }
389
+ );
390
+ ClearButton.displayName = "TeachInUI.ClearButton";
391
+
392
+ // src/ui/inputs/input/use-input.ts
393
+ var import_react18 = require("react");
394
+ function useInput({
395
+ value,
396
+ defaultValue,
397
+ onValueChange,
398
+ onClear,
399
+ isReadOnly,
400
+ isClearable = true,
401
+ ref
402
+ }) {
403
+ const inputRef = (0, import_react18.useRef)(null);
404
+ const [internalValue, setInternalValue] = (0, import_react18.useState)(defaultValue != null ? defaultValue : "");
405
+ const isControlled = value !== void 0;
406
+ const currentValue = isControlled ? value : internalValue;
407
+ const hasValue = String(currentValue).length > 0;
408
+ const handleValueChange = (0, import_react18.useCallback)(
409
+ (newValue) => {
410
+ if (!isControlled) {
411
+ setInternalValue(newValue);
412
+ }
413
+ onValueChange == null ? void 0 : onValueChange(newValue);
414
+ },
415
+ [isControlled, onValueChange]
416
+ );
417
+ const handleClear = (0, import_react18.useCallback)(() => {
418
+ var _a;
419
+ onClear == null ? void 0 : onClear();
420
+ handleValueChange("");
421
+ (_a = inputRef.current) == null ? void 0 : _a.focus();
422
+ }, [onClear, handleValueChange]);
423
+ const mergedRef = (0, import_react18.useCallback)(
424
+ (node) => {
425
+ inputRef.current = node;
426
+ if (typeof ref === "function") {
427
+ ref(node);
428
+ } else if (ref) {
429
+ ref.current = node;
430
+ }
431
+ },
432
+ [ref]
433
+ );
434
+ const showClearButton = hasValue && !isReadOnly && isClearable;
435
+ return {
436
+ inputRef,
437
+ currentValue,
438
+ hasValue,
439
+ handleValueChange,
440
+ handleClear,
441
+ mergedRef,
442
+ showClearButton
443
+ };
444
+ }
445
+
446
+ // src/ui/inputs/input/input.tsx
447
+ var import_jsx_runtime18 = require("react/jsx-runtime");
448
+ var inputWrapperVariants = (0, import_tailwind_variants.tv)({
449
+ variants: {
450
+ variant: {
451
+ flat: "",
452
+ underlined: "",
453
+ bordered: "border-1",
454
+ faded: "border-1"
455
+ }
456
+ }
362
457
  });
458
+ var Input = import_react19.default.forwardRef(
459
+ ({
460
+ value,
461
+ defaultValue,
462
+ onClear,
463
+ onValueChange,
464
+ variant,
465
+ classNames,
466
+ endContent,
467
+ isReadOnly,
468
+ isClearable,
469
+ ...props
470
+ }, ref) => {
471
+ const { currentValue, handleValueChange, handleClear, mergedRef, showClearButton } = useInput({
472
+ value,
473
+ defaultValue,
474
+ onValueChange,
475
+ onClear,
476
+ isReadOnly,
477
+ isClearable,
478
+ ref
479
+ });
480
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
481
+ import_input.Input,
482
+ {
483
+ ref: mergedRef,
484
+ classNames: {
485
+ ...classNames,
486
+ inputWrapper: inputWrapperVariants({ variant }),
487
+ innerWrapper: "group"
488
+ },
489
+ defaultValue,
490
+ endContent: (endContent || showClearButton) && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center gap-1", children: [
491
+ endContent,
492
+ showClearButton && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ClearButton, { onClear: handleClear })
493
+ ] }),
494
+ isReadOnly,
495
+ value: currentValue,
496
+ variant,
497
+ onValueChange: handleValueChange,
498
+ ...props
499
+ }
500
+ );
501
+ }
502
+ );
363
503
  Input.displayName = "TeachInUI.Input";
364
504
 
365
505
  // src/ui/inputs/email/email.tsx
366
- var import_jsx_runtime18 = require("react/jsx-runtime");
367
- var Email = import_react18.default.forwardRef(({ ...props }, ref) => {
368
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Input, { ref, autoComplete: "email", type: "email", ...props });
506
+ var import_jsx_runtime19 = require("react/jsx-runtime");
507
+ var Email = import_react20.default.forwardRef(({ ...props }, ref) => {
508
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Input, { ref, autoComplete: "email", type: "email", ...props });
369
509
  });
370
510
  Email.displayName = "TeachInUI.Email";
371
511
 
512
+ // src/ui/inputs/search/search.tsx
513
+ var import_react22 = __toESM(require("react"));
514
+ var import_lucide_react2 = require("lucide-react");
515
+ var import_button4 = require("@heroui/button");
516
+ var import_tailwind_variants2 = require("tailwind-variants");
517
+
518
+ // src/ui/inputs/search/use-search.ts
519
+ var import_react21 = require("react");
520
+ function useSearch({ value, onSearch, onCancel, onKeyDown }) {
521
+ const handleKeyDown = (0, import_react21.useCallback)(
522
+ (event) => {
523
+ if (event.key === "Enter") {
524
+ event.preventDefault();
525
+ onSearch == null ? void 0 : onSearch(event.target.value);
526
+ } else if (event.key === "Escape") {
527
+ event.preventDefault();
528
+ onCancel == null ? void 0 : onCancel();
529
+ }
530
+ onKeyDown == null ? void 0 : onKeyDown(event);
531
+ },
532
+ [onSearch, onCancel, onKeyDown]
533
+ );
534
+ const hasValue = value !== void 0 && String(value).length > 0;
535
+ const handleSearchClick = (0, import_react21.useCallback)(() => {
536
+ if (hasValue) {
537
+ onSearch == null ? void 0 : onSearch(value);
538
+ }
539
+ }, [value, onSearch]);
540
+ return {
541
+ handleKeyDown,
542
+ handleSearchClick,
543
+ hasValue
544
+ };
545
+ }
546
+
547
+ // src/ui/inputs/search/search.tsx
548
+ var import_jsx_runtime20 = require("react/jsx-runtime");
549
+ var searchIconVariants = (0, import_tailwind_variants2.tv)({
550
+ base: "size-5 shrink-0",
551
+ variants: {
552
+ variant: {
553
+ faded: "text-default-400",
554
+ flat: "text-default-foreground",
555
+ bordered: "text-default-400",
556
+ underlined: "text-default-foreground"
557
+ }
558
+ }
559
+ });
560
+ var Search = import_react22.default.forwardRef(
561
+ ({ variant = "bordered", radius = "full", value, onSearch, onCancel, onKeyDown, ...props }, ref) => {
562
+ const { handleKeyDown, handleSearchClick, hasValue } = useSearch({
563
+ value,
564
+ onSearch,
565
+ onCancel,
566
+ onKeyDown
567
+ });
568
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
569
+ Input,
570
+ {
571
+ ref,
572
+ radius,
573
+ startContent: onSearch ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
574
+ import_button4.Button,
575
+ {
576
+ isIconOnly: true,
577
+ "aria-label": "\u041F\u043E\u0438\u0441\u043A",
578
+ isDisabled: !hasValue,
579
+ radius: "full",
580
+ size: "sm",
581
+ variant: "light",
582
+ onPress: handleSearchClick,
583
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react2.SearchIcon, { className: searchIconVariants({ variant }) })
584
+ }
585
+ ) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react2.SearchIcon, { className: searchIconVariants({ variant }) }),
586
+ value,
587
+ variant,
588
+ onKeyDown: handleKeyDown,
589
+ ...props
590
+ }
591
+ );
592
+ }
593
+ );
594
+ Search.displayName = "TeachInUI.Search";
595
+
372
596
  // src/ui/inputs/select/select.tsx
373
- var import_react19 = __toESM(require("react"));
597
+ var import_react24 = __toESM(require("react"));
374
598
  var import_select = require("@heroui/select");
375
- var import_jsx_runtime19 = require("react/jsx-runtime");
376
- var Select = import_react19.default.forwardRef(
377
- ({ value, items, onChange, selectionMode, ...props }, ref) => {
378
- const isMultiple = selectionMode === "multiple";
379
- const selectedKeys = import_react19.default.useMemo(() => {
380
- if (value == null) return /* @__PURE__ */ new Set();
381
- return new Set(Array.isArray(value) ? value : [value]);
382
- }, [value]);
383
- const handleSelectionChange = import_react19.default.useCallback(
384
- (keys) => {
385
- var _a;
386
- if (keys === "all") return;
387
- const selected = Array.from(keys).filter((key) => typeof key === "string");
388
- if (isMultiple) {
389
- onChange == null ? void 0 : onChange(selected);
390
- } else {
391
- onChange == null ? void 0 : onChange((_a = selected[0]) != null ? _a : null);
392
- }
393
- },
394
- [onChange, isMultiple]
395
- );
396
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
599
+ var import_tailwind_variants3 = require("tailwind-variants");
600
+
601
+ // src/ui/inputs/select/use-select.ts
602
+ var import_react23 = require("react");
603
+ function useSelect({
604
+ value,
605
+ onChange,
606
+ onClear,
607
+ selectionMode,
608
+ isClearable = true
609
+ }) {
610
+ const isMultiple = selectionMode === "multiple";
611
+ const [internalValue, setInternalValue] = (0, import_react23.useState)(
612
+ isMultiple ? [] : null
613
+ );
614
+ const isControlled = value !== void 0;
615
+ const currentValue = isControlled ? value : internalValue;
616
+ const hasValue = currentValue != null && (Array.isArray(currentValue) ? currentValue.length > 0 : currentValue !== "");
617
+ const handleChange = (0, import_react23.useCallback)(
618
+ (newValue) => {
619
+ if (!isControlled) {
620
+ setInternalValue(newValue);
621
+ }
622
+ if (isMultiple) {
623
+ onChange == null ? void 0 : onChange(newValue);
624
+ } else {
625
+ onChange == null ? void 0 : onChange(newValue);
626
+ }
627
+ },
628
+ [isControlled, onChange, isMultiple]
629
+ );
630
+ const handleClear = (0, import_react23.useCallback)(() => {
631
+ onClear == null ? void 0 : onClear();
632
+ handleChange(isMultiple ? [] : null);
633
+ }, [onClear, handleChange, isMultiple]);
634
+ const selectedKeys = (0, import_react23.useMemo)(() => {
635
+ if (currentValue == null) return /* @__PURE__ */ new Set();
636
+ return new Set(Array.isArray(currentValue) ? currentValue : [currentValue]);
637
+ }, [currentValue]);
638
+ const handleSelectionChange = (0, import_react23.useCallback)(
639
+ (keys) => {
640
+ var _a;
641
+ if (keys === "all") return;
642
+ const selected = Array.from(keys).filter((key) => typeof key === "string");
643
+ handleChange(isMultiple ? selected : (_a = selected[0]) != null ? _a : null);
644
+ },
645
+ [handleChange, isMultiple]
646
+ );
647
+ const showClearButton = hasValue && isClearable;
648
+ return {
649
+ currentValue,
650
+ hasValue,
651
+ selectedKeys,
652
+ handleSelectionChange,
653
+ handleClear,
654
+ showClearButton
655
+ };
656
+ }
657
+
658
+ // src/ui/inputs/select/select.tsx
659
+ var import_jsx_runtime21 = require("react/jsx-runtime");
660
+ var selectWrapperVariants = (0, import_tailwind_variants3.tv)({
661
+ variants: {
662
+ variant: {
663
+ flat: "",
664
+ underlined: "",
665
+ bordered: "border-1",
666
+ faded: "border-1"
667
+ }
668
+ }
669
+ });
670
+ var Select = import_react24.default.forwardRef(
671
+ ({
672
+ value,
673
+ defaultSelectedKeys,
674
+ items,
675
+ onChange,
676
+ selectionMode,
677
+ onClear,
678
+ variant,
679
+ classNames,
680
+ endContent,
681
+ isClearable,
682
+ ...props
683
+ }, ref) => {
684
+ const { selectedKeys, handleSelectionChange, handleClear, showClearButton } = useSelect({
685
+ value,
686
+ onChange,
687
+ onClear,
688
+ selectionMode,
689
+ isClearable
690
+ });
691
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
397
692
  import_select.Select,
398
693
  {
399
694
  ref,
695
+ classNames: {
696
+ ...classNames,
697
+ trigger: selectWrapperVariants({ variant }),
698
+ innerWrapper: "group"
699
+ },
700
+ defaultSelectedKeys,
701
+ endContent: (endContent || showClearButton) && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-1", children: [
702
+ endContent,
703
+ showClearButton && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ClearButton, { onClear: handleClear })
704
+ ] }),
400
705
  items,
401
706
  selectedKeys,
402
707
  selectionMode,
708
+ variant,
403
709
  onSelectionChange: handleSelectionChange,
404
710
  ...props,
405
- children: (item) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_select.SelectItem, { children: item.label }, item.key)
711
+ children: (item) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_select.SelectItem, { children: item.label }, item.key)
406
712
  }
407
713
  );
408
714
  }
@@ -410,20 +716,20 @@ var Select = import_react19.default.forwardRef(
410
716
  Select.displayName = "TeachInUI.Select";
411
717
 
412
718
  // src/ui/inputs/switch/switch.tsx
413
- var import_react20 = __toESM(require("react"));
719
+ var import_react25 = __toESM(require("react"));
414
720
  var import_switch = require("@heroui/switch");
415
- var import_jsx_runtime20 = require("react/jsx-runtime");
416
- var Switch = import_react20.default.forwardRef(({ ...props }, ref) => {
417
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_switch.Switch, { ref, ...props });
721
+ var import_jsx_runtime22 = require("react/jsx-runtime");
722
+ var Switch = import_react25.default.forwardRef(({ ...props }, ref) => {
723
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_switch.Switch, { ref, ...props });
418
724
  });
419
725
  Switch.displayName = "TeachInUI.Switch";
420
726
 
421
727
  // src/ui/inputs/switch/favorite-switch.tsx
422
728
  var import_switch2 = require("@heroui/switch");
423
- var import_lucide_react = require("lucide-react");
424
- var import_tailwind_variants = require("tailwind-variants");
425
- var import_jsx_runtime21 = require("react/jsx-runtime");
426
- var bookmarkVariants = (0, import_tailwind_variants.tv)({
729
+ var import_lucide_react3 = require("lucide-react");
730
+ var import_tailwind_variants4 = require("tailwind-variants");
731
+ var import_jsx_runtime23 = require("react/jsx-runtime");
732
+ var bookmarkVariants = (0, import_tailwind_variants4.tv)({
427
733
  base: "size-6 stroke-default-400 group-hover:fill-primary-100 group-hover:stroke-default-400",
428
734
  variants: {
429
735
  isSelected: {
@@ -436,16 +742,16 @@ function FavoriteSwitch({ isSelected, onValueChange }) {
436
742
  isSelected,
437
743
  onValueChange
438
744
  });
439
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(Component, { ...getBaseProps(), children: [
440
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "sr-only", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("input", { ...getInputProps() }) }),
441
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
745
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Component, { ...getBaseProps(), children: [
746
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "sr-only", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("input", { ...getInputProps() }) }),
747
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
442
748
  "div",
443
749
  {
444
750
  ...getWrapperProps(),
445
751
  className: slots.wrapper({
446
752
  class: "flex h-8 w-8 cursor-pointer items-center justify-center rounded-sm !bg-transparent"
447
753
  }),
448
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react.Bookmark, { className: bookmarkVariants({ isSelected }) })
754
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react3.Bookmark, { className: bookmarkVariants({ isSelected }) })
449
755
  }
450
756
  )
451
757
  ] });
@@ -456,45 +762,55 @@ var import_radio = require("@heroui/radio");
456
762
  var Radio = Object.assign(import_radio.Radio, { displayName: "TeachInUI.Radio" });
457
763
 
458
764
  // src/ui/inputs/radio/radio-group.tsx
459
- var import_react21 = __toESM(require("react"));
765
+ var import_react26 = __toESM(require("react"));
460
766
  var import_radio2 = require("@heroui/radio");
461
- var import_jsx_runtime22 = require("react/jsx-runtime");
462
- var RadioGroup = import_react21.default.forwardRef(
767
+ var import_jsx_runtime24 = require("react/jsx-runtime");
768
+ var RadioGroup = import_react26.default.forwardRef(
463
769
  (props, ref) => {
464
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_radio2.RadioGroup, { ref, ...props });
770
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_radio2.RadioGroup, { ref, ...props });
465
771
  }
466
772
  );
467
773
  RadioGroup.displayName = "TeachInUI.RadioGroup";
468
774
 
469
775
  // src/ui/inputs/text/text.tsx
470
- var import_react22 = __toESM(require("react"));
471
- var import_jsx_runtime23 = require("react/jsx-runtime");
472
- var Text = import_react22.default.forwardRef(({ ...props }, ref) => {
473
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Input, { ref, type: "text", ...props });
776
+ var import_react27 = __toESM(require("react"));
777
+ var import_jsx_runtime25 = require("react/jsx-runtime");
778
+ var Text = import_react27.default.forwardRef(({ ...props }, ref) => {
779
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Input, { ref, type: "text", ...props });
474
780
  });
475
781
  Text.displayName = "TeachInUI.Text";
476
782
 
477
783
  // src/ui/inputs/textarea/textarea.tsx
478
- var import_input5 = require("@heroui/input");
479
- var import_react23 = __toESM(require("react"));
480
- var import_jsx_runtime24 = require("react/jsx-runtime");
481
- var Textarea = import_react23.default.forwardRef(
784
+ var import_input6 = require("@heroui/input");
785
+ var import_react28 = __toESM(require("react"));
786
+ var import_jsx_runtime26 = require("react/jsx-runtime");
787
+ var Textarea = import_react28.default.forwardRef(
482
788
  ({ minRows = 4, ...props }, ref) => {
483
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_input5.Textarea, { ref, minRows, ...props });
789
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_input6.Textarea, { ref, minRows, ...props });
484
790
  }
485
791
  );
486
792
  Textarea.displayName = "TeachInUI.Textarea";
487
793
 
488
794
  // src/ui/form/rhf/fields/input-field.tsx
489
- var import_jsx_runtime25 = require("react/jsx-runtime");
795
+ var import_jsx_runtime27 = require("react/jsx-runtime");
490
796
  function InputField({ name, ...props }) {
491
797
  const { control } = (0, import_react_hook_form.useFormContext)();
492
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
798
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
493
799
  import_react_hook_form.Controller,
494
800
  {
495
801
  control,
496
802
  name,
497
- render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Input, { ...props, ...field, ref, errorMessage: error == null ? void 0 : error.message, isInvalid: !!error })
803
+ render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
804
+ Input,
805
+ {
806
+ ...props,
807
+ ...field,
808
+ ref,
809
+ errorMessage: error == null ? void 0 : error.message,
810
+ isInvalid: !!error,
811
+ onValueChange: field.onChange
812
+ }
813
+ )
498
814
  }
499
815
  );
500
816
  }
@@ -502,15 +818,15 @@ InputField.displayName = "TeachInUI.InputField";
502
818
 
503
819
  // src/ui/form/rhf/fields/text-field.tsx
504
820
  var import_react_hook_form2 = require("react-hook-form");
505
- var import_jsx_runtime26 = require("react/jsx-runtime");
821
+ var import_jsx_runtime28 = require("react/jsx-runtime");
506
822
  function TextField({ name, ...props }) {
507
823
  const { control } = (0, import_react_hook_form2.useFormContext)();
508
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
824
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
509
825
  import_react_hook_form2.Controller,
510
826
  {
511
827
  control,
512
828
  name,
513
- render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Text, { ...props, ...field, ref, errorMessage: error == null ? void 0 : error.message, isInvalid: !!error })
829
+ render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Text, { ...props, ...field, ref, errorMessage: error == null ? void 0 : error.message, isInvalid: !!error })
514
830
  }
515
831
  );
516
832
  }
@@ -518,31 +834,57 @@ TextField.displayName = "TeachInUI.TextField";
518
834
 
519
835
  // src/ui/form/rhf/fields/email-field.tsx
520
836
  var import_react_hook_form3 = require("react-hook-form");
521
- var import_jsx_runtime27 = require("react/jsx-runtime");
837
+ var import_jsx_runtime29 = require("react/jsx-runtime");
522
838
  function EmailField({ name, ...props }) {
523
839
  const { control } = (0, import_react_hook_form3.useFormContext)();
524
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
840
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
525
841
  import_react_hook_form3.Controller,
526
842
  {
527
843
  control,
528
844
  name,
529
- render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Email, { ...props, ...field, ref, errorMessage: error == null ? void 0 : error.message, isInvalid: !!error })
845
+ render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Email, { ...props, ...field, ref, errorMessage: error == null ? void 0 : error.message, isInvalid: !!error })
530
846
  }
531
847
  );
532
848
  }
533
849
  EmailField.displayName = "TeachInUI.EmailField";
534
850
 
535
- // src/ui/form/rhf/fields/textarea-field.tsx
851
+ // src/ui/form/rhf/fields/search-field.tsx
536
852
  var import_react_hook_form4 = require("react-hook-form");
537
- var import_jsx_runtime28 = require("react/jsx-runtime");
538
- function TextareaField({ name, ...props }) {
853
+ var import_jsx_runtime30 = require("react/jsx-runtime");
854
+ function SearchField({ name, ...props }) {
539
855
  const { control } = (0, import_react_hook_form4.useFormContext)();
540
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
856
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
541
857
  import_react_hook_form4.Controller,
542
858
  {
543
859
  control,
544
860
  name,
545
- render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
861
+ render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
862
+ Search,
863
+ {
864
+ ...props,
865
+ ...field,
866
+ ref,
867
+ errorMessage: error == null ? void 0 : error.message,
868
+ isInvalid: !!error,
869
+ onValueChange: field.onChange
870
+ }
871
+ )
872
+ }
873
+ );
874
+ }
875
+ SearchField.displayName = "TeachInUI.SearchField";
876
+
877
+ // src/ui/form/rhf/fields/textarea-field.tsx
878
+ var import_react_hook_form5 = require("react-hook-form");
879
+ var import_jsx_runtime31 = require("react/jsx-runtime");
880
+ function TextareaField({ name, ...props }) {
881
+ const { control } = (0, import_react_hook_form5.useFormContext)();
882
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
883
+ import_react_hook_form5.Controller,
884
+ {
885
+ control,
886
+ name,
887
+ render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
546
888
  Textarea,
547
889
  {
548
890
  ...props,
@@ -558,16 +900,16 @@ function TextareaField({ name, ...props }) {
558
900
  TextareaField.displayName = "TeachInUI.TextareaField";
559
901
 
560
902
  // src/ui/form/rhf/fields/select-field.tsx
561
- var import_react_hook_form5 = require("react-hook-form");
562
- var import_jsx_runtime29 = require("react/jsx-runtime");
903
+ var import_react_hook_form6 = require("react-hook-form");
904
+ var import_jsx_runtime32 = require("react/jsx-runtime");
563
905
  function SelectField({ name, selectionMode, ...props }) {
564
- const { control } = (0, import_react_hook_form5.useFormContext)();
565
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
566
- import_react_hook_form5.Controller,
906
+ const { control } = (0, import_react_hook_form6.useFormContext)();
907
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
908
+ import_react_hook_form6.Controller,
567
909
  {
568
910
  control,
569
911
  name,
570
- render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
912
+ render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
571
913
  Select,
572
914
  {
573
915
  selectionMode,
@@ -584,16 +926,16 @@ function SelectField({ name, selectionMode, ...props }) {
584
926
  SelectField.displayName = "TeachInUI.SelectField";
585
927
 
586
928
  // src/ui/form/rhf/fields/autocomplete-field.tsx
587
- var import_react_hook_form6 = require("react-hook-form");
588
- var import_jsx_runtime30 = require("react/jsx-runtime");
929
+ var import_react_hook_form7 = require("react-hook-form");
930
+ var import_jsx_runtime33 = require("react/jsx-runtime");
589
931
  function AutocompleteField({ name, ...props }) {
590
- const { control } = (0, import_react_hook_form6.useFormContext)();
591
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
592
- import_react_hook_form6.Controller,
932
+ const { control } = (0, import_react_hook_form7.useFormContext)();
933
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
934
+ import_react_hook_form7.Controller,
593
935
  {
594
936
  control,
595
937
  name,
596
- render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
938
+ render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
597
939
  Autocomplete,
598
940
  {
599
941
  ...props,
@@ -609,16 +951,16 @@ function AutocompleteField({ name, ...props }) {
609
951
  AutocompleteField.displayName = "TeachInUI.AutocompleteField";
610
952
 
611
953
  // src/ui/form/rhf/fields/date-picker-field.tsx
612
- var import_react_hook_form7 = require("react-hook-form");
613
- var import_jsx_runtime31 = require("react/jsx-runtime");
954
+ var import_react_hook_form8 = require("react-hook-form");
955
+ var import_jsx_runtime34 = require("react/jsx-runtime");
614
956
  function DatePickerField({ name, ...props }) {
615
- const { control } = (0, import_react_hook_form7.useFormContext)();
616
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
617
- import_react_hook_form7.Controller,
957
+ const { control } = (0, import_react_hook_form8.useFormContext)();
958
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
959
+ import_react_hook_form8.Controller,
618
960
  {
619
961
  control,
620
962
  name,
621
- render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
963
+ render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
622
964
  DatePicker,
623
965
  {
624
966
  ...props,
@@ -634,18 +976,18 @@ function DatePickerField({ name, ...props }) {
634
976
  DatePickerField.displayName = "TeachInUI.DatePickerField";
635
977
 
636
978
  // src/ui/form/rhf/fields/checkbox-field.tsx
637
- var import_react_hook_form8 = require("react-hook-form");
638
- var import_jsx_runtime32 = require("react/jsx-runtime");
979
+ var import_react_hook_form9 = require("react-hook-form");
980
+ var import_jsx_runtime35 = require("react/jsx-runtime");
639
981
  function CheckboxField({ name, ...props }) {
640
- const { control } = (0, import_react_hook_form8.useFormContext)();
641
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
642
- import_react_hook_form8.Controller,
982
+ const { control } = (0, import_react_hook_form9.useFormContext)();
983
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
984
+ import_react_hook_form9.Controller,
643
985
  {
644
986
  control,
645
987
  name,
646
- render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { children: [
647
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Checkbox, { ...props, isSelected: field.value, onValueChange: field.onChange }),
648
- error && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "text-tiny text-danger", children: error.message })
988
+ render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { children: [
989
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Checkbox, { ...props, isSelected: field.value, onValueChange: field.onChange }),
990
+ error && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-tiny text-danger", children: error.message })
649
991
  ] })
650
992
  }
651
993
  );
@@ -653,18 +995,18 @@ function CheckboxField({ name, ...props }) {
653
995
  CheckboxField.displayName = "TeachInUI.CheckboxField";
654
996
 
655
997
  // src/ui/form/rhf/fields/switch-field.tsx
656
- var import_react_hook_form9 = require("react-hook-form");
657
- var import_jsx_runtime33 = require("react/jsx-runtime");
998
+ var import_react_hook_form10 = require("react-hook-form");
999
+ var import_jsx_runtime36 = require("react/jsx-runtime");
658
1000
  function SwitchField({ name, ...props }) {
659
- const { control } = (0, import_react_hook_form9.useFormContext)();
660
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
661
- import_react_hook_form9.Controller,
1001
+ const { control } = (0, import_react_hook_form10.useFormContext)();
1002
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1003
+ import_react_hook_form10.Controller,
662
1004
  {
663
1005
  control,
664
1006
  name,
665
- render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { children: [
666
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Switch, { ...props, isSelected: field.value, onValueChange: field.onChange }),
667
- error && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "text-tiny text-danger", children: error.message })
1007
+ render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { children: [
1008
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Switch, { ...props, isSelected: field.value, onValueChange: field.onChange }),
1009
+ error && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-tiny text-danger", children: error.message })
668
1010
  ] })
669
1011
  }
670
1012
  );
@@ -672,16 +1014,16 @@ function SwitchField({ name, ...props }) {
672
1014
  SwitchField.displayName = "TeachInUI.SwitchField";
673
1015
 
674
1016
  // src/ui/form/rhf/fields/radio-field.tsx
675
- var import_react_hook_form10 = require("react-hook-form");
676
- var import_jsx_runtime34 = require("react/jsx-runtime");
1017
+ var import_react_hook_form11 = require("react-hook-form");
1018
+ var import_jsx_runtime37 = require("react/jsx-runtime");
677
1019
  function RadioField({ name, ...props }) {
678
- const { control } = (0, import_react_hook_form10.useFormContext)();
679
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
680
- import_react_hook_form10.Controller,
1020
+ const { control } = (0, import_react_hook_form11.useFormContext)();
1021
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1022
+ import_react_hook_form11.Controller,
681
1023
  {
682
1024
  control,
683
1025
  name,
684
- render: ({ field: { ref, value, onChange, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1026
+ render: ({ field: { ref, value, onChange, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
685
1027
  RadioGroup,
686
1028
  {
687
1029
  ...props,
@@ -700,15 +1042,15 @@ RadioField.displayName = "TeachInUI.RadioField";
700
1042
 
701
1043
  // src/ui/form/form.tsx
702
1044
  var import_form = require("@heroui/form");
703
- var import_react24 = __toESM(require("react"));
704
- var import_jsx_runtime35 = require("react/jsx-runtime");
705
- var Form = import_react24.default.forwardRef(({ ...props }, ref) => {
706
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_form.Form, { ref, ...props });
1045
+ var import_react29 = __toESM(require("react"));
1046
+ var import_jsx_runtime38 = require("react/jsx-runtime");
1047
+ var Form = import_react29.default.forwardRef(({ ...props }, ref) => {
1048
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_form.Form, { ref, ...props });
707
1049
  });
708
1050
  Form.displayName = "TeachInUI.Form";
709
1051
 
710
1052
  // src/ui/format/datetime.tsx
711
- var import_jsx_runtime36 = require("react/jsx-runtime");
1053
+ var import_jsx_runtime39 = require("react/jsx-runtime");
712
1054
  var defaultFormat = {
713
1055
  day: "numeric",
714
1056
  month: "long",
@@ -724,15 +1066,15 @@ function Datetime({
724
1066
  fallback = "\u2014"
725
1067
  }) {
726
1068
  const formatter = new Intl.DateTimeFormat(locale, format);
727
- if (!value) return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_jsx_runtime36.Fragment, { children: fallback });
1069
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_jsx_runtime39.Fragment, { children: fallback });
728
1070
  const date = value instanceof Date ? value : new Date(value);
729
- if (isNaN(date.getTime())) return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_jsx_runtime36.Fragment, { children: fallback });
730
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_jsx_runtime36.Fragment, { children: formatter.format(date) });
1071
+ if (isNaN(date.getTime())) return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_jsx_runtime39.Fragment, { children: fallback });
1072
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_jsx_runtime39.Fragment, { children: formatter.format(date) });
731
1073
  }
732
1074
  Datetime.displayName = "TeachInUI.FormatDatetime";
733
1075
 
734
1076
  // src/ui/format/date.tsx
735
- var import_jsx_runtime37 = require("react/jsx-runtime");
1077
+ var import_jsx_runtime40 = require("react/jsx-runtime");
736
1078
  var defaultFormat2 = {
737
1079
  day: "numeric",
738
1080
  month: "long",
@@ -745,15 +1087,15 @@ function DateFormat({
745
1087
  fallback = "\u2014"
746
1088
  }) {
747
1089
  const formatter = new Intl.DateTimeFormat(locale, format);
748
- if (!value) return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children: fallback });
1090
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_jsx_runtime40.Fragment, { children: fallback });
749
1091
  const date = value instanceof Date ? value : new Date(value);
750
- if (isNaN(date.getTime())) return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children: fallback });
751
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children: formatter.format(date) });
1092
+ if (isNaN(date.getTime())) return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_jsx_runtime40.Fragment, { children: fallback });
1093
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_jsx_runtime40.Fragment, { children: formatter.format(date) });
752
1094
  }
753
1095
  DateFormat.displayName = "TeachInUI.FormatDate";
754
1096
 
755
1097
  // src/ui/format/time.tsx
756
- var import_jsx_runtime38 = require("react/jsx-runtime");
1098
+ var import_jsx_runtime41 = require("react/jsx-runtime");
757
1099
  var defaultFormat3 = {
758
1100
  hour: "2-digit",
759
1101
  minute: "2-digit"
@@ -765,15 +1107,15 @@ function Time({
765
1107
  fallback = "\u2014"
766
1108
  }) {
767
1109
  const formatter = new Intl.DateTimeFormat(locale, format);
768
- if (!value) return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_jsx_runtime38.Fragment, { children: fallback });
1110
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: fallback });
769
1111
  const date = value instanceof Date ? value : new Date(value);
770
- if (isNaN(date.getTime())) return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_jsx_runtime38.Fragment, { children: fallback });
771
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_jsx_runtime38.Fragment, { children: formatter.format(date) });
1112
+ if (isNaN(date.getTime())) return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: fallback });
1113
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: formatter.format(date) });
772
1114
  }
773
1115
  Time.displayName = "TeachInUI.FormatTime";
774
1116
 
775
1117
  // src/ui/format/currency.tsx
776
- var import_jsx_runtime39 = require("react/jsx-runtime");
1118
+ var import_jsx_runtime42 = require("react/jsx-runtime");
777
1119
  function Currency({
778
1120
  amount,
779
1121
  currency = "RUB",
@@ -788,23 +1130,23 @@ function Currency({
788
1130
  maximumFractionDigits: decimals
789
1131
  }
790
1132
  });
791
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_jsx_runtime39.Fragment, { children: formatter.format(amount) });
1133
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_jsx_runtime42.Fragment, { children: formatter.format(amount) });
792
1134
  }
793
1135
  Currency.displayName = "TeachInUI.FormatCurrency";
794
1136
 
795
1137
  // src/ui/format/number.tsx
796
- var import_jsx_runtime40 = require("react/jsx-runtime");
1138
+ var import_jsx_runtime43 = require("react/jsx-runtime");
797
1139
  function Number2({ value, decimals, locale = "ru-RU" }) {
798
1140
  const formatter = new Intl.NumberFormat(locale, {
799
1141
  minimumFractionDigits: decimals != null ? decimals : 0,
800
1142
  maximumFractionDigits: decimals != null ? decimals : 2
801
1143
  });
802
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_jsx_runtime40.Fragment, { children: formatter.format(value) });
1144
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment, { children: formatter.format(value) });
803
1145
  }
804
1146
  Number2.displayName = "TeachInUI.FormatNumber";
805
1147
 
806
1148
  // src/ui/format/percent.tsx
807
- var import_jsx_runtime41 = require("react/jsx-runtime");
1149
+ var import_jsx_runtime44 = require("react/jsx-runtime");
808
1150
  function Percent({
809
1151
  value,
810
1152
  decimals = 1,
@@ -817,12 +1159,12 @@ function Percent({
817
1159
  maximumFractionDigits: decimals
818
1160
  });
819
1161
  const normalizedValue = unit === "percent" ? value / 100 : value;
820
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: formatter.format(normalizedValue) });
1162
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_jsx_runtime44.Fragment, { children: formatter.format(normalizedValue) });
821
1163
  }
822
1164
  Percent.displayName = "TeachInUI.FormatPercent";
823
1165
 
824
1166
  // src/ui/format/plural.tsx
825
- var import_jsx_runtime42 = require("react/jsx-runtime");
1167
+ var import_jsx_runtime45 = require("react/jsx-runtime");
826
1168
  function Plural({
827
1169
  count,
828
1170
  one,
@@ -843,12 +1185,12 @@ function Plural({
843
1185
  };
844
1186
  const selectedForm = forms[rule];
845
1187
  const result = showCount ? `${count} ${selectedForm}` : selectedForm;
846
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_jsx_runtime42.Fragment, { children: result });
1188
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: result });
847
1189
  }
848
1190
  Plural.displayName = "TeachInUI.FormatPlural";
849
1191
 
850
1192
  // src/ui/format/duration.tsx
851
- var import_jsx_runtime43 = require("react/jsx-runtime");
1193
+ var import_jsx_runtime46 = require("react/jsx-runtime");
852
1194
  function Duration({
853
1195
  minutes = 0,
854
1196
  hours = 0,
@@ -870,25 +1212,25 @@ function Duration({
870
1212
  if (remainingMinutes > 0 || totalDays === 0 && totalHours === 0) {
871
1213
  parts.push(compact ? `${remainingMinutes}\u043C` : `${remainingMinutes} \u043C\u0438\u043D`);
872
1214
  }
873
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment, { children: parts.join(" ") });
1215
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_jsx_runtime46.Fragment, { children: parts.join(" ") });
874
1216
  }
875
1217
  Duration.displayName = "TeachInUI.FormatDuration";
876
1218
 
877
1219
  // src/ui/format/boolean.tsx
878
- var import_jsx_runtime44 = require("react/jsx-runtime");
1220
+ var import_jsx_runtime47 = require("react/jsx-runtime");
879
1221
  function Boolean({
880
1222
  value,
881
1223
  trueLabel = "\u0414\u0430",
882
1224
  falseLabel = "\u041D\u0435\u0442",
883
1225
  nullLabel = "\u2014"
884
1226
  }) {
885
- if (value === null || value === void 0) return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_jsx_runtime44.Fragment, { children: nullLabel });
886
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_jsx_runtime44.Fragment, { children: value ? trueLabel : falseLabel });
1227
+ if (value === null || value === void 0) return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_jsx_runtime47.Fragment, { children: nullLabel });
1228
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_jsx_runtime47.Fragment, { children: value ? trueLabel : falseLabel });
887
1229
  }
888
1230
  Boolean.displayName = "TeachInUI.FormatBoolean";
889
1231
 
890
1232
  // src/ui/format/uuid.tsx
891
- var import_jsx_runtime45 = require("react/jsx-runtime");
1233
+ var import_jsx_runtime48 = require("react/jsx-runtime");
892
1234
  var uuidHyphenatedRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;
893
1235
  function normalizeUuid(value) {
894
1236
  const trimmed = value.trim();
@@ -911,20 +1253,20 @@ function Uuid({
911
1253
  showVersion = false,
912
1254
  invalidFallback = "\u2014"
913
1255
  }) {
914
- if (!value) return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: invalidFallback });
1256
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment, { children: invalidFallback });
915
1257
  const normalized = normalizeUuid(value);
916
- if (!normalized) return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: invalidFallback });
1258
+ if (!normalized) return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment, { children: invalidFallback });
917
1259
  const formatted = letterCase === "upper" ? normalized.toUpperCase() : normalized;
918
- if (!showVersion) return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: formatted });
1260
+ if (!showVersion) return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment, { children: formatted });
919
1261
  const version = detectUuidVersion(normalized);
920
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: version !== null ? `${formatted} (v${version})` : formatted });
1262
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment, { children: version !== null ? `${formatted} (v${version})` : formatted });
921
1263
  }
922
1264
  Uuid.displayName = "TeachInUI.FormatUUID";
923
1265
 
924
1266
  // src/ui/surface/bento/bento.tsx
925
- var import_tailwind_variants2 = require("tailwind-variants");
926
- var import_jsx_runtime46 = require("react/jsx-runtime");
927
- var bento = (0, import_tailwind_variants2.tv)({
1267
+ var import_tailwind_variants5 = require("tailwind-variants");
1268
+ var import_jsx_runtime49 = require("react/jsx-runtime");
1269
+ var bento = (0, import_tailwind_variants5.tv)({
928
1270
  base: "rounded-xl p-6 transition-colors",
929
1271
  variants: {
930
1272
  color: {
@@ -961,28 +1303,28 @@ var bento = (0, import_tailwind_variants2.tv)({
961
1303
  }
962
1304
  });
963
1305
  var Bento = ({ className, ...props }) => {
964
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: bento({ ...props, className }), ...props });
1306
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: bento({ ...props, className }), ...props });
965
1307
  };
966
1308
  Bento.displayName = "TeachInUI.Bento";
967
1309
 
968
1310
  // src/ui/surface/card/card.tsx
969
- var import_react25 = __toESM(require("react"));
1311
+ var import_react30 = __toESM(require("react"));
970
1312
  var import_card = require("@heroui/card");
971
- var import_jsx_runtime47 = require("react/jsx-runtime");
972
- var Root = import_react25.default.forwardRef(({ children, ...props }, ref) => {
973
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_card.Card, { ref, ...props, children });
1313
+ var import_jsx_runtime50 = require("react/jsx-runtime");
1314
+ var Root = import_react30.default.forwardRef(({ children, ...props }, ref) => {
1315
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_card.Card, { ref, ...props, children });
974
1316
  });
975
1317
  Root.displayName = "TeachInUI.Card.Root";
976
- var Header = import_react25.default.forwardRef(({ children, ...props }, ref) => {
977
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_card.CardHeader, { ref, ...props, children });
1318
+ var Header = import_react30.default.forwardRef(({ children, ...props }, ref) => {
1319
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_card.CardHeader, { ref, ...props, children });
978
1320
  });
979
1321
  Header.displayName = "TeachInUI.Card.Header";
980
- var Body = import_react25.default.forwardRef(({ children, ...props }, ref) => {
981
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_card.CardBody, { ref, ...props, children });
1322
+ var Body = import_react30.default.forwardRef(({ children, ...props }, ref) => {
1323
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_card.CardBody, { ref, ...props, children });
982
1324
  });
983
1325
  Body.displayName = "TeachInUI.Card.Body";
984
- var Footer = import_react25.default.forwardRef(({ children, ...props }, ref) => {
985
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_card.CardFooter, { ref, ...props, children });
1326
+ var Footer = import_react30.default.forwardRef(({ children, ...props }, ref) => {
1327
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_card.CardFooter, { ref, ...props, children });
986
1328
  });
987
1329
  Footer.displayName = "TeachInUI.Card.Footer";
988
1330
  var Card = {
@@ -994,9 +1336,9 @@ var Card = {
994
1336
 
995
1337
  // src/ui/layout/container/container.tsx
996
1338
  var import_react_slot = require("@radix-ui/react-slot");
997
- var import_tailwind_variants3 = require("tailwind-variants");
998
- var import_jsx_runtime48 = require("react/jsx-runtime");
999
- var variants = (0, import_tailwind_variants3.tv)({
1339
+ var import_tailwind_variants6 = require("tailwind-variants");
1340
+ var import_jsx_runtime51 = require("react/jsx-runtime");
1341
+ var variants = (0, import_tailwind_variants6.tv)({
1000
1342
  base: "w-full mx-auto px-6",
1001
1343
  variants: {
1002
1344
  size: {
@@ -1015,58 +1357,58 @@ var variants = (0, import_tailwind_variants3.tv)({
1015
1357
  });
1016
1358
  var Container = ({ children, asChild = false, className, size, ...props }) => {
1017
1359
  const Comp = asChild ? import_react_slot.Slot : "div";
1018
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Comp, { className: cn(variants({ size }), className), ...props, children });
1360
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Comp, { className: cn(variants({ size }), className), ...props, children });
1019
1361
  };
1020
1362
  Container.displayName = "TeachInUI.Container";
1021
1363
 
1022
1364
  // src/ui/layout/page/breadcrumbs.tsx
1023
1365
  var import_breadcrumbs = require("@heroui/breadcrumbs");
1024
- var import_jsx_runtime49 = require("react/jsx-runtime");
1025
- var Breadcrumbs = ({ items }) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_breadcrumbs.Breadcrumbs, { children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_breadcrumbs.BreadcrumbItem, { href: item.href, isDisabled: item.href === void 0, children: item.label }, item.label)) });
1366
+ var import_jsx_runtime52 = require("react/jsx-runtime");
1367
+ var Breadcrumbs = ({ items }) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_breadcrumbs.Breadcrumbs, { children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_breadcrumbs.BreadcrumbItem, { href: item.href, isDisabled: item.href === void 0, children: item.label }, item.label)) });
1026
1368
 
1027
1369
  // src/ui/layout/page/page-content.tsx
1028
- var import_jsx_runtime50 = require("react/jsx-runtime");
1370
+ var import_jsx_runtime53 = require("react/jsx-runtime");
1029
1371
  var Root2 = ({
1030
1372
  children,
1031
1373
  breadcrumbs = []
1032
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "flex flex-col gap-6", children: [
1033
- breadcrumbs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Breadcrumbs, { items: breadcrumbs }),
1374
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-6", children: [
1375
+ breadcrumbs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Breadcrumbs, { items: breadcrumbs }),
1034
1376
  children
1035
1377
  ] });
1036
1378
  Root2.displayName = "TeachInUI.PageContent.Root";
1037
- var Header2 = ({ children, ...others }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("header", { className: "flex items-center justify-between gap-4", role: "banner", ...others, children });
1379
+ var Header2 = ({ children, ...others }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("header", { className: "flex items-center justify-between gap-4", role: "banner", ...others, children });
1038
1380
  Header2.displayName = "TeachInUI.PageContent.Header";
1039
1381
  var Title = ({
1040
1382
  children,
1041
1383
  ...others
1042
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h1", { className: "text-4xl leading-10 font-bold", ...others, children });
1384
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("h1", { className: "text-4xl leading-10 font-bold", ...others, children });
1043
1385
  Title.displayName = "TeachInUI.PageContent.Title";
1044
1386
  var Actions = ({
1045
1387
  children,
1046
1388
  ...others
1047
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex gap-2", role: "group", ...others, children });
1389
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex gap-2", role: "group", ...others, children });
1048
1390
  Actions.displayName = "TeachInUI.PageContent.Actions";
1049
- var Body2 = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex flex-col gap-6", children });
1391
+ var Body2 = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex flex-col gap-6", children });
1050
1392
  Body2.displayName = "TeachInUI.PageContent.Body";
1051
1393
  var Section = ({
1052
1394
  children,
1053
1395
  ...others
1054
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("section", { className: "flex flex-col gap-4", ...others, children });
1396
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("section", { className: "flex flex-col gap-4", ...others, children });
1055
1397
  Section.displayName = "TeachInUI.PageContent.Section";
1056
1398
  var SectionHeader = ({
1057
1399
  children,
1058
1400
  ...others
1059
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex items-center justify-between", ...others, children });
1401
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex items-center justify-between", ...others, children });
1060
1402
  SectionHeader.displayName = "TeachInUI.PageContent.SectionHeader";
1061
1403
  var SectionTitle = ({
1062
1404
  children,
1063
1405
  ...others
1064
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h2", { className: "text-3xl leading-9 font-bold", ...others, children });
1406
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("h2", { className: "text-3xl leading-9 font-bold", ...others, children });
1065
1407
  SectionTitle.displayName = "TeachInUI.PageContent.SectionTitle";
1066
1408
  var SectionActions = ({
1067
1409
  children,
1068
1410
  ...others
1069
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex gap-2", role: "group", ...others, children });
1411
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex gap-2", role: "group", ...others, children });
1070
1412
  SectionActions.displayName = "TeachInUI.PageContent.SectionActions";
1071
1413
  var PageContent = {
1072
1414
  Root: Root2,
@@ -1081,19 +1423,19 @@ var PageContent = {
1081
1423
  };
1082
1424
 
1083
1425
  // src/ui/layout/page/page-loading.tsx
1084
- var import_jsx_runtime51 = require("react/jsx-runtime");
1085
- var PageLoading = () => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "flex h-screen items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Spinner, {}) });
1426
+ var import_jsx_runtime54 = require("react/jsx-runtime");
1427
+ var PageLoading = () => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "flex h-screen items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Spinner, {}) });
1086
1428
  PageLoading.displayName = "TeachInUI.PageLoading";
1087
1429
 
1088
1430
  // src/ui/layout/page/section-loading.tsx
1089
- var import_jsx_runtime52 = require("react/jsx-runtime");
1090
- var SectionLoading = () => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "flex min-h-[400px] items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Spinner, {}) });
1431
+ var import_jsx_runtime55 = require("react/jsx-runtime");
1432
+ var SectionLoading = () => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "flex min-h-[400px] items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Spinner, {}) });
1091
1433
  SectionLoading.displayName = "TeachInUI.SectionLoading";
1092
1434
 
1093
1435
  // src/ui/layout/flex/flex.tsx
1094
- var import_tailwind_variants4 = require("tailwind-variants");
1095
- var import_jsx_runtime53 = require("react/jsx-runtime");
1096
- var variants2 = (0, import_tailwind_variants4.tv)({
1436
+ var import_tailwind_variants7 = require("tailwind-variants");
1437
+ var import_jsx_runtime56 = require("react/jsx-runtime");
1438
+ var variants2 = (0, import_tailwind_variants7.tv)({
1097
1439
  base: "flex",
1098
1440
  variants: {
1099
1441
  direction: {
@@ -1140,14 +1482,14 @@ var variants2 = (0, import_tailwind_variants4.tv)({
1140
1482
  }
1141
1483
  });
1142
1484
  var Flex = ({ className, ...props }) => {
1143
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: variants2({ ...props, className }), ...props });
1485
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: variants2({ ...props, className }), ...props });
1144
1486
  };
1145
1487
  Flex.displayName = "TeachInUI.Flex";
1146
1488
 
1147
1489
  // src/ui/layout/grid/grid.tsx
1148
- var import_tailwind_variants5 = require("tailwind-variants");
1149
- var import_jsx_runtime54 = require("react/jsx-runtime");
1150
- var variants3 = (0, import_tailwind_variants5.tv)({
1490
+ var import_tailwind_variants8 = require("tailwind-variants");
1491
+ var import_jsx_runtime57 = require("react/jsx-runtime");
1492
+ var variants3 = (0, import_tailwind_variants8.tv)({
1151
1493
  base: "grid",
1152
1494
  variants: {
1153
1495
  columns: {
@@ -1196,26 +1538,26 @@ var variants3 = (0, import_tailwind_variants5.tv)({
1196
1538
  }
1197
1539
  });
1198
1540
  var Grid = ({ className, ...props }) => {
1199
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: variants3({ ...props, className }), ...props });
1541
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: variants3({ ...props, className }), ...props });
1200
1542
  };
1201
1543
  Grid.displayName = "TeachInUI.Grid";
1202
1544
 
1203
1545
  // src/ui/layout/divider/divider.tsx
1204
- var import_react26 = __toESM(require("react"));
1546
+ var import_react31 = __toESM(require("react"));
1205
1547
  var import_divider = require("@heroui/divider");
1206
- var import_jsx_runtime55 = require("react/jsx-runtime");
1207
- var Divider = import_react26.default.forwardRef((props, ref) => {
1548
+ var import_jsx_runtime58 = require("react/jsx-runtime");
1549
+ var Divider = import_react31.default.forwardRef((props, ref) => {
1208
1550
  const { ...restProps } = props;
1209
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_divider.Divider, { ref, ...restProps });
1551
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_divider.Divider, { ref, ...restProps });
1210
1552
  });
1211
1553
  Divider.displayName = "TeachInUI.Divider";
1212
1554
 
1213
1555
  // src/ui/layout/scroll-shadow/scroll-shadow.tsx
1214
- var import_react27 = __toESM(require("react"));
1556
+ var import_react32 = __toESM(require("react"));
1215
1557
  var import_scroll_shadow = require("@heroui/scroll-shadow");
1216
- var import_jsx_runtime56 = require("react/jsx-runtime");
1217
- var ScrollShadow = import_react27.default.forwardRef((props, ref) => {
1218
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_scroll_shadow.ScrollShadow, { ref, ...props });
1558
+ var import_jsx_runtime59 = require("react/jsx-runtime");
1559
+ var ScrollShadow = import_react32.default.forwardRef((props, ref) => {
1560
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_scroll_shadow.ScrollShadow, { ref, ...props });
1219
1561
  });
1220
1562
  ScrollShadow.displayName = "TeachInUI.ScrollShadow";
1221
1563
 
@@ -1226,18 +1568,18 @@ var AccordionItem = Object.assign(import_accordion.AccordionItem, { displayName:
1226
1568
 
1227
1569
  // src/ui/navigation/link/link.tsx
1228
1570
  var import_link = require("@heroui/link");
1229
- var import_jsx_runtime57 = require("react/jsx-runtime");
1571
+ var import_jsx_runtime60 = require("react/jsx-runtime");
1230
1572
  function Link({ children, ...props }) {
1231
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_link.Link, { ...props, children });
1573
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_link.Link, { ...props, children });
1232
1574
  }
1233
1575
  Link.displayName = "TeachInUI.Link";
1234
1576
 
1235
1577
  // src/ui/navigation/tabs/tabs.tsx
1236
- var import_react28 = __toESM(require("react"));
1578
+ var import_react33 = __toESM(require("react"));
1237
1579
  var import_tabs = require("@heroui/tabs");
1238
- var import_jsx_runtime58 = require("react/jsx-runtime");
1239
- var Root3 = import_react28.default.forwardRef(({ children, ...props }, ref) => {
1240
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_tabs.Tabs, { ref, ...props, children });
1580
+ var import_jsx_runtime61 = require("react/jsx-runtime");
1581
+ var Root3 = import_react33.default.forwardRef(({ children, ...props }, ref) => {
1582
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_tabs.Tabs, { ref, ...props, children });
1241
1583
  });
1242
1584
  Root3.displayName = "TeachInUI.Tabs.Root";
1243
1585
  var Tab = Object.assign(import_tabs.Tab, {
@@ -1249,35 +1591,35 @@ var Tabs = {
1249
1591
  };
1250
1592
 
1251
1593
  // src/ui/navigation/navbar/navbar.tsx
1252
- var import_react29 = __toESM(require("react"));
1594
+ var import_react34 = __toESM(require("react"));
1253
1595
  var import_navbar = require("@heroui/navbar");
1254
- var import_jsx_runtime59 = require("react/jsx-runtime");
1255
- var Navbar = import_react29.default.forwardRef((props, ref) => {
1256
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_navbar.Navbar, { ref, ...props });
1596
+ var import_jsx_runtime62 = require("react/jsx-runtime");
1597
+ var Navbar = import_react34.default.forwardRef((props, ref) => {
1598
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.Navbar, { ref, ...props });
1257
1599
  });
1258
1600
  Navbar.displayName = "TeachInUI.Navbar";
1259
- var NavbarBrand = import_react29.default.forwardRef((props, ref) => {
1260
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_navbar.NavbarBrand, { ref, ...props });
1601
+ var NavbarBrand = import_react34.default.forwardRef((props, ref) => {
1602
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarBrand, { ref, ...props });
1261
1603
  });
1262
1604
  NavbarBrand.displayName = "TeachInUI.NavbarBrand";
1263
- var NavbarContent = import_react29.default.forwardRef((props, ref) => {
1264
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_navbar.NavbarContent, { ref, ...props });
1605
+ var NavbarContent = import_react34.default.forwardRef((props, ref) => {
1606
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarContent, { ref, ...props });
1265
1607
  });
1266
1608
  NavbarContent.displayName = "TeachInUI.NavbarContent";
1267
- var NavbarItem = import_react29.default.forwardRef((props, ref) => {
1268
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_navbar.NavbarItem, { ref, ...props });
1609
+ var NavbarItem = import_react34.default.forwardRef((props, ref) => {
1610
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarItem, { ref, ...props });
1269
1611
  });
1270
1612
  NavbarItem.displayName = "TeachInUI.NavbarItem";
1271
- var NavbarMenu = import_react29.default.forwardRef((props, ref) => {
1272
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_navbar.NavbarMenu, { ref, ...props });
1613
+ var NavbarMenu = import_react34.default.forwardRef((props, ref) => {
1614
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarMenu, { ref, ...props });
1273
1615
  });
1274
1616
  NavbarMenu.displayName = "TeachInUI.NavbarMenu";
1275
- var NavbarMenuItem = import_react29.default.forwardRef((props, ref) => {
1276
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_navbar.NavbarMenuItem, { ref, ...props });
1617
+ var NavbarMenuItem = import_react34.default.forwardRef((props, ref) => {
1618
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarMenuItem, { ref, ...props });
1277
1619
  });
1278
1620
  NavbarMenuItem.displayName = "TeachInUI.NavbarMenuItem";
1279
- var NavbarMenuToggle = import_react29.default.forwardRef((props, ref) => {
1280
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_navbar.NavbarMenuToggle, { ref, ...props });
1621
+ var NavbarMenuToggle = import_react34.default.forwardRef((props, ref) => {
1622
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarMenuToggle, { ref, ...props });
1281
1623
  });
1282
1624
  NavbarMenuToggle.displayName = "TeachInUI.NavbarMenuToggle";
1283
1625
 
@@ -1290,30 +1632,30 @@ var BreadcrumbItem2 = Object.assign(import_breadcrumbs3.BreadcrumbItem, {
1290
1632
 
1291
1633
  // src/ui/overlays/modal/modal.tsx
1292
1634
  var import_modal = require("@heroui/modal");
1293
- var import_jsx_runtime60 = require("react/jsx-runtime");
1635
+ var import_jsx_runtime63 = require("react/jsx-runtime");
1294
1636
  function Root4({
1295
1637
  size = "md",
1296
1638
  placement = "center",
1297
1639
  children,
1298
1640
  ...props
1299
1641
  }) {
1300
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_modal.Modal, { placement, size, ...props, children });
1642
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_modal.Modal, { placement, size, ...props, children });
1301
1643
  }
1302
1644
  Root4.displayName = "TeachInUI.Modal.Root";
1303
1645
  function Content({ children, ...props }) {
1304
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_modal.ModalContent, { ...props, children: (onClose) => typeof children === "function" ? children(onClose) : children });
1646
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_modal.ModalContent, { ...props, children: (onClose) => typeof children === "function" ? children(onClose) : children });
1305
1647
  }
1306
1648
  Content.displayName = "TeachInUI.Modal.Content";
1307
1649
  function Header3({ children, ...props }) {
1308
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_modal.ModalHeader, { ...props, children });
1650
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_modal.ModalHeader, { ...props, children });
1309
1651
  }
1310
1652
  Header3.displayName = "TeachInUI.Modal.Header";
1311
1653
  function Body3({ children, ...props }) {
1312
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_modal.ModalBody, { ...props, children });
1654
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_modal.ModalBody, { ...props, children });
1313
1655
  }
1314
1656
  Body3.displayName = "TeachInUI.Modal.Body";
1315
1657
  function Footer2({ children, ...props }) {
1316
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_modal.ModalFooter, { ...props, children });
1658
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_modal.ModalFooter, { ...props, children });
1317
1659
  }
1318
1660
  Footer2.displayName = "TeachInUI.Modal.Footer";
1319
1661
  var Modal = {
@@ -1338,17 +1680,17 @@ var DropdownSection = Object.assign(import_dropdown.DropdownSection, {
1338
1680
 
1339
1681
  // src/ui/overlays/popover/popover.tsx
1340
1682
  var import_popover = require("@heroui/popover");
1341
- var import_jsx_runtime61 = require("react/jsx-runtime");
1683
+ var import_jsx_runtime64 = require("react/jsx-runtime");
1342
1684
  var Root5 = ({ children, ...props }) => {
1343
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_popover.Popover, { ...props, children });
1685
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_popover.Popover, { ...props, children });
1344
1686
  };
1345
1687
  Root5.displayName = "TeachInUI.Popover.Root";
1346
1688
  var Trigger = ({ children, ...props }) => {
1347
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_popover.PopoverTrigger, { ...props, children });
1689
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_popover.PopoverTrigger, { ...props, children });
1348
1690
  };
1349
1691
  Trigger.displayName = "TeachInUI.Popover.Trigger";
1350
1692
  var Content2 = ({ children, ...props }) => {
1351
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_popover.PopoverContent, { ...props, children });
1693
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_popover.PopoverContent, { ...props, children });
1352
1694
  };
1353
1695
  Content2.displayName = "TeachInUI.Popover.Content";
1354
1696
  var Popover = {
@@ -1359,7 +1701,7 @@ var Popover = {
1359
1701
 
1360
1702
  // src/ui/provider/ui-provider.tsx
1361
1703
  var import_system3 = require("@heroui/system");
1362
- var import_jsx_runtime62 = require("react/jsx-runtime");
1704
+ var import_jsx_runtime65 = require("react/jsx-runtime");
1363
1705
  function UIProvider({
1364
1706
  children,
1365
1707
  locale = "ru-RU",
@@ -1367,9 +1709,9 @@ function UIProvider({
1367
1709
  navigate,
1368
1710
  toastProviderProps
1369
1711
  }) {
1370
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_system3.HeroUIProvider, { labelPlacement, locale, navigate, children: [
1712
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_system3.HeroUIProvider, { labelPlacement, locale, navigate, children: [
1371
1713
  children,
1372
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(ToastProvider, { ...toastProviderProps })
1714
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(ToastProvider, { ...toastProviderProps })
1373
1715
  ] });
1374
1716
  }
1375
1717
 
@@ -1769,6 +2111,7 @@ var theme = (0, import_theme.heroui)({
1769
2111
  CheckboxGroup,
1770
2112
  Chip,
1771
2113
  CircularProgress,
2114
+ ClearButton,
1772
2115
  Container,
1773
2116
  DatePicker,
1774
2117
  DatePickerField,
@@ -1817,6 +2160,8 @@ var theme = (0, import_theme.heroui)({
1817
2160
  RadioGroup,
1818
2161
  Root,
1819
2162
  ScrollShadow,
2163
+ Search,
2164
+ SearchField,
1820
2165
  Section,
1821
2166
  SectionActions,
1822
2167
  SectionHeader,