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