mlola-ui 1.1.19 → 1.1.21

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mlola-ui",
3
- "version": "1.1.19",
3
+ "version": "1.1.21",
4
4
  "mcpName": "io.github.mlolahq/mlola-ui",
5
5
  "description": "Source-copy CLI that writes framework-free Mlola UI items into your project",
6
6
  "type": "module",
@@ -2009,7 +2009,7 @@
2009
2009
  "toast": {
2010
2010
  "needs": "behavior",
2011
2011
  "react": "\"use client\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Toaster, toast } from \"@/components/ui/toast\";\n\nexport default function Example() {\n return (\n <>\n <Button onClick={() => toast.success(\"Draft saved to your workspace.\")}>Save draft</Button>\n <Toaster />\n </>\n );\n}",
2012
- "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"primary\" data-size=\"md\"><span class=\"ml-button-label\">Save draft</span></button>\n<div class=\"ml-toaster\" role=\"region\" aria-label=\"Notifications (top right)\" data-position=\"top-right\"></div>",
2012
+ "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"primary\" data-size=\"md\"><span class=\"ml-button-label\">Save draft</span></button>\n<span hidden=\"\"></span>",
2013
2013
  "behavior": {
2014
2014
  "name": "toast",
2015
2015
  "html": "<div class=\"ml-toaster\" data-ml=\"toast\" role=\"region\" aria-label=\"Notifications\" data-position=\"top-right\">\n <div class=\"ml-toast\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" data-tone=\"success\" data-ml-duration=\"6000\">\n <div class=\"ml-toast-content\">\n <p class=\"ml-toast-message\">Draft saved to your workspace.</p>\n </div>\n <button class=\"ml-toast-close\" type=\"button\" aria-label=\"Dismiss notification\"><svg class=\"mlola-glyph\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M18 6 6 18M6 6l12 12\"/></svg></button>\n </div>\n</div>"
@@ -2079,7 +2079,7 @@
2079
2079
  "title": "Following work to its end",
2080
2080
  "description": "One toast says it is working, then reports how it went, without a second message.",
2081
2081
  "react": "\"use client\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Toaster, toast } from \"@/components/ui/toast\";\n\nconst publish = () => new Promise<string>((resolve) => window.setTimeout(() => resolve(\"v2.4\"), 1400));\n\nexport default function Example() {\n return (\n <>\n <Button onClick={() => toast.promise(publish(), { loading: \"Publishing…\", success: (version) => `Published ${version}`, error: \"Could not publish\" })}>\n Publish\n </Button>\n <Toaster />\n </>\n );\n}",
2082
- "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"primary\" data-size=\"md\"><span class=\"ml-button-label\">Publish</span></button>\n<div class=\"ml-toaster\" role=\"region\" aria-label=\"Notifications (top right)\" data-position=\"top-right\"></div>"
2082
+ "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"primary\" data-size=\"md\"><span class=\"ml-button-label\">Publish</span></button>\n<span hidden=\"\"></span>"
2083
2083
  },
2084
2084
  {
2085
2085
  "slug": "undo",
@@ -2087,7 +2087,7 @@
2087
2087
  "title": "With an undo",
2088
2088
  "description": "An action in the toast gives a quick way back from something easy to regret.",
2089
2089
  "react": "\"use client\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Toaster, toast } from \"@/components/ui/toast\";\n\nexport default function Example() {\n return (\n <>\n <Button variant=\"secondary\" onClick={() => toast(\"Conversation archived\", { action: { label: \"Undo\", onClick: () => toast.success(\"Restored\") } })}>\n Archive\n </Button>\n <Toaster />\n </>\n );\n}",
2090
- "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-size=\"md\"><span class=\"ml-button-label\">Archive</span></button>\n<div class=\"ml-toaster\" role=\"region\" aria-label=\"Notifications (top right)\" data-position=\"top-right\"></div>"
2090
+ "html": "<button class=\"ml-button\" type=\"button\" data-variant=\"secondary\" data-size=\"md\"><span class=\"ml-button-label\">Archive</span></button>\n<span hidden=\"\"></span>"
2091
2091
  }
2092
2092
  ]
2093
2093
  },
@@ -2205,7 +2205,7 @@
2205
2205
  "activity-heatmap": {
2206
2206
  "needs": "nothing",
2207
2207
  "react": "import { ActivityHeatmap } from \"@/components/ui/activity-heatmap\";\n\n// Counts by day; days not listed count as zero.\nconst data = [\n { date: \"2026-09-21\", count: 3 },\n { date: \"2026-09-22\", count: 7 },\n { date: \"2026-09-24\", count: 1 },\n { date: \"2026-09-25\", count: 12 },\n];\n\nexport default function Example() {\n return <ActivityHeatmap data={data} end=\"2026-09-26\" weeks={8} unit=\"commit\" label=\"Commits in the last eight weeks\" />;\n}",
2208
- "html": "<div class=\"ml-heatmap\" data-tone=\"primary\" style=\"--ml-heatmap-weeks:8\">\n <div class=\"ml-heatmap-grid\" role=\"grid\" aria-label=\"Commits in the last eight weeks\" aria-readonly=\"true\">\n <div class=\"ml-heatmap-months\" aria-hidden=\"true\">\n <span class=\"ml-heatmap-month\" style=\"grid-column:2\">Aug</span>\n <span class=\"ml-heatmap-month\" style=\"grid-column:7\">Sep</span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:2\"><span>Mon</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 3, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 10, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 17, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 24, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 31, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, September 7, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, September 14, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"1\" aria-label=\"3 commit on Monday, September 21, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:2\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:3\"><span aria-hidden=\"true\" data-hidden=\"true\">Tue</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 4, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 11, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 18, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 25, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, September 1, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, September 8, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, September 15, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"2\" aria-label=\"7 commit on Tuesday, September 22, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:3\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:4\"><span>Wed</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 5, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 12, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 19, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 26, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 2, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 9, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 16, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 23, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:4\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:5\"><span aria-hidden=\"true\" data-hidden=\"true\">Thu</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 6, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 13, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 20, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 27, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, September 3, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, September 10, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, September 17, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"1\" aria-label=\"1 commit on Thursday, September 24, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:5\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:6\"><span>Fri</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 7, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 14, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 21, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 28, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, September 4, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, September 11, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, September 18, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"3\" aria-label=\"12 commit on Friday, September 25, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:6\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:7\"><span aria-hidden=\"true\" data-hidden=\"true\">Sat</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 8, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 15, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 22, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 29, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 5, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 12, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 19, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 26, 2026\" tabindex=\"0\" style=\"grid-column:9;grid-row:7\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:8\"><span aria-hidden=\"true\" data-hidden=\"true\">Sun</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 9, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 16, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 23, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 30, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, September 6, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, September 13, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, September 20, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" data-outside=\"true\" aria-hidden=\"true\" style=\"grid-column:9;grid-row:8\"></span>\n </div>\n </div>\n <div class=\"ml-heatmap-tooltip\" role=\"presentation\" hidden=\"\"></div>\n <div class=\"ml-heatmap-footer\">\n <span class=\"ml-heatmap-caption\">23 commit over 4 active days</span>\n <span class=\"ml-heatmap-legend\" aria-hidden=\"true\">Less<span class=\"ml-heatmap-cell\" data-level=\"0\"></span><span class=\"ml-heatmap-cell\" data-level=\"1\"></span><span class=\"ml-heatmap-cell\" data-level=\"2\"></span><span class=\"ml-heatmap-cell\" data-level=\"3\"></span><span class=\"ml-heatmap-cell\" data-level=\"4\"></span>More</span>\n </div>\n</div>",
2208
+ "html": "<div class=\"ml-heatmap\" data-tone=\"primary\" style=\"--ml-heatmap-weeks:8\">\n <div class=\"ml-heatmap-grid\" role=\"grid\" aria-label=\"Commits in the last eight weeks\" aria-readonly=\"true\">\n <div class=\"ml-heatmap-months\" aria-hidden=\"true\">\n <span class=\"ml-heatmap-month\" style=\"grid-column:2\">Aug</span>\n <span class=\"ml-heatmap-month\" style=\"grid-column:7\">Sep</span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:2\"><span>Mon</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 3, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 10, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 17, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 24, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, August 31, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, September 7, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Monday, September 14, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:2\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"1\" aria-label=\"3 commit on Monday, September 21, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:2\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:3\"><span aria-hidden=\"true\" data-hidden=\"true\">Tue</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 4, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 11, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 18, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, August 25, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, September 1, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, September 8, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Tuesday, September 15, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:3\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"2\" aria-label=\"7 commit on Tuesday, September 22, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:3\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:4\"><span>Wed</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 5, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 12, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 19, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, August 26, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 2, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 9, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 16, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:4\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Wednesday, September 23, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:4\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:5\"><span aria-hidden=\"true\" data-hidden=\"true\">Thu</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 6, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 13, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 20, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, August 27, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, September 3, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, September 10, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Thursday, September 17, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:5\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"1\" aria-label=\"1 commit on Thursday, September 24, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:5\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:6\"><span>Fri</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 7, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 14, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 21, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, August 28, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, September 4, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, September 11, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Friday, September 18, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:6\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"3\" aria-label=\"12 commit on Friday, September 25, 2026\" tabindex=\"-1\" style=\"grid-column:9;grid-row:6\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:7\"><span aria-hidden=\"true\" data-hidden=\"true\">Sat</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 8, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 15, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 22, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, August 29, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 5, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 12, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 19, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:7\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Saturday, September 26, 2026\" tabindex=\"0\" style=\"grid-column:9;grid-row:7\"></span>\n </div>\n <div class=\"ml-heatmap-row\" role=\"row\">\n <span class=\"ml-heatmap-weekday\" role=\"rowheader\" style=\"grid-row:8\"><span aria-hidden=\"true\" data-hidden=\"true\">Sun</span></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 9, 2026\" tabindex=\"-1\" style=\"grid-column:2;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 16, 2026\" tabindex=\"-1\" style=\"grid-column:3;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 23, 2026\" tabindex=\"-1\" style=\"grid-column:4;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, August 30, 2026\" tabindex=\"-1\" style=\"grid-column:5;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, September 6, 2026\" tabindex=\"-1\" style=\"grid-column:6;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, September 13, 2026\" tabindex=\"-1\" style=\"grid-column:7;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" aria-label=\"0 commit on Sunday, September 20, 2026\" tabindex=\"-1\" style=\"grid-column:8;grid-row:8\"></span>\n <span class=\"ml-heatmap-cell\" role=\"gridcell\" data-level=\"0\" data-outside=\"true\" aria-hidden=\"true\" style=\"grid-column:9;grid-row:8\"></span>\n </div>\n </div>\n <div class=\"ml-heatmap-footer\">\n <span class=\"ml-heatmap-caption\">23 commit over 4 active days</span>\n <span class=\"ml-heatmap-legend\" aria-hidden=\"true\">Less<span class=\"ml-heatmap-cell\" data-level=\"0\"></span><span class=\"ml-heatmap-cell\" data-level=\"1\"></span><span class=\"ml-heatmap-cell\" data-level=\"2\"></span><span class=\"ml-heatmap-cell\" data-level=\"3\"></span><span class=\"ml-heatmap-cell\" data-level=\"4\"></span>More</span>\n </div>\n</div>",
2209
2209
  "elements": [
2210
2210
  {
2211
2211
  "class": "ml-heatmap",
@@ -2,7 +2,7 @@
2
2
  "$schema": "./schema/registry-index.schema.json",
3
3
  "schemaVersion": 2,
4
4
  "name": "mlola-ui",
5
- "version": "1.1.19",
5
+ "version": "1.1.21",
6
6
  "homepage": "https://ui.mlola.com",
7
7
  "themeContract": {
8
8
  "attribute": "data-theme",
@@ -177,8 +177,8 @@
177
177
  },
178
178
  "registryDependencies": [],
179
179
  "engineDependencies": {
180
- "@mlola-ui/behavior": "^1.1.19",
181
- "@mlola-ui/icons": "^1.1.19"
180
+ "@mlola-ui/behavior": "^1.1.21",
181
+ "@mlola-ui/icons": "^1.1.21"
182
182
  },
183
183
  "options": [
184
184
  {
@@ -239,7 +239,7 @@
239
239
  },
240
240
  "registryDependencies": [],
241
241
  "engineDependencies": {
242
- "@mlola-ui/icons": "^1.1.19"
242
+ "@mlola-ui/icons": "^1.1.21"
243
243
  },
244
244
  "options": [
245
245
  {
@@ -401,7 +401,7 @@
401
401
  },
402
402
  "registryDependencies": [],
403
403
  "engineDependencies": {
404
- "@mlola-ui/icons": "^1.1.19"
404
+ "@mlola-ui/icons": "^1.1.21"
405
405
  },
406
406
  "options": [
407
407
  {
@@ -493,7 +493,7 @@
493
493
  },
494
494
  "registryDependencies": [],
495
495
  "engineDependencies": {
496
- "@mlola-ui/icons": "^1.1.19"
496
+ "@mlola-ui/icons": "^1.1.21"
497
497
  },
498
498
  "options": [],
499
499
  "variants": [],
@@ -546,7 +546,7 @@
546
546
  "spinner"
547
547
  ],
548
548
  "engineDependencies": {
549
- "@mlola-ui/motion": "^1.1.19"
549
+ "@mlola-ui/motion": "^1.1.21"
550
550
  },
551
551
  "options": [
552
552
  {
@@ -714,8 +714,8 @@
714
714
  },
715
715
  "registryDependencies": [],
716
716
  "engineDependencies": {
717
- "@mlola-ui/behavior": "^1.1.19",
718
- "@mlola-ui/icons": "^1.1.19"
717
+ "@mlola-ui/behavior": "^1.1.21",
718
+ "@mlola-ui/icons": "^1.1.21"
719
719
  },
720
720
  "options": [
721
721
  {
@@ -784,7 +784,7 @@
784
784
  },
785
785
  "registryDependencies": [],
786
786
  "engineDependencies": {
787
- "@mlola-ui/icons": "^1.1.19"
787
+ "@mlola-ui/icons": "^1.1.21"
788
788
  },
789
789
  "options": [],
790
790
  "variants": [],
@@ -839,7 +839,7 @@
839
839
  "modal"
840
840
  ],
841
841
  "engineDependencies": {
842
- "@mlola-ui/icons": "^1.1.19"
842
+ "@mlola-ui/icons": "^1.1.21"
843
843
  },
844
844
  "options": [],
845
845
  "variants": [],
@@ -903,8 +903,8 @@
903
903
  },
904
904
  "registryDependencies": [],
905
905
  "engineDependencies": {
906
- "@mlola-ui/behavior": "^1.1.19",
907
- "@mlola-ui/icons": "^1.1.19"
906
+ "@mlola-ui/behavior": "^1.1.21",
907
+ "@mlola-ui/icons": "^1.1.21"
908
908
  },
909
909
  "options": [
910
910
  {
@@ -937,13 +937,13 @@
937
937
  "path": "packages/components/_internal/anchor.ts",
938
938
  "target": "{{aliases.components}}/_internal/anchor.ts",
939
939
  "type": "registry:ui",
940
- "integrity": "sha256-/yW3RVjoY6QfTWnUYSeZ9rFkC9W4WGB1qop8Jp/H1r8="
940
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
941
941
  },
942
942
  {
943
943
  "path": "packages/components/_internal/floating.ts",
944
944
  "target": "{{aliases.components}}/_internal/floating.ts",
945
945
  "type": "registry:ui",
946
- "integrity": "sha256-8iKD2nqqwTY0grZ+KDnP81CcChrQK4CDvlDvApl0fF4="
946
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
947
947
  },
948
948
  {
949
949
  "path": "packages/components/_internal/react.ts",
@@ -993,7 +993,7 @@
993
993
  "input"
994
994
  ],
995
995
  "engineDependencies": {
996
- "@mlola-ui/icons": "^1.1.19"
996
+ "@mlola-ui/icons": "^1.1.21"
997
997
  },
998
998
  "options": [],
999
999
  "variants": [],
@@ -1218,8 +1218,8 @@
1218
1218
  },
1219
1219
  "registryDependencies": [],
1220
1220
  "engineDependencies": {
1221
- "@mlola-ui/behavior": "^1.1.19",
1222
- "@mlola-ui/icons": "^1.1.19"
1221
+ "@mlola-ui/behavior": "^1.1.21",
1222
+ "@mlola-ui/icons": "^1.1.21"
1223
1223
  },
1224
1224
  "options": [
1225
1225
  {
@@ -1248,7 +1248,7 @@
1248
1248
  "path": "packages/components/_internal/anchor.ts",
1249
1249
  "target": "{{aliases.components}}/_internal/anchor.ts",
1250
1250
  "type": "registry:ui",
1251
- "integrity": "sha256-/yW3RVjoY6QfTWnUYSeZ9rFkC9W4WGB1qop8Jp/H1r8="
1251
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
1252
1252
  },
1253
1253
  {
1254
1254
  "path": "packages/components/_internal/dialog.ts",
@@ -1260,7 +1260,7 @@
1260
1260
  "path": "packages/components/_internal/floating.ts",
1261
1261
  "target": "{{aliases.components}}/_internal/floating.ts",
1262
1262
  "type": "registry:ui",
1263
- "integrity": "sha256-8iKD2nqqwTY0grZ+KDnP81CcChrQK4CDvlDvApl0fF4="
1263
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
1264
1264
  },
1265
1265
  {
1266
1266
  "path": "packages/components/_internal/react.ts",
@@ -1370,7 +1370,7 @@
1370
1370
  },
1371
1371
  "registryDependencies": [],
1372
1372
  "engineDependencies": {
1373
- "@mlola-ui/icons": "^1.1.19"
1373
+ "@mlola-ui/icons": "^1.1.21"
1374
1374
  },
1375
1375
  "options": [],
1376
1376
  "variants": [],
@@ -1421,7 +1421,7 @@
1421
1421
  },
1422
1422
  "registryDependencies": [],
1423
1423
  "engineDependencies": {
1424
- "@mlola-ui/behavior": "^1.1.19"
1424
+ "@mlola-ui/behavior": "^1.1.21"
1425
1425
  },
1426
1426
  "options": [
1427
1427
  {
@@ -1453,13 +1453,13 @@
1453
1453
  "path": "packages/components/_internal/anchor.ts",
1454
1454
  "target": "{{aliases.components}}/_internal/anchor.ts",
1455
1455
  "type": "registry:ui",
1456
- "integrity": "sha256-/yW3RVjoY6QfTWnUYSeZ9rFkC9W4WGB1qop8Jp/H1r8="
1456
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
1457
1457
  },
1458
1458
  {
1459
1459
  "path": "packages/components/_internal/floating.ts",
1460
1460
  "target": "{{aliases.components}}/_internal/floating.ts",
1461
1461
  "type": "registry:ui",
1462
- "integrity": "sha256-8iKD2nqqwTY0grZ+KDnP81CcChrQK4CDvlDvApl0fF4="
1462
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
1463
1463
  },
1464
1464
  {
1465
1465
  "path": "packages/components/_internal/react.ts",
@@ -1471,7 +1471,7 @@
1471
1471
  "path": "packages/components/popover/popover.tsx",
1472
1472
  "target": "{{aliases.components}}/popover.tsx",
1473
1473
  "type": "registry:ui",
1474
- "integrity": "sha256-V4e+a/JdVJBj6j3CMWsREuhFW7ZuaNsa2LAl/BuWGxE="
1474
+ "integrity": "sha256-LJVinhURpl3dh7DwFfC6IVxigv9b5oLwnxdrObkz8Ec="
1475
1475
  }
1476
1476
  ],
1477
1477
  "themeContract": {
@@ -1799,7 +1799,7 @@
1799
1799
  },
1800
1800
  "registryDependencies": [],
1801
1801
  "engineDependencies": {
1802
- "@mlola-ui/behavior": "^1.1.19"
1802
+ "@mlola-ui/behavior": "^1.1.21"
1803
1803
  },
1804
1804
  "options": [],
1805
1805
  "variants": [],
@@ -1852,8 +1852,8 @@
1852
1852
  "input"
1853
1853
  ],
1854
1854
  "engineDependencies": {
1855
- "@mlola-ui/behavior": "^1.1.19",
1856
- "@mlola-ui/icons": "^1.1.19"
1855
+ "@mlola-ui/behavior": "^1.1.21",
1856
+ "@mlola-ui/icons": "^1.1.21"
1857
1857
  },
1858
1858
  "options": [
1859
1859
  {
@@ -1877,13 +1877,13 @@
1877
1877
  "path": "packages/components/_internal/anchor.ts",
1878
1878
  "target": "{{aliases.components}}/_internal/anchor.ts",
1879
1879
  "type": "registry:ui",
1880
- "integrity": "sha256-/yW3RVjoY6QfTWnUYSeZ9rFkC9W4WGB1qop8Jp/H1r8="
1880
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
1881
1881
  },
1882
1882
  {
1883
1883
  "path": "packages/components/_internal/floating.ts",
1884
1884
  "target": "{{aliases.components}}/_internal/floating.ts",
1885
1885
  "type": "registry:ui",
1886
- "integrity": "sha256-8iKD2nqqwTY0grZ+KDnP81CcChrQK4CDvlDvApl0fF4="
1886
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
1887
1887
  },
1888
1888
  {
1889
1889
  "path": "packages/components/_internal/react.ts",
@@ -1931,8 +1931,8 @@
1931
1931
  },
1932
1932
  "registryDependencies": [],
1933
1933
  "engineDependencies": {
1934
- "@mlola-ui/behavior": "^1.1.19",
1935
- "@mlola-ui/icons": "^1.1.19"
1934
+ "@mlola-ui/behavior": "^1.1.21",
1935
+ "@mlola-ui/icons": "^1.1.21"
1936
1936
  },
1937
1937
  "options": [
1938
1938
  {
@@ -1968,7 +1968,7 @@
1968
1968
  "path": "packages/components/_internal/anchor.ts",
1969
1969
  "target": "{{aliases.components}}/_internal/anchor.ts",
1970
1970
  "type": "registry:ui",
1971
- "integrity": "sha256-/yW3RVjoY6QfTWnUYSeZ9rFkC9W4WGB1qop8Jp/H1r8="
1971
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
1972
1972
  },
1973
1973
  {
1974
1974
  "path": "packages/components/_internal/dialog.ts",
@@ -1980,7 +1980,7 @@
1980
1980
  "path": "packages/components/_internal/floating.ts",
1981
1981
  "target": "{{aliases.components}}/_internal/floating.ts",
1982
1982
  "type": "registry:ui",
1983
- "integrity": "sha256-8iKD2nqqwTY0grZ+KDnP81CcChrQK4CDvlDvApl0fF4="
1983
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
1984
1984
  },
1985
1985
  {
1986
1986
  "path": "packages/components/_internal/react.ts",
@@ -2078,7 +2078,7 @@
2078
2078
  "input"
2079
2079
  ],
2080
2080
  "engineDependencies": {
2081
- "@mlola-ui/behavior": "^1.1.19"
2081
+ "@mlola-ui/behavior": "^1.1.21"
2082
2082
  },
2083
2083
  "options": [
2084
2084
  {
@@ -2223,7 +2223,7 @@
2223
2223
  },
2224
2224
  "registryDependencies": [],
2225
2225
  "engineDependencies": {
2226
- "@mlola-ui/behavior": "^1.1.19"
2226
+ "@mlola-ui/behavior": "^1.1.21"
2227
2227
  },
2228
2228
  "options": [
2229
2229
  {
@@ -2355,7 +2355,7 @@
2355
2355
  },
2356
2356
  "registryDependencies": [],
2357
2357
  "engineDependencies": {
2358
- "@mlola-ui/icons": "^1.1.19"
2358
+ "@mlola-ui/icons": "^1.1.21"
2359
2359
  },
2360
2360
  "options": [
2361
2361
  {
@@ -2443,7 +2443,8 @@
2443
2443
  "spinner"
2444
2444
  ],
2445
2445
  "engineDependencies": {
2446
- "@mlola-ui/icons": "^1.1.19"
2446
+ "@mlola-ui/behavior": "^1.1.21",
2447
+ "@mlola-ui/icons": "^1.1.21"
2447
2448
  },
2448
2449
  "options": [
2449
2450
  {
@@ -2461,6 +2462,18 @@
2461
2462
  "variants": [],
2462
2463
  "sizes": [],
2463
2464
  "files": [
2465
+ {
2466
+ "path": "packages/components/_internal/anchor.ts",
2467
+ "target": "{{aliases.components}}/_internal/anchor.ts",
2468
+ "type": "registry:ui",
2469
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
2470
+ },
2471
+ {
2472
+ "path": "packages/components/_internal/floating.ts",
2473
+ "target": "{{aliases.components}}/_internal/floating.ts",
2474
+ "type": "registry:ui",
2475
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
2476
+ },
2464
2477
  {
2465
2478
  "path": "packages/components/_internal/react.ts",
2466
2479
  "target": "{{aliases.components}}/_internal/react.ts",
@@ -2471,7 +2484,7 @@
2471
2484
  "path": "packages/components/toast/toast.tsx",
2472
2485
  "target": "{{aliases.components}}/toast.tsx",
2473
2486
  "type": "registry:ui",
2474
- "integrity": "sha256-6hKQ8wLN6uTnfVebpEeuvAxqAXDppWdjzGi33wtW8Y4="
2487
+ "integrity": "sha256-BKZEXKOD4kUfIP3flFXJw6SHg1hvqq0A22lnknjdyRw="
2475
2488
  }
2476
2489
  ],
2477
2490
  "themeContract": {
@@ -2586,7 +2599,7 @@
2586
2599
  },
2587
2600
  "registryDependencies": [],
2588
2601
  "engineDependencies": {
2589
- "@mlola-ui/behavior": "^1.1.19"
2602
+ "@mlola-ui/behavior": "^1.1.21"
2590
2603
  },
2591
2604
  "options": [
2592
2605
  {
@@ -2608,7 +2621,13 @@
2608
2621
  "path": "packages/components/_internal/anchor.ts",
2609
2622
  "target": "{{aliases.components}}/_internal/anchor.ts",
2610
2623
  "type": "registry:ui",
2611
- "integrity": "sha256-/yW3RVjoY6QfTWnUYSeZ9rFkC9W4WGB1qop8Jp/H1r8="
2624
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
2625
+ },
2626
+ {
2627
+ "path": "packages/components/_internal/floating.ts",
2628
+ "target": "{{aliases.components}}/_internal/floating.ts",
2629
+ "type": "registry:ui",
2630
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
2612
2631
  },
2613
2632
  {
2614
2633
  "path": "packages/components/_internal/react.ts",
@@ -2620,7 +2639,7 @@
2620
2639
  "path": "packages/components/tooltip/tooltip.tsx",
2621
2640
  "target": "{{aliases.components}}/tooltip.tsx",
2622
2641
  "type": "registry:ui",
2623
- "integrity": "sha256-PYjLEr+GFmu8VrLua1d4yzk0plXYbjIKMAUlwfIn+1c="
2642
+ "integrity": "sha256-mEmGAn5A6hJBIdPe0mkFCWWPUnip4YN8IqH7odumU+c="
2624
2643
  }
2625
2644
  ],
2626
2645
  "themeContract": {
@@ -2656,7 +2675,9 @@
2656
2675
  "isDefault": false
2657
2676
  },
2658
2677
  "registryDependencies": [],
2659
- "engineDependencies": {},
2678
+ "engineDependencies": {
2679
+ "@mlola-ui/behavior": "^1.1.21"
2680
+ },
2660
2681
  "options": [
2661
2682
  {
2662
2683
  "component": "ActivityHeatmap",
@@ -2673,6 +2694,18 @@
2673
2694
  "variants": [],
2674
2695
  "sizes": [],
2675
2696
  "files": [
2697
+ {
2698
+ "path": "packages/components/_internal/anchor.ts",
2699
+ "target": "{{aliases.components}}/_internal/anchor.ts",
2700
+ "type": "registry:ui",
2701
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
2702
+ },
2703
+ {
2704
+ "path": "packages/components/_internal/floating.ts",
2705
+ "target": "{{aliases.components}}/_internal/floating.ts",
2706
+ "type": "registry:ui",
2707
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
2708
+ },
2676
2709
  {
2677
2710
  "path": "packages/components/_internal/react.ts",
2678
2711
  "target": "{{aliases.components}}/_internal/react.ts",
@@ -2683,7 +2716,7 @@
2683
2716
  "path": "packages/components/activity-heatmap/activity-heatmap.tsx",
2684
2717
  "target": "{{aliases.components}}/activity-heatmap.tsx",
2685
2718
  "type": "registry:ui",
2686
- "integrity": "sha256-nHXmfiLpZOH+PrqE1/fyIjevjyPD2/8hSPZRn/+cYcY="
2719
+ "integrity": "sha256-WLJYE8lZY8Vi+K9TSW41hHP/eWGRRUkfVC+RaBTHgpw="
2687
2720
  },
2688
2721
  {
2689
2722
  "path": "packages/components/activity-heatmap/calendar.ts",
@@ -2725,7 +2758,7 @@
2725
2758
  },
2726
2759
  "registryDependencies": [],
2727
2760
  "engineDependencies": {
2728
- "@mlola-ui/icons": "^1.1.19"
2761
+ "@mlola-ui/icons": "^1.1.21"
2729
2762
  },
2730
2763
  "options": [
2731
2764
  {
@@ -2797,7 +2830,7 @@
2797
2830
  "popover"
2798
2831
  ],
2799
2832
  "engineDependencies": {
2800
- "@mlola-ui/icons": "^1.1.19"
2833
+ "@mlola-ui/icons": "^1.1.21"
2801
2834
  },
2802
2835
  "options": [
2803
2836
  {
@@ -2867,7 +2900,7 @@
2867
2900
  "popover"
2868
2901
  ],
2869
2902
  "engineDependencies": {
2870
- "@mlola-ui/icons": "^1.1.19"
2903
+ "@mlola-ui/icons": "^1.1.21"
2871
2904
  },
2872
2905
  "options": [],
2873
2906
  "variants": [],
@@ -3065,7 +3098,8 @@
3065
3098
  "input"
3066
3099
  ],
3067
3100
  "engineDependencies": {
3068
- "@mlola-ui/icons": "^1.1.19"
3101
+ "@mlola-ui/behavior": "^1.1.21",
3102
+ "@mlola-ui/icons": "^1.1.21"
3069
3103
  },
3070
3104
  "options": [
3071
3105
  {
@@ -3080,6 +3114,18 @@
3080
3114
  "variants": [],
3081
3115
  "sizes": [],
3082
3116
  "files": [
3117
+ {
3118
+ "path": "packages/components/_internal/anchor.ts",
3119
+ "target": "{{aliases.components}}/_internal/anchor.ts",
3120
+ "type": "registry:ui",
3121
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
3122
+ },
3123
+ {
3124
+ "path": "packages/components/_internal/floating.ts",
3125
+ "target": "{{aliases.components}}/_internal/floating.ts",
3126
+ "type": "registry:ui",
3127
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
3128
+ },
3083
3129
  {
3084
3130
  "path": "packages/components/_internal/match.ts",
3085
3131
  "target": "{{aliases.components}}/_internal/match.ts",
@@ -3102,7 +3148,7 @@
3102
3148
  "path": "packages/components/combobox/combobox.tsx",
3103
3149
  "target": "{{aliases.components}}/combobox.tsx",
3104
3150
  "type": "registry:ui",
3105
- "integrity": "sha256-fiK8UpFpI5G1tZGFXiUmjMvCWcL8aW7qy9FUaMmAqhw="
3151
+ "integrity": "sha256-WHELCyUcgphiLCg3KFKcRvmStRKglU8lQEPXNXZp+IM="
3106
3152
  }
3107
3153
  ],
3108
3154
  "themeContract": {
@@ -3142,7 +3188,7 @@
3142
3188
  "input"
3143
3189
  ],
3144
3190
  "engineDependencies": {
3145
- "@mlola-ui/icons": "^1.1.19"
3191
+ "@mlola-ui/icons": "^1.1.21"
3146
3192
  },
3147
3193
  "options": [],
3148
3194
  "variants": [],
@@ -3158,7 +3204,7 @@
3158
3204
  "path": "packages/components/tag-input/tag-input.tsx",
3159
3205
  "target": "{{aliases.components}}/tag-input.tsx",
3160
3206
  "type": "registry:ui",
3161
- "integrity": "sha256-LnOwotLuPB06nlkdzckjDVhk03D6c/exJXJs2blZNRQ="
3207
+ "integrity": "sha256-KAjAqXnZPsqMt2l6IY01+g7VJhOaop9CZJ795/mXsSY="
3162
3208
  }
3163
3209
  ],
3164
3210
  "themeContract": {
@@ -3197,7 +3243,7 @@
3197
3243
  "input"
3198
3244
  ],
3199
3245
  "engineDependencies": {
3200
- "@mlola-ui/icons": "^1.1.19"
3246
+ "@mlola-ui/icons": "^1.1.21"
3201
3247
  },
3202
3248
  "options": [],
3203
3249
  "variants": [],
@@ -3260,7 +3306,7 @@
3260
3306
  "popover"
3261
3307
  ],
3262
3308
  "engineDependencies": {
3263
- "@mlola-ui/icons": "^1.1.19"
3309
+ "@mlola-ui/icons": "^1.1.21"
3264
3310
  },
3265
3311
  "options": [
3266
3312
  {
@@ -3331,7 +3377,7 @@
3331
3377
  },
3332
3378
  "registryDependencies": [],
3333
3379
  "engineDependencies": {
3334
- "@mlola-ui/icons": "^1.1.19"
3380
+ "@mlola-ui/icons": "^1.1.21"
3335
3381
  },
3336
3382
  "options": [
3337
3383
  {
@@ -3450,8 +3496,8 @@
3450
3496
  },
3451
3497
  "registryDependencies": [],
3452
3498
  "engineDependencies": {
3453
- "@mlola-ui/behavior": "^1.1.19",
3454
- "@mlola-ui/icons": "^1.1.19"
3499
+ "@mlola-ui/behavior": "^1.1.21",
3500
+ "@mlola-ui/icons": "^1.1.21"
3455
3501
  },
3456
3502
  "options": [],
3457
3503
  "variants": [],
@@ -3461,13 +3507,13 @@
3461
3507
  "path": "packages/components/_internal/anchor.ts",
3462
3508
  "target": "{{aliases.components}}/_internal/anchor.ts",
3463
3509
  "type": "registry:ui",
3464
- "integrity": "sha256-/yW3RVjoY6QfTWnUYSeZ9rFkC9W4WGB1qop8Jp/H1r8="
3510
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
3465
3511
  },
3466
3512
  {
3467
3513
  "path": "packages/components/_internal/floating.ts",
3468
3514
  "target": "{{aliases.components}}/_internal/floating.ts",
3469
3515
  "type": "registry:ui",
3470
- "integrity": "sha256-8iKD2nqqwTY0grZ+KDnP81CcChrQK4CDvlDvApl0fF4="
3516
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
3471
3517
  },
3472
3518
  {
3473
3519
  "path": "packages/components/_internal/react.ts",
@@ -3515,7 +3561,7 @@
3515
3561
  },
3516
3562
  "registryDependencies": [],
3517
3563
  "engineDependencies": {
3518
- "@mlola-ui/behavior": "^1.1.19"
3564
+ "@mlola-ui/behavior": "^1.1.21"
3519
3565
  },
3520
3566
  "options": [
3521
3567
  {
@@ -3547,13 +3593,13 @@
3547
3593
  "path": "packages/components/_internal/anchor.ts",
3548
3594
  "target": "{{aliases.components}}/_internal/anchor.ts",
3549
3595
  "type": "registry:ui",
3550
- "integrity": "sha256-/yW3RVjoY6QfTWnUYSeZ9rFkC9W4WGB1qop8Jp/H1r8="
3596
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
3551
3597
  },
3552
3598
  {
3553
3599
  "path": "packages/components/_internal/floating.ts",
3554
3600
  "target": "{{aliases.components}}/_internal/floating.ts",
3555
3601
  "type": "registry:ui",
3556
- "integrity": "sha256-8iKD2nqqwTY0grZ+KDnP81CcChrQK4CDvlDvApl0fF4="
3602
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
3557
3603
  },
3558
3604
  {
3559
3605
  "path": "packages/components/_internal/react.ts",
@@ -3602,8 +3648,8 @@
3602
3648
  },
3603
3649
  "registryDependencies": [],
3604
3650
  "engineDependencies": {
3605
- "@mlola-ui/behavior": "^1.1.19",
3606
- "@mlola-ui/icons": "^1.1.19"
3651
+ "@mlola-ui/behavior": "^1.1.21",
3652
+ "@mlola-ui/icons": "^1.1.21"
3607
3653
  },
3608
3654
  "options": [],
3609
3655
  "variants": [],
@@ -3613,13 +3659,13 @@
3613
3659
  "path": "packages/components/_internal/anchor.ts",
3614
3660
  "target": "{{aliases.components}}/_internal/anchor.ts",
3615
3661
  "type": "registry:ui",
3616
- "integrity": "sha256-/yW3RVjoY6QfTWnUYSeZ9rFkC9W4WGB1qop8Jp/H1r8="
3662
+ "integrity": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY="
3617
3663
  },
3618
3664
  {
3619
3665
  "path": "packages/components/_internal/floating.ts",
3620
3666
  "target": "{{aliases.components}}/_internal/floating.ts",
3621
3667
  "type": "registry:ui",
3622
- "integrity": "sha256-8iKD2nqqwTY0grZ+KDnP81CcChrQK4CDvlDvApl0fF4="
3668
+ "integrity": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E="
3623
3669
  },
3624
3670
  {
3625
3671
  "path": "packages/components/_internal/media.ts",
@@ -3677,7 +3723,7 @@
3677
3723
  "sheet"
3678
3724
  ],
3679
3725
  "engineDependencies": {
3680
- "@mlola-ui/icons": "^1.1.19"
3726
+ "@mlola-ui/icons": "^1.1.21"
3681
3727
  },
3682
3728
  "options": [],
3683
3729
  "variants": [],
@@ -3800,7 +3846,7 @@
3800
3846
  "button"
3801
3847
  ],
3802
3848
  "engineDependencies": {
3803
- "@mlola-ui/icons": "^1.1.19"
3849
+ "@mlola-ui/icons": "^1.1.21"
3804
3850
  },
3805
3851
  "options": [
3806
3852
  {
@@ -3904,8 +3950,8 @@
3904
3950
  "input"
3905
3951
  ],
3906
3952
  "engineDependencies": {
3907
- "@mlola-ui/behavior": "^1.1.19",
3908
- "@mlola-ui/icons": "^1.1.19"
3953
+ "@mlola-ui/behavior": "^1.1.21",
3954
+ "@mlola-ui/icons": "^1.1.21"
3909
3955
  },
3910
3956
  "options": [
3911
3957
  {
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * Where a floating layer goes next to its anchor. The math is shared with the
3
3
  * framework-free runtime, so it lives in @mlola-ui/behavior/logic.
4
+ * `fitTooltip` stays for copied source from before 1.1.20 (deprecated).
4
5
  */
5
- export { fitTooltip, placeFloating, type Align, type Placement, type Rect, type Side } from "@mlola-ui/behavior/logic";
6
+ export { fitTooltip, placeFloating, placeTooltip, type Align, type Placement, type Rect, type Side } from "@mlola-ui/behavior/logic";
@@ -1,45 +1,60 @@
1
1
  "use client";
2
2
 
3
3
  import * as React from "react";
4
- import { placeFloating, type Align, type Side } from "./anchor";
4
+ import { placeFloating, type Align, type Placement, type Side } from "./anchor";
5
5
  import { useIsClient } from "./react";
6
6
 
7
7
  export type { Align, Side };
8
+ type Rect = { x: number; y: number; width: number; height: number };
9
+ type Size = { width: number; height: number };
10
+
11
+ /**
12
+ * A place that is not an element (a caret, a text selection): its box, read
13
+ * on every placement, and the element it lives in, for the theme and for
14
+ * watching its size.
15
+ */
16
+ export interface VirtualAnchor {
17
+ getBoundingClientRect(): DOMRect;
18
+ contextElement: Element;
19
+ }
8
20
 
9
21
  /**
10
22
  * Keep a fixed-position layer next to its anchor while open: on open, on
11
23
  * scroll anywhere, on resize, and whenever either element changes size.
12
24
  * Writes styles directly, so following a scroll never re-renders React.
25
+ * `place` swaps the placement (a tooltip's, with its arrow's `shift`); pass
26
+ * one defined outside the component, so it is the same on every render.
27
+ * `at` is for a virtual anchor that moves without either element resizing:
28
+ * a new value places the layer again.
13
29
  */
14
30
  export function useFloating(
15
- anchor: React.RefObject<Element | null>,
31
+ anchor: React.RefObject<Element | VirtualAnchor | null>,
16
32
  floating: React.RefObject<HTMLElement | null>,
17
33
  open: boolean,
18
- options: { side?: Side; align?: Align; offset?: number },
34
+ options: { side?: Side; align?: Align; offset?: number; at?: string },
35
+ place: (anchor: Rect, floating: Size, viewport: Size, options: { side?: Side; align?: Align; offset?: number }) => Placement & { shift?: number } = placeFloating,
19
36
  ) {
20
- const { side, align, offset } = options;
37
+ const { side, align, offset, at: moved } = options;
21
38
  React.useLayoutEffect(() => {
22
39
  const layer = floating.current;
23
40
  if (!open || !layer) return;
24
41
  let frame = 0;
25
- // A layer on <body> takes the theme of the place it opened from, which may be a themed canvas rather than the page.
26
- const themed = anchor.current?.closest<HTMLElement>("[data-theme]");
27
- const moded = anchor.current?.closest<HTMLElement>("[data-mode]");
28
- if (themed?.dataset.theme) layer.setAttribute("data-theme", themed.dataset.theme);
29
- if (moded?.dataset.mode) layer.setAttribute("data-mode", moded.dataset.mode);
42
+ const context = anchor.current && "contextElement" in anchor.current ? anchor.current.contextElement : anchor.current;
43
+ const stopTheme = followTheme(context, layer);
30
44
  const update = () => {
31
45
  const target = anchor.current;
32
46
  if (!target || !layer.isConnected) return;
33
47
  const rect = target.getBoundingClientRect();
34
- const place = placeFloating(
48
+ const at = place(
35
49
  { x: rect.left, y: rect.top, width: rect.width, height: rect.height },
36
50
  { width: layer.offsetWidth, height: layer.offsetHeight },
37
51
  { width: window.innerWidth, height: window.innerHeight },
38
52
  { side, align, offset },
39
53
  );
40
- layer.style.setProperty("left", `${place.x}px`);
41
- layer.style.setProperty("top", `${place.y}px`);
42
- layer.setAttribute("data-side", place.side);
54
+ layer.style.setProperty("left", `${at.x}px`);
55
+ layer.style.setProperty("top", `${at.y}px`);
56
+ if (at.shift !== undefined) layer.style.setProperty("--ml-floating-shift", `${at.shift}px`);
57
+ layer.setAttribute("data-side", at.side);
43
58
  };
44
59
  const schedule = () => {
45
60
  cancelAnimationFrame(frame);
@@ -50,14 +65,42 @@ export function useFloating(
50
65
  window.addEventListener("resize", schedule);
51
66
  const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(schedule);
52
67
  observer?.observe(layer);
53
- if (anchor.current) observer?.observe(anchor.current);
68
+ if (context) observer?.observe(context);
54
69
  return () => {
70
+ stopTheme();
55
71
  cancelAnimationFrame(frame);
56
72
  window.removeEventListener("scroll", schedule, true);
57
73
  window.removeEventListener("resize", schedule);
58
74
  observer?.disconnect();
59
75
  };
60
- }, [anchor, floating, open, side, align, offset]);
76
+ }, [anchor, floating, open, side, align, offset, place, moved]);
77
+ }
78
+
79
+ /**
80
+ * A layer on <body> takes the theme and mode of the place it belongs to,
81
+ * which may be a themed canvas or card rather than the page, and keeps them
82
+ * when that place's theme or mode changes while the layer is shown.
83
+ */
84
+ function followTheme(source: Element | null | undefined, layer: HTMLElement) {
85
+ const themed = source?.closest<HTMLElement>("[data-theme]");
86
+ const moded = source?.closest<HTMLElement>("[data-mode]");
87
+ const copy = () => {
88
+ if (themed?.dataset.theme) layer.setAttribute("data-theme", themed.dataset.theme);
89
+ if (moded?.dataset.mode) layer.setAttribute("data-mode", moded.dataset.mode);
90
+ };
91
+ copy();
92
+ if (typeof MutationObserver === "undefined") return () => {};
93
+ const observer = new MutationObserver(copy);
94
+ for (const element of new Set([themed, moded])) if (element) observer.observe(element, { attributes: true, attributeFilter: ["data-theme", "data-mode"] });
95
+ return () => observer.disconnect();
96
+ }
97
+
98
+ /** The theme and mode of `source`'s place, on a layer rendered on <body>, while `active`. */
99
+ export function useLayerTheme(source: React.RefObject<Element | null>, layer: React.RefObject<HTMLElement | null>, active: boolean) {
100
+ React.useLayoutEffect(() => {
101
+ if (!active || !layer.current) return;
102
+ return followTheme(source.current, layer.current);
103
+ }, [source, layer, active]);
61
104
  }
62
105
 
63
106
  /**
@@ -1,6 +1,8 @@
1
1
  "use client";
2
2
 
3
3
  import * as React from "react";
4
+ import { createPortal } from "react-dom";
5
+ import { useFloating, usePortalNode } from "../_internal/floating";
4
6
  import { cx } from "../_internal/react";
5
7
  import { buildCalendar, type DayCount, type HeatCell } from "./calendar";
6
8
 
@@ -68,18 +70,13 @@ export function ActivityHeatmap({
68
70
  const cells = React.useRef(new Map<string, HTMLElement>());
69
71
  const key = (week: number, day: number) => `${week}:${day}`;
70
72
 
71
- // Place the tooltip over its cell, kept inside the component's edges.
73
+ // The tooltip is a layer on <body> above its cell, so no card or panel around the heatmap covers or cuts it.
74
+ const portal = usePortalNode();
75
+ const cell = React.useRef<HTMLElement | null>(null);
72
76
  React.useLayoutEffect(() => {
73
- if (!shown || !root.current || !tip.current) return;
74
- const cell = cells.current.get(key(...shown));
75
- if (!cell) return;
76
- const box = root.current.getBoundingClientRect();
77
- const rect = cell.getBoundingClientRect();
78
- const half = tip.current.offsetWidth / 2;
79
- const center = rect.left - box.left + rect.width / 2;
80
- tip.current.style.left = `${Math.min(Math.max(center, half), box.width - half)}px`;
81
- tip.current.style.top = `${rect.top - box.top}px`;
77
+ cell.current = shown ? (cells.current.get(key(...shown)) ?? null) : null;
82
78
  }, [shown]);
79
+ useFloating(cell, tip, Boolean(shown && portal), { side: "top", align: "center", offset: 8, at: shown ? key(...shown) : "" });
83
80
 
84
81
  const move = (week: number, day: number) => {
85
82
  const target = calendar.weeks[week]?.[day];
@@ -177,14 +174,15 @@ export function ActivityHeatmap({
177
174
  })}
178
175
  </div>
179
176
 
180
- <div ref={tip} className="ml-heatmap-tooltip" role="presentation" hidden={!active}>
181
- {active ? (
182
- <>
183
- <strong>{active.count ? count(active.count) : `No ${unit}`}</strong>
184
- <span>{shortDate.format(new Date(`${active.date}T00:00:00Z`))}</span>
185
- </>
186
- ) : null}
187
- </div>
177
+ {active && portal
178
+ ? createPortal(
179
+ <div ref={tip} className="ml-heatmap-tooltip" data-ml-portal="" role="presentation">
180
+ <strong>{active.count ? count(active.count) : `No ${unit}`}</strong>
181
+ <span>{shortDate.format(new Date(`${active.date}T00:00:00Z`))}</span>
182
+ </div>,
183
+ portal,
184
+ )
185
+ : null}
188
186
 
189
187
  {showLegend || caption !== null ? (
190
188
  <div className="ml-heatmap-footer">
@@ -1,8 +1,10 @@
1
1
  "use client";
2
2
 
3
3
  import * as React from "react";
4
+ import { createPortal } from "react-dom";
4
5
  import { IconCheck, IconChevronDown, IconPlus, IconX } from "@mlola-ui/icons";
5
6
  import { Field, fieldDescription, type FormControlProps } from "../input/input";
7
+ import { useFloating, usePortalNode } from "../_internal/floating";
6
8
  import { cx } from "../_internal/react";
7
9
  import { matchCommand } from "../_internal/match";
8
10
  import { revealIn } from "../_internal/scroll";
@@ -40,6 +42,8 @@ export interface ComboboxListProps {
40
42
  /** A last row that creates what was typed. */
41
43
  create?: { label: string; onCreate: () => void } | null;
42
44
  empty?: React.ReactNode;
45
+ /** The field it opens from: it is placed beside it and at least as wide. Defaults to the element it is rendered in. */
46
+ anchor?: React.RefObject<HTMLElement | null>;
43
47
  side: "top" | "bottom";
44
48
  label?: string;
45
49
  grouped?: boolean;
@@ -47,15 +51,31 @@ export interface ComboboxListProps {
47
51
 
48
52
  /**
49
53
  * The popup list a combobox or tag input shows under its field: grouped,
50
- * highlighted by pointer or arrows, never taking focus from the input.
54
+ * highlighted by pointer or arrows, never taking focus from the input. It
55
+ * opens on <body>, placed beside the field, so no card, panel or scroll
56
+ * area around the field can cover or cut it.
51
57
  */
52
- export function ComboboxList({ id, options, active, onActiveChange, onPick, isSelected, create, empty, side, label, grouped = true }: ComboboxListProps) {
58
+ export function ComboboxList({ id, options, active, onActiveChange, onPick, isSelected, create, empty, anchor, side, label, grouped = true }: ComboboxListProps) {
53
59
  const list = React.useRef<HTMLUListElement>(null);
60
+ const layer = React.useRef<HTMLDivElement>(null);
61
+ const spot = React.useRef<HTMLSpanElement>(null);
62
+ const field = React.useRef<HTMLElement | null>(null);
63
+ const portal = usePortalNode();
64
+ // Exactly as wide as the field, as it was when it opened inside it, and never taller than the window's room on its side.
65
+ React.useLayoutEffect(() => {
66
+ field.current = anchor?.current ?? spot.current?.parentElement ?? null;
67
+ if (!field.current || !layer.current) return;
68
+ const rect = field.current.getBoundingClientRect();
69
+ const room = side === "top" ? rect.top - 12 : window.innerHeight - rect.bottom - 12;
70
+ layer.current.style.width = `${rect.width}px`;
71
+ layer.current.style.setProperty("--ml-combobox-room", `${Math.max(120, Math.floor(room))}px`);
72
+ }, [anchor, side, portal]);
73
+ useFloating(field, layer, Boolean(portal), { side, align: "start", offset: 6 });
54
74
  React.useEffect(() => {
55
75
  revealIn(list.current, list.current?.querySelector<HTMLElement>("[data-highlighted]") ?? null);
56
76
  }, [active, options]);
57
- return (
58
- <div className="ml-combobox-popover" data-side={side} onMouseDown={(event) => event.preventDefault()}>
77
+ const popup = (
78
+ <div ref={layer} data-ml-portal="" className="ml-combobox-popover" data-side={side} onMouseDown={(event) => event.preventDefault()}>
59
79
  <ul ref={list} id={id} role="listbox" aria-label={label} className="ml-combobox-list">
60
80
  {options.map((option, index) => {
61
81
  const heading = grouped && option.group && option.group !== options[index - 1]?.group ? option.group : null;
@@ -112,38 +132,25 @@ export function ComboboxList({ id, options, active, onActiveChange, onPick, isSe
112
132
  </ul>
113
133
  </div>
114
134
  );
115
- }
116
-
117
- /** The visible band a list can open into: the viewport, cut down by any ancestor that clips its content. */
118
- function visibleBand(element: HTMLElement) {
119
- let top = 0;
120
- let bottom = window.innerHeight;
121
- for (let node = element.parentElement; node && node !== document.body; node = node.parentElement) {
122
- const style = getComputedStyle(node);
123
- if (/(hidden|clip|auto|scroll)/.test(style.overflowY) || /(hidden|clip|auto|scroll)/.test(style.overflow)) {
124
- const rect = node.getBoundingClientRect();
125
- top = Math.max(top, rect.top);
126
- bottom = Math.min(bottom, rect.bottom);
127
- }
128
- }
129
- return { top, bottom };
135
+ return (
136
+ <>
137
+ <span ref={spot} hidden />
138
+ {portal ? createPortal(popup, portal) : null}
139
+ </>
140
+ );
130
141
  }
131
142
 
132
143
  /**
133
- * Open the list below the field unless there is too little room there and
134
- * more above, counting only space that is actually visible (a card that clips
135
- * its content counts as an edge). The room found is left on the field as
136
- * --ml-combobox-room, so the list never grows past what can be seen.
144
+ * Open the list below the field unless there is too little room in the
145
+ * window there and more above. The list is a layer on <body>, so no
146
+ * container clips it; only the window's edges count.
137
147
  */
138
148
  export function sideFor(element: HTMLElement | null, room = 280): "top" | "bottom" {
139
149
  if (!element) return "bottom";
140
150
  const rect = element.getBoundingClientRect();
141
- const band = visibleBand(element);
142
- const below = band.bottom - rect.bottom - 12;
143
- const above = rect.top - band.top - 12;
144
- const side = below < room && above > below ? "top" : "bottom";
145
- element.style.setProperty("--ml-combobox-room", `${Math.max(120, Math.floor(side === "top" ? above : below))}px`);
146
- return side;
151
+ const below = window.innerHeight - rect.bottom - 12;
152
+ const above = rect.top - 12;
153
+ return below < room && above > below ? "top" : "bottom";
147
154
  }
148
155
 
149
156
  export interface ComboboxProps extends FormControlProps {
@@ -340,6 +347,7 @@ export const Combobox = React.forwardRef<HTMLInputElement, ComboboxProps>(functi
340
347
  isSelected={(option) => option.value === current}
341
348
  create={create}
342
349
  empty={emptyMessage}
350
+ anchor={control}
343
351
  side={side}
344
352
  label={typeof label === "string" ? label : undefined}
345
353
  grouped={!typed.current}
@@ -32,6 +32,10 @@ export function Popover({ trigger, children, label, side = "bottom", align = "st
32
32
  const layer = React.useRef<HTMLDivElement>(null);
33
33
  const portal = usePortalNode();
34
34
  const id = React.useId();
35
+ // A press or focus inside it, or inside a layer opened from inside it (a Select's or a Combobox's list on
36
+ // <body>), reaches its React handlers first; only what never passes through it closes it.
37
+ const pressedInside = React.useRef(false);
38
+ const focusedInside = React.useRef(false);
35
39
  useFloating(anchor, layer, isOpen && Boolean(portal), { side, align });
36
40
 
37
41
  const close = React.useCallback(
@@ -50,7 +54,9 @@ export function Popover({ trigger, children, label, side = "bottom", align = "st
50
54
  });
51
55
  const onPointerDown = (event: PointerEvent) => {
52
56
  const target = event.target as Node;
53
- if (!layer.current?.contains(target) && !anchor.current?.contains(target)) close(false);
57
+ const inside = pressedInside.current;
58
+ pressedInside.current = false;
59
+ if (!inside && !layer.current?.contains(target) && !anchor.current?.contains(target)) close(false);
54
60
  };
55
61
  // Heard before a dialog around it (capture), and marked as used, so one Escape closes one layer.
56
62
  const onKeyDown = (event: KeyboardEvent) => {
@@ -94,9 +100,20 @@ export function Popover({ trigger, children, label, side = "bottom", align = "st
94
100
  tabIndex={-1}
95
101
  data-state="open"
96
102
  className={cx("ml-popover", className)}
103
+ onPointerDown={() => {
104
+ pressedInside.current = true;
105
+ }}
106
+ onFocus={() => {
107
+ focusedInside.current = true;
108
+ }}
97
109
  onBlur={(event) => {
98
110
  const next = event.relatedTarget as Node | null;
99
- if (next && !layer.current?.contains(next) && !anchor.current?.contains(next)) close(false);
111
+ focusedInside.current = false;
112
+ if (!next || anchor.current?.contains(next)) return;
113
+ // Focus lands before this runs: moving into a layer opened from inside it counts as inside.
114
+ requestAnimationFrame(() => {
115
+ if (!focusedInside.current && !layer.current?.contains(document.activeElement)) close(false);
116
+ });
100
117
  }}
101
118
  >
102
119
  {children}
@@ -265,6 +265,7 @@ export const TagInput = React.forwardRef<HTMLInputElement, TagInputProps>(functi
265
265
  input.current?.focus();
266
266
  }}
267
267
  empty={restrict ? "No matching options" : `Press Enter to add “${text.trim()}”`}
268
+ anchor={control}
268
269
  side={side}
269
270
  grouped={false}
270
271
  />
@@ -1,7 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import * as React from "react";
4
+ import { createPortal } from "react-dom";
4
5
  import { IconCircleCheck, IconCircleX, IconInfo, IconTriangleAlert, IconX } from "@mlola-ui/icons";
6
+ import { useLayerTheme, usePortalNode } from "../_internal/floating";
5
7
  import { cx } from "../_internal/react";
6
8
  import { Spinner } from "../spinner/spinner";
7
9
 
@@ -288,6 +290,9 @@ interface ToasterProps {
288
290
  * step away from it. Hovering or focusing the stack pauses every timer, so
289
291
  * nothing disappears while it is being read.
290
292
  */
293
+ /** The offsets an app may set on a place around the Toaster; `--ml-toaster-offset` is the Toaster's own. */
294
+ const TOASTER_OFFSETS = ["--ml-toaster-offset-top", "--ml-toaster-offset-bottom"];
295
+
291
296
  function Toaster({ position = "top-right", label, max = 3, className }: ToasterProps) {
292
297
  const [toasts, setToasts] = React.useState(() => store.filter((item) => item.position === position));
293
298
  const [hovered, setHovered] = React.useState(false);
@@ -305,9 +310,27 @@ function Toaster({ position = "top-right", label, max = 3, className }: ToasterP
305
310
 
306
311
  const shown = toasts.slice(-Math.max(1, max));
307
312
  const ordered = position.startsWith("top") ? [...shown].reverse() : shown;
308
-
309
- return (
313
+ // The region lives on <body>, fixed to the window even when the Toaster is placed inside a card whose
314
+ // glass (a backdrop filter) would otherwise hold it; a mark where it was placed carries that place's theme.
315
+ const place = React.useRef<HTMLSpanElement>(null);
316
+ const region = React.useRef<HTMLDivElement>(null);
317
+ const portal = usePortalNode();
318
+ useLayerTheme(place, region, Boolean(portal));
319
+ // Offsets an app sets around the Toaster (below a sticky header, say) reach the region on <body> too.
320
+ React.useLayoutEffect(() => {
321
+ if (!place.current || !region.current) return;
322
+ const around = getComputedStyle(place.current);
323
+ for (const name of TOASTER_OFFSETS) {
324
+ const value = around.getPropertyValue(name).trim();
325
+ if (value) region.current.style.setProperty(name, value);
326
+ else region.current.style.removeProperty(name);
327
+ }
328
+ });
329
+
330
+ const layer = (
310
331
  <div
332
+ ref={region}
333
+ data-ml-portal=""
311
334
  role="region"
312
335
  aria-label={label ?? `Notifications (${position.replace("-", " ")})`}
313
336
  data-position={position}
@@ -324,6 +347,12 @@ function Toaster({ position = "top-right", label, max = 3, className }: ToasterP
324
347
  ))}
325
348
  </div>
326
349
  );
350
+ return (
351
+ <>
352
+ <span ref={place} hidden />
353
+ {portal ? createPortal(layer, portal) : null}
354
+ </>
355
+ );
327
356
  }
328
357
 
329
358
  export { toast, dismissToast, Toaster };
@@ -1,7 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import * as React from "react";
4
- import { fitTooltip, type Side } from "../_internal/anchor";
4
+ import { createPortal } from "react-dom";
5
+ import { placeTooltip } from "../_internal/anchor";
6
+ import { useFloating, usePortalNode } from "../_internal/floating";
5
7
  import { cx, useLatest } from "../_internal/react";
6
8
 
7
9
  export type TooltipPlacement = "top" | "bottom" | "left" | "right";
@@ -13,14 +15,24 @@ interface TooltipProps {
13
15
  className?: string;
14
16
  }
15
17
 
18
+ /**
19
+ * A short description of its trigger, shown on hover and focus. It opens on
20
+ * <body>, placed beside the trigger (flipped or slid to stay on screen), so
21
+ * no panel, card or scroll area around the trigger can cover or cut it.
22
+ */
16
23
  function Tooltip({ content, placement = "top", delay = 200, children, className }: TooltipProps) {
17
24
  const [open, setOpen] = React.useState(false);
18
- // Where it actually opens: the asked side, flipped or slid to stay on screen.
19
- const [fit, setFit] = React.useState<{ side: Side; shift: number }>({ side: placement, shift: 0 });
20
25
  const root = React.useRef<HTMLSpanElement>(null);
26
+ const anchor = React.useRef<Element | null>(null);
21
27
  const tip = React.useRef<HTMLSpanElement>(null);
22
28
  const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null);
29
+ const portal = usePortalNode();
23
30
  const id = React.useId();
31
+ // The trigger is the wrapper's first child; measured from it, not the wrapper.
32
+ React.useLayoutEffect(() => {
33
+ anchor.current = root.current?.firstElementChild ?? root.current;
34
+ });
35
+ useFloating(anchor, tip, open && Boolean(portal), { side: placement, offset: 8 }, placeTooltip);
24
36
  const clear = () => {
25
37
  if (timer.current) clearTimeout(timer.current);
26
38
  timer.current = null;
@@ -35,17 +47,6 @@ function Tooltip({ content, placement = "top", delay = 200, children, className
35
47
  };
36
48
  const hideRef = useLatest(hide);
37
49
  React.useEffect(() => clear, []);
38
- React.useLayoutEffect(() => {
39
- const anchor = root.current?.firstElementChild ?? root.current;
40
- if (!open || !anchor || !tip.current) {
41
- setFit({ side: placement, shift: 0 });
42
- return;
43
- }
44
- const a = anchor.getBoundingClientRect();
45
- // Layout size, not the painted box: the pop-in animation starts scaled down.
46
- const t = { width: tip.current.offsetWidth, height: tip.current.offsetHeight };
47
- setFit(fitTooltip({ x: a.left, y: a.top, width: a.width, height: a.height }, t, { width: document.documentElement.clientWidth, height: window.innerHeight }, placement));
48
- }, [open, placement]);
49
50
  React.useEffect(() => {
50
51
  if (!open) return;
51
52
  // Heard before a dialog around it (capture), and marked as used, so one Escape closes one layer.
@@ -77,20 +78,15 @@ function Tooltip({ content, placement = "top", delay = 200, children, className
77
78
  return (
78
79
  <span ref={root} className="ml-tooltip-root" onMouseEnter={clear} onMouseLeave={hide}>
79
80
  {trigger}
80
- {open ? (
81
- <span
82
- ref={tip}
83
- id={id}
84
- role="tooltip"
85
- data-side={fit.side}
86
- data-state="open"
87
- className={cx("ml-tooltip", className)}
88
- style={{ "--ml-tooltip-shift": `${fit.shift}px` } as React.CSSProperties}
89
- >
90
- {content}
91
- <span aria-hidden="true" className="ml-tooltip-arrow" />
92
- </span>
93
- ) : null}
81
+ {open && portal
82
+ ? createPortal(
83
+ <span ref={tip} id={id} role="tooltip" data-ml-portal="" data-side={placement} data-state="open" className={cx("ml-tooltip", className)}>
84
+ {content}
85
+ <span aria-hidden="true" className="ml-tooltip-arrow" />
86
+ </span>,
87
+ portal,
88
+ )
89
+ : null}
94
90
  </span>
95
91
  );
96
92
  }
@@ -1,15 +1,15 @@
1
1
  {
2
- "packages/components/_internal/anchor.ts": "sha256-/yW3RVjoY6QfTWnUYSeZ9rFkC9W4WGB1qop8Jp/H1r8=",
2
+ "packages/components/_internal/anchor.ts": "sha256-4qsvIzYQYC+yEhaJ6BDYX18Qdw7isKhzBOEnivnVgOY=",
3
3
  "packages/components/_internal/clipboard.ts": "sha256-0y5p88CTXWuOrUYlC5J4XP1VCrOwkx9jYWVHmD2LouQ=",
4
4
  "packages/components/_internal/dialog.ts": "sha256-HouQjNfiorcAUoc7DFu78QLuhNDgvUuDOxjWZYYd62E=",
5
5
  "packages/components/_internal/dom.ts": "sha256-TJp94MipbXHonH/PC7FFHu5pnAqcoxzLocksWLsTAsc=",
6
- "packages/components/_internal/floating.ts": "sha256-8iKD2nqqwTY0grZ+KDnP81CcChrQK4CDvlDvApl0fF4=",
6
+ "packages/components/_internal/floating.ts": "sha256-NBumGWGIapELCkncRqj4lTCctaGWVsArM11ksc5W39E=",
7
7
  "packages/components/_internal/match.ts": "sha256-3tUYob6xmD2nLerh634E3R5iPbzMeNBzdDynsDFjj28=",
8
8
  "packages/components/_internal/media.ts": "sha256-ziH0YZtu8y3X7OcDI6lYxpvGJCi9zQXq4dynG8n8U9c=",
9
9
  "packages/components/_internal/react.ts": "sha256-INfds1J2f1MLpN6kBXz0GkfBEMIiRlhv0DXX455qAZo=",
10
10
  "packages/components/_internal/scroll.ts": "sha256-/YxhPPJa6Iax4q5eEs8dmpQp634TbvB+421MphEyscQ=",
11
11
  "packages/components/accordion/accordion.tsx": "sha256-NodsdXiIL5VE7C2m3C0IC854lNUOIWgQQmmSKr6v59E=",
12
- "packages/components/activity-heatmap/activity-heatmap.tsx": "sha256-nHXmfiLpZOH+PrqE1/fyIjevjyPD2/8hSPZRn/+cYcY=",
12
+ "packages/components/activity-heatmap/activity-heatmap.tsx": "sha256-WLJYE8lZY8Vi+K9TSW41hHP/eWGRRUkfVC+RaBTHgpw=",
13
13
  "packages/components/activity-heatmap/calendar.ts": "sha256-NB+AjXY5Xc+KzR8MMTRBgZxdzOeoHhkW0KQOW7WJPuQ=",
14
14
  "packages/components/alert/alert.tsx": "sha256-vQ0pvYOpLmafcglpwub6aHLjDPSP4N8qoTCwjo5aEi8=",
15
15
  "packages/components/app-shell/app-shell.tsx": "sha256-slT7UclIZtl2xu7MALrR/i52BHGOR05eCwFTD1mh9AI=",
@@ -24,7 +24,7 @@
24
24
  "packages/components/checkbox/checkbox.tsx": "sha256-hz4YbGwOxv/aJpJHrLXR4MKSWJGyjzoJEIGvdhyML9M=",
25
25
  "packages/components/color-picker/color-picker.tsx": "sha256-/UyEbxqknsHheX444Imc3WphyixZbvj8hGL+r+zyG5w=",
26
26
  "packages/components/color-picker/color.ts": "sha256-YqSgYjzn7XfPWAHuyzbwOhbg/ScaSfB7V73e9w+OjJs=",
27
- "packages/components/combobox/combobox.tsx": "sha256-fiK8UpFpI5G1tZGFXiUmjMvCWcL8aW7qy9FUaMmAqhw=",
27
+ "packages/components/combobox/combobox.tsx": "sha256-WHELCyUcgphiLCg3KFKcRvmStRKglU8lQEPXNXZp+IM=",
28
28
  "packages/components/command-menu/command-menu.tsx": "sha256-wZnlj17zVlcfp5I08ziggHtchfdqjlvNl+MyiP+Rdbo=",
29
29
  "packages/components/context-menu/context-menu.tsx": "sha256-OGaKzthZJGaV5T+4sRWYecA64wEEg2KImKnIzMMg1i4=",
30
30
  "packages/components/copy-button/copy-button.tsx": "sha256-6fvfifoiDOtW+WxKWon4SGEn3THtERuCX2hqGSZDtVM=",
@@ -41,7 +41,7 @@
41
41
  "packages/components/otp-input/otp-input.tsx": "sha256-0KeyDLCC27/GqOocMWXggJ255PCEpCOCcINAcabksSk=",
42
42
  "packages/components/pagination/pagination.tsx": "sha256-FBwk8tq4JcsK2D0dlWEYiDSRx3owgBmGzEIlVRaNBoE=",
43
43
  "packages/components/password-input/password-input.tsx": "sha256-oY//vTILhUicJyfAWZrSUTl8WWsf4P2S1Bh0x4OxwLs=",
44
- "packages/components/popover/popover.tsx": "sha256-V4e+a/JdVJBj6j3CMWsREuhFW7ZuaNsa2LAl/BuWGxE=",
44
+ "packages/components/popover/popover.tsx": "sha256-LJVinhURpl3dh7DwFfC6IVxigv9b5oLwnxdrObkz8Ec=",
45
45
  "packages/components/priority-icon/labels.ts": "sha256-zhmJIb7/gS16wU+xCJ7hkReBi9q5RI3SMwdjkJvvvKU=",
46
46
  "packages/components/priority-icon/priority-icon.tsx": "sha256-3D6hFRpht3YuWouLhakE2DFdldavmJx0B/povEDwrtQ=",
47
47
  "packages/components/progress/progress.tsx": "sha256-oDxj1Ccl1pKV4+e6A7aaJL1FThW8qs9r4Gb0hEmExeM=",
@@ -59,14 +59,14 @@
59
59
  "packages/components/stepper/stepper.tsx": "sha256-uI/dRmkbijlixHiGUceWcpaDzpEixrzQ1UTmoPbGZAY=",
60
60
  "packages/components/table/table.tsx": "sha256-xJlWzCH76Lrgg/HrlnVTHkG5dfCkbzjWXEdTVG5Jk4w=",
61
61
  "packages/components/tabs/tabs.tsx": "sha256-Wp0WhVFPwaX3aIGXNJBbSGNWPMT6X/Sbl+kE+zZSyvk=",
62
- "packages/components/tag-input/tag-input.tsx": "sha256-LnOwotLuPB06nlkdzckjDVhk03D6c/exJXJs2blZNRQ=",
62
+ "packages/components/tag-input/tag-input.tsx": "sha256-KAjAqXnZPsqMt2l6IY01+g7VJhOaop9CZJ795/mXsSY=",
63
63
  "packages/components/textarea/textarea.tsx": "sha256-zculOGfrK4LVcWne3+jS+7qKcfJPM/25vJdm7AXOJfk=",
64
64
  "packages/components/time-picker/time-picker.tsx": "sha256-HquGogkQB7YGs/1iTSqftSJ310hgXqKdAc+fU1RtQ5Y=",
65
65
  "packages/components/time-picker/times.ts": "sha256-V/4uqFZPn9gVnyx8cB9vwp/RocmTYaPmLxjfy8DPQOI=",
66
66
  "packages/components/timeline/timeline.tsx": "sha256-nVg7lBcAUAzqEb0YrHagJXSaHE2aWWE9bUbQMWQY6PU=",
67
- "packages/components/toast/toast.tsx": "sha256-6hKQ8wLN6uTnfVebpEeuvAxqAXDppWdjzGi33wtW8Y4=",
67
+ "packages/components/toast/toast.tsx": "sha256-BKZEXKOD4kUfIP3flFXJw6SHg1hvqq0A22lnknjdyRw=",
68
68
  "packages/components/toggle/toggle.tsx": "sha256-8qPHeSliHNdzQS7OLJ47BrvRR75MYyUGJlK4s21XS/U=",
69
- "packages/components/tooltip/tooltip.tsx": "sha256-PYjLEr+GFmu8VrLua1d4yzk0plXYbjIKMAUlwfIn+1c=",
69
+ "packages/components/tooltip/tooltip.tsx": "sha256-mEmGAn5A6hJBIdPe0mkFCWWPUnip4YN8IqH7odumU+c=",
70
70
  "packages/components/tour/tour.tsx": "sha256-b2XJokzSio2N9MFDbAbXn6w2f7diJb1KWedSCycRMmE=",
71
71
  "packages/components/virtual-list/virtual-list.tsx": "sha256-oA8xFCwUgskmM+symA4gZxFqSyBCpeKfyM5zHyJaYaQ=",
72
72
  "packages/components/virtual-list/virtual.ts": "sha256-PyDIj3C2Vwb1i4ZssxSlYjgKmZPBIFLZFNq8YCW2Z78="