haze-ui 1.32.0 → 1.33.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 (49) hide show
  1. package/README.md +87 -1210
  2. package/dist/coi-serviceworker.LICENSE +21 -0
  3. package/dist/coi-serviceworker.js +118 -0
  4. package/dist/components/Countdown/Countdown.js +49 -0
  5. package/dist/components/Countdown/index.js +3 -0
  6. package/dist/components/HoverCard/HoverCard.js +63 -43
  7. package/dist/components/ImageCrop/ImageCrop.js +188 -0
  8. package/dist/components/ImageCrop/image-crop-geometry.js +81 -0
  9. package/dist/components/ImageCrop/index.js +3 -0
  10. package/dist/components/LocaleProvider/ar-sa.js +6 -0
  11. package/dist/components/LocaleProvider/de-de.js +6 -0
  12. package/dist/components/LocaleProvider/es-es.js +6 -0
  13. package/dist/components/LocaleProvider/fr-fr.js +6 -0
  14. package/dist/components/LocaleProvider/it-it.js +6 -0
  15. package/dist/components/LocaleProvider/ja-jp.js +6 -0
  16. package/dist/components/LocaleProvider/ko-kr.js +6 -0
  17. package/dist/components/LocaleProvider/locale.js +6 -0
  18. package/dist/components/LocaleProvider/pt-br.js +6 -0
  19. package/dist/components/LocaleProvider/ru-ru.js +6 -0
  20. package/dist/components/LocaleProvider/zh-cn.js +6 -0
  21. package/dist/components/Resizable/index.js +1 -1
  22. package/dist/components/Splitter/Splitter.js +199 -0
  23. package/dist/components/Splitter/index.js +3 -0
  24. package/dist/css/countdown.css +4 -0
  25. package/dist/css/image-crop.css +4 -0
  26. package/dist/css/splitter.css +4 -0
  27. package/dist/css-manifest.json +4 -3
  28. package/dist/haze-ui.css +12 -0
  29. package/dist/hooks/useHotkeys.js +78 -24
  30. package/dist/index.js +277 -274
  31. package/dist/mcp-docs.json +210 -9
  32. package/dist/registry.json +71 -5
  33. package/dist/robots.txt +4 -0
  34. package/dist/sitemap.xml +160 -0
  35. package/dist/types/components/ConfigProvider/ConfigContext.d.ts +2 -1
  36. package/dist/types/components/Countdown/Countdown.d.ts +30 -0
  37. package/dist/types/components/Countdown/index.d.ts +2 -0
  38. package/dist/types/components/HoverCard/HoverCard.d.ts +18 -1
  39. package/dist/types/components/ImageCrop/ImageCrop.d.ts +67 -0
  40. package/dist/types/components/ImageCrop/image-crop-geometry.d.ts +65 -0
  41. package/dist/types/components/ImageCrop/index.d.ts +3 -0
  42. package/dist/types/components/LocaleProvider/locale.d.ts +6 -0
  43. package/dist/types/components/Resizable/index.d.ts +0 -2
  44. package/dist/types/components/Splitter/Splitter.d.ts +33 -0
  45. package/dist/types/components/Splitter/index.d.ts +2 -0
  46. package/dist/types/headless/index.d.ts +7 -6
  47. package/dist/types/hooks/useHotkeys.d.ts +16 -4
  48. package/dist/types/index.d.ts +7 -2
  49. package/package.json +23 -4
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-10-11T16:55:31.959Z",
2
+ "generatedAt": "2026-10-19T05:34:18.035Z",
3
3
  "components": {
4
4
  "Accordion": {
5
5
  "cssFamily": "accordion",
@@ -2513,6 +2513,46 @@
2513
2513
  ]
2514
2514
  }
2515
2515
  },
2516
+ "Countdown": {
2517
+ "cssFamily": "countdown",
2518
+ "importStatement": "import { Countdown } from 'haze-ui';\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/countdown.css';",
2519
+ "peerDeps": [],
2520
+ "description": "Deadline countdown: `value` timestamp or Date, setTimeout-chain ticks aligned to second boundaries (no interval drift), `onFinish` fires once, adaptive `1d hh:mm:ss` / `hh:mm:ss` default format with `format`/`render` escape hatches.",
2521
+ "props": {
2522
+ "CountdownProps": [
2523
+ {
2524
+ "name": "value",
2525
+ "type": "number | Date",
2526
+ "required": true,
2527
+ "description": ""
2528
+ },
2529
+ {
2530
+ "name": "onFinish",
2531
+ "type": "() => void",
2532
+ "required": false,
2533
+ "description": ""
2534
+ },
2535
+ {
2536
+ "name": "format",
2537
+ "type": "(parts: CountdownParts) => string",
2538
+ "required": false,
2539
+ "description": ""
2540
+ },
2541
+ {
2542
+ "name": "render",
2543
+ "type": "(parts: CountdownParts) => ReactNode",
2544
+ "required": false,
2545
+ "description": ""
2546
+ },
2547
+ {
2548
+ "name": "className",
2549
+ "type": "string",
2550
+ "required": false,
2551
+ "description": ""
2552
+ }
2553
+ ]
2554
+ }
2555
+ },
2516
2556
  "DataTable": {
2517
2557
  "cssFamily": "data-table",
2518
2558
  "importStatement": "import { DataTable, dataTableToCsv, dataTableSum, dataTableAvg, dataTableCount } from 'haze-ui';\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/data-table.css';",
@@ -4343,6 +4383,13 @@
4343
4383
  "required": false,
4344
4384
  "description": ""
4345
4385
  },
4386
+ {
4387
+ "name": "interactive",
4388
+ "type": "boolean",
4389
+ "required": false,
4390
+ "default": "false",
4391
+ "description": "PreviewTrigger semantics: focusable card content joins the Tab order (never trapped), focus may travel between trigger and card without closing it, Escape closes and returns focus to the trigger. Pointer grace defaults to 300ms in this mode; a focused card ignores pointer leaves."
4392
+ },
4346
4393
  {
4347
4394
  "name": "placement",
4348
4395
  "type": "FloatingPlacement",
@@ -4496,6 +4543,94 @@
4496
4543
  ]
4497
4544
  }
4498
4545
  },
4546
+ "ImageCrop": {
4547
+ "cssFamily": "image-crop",
4548
+ "importStatement": "import { ImageCrop } from 'haze-ui';\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/image-crop.css';",
4549
+ "peerDeps": [],
4550
+ "description": "Interactive image cropper pairing with Upload: controllable normalized CropRect value, aspect lock, circle avatar mask, pointer drag with corner handles, full keyboard operation (arrows move, Shift+arrows resize) and a getCroppedCanvas ref API.",
4551
+ "props": {
4552
+ "ImageCropProps": [
4553
+ {
4554
+ "name": "src",
4555
+ "type": "string",
4556
+ "required": true,
4557
+ "description": ""
4558
+ },
4559
+ {
4560
+ "name": "alt",
4561
+ "type": "string",
4562
+ "required": true,
4563
+ "description": ""
4564
+ },
4565
+ {
4566
+ "name": "value",
4567
+ "type": "ControlOrValue<CropRect>",
4568
+ "required": false,
4569
+ "description": ""
4570
+ },
4571
+ {
4572
+ "name": "onChange",
4573
+ "type": "(rect: CropRect) => void",
4574
+ "required": false,
4575
+ "description": ""
4576
+ },
4577
+ {
4578
+ "name": "aspect",
4579
+ "type": "number",
4580
+ "required": false,
4581
+ "description": ""
4582
+ },
4583
+ {
4584
+ "name": "shape",
4585
+ "type": "'circle' | 'rect'",
4586
+ "required": false,
4587
+ "description": ""
4588
+ },
4589
+ {
4590
+ "name": "cropLabel",
4591
+ "type": "string",
4592
+ "required": false,
4593
+ "description": ""
4594
+ },
4595
+ {
4596
+ "name": "unsupportedLabel",
4597
+ "type": "string",
4598
+ "required": false,
4599
+ "description": ""
4600
+ },
4601
+ {
4602
+ "name": "errorLabel",
4603
+ "type": "string",
4604
+ "required": false,
4605
+ "description": ""
4606
+ },
4607
+ {
4608
+ "name": "disabled",
4609
+ "type": "boolean",
4610
+ "required": false,
4611
+ "description": ""
4612
+ },
4613
+ {
4614
+ "name": "crossOrigin",
4615
+ "type": "'anonymous' | 'use-credentials'",
4616
+ "required": false,
4617
+ "description": ""
4618
+ },
4619
+ {
4620
+ "name": "className",
4621
+ "type": "string",
4622
+ "required": false,
4623
+ "description": ""
4624
+ },
4625
+ {
4626
+ "name": "ref",
4627
+ "type": "Ref<ImageCropHandle>",
4628
+ "required": false,
4629
+ "description": ""
4630
+ }
4631
+ ]
4632
+ }
4633
+ },
4499
4634
  "Indicator": {
4500
4635
  "cssFamily": "indicator",
4501
4636
  "importStatement": "import { Indicator } from 'haze-ui';\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/indicator.css';",
@@ -6437,9 +6572,9 @@
6437
6572
  },
6438
6573
  "Resizable": {
6439
6574
  "cssFamily": "resizable",
6440
- "importStatement": "import { ResizableGroup, ResizablePanel, ResizableHandle, SplitterGroup, SplitterPanel, SplitterHandle } from 'haze-ui';\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/resizable.css';",
6575
+ "importStatement": "import { ResizableGroup, ResizablePanel, ResizableHandle } from 'haze-ui';\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/resizable.css';",
6441
6576
  "peerDeps": [],
6442
- "description": "Split-pane group with draggable dividers, horizontal or vertical; also exported as `SplitterGroup`/`SplitterPanel`/`SplitterHandle` (AntD-style naming).",
6577
+ "description": "Split-pane group with draggable dividers, horizontal or vertical; px sizing per panel with `onResizeCommit` for persistence.",
6443
6578
  "props": {
6444
6579
  "ResizableGroupProps": [
6445
6580
  {
@@ -6472,12 +6607,6 @@
6472
6607
  "type": "(sizes: Record<string, number>) => void",
6473
6608
  "required": false,
6474
6609
  "description": "Fires once when a drag or keyboard resize settles, mapping fixed-panel ids to their committed px sizes — the persistence hook (write it back into a store or Control)"
6475
- },
6476
- {
6477
- "name": "SplitterGroup · SplitterPanel · SplitterHandle",
6478
- "type": "aliases",
6479
- "required": false,
6480
- "description": "AntD migration entry: `import { SplitterGroup, SplitterPanel, SplitterHandle } from 'haze-ui'` maps 1:1 onto ResizableGroup / ResizablePanel / ResizableHandle (same props)"
6481
6610
  }
6482
6611
  ],
6483
6612
  "ResizableHandleProps": [
@@ -7548,6 +7677,78 @@
7548
7677
  ]
7549
7678
  }
7550
7679
  },
7680
+ "Splitter": {
7681
+ "cssFamily": "splitter",
7682
+ "importStatement": "import { Splitter, SplitterPane } from 'haze-ui';\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/splitter.css';",
7683
+ "peerDeps": [],
7684
+ "description": "Multi-pane split layout with implicit draggable dividers (AntD Splitter semantics): `sizes` in percent of the pane area (`ControlOrValue` array), per-pane `min`/`max` clamps, opt-in `collapsible` panes with divider collapse/expand triggers, keyboard arrows and pointer drags.",
7685
+ "props": {
7686
+ "SplitterPaneProps": [
7687
+ {
7688
+ "name": "min",
7689
+ "type": "number",
7690
+ "required": false,
7691
+ "description": ""
7692
+ },
7693
+ {
7694
+ "name": "max",
7695
+ "type": "number",
7696
+ "required": false,
7697
+ "description": ""
7698
+ },
7699
+ {
7700
+ "name": "collapsible",
7701
+ "type": "boolean",
7702
+ "required": false,
7703
+ "description": ""
7704
+ },
7705
+ {
7706
+ "name": "children",
7707
+ "type": "ReactNode",
7708
+ "required": false,
7709
+ "description": ""
7710
+ },
7711
+ {
7712
+ "name": "className",
7713
+ "type": "string",
7714
+ "required": false,
7715
+ "description": ""
7716
+ }
7717
+ ],
7718
+ "SplitterProps": [
7719
+ {
7720
+ "name": "orientation",
7721
+ "type": "'vertical' | 'horizontal'",
7722
+ "required": false,
7723
+ "description": ""
7724
+ },
7725
+ {
7726
+ "name": "sizes",
7727
+ "type": "ControlOrValue<number[]>",
7728
+ "required": false,
7729
+ "description": ""
7730
+ },
7731
+ {
7732
+ "name": "onSizesChange",
7733
+ "type": "(sizes: number[]) => void",
7734
+ "required": false,
7735
+ "description": ""
7736
+ },
7737
+ {
7738
+ "name": "children",
7739
+ "type": "ReactNode",
7740
+ "required": false,
7741
+ "description": ""
7742
+ },
7743
+ {
7744
+ "name": "className",
7745
+ "type": "string",
7746
+ "required": false,
7747
+ "description": ""
7748
+ }
7749
+ ]
7750
+ }
7751
+ },
7551
7752
  "Spoiler": {
7552
7753
  "cssFamily": "spoiler",
7553
7754
  "importStatement": "import { Spoiler } from 'haze-ui';\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/spoiler.css';",
@@ -303,7 +303,7 @@
303
303
  "title": "Haze UI base (tokens + every component wrapper)",
304
304
  "description": "One-command setup of the whole haze-ui design system: theme tokens plus a thin wrapper for every styled component, pulled in through registryDependencies.",
305
305
  "author": "wmzy <https://github.com/wmzy>",
306
- "docs": "One command installs the entire haze-ui design system: the theme tokens\n(this item ships the token-activation wrapper) plus a thin re-export\nwrapper for every styled component — 132 registry items pulled\nin through `registryDependencies`, resolved recursively by the CLI.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/base\n```\n\nEach component wrapper lands at `components/ui/haze/<component>.tsx` and\nre-exports its component from the `haze-ui` npm package (installed\nautomatically), importing its stylesheet — no other setup is needed.\n\n## Theming\n\nThis wrapper re-exports the 'lightTheme' (or 'darkTheme'), 'spacing' and\n'typography' classes from 'haze-ui' and imports 'haze-ui/css/tokens.css'.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
306
+ "docs": "One command installs the entire haze-ui design system: the theme tokens\n(this item ships the token-activation wrapper) plus a thin re-export\nwrapper for every styled component — 135 registry items pulled\nin through `registryDependencies`, resolved recursively by the CLI.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/base\n```\n\nEach component wrapper lands at `components/ui/haze/<component>.tsx` and\nre-exports its component from the `haze-ui` npm package (installed\nautomatically), importing its stylesheet — no other setup is needed.\n\n## Theming\n\nThis wrapper re-exports the 'lightTheme' (or 'darkTheme'), 'spacing' and\n'typography' classes from 'haze-ui' and imports 'haze-ui/css/tokens.css'.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
307
307
  "categories": [
308
308
  "theme",
309
309
  "setup"
@@ -349,6 +349,7 @@
349
349
  "wmzy/haze-ui/context-menu",
350
350
  "wmzy/haze-ui/conversation-list",
351
351
  "wmzy/haze-ui/count-up",
352
+ "wmzy/haze-ui/countdown",
352
353
  "wmzy/haze-ui/data-table",
353
354
  "wmzy/haze-ui/date-range-picker",
354
355
  "wmzy/haze-ui/datepicker",
@@ -371,6 +372,7 @@
371
372
  "wmzy/haze-ui/hover-card",
372
373
  "wmzy/haze-ui/icon",
373
374
  "wmzy/haze-ui/image",
375
+ "wmzy/haze-ui/image-crop",
374
376
  "wmzy/haze-ui/indicator",
375
377
  "wmzy/haze-ui/inline-completion",
376
378
  "wmzy/haze-ui/inline-edit",
@@ -409,6 +411,7 @@
409
411
  "wmzy/haze-ui/sources",
410
412
  "wmzy/haze-ui/sparkline",
411
413
  "wmzy/haze-ui/spinner",
414
+ "wmzy/haze-ui/splitter",
412
415
  "wmzy/haze-ui/spoiler",
413
416
  "wmzy/haze-ui/stat",
414
417
  "wmzy/haze-ui/status-bar",
@@ -936,6 +939,27 @@
936
939
  }
937
940
  ]
938
941
  },
942
+ {
943
+ "name": "countdown",
944
+ "type": "registry:ui",
945
+ "title": "Countdown",
946
+ "description": "Deadline countdown: `value` timestamp or Date, setTimeout-chain ticks aligned to second boundaries (no interval drift), `onFinish` fires once, adaptive `1d hh:mm:ss` / `hh:mm:ss` default format with `format`/`render` escape hatches.",
947
+ "author": "wmzy <https://github.com/wmzy>",
948
+ "docs": "Deadline countdown: `value` timestamp or Date, setTimeout-chain ticks aligned to second boundaries (no interval drift), `onFinish` fires once, adaptive `1d hh:mm:ss` / `hh:mm:ss` default format with `format`/`render` escape hatches.\n\nExports: `Countdown`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/countdown\n```\n\nThe wrapper lands at `components/ui/haze/countdown.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/countdown.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
949
+ "categories": [
950
+ "general"
951
+ ],
952
+ "dependencies": [
953
+ "haze-ui"
954
+ ],
955
+ "files": [
956
+ {
957
+ "path": "components/haze/countdown.tsx",
958
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { Countdown } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/countdown.css';\n\nexport { Countdown };\nexport type { CountdownProps, CountdownParts } from 'haze-ui';\n",
959
+ "type": "registry:ui"
960
+ }
961
+ ]
962
+ },
939
963
  {
940
964
  "name": "data-table",
941
965
  "type": "registry:ui",
@@ -1398,6 +1422,27 @@
1398
1422
  }
1399
1423
  ]
1400
1424
  },
1425
+ {
1426
+ "name": "image-crop",
1427
+ "type": "registry:ui",
1428
+ "title": "ImageCrop",
1429
+ "description": "Interactive image cropper pairing with Upload: controllable normalized CropRect value, aspect lock, circle avatar mask, pointer drag with corner handles, full keyboard operation (arrows move, Shift+arrows resize) and a getCroppedCanvas ref API.",
1430
+ "author": "wmzy <https://github.com/wmzy>",
1431
+ "docs": "Interactive image cropper pairing with Upload: controllable normalized CropRect value, aspect lock, circle avatar mask, pointer drag with corner handles, full keyboard operation (arrows move, Shift+arrows resize) and a getCroppedCanvas ref API.\n\nExports: `ImageCrop`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/image-crop\n```\n\nThe wrapper lands at `components/ui/haze/image-crop.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/image-crop.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1432
+ "categories": [
1433
+ "form"
1434
+ ],
1435
+ "dependencies": [
1436
+ "haze-ui"
1437
+ ],
1438
+ "files": [
1439
+ {
1440
+ "path": "components/haze/image-crop.tsx",
1441
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ImageCrop } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/image-crop.css';\n\nexport { ImageCrop };\nexport type { ImageCropHandle, ImageCropProps, CropRect } from 'haze-ui';\n",
1442
+ "type": "registry:ui"
1443
+ }
1444
+ ]
1445
+ },
1401
1446
  {
1402
1447
  "name": "indicator",
1403
1448
  "type": "registry:ui",
@@ -1947,10 +1992,10 @@
1947
1992
  {
1948
1993
  "name": "resizable",
1949
1994
  "type": "registry:ui",
1950
- "title": "ResizableGroup / ResizablePanel / ResizableHandle / SplitterGroup / SplitterPanel / SplitterHandle",
1951
- "description": "Split-pane group with draggable dividers, horizontal or vertical; also exported as `SplitterGroup`/`SplitterPanel`/`SplitterHandle` (AntD-style naming).",
1995
+ "title": "ResizableGroup / ResizablePanel / ResizableHandle",
1996
+ "description": "Split-pane group with draggable dividers, horizontal or vertical; px sizing per panel with `onResizeCommit` for persistence.",
1952
1997
  "author": "wmzy <https://github.com/wmzy>",
1953
- "docs": "Split-pane group with draggable dividers, horizontal or vertical; also exported as `SplitterGroup`/`SplitterPanel`/`SplitterHandle` (AntD-style naming).\n\nExports: `ResizableGroup`, `ResizablePanel`, `ResizableHandle`, `SplitterGroup`, `SplitterPanel`, `SplitterHandle`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/resizable\n```\n\nThe wrapper lands at `components/ui/haze/resizable.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/resizable.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1998
+ "docs": "Split-pane group with draggable dividers, horizontal or vertical; px sizing per panel with `onResizeCommit` for persistence.\n\nExports: `ResizableGroup`, `ResizablePanel`, `ResizableHandle`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/resizable\n```\n\nThe wrapper lands at `components/ui/haze/resizable.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/resizable.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
1954
1999
  "categories": [
1955
2000
  "layout"
1956
2001
  ],
@@ -1960,7 +2005,7 @@
1960
2005
  "files": [
1961
2006
  {
1962
2007
  "path": "components/haze/resizable.tsx",
1963
- "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ResizableGroup, ResizablePanel, ResizableHandle, SplitterGroup, SplitterPanel, SplitterHandle } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/resizable.css';\n\nexport { ResizableGroup, ResizablePanel, ResizableHandle, SplitterGroup, SplitterPanel, SplitterHandle };\nexport type { ResizableGroupProps, ResizablePanelProps, ResizableHandleProps, SplitterGroupProps, SplitterPanelProps, SplitterHandleProps } from 'haze-ui';\n",
2008
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { ResizableGroup, ResizablePanel, ResizableHandle } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/resizable.css';\n\nexport { ResizableGroup, ResizablePanel, ResizableHandle };\nexport type { ResizableGroupProps, ResizablePanelProps, ResizableHandleProps } from 'haze-ui';\n",
1964
2009
  "type": "registry:ui"
1965
2010
  }
1966
2011
  ]
@@ -2196,6 +2241,27 @@
2196
2241
  }
2197
2242
  ]
2198
2243
  },
2244
+ {
2245
+ "name": "splitter",
2246
+ "type": "registry:ui",
2247
+ "title": "Splitter / SplitterPane",
2248
+ "description": "Multi-pane split layout with implicit draggable dividers (AntD Splitter semantics): `sizes` in percent of the pane area (`ControlOrValue` array), per-pane `min`/`max` clamps, opt-in `collapsible` panes with divider collapse/expand triggers, keyboard arrows and pointer drags.",
2249
+ "author": "wmzy <https://github.com/wmzy>",
2250
+ "docs": "Multi-pane split layout with implicit draggable dividers (AntD Splitter semantics): `sizes` in percent of the pane area (`ControlOrValue` array), per-pane `min`/`max` clamps, opt-in `collapsible` panes with divider collapse/expand triggers, keyboard arrows and pointer drags.\n\nExports: `Splitter`, `SplitterPane`.\n\n## Install\n\n```bash\nnpx shadcn@latest add wmzy/haze-ui/splitter\n```\n\nThe wrapper lands at `components/ui/haze/splitter.tsx` (via the `@ui/` target placeholder from `components.json`) and re-exports the component(s) from the `haze-ui` npm package, which is installed automatically.\n\n## Theming\n\nhaze-ui ships JS and CSS separately — the installed wrapper already imports\n`haze-ui/css/tokens.css` and `haze-ui/css/splitter.css`, so no extra stylesheet setup is needed.\n\nActivate the design tokens by applying the classes to a root element:\n\n```jsx\nimport { lightTheme, spacing, typography } from 'haze-ui';\n\n// on <body> or any root container — darkTheme is a drop-in swap\n<div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n```\n\nDetails: https://github.com/wmzy/haze-ui/tree/main/registry",
2251
+ "categories": [
2252
+ "layout"
2253
+ ],
2254
+ "dependencies": [
2255
+ "haze-ui"
2256
+ ],
2257
+ "files": [
2258
+ {
2259
+ "path": "components/haze/splitter.tsx",
2260
+ "content": "// haze-ui registry wrapper — generated by scripts/generate-registry.mjs.\n//\n// This is a thin wrapper around the published haze-ui npm package, not\n// vendored component source: it re-exports the component(s) from\n// 'haze-ui' and imports their stylesheet, so the package keeps updating\n// underneath. Edit this file to customize — wrap, restyle, compose; that\n// is what it is for. (haze-ui is compiled CSS-in-JS (linaria) styled\n// against --haze-* design tokens, so vendoring the source would neither\n// build nor style — forking this wrapper is the intended customization\n// path.)\n//\n// Theming (once per app): apply the token classes to a root element, e.g.\n// import { lightTheme, spacing, typography } from 'haze-ui';\n// <div className={`${lightTheme} ${spacing} ${typography}`}>…</div>\n// (darkTheme is a drop-in swap). haze-ui dist modules ship their own\n// 'use client' directive, so imports resolve cleanly from RSC; the\n// wrapper inherits client semantics either way.\n\nimport { Splitter, SplitterPane } from 'haze-ui';\n\nimport 'haze-ui/css/tokens.css';\nimport 'haze-ui/css/splitter.css';\n\nexport { Splitter, SplitterPane };\nexport type { SplitterProps, SplitterPaneProps } from 'haze-ui';\n",
2261
+ "type": "registry:ui"
2262
+ }
2263
+ ]
2264
+ },
2199
2265
  {
2200
2266
  "name": "spoiler",
2201
2267
  "type": "registry:ui",
@@ -0,0 +1,4 @@
1
+ User-agent: *
2
+ Allow: /
3
+
4
+ Sitemap: https://wmzy.github.io/haze-ui/sitemap.xml
@@ -0,0 +1,160 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3
+ <url><loc>https://wmzy.github.io/haze-ui/</loc></url>
4
+ <url><loc>https://wmzy.github.io/haze-ui/getting-started</loc></url>
5
+ <url><loc>https://wmzy.github.io/haze-ui/recipes</loc></url>
6
+ <url><loc>https://wmzy.github.io/haze-ui/guides/dark-mode</loc></url>
7
+ <url><loc>https://wmzy.github.io/haze-ui/guides/density</loc></url>
8
+ <url><loc>https://wmzy.github.io/haze-ui/guides/a11y</loc></url>
9
+ <url><loc>https://wmzy.github.io/haze-ui/guides/a11y-contracts</loc></url>
10
+ <url><loc>https://wmzy.github.io/haze-ui/guides/migration</loc></url>
11
+ <url><loc>https://wmzy.github.io/haze-ui/guides/streaming-a11y</loc></url>
12
+ <url><loc>https://wmzy.github.io/haze-ui/guides/motion</loc></url>
13
+ <url><loc>https://wmzy.github.io/haze-ui/tokens</loc></url>
14
+ <url><loc>https://wmzy.github.io/haze-ui/components</loc></url>
15
+ <url><loc>https://wmzy.github.io/haze-ui/components/button</loc></url>
16
+ <url><loc>https://wmzy.github.io/haze-ui/components/input</loc></url>
17
+ <url><loc>https://wmzy.github.io/haze-ui/components/select</loc></url>
18
+ <url><loc>https://wmzy.github.io/haze-ui/components/checkbox</loc></url>
19
+ <url><loc>https://wmzy.github.io/haze-ui/components/switch</loc></url>
20
+ <url><loc>https://wmzy.github.io/haze-ui/components/badge</loc></url>
21
+ <url><loc>https://wmzy.github.io/haze-ui/components/dialog</loc></url>
22
+ <url><loc>https://wmzy.github.io/haze-ui/components/tooltip</loc></url>
23
+ <url><loc>https://wmzy.github.io/haze-ui/components/popover</loc></url>
24
+ <url><loc>https://wmzy.github.io/haze-ui/components/card</loc></url>
25
+ <url><loc>https://wmzy.github.io/haze-ui/components/radio</loc></url>
26
+ <url><loc>https://wmzy.github.io/haze-ui/components/textarea</loc></url>
27
+ <url><loc>https://wmzy.github.io/haze-ui/components/slider</loc></url>
28
+ <url><loc>https://wmzy.github.io/haze-ui/components/tabs</loc></url>
29
+ <url><loc>https://wmzy.github.io/haze-ui/components/accordion</loc></url>
30
+ <url><loc>https://wmzy.github.io/haze-ui/components/alert</loc></url>
31
+ <url><loc>https://wmzy.github.io/haze-ui/components/avatar</loc></url>
32
+ <url><loc>https://wmzy.github.io/haze-ui/components/tag</loc></url>
33
+ <url><loc>https://wmzy.github.io/haze-ui/components/skeleton</loc></url>
34
+ <url><loc>https://wmzy.github.io/haze-ui/components/icon</loc></url>
35
+ <url><loc>https://wmzy.github.io/haze-ui/components/image</loc></url>
36
+ <url><loc>https://wmzy.github.io/haze-ui/components/flex</loc></url>
37
+ <url><loc>https://wmzy.github.io/haze-ui/components/breadcrumb</loc></url>
38
+ <url><loc>https://wmzy.github.io/haze-ui/components/disclosure</loc></url>
39
+ <url><loc>https://wmzy.github.io/haze-ui/components/menu</loc></url>
40
+ <url><loc>https://wmzy.github.io/haze-ui/components/number-input</loc></url>
41
+ <url><loc>https://wmzy.github.io/haze-ui/components/file-input</loc></url>
42
+ <url><loc>https://wmzy.github.io/haze-ui/components/toast</loc></url>
43
+ <url><loc>https://wmzy.github.io/haze-ui/components/list</loc></url>
44
+ <url><loc>https://wmzy.github.io/haze-ui/components/combobox</loc></url>
45
+ <url><loc>https://wmzy.github.io/haze-ui/components/table</loc></url>
46
+ <url><loc>https://wmzy.github.io/haze-ui/components/data-table</loc></url>
47
+ <url><loc>https://wmzy.github.io/haze-ui/components/carousel</loc></url>
48
+ <url><loc>https://wmzy.github.io/haze-ui/components/datepicker</loc></url>
49
+ <url><loc>https://wmzy.github.io/haze-ui/components/tree</loc></url>
50
+ <url><loc>https://wmzy.github.io/haze-ui/components/divider</loc></url>
51
+ <url><loc>https://wmzy.github.io/haze-ui/components/spinner</loc></url>
52
+ <url><loc>https://wmzy.github.io/haze-ui/components/empty</loc></url>
53
+ <url><loc>https://wmzy.github.io/haze-ui/components/result</loc></url>
54
+ <url><loc>https://wmzy.github.io/haze-ui/components/progress</loc></url>
55
+ <url><loc>https://wmzy.github.io/haze-ui/components/pagination</loc></url>
56
+ <url><loc>https://wmzy.github.io/haze-ui/components/grid</loc></url>
57
+ <url><loc>https://wmzy.github.io/haze-ui/components/drawer</loc></url>
58
+ <url><loc>https://wmzy.github.io/haze-ui/components/stepper</loc></url>
59
+ <url><loc>https://wmzy.github.io/haze-ui/components/chat-message</loc></url>
60
+ <url><loc>https://wmzy.github.io/haze-ui/components/chat-container</loc></url>
61
+ <url><loc>https://wmzy.github.io/haze-ui/components/chat-input</loc></url>
62
+ <url><loc>https://wmzy.github.io/haze-ui/components/streaming-text</loc></url>
63
+ <url><loc>https://wmzy.github.io/haze-ui/components/markdown-renderer</loc></url>
64
+ <url><loc>https://wmzy.github.io/haze-ui/components/tool-call-card</loc></url>
65
+ <url><loc>https://wmzy.github.io/haze-ui/components/thinking-indicator</loc></url>
66
+ <url><loc>https://wmzy.github.io/haze-ui/components/step-timeline</loc></url>
67
+ <url><loc>https://wmzy.github.io/haze-ui/components/approval-card</loc></url>
68
+ <url><loc>https://wmzy.github.io/haze-ui/components/token-counter</loc></url>
69
+ <url><loc>https://wmzy.github.io/haze-ui/components/model-picker</loc></url>
70
+ <url><loc>https://wmzy.github.io/haze-ui/components/conversation-list</loc></url>
71
+ <url><loc>https://wmzy.github.io/haze-ui/components/diff-viewer</loc></url>
72
+ <url><loc>https://wmzy.github.io/haze-ui/components/log-viewer</loc></url>
73
+ <url><loc>https://wmzy.github.io/haze-ui/components/async-section</loc></url>
74
+ <url><loc>https://wmzy.github.io/haze-ui/components/command</loc></url>
75
+ <url><loc>https://wmzy.github.io/haze-ui/components/resizable</loc></url>
76
+ <url><loc>https://wmzy.github.io/haze-ui/components/splitter</loc></url>
77
+ <url><loc>https://wmzy.github.io/haze-ui/components/collapsible</loc></url>
78
+ <url><loc>https://wmzy.github.io/haze-ui/components/transfer</loc></url>
79
+ <url><loc>https://wmzy.github.io/haze-ui/components/upload</loc></url>
80
+ <url><loc>https://wmzy.github.io/haze-ui/components/color-picker</loc></url>
81
+ <url><loc>https://wmzy.github.io/haze-ui/components/rating</loc></url>
82
+ <url><loc>https://wmzy.github.io/haze-ui/components/timeline</loc></url>
83
+ <url><loc>https://wmzy.github.io/haze-ui/components/typography</loc></url>
84
+ <url><loc>https://wmzy.github.io/haze-ui/components/ellipsis</loc></url>
85
+ <url><loc>https://wmzy.github.io/haze-ui/components/count-up</loc></url>
86
+ <url><loc>https://wmzy.github.io/haze-ui/components/countdown</loc></url>
87
+ <url><loc>https://wmzy.github.io/haze-ui/components/sparkline</loc></url>
88
+ <url><loc>https://wmzy.github.io/haze-ui/components/stat</loc></url>
89
+ <url><loc>https://wmzy.github.io/haze-ui/components/segmented</loc></url>
90
+ <url><loc>https://wmzy.github.io/haze-ui/components/chip</loc></url>
91
+ <url><loc>https://wmzy.github.io/haze-ui/components/scroll-area</loc></url>
92
+ <url><loc>https://wmzy.github.io/haze-ui/components/time-picker</loc></url>
93
+ <url><loc>https://wmzy.github.io/haze-ui/components/date-range-picker</loc></url>
94
+ <url><loc>https://wmzy.github.io/haze-ui/components/otp-input</loc></url>
95
+ <url><loc>https://wmzy.github.io/haze-ui/components/password-input</loc></url>
96
+ <url><loc>https://wmzy.github.io/haze-ui/components/tag-input</loc></url>
97
+ <url><loc>https://wmzy.github.io/haze-ui/components/mentions</loc></url>
98
+ <url><loc>https://wmzy.github.io/haze-ui/components/prompt-input</loc></url>
99
+ <url><loc>https://wmzy.github.io/haze-ui/components/inline-edit</loc></url>
100
+ <url><loc>https://wmzy.github.io/haze-ui/components/dropdown-menu</loc></url>
101
+ <url><loc>https://wmzy.github.io/haze-ui/components/context-menu</loc></url>
102
+ <url><loc>https://wmzy.github.io/haze-ui/components/navigation-bar</loc></url>
103
+ <url><loc>https://wmzy.github.io/haze-ui/components/back-to-top</loc></url>
104
+ <url><loc>https://wmzy.github.io/haze-ui/components/affix</loc></url>
105
+ <url><loc>https://wmzy.github.io/haze-ui/components/container</loc></url>
106
+ <url><loc>https://wmzy.github.io/haze-ui/components/banner</loc></url>
107
+ <url><loc>https://wmzy.github.io/haze-ui/components/confirm-dialog</loc></url>
108
+ <url><loc>https://wmzy.github.io/haze-ui/components/code-block</loc></url>
109
+ <url><loc>https://wmzy.github.io/haze-ui/components/aspect-ratio</loc></url>
110
+ <url><loc>https://wmzy.github.io/haze-ui/components/virtual-list</loc></url>
111
+ <url><loc>https://wmzy.github.io/haze-ui/components/tag-group</loc></url>
112
+ <url><loc>https://wmzy.github.io/haze-ui/components/bottom-sheet</loc></url>
113
+ <url><loc>https://wmzy.github.io/haze-ui/components/swipe-action</loc></url>
114
+ <url><loc>https://wmzy.github.io/haze-ui/components/descriptions</loc></url>
115
+ <url><loc>https://wmzy.github.io/haze-ui/components/json-view</loc></url>
116
+ <url><loc>https://wmzy.github.io/haze-ui/components/qr-code</loc></url>
117
+ <url><loc>https://wmzy.github.io/haze-ui/components/sources</loc></url>
118
+ <url><loc>https://wmzy.github.io/haze-ui/components/file-preview</loc></url>
119
+ <url><loc>https://wmzy.github.io/haze-ui/components/inline-completion</loc></url>
120
+ <url><loc>https://wmzy.github.io/haze-ui/components/float-button</loc></url>
121
+ <url><loc>https://wmzy.github.io/haze-ui/components/masonry</loc></url>
122
+ <url><loc>https://wmzy.github.io/haze-ui/components/signature</loc></url>
123
+ <url><loc>https://wmzy.github.io/haze-ui/components/image-crop</loc></url>
124
+ <url><loc>https://wmzy.github.io/haze-ui/components/kbd</loc></url>
125
+ <url><loc>https://wmzy.github.io/haze-ui/components/avatar-group</loc></url>
126
+ <url><loc>https://wmzy.github.io/haze-ui/components/calendar</loc></url>
127
+ <url><loc>https://wmzy.github.io/haze-ui/components/hover-card</loc></url>
128
+ <url><loc>https://wmzy.github.io/haze-ui/components/toolbar</loc></url>
129
+ <url><loc>https://wmzy.github.io/haze-ui/components/cascader</loc></url>
130
+ <url><loc>https://wmzy.github.io/haze-ui/components/tree-select</loc></url>
131
+ <url><loc>https://wmzy.github.io/haze-ui/components/sidebar</loc></url>
132
+ <url><loc>https://wmzy.github.io/haze-ui/components/tour</loc></url>
133
+ <url><loc>https://wmzy.github.io/haze-ui/components/anchor</loc></url>
134
+ <url><loc>https://wmzy.github.io/haze-ui/components/watermark</loc></url>
135
+ <url><loc>https://wmzy.github.io/haze-ui/components/fullscreen</loc></url>
136
+ <url><loc>https://wmzy.github.io/haze-ui/components/locale-provider</loc></url>
137
+ <url><loc>https://wmzy.github.io/haze-ui/components/config-provider</loc></url>
138
+ <url><loc>https://wmzy.github.io/haze-ui/components/toggle</loc></url>
139
+ <url><loc>https://wmzy.github.io/haze-ui/components/app-shell</loc></url>
140
+ <url><loc>https://wmzy.github.io/haze-ui/components/activity-rail</loc></url>
141
+ <url><loc>https://wmzy.github.io/haze-ui/components/status-bar</loc></url>
142
+ <url><loc>https://wmzy.github.io/haze-ui/components/tab-bar</loc></url>
143
+ <url><loc>https://wmzy.github.io/haze-ui/components/workbench</loc></url>
144
+ <url><loc>https://wmzy.github.io/haze-ui/components/chart</loc></url>
145
+ <url><loc>https://wmzy.github.io/haze-ui/components/form</loc></url>
146
+ <url><loc>https://wmzy.github.io/haze-ui/components/mark</loc></url>
147
+ <url><loc>https://wmzy.github.io/haze-ui/components/highlight</loc></url>
148
+ <url><loc>https://wmzy.github.io/haze-ui/components/number-formatter</loc></url>
149
+ <url><loc>https://wmzy.github.io/haze-ui/components/fieldset</loc></url>
150
+ <url><loc>https://wmzy.github.io/haze-ui/components/loading-overlay</loc></url>
151
+ <url><loc>https://wmzy.github.io/haze-ui/components/indicator</loc></url>
152
+ <url><loc>https://wmzy.github.io/haze-ui/components/spoiler</loc></url>
153
+ <url><loc>https://wmzy.github.io/haze-ui/components/visually-hidden</loc></url>
154
+ <url><loc>https://wmzy.github.io/haze-ui/components/date-time-picker</loc></url>
155
+ <url><loc>https://wmzy.github.io/haze-ui/ai-showcase</loc></url>
156
+ <url><loc>https://wmzy.github.io/haze-ui/theme-editor</loc></url>
157
+ <url><loc>https://wmzy.github.io/haze-ui/changelog</loc></url>
158
+ <url><loc>https://wmzy.github.io/haze-ui/help</loc></url>
159
+ <url><loc>https://wmzy.github.io/haze-ui/about</loc></url>
160
+ </urlset>
@@ -48,7 +48,8 @@ type HazeConfig = {
48
48
  openDelay?: number;
49
49
  /**
50
50
  * Grace period in ms after the pointer leaves before the card
51
- * closes — the travel window into the panel (120).
51
+ * closes — the travel window into the panel (120; 300 when the
52
+ * card renders `interactive`).
52
53
  */
53
54
  closeDelay?: number;
54
55
  };