@teach-in/react 1.3.0 → 1.5.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 (137) hide show
  1. package/dist/chunk-2UHA3DYG.mjs +62 -0
  2. package/dist/{chunk-LJIVY6GU.mjs → chunk-46SKVFMZ.mjs} +1 -1
  3. package/dist/{chunk-JDFRAN4S.mjs → chunk-5FFWQB7D.mjs} +12 -2
  4. package/dist/{chunk-544SDU73.mjs → chunk-BBUPZCY6.mjs} +1 -1
  5. package/dist/chunk-C2VWADF5.mjs +34 -0
  6. package/dist/{chunk-NLHQDWUK.mjs → chunk-CKJ5U5Q4.mjs} +1 -1
  7. package/dist/chunk-CUEG2BFV.mjs +34 -0
  8. package/dist/chunk-GTE5VEBV.mjs +68 -0
  9. package/dist/{chunk-CETCW7DS.mjs → chunk-IU2JYI7W.mjs} +1 -1
  10. package/dist/{chunk-KTUGFQWJ.mjs → chunk-KTWHCUYV.mjs} +1 -1
  11. package/dist/chunk-MCQGBAUS.mjs +73 -0
  12. package/dist/chunk-NSU66J5E.mjs +59 -0
  13. package/dist/{chunk-UFYLYN5Z.mjs → chunk-QFWSQOF6.mjs} +20 -2
  14. package/dist/{chunk-R7LDL5CU.mjs → chunk-R46SWVWL.mjs} +1 -1
  15. package/dist/{chunk-WFNNN6WU.mjs → chunk-RPIOTLYT.mjs} +1 -1
  16. package/dist/chunk-SEJXJZSK.mjs +64 -0
  17. package/dist/chunk-TUIN5YJW.mjs +33 -0
  18. package/dist/chunk-UQAG7TKJ.mjs +1 -0
  19. package/dist/chunk-VXYV37IM.mjs +74 -0
  20. package/dist/{chunk-J3OZNLTZ.mjs → chunk-WG4IPOHE.mjs} +5 -5
  21. package/dist/{chunk-AFVGHUW2.mjs → chunk-YZB4VBX7.mjs} +24 -2
  22. package/dist/index.js +658 -247
  23. package/dist/index.mjs +200 -184
  24. package/dist/ui/data/index.mjs +8 -8
  25. package/dist/ui/feedback/index.mjs +11 -11
  26. package/dist/ui/feedback/progress/index.mjs +3 -3
  27. package/dist/ui/form/index.js +447 -106
  28. package/dist/ui/form/index.mjs +30 -20
  29. package/dist/ui/form/rhf/fields/autocomplete-field.mjs +19 -13
  30. package/dist/ui/form/rhf/fields/checkbox-field.mjs +19 -13
  31. package/dist/ui/form/rhf/fields/date-picker-field.mjs +19 -13
  32. package/dist/ui/form/rhf/fields/email-field.js +147 -10
  33. package/dist/ui/form/rhf/fields/email-field.mjs +20 -14
  34. package/dist/ui/form/rhf/fields/index.d.ts +1 -0
  35. package/dist/ui/form/rhf/fields/index.js +443 -102
  36. package/dist/ui/form/rhf/fields/index.mjs +30 -20
  37. package/dist/ui/form/rhf/fields/input-field.js +153 -6
  38. package/dist/ui/form/rhf/fields/input-field.mjs +20 -14
  39. package/dist/ui/form/rhf/fields/radio-field.mjs +19 -13
  40. package/dist/ui/form/rhf/fields/search-field.d.ts +10 -0
  41. package/dist/ui/form/rhf/fields/search-field.js +296 -0
  42. package/dist/ui/form/rhf/fields/search-field.mjs +37 -0
  43. package/dist/ui/form/rhf/fields/select-field.js +136 -26
  44. package/dist/ui/form/rhf/fields/select-field.mjs +20 -14
  45. package/dist/ui/form/rhf/fields/switch-field.mjs +19 -13
  46. package/dist/ui/form/rhf/fields/text-field.js +147 -10
  47. package/dist/ui/form/rhf/fields/text-field.mjs +20 -14
  48. package/dist/ui/form/rhf/fields/textarea-field.mjs +19 -13
  49. package/dist/ui/form/rhf/index.js +443 -102
  50. package/dist/ui/form/rhf/index.mjs +30 -20
  51. package/dist/ui/format/index.mjs +6 -6
  52. package/dist/ui/index.js +658 -247
  53. package/dist/ui/index.mjs +199 -183
  54. package/dist/ui/inputs/clear-button.d.ts +5 -0
  55. package/dist/ui/inputs/clear-button.js +67 -0
  56. package/dist/ui/inputs/clear-button.mjs +8 -0
  57. package/dist/ui/inputs/email/email.js +144 -7
  58. package/dist/ui/inputs/email/email.mjs +4 -2
  59. package/dist/ui/inputs/email/index.js +144 -7
  60. package/dist/ui/inputs/email/index.mjs +4 -2
  61. package/dist/ui/inputs/index.d.ts +2 -0
  62. package/dist/ui/inputs/index.js +396 -59
  63. package/dist/ui/inputs/index.mjs +33 -21
  64. package/dist/ui/inputs/input/index.js +140 -3
  65. package/dist/ui/inputs/input/index.mjs +3 -1
  66. package/dist/ui/inputs/input/input.d.ts +1 -0
  67. package/dist/ui/inputs/input/input.js +140 -3
  68. package/dist/ui/inputs/input/input.mjs +3 -1
  69. package/dist/ui/inputs/input/use-input.d.ts +19 -0
  70. package/dist/ui/inputs/input/use-input.js +82 -0
  71. package/dist/ui/inputs/input/use-input.mjs +7 -0
  72. package/dist/ui/inputs/radio/index.mjs +3 -3
  73. package/dist/ui/inputs/search/index.d.ts +1 -0
  74. package/dist/ui/inputs/search/index.js +270 -0
  75. package/dist/ui/inputs/search/index.mjs +13 -0
  76. package/dist/ui/inputs/search/search.d.ts +7 -0
  77. package/dist/ui/inputs/search/search.js +268 -0
  78. package/dist/ui/inputs/search/search.mjs +12 -0
  79. package/dist/ui/inputs/search/use-search.d.ts +12 -0
  80. package/dist/ui/inputs/search/use-search.js +57 -0
  81. package/dist/ui/inputs/search/use-search.mjs +7 -0
  82. package/dist/ui/inputs/select/index.js +132 -22
  83. package/dist/ui/inputs/select/index.mjs +3 -1
  84. package/dist/ui/inputs/select/select.d.ts +4 -0
  85. package/dist/ui/inputs/select/select.js +132 -22
  86. package/dist/ui/inputs/select/select.mjs +3 -1
  87. package/dist/ui/inputs/select/use-select.d.ts +17 -0
  88. package/dist/ui/inputs/select/use-select.js +85 -0
  89. package/dist/ui/inputs/select/use-select.mjs +7 -0
  90. package/dist/ui/inputs/switch/favorite-switch.d.ts +23 -2
  91. package/dist/ui/inputs/switch/favorite-switch.js +34 -4
  92. package/dist/ui/inputs/switch/favorite-switch.mjs +1 -1
  93. package/dist/ui/inputs/switch/index.js +34 -4
  94. package/dist/ui/inputs/switch/index.mjs +3 -3
  95. package/dist/ui/inputs/text/index.js +144 -7
  96. package/dist/ui/inputs/text/index.mjs +4 -2
  97. package/dist/ui/inputs/text/text.js +144 -7
  98. package/dist/ui/inputs/text/text.mjs +4 -2
  99. package/dist/ui/layout/container/container.mjs +96 -89
  100. package/dist/ui/layout/container/index.mjs +96 -89
  101. package/dist/ui/layout/index.mjs +101 -94
  102. package/dist/ui/layout/page/index.mjs +7 -7
  103. package/dist/ui/layout/page/page-loading.mjs +6 -6
  104. package/dist/ui/layout/page/section-loading.mjs +6 -6
  105. package/dist/ui/navigation/index.mjs +9 -9
  106. package/dist/ui/overlays/index.mjs +8 -8
  107. package/dist/ui/provider/index.mjs +6 -6
  108. package/dist/ui/provider/ui-provider.mjs +6 -6
  109. package/dist/ui/surface/bento/bento.d.ts +2 -2
  110. package/dist/ui/surface/bento/bento.js +5 -5
  111. package/dist/ui/surface/bento/bento.mjs +1 -1
  112. package/dist/ui/surface/bento/index.js +5 -5
  113. package/dist/ui/surface/bento/index.mjs +1 -1
  114. package/dist/ui/surface/card/card.d.ts +2427 -5
  115. package/dist/ui/surface/card/card.js +29 -2
  116. package/dist/ui/surface/card/card.mjs +5 -1
  117. package/dist/ui/surface/card/index.js +29 -2
  118. package/dist/ui/surface/card/index.mjs +5 -1
  119. package/dist/ui/surface/index.js +34 -7
  120. package/dist/ui/surface/index.mjs +7 -3
  121. package/dist/ui/theme/colors/index.js +24 -2
  122. package/dist/ui/theme/colors/index.mjs +2 -2
  123. package/dist/ui/theme/colors/semantic.js +24 -2
  124. package/dist/ui/theme/colors/semantic.mjs +1 -1
  125. package/dist/ui/theme/colors/types.d.ts +2 -0
  126. package/dist/ui/theme/colors.js +24 -2
  127. package/dist/ui/theme/colors.mjs +2 -2
  128. package/dist/ui/theme/index.js +24 -2
  129. package/dist/ui/theme/index.mjs +3 -3
  130. package/dist/ui/theme/theme.js +24 -2
  131. package/dist/ui/theme/theme.mjs +3 -3
  132. package/package.json +1 -1
  133. package/dist/chunk-3YOW5DEZ.mjs +0 -45
  134. package/dist/chunk-E5QSNLSR.mjs +0 -38
  135. package/dist/chunk-V2G5QHZZ.mjs +0 -14
  136. /package/dist/{chunk-CZEO3U25.mjs → chunk-5RNCFTW5.mjs} +0 -0
  137. /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,42 +716,72 @@ 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)({
427
- base: "size-6 stroke-default-400 group-hover:fill-primary-100 group-hover:stroke-default-400",
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)({
733
+ base: "stroke-default-400 group-hover:fill-primary-100 group-hover:stroke-default-400",
428
734
  variants: {
735
+ size: {
736
+ sm: "size-6",
737
+ md: "size-8",
738
+ lg: "size-10"
739
+ },
429
740
  isSelected: {
430
741
  true: "stroke-primary fill-primary-100"
431
742
  }
743
+ },
744
+ defaultVariants: {
745
+ size: "md"
746
+ }
747
+ });
748
+ var wrapperVariants = (0, import_tailwind_variants4.tv)({
749
+ base: "flex cursor-pointer items-center justify-center rounded-sm bg-transparent!",
750
+ variants: {
751
+ size: {
752
+ sm: "h-8 w-8",
753
+ md: "h-10 w-10",
754
+ lg: "h-12 w-12"
755
+ }
756
+ },
757
+ defaultVariants: {
758
+ size: "md"
432
759
  }
433
760
  });
434
- function FavoriteSwitch({ isSelected, onValueChange }) {
761
+ function FavoriteSwitch({ isSelected, onValueChange, size }) {
435
762
  const { Component, slots, getBaseProps, getInputProps, getWrapperProps } = (0, import_switch2.useSwitch)({
436
763
  isSelected,
437
764
  onValueChange
438
765
  });
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)(
766
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Component, { ...getBaseProps(), children: [
767
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "sr-only", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("input", { ...getInputProps() }) }),
768
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
442
769
  "div",
443
770
  {
444
771
  ...getWrapperProps(),
445
772
  className: slots.wrapper({
446
- class: "flex h-8 w-8 cursor-pointer items-center justify-center rounded-sm !bg-transparent"
773
+ class: wrapperVariants({ size })
447
774
  }),
448
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react.Bookmark, { className: bookmarkVariants({ isSelected }) })
775
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
776
+ import_lucide_react3.BookmarkIcon,
777
+ {
778
+ absoluteStrokeWidth: true,
779
+ className: bookmarkVariants({ isSelected, size }),
780
+ strokeLinecap: "round",
781
+ strokeLinejoin: "round",
782
+ strokeWidth: 1.5
783
+ }
784
+ )
449
785
  }
450
786
  )
451
787
  ] });
@@ -456,45 +792,55 @@ var import_radio = require("@heroui/radio");
456
792
  var Radio = Object.assign(import_radio.Radio, { displayName: "TeachInUI.Radio" });
457
793
 
458
794
  // src/ui/inputs/radio/radio-group.tsx
459
- var import_react21 = __toESM(require("react"));
795
+ var import_react26 = __toESM(require("react"));
460
796
  var import_radio2 = require("@heroui/radio");
461
- var import_jsx_runtime22 = require("react/jsx-runtime");
462
- var RadioGroup = import_react21.default.forwardRef(
797
+ var import_jsx_runtime24 = require("react/jsx-runtime");
798
+ var RadioGroup = import_react26.default.forwardRef(
463
799
  (props, ref) => {
464
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_radio2.RadioGroup, { ref, ...props });
800
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_radio2.RadioGroup, { ref, ...props });
465
801
  }
466
802
  );
467
803
  RadioGroup.displayName = "TeachInUI.RadioGroup";
468
804
 
469
805
  // 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 });
806
+ var import_react27 = __toESM(require("react"));
807
+ var import_jsx_runtime25 = require("react/jsx-runtime");
808
+ var Text = import_react27.default.forwardRef(({ ...props }, ref) => {
809
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Input, { ref, type: "text", ...props });
474
810
  });
475
811
  Text.displayName = "TeachInUI.Text";
476
812
 
477
813
  // 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(
814
+ var import_input6 = require("@heroui/input");
815
+ var import_react28 = __toESM(require("react"));
816
+ var import_jsx_runtime26 = require("react/jsx-runtime");
817
+ var Textarea = import_react28.default.forwardRef(
482
818
  ({ minRows = 4, ...props }, ref) => {
483
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_input5.Textarea, { ref, minRows, ...props });
819
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_input6.Textarea, { ref, minRows, ...props });
484
820
  }
485
821
  );
486
822
  Textarea.displayName = "TeachInUI.Textarea";
487
823
 
488
824
  // src/ui/form/rhf/fields/input-field.tsx
489
- var import_jsx_runtime25 = require("react/jsx-runtime");
825
+ var import_jsx_runtime27 = require("react/jsx-runtime");
490
826
  function InputField({ name, ...props }) {
491
827
  const { control } = (0, import_react_hook_form.useFormContext)();
492
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
828
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
493
829
  import_react_hook_form.Controller,
494
830
  {
495
831
  control,
496
832
  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 })
833
+ render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
834
+ Input,
835
+ {
836
+ ...props,
837
+ ...field,
838
+ ref,
839
+ errorMessage: error == null ? void 0 : error.message,
840
+ isInvalid: !!error,
841
+ onValueChange: field.onChange
842
+ }
843
+ )
498
844
  }
499
845
  );
500
846
  }
@@ -502,15 +848,15 @@ InputField.displayName = "TeachInUI.InputField";
502
848
 
503
849
  // src/ui/form/rhf/fields/text-field.tsx
504
850
  var import_react_hook_form2 = require("react-hook-form");
505
- var import_jsx_runtime26 = require("react/jsx-runtime");
851
+ var import_jsx_runtime28 = require("react/jsx-runtime");
506
852
  function TextField({ name, ...props }) {
507
853
  const { control } = (0, import_react_hook_form2.useFormContext)();
508
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
854
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
509
855
  import_react_hook_form2.Controller,
510
856
  {
511
857
  control,
512
858
  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 })
859
+ 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
860
  }
515
861
  );
516
862
  }
@@ -518,31 +864,57 @@ TextField.displayName = "TeachInUI.TextField";
518
864
 
519
865
  // src/ui/form/rhf/fields/email-field.tsx
520
866
  var import_react_hook_form3 = require("react-hook-form");
521
- var import_jsx_runtime27 = require("react/jsx-runtime");
867
+ var import_jsx_runtime29 = require("react/jsx-runtime");
522
868
  function EmailField({ name, ...props }) {
523
869
  const { control } = (0, import_react_hook_form3.useFormContext)();
524
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
870
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
525
871
  import_react_hook_form3.Controller,
526
872
  {
527
873
  control,
528
874
  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 })
875
+ 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
876
  }
531
877
  );
532
878
  }
533
879
  EmailField.displayName = "TeachInUI.EmailField";
534
880
 
535
- // src/ui/form/rhf/fields/textarea-field.tsx
881
+ // src/ui/form/rhf/fields/search-field.tsx
536
882
  var import_react_hook_form4 = require("react-hook-form");
537
- var import_jsx_runtime28 = require("react/jsx-runtime");
538
- function TextareaField({ name, ...props }) {
883
+ var import_jsx_runtime30 = require("react/jsx-runtime");
884
+ function SearchField({ name, ...props }) {
539
885
  const { control } = (0, import_react_hook_form4.useFormContext)();
540
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
886
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
541
887
  import_react_hook_form4.Controller,
542
888
  {
543
889
  control,
544
890
  name,
545
- render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
891
+ render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
892
+ Search,
893
+ {
894
+ ...props,
895
+ ...field,
896
+ ref,
897
+ errorMessage: error == null ? void 0 : error.message,
898
+ isInvalid: !!error,
899
+ onValueChange: field.onChange
900
+ }
901
+ )
902
+ }
903
+ );
904
+ }
905
+ SearchField.displayName = "TeachInUI.SearchField";
906
+
907
+ // src/ui/form/rhf/fields/textarea-field.tsx
908
+ var import_react_hook_form5 = require("react-hook-form");
909
+ var import_jsx_runtime31 = require("react/jsx-runtime");
910
+ function TextareaField({ name, ...props }) {
911
+ const { control } = (0, import_react_hook_form5.useFormContext)();
912
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
913
+ import_react_hook_form5.Controller,
914
+ {
915
+ control,
916
+ name,
917
+ render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
546
918
  Textarea,
547
919
  {
548
920
  ...props,
@@ -558,16 +930,16 @@ function TextareaField({ name, ...props }) {
558
930
  TextareaField.displayName = "TeachInUI.TextareaField";
559
931
 
560
932
  // 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");
933
+ var import_react_hook_form6 = require("react-hook-form");
934
+ var import_jsx_runtime32 = require("react/jsx-runtime");
563
935
  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,
936
+ const { control } = (0, import_react_hook_form6.useFormContext)();
937
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
938
+ import_react_hook_form6.Controller,
567
939
  {
568
940
  control,
569
941
  name,
570
- render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
942
+ render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
571
943
  Select,
572
944
  {
573
945
  selectionMode,
@@ -584,16 +956,16 @@ function SelectField({ name, selectionMode, ...props }) {
584
956
  SelectField.displayName = "TeachInUI.SelectField";
585
957
 
586
958
  // 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");
959
+ var import_react_hook_form7 = require("react-hook-form");
960
+ var import_jsx_runtime33 = require("react/jsx-runtime");
589
961
  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,
962
+ const { control } = (0, import_react_hook_form7.useFormContext)();
963
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
964
+ import_react_hook_form7.Controller,
593
965
  {
594
966
  control,
595
967
  name,
596
- render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
968
+ render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
597
969
  Autocomplete,
598
970
  {
599
971
  ...props,
@@ -609,16 +981,16 @@ function AutocompleteField({ name, ...props }) {
609
981
  AutocompleteField.displayName = "TeachInUI.AutocompleteField";
610
982
 
611
983
  // 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");
984
+ var import_react_hook_form8 = require("react-hook-form");
985
+ var import_jsx_runtime34 = require("react/jsx-runtime");
614
986
  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,
987
+ const { control } = (0, import_react_hook_form8.useFormContext)();
988
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
989
+ import_react_hook_form8.Controller,
618
990
  {
619
991
  control,
620
992
  name,
621
- render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
993
+ render: ({ field: { ref, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
622
994
  DatePicker,
623
995
  {
624
996
  ...props,
@@ -634,18 +1006,18 @@ function DatePickerField({ name, ...props }) {
634
1006
  DatePickerField.displayName = "TeachInUI.DatePickerField";
635
1007
 
636
1008
  // 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");
1009
+ var import_react_hook_form9 = require("react-hook-form");
1010
+ var import_jsx_runtime35 = require("react/jsx-runtime");
639
1011
  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,
1012
+ const { control } = (0, import_react_hook_form9.useFormContext)();
1013
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1014
+ import_react_hook_form9.Controller,
643
1015
  {
644
1016
  control,
645
1017
  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 })
1018
+ render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { children: [
1019
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Checkbox, { ...props, isSelected: field.value, onValueChange: field.onChange }),
1020
+ error && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-tiny text-danger", children: error.message })
649
1021
  ] })
650
1022
  }
651
1023
  );
@@ -653,18 +1025,18 @@ function CheckboxField({ name, ...props }) {
653
1025
  CheckboxField.displayName = "TeachInUI.CheckboxField";
654
1026
 
655
1027
  // 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");
1028
+ var import_react_hook_form10 = require("react-hook-form");
1029
+ var import_jsx_runtime36 = require("react/jsx-runtime");
658
1030
  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,
1031
+ const { control } = (0, import_react_hook_form10.useFormContext)();
1032
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1033
+ import_react_hook_form10.Controller,
662
1034
  {
663
1035
  control,
664
1036
  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 })
1037
+ render: ({ field, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { children: [
1038
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Switch, { ...props, isSelected: field.value, onValueChange: field.onChange }),
1039
+ error && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-tiny text-danger", children: error.message })
668
1040
  ] })
669
1041
  }
670
1042
  );
@@ -672,16 +1044,16 @@ function SwitchField({ name, ...props }) {
672
1044
  SwitchField.displayName = "TeachInUI.SwitchField";
673
1045
 
674
1046
  // 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");
1047
+ var import_react_hook_form11 = require("react-hook-form");
1048
+ var import_jsx_runtime37 = require("react/jsx-runtime");
677
1049
  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,
1050
+ const { control } = (0, import_react_hook_form11.useFormContext)();
1051
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1052
+ import_react_hook_form11.Controller,
681
1053
  {
682
1054
  control,
683
1055
  name,
684
- render: ({ field: { ref, value, onChange, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1056
+ render: ({ field: { ref, value, onChange, ...field }, fieldState: { error } }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
685
1057
  RadioGroup,
686
1058
  {
687
1059
  ...props,
@@ -700,15 +1072,15 @@ RadioField.displayName = "TeachInUI.RadioField";
700
1072
 
701
1073
  // src/ui/form/form.tsx
702
1074
  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 });
1075
+ var import_react29 = __toESM(require("react"));
1076
+ var import_jsx_runtime38 = require("react/jsx-runtime");
1077
+ var Form = import_react29.default.forwardRef(({ ...props }, ref) => {
1078
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_form.Form, { ref, ...props });
707
1079
  });
708
1080
  Form.displayName = "TeachInUI.Form";
709
1081
 
710
1082
  // src/ui/format/datetime.tsx
711
- var import_jsx_runtime36 = require("react/jsx-runtime");
1083
+ var import_jsx_runtime39 = require("react/jsx-runtime");
712
1084
  var defaultFormat = {
713
1085
  day: "numeric",
714
1086
  month: "long",
@@ -724,15 +1096,15 @@ function Datetime({
724
1096
  fallback = "\u2014"
725
1097
  }) {
726
1098
  const formatter = new Intl.DateTimeFormat(locale, format);
727
- if (!value) return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_jsx_runtime36.Fragment, { children: fallback });
1099
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_jsx_runtime39.Fragment, { children: fallback });
728
1100
  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) });
1101
+ if (isNaN(date.getTime())) return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_jsx_runtime39.Fragment, { children: fallback });
1102
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_jsx_runtime39.Fragment, { children: formatter.format(date) });
731
1103
  }
732
1104
  Datetime.displayName = "TeachInUI.FormatDatetime";
733
1105
 
734
1106
  // src/ui/format/date.tsx
735
- var import_jsx_runtime37 = require("react/jsx-runtime");
1107
+ var import_jsx_runtime40 = require("react/jsx-runtime");
736
1108
  var defaultFormat2 = {
737
1109
  day: "numeric",
738
1110
  month: "long",
@@ -745,15 +1117,15 @@ function DateFormat({
745
1117
  fallback = "\u2014"
746
1118
  }) {
747
1119
  const formatter = new Intl.DateTimeFormat(locale, format);
748
- if (!value) return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_jsx_runtime37.Fragment, { children: fallback });
1120
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_jsx_runtime40.Fragment, { children: fallback });
749
1121
  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) });
1122
+ if (isNaN(date.getTime())) return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_jsx_runtime40.Fragment, { children: fallback });
1123
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_jsx_runtime40.Fragment, { children: formatter.format(date) });
752
1124
  }
753
1125
  DateFormat.displayName = "TeachInUI.FormatDate";
754
1126
 
755
1127
  // src/ui/format/time.tsx
756
- var import_jsx_runtime38 = require("react/jsx-runtime");
1128
+ var import_jsx_runtime41 = require("react/jsx-runtime");
757
1129
  var defaultFormat3 = {
758
1130
  hour: "2-digit",
759
1131
  minute: "2-digit"
@@ -765,15 +1137,15 @@ function Time({
765
1137
  fallback = "\u2014"
766
1138
  }) {
767
1139
  const formatter = new Intl.DateTimeFormat(locale, format);
768
- if (!value) return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_jsx_runtime38.Fragment, { children: fallback });
1140
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: fallback });
769
1141
  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) });
1142
+ if (isNaN(date.getTime())) return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: fallback });
1143
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: formatter.format(date) });
772
1144
  }
773
1145
  Time.displayName = "TeachInUI.FormatTime";
774
1146
 
775
1147
  // src/ui/format/currency.tsx
776
- var import_jsx_runtime39 = require("react/jsx-runtime");
1148
+ var import_jsx_runtime42 = require("react/jsx-runtime");
777
1149
  function Currency({
778
1150
  amount,
779
1151
  currency = "RUB",
@@ -788,23 +1160,23 @@ function Currency({
788
1160
  maximumFractionDigits: decimals
789
1161
  }
790
1162
  });
791
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_jsx_runtime39.Fragment, { children: formatter.format(amount) });
1163
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_jsx_runtime42.Fragment, { children: formatter.format(amount) });
792
1164
  }
793
1165
  Currency.displayName = "TeachInUI.FormatCurrency";
794
1166
 
795
1167
  // src/ui/format/number.tsx
796
- var import_jsx_runtime40 = require("react/jsx-runtime");
1168
+ var import_jsx_runtime43 = require("react/jsx-runtime");
797
1169
  function Number2({ value, decimals, locale = "ru-RU" }) {
798
1170
  const formatter = new Intl.NumberFormat(locale, {
799
1171
  minimumFractionDigits: decimals != null ? decimals : 0,
800
1172
  maximumFractionDigits: decimals != null ? decimals : 2
801
1173
  });
802
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_jsx_runtime40.Fragment, { children: formatter.format(value) });
1174
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment, { children: formatter.format(value) });
803
1175
  }
804
1176
  Number2.displayName = "TeachInUI.FormatNumber";
805
1177
 
806
1178
  // src/ui/format/percent.tsx
807
- var import_jsx_runtime41 = require("react/jsx-runtime");
1179
+ var import_jsx_runtime44 = require("react/jsx-runtime");
808
1180
  function Percent({
809
1181
  value,
810
1182
  decimals = 1,
@@ -817,12 +1189,12 @@ function Percent({
817
1189
  maximumFractionDigits: decimals
818
1190
  });
819
1191
  const normalizedValue = unit === "percent" ? value / 100 : value;
820
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: formatter.format(normalizedValue) });
1192
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_jsx_runtime44.Fragment, { children: formatter.format(normalizedValue) });
821
1193
  }
822
1194
  Percent.displayName = "TeachInUI.FormatPercent";
823
1195
 
824
1196
  // src/ui/format/plural.tsx
825
- var import_jsx_runtime42 = require("react/jsx-runtime");
1197
+ var import_jsx_runtime45 = require("react/jsx-runtime");
826
1198
  function Plural({
827
1199
  count,
828
1200
  one,
@@ -843,12 +1215,12 @@ function Plural({
843
1215
  };
844
1216
  const selectedForm = forms[rule];
845
1217
  const result = showCount ? `${count} ${selectedForm}` : selectedForm;
846
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_jsx_runtime42.Fragment, { children: result });
1218
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: result });
847
1219
  }
848
1220
  Plural.displayName = "TeachInUI.FormatPlural";
849
1221
 
850
1222
  // src/ui/format/duration.tsx
851
- var import_jsx_runtime43 = require("react/jsx-runtime");
1223
+ var import_jsx_runtime46 = require("react/jsx-runtime");
852
1224
  function Duration({
853
1225
  minutes = 0,
854
1226
  hours = 0,
@@ -870,25 +1242,25 @@ function Duration({
870
1242
  if (remainingMinutes > 0 || totalDays === 0 && totalHours === 0) {
871
1243
  parts.push(compact ? `${remainingMinutes}\u043C` : `${remainingMinutes} \u043C\u0438\u043D`);
872
1244
  }
873
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment, { children: parts.join(" ") });
1245
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_jsx_runtime46.Fragment, { children: parts.join(" ") });
874
1246
  }
875
1247
  Duration.displayName = "TeachInUI.FormatDuration";
876
1248
 
877
1249
  // src/ui/format/boolean.tsx
878
- var import_jsx_runtime44 = require("react/jsx-runtime");
1250
+ var import_jsx_runtime47 = require("react/jsx-runtime");
879
1251
  function Boolean({
880
1252
  value,
881
1253
  trueLabel = "\u0414\u0430",
882
1254
  falseLabel = "\u041D\u0435\u0442",
883
1255
  nullLabel = "\u2014"
884
1256
  }) {
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 });
1257
+ if (value === null || value === void 0) return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_jsx_runtime47.Fragment, { children: nullLabel });
1258
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_jsx_runtime47.Fragment, { children: value ? trueLabel : falseLabel });
887
1259
  }
888
1260
  Boolean.displayName = "TeachInUI.FormatBoolean";
889
1261
 
890
1262
  // src/ui/format/uuid.tsx
891
- var import_jsx_runtime45 = require("react/jsx-runtime");
1263
+ var import_jsx_runtime48 = require("react/jsx-runtime");
892
1264
  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
1265
  function normalizeUuid(value) {
894
1266
  const trimmed = value.trim();
@@ -911,24 +1283,24 @@ function Uuid({
911
1283
  showVersion = false,
912
1284
  invalidFallback = "\u2014"
913
1285
  }) {
914
- if (!value) return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: invalidFallback });
1286
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment, { children: invalidFallback });
915
1287
  const normalized = normalizeUuid(value);
916
- if (!normalized) return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: invalidFallback });
1288
+ if (!normalized) return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment, { children: invalidFallback });
917
1289
  const formatted = letterCase === "upper" ? normalized.toUpperCase() : normalized;
918
- if (!showVersion) return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: formatted });
1290
+ if (!showVersion) return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment, { children: formatted });
919
1291
  const version = detectUuidVersion(normalized);
920
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: version !== null ? `${formatted} (v${version})` : formatted });
1292
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment, { children: version !== null ? `${formatted} (v${version})` : formatted });
921
1293
  }
922
1294
  Uuid.displayName = "TeachInUI.FormatUUID";
923
1295
 
924
1296
  // 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)({
928
- base: "rounded-xl p-6 transition-colors",
1297
+ var import_tailwind_variants5 = require("tailwind-variants");
1298
+ var import_jsx_runtime49 = require("react/jsx-runtime");
1299
+ var bento = (0, import_tailwind_variants5.tv)({
1300
+ base: "p-8 transition-colors",
929
1301
  variants: {
930
1302
  color: {
931
- default: "bg-default-50 text-default-700",
1303
+ default: "bg-content1 text-foreground",
932
1304
  primary: "bg-primary-50 text-primary-700",
933
1305
  secondary: "bg-secondary-50 text-secondary-700",
934
1306
  success: "bg-success-50 text-success-700",
@@ -937,9 +1309,9 @@ var bento = (0, import_tailwind_variants2.tv)({
937
1309
  },
938
1310
  radius: {
939
1311
  none: "rounded-none",
940
- sm: "rounded-md",
941
- md: "rounded-lg",
942
- lg: "rounded-xl",
1312
+ sm: "rounded-lg",
1313
+ md: "rounded-2xl",
1314
+ lg: "rounded-3xl",
943
1315
  full: "rounded-full"
944
1316
  },
945
1317
  shadow: {
@@ -961,28 +1333,49 @@ var bento = (0, import_tailwind_variants2.tv)({
961
1333
  }
962
1334
  });
963
1335
  var Bento = ({ className, ...props }) => {
964
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: bento({ ...props, className }), ...props });
1336
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: bento({ ...props, className }), ...props });
965
1337
  };
966
1338
  Bento.displayName = "TeachInUI.Bento";
967
1339
 
968
1340
  // src/ui/surface/card/card.tsx
969
- var import_react25 = __toESM(require("react"));
1341
+ var import_react30 = __toESM(require("react"));
970
1342
  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 });
1343
+
1344
+ // src/ui/style/css.ts
1345
+ var import_clsx = require("clsx");
1346
+ var import_tailwind_merge = require("tailwind-merge");
1347
+ function cn(...inputs) {
1348
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
1349
+ }
1350
+
1351
+ // src/ui/surface/card/card.tsx
1352
+ var import_jsx_runtime50 = require("react/jsx-runtime");
1353
+ var CardBase = extendVariants2(import_card.Card, {
1354
+ variants: {
1355
+ radius: {
1356
+ sm: { base: "rounded-lg" },
1357
+ md: { base: "rounded-2xl" },
1358
+ lg: { base: "rounded-3xl" }
1359
+ }
1360
+ },
1361
+ defaultVariants: {
1362
+ shadow: "none"
1363
+ }
1364
+ });
1365
+ var Root = import_react30.default.forwardRef(({ children, className, ...props }, ref) => {
1366
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(CardBase, { ref, className: cn("bg-default-100", className), ...props, children });
974
1367
  });
975
1368
  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 });
1369
+ var Header = import_react30.default.forwardRef(({ children, ...props }, ref) => {
1370
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_card.CardHeader, { ref, ...props, children });
978
1371
  });
979
1372
  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 });
1373
+ var Body = import_react30.default.forwardRef(({ children, ...props }, ref) => {
1374
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_card.CardBody, { ref, ...props, children });
982
1375
  });
983
1376
  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 });
1377
+ var Footer = import_react30.default.forwardRef(({ children, ...props }, ref) => {
1378
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_card.CardFooter, { ref, ...props, children });
986
1379
  });
987
1380
  Footer.displayName = "TeachInUI.Card.Footer";
988
1381
  var Card = {
@@ -994,9 +1387,9 @@ var Card = {
994
1387
 
995
1388
  // src/ui/layout/container/container.tsx
996
1389
  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)({
1390
+ var import_tailwind_variants6 = require("tailwind-variants");
1391
+ var import_jsx_runtime51 = require("react/jsx-runtime");
1392
+ var variants = (0, import_tailwind_variants6.tv)({
1000
1393
  base: "w-full mx-auto px-6",
1001
1394
  variants: {
1002
1395
  size: {
@@ -1015,58 +1408,58 @@ var variants = (0, import_tailwind_variants3.tv)({
1015
1408
  });
1016
1409
  var Container = ({ children, asChild = false, className, size, ...props }) => {
1017
1410
  const Comp = asChild ? import_react_slot.Slot : "div";
1018
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Comp, { className: cn(variants({ size }), className), ...props, children });
1411
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Comp, { className: cn(variants({ size }), className), ...props, children });
1019
1412
  };
1020
1413
  Container.displayName = "TeachInUI.Container";
1021
1414
 
1022
1415
  // src/ui/layout/page/breadcrumbs.tsx
1023
1416
  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)) });
1417
+ var import_jsx_runtime52 = require("react/jsx-runtime");
1418
+ 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
1419
 
1027
1420
  // src/ui/layout/page/page-content.tsx
1028
- var import_jsx_runtime50 = require("react/jsx-runtime");
1421
+ var import_jsx_runtime53 = require("react/jsx-runtime");
1029
1422
  var Root2 = ({
1030
1423
  children,
1031
1424
  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 }),
1425
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex flex-col gap-6", children: [
1426
+ breadcrumbs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Breadcrumbs, { items: breadcrumbs }),
1034
1427
  children
1035
1428
  ] });
1036
1429
  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 });
1430
+ var Header2 = ({ children, ...others }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("header", { className: "flex items-center justify-between gap-4", role: "banner", ...others, children });
1038
1431
  Header2.displayName = "TeachInUI.PageContent.Header";
1039
1432
  var Title = ({
1040
1433
  children,
1041
1434
  ...others
1042
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h1", { className: "text-4xl leading-10 font-bold", ...others, children });
1435
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("h1", { className: "text-4xl leading-10 font-bold", ...others, children });
1043
1436
  Title.displayName = "TeachInUI.PageContent.Title";
1044
1437
  var Actions = ({
1045
1438
  children,
1046
1439
  ...others
1047
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex gap-2", role: "group", ...others, children });
1440
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex gap-2", role: "group", ...others, children });
1048
1441
  Actions.displayName = "TeachInUI.PageContent.Actions";
1049
- var Body2 = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex flex-col gap-6", children });
1442
+ var Body2 = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex flex-col gap-6", children });
1050
1443
  Body2.displayName = "TeachInUI.PageContent.Body";
1051
1444
  var Section = ({
1052
1445
  children,
1053
1446
  ...others
1054
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("section", { className: "flex flex-col gap-4", ...others, children });
1447
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("section", { className: "flex flex-col gap-4", ...others, children });
1055
1448
  Section.displayName = "TeachInUI.PageContent.Section";
1056
1449
  var SectionHeader = ({
1057
1450
  children,
1058
1451
  ...others
1059
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex items-center justify-between", ...others, children });
1452
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex items-center justify-between", ...others, children });
1060
1453
  SectionHeader.displayName = "TeachInUI.PageContent.SectionHeader";
1061
1454
  var SectionTitle = ({
1062
1455
  children,
1063
1456
  ...others
1064
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h2", { className: "text-3xl leading-9 font-bold", ...others, children });
1457
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("h2", { className: "text-3xl leading-9 font-bold", ...others, children });
1065
1458
  SectionTitle.displayName = "TeachInUI.PageContent.SectionTitle";
1066
1459
  var SectionActions = ({
1067
1460
  children,
1068
1461
  ...others
1069
- }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex gap-2", role: "group", ...others, children });
1462
+ }) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "flex gap-2", role: "group", ...others, children });
1070
1463
  SectionActions.displayName = "TeachInUI.PageContent.SectionActions";
1071
1464
  var PageContent = {
1072
1465
  Root: Root2,
@@ -1081,19 +1474,19 @@ var PageContent = {
1081
1474
  };
1082
1475
 
1083
1476
  // 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, {}) });
1477
+ var import_jsx_runtime54 = require("react/jsx-runtime");
1478
+ 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
1479
  PageLoading.displayName = "TeachInUI.PageLoading";
1087
1480
 
1088
1481
  // 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, {}) });
1482
+ var import_jsx_runtime55 = require("react/jsx-runtime");
1483
+ 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
1484
  SectionLoading.displayName = "TeachInUI.SectionLoading";
1092
1485
 
1093
1486
  // 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)({
1487
+ var import_tailwind_variants7 = require("tailwind-variants");
1488
+ var import_jsx_runtime56 = require("react/jsx-runtime");
1489
+ var variants2 = (0, import_tailwind_variants7.tv)({
1097
1490
  base: "flex",
1098
1491
  variants: {
1099
1492
  direction: {
@@ -1140,14 +1533,14 @@ var variants2 = (0, import_tailwind_variants4.tv)({
1140
1533
  }
1141
1534
  });
1142
1535
  var Flex = ({ className, ...props }) => {
1143
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: variants2({ ...props, className }), ...props });
1536
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: variants2({ ...props, className }), ...props });
1144
1537
  };
1145
1538
  Flex.displayName = "TeachInUI.Flex";
1146
1539
 
1147
1540
  // 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)({
1541
+ var import_tailwind_variants8 = require("tailwind-variants");
1542
+ var import_jsx_runtime57 = require("react/jsx-runtime");
1543
+ var variants3 = (0, import_tailwind_variants8.tv)({
1151
1544
  base: "grid",
1152
1545
  variants: {
1153
1546
  columns: {
@@ -1196,26 +1589,26 @@ var variants3 = (0, import_tailwind_variants5.tv)({
1196
1589
  }
1197
1590
  });
1198
1591
  var Grid = ({ className, ...props }) => {
1199
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: variants3({ ...props, className }), ...props });
1592
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: variants3({ ...props, className }), ...props });
1200
1593
  };
1201
1594
  Grid.displayName = "TeachInUI.Grid";
1202
1595
 
1203
1596
  // src/ui/layout/divider/divider.tsx
1204
- var import_react26 = __toESM(require("react"));
1597
+ var import_react31 = __toESM(require("react"));
1205
1598
  var import_divider = require("@heroui/divider");
1206
- var import_jsx_runtime55 = require("react/jsx-runtime");
1207
- var Divider = import_react26.default.forwardRef((props, ref) => {
1599
+ var import_jsx_runtime58 = require("react/jsx-runtime");
1600
+ var Divider = import_react31.default.forwardRef((props, ref) => {
1208
1601
  const { ...restProps } = props;
1209
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_divider.Divider, { ref, ...restProps });
1602
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_divider.Divider, { ref, ...restProps });
1210
1603
  });
1211
1604
  Divider.displayName = "TeachInUI.Divider";
1212
1605
 
1213
1606
  // src/ui/layout/scroll-shadow/scroll-shadow.tsx
1214
- var import_react27 = __toESM(require("react"));
1607
+ var import_react32 = __toESM(require("react"));
1215
1608
  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 });
1609
+ var import_jsx_runtime59 = require("react/jsx-runtime");
1610
+ var ScrollShadow = import_react32.default.forwardRef((props, ref) => {
1611
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_scroll_shadow.ScrollShadow, { ref, ...props });
1219
1612
  });
1220
1613
  ScrollShadow.displayName = "TeachInUI.ScrollShadow";
1221
1614
 
@@ -1226,18 +1619,18 @@ var AccordionItem = Object.assign(import_accordion.AccordionItem, { displayName:
1226
1619
 
1227
1620
  // src/ui/navigation/link/link.tsx
1228
1621
  var import_link = require("@heroui/link");
1229
- var import_jsx_runtime57 = require("react/jsx-runtime");
1622
+ var import_jsx_runtime60 = require("react/jsx-runtime");
1230
1623
  function Link({ children, ...props }) {
1231
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_link.Link, { ...props, children });
1624
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_link.Link, { ...props, children });
1232
1625
  }
1233
1626
  Link.displayName = "TeachInUI.Link";
1234
1627
 
1235
1628
  // src/ui/navigation/tabs/tabs.tsx
1236
- var import_react28 = __toESM(require("react"));
1629
+ var import_react33 = __toESM(require("react"));
1237
1630
  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 });
1631
+ var import_jsx_runtime61 = require("react/jsx-runtime");
1632
+ var Root3 = import_react33.default.forwardRef(({ children, ...props }, ref) => {
1633
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_tabs.Tabs, { ref, ...props, children });
1241
1634
  });
1242
1635
  Root3.displayName = "TeachInUI.Tabs.Root";
1243
1636
  var Tab = Object.assign(import_tabs.Tab, {
@@ -1249,35 +1642,35 @@ var Tabs = {
1249
1642
  };
1250
1643
 
1251
1644
  // src/ui/navigation/navbar/navbar.tsx
1252
- var import_react29 = __toESM(require("react"));
1645
+ var import_react34 = __toESM(require("react"));
1253
1646
  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 });
1647
+ var import_jsx_runtime62 = require("react/jsx-runtime");
1648
+ var Navbar = import_react34.default.forwardRef((props, ref) => {
1649
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.Navbar, { ref, ...props });
1257
1650
  });
1258
1651
  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 });
1652
+ var NavbarBrand = import_react34.default.forwardRef((props, ref) => {
1653
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarBrand, { ref, ...props });
1261
1654
  });
1262
1655
  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 });
1656
+ var NavbarContent = import_react34.default.forwardRef((props, ref) => {
1657
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarContent, { ref, ...props });
1265
1658
  });
1266
1659
  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 });
1660
+ var NavbarItem = import_react34.default.forwardRef((props, ref) => {
1661
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarItem, { ref, ...props });
1269
1662
  });
1270
1663
  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 });
1664
+ var NavbarMenu = import_react34.default.forwardRef((props, ref) => {
1665
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarMenu, { ref, ...props });
1273
1666
  });
1274
1667
  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 });
1668
+ var NavbarMenuItem = import_react34.default.forwardRef((props, ref) => {
1669
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarMenuItem, { ref, ...props });
1277
1670
  });
1278
1671
  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 });
1672
+ var NavbarMenuToggle = import_react34.default.forwardRef((props, ref) => {
1673
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_navbar.NavbarMenuToggle, { ref, ...props });
1281
1674
  });
1282
1675
  NavbarMenuToggle.displayName = "TeachInUI.NavbarMenuToggle";
1283
1676
 
@@ -1290,30 +1683,30 @@ var BreadcrumbItem2 = Object.assign(import_breadcrumbs3.BreadcrumbItem, {
1290
1683
 
1291
1684
  // src/ui/overlays/modal/modal.tsx
1292
1685
  var import_modal = require("@heroui/modal");
1293
- var import_jsx_runtime60 = require("react/jsx-runtime");
1686
+ var import_jsx_runtime63 = require("react/jsx-runtime");
1294
1687
  function Root4({
1295
1688
  size = "md",
1296
1689
  placement = "center",
1297
1690
  children,
1298
1691
  ...props
1299
1692
  }) {
1300
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_modal.Modal, { placement, size, ...props, children });
1693
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_modal.Modal, { placement, size, ...props, children });
1301
1694
  }
1302
1695
  Root4.displayName = "TeachInUI.Modal.Root";
1303
1696
  function Content({ children, ...props }) {
1304
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_modal.ModalContent, { ...props, children: (onClose) => typeof children === "function" ? children(onClose) : children });
1697
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_modal.ModalContent, { ...props, children: (onClose) => typeof children === "function" ? children(onClose) : children });
1305
1698
  }
1306
1699
  Content.displayName = "TeachInUI.Modal.Content";
1307
1700
  function Header3({ children, ...props }) {
1308
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_modal.ModalHeader, { ...props, children });
1701
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_modal.ModalHeader, { ...props, children });
1309
1702
  }
1310
1703
  Header3.displayName = "TeachInUI.Modal.Header";
1311
1704
  function Body3({ children, ...props }) {
1312
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_modal.ModalBody, { ...props, children });
1705
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_modal.ModalBody, { ...props, children });
1313
1706
  }
1314
1707
  Body3.displayName = "TeachInUI.Modal.Body";
1315
1708
  function Footer2({ children, ...props }) {
1316
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_modal.ModalFooter, { ...props, children });
1709
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_modal.ModalFooter, { ...props, children });
1317
1710
  }
1318
1711
  Footer2.displayName = "TeachInUI.Modal.Footer";
1319
1712
  var Modal = {
@@ -1338,17 +1731,17 @@ var DropdownSection = Object.assign(import_dropdown.DropdownSection, {
1338
1731
 
1339
1732
  // src/ui/overlays/popover/popover.tsx
1340
1733
  var import_popover = require("@heroui/popover");
1341
- var import_jsx_runtime61 = require("react/jsx-runtime");
1734
+ var import_jsx_runtime64 = require("react/jsx-runtime");
1342
1735
  var Root5 = ({ children, ...props }) => {
1343
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_popover.Popover, { ...props, children });
1736
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_popover.Popover, { ...props, children });
1344
1737
  };
1345
1738
  Root5.displayName = "TeachInUI.Popover.Root";
1346
1739
  var Trigger = ({ children, ...props }) => {
1347
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_popover.PopoverTrigger, { ...props, children });
1740
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_popover.PopoverTrigger, { ...props, children });
1348
1741
  };
1349
1742
  Trigger.displayName = "TeachInUI.Popover.Trigger";
1350
1743
  var Content2 = ({ children, ...props }) => {
1351
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_popover.PopoverContent, { ...props, children });
1744
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_popover.PopoverContent, { ...props, children });
1352
1745
  };
1353
1746
  Content2.displayName = "TeachInUI.Popover.Content";
1354
1747
  var Popover = {
@@ -1359,7 +1752,7 @@ var Popover = {
1359
1752
 
1360
1753
  // src/ui/provider/ui-provider.tsx
1361
1754
  var import_system3 = require("@heroui/system");
1362
- var import_jsx_runtime62 = require("react/jsx-runtime");
1755
+ var import_jsx_runtime65 = require("react/jsx-runtime");
1363
1756
  function UIProvider({
1364
1757
  children,
1365
1758
  locale = "ru-RU",
@@ -1367,19 +1760,12 @@ function UIProvider({
1367
1760
  navigate,
1368
1761
  toastProviderProps
1369
1762
  }) {
1370
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_system3.HeroUIProvider, { labelPlacement, locale, navigate, children: [
1763
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_system3.HeroUIProvider, { labelPlacement, locale, navigate, children: [
1371
1764
  children,
1372
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(ToastProvider, { ...toastProviderProps })
1765
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(ToastProvider, { ...toastProviderProps })
1373
1766
  ] });
1374
1767
  }
1375
1768
 
1376
- // src/ui/style/css.ts
1377
- var import_clsx = require("clsx");
1378
- var import_tailwind_merge = require("tailwind-merge");
1379
- function cn(...inputs) {
1380
- return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
1381
- }
1382
-
1383
1769
  // src/ui/theme/tokens/breakpoints.ts
1384
1770
  var breakpoints = {
1385
1771
  xs: 480,
@@ -1629,7 +2015,7 @@ var themeColorsLight = {
1629
2015
  ...commonColors.shipgray,
1630
2016
  foreground: commonColors.black,
1631
2017
  flat: commonColors.shipgray[300],
1632
- DEFAULT: commonColors.shipgray[100]
2018
+ DEFAULT: commonColors.shipgray[200]
1633
2019
  },
1634
2020
  primary: {
1635
2021
  ...commonColors.blue,
@@ -1660,15 +2046,31 @@ var themeColorsLight = {
1660
2046
  foreground: commonColors.white,
1661
2047
  flat: commonColors.red[500],
1662
2048
  DEFAULT: commonColors.red[400]
2049
+ },
2050
+ link: {
2051
+ DEFAULT: commonColors.blue[500]
2052
+ },
2053
+ brand: {
2054
+ DEFAULT: commonColors.blue[800]
1663
2055
  }
1664
2056
  };
1665
2057
  var themeColorsDark = {
1666
2058
  ...base.dark,
1667
2059
  default: {
1668
2060
  ...swapColorValues(commonColors.shipgray),
2061
+ 50: commonColors.shipgray[800],
2062
+ 100: commonColors.shipgray[700],
2063
+ 200: commonColors.shipgray[600],
2064
+ 300: commonColors.shipgray[500],
2065
+ 400: commonColors.shipgray[400],
2066
+ 500: commonColors.shipgray[300],
2067
+ 600: commonColors.shipgray[200],
2068
+ 700: commonColors.shipgray[100],
2069
+ 800: commonColors.shipgray[50],
2070
+ 900: commonColors.white,
1669
2071
  foreground: commonColors.white,
1670
2072
  flat: commonColors.shipgray[600],
1671
- DEFAULT: commonColors.shipgray[700]
2073
+ DEFAULT: commonColors.shipgray[600]
1672
2074
  },
1673
2075
  primary: {
1674
2076
  ...swapColorValues(commonColors.blue),
@@ -1699,6 +2101,12 @@ var themeColorsDark = {
1699
2101
  foreground: commonColors.white,
1700
2102
  flat: commonColors.red[500],
1701
2103
  DEFAULT: commonColors.red[500]
2104
+ },
2105
+ link: {
2106
+ DEFAULT: commonColors.blue[300]
2107
+ },
2108
+ brand: {
2109
+ DEFAULT: commonColors.white
1702
2110
  }
1703
2111
  };
1704
2112
  var semanticColors = {
@@ -1769,6 +2177,7 @@ var theme = (0, import_theme.heroui)({
1769
2177
  CheckboxGroup,
1770
2178
  Chip,
1771
2179
  CircularProgress,
2180
+ ClearButton,
1772
2181
  Container,
1773
2182
  DatePicker,
1774
2183
  DatePickerField,
@@ -1817,6 +2226,8 @@ var theme = (0, import_theme.heroui)({
1817
2226
  RadioGroup,
1818
2227
  Root,
1819
2228
  ScrollShadow,
2229
+ Search,
2230
+ SearchField,
1820
2231
  Section,
1821
2232
  SectionActions,
1822
2233
  SectionHeader,