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