@revikornmann/muka-ui 0.25.0 → 0.26.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 (96) hide show
  1. package/dist/cjs/components/Autocomplete/Autocomplete.css +63 -0
  2. package/dist/cjs/components/Autocomplete/Autocomplete.js +190 -0
  3. package/dist/cjs/components/Autocomplete/Autocomplete.js.map +1 -0
  4. package/dist/cjs/components/Autocomplete/index.js +6 -0
  5. package/dist/cjs/components/Autocomplete/index.js.map +1 -0
  6. package/dist/cjs/components/Combobox/Combobox.js +7 -23
  7. package/dist/cjs/components/Combobox/Combobox.js.map +1 -1
  8. package/dist/cjs/components/ContextSelect/ContextSelect.js +2 -2
  9. package/dist/cjs/components/ContextSelect/ContextSelect.js.map +1 -1
  10. package/dist/cjs/components/Dialog/Dialog.js +9 -1
  11. package/dist/cjs/components/Dialog/Dialog.js.map +1 -1
  12. package/dist/cjs/components/DropdownSelect/DropdownSelect.js +2 -2
  13. package/dist/cjs/components/DropdownSelect/DropdownSelect.js.map +1 -1
  14. package/dist/cjs/components/InputCounter/InputCounter.css +175 -0
  15. package/dist/cjs/components/InputCounter/InputCounter.js +196 -0
  16. package/dist/cjs/components/InputCounter/InputCounter.js.map +1 -0
  17. package/dist/cjs/components/InputCounter/index.js +11 -0
  18. package/dist/cjs/components/InputCounter/index.js.map +1 -0
  19. package/dist/cjs/components/Menu/Menu.js +26 -11
  20. package/dist/cjs/components/Menu/Menu.js.map +1 -1
  21. package/dist/cjs/components/Popover/Popover.js +10 -8
  22. package/dist/cjs/components/Popover/Popover.js.map +1 -1
  23. package/dist/cjs/components/Tooltip/Tooltip.js +7 -2
  24. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  25. package/dist/cjs/components/index.js +7 -3
  26. package/dist/cjs/components/index.js.map +1 -1
  27. package/dist/cjs/utils/suggestionList.js +27 -0
  28. package/dist/cjs/utils/suggestionList.js.map +1 -0
  29. package/dist/cjs/utils/usePortalContainer.js +33 -0
  30. package/dist/cjs/utils/usePortalContainer.js.map +1 -0
  31. package/dist/esm/components/Autocomplete/Autocomplete.css +63 -0
  32. package/dist/esm/components/Autocomplete/Autocomplete.js +187 -0
  33. package/dist/esm/components/Autocomplete/Autocomplete.js.map +1 -0
  34. package/dist/esm/components/Autocomplete/index.js +2 -0
  35. package/dist/esm/components/Autocomplete/index.js.map +1 -0
  36. package/dist/esm/components/Combobox/Combobox.js +5 -21
  37. package/dist/esm/components/Combobox/Combobox.js.map +1 -1
  38. package/dist/esm/components/ContextSelect/ContextSelect.js +2 -2
  39. package/dist/esm/components/ContextSelect/ContextSelect.js.map +1 -1
  40. package/dist/esm/components/Dialog/Dialog.js +9 -1
  41. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  42. package/dist/esm/components/DropdownSelect/DropdownSelect.js +2 -2
  43. package/dist/esm/components/DropdownSelect/DropdownSelect.js.map +1 -1
  44. package/dist/esm/components/InputCounter/InputCounter.css +175 -0
  45. package/dist/esm/components/InputCounter/InputCounter.js +160 -0
  46. package/dist/esm/components/InputCounter/InputCounter.js.map +1 -0
  47. package/dist/esm/components/InputCounter/index.js +3 -0
  48. package/dist/esm/components/InputCounter/index.js.map +1 -0
  49. package/dist/esm/components/Menu/Menu.js +26 -11
  50. package/dist/esm/components/Menu/Menu.js.map +1 -1
  51. package/dist/esm/components/Popover/Popover.js +10 -5
  52. package/dist/esm/components/Popover/Popover.js.map +1 -1
  53. package/dist/esm/components/Tooltip/Tooltip.js +7 -2
  54. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  55. package/dist/esm/components/index.js +2 -0
  56. package/dist/esm/components/index.js.map +1 -1
  57. package/dist/esm/utils/suggestionList.js +22 -0
  58. package/dist/esm/utils/suggestionList.js.map +1 -0
  59. package/dist/esm/utils/usePortalContainer.js +29 -0
  60. package/dist/esm/utils/usePortalContainer.js.map +1 -0
  61. package/dist/styles/components/Autocomplete.css +63 -0
  62. package/dist/styles/components/InputCounter.css +175 -0
  63. package/dist/styles/index.css +449 -205
  64. package/dist/styles/muka-dark.css +449 -205
  65. package/dist/styles/muka-light.css +449 -205
  66. package/dist/styles/wireframe-dark.css +449 -205
  67. package/dist/styles/wireframe-light.css +449 -205
  68. package/dist/types/components/Autocomplete/Autocomplete.d.ts +105 -0
  69. package/dist/types/components/Autocomplete/Autocomplete.d.ts.map +1 -0
  70. package/dist/types/components/Autocomplete/index.d.ts +2 -0
  71. package/dist/types/components/Autocomplete/index.d.ts.map +1 -0
  72. package/dist/types/components/Combobox/Combobox.d.ts +2 -2
  73. package/dist/types/components/Combobox/Combobox.d.ts.map +1 -1
  74. package/dist/types/components/ContextSelect/ContextSelect.d.ts +6 -0
  75. package/dist/types/components/ContextSelect/ContextSelect.d.ts.map +1 -1
  76. package/dist/types/components/Dialog/Dialog.d.ts.map +1 -1
  77. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts +6 -0
  78. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts.map +1 -1
  79. package/dist/types/components/InputCounter/InputCounter.d.ts +79 -0
  80. package/dist/types/components/InputCounter/InputCounter.d.ts.map +1 -0
  81. package/dist/types/components/InputCounter/index.d.ts +3 -0
  82. package/dist/types/components/InputCounter/index.d.ts.map +1 -0
  83. package/dist/types/components/Menu/Menu.d.ts +4 -4
  84. package/dist/types/components/Menu/Menu.d.ts.map +1 -1
  85. package/dist/types/components/Popover/Popover.d.ts +12 -0
  86. package/dist/types/components/Popover/Popover.d.ts.map +1 -1
  87. package/dist/types/components/Tooltip/Tooltip.d.ts +6 -0
  88. package/dist/types/components/Tooltip/Tooltip.d.ts.map +1 -1
  89. package/dist/types/components/index.d.ts +2 -0
  90. package/dist/types/components/index.d.ts.map +1 -1
  91. package/dist/types/utils/suggestionList.d.ts +13 -0
  92. package/dist/types/utils/suggestionList.d.ts.map +1 -0
  93. package/dist/types/utils/usePortalContainer.d.ts +19 -0
  94. package/dist/types/utils/usePortalContainer.d.ts.map +1 -0
  95. package/docs/consumers/README.md +2 -2
  96. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -32,29 +33,30 @@ var __importStar = (this && this.__importStar) || (function () {
32
33
  return result;
33
34
  };
34
35
  })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
36
  Object.defineProperty(exports, "__esModule", { value: true });
39
37
  exports.PopoverClose = exports.PopoverTrigger = exports.PopoverRoot = exports.PopoverContent = exports.Popover = void 0;
40
38
  const jsx_runtime_1 = require("react/jsx-runtime");
41
- const react_1 = __importDefault(require("react"));
39
+ const react_1 = __importStar(require("react"));
42
40
  const PopoverPrimitive = __importStar(require("@radix-ui/react-popover"));
41
+ const usePortalContainer_1 = require("../../utils/usePortalContainer");
43
42
  require("./Popover.css");
44
- const Popover = ({ children, content, side = 'bottom', align = 'center', sideOffset = 8, open, defaultOpen, onOpenChange, modal = false, showArrow = true, maxWidth, className = '', }) => {
43
+ const Popover = ({ children, content, side = 'bottom', align = 'center', sideOffset = 8, open, defaultOpen, onOpenChange, modal = false, showArrow = true, maxWidth, className = '', portalContainer, }) => {
44
+ const triggerRef = (0, react_1.useRef)(null);
45
+ const container = (0, usePortalContainer_1.usePortalContainer)(portalContainer, triggerRef);
45
46
  const contentClasses = ['muka-popover__content', className].filter(Boolean).join(' ');
46
47
  const contentStyle = maxWidth
47
48
  ? { maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth }
48
49
  : undefined;
49
- return ((0, jsx_runtime_1.jsxs)(PopoverPrimitive.Root, { open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange, modal: modal, children: [(0, jsx_runtime_1.jsx)(PopoverPrimitive.Trigger, { asChild: true, children: children }), (0, jsx_runtime_1.jsx)(PopoverPrimitive.Portal, { children: (0, jsx_runtime_1.jsxs)(PopoverPrimitive.Content, { className: contentClasses, side: side, align: align, sideOffset: sideOffset, style: contentStyle, children: [content, showArrow && ((0, jsx_runtime_1.jsx)(PopoverPrimitive.Arrow, { className: "muka-popover__arrow", width: 12, height: 6 }))] }) })] }));
50
+ return ((0, jsx_runtime_1.jsxs)(PopoverPrimitive.Root, { open: open, defaultOpen: defaultOpen, onOpenChange: onOpenChange, modal: modal, children: [(0, jsx_runtime_1.jsx)(PopoverPrimitive.Trigger, { asChild: true, ref: triggerRef, children: children }), (0, jsx_runtime_1.jsx)(PopoverPrimitive.Portal, { container: container, children: (0, jsx_runtime_1.jsxs)(PopoverPrimitive.Content, { className: contentClasses, side: side, align: align, sideOffset: sideOffset, style: contentStyle, children: [content, showArrow && ((0, jsx_runtime_1.jsx)(PopoverPrimitive.Arrow, { className: "muka-popover__arrow", width: 12, height: 6 }))] }) })] }));
50
51
  };
51
52
  exports.Popover = Popover;
52
- exports.PopoverContent = react_1.default.forwardRef(({ children, side = 'bottom', align = 'center', sideOffset = 8, showArrow = true, maxWidth, className = '' }, ref) => {
53
+ exports.PopoverContent = react_1.default.forwardRef(({ children, side = 'bottom', align = 'center', sideOffset = 8, showArrow = true, maxWidth, className = '', portalContainer }, ref) => {
54
+ const container = (0, usePortalContainer_1.usePortalContainer)(portalContainer);
53
55
  const contentClasses = ['muka-popover__content', className].filter(Boolean).join(' ');
54
56
  const contentStyle = maxWidth
55
57
  ? { maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth }
56
58
  : undefined;
57
- return ((0, jsx_runtime_1.jsx)(PopoverPrimitive.Portal, { children: (0, jsx_runtime_1.jsxs)(PopoverPrimitive.Content, { ref: ref, className: contentClasses, side: side, align: align, sideOffset: sideOffset, style: contentStyle, children: [children, showArrow && ((0, jsx_runtime_1.jsx)(PopoverPrimitive.Arrow, { className: "muka-popover__arrow", width: 12, height: 6 }))] }) }));
59
+ return ((0, jsx_runtime_1.jsx)(PopoverPrimitive.Portal, { container: container, children: (0, jsx_runtime_1.jsxs)(PopoverPrimitive.Content, { ref: ref, className: contentClasses, side: side, align: align, sideOffset: sideOffset, style: contentStyle, children: [children, showArrow && ((0, jsx_runtime_1.jsx)(PopoverPrimitive.Arrow, { className: "muka-popover__arrow", width: 12, height: 6 }))] }) }));
58
60
  });
59
61
  exports.PopoverContent.displayName = 'PopoverContent';
60
62
  // Re-export primitives for compositional use
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../../../components/Popover/Popover.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../../../components/Popover/Popover.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -35,14 +36,18 @@ var __importStar = (this && this.__importStar) || (function () {
35
36
  Object.defineProperty(exports, "__esModule", { value: true });
36
37
  exports.Tooltip = void 0;
37
38
  const jsx_runtime_1 = require("react/jsx-runtime");
39
+ const react_1 = require("react");
38
40
  const TooltipPrimitive = __importStar(require("@radix-ui/react-tooltip"));
41
+ const usePortalContainer_1 = require("../../utils/usePortalContainer");
39
42
  require("./Tooltip.css");
40
- const Tooltip = ({ children, content, side = 'top', align = 'center', delayDuration = 400, disabled = false, open, onOpenChange, className = '', }) => {
43
+ const Tooltip = ({ children, content, side = 'top', align = 'center', delayDuration = 400, disabled = false, open, onOpenChange, className = '', portalContainer, }) => {
44
+ const triggerRef = (0, react_1.useRef)(null);
45
+ const container = (0, usePortalContainer_1.usePortalContainer)(portalContainer, triggerRef);
41
46
  if (disabled) {
42
47
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
43
48
  }
44
49
  const contentClasses = ['muka-tooltip__content', className].filter(Boolean).join(' ');
45
- return ((0, jsx_runtime_1.jsx)(TooltipPrimitive.Provider, { delayDuration: delayDuration, children: (0, jsx_runtime_1.jsxs)(TooltipPrimitive.Root, { open: open, onOpenChange: onOpenChange, children: [(0, jsx_runtime_1.jsx)(TooltipPrimitive.Trigger, { asChild: true, children: children }), (0, jsx_runtime_1.jsx)(TooltipPrimitive.Portal, { children: (0, jsx_runtime_1.jsxs)(TooltipPrimitive.Content, { className: contentClasses, side: side, align: align, sideOffset: 6, children: [content, (0, jsx_runtime_1.jsx)("div", { className: "muka-tooltip__arrow-wrapper", children: (0, jsx_runtime_1.jsx)(TooltipPrimitive.Arrow, { className: "muka-tooltip__arrow", width: 12, height: 6 }) })] }) })] }) }));
50
+ return ((0, jsx_runtime_1.jsx)(TooltipPrimitive.Provider, { delayDuration: delayDuration, children: (0, jsx_runtime_1.jsxs)(TooltipPrimitive.Root, { open: open, onOpenChange: onOpenChange, children: [(0, jsx_runtime_1.jsx)(TooltipPrimitive.Trigger, { asChild: true, ref: triggerRef, children: children }), (0, jsx_runtime_1.jsx)(TooltipPrimitive.Portal, { container: container, children: (0, jsx_runtime_1.jsxs)(TooltipPrimitive.Content, { className: contentClasses, side: side, align: align, sideOffset: 6, children: [content, (0, jsx_runtime_1.jsx)("div", { className: "muka-tooltip__arrow-wrapper", children: (0, jsx_runtime_1.jsx)(TooltipPrimitive.Arrow, { className: "muka-tooltip__arrow", width: 12, height: 6 }) })] }) })] }) }));
46
51
  };
47
52
  exports.Tooltip = Tooltip;
48
53
  exports.default = exports.Tooltip;
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../../components/Tooltip/Tooltip.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0EAA4D;AAC5D,yBAAuB;AAuBhB,MAAM,OAAO,GAA2B,CAAC,EAC9C,QAAQ,EACR,OAAO,EACP,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,QAAQ,EAChB,aAAa,GAAG,GAAG,EACnB,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,YAAY,EACZ,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,2DAAG,QAAQ,GAAI,CAAC;IACzB,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtF,OAAO,CACL,uBAAC,gBAAgB,CAAC,QAAQ,IAAC,aAAa,EAAE,aAAa,YACrD,wBAAC,gBAAgB,CAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,aAC3D,uBAAC,gBAAgB,CAAC,OAAO,IAAC,OAAO,kBAC9B,QAAQ,GACgB,EAC3B,uBAAC,gBAAgB,CAAC,MAAM,cACtB,wBAAC,gBAAgB,CAAC,OAAO,IACvB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,CAAC,aAEZ,OAAO,EACR,gCAAK,SAAS,EAAC,6BAA6B,YAC1C,uBAAC,gBAAgB,CAAC,KAAK,IAAC,SAAS,EAAC,qBAAqB,EAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAI,GAC5E,IACmB,GACH,IACJ,GACE,CAC7B,CAAC;AACJ,CAAC,CAAC;AAvCW,QAAA,OAAO,WAuClB;AAEF,kBAAe,eAAO,CAAC"}
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../../components/Tooltip/Tooltip.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb,iCAAsC;AACtC,0EAA4D;AAC5D,uEAAoE;AACpE,yBAAuB;AA6BhB,MAAM,OAAO,GAA2B,CAAC,EAC9C,QAAQ,EACR,OAAO,EACP,IAAI,GAAG,KAAK,EACZ,KAAK,GAAG,QAAQ,EAChB,aAAa,GAAG,GAAG,EACnB,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,YAAY,EACZ,SAAS,GAAG,EAAE,EACd,eAAe,GAChB,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,IAAA,cAAM,EAAoB,IAAI,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAA,uCAAkB,EAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAElE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,2DAAG,QAAQ,GAAI,CAAC;IACzB,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtF,OAAO,CACL,uBAAC,gBAAgB,CAAC,QAAQ,IAAC,aAAa,EAAE,aAAa,YACrD,wBAAC,gBAAgB,CAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,aAC3D,uBAAC,gBAAgB,CAAC,OAAO,IAAC,OAAO,QAAC,GAAG,EAAE,UAAU,YAC9C,QAAQ,GACgB,EAC3B,uBAAC,gBAAgB,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,YAC3C,wBAAC,gBAAgB,CAAC,OAAO,IACvB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,CAAC,aAEZ,OAAO,EACR,gCAAK,SAAS,EAAC,6BAA6B,YAC1C,uBAAC,gBAAgB,CAAC,KAAK,IAAC,SAAS,EAAC,qBAAqB,EAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAI,GAC5E,IACmB,GACH,IACJ,GACE,CAC7B,CAAC;AACJ,CAAC,CAAC;AA3CW,QAAA,OAAO,WA2ClB;AAEF,kBAAe,eAAO,CAAC"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TableHead = exports.Table = exports.RangeSlider = exports.DataPieChart = exports.PieChart = exports.Progress = exports.ProfileBadge = exports.AvatarGroup = exports.Avatar = exports.BadgeNumber = exports.Badge = exports.Container = exports.Section = exports.NavigationTransition = exports.AppShell = exports.View = exports.Dialog = exports.BottomBarTab = exports.BottomBar = exports.ControlBar = exports.TopBar = exports.ProgressAccordeon = exports.ProgressTracker = exports.EmptyState = exports.Toast = exports.Alert = exports.RadioTile = exports.CheckboxTile = exports.Toggle = exports.Checkbox = exports.Radio = exports.TabPanel = exports.Tab = exports.TabList = exports.Tabs = exports.DropdownSelect = exports.Select = exports.Divider = exports.Chip = exports.listRegisteredIcons = exports.registerIcon = exports.Icon = exports.Label = exports.Card = exports.NumberInput = exports.useForm = exports.Form = exports.Input = exports.ListItem = exports.Button = void 0;
4
- exports.Spinner = exports.Sheet = exports.AccordionContent = exports.AccordionTrigger = exports.AccordionItem = exports.Accordion = exports.PopoverClose = exports.PopoverTrigger = exports.PopoverRoot = exports.PopoverContent = exports.Popover = exports.Tooltip = exports.Drawer = exports.Pagination = exports.Breadcrumb = exports.Skeleton = exports.Textarea = exports.Scrollbar = exports.ContextSelect = exports.useMenuSearch = exports.highlightMenuMatch = exports.MenuSubContent = exports.MenuSubTrigger = exports.MenuSub = exports.MenuRadioItem = exports.MenuRadioGroup = exports.MenuCheckboxItem = exports.MenuGroup = exports.MenuSeparator = exports.MenuItem = exports.MenuSearch = exports.MenuContent = exports.MenuTrigger = exports.DropdownMenu = exports.Menu = exports.FileUploadItem = exports.FileUpload = exports.SmsOtpField = exports.DocumentViewer = exports.Tile = exports.PriceTag = exports.SegmentGroup = exports.DatePicker = exports.DataTable = exports.useTableSelection = exports.TablePagination = exports.TableHeaderCell = exports.TableCell = exports.TableRow = exports.TableBody = void 0;
5
- exports.TextLink = exports.PhotoUploader = exports.Thumbnail = exports.SocialSignInButton = exports.LicensePlateInput = exports.PullToRefresh = exports.SwipeActions = exports.Combobox = exports.ChatAttachmentChip = exports.TypingIndicator = exports.AgentTaskList = exports.DEFAULT_EMOJI = exports.EmojiPicker = exports.PhotoDraftStrip = exports.VOICE_PEAK_COUNT = exports.isVoiceRecordingSupported = exports.formatClock = exports.downsamplePeaks = exports.useVoiceRecorder = exports.VoiceMessage = exports.RecordingBar = exports.Waveform = exports.ChatComposer = exports.ChatPhotoGrid = exports.ChatMessageList = exports.ChatMessageStack = exports.ChatMessage = exports.SearchInput = exports.ActionSheet = exports.FAB = exports.SpecRow = exports.SpecList = void 0;
3
+ exports.Table = exports.RangeSlider = exports.DataPieChart = exports.PieChart = exports.Progress = exports.ProfileBadge = exports.AvatarGroup = exports.Avatar = exports.BadgeNumber = exports.Badge = exports.Container = exports.Section = exports.NavigationTransition = exports.AppShell = exports.View = exports.Dialog = exports.BottomBarTab = exports.BottomBar = exports.ControlBar = exports.TopBar = exports.ProgressAccordeon = exports.ProgressTracker = exports.EmptyState = exports.Toast = exports.Alert = exports.RadioTile = exports.CheckboxTile = exports.Toggle = exports.Checkbox = exports.Radio = exports.TabPanel = exports.Tab = exports.TabList = exports.Tabs = exports.DropdownSelect = exports.Select = exports.Divider = exports.Chip = exports.listRegisteredIcons = exports.registerIcon = exports.Icon = exports.Label = exports.Card = exports.InputCounter = exports.NumberInput = exports.useForm = exports.Form = exports.Input = exports.ListItem = exports.Button = void 0;
4
+ exports.Sheet = exports.AccordionContent = exports.AccordionTrigger = exports.AccordionItem = exports.Accordion = exports.PopoverClose = exports.PopoverTrigger = exports.PopoverRoot = exports.PopoverContent = exports.Popover = exports.Tooltip = exports.Drawer = exports.Pagination = exports.Breadcrumb = exports.Skeleton = exports.Textarea = exports.Scrollbar = exports.ContextSelect = exports.useMenuSearch = exports.highlightMenuMatch = exports.MenuSubContent = exports.MenuSubTrigger = exports.MenuSub = exports.MenuRadioItem = exports.MenuRadioGroup = exports.MenuCheckboxItem = exports.MenuGroup = exports.MenuSeparator = exports.MenuItem = exports.MenuSearch = exports.MenuContent = exports.MenuTrigger = exports.DropdownMenu = exports.Menu = exports.FileUploadItem = exports.FileUpload = exports.SmsOtpField = exports.DocumentViewer = exports.Tile = exports.PriceTag = exports.SegmentGroup = exports.DatePicker = exports.DataTable = exports.useTableSelection = exports.TablePagination = exports.TableHeaderCell = exports.TableCell = exports.TableRow = exports.TableBody = exports.TableHead = void 0;
5
+ exports.TextLink = exports.PhotoUploader = exports.Thumbnail = exports.SocialSignInButton = exports.LicensePlateInput = exports.PullToRefresh = exports.SwipeActions = exports.Autocomplete = exports.Combobox = exports.ChatAttachmentChip = exports.TypingIndicator = exports.AgentTaskList = exports.DEFAULT_EMOJI = exports.EmojiPicker = exports.PhotoDraftStrip = exports.VOICE_PEAK_COUNT = exports.isVoiceRecordingSupported = exports.formatClock = exports.downsamplePeaks = exports.useVoiceRecorder = exports.VoiceMessage = exports.RecordingBar = exports.Waveform = exports.ChatComposer = exports.ChatPhotoGrid = exports.ChatMessageList = exports.ChatMessageStack = exports.ChatMessage = exports.SearchInput = exports.ActionSheet = exports.FAB = exports.SpecRow = exports.SpecList = exports.Spinner = void 0;
6
6
  // Muka Design System Components
7
7
  var Button_1 = require("./Button");
8
8
  Object.defineProperty(exports, "Button", { enumerable: true, get: function () { return Button_1.Button; } });
@@ -15,6 +15,8 @@ Object.defineProperty(exports, "Form", { enumerable: true, get: function () { re
15
15
  Object.defineProperty(exports, "useForm", { enumerable: true, get: function () { return Form_1.useForm; } });
16
16
  var NumberInput_1 = require("./NumberInput");
17
17
  Object.defineProperty(exports, "NumberInput", { enumerable: true, get: function () { return NumberInput_1.NumberInput; } });
18
+ var InputCounter_1 = require("./InputCounter");
19
+ Object.defineProperty(exports, "InputCounter", { enumerable: true, get: function () { return InputCounter_1.InputCounter; } });
18
20
  var Card_1 = require("./Card");
19
21
  Object.defineProperty(exports, "Card", { enumerable: true, get: function () { return Card_1.Card; } });
20
22
  var Label_1 = require("./Label");
@@ -210,6 +212,8 @@ var ChatAttachmentChip_1 = require("./ChatAttachmentChip");
210
212
  Object.defineProperty(exports, "ChatAttachmentChip", { enumerable: true, get: function () { return ChatAttachmentChip_1.ChatAttachmentChip; } });
211
213
  var Combobox_1 = require("./Combobox");
212
214
  Object.defineProperty(exports, "Combobox", { enumerable: true, get: function () { return Combobox_1.Combobox; } });
215
+ var Autocomplete_1 = require("./Autocomplete");
216
+ Object.defineProperty(exports, "Autocomplete", { enumerable: true, get: function () { return Autocomplete_1.Autocomplete; } });
213
217
  var SwipeActions_1 = require("./SwipeActions");
214
218
  Object.defineProperty(exports, "SwipeActions", { enumerable: true, get: function () { return SwipeActions_1.SwipeActions; } });
215
219
  var PullToRefresh_1 = require("./PullToRefresh");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../components/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /**
3
+ * Shared helpers for text fields with a suggestion `Menu` (Combobox,
4
+ * Autocomplete): highlight navigation that skips disabled rows.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.nextEnabledIndex = exports.firstEnabledIndex = void 0;
8
+ /** Index of the first enabled row, or 0 when every row is disabled. */
9
+ const firstEnabledIndex = (items) => {
10
+ const index = items.findIndex((item) => !item.disabled);
11
+ return index === -1 ? 0 : index;
12
+ };
13
+ exports.firstEnabledIndex = firstEnabledIndex;
14
+ /** Next enabled row from `from` in `direction`, wrapping around. */
15
+ const nextEnabledIndex = (items, from, direction) => {
16
+ if (items.length === 0)
17
+ return 0;
18
+ let index = from;
19
+ for (let step = 0; step < items.length; step += 1) {
20
+ index = (index + direction + items.length) % items.length;
21
+ if (!items[index]?.disabled)
22
+ return index;
23
+ }
24
+ return from;
25
+ };
26
+ exports.nextEnabledIndex = nextEnabledIndex;
27
+ //# sourceMappingURL=suggestionList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestionList.js","sourceRoot":"","sources":["../../../utils/suggestionList.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,uEAAuE;AAChE,MAAM,iBAAiB,GAAG,CAAC,KAAkB,EAAU,EAAE;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAClC,CAAC,CAAC;AAHW,QAAA,iBAAiB,qBAG5B;AAEF,oEAAoE;AAC7D,MAAM,gBAAgB,GAAG,CAC9B,KAAkB,EAClB,IAAY,EACZ,SAAiB,EACT,EAAE;IACV,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACjC,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QAClD,KAAK,GAAG,CAAC,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ;YAAE,OAAO,KAAK,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAZW,QAAA,gBAAgB,oBAY3B"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PortalContainerContext = void 0;
5
+ exports.usePortalContainer = usePortalContainer;
6
+ const react_1 = require("react");
7
+ /**
8
+ * The element overlays should portal into instead of `document.body`.
9
+ *
10
+ * `Dialog` provides its native `<dialog>` here. A modal `<dialog>` opened with
11
+ * `showModal()` sits in the browser's top layer and makes the rest of the
12
+ * document inert, so an overlay portaled to `document.body` would render
13
+ * behind it and could not be interacted with.
14
+ */
15
+ exports.PortalContainerContext = (0, react_1.createContext)(null);
16
+ /**
17
+ * Resolve where a Radix-portaled overlay (Tooltip, Popover, Menu…) renders.
18
+ *
19
+ * Order: the explicit `override` → the enclosing `Dialog` (context) → the
20
+ * closest native `<dialog>` above `anchorRef` → `undefined` (Radix default,
21
+ * `document.body`). An explicit `null` override also falls through.
22
+ */
23
+ function usePortalContainer(override, anchorRef) {
24
+ const fromContext = (0, react_1.useContext)(exports.PortalContainerContext);
25
+ const [closestDialog, setClosestDialog] = (0, react_1.useState)(null);
26
+ (0, react_1.useLayoutEffect)(() => {
27
+ if (!anchorRef)
28
+ return;
29
+ setClosestDialog(anchorRef.current?.closest('dialog') ?? null);
30
+ }, [anchorRef]);
31
+ return override ?? fromContext ?? closestDialog ?? undefined;
32
+ }
33
+ //# sourceMappingURL=usePortalContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePortalContainer.js","sourceRoot":"","sources":["../../../utils/usePortalContainer.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AAsBb,gDAaC;AAjCD,iCAA6E;AAG7E;;;;;;;GAOG;AACU,QAAA,sBAAsB,GAAG,IAAA,qBAAa,EAAqB,IAAI,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,QAA6B,EAC7B,SAAqC;IAErC,MAAM,WAAW,GAAG,IAAA,kBAAU,EAAC,8BAAsB,CAAC,CAAC;IACvD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAqB,IAAI,CAAC,CAAC;IAE7E,IAAA,uBAAe,EAAC,GAAG,EAAE;QACnB,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,gBAAgB,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAc,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9E,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,QAAQ,IAAI,WAAW,IAAI,aAAa,IAAI,SAAS,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,63 @@
1
+ /* Autocomplete — Figma Input Autocomplete (Input field + single-line suggestion Menu).
2
+ The field reuses the Input styles (.muka-input*); only the menu wiring lives here. */
3
+
4
+ .muka-autocomplete {
5
+ min-width: 200px;
6
+ }
7
+
8
+ /* Covers the field's outer edge so the menu matches its full width. The menu
9
+ is only open while focused, when the field has the bold border. */
10
+ .muka-autocomplete__menu-anchor {
11
+ position: absolute;
12
+ inset: calc(-1 * var(--border-width-bold));
13
+ z-index: 0;
14
+ margin: 0;
15
+ padding: 0;
16
+ border: none;
17
+ background: transparent;
18
+ pointer-events: none;
19
+ opacity: 0;
20
+ }
21
+
22
+ /* Keep the field content above the invisible anchor. */
23
+ .muka-autocomplete__field > :not(.muka-autocomplete__menu-anchor) {
24
+ position: relative;
25
+ z-index: 1;
26
+ }
27
+
28
+ /* Figma: the menu is as wide as the field (never below the menu min-width token). */
29
+ .muka-autocomplete__menu {
30
+ width: var(--radix-dropdown-menu-trigger-width);
31
+ max-width: calc(100vw - 2rem);
32
+ }
33
+
34
+ /* Suggestions are single-line; long labels truncate. */
35
+ .muka-autocomplete__menu .muka-menu__item-label {
36
+ overflow: hidden;
37
+ text-overflow: ellipsis;
38
+ }
39
+
40
+ /* Loading and empty rows: menu-row geometry, not selectable. */
41
+ .muka-autocomplete__status {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: var(--menu-item-gap);
45
+ min-height: var(--menu-item-height);
46
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
47
+ color: var(--color-text-subtle-default);
48
+ font-family: var(--text-label-md-regular-fontFamily);
49
+ font-size: var(--text-label-md-regular-fontSize);
50
+ font-weight: var(--text-label-md-regular-fontWeight);
51
+ line-height: var(--text-label-md-regular-lineHeight);
52
+ }
53
+
54
+ .muka-autocomplete__footer {
55
+ flex-shrink: 0;
56
+ padding: var(--spacing-2) var(--spacing-3);
57
+ border-top: var(--border-width-regular) solid var(--color-border-default);
58
+ color: var(--color-text-subtle-default);
59
+ font-family: var(--text-label-sm-regular-fontFamily);
60
+ font-size: var(--text-label-sm-regular-fontSize);
61
+ font-weight: var(--text-label-sm-regular-fontWeight);
62
+ line-height: var(--text-label-sm-regular-lineHeight);
63
+ }
@@ -0,0 +1,187 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useId, useMemo, useRef, useState } from 'react';
4
+ import { Icon } from '../Icon';
5
+ import { Menu, MenuContent, MenuItem, MenuTrigger, highlightMenuMatch, } from '../Menu';
6
+ import { Spinner } from '../Spinner';
7
+ import { mergeIds, VISUALLY_HIDDEN_CLASS } from '../../utils/accessibility';
8
+ import { firstEnabledIndex, nextEnabledIndex } from '../../utils/suggestionList';
9
+ import { usePortalContainer } from '../../utils/usePortalContainer';
10
+ import '../Input/Input.css';
11
+ import './Autocomplete.css';
12
+ /**
13
+ * Autocomplete — single-value free-input text field with a suggestion Menu.
14
+ *
15
+ * Matches Figma "Input Autocomplete". The consumer supplies the suggestions
16
+ * (typically fetched as the user types); picking one writes its label into
17
+ * the field. Typed text that matches nothing is kept as is.
18
+ *
19
+ * For multiple values as chips, use `Combobox`.
20
+ */
21
+ export function Autocomplete({ value, onInputChange, options, onSelect, loading = false, minChars = 1, emptyMessage, filter = false, menuFooter, clearable = true, clearLabel = 'Clear', loadingLabel = 'Loading suggestions', resultsLabel = (count) => `${count} suggestions`, placeholder, label, helperText, error = false, errorMessage, disabled = false, readOnly = false, size = 'md', fullWidth = false, iconLeft, name, id, required = false, className = '', 'aria-label': ariaLabel, onBlur, onFocus, portalContainer, }) {
22
+ const generatedId = useId();
23
+ const fieldId = id || name || generatedId;
24
+ const helperTextId = `${fieldId}-helper`;
25
+ const errorMessageId = `${fieldId}-error`;
26
+ const listboxId = `${fieldId}-listbox`;
27
+ const inputRef = useRef(null);
28
+ const rootRef = useRef(null);
29
+ const menuRef = useRef(null);
30
+ const menuContainer = usePortalContainer(portalContainer, rootRef);
31
+ // Drives the focused treatment: true only while focus is inside the field
32
+ // or its (portaled) menu (MUK-86).
33
+ const [focused, setFocused] = useState(false);
34
+ // Closed by a pick, Escape or an outside press; reopens on the next keystroke
35
+ // or ArrowDown, or when focus comes back into the field.
36
+ const [dismissed, setDismissed] = useState(false);
37
+ const [activeIndex, setActiveIndex] = useState(0);
38
+ const query = value.trim();
39
+ const interactive = !disabled && !readOnly;
40
+ const visibleOptions = useMemo(() => {
41
+ if (!filter)
42
+ return options;
43
+ const q = query.toLowerCase();
44
+ return options.filter((option) => filter(option, q));
45
+ }, [options, filter, query]);
46
+ const hasOptions = visibleOptions.length > 0;
47
+ const showLoadingRow = loading && !hasOptions;
48
+ const showEmptyRow = !loading && !hasOptions && Boolean(emptyMessage);
49
+ const showMenu = interactive &&
50
+ focused &&
51
+ !dismissed &&
52
+ query.length >= minChars &&
53
+ (hasOptions || showLoadingRow || showEmptyRow);
54
+ const optionKey = visibleOptions.map((option) => option.value).join('\0');
55
+ useEffect(() => {
56
+ setActiveIndex(firstEnabledIndex(visibleOptions));
57
+ // Reset only when the set of options changes, not on every render.
58
+ // eslint-disable-next-line react-hooks/exhaustive-deps
59
+ }, [optionKey]);
60
+ const optionId = (index) => `${listboxId}-option-${index}`;
61
+ const activeOption = showMenu && hasOptions ? visibleOptions[activeIndex] : undefined;
62
+ const announcement = !showMenu
63
+ ? ''
64
+ : hasOptions
65
+ ? resultsLabel(visibleOptions.length)
66
+ : showLoadingRow
67
+ ? loadingLabel
68
+ : typeof emptyMessage === 'string'
69
+ ? emptyMessage
70
+ : '';
71
+ const showError = error && errorMessage;
72
+ const describedBy = mergeIds(showError ? errorMessageId : helperText ? helperTextId : undefined);
73
+ const selectOption = (option) => {
74
+ if (option.disabled)
75
+ return;
76
+ onInputChange(option.label, 'select');
77
+ onSelect?.(option);
78
+ setDismissed(true);
79
+ inputRef.current?.focus();
80
+ };
81
+ const handleInputChange = (event) => {
82
+ setDismissed(false);
83
+ onInputChange(event.target.value, 'input');
84
+ };
85
+ const handleClear = () => {
86
+ onInputChange('', 'clear');
87
+ setDismissed(false);
88
+ inputRef.current?.focus();
89
+ };
90
+ const handleFocus = () => {
91
+ if (disabled)
92
+ return;
93
+ setFocused(true);
94
+ };
95
+ // Moving between the field and the portaled menu keeps focus "inside";
96
+ // only a real exit drops the focused style, closes the menu and calls onBlur.
97
+ const handleBlur = (event) => {
98
+ const next = event.relatedTarget;
99
+ if (next && (rootRef.current?.contains(next) || menuRef.current?.contains(next))) {
100
+ return;
101
+ }
102
+ setFocused(false);
103
+ setDismissed(false);
104
+ onBlur?.(event);
105
+ };
106
+ const handleKeyDown = (event) => {
107
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
108
+ if (!showMenu) {
109
+ if (event.key === 'ArrowDown' && dismissed) {
110
+ event.preventDefault();
111
+ setDismissed(false);
112
+ }
113
+ return;
114
+ }
115
+ event.preventDefault();
116
+ setActiveIndex((current) => nextEnabledIndex(visibleOptions, current, event.key === 'ArrowDown' ? 1 : -1));
117
+ return;
118
+ }
119
+ if (event.key === 'Enter') {
120
+ // Only intercept Enter when it picks a row, so a form can still submit.
121
+ if (activeOption && !activeOption.disabled) {
122
+ event.preventDefault();
123
+ selectOption(activeOption);
124
+ }
125
+ return;
126
+ }
127
+ if (event.key === 'Escape' && showMenu) {
128
+ // Close the menu only; don't let Escape also close an enclosing Dialog.
129
+ event.preventDefault();
130
+ event.stopPropagation();
131
+ setDismissed(true);
132
+ }
133
+ };
134
+ const showClear = clearable && interactive && value.length > 0;
135
+ const iconSize = size === 'sm' ? 'xs' : size === 'lg' ? 'md' : 'sm';
136
+ const rootClasses = [
137
+ 'muka-input',
138
+ 'muka-autocomplete',
139
+ fullWidth && 'muka-input--full-width',
140
+ className,
141
+ ]
142
+ .filter(Boolean)
143
+ .join(' ');
144
+ const fieldClasses = [
145
+ 'muka-input__field',
146
+ `muka-input__field--${size}`,
147
+ 'muka-autocomplete__field',
148
+ focused && 'muka-input__field--focused',
149
+ error && 'muka-input__field--error',
150
+ disabled && 'muka-input__field--disabled',
151
+ iconLeft && 'muka-input__field--has-icon-left',
152
+ showClear && 'muka-input__field--has-icon-right',
153
+ ]
154
+ .filter(Boolean)
155
+ .join(' ');
156
+ return (_jsxs("div", { className: rootClasses, ref: rootRef, children: [label && (_jsxs("label", { className: `muka-input__label muka-input__label--${size}`, htmlFor: fieldId, children: [label, required && _jsx("span", { className: "muka-input__required", "aria-hidden": "true", children: " *" })] })), _jsxs(Menu, { trigger: "click", open: showMenu, onOpenChange: (next) => {
157
+ // Radix closes on an outside press; it never opens the menu itself.
158
+ if (!next)
159
+ setDismissed(true);
160
+ }, modal: false, children: [_jsxs("div", { className: fieldClasses, onFocus: handleFocus, onBlur: handleBlur, onPointerDown: (event) => {
161
+ if (disabled)
162
+ return;
163
+ // A press on the padding or the clear button must not blur the
164
+ // input. Presses on the input keep native caret placement.
165
+ if (event.target !== inputRef.current)
166
+ event.preventDefault();
167
+ }, onClick: (event) => {
168
+ if (disabled)
169
+ return;
170
+ // Focus on click, never on pointerdown: on iOS Safari an early
171
+ // focus opens the keyboard and scrolls mid-tap, so the tap lands
172
+ // on whatever slid under the finger (MUK-88).
173
+ const target = event.target;
174
+ if (target === inputRef.current || target.closest('button'))
175
+ return;
176
+ inputRef.current?.focus();
177
+ }, children: [iconLeft && (_jsx("span", { className: "muka-input__icon muka-input__icon--left", "aria-hidden": "true", children: iconLeft })), _jsx("input", { ref: inputRef, id: fieldId, name: name, type: "text", className: "muka-input__native", value: value, onChange: handleInputChange, onKeyDown: handleKeyDown, onFocus: onFocus, placeholder: placeholder, disabled: disabled, readOnly: readOnly, required: required, "aria-label": label ? undefined : ariaLabel || placeholder, "aria-invalid": error || undefined, "aria-describedby": describedBy, role: "combobox", "aria-autocomplete": "list", "aria-controls": listboxId, "aria-expanded": showMenu, "aria-activedescendant": activeOption ? optionId(activeIndex) : undefined, autoComplete: "off", autoCorrect: "off", spellCheck: false }), showClear && (_jsx("button", { type: "button", className: "muka-input__clear", "aria-label": clearLabel, tabIndex: -1, onClick: handleClear, children: _jsx(Icon, { name: "close", variant: "line", size: iconSize }) })), _jsx(MenuTrigger, { asChild: true, disabled: disabled, children: _jsx("button", { type: "button", className: "muka-autocomplete__menu-anchor", tabIndex: -1, "aria-hidden": "true", disabled: disabled }) })] }), _jsxs(MenuContent, { align: "start", side: "bottom", sideOffset: 4, className: "muka-autocomplete__menu", onOpenAutoFocus: (event) => {
178
+ // Keep the caret in the text field while suggestions are open.
179
+ event.preventDefault();
180
+ inputRef.current?.focus();
181
+ }, onCloseAutoFocus: (event) => event.preventDefault(), loop: false, container: menuContainer, children: [_jsxs("div", { ref: menuRef, id: listboxId, role: "listbox", "aria-label": label || ariaLabel || placeholder, onBlur: handleBlur, children: [visibleOptions.map((option, index) => (_jsx(MenuItem, { id: optionId(index), hint: "enter", disabled: option.disabled, highlighted: index === activeIndex, textValue: option.label, onSelect: (event) => {
182
+ event.preventDefault();
183
+ selectOption(option);
184
+ }, children: highlightMenuMatch(option.label, query) }, `${option.value}-${index}`))), showLoadingRow && (_jsxs("div", { className: "muka-autocomplete__status", "aria-hidden": "true", children: [_jsx(Spinner, { size: "sm", label: loadingLabel }), _jsx("span", { children: loadingLabel })] })), showEmptyRow && (_jsx("div", { className: "muka-autocomplete__status", "aria-hidden": "true", children: emptyMessage }))] }), menuFooter && _jsx("div", { className: "muka-autocomplete__footer", children: menuFooter })] })] }), _jsx("span", { className: VISUALLY_HIDDEN_CLASS, "aria-live": "polite", "aria-atomic": "true", children: announcement }), showError && (_jsx("p", { className: "muka-input__error", id: errorMessageId, role: "alert", children: errorMessage })), !showError && helperText && (_jsx("p", { className: "muka-input__helper", id: helperTextId, children: helperText }))] }));
185
+ }
186
+ export default Autocomplete;
187
+ //# sourceMappingURL=Autocomplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Autocomplete.js","sourceRoot":"","sources":["../../../../components/Autocomplete/Autocomplete.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { Autocomplete, } from './Autocomplete';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../components/Autocomplete/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAIb,MAAM,gBAAgB,CAAC"}
@@ -1,8 +1,10 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from 'react';
3
+ import { useEffect, useId, useMemo, useRef, useState } from 'react';
4
4
  import { Chip } from '../Chip';
5
5
  import { Menu, MenuContent, MenuItem, MenuTrigger, } from '../Menu';
6
+ import { firstEnabledIndex, nextEnabledIndex } from '../../utils/suggestionList';
7
+ import { usePortalContainer } from '../../utils/usePortalContainer';
6
8
  import './Combobox.css';
7
9
  const defaultFilter = (option, query) => {
8
10
  if (!query)
@@ -10,21 +12,6 @@ const defaultFilter = (option, query) => {
10
12
  const hay = `${option.label} ${option.caption ?? ''}`.toLowerCase();
11
13
  return hay.includes(query);
12
14
  };
13
- const firstEnabledIndex = (items) => {
14
- const index = items.findIndex((item) => !item.disabled);
15
- return index === -1 ? 0 : index;
16
- };
17
- const nextEnabledIndex = (items, from, direction) => {
18
- if (items.length === 0)
19
- return 0;
20
- let index = from;
21
- for (let step = 0; step < items.length; step += 1) {
22
- index = (index + direction + items.length) % items.length;
23
- if (!items[index]?.disabled)
24
- return index;
25
- }
26
- return from;
27
- };
28
15
  /**
29
16
  * Combobox — free-input multi-value field with chips and a suggestion Menu.
30
17
  *
@@ -46,10 +33,7 @@ export const Combobox = ({ value, onChange, options = [], placeholder = 'Hint te
46
33
  const menuRef = useRef(null);
47
34
  // A native <dialog> opened with showModal() lives in the top layer and makes
48
35
  // everything outside it inert, so a body-level portal would be unreachable.
49
- const [dialogContainer, setDialogContainer] = useState(null);
50
- useLayoutEffect(() => {
51
- setDialogContainer(rootRef.current?.closest('dialog') ?? null);
52
- }, []);
36
+ const menuContainer = usePortalContainer(portalContainer, rootRef);
53
37
  const [query, setQuery] = useState('');
54
38
  const [open, setOpen] = useState(false);
55
39
  // Drives the focused treatment: true only while focus is inside the field
@@ -238,7 +222,7 @@ export const Combobox = ({ value, onChange, options = [], placeholder = 'Hint te
238
222
  // Keep the blinking caret in the text field while suggestions open.
239
223
  event.preventDefault();
240
224
  inputRef.current?.focus();
241
- }, onCloseAutoFocus: (event) => event.preventDefault(), loop: false, container: portalContainer ?? dialogContainer, children: _jsx("div", { ref: menuRef, id: listboxId, role: "listbox", "aria-label": label || placeholder, onBlur: handleBlur, children: suggestions.map((suggestion, index) => (_jsx(MenuItem, { id: suggestion.id, hint: "enter", disabled: suggestion.disabled, highlighted: index === activeIndex, textValue: suggestion.label, onSelect: (event) => {
225
+ }, onCloseAutoFocus: (event) => event.preventDefault(), loop: false, container: menuContainer, children: _jsx("div", { ref: menuRef, id: listboxId, role: "listbox", "aria-label": label || placeholder, onBlur: handleBlur, children: suggestions.map((suggestion, index) => (_jsx(MenuItem, { id: suggestion.id, hint: "enter", disabled: suggestion.disabled, highlighted: index === activeIndex, textValue: suggestion.label, onSelect: (event) => {
242
226
  event.preventDefault();
243
227
  if (!suggestion.disabled)
244
228
  commitValue(suggestion.value);