@sakaniui/react 0.14.2 → 0.15.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 (58) hide show
  1. package/AGENTS.md +12 -2
  2. package/CHANGELOG.md +31 -2
  3. package/dist/{TopBar-5h0LblO6.js → TopBar-BIBDb_-Y.js} +2575 -1843
  4. package/dist/TopBar-BTHYgyhs.cjs +1 -0
  5. package/dist/blocks/AiChatBlock/AiChatBlock.d.ts +6 -0
  6. package/dist/blocks/AiChatBlock/index.d.ts +2 -0
  7. package/dist/blocks/AiChatBlock/parts/AiSidebar.d.ts +44 -0
  8. package/dist/blocks/AiChatBlock/parts/ComposerOptions.d.ts +9 -0
  9. package/dist/blocks/AiWelcomeBlock/AiWelcomeBlock.d.ts +12 -0
  10. package/dist/blocks/AiWelcomeBlock/index.d.ts +2 -0
  11. package/dist/blocks/index.d.ts +4 -0
  12. package/dist/blocks.cjs +2 -2
  13. package/dist/blocks.mjs +2704 -2174
  14. package/dist/building-warehouse-DclrayB9.cjs +1 -0
  15. package/dist/{building-warehouse-_n8EvYUt.js → building-warehouse-LeVw9LPU.js} +48 -42
  16. package/dist/components/AiMessage/AiMessage.d.ts +17 -0
  17. package/dist/components/AiMessage/index.d.ts +2 -0
  18. package/dist/components/AttachmentChip/AttachmentChip.d.ts +17 -0
  19. package/dist/components/AttachmentChip/index.d.ts +2 -0
  20. package/dist/components/ChatOrb/ChatOrb.d.ts +21 -0
  21. package/dist/components/ChatOrb/index.d.ts +2 -0
  22. package/dist/components/Input/Input.d.ts +1 -1
  23. package/dist/components/PromptComposer/PromptComposer.d.ts +34 -0
  24. package/dist/components/PromptComposer/index.d.ts +2 -0
  25. package/dist/components/ReasoningTrace/ReasoningTrace.d.ts +17 -0
  26. package/dist/components/ReasoningTrace/index.d.ts +2 -0
  27. package/dist/components/SuggestionChip/SuggestionChip.d.ts +16 -0
  28. package/dist/components/SuggestionChip/index.d.ts +2 -0
  29. package/dist/components/Textarea/Textarea.d.ts +1 -1
  30. package/dist/components/ThinkingLoader/ThinkingLoader.d.ts +8 -0
  31. package/dist/components/ThinkingLoader/index.d.ts +2 -0
  32. package/dist/components/ToolCall/ToolCall.d.ts +21 -0
  33. package/dist/components/ToolCall/index.d.ts +2 -0
  34. package/dist/current-location-D6hMSldS.cjs +1 -0
  35. package/dist/current-location-xo8zXAPZ.js +40 -0
  36. package/dist/emoji-index.json +1 -1
  37. package/dist/help-circle-BKFYrUSW.cjs +1 -0
  38. package/dist/help-circle-D7EwSQUH.js +123 -0
  39. package/dist/icon-index.json +1 -1
  40. package/dist/icons.cjs +1 -1
  41. package/dist/icons.mjs +3927 -3954
  42. package/dist/index.cjs +1 -1
  43. package/dist/index.d.ts +8 -0
  44. package/dist/index.mjs +2209 -2186
  45. package/dist/lib/AiGlow.d.ts +3 -2
  46. package/dist/lib/EmberRing.d.ts +6 -0
  47. package/dist/lib/LiquidGlass.d.ts +1 -1
  48. package/dist/lib/RayLoader.d.ts +8 -0
  49. package/dist/manifest.json +737 -44
  50. package/dist/style.css +1 -1
  51. package/dist/tokens.css +17 -0
  52. package/package.json +1 -1
  53. package/dist/TopBar-D50mmITH.cjs +0 -1
  54. package/dist/building-warehouse-BUtjAEPH.cjs +0 -1
  55. package/dist/help-circle-qEEVeIea.js +0 -99
  56. package/dist/help-circle-rtL4juBJ.cjs +0 -1
  57. package/dist/logout-BLSXL3qV.js +0 -43
  58. package/dist/logout-pQUABnfO.cjs +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 6,
3
3
  "name": "@sakaniui/react",
4
- "version": "0.14.2",
4
+ "version": "0.15.0",
5
5
  "description": "Machine-readable contract of the SakaniUI React library, generated from its TypeScript source.",
6
6
  "docs": "https://www.sakaniui.com",
7
7
  "guide": "https://www.sakaniui.com/llms-full.txt",
@@ -24,7 +24,7 @@
24
24
  "@sakaniui/react/emoji": "Fluent Emoji (full colour): EmojiName, one module each (1594 emoji, 311 with skin tones)."
25
25
  },
26
26
  "conventions": {
27
- "version": "This manifest describes @sakaniui/react@0.14.2. Each component has `since`, the first release that contained it; a prop added later has its own `since`, and a value added later is listed in the prop's `valuesSince`. If the project has an older version installed, anything newer than that does not exist there.",
27
+ "version": "This manifest describes @sakaniui/react@0.15.0. Each component has `since`, the first release that contained it; a prop added later has its own `since`, and a value added later is listed in the prop's `valuesSince`. If the project has an older version installed, anything newer than that does not exist there.",
28
28
  "acceptsNativeProps": "Components forward native HTML attributes (className, style, aria-*, event handlers) to their root element unless a prop says otherwise; only the props that are specific to SakaniUI are listed here.",
29
29
  "accessibleName": "When `contract.requiresAccessibleName` is true, a required prop (aria-label, aria-labelledby or an alt text) is the only thing that names the control or image. Do not omit it.",
30
30
  "tokens": "Use only the token names listed under `tokens`. Colour tokens follow the theme (the `.dark` class flips them); do not hard-code colours.",
@@ -195,7 +195,7 @@
195
195
  "wrap"
196
196
  ],
197
197
  "tokens": {
198
- "count": 235,
198
+ "count": 243,
199
199
  "groups": {
200
200
  "bp": {
201
201
  "--bp-sm": "640px",
@@ -405,6 +405,16 @@
405
405
  "--transition-slow": "var(--motion-slow) var(--ease-in-out)",
406
406
  "--transition-hover": "var(--motion-slow) var(--ease-out)"
407
407
  },
408
+ "ai": {
409
+ "--ai-ember-0": "var(--color-blue-700)",
410
+ "--ai-ember-1": "var(--color-violet-500)",
411
+ "--ai-ember-2": "color-mix(in srgb, var(--color-danger-500) 55%, var(--color-violet-500))",
412
+ "--ai-ember-3": "var(--color-danger-500)",
413
+ "--ai-ember-4": "var(--color-primary-500)",
414
+ "--ai-ember-5": "var(--color-warning-500)",
415
+ "--ai-ember-6": "var(--color-warning-300)",
416
+ "--ai-ember-gradient": "linear-gradient(90deg, var(--ai-ember-0), var(--ai-ember-1), var(--ai-ember-2), var(--ai-ember-3), var(--ai-ember-4), var(--ai-ember-5), var(--ai-ember-6))"
417
+ },
408
418
  "glass": {
409
419
  "--glass-bg": "rgba(255, 255, 255, 0.64)",
410
420
  "--glass-bg-overlay": "rgba(255, 255, 255, 0.76)",
@@ -463,8 +473,8 @@
463
473
  }
464
474
  },
465
475
  "counts": {
466
- "components": 142,
467
- "blocks": 42,
476
+ "components": 150,
477
+ "blocks": 44,
468
478
  "utilities": 10
469
479
  },
470
480
  "components": [
@@ -631,6 +641,81 @@
631
641
  "since": "0.1.0",
632
642
  "example": "import { ActivityFeedHighlight } from '@sakaniui/react';\n\n<ActivityFeedHighlight>Label</ActivityFeedHighlight>"
633
643
  },
644
+ {
645
+ "name": "AiMessage",
646
+ "kind": "component",
647
+ "category": "AI",
648
+ "import": "@sakaniui/react",
649
+ "summary": "One turn of an AI conversation.",
650
+ "props": [
651
+ {
652
+ "name": "role",
653
+ "type": "\"assistant\" | \"user\"",
654
+ "required": false,
655
+ "values": [
656
+ "assistant",
657
+ "user"
658
+ ],
659
+ "default": "assistant"
660
+ },
661
+ {
662
+ "name": "streaming",
663
+ "type": "boolean",
664
+ "required": false,
665
+ "description": "Assistant only: the reply is still arriving."
666
+ },
667
+ {
668
+ "name": "children",
669
+ "type": "ReactNode",
670
+ "required": false,
671
+ "description": "The text."
672
+ },
673
+ {
674
+ "name": "actions",
675
+ "type": "ReactNode",
676
+ "required": false,
677
+ "default": true,
678
+ "description": "Assistant only. `false` leaves the row out; a node replaces it. Default: the four built-in actions."
679
+ },
680
+ {
681
+ "name": "onCopy",
682
+ "type": "(() => void)",
683
+ "required": false
684
+ },
685
+ {
686
+ "name": "onRegenerate",
687
+ "type": "(() => void)",
688
+ "required": false
689
+ },
690
+ {
691
+ "name": "onFeedback",
692
+ "type": "((value: \"up\" | \"down\") => void)",
693
+ "required": false
694
+ },
695
+ {
696
+ "name": "className",
697
+ "type": "string",
698
+ "required": false
699
+ }
700
+ ],
701
+ "contract": {
702
+ "requiredProps": [],
703
+ "requiresAccessibleName": false
704
+ },
705
+ "since": "0.15.0",
706
+ "example": "import { AiMessage } from '@sakaniui/react';\n\n<AiMessage />",
707
+ "aliases": [
708
+ "ai chat message",
709
+ "chat message",
710
+ "assistant message",
711
+ "user message",
712
+ "chatgpt message",
713
+ "llm reply",
714
+ "ai reply",
715
+ "message actions",
716
+ "copy regenerate feedback"
717
+ ]
718
+ },
634
719
  {
635
720
  "name": "Alert",
636
721
  "kind": "component",
@@ -838,6 +923,78 @@
838
923
  "since": "0.1.0",
839
924
  "example": "import { AreaChart } from '@sakaniui/react';\n\n<AreaChart data={[{ label: \"Label\", value: 50 }]} />"
840
925
  },
926
+ {
927
+ "name": "AttachmentChip",
928
+ "kind": "component",
929
+ "category": "AI",
930
+ "import": "@sakaniui/react",
931
+ "summary": "A file or image attached to a prompt.",
932
+ "props": [
933
+ {
934
+ "name": "type",
935
+ "type": "\"file\" | \"image\" | \"uploading\" | \"error\"",
936
+ "required": false,
937
+ "values": [
938
+ "file",
939
+ "image",
940
+ "uploading",
941
+ "error"
942
+ ],
943
+ "default": "file"
944
+ },
945
+ {
946
+ "name": "name",
947
+ "type": "string",
948
+ "required": true
949
+ },
950
+ {
951
+ "name": "meta",
952
+ "type": "string",
953
+ "required": false,
954
+ "description": "The second line: \"PDF · 2.4 MB\". Uploading and error replace it with their own text unless you pass one."
955
+ },
956
+ {
957
+ "name": "preview",
958
+ "type": "string",
959
+ "required": false,
960
+ "description": "Image thumbnail URL (type=\"image\")."
961
+ },
962
+ {
963
+ "name": "progress",
964
+ "type": "number",
965
+ "required": false,
966
+ "default": 0,
967
+ "description": "0-100 (type=\"uploading\")."
968
+ },
969
+ {
970
+ "name": "onRemove",
971
+ "type": "(() => void)",
972
+ "required": false,
973
+ "description": "Shows the x."
974
+ },
975
+ {
976
+ "name": "className",
977
+ "type": "string",
978
+ "required": false
979
+ }
980
+ ],
981
+ "contract": {
982
+ "requiredProps": [
983
+ "name"
984
+ ],
985
+ "requiresAccessibleName": false
986
+ },
987
+ "since": "0.15.0",
988
+ "example": "import { AttachmentChip } from '@sakaniui/react';\n\n<AttachmentChip name=\"Name\" />",
989
+ "aliases": [
990
+ "file chip",
991
+ "attached file",
992
+ "upload chip",
993
+ "file attachment",
994
+ "image attachment",
995
+ "upload progress chip"
996
+ ]
997
+ },
841
998
  {
842
999
  "name": "Avatar",
843
1000
  "kind": "component",
@@ -2268,7 +2425,6 @@
2268
2425
  "aliases": [
2269
2426
  "thought chain",
2270
2427
  "reasoning steps",
2271
- "reasoning trace",
2272
2428
  "agent steps",
2273
2429
  "agent activity",
2274
2430
  "agent trace",
@@ -2367,7 +2523,6 @@
2367
2523
  "reasoning step",
2368
2524
  "thought step",
2369
2525
  "agent step",
2370
- "tool call",
2371
2526
  "search step",
2372
2527
  "task step"
2373
2528
  ]
@@ -2381,13 +2536,13 @@
2381
2536
  "props": [
2382
2537
  {
2383
2538
  "name": "state",
2384
- "type": "\"default\" | \"disabled\" | \"typing\" | \"uploading\"",
2539
+ "type": "\"default\" | \"uploading\" | \"disabled\" | \"typing\"",
2385
2540
  "required": false,
2386
2541
  "values": [
2387
2542
  "default",
2543
+ "uploading",
2388
2544
  "disabled",
2389
- "typing",
2390
- "uploading"
2545
+ "typing"
2391
2546
  ],
2392
2547
  "default": "default"
2393
2548
  },
@@ -2447,6 +2602,79 @@
2447
2602
  "composer"
2448
2603
  ]
2449
2604
  },
2605
+ {
2606
+ "name": "ChatOrb",
2607
+ "kind": "component",
2608
+ "category": "AI",
2609
+ "import": "@sakaniui/react",
2610
+ "summary": "The AI's face: a soft white sphere with two black eyes. It is the assistant avatar in AiMessage and can stand alone as a chat launcher or greeter.",
2611
+ "props": [
2612
+ {
2613
+ "name": "size",
2614
+ "type": "number",
2615
+ "required": false,
2616
+ "default": 28,
2617
+ "description": "Diameter in px. Default 28 (the AiMessage avatar)."
2618
+ },
2619
+ {
2620
+ "name": "look",
2621
+ "type": "boolean",
2622
+ "required": false,
2623
+ "default": true,
2624
+ "description": "The eyes follow the pointer. Default true."
2625
+ },
2626
+ {
2627
+ "name": "blink",
2628
+ "type": "boolean",
2629
+ "required": false,
2630
+ "default": true,
2631
+ "description": "The eyes blink now and then. Default true."
2632
+ },
2633
+ {
2634
+ "name": "thinking",
2635
+ "type": "boolean",
2636
+ "required": false,
2637
+ "default": false,
2638
+ "description": "The AI is thinking: the eyes sweep side to side instead of following the pointer."
2639
+ },
2640
+ {
2641
+ "name": "glance",
2642
+ "type": "boolean",
2643
+ "required": false,
2644
+ "default": false,
2645
+ "description": "The response has arrived: glance toward the text (to the right) for 1.4s, then look straight. Fires each time it turns true."
2646
+ },
2647
+ {
2648
+ "name": "squintOnHover",
2649
+ "type": "boolean",
2650
+ "required": false,
2651
+ "default": true,
2652
+ "description": "The eyes squint while the pointer is over the orb. Default true."
2653
+ },
2654
+ {
2655
+ "name": "label",
2656
+ "type": "string",
2657
+ "required": false,
2658
+ "description": "Accessible name. Omit for a decorative orb."
2659
+ },
2660
+ {
2661
+ "name": "className",
2662
+ "type": "string",
2663
+ "required": false
2664
+ },
2665
+ {
2666
+ "name": "style",
2667
+ "type": "CSSProperties",
2668
+ "required": false
2669
+ }
2670
+ ],
2671
+ "contract": {
2672
+ "requiredProps": [],
2673
+ "requiresAccessibleName": false
2674
+ },
2675
+ "since": "0.15.0",
2676
+ "example": "import { ChatOrb } from '@sakaniui/react';\n\n<ChatOrb />"
2677
+ },
2450
2678
  {
2451
2679
  "name": "Checkbox",
2452
2680
  "kind": "component",
@@ -2870,12 +3098,12 @@
2870
3098
  },
2871
3099
  {
2872
3100
  "name": "state",
2873
- "type": "\"loading\" | \"ready\" | \"error\"",
3101
+ "type": "\"error\" | \"loading\" | \"ready\"",
2874
3102
  "required": false,
2875
3103
  "values": [
3104
+ "error",
2876
3105
  "loading",
2877
- "ready",
2878
- "error"
3106
+ "ready"
2879
3107
  ],
2880
3108
  "default": "ready",
2881
3109
  "description": "\"loading\" shows skeleton rows, \"error\" the error message."
@@ -4243,15 +4471,16 @@
4243
4471
  },
4244
4472
  {
4245
4473
  "name": "glow",
4246
- "type": "\"off\" | \"pulse\" | \"focus\"",
4474
+ "type": "\"off\" | \"once\" | \"pulse\" | \"focus\"",
4247
4475
  "required": false,
4248
4476
  "values": [
4249
4477
  "off",
4478
+ "once",
4250
4479
  "pulse",
4251
4480
  "focus"
4252
4481
  ],
4253
- "default": "pulse",
4254
- "description": "variant=\"ai\": the light that sweeps clockwise around the border. \"pulse\" (default) sweeps every 2.5s while idle and once each time the field takes focus; \"focus\" sweeps only on focus; \"off\" draws none. Reduced motion draws none.",
4482
+ "default": "once",
4483
+ "description": "variant=\"ai\": the light that sweeps clockwise around the border. \"once\" (default) sweeps one lap shortly after it appears and then stays still, focused or not; \"pulse\" sweeps every 2.5s while idle and once each time the field takes focus; \"focus\" sweeps only on focus; \"off\" draws none. Reduced motion draws none.",
4255
4484
  "since": "0.14.0"
4256
4485
  },
4257
4486
  {
@@ -4694,8 +4923,7 @@
4694
4923
  "ignore"
4695
4924
  ],
4696
4925
  "default": "respect",
4697
- "description": "'respect' (default): with prefers-reduced-transparency the glass becomes a plain opaque surface. 'ignore': keep the full glass anyway. Only for a decorative showcase that means nothing without it; never for a surface that holds the user's content.",
4698
- "since": "0.14.2"
4926
+ "description": "'respect' (default): with prefers-reduced-transparency the glass becomes a plain opaque surface. 'ignore': keep the full glass anyway. Only for a decorative showcase that means nothing without it; never for a surface that holds the user's content."
4699
4927
  }
4700
4928
  ],
4701
4929
  "contract": {
@@ -5062,13 +5290,13 @@
5062
5290
  "description": "Returns the item located at the specified index."
5063
5291
  },
5064
5292
  {
5065
- "name": "__@iterator@15641",
5293
+ "name": "__@iterator@16335",
5066
5294
  "type": "() => ArrayIterator<number>",
5067
5295
  "required": true,
5068
5296
  "description": "Iterator"
5069
5297
  },
5070
5298
  {
5071
- "name": "__@unscopables@15671",
5299
+ "name": "__@unscopables@16365",
5072
5300
  "type": "{ [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; }",
5073
5301
  "required": true,
5074
5302
  "description": "Is an object whose properties have the value 'true' when they will be absent when used in a 'with' statement."
@@ -5644,13 +5872,13 @@
5644
5872
  "description": "Returns the item located at the specified index."
5645
5873
  },
5646
5874
  {
5647
- "name": "__@iterator@15641",
5875
+ "name": "__@iterator@16335",
5648
5876
  "type": "() => ArrayIterator<number>",
5649
5877
  "required": true,
5650
5878
  "description": "Iterator"
5651
5879
  },
5652
5880
  {
5653
- "name": "__@unscopables@15671",
5881
+ "name": "__@unscopables@16365",
5654
5882
  "type": "{ [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; }",
5655
5883
  "required": true,
5656
5884
  "description": "Is an object whose properties have the value 'true' when they will be absent when used in a 'with' statement."
@@ -6034,13 +6262,13 @@
6034
6262
  "description": "Returns the item located at the specified index."
6035
6263
  },
6036
6264
  {
6037
- "name": "__@iterator@15641",
6265
+ "name": "__@iterator@16335",
6038
6266
  "type": "() => ArrayIterator<number>",
6039
6267
  "required": true,
6040
6268
  "description": "Iterator"
6041
6269
  },
6042
6270
  {
6043
- "name": "__@unscopables@15671",
6271
+ "name": "__@unscopables@16365",
6044
6272
  "type": "{ [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; }",
6045
6273
  "required": true,
6046
6274
  "description": "Is an object whose properties have the value 'true' when they will be absent when used in a 'with' statement."
@@ -6341,13 +6569,13 @@
6341
6569
  "description": "Returns the item located at the specified index."
6342
6570
  },
6343
6571
  {
6344
- "name": "__@iterator@15641",
6572
+ "name": "__@iterator@16335",
6345
6573
  "type": "() => ArrayIterator<number>",
6346
6574
  "required": true,
6347
6575
  "description": "Iterator"
6348
6576
  },
6349
6577
  {
6350
- "name": "__@unscopables@15671",
6578
+ "name": "__@unscopables@16365",
6351
6579
  "type": "{ [x: number]: boolean | undefined; length?: boolean | undefined; toString?: boolean | undefined; toLocaleString?: boolean | undefined; pop?: boolean | undefined; push?: boolean | undefined; concat?: boolean | undefined; join?: boolean | undefined; reverse?: boolean | undefined; shift?: boolean | undefined; slice?: boolean | undefined; sort?: boolean | undefined; splice?: boolean | undefined; unshift?: boolean | undefined; indexOf?: boolean | undefined; lastIndexOf?: boolean | undefined; every?: boolean | undefined; some?: boolean | undefined; forEach?: boolean | undefined; map?: boolean | undefined; filter?: boolean | undefined; reduce?: boolean | undefined; reduceRight?: boolean | undefined; find?: boolean | undefined; findIndex?: boolean | undefined; fill?: boolean | undefined; copyWithin?: boolean | undefined; entries?: boolean | undefined; keys?: boolean | undefined; values?: boolean | undefined; includes?: boolean | undefined; flatMap?: boolean | undefined; flat?: boolean | undefined; at?: boolean | undefined; [Symbol.iterator]?: boolean | undefined; readonly [Symbol.unscopables]?: boolean | undefined; }",
6352
6580
  "required": true,
6353
6581
  "description": "Is an object whose properties have the value 'true' when they will be absent when used in a 'with' statement."
@@ -6581,12 +6809,12 @@
6581
6809
  },
6582
6810
  {
6583
6811
  "name": "content",
6584
- "type": "\"text\" | \"file\" | \"image\"",
6812
+ "type": "\"file\" | \"image\" | \"text\"",
6585
6813
  "required": false,
6586
6814
  "values": [
6587
- "text",
6588
6815
  "file",
6589
- "image"
6816
+ "image",
6817
+ "text"
6590
6818
  ],
6591
6819
  "default": "text"
6592
6820
  },
@@ -7739,6 +7967,143 @@
7739
7967
  "since": "0.1.0",
7740
7968
  "example": "import { ProgressStat } from '@sakaniui/react';\n\n<ProgressStat label=\"Label\" value=\"Value\" progress={50} />"
7741
7969
  },
7970
+ {
7971
+ "name": "PromptComposer",
7972
+ "kind": "component",
7973
+ "category": "AI",
7974
+ "import": "@sakaniui/react",
7975
+ "summary": "The prompt box of an AI product.",
7976
+ "props": [
7977
+ {
7978
+ "name": "value",
7979
+ "type": "string",
7980
+ "required": false
7981
+ },
7982
+ {
7983
+ "name": "defaultValue",
7984
+ "type": "string",
7985
+ "required": false,
7986
+ "default": ""
7987
+ },
7988
+ {
7989
+ "name": "onValueChange",
7990
+ "type": "((value: string) => void)",
7991
+ "required": false
7992
+ },
7993
+ {
7994
+ "name": "placeholder",
7995
+ "type": "string",
7996
+ "required": false,
7997
+ "default": "Ask anything, or type / for skills"
7998
+ },
7999
+ {
8000
+ "name": "status",
8001
+ "type": "\"idle\" | \"streaming\"",
8002
+ "required": false,
8003
+ "values": [
8004
+ "idle",
8005
+ "streaming"
8006
+ ],
8007
+ "default": "idle",
8008
+ "description": "While `streaming`, send becomes Stop."
8009
+ },
8010
+ {
8011
+ "name": "onSubmit",
8012
+ "type": "((value: string) => void)",
8013
+ "required": false,
8014
+ "description": "Enter, or the send button. Receives the trimmed text."
8015
+ },
8016
+ {
8017
+ "name": "onStop",
8018
+ "type": "(() => void)",
8019
+ "required": false
8020
+ },
8021
+ {
8022
+ "name": "onAttach",
8023
+ "type": "(() => void)",
8024
+ "required": false,
8025
+ "description": "The + button. Hidden when there is no handler and `attachments` is unset... pass `onAttach` to show it."
8026
+ },
8027
+ {
8028
+ "name": "onVoice",
8029
+ "type": "(() => void)",
8030
+ "required": false,
8031
+ "description": "The mic. Hidden when there is no handler."
8032
+ },
8033
+ {
8034
+ "name": "attachments",
8035
+ "type": "ReactNode",
8036
+ "required": false,
8037
+ "description": "Chips above the field, usually AttachmentChip."
8038
+ },
8039
+ {
8040
+ "name": "actions",
8041
+ "type": "ReactNode",
8042
+ "required": false,
8043
+ "description": "Extra controls on the left, after the +."
8044
+ },
8045
+ {
8046
+ "name": "maxRows",
8047
+ "type": "number",
8048
+ "required": false,
8049
+ "default": 8,
8050
+ "description": "The most lines the field grows to before it scrolls. Default 8."
8051
+ },
8052
+ {
8053
+ "name": "glow",
8054
+ "type": "\"off\" | \"once\" | \"pulse\" | \"focus\"",
8055
+ "required": false,
8056
+ "values": [
8057
+ "off",
8058
+ "once",
8059
+ "pulse",
8060
+ "focus"
8061
+ ],
8062
+ "default": "once",
8063
+ "description": "The ember light round the border (Textarea variant=\"ai\"'s): `once` (default) one lap shortly after it appears, then still; `pulse` every 2.5s while idle; `focus` one lap each time it gains focus; `off` none."
8064
+ },
8065
+ {
8066
+ "name": "disabled",
8067
+ "type": "boolean",
8068
+ "required": false
8069
+ },
8070
+ {
8071
+ "name": "autoFocus",
8072
+ "type": "boolean",
8073
+ "required": false,
8074
+ "description": "Focus the field on mount."
8075
+ },
8076
+ {
8077
+ "name": "aria-label",
8078
+ "type": "string",
8079
+ "required": false,
8080
+ "default": "Message",
8081
+ "description": "Accessible name of the field."
8082
+ },
8083
+ {
8084
+ "name": "className",
8085
+ "type": "string",
8086
+ "required": false
8087
+ }
8088
+ ],
8089
+ "contract": {
8090
+ "requiredProps": [],
8091
+ "requiresAccessibleName": false
8092
+ },
8093
+ "since": "0.15.0",
8094
+ "example": "import { PromptComposer } from '@sakaniui/react';\n\n<PromptComposer />",
8095
+ "aliases": [
8096
+ "prompt box",
8097
+ "ai input",
8098
+ "chat input",
8099
+ "message composer",
8100
+ "ask anything",
8101
+ "ai prompt input",
8102
+ "prompt input",
8103
+ "send stop button",
8104
+ "chatgpt input"
8105
+ ]
8106
+ },
7742
8107
  {
7743
8108
  "name": "QuantitySelector",
7744
8109
  "kind": "component",
@@ -7992,6 +8357,80 @@
7992
8357
  "radio input"
7993
8358
  ]
7994
8359
  },
8360
+ {
8361
+ "name": "ReasoningTrace",
8362
+ "kind": "component",
8363
+ "category": "AI",
8364
+ "import": "@sakaniui/react",
8365
+ "summary": "The thinking panel above a reply.",
8366
+ "props": [
8367
+ {
8368
+ "name": "status",
8369
+ "type": "\"done\" | \"streaming\"",
8370
+ "required": false,
8371
+ "values": [
8372
+ "done",
8373
+ "streaming"
8374
+ ],
8375
+ "default": "done"
8376
+ },
8377
+ {
8378
+ "name": "elapsed",
8379
+ "type": "number",
8380
+ "required": false,
8381
+ "description": "Seconds. Streaming: the running time; done: the final time (\"Thought for 6s\")."
8382
+ },
8383
+ {
8384
+ "name": "summary",
8385
+ "type": "string",
8386
+ "required": false,
8387
+ "description": "One line about what it concluded, shown on the closed row."
8388
+ },
8389
+ {
8390
+ "name": "children",
8391
+ "type": "ReactNode",
8392
+ "required": false,
8393
+ "description": "The reasoning, one paragraph per child."
8394
+ },
8395
+ {
8396
+ "name": "open",
8397
+ "type": "boolean",
8398
+ "required": false
8399
+ },
8400
+ {
8401
+ "name": "defaultOpen",
8402
+ "type": "boolean",
8403
+ "required": false,
8404
+ "default": false
8405
+ },
8406
+ {
8407
+ "name": "onOpenChange",
8408
+ "type": "((open: boolean) => void)",
8409
+ "required": false
8410
+ },
8411
+ {
8412
+ "name": "className",
8413
+ "type": "string",
8414
+ "required": false
8415
+ }
8416
+ ],
8417
+ "contract": {
8418
+ "requiredProps": [],
8419
+ "requiresAccessibleName": false
8420
+ },
8421
+ "since": "0.15.0",
8422
+ "example": "import { ReasoningTrace } from '@sakaniui/react';\n\n<ReasoningTrace />",
8423
+ "aliases": [
8424
+ "thinking",
8425
+ "thinking panel",
8426
+ "reasoning",
8427
+ "thought for",
8428
+ "chain of thought summary",
8429
+ "ai thinking",
8430
+ "show thinking",
8431
+ "reasoning panel"
8432
+ ]
8433
+ },
7995
8434
  {
7996
8435
  "name": "RichSeparator",
7997
8436
  "kind": "component",
@@ -8369,12 +8808,12 @@
8369
8808
  "props": [
8370
8809
  {
8371
8810
  "name": "type",
8372
- "type": "\"user\" | \"user-menu\" | \"actions\"",
8811
+ "type": "\"user\" | \"actions\" | \"user-menu\"",
8373
8812
  "required": false,
8374
8813
  "values": [
8375
8814
  "user",
8376
- "user-menu",
8377
- "actions"
8815
+ "actions",
8816
+ "user-menu"
8378
8817
  ],
8379
8818
  "default": "user"
8380
8819
  },
@@ -9174,12 +9613,12 @@
9174
9613
  },
9175
9614
  {
9176
9615
  "name": "trend",
9177
- "type": "\"flat\" | \"up\" | \"down\"",
9616
+ "type": "\"up\" | \"down\" | \"flat\"",
9178
9617
  "required": false,
9179
9618
  "values": [
9180
- "flat",
9181
9619
  "up",
9182
- "down"
9620
+ "down",
9621
+ "flat"
9183
9622
  ],
9184
9623
  "default": "up"
9185
9624
  },
@@ -9588,6 +10027,67 @@
9588
10027
  "since": "0.3.0",
9589
10028
  "example": "import { SubFeature } from '@sakaniui/react';\n\n<SubFeature icon=\"Icon\" title=\"Title\" description=\"Description\" />"
9590
10029
  },
10030
+ {
10031
+ "name": "SuggestionChip",
10032
+ "kind": "component",
10033
+ "category": "AI",
10034
+ "import": "@sakaniui/react",
10035
+ "summary": "A suggested prompt.",
10036
+ "props": [
10037
+ {
10038
+ "name": "variant",
10039
+ "type": "\"starter\" | \"follow-up\"",
10040
+ "required": false,
10041
+ "values": [
10042
+ "starter",
10043
+ "follow-up"
10044
+ ],
10045
+ "default": "follow-up"
10046
+ },
10047
+ {
10048
+ "name": "label",
10049
+ "type": "string",
10050
+ "required": true,
10051
+ "description": "The prompt. For a starter it is the title."
10052
+ },
10053
+ {
10054
+ "name": "hint",
10055
+ "type": "string",
10056
+ "required": false,
10057
+ "description": "Starter only: a one-line hint under the title."
10058
+ },
10059
+ {
10060
+ "name": "icon",
10061
+ "type": "IconComponent",
10062
+ "required": false,
10063
+ "description": "Starter: the icon in the tile. Follow-up: defaults to an arrow."
10064
+ },
10065
+ {
10066
+ "name": "index",
10067
+ "type": "number",
10068
+ "required": false,
10069
+ "default": 0,
10070
+ "description": "Starter: its place in the row, so each rises 50ms after the one before."
10071
+ }
10072
+ ],
10073
+ "contract": {
10074
+ "requiredProps": [
10075
+ "label"
10076
+ ],
10077
+ "requiresAccessibleName": false
10078
+ },
10079
+ "since": "0.15.0",
10080
+ "example": "import { SuggestionChip } from '@sakaniui/react';\n\n<SuggestionChip label=\"Label\" />",
10081
+ "aliases": [
10082
+ "suggested prompt",
10083
+ "prompt suggestion",
10084
+ "starter prompt",
10085
+ "follow-up question",
10086
+ "follow up chip",
10087
+ "conversation starter",
10088
+ "quick reply"
10089
+ ]
10090
+ },
9591
10091
  {
9592
10092
  "name": "Switch",
9593
10093
  "kind": "component",
@@ -10030,15 +10530,16 @@
10030
10530
  },
10031
10531
  {
10032
10532
  "name": "glow",
10033
- "type": "\"off\" | \"pulse\" | \"focus\"",
10533
+ "type": "\"off\" | \"once\" | \"pulse\" | \"focus\"",
10034
10534
  "required": false,
10035
10535
  "values": [
10036
10536
  "off",
10537
+ "once",
10037
10538
  "pulse",
10038
10539
  "focus"
10039
10540
  ],
10040
- "default": "pulse",
10041
- "description": "variant=\"ai\": the light that sweeps clockwise around the border. \"pulse\" (default) sweeps every 2.5s while idle and once each time the field takes focus; \"focus\" sweeps only on focus; \"off\" draws none. Reduced motion draws none.",
10541
+ "default": "once",
10542
+ "description": "variant=\"ai\": the light that sweeps clockwise around the border. \"once\" (default) sweeps one lap shortly after it appears and then stays still, focused or not; \"pulse\" sweeps every 2.5s while idle and once each time the field takes focus; \"focus\" sweeps only on focus; \"off\" draws none. Reduced motion draws none.",
10042
10543
  "since": "0.14.0"
10043
10544
  },
10044
10545
  {
@@ -10076,6 +10577,33 @@
10076
10577
  "comment box"
10077
10578
  ]
10078
10579
  },
10580
+ {
10581
+ "name": "ThinkingLoader",
10582
+ "kind": "component",
10583
+ "category": "AI",
10584
+ "import": "@sakaniui/react",
10585
+ "summary": "The status pill of an AI that is working: a ray spinner and a label whose text shimmers, in a 1px-bordered full-radius pill.",
10586
+ "props": [
10587
+ {
10588
+ "name": "label",
10589
+ "type": "string",
10590
+ "required": false,
10591
+ "default": "Thinking",
10592
+ "description": "What it is doing. Default \"Thinking\"."
10593
+ },
10594
+ {
10595
+ "name": "className",
10596
+ "type": "string",
10597
+ "required": false
10598
+ }
10599
+ ],
10600
+ "contract": {
10601
+ "requiredProps": [],
10602
+ "requiresAccessibleName": false
10603
+ },
10604
+ "since": "0.15.0",
10605
+ "example": "import { ThinkingLoader } from '@sakaniui/react';\n\n<ThinkingLoader />"
10606
+ },
10079
10607
  {
10080
10608
  "name": "Ticker",
10081
10609
  "kind": "component",
@@ -10316,6 +10844,94 @@
10316
10844
  "toast manager"
10317
10845
  ]
10318
10846
  },
10847
+ {
10848
+ "name": "ToolCall",
10849
+ "kind": "component",
10850
+ "category": "AI",
10851
+ "import": "@sakaniui/react",
10852
+ "summary": "The row an agent leaves when it calls a tool.",
10853
+ "props": [
10854
+ {
10855
+ "name": "status",
10856
+ "type": "\"error\" | \"done\" | \"running\"",
10857
+ "required": false,
10858
+ "values": [
10859
+ "error",
10860
+ "done",
10861
+ "running"
10862
+ ],
10863
+ "default": "done"
10864
+ },
10865
+ {
10866
+ "name": "name",
10867
+ "type": "string",
10868
+ "required": true,
10869
+ "description": "The tool's name, in code: \"search_crm\"."
10870
+ },
10871
+ {
10872
+ "name": "args",
10873
+ "type": "string",
10874
+ "required": false,
10875
+ "description": "The arguments, in code, muted: `(query=\"Acme Corp\")`."
10876
+ },
10877
+ {
10878
+ "name": "duration",
10879
+ "type": "string",
10880
+ "required": false,
10881
+ "description": "\"1.2s\"."
10882
+ },
10883
+ {
10884
+ "name": "input",
10885
+ "type": "unknown",
10886
+ "required": false,
10887
+ "description": "The call's input: a string, or any value (shown as JSON)."
10888
+ },
10889
+ {
10890
+ "name": "output",
10891
+ "type": "unknown",
10892
+ "required": false,
10893
+ "description": "The call's output: a string, or any value (shown as JSON)."
10894
+ },
10895
+ {
10896
+ "name": "open",
10897
+ "type": "boolean",
10898
+ "required": false
10899
+ },
10900
+ {
10901
+ "name": "defaultOpen",
10902
+ "type": "boolean",
10903
+ "required": false,
10904
+ "default": false
10905
+ },
10906
+ {
10907
+ "name": "onOpenChange",
10908
+ "type": "((open: boolean) => void)",
10909
+ "required": false
10910
+ },
10911
+ {
10912
+ "name": "className",
10913
+ "type": "string",
10914
+ "required": false
10915
+ }
10916
+ ],
10917
+ "contract": {
10918
+ "requiredProps": [
10919
+ "name"
10920
+ ],
10921
+ "requiresAccessibleName": false
10922
+ },
10923
+ "since": "0.15.0",
10924
+ "example": "import { ToolCall } from '@sakaniui/react';\n\n<ToolCall name=\"Name\" />",
10925
+ "aliases": [
10926
+ "tool use",
10927
+ "function call",
10928
+ "agent tool call",
10929
+ "mcp tool call",
10930
+ "tool result",
10931
+ "tool input output",
10932
+ "api call row"
10933
+ ]
10934
+ },
10319
10935
  {
10320
10936
  "name": "Tooltip",
10321
10937
  "kind": "component",
@@ -10875,6 +11491,83 @@
10875
11491
  "since": "0.3.0",
10876
11492
  "example": "import { AddCardFormBlock } from '@sakaniui/react/blocks';\n\n<AddCardFormBlock />"
10877
11493
  },
11494
+ {
11495
+ "name": "AiChatBlock",
11496
+ "kind": "block",
11497
+ "category": "Blocks/AI",
11498
+ "import": "@sakaniui/react/blocks",
11499
+ "summary": "Ai Chat block (AI): a composition example. Copy it into your project and edit it.",
11500
+ "props": [
11501
+ {
11502
+ "name": "className",
11503
+ "type": "string",
11504
+ "required": false
11505
+ }
11506
+ ],
11507
+ "contract": {
11508
+ "requiredProps": [],
11509
+ "requiresAccessibleName": false
11510
+ },
11511
+ "since": "0.15.0",
11512
+ "example": "import { AiChatBlock } from '@sakaniui/react/blocks';\n\n<AiChatBlock />",
11513
+ "aliases": [
11514
+ "ai chat",
11515
+ "chatgpt layout",
11516
+ "ai assistant screen",
11517
+ "chat with ai",
11518
+ "ai conversation page",
11519
+ "copilot chat",
11520
+ "llm chat ui"
11521
+ ]
11522
+ },
11523
+ {
11524
+ "name": "AiWelcomeBlock",
11525
+ "kind": "block",
11526
+ "category": "Blocks/AI",
11527
+ "import": "@sakaniui/react/blocks",
11528
+ "summary": "Ai Welcome block (AI): a composition example. Copy it into your project and edit it.",
11529
+ "props": [
11530
+ {
11531
+ "name": "greeting",
11532
+ "type": "string",
11533
+ "required": false,
11534
+ "default": "Good afternoon",
11535
+ "description": "\"Good afternoon\"."
11536
+ },
11537
+ {
11538
+ "name": "name",
11539
+ "type": "string",
11540
+ "required": false,
11541
+ "default": "Samuel",
11542
+ "description": "Who it greets."
11543
+ },
11544
+ {
11545
+ "name": "onSubmit",
11546
+ "type": "((text: string) => void)",
11547
+ "required": false,
11548
+ "description": "Called with the prompt when the user sends."
11549
+ },
11550
+ {
11551
+ "name": "className",
11552
+ "type": "string",
11553
+ "required": false
11554
+ }
11555
+ ],
11556
+ "contract": {
11557
+ "requiredProps": [],
11558
+ "requiresAccessibleName": false
11559
+ },
11560
+ "since": "0.15.0",
11561
+ "example": "import { AiWelcomeBlock } from '@sakaniui/react/blocks';\n\n<AiWelcomeBlock />",
11562
+ "aliases": [
11563
+ "ai welcome",
11564
+ "ai home",
11565
+ "ai empty state",
11566
+ "ask anything screen",
11567
+ "ai landing screen",
11568
+ "good afternoon greeting"
11569
+ ]
11570
+ },
10878
11571
  {
10879
11572
  "name": "AppHeaderBlock",
10880
11573
  "kind": "block",
@@ -11715,13 +12408,13 @@
11715
12408
  "props": [
11716
12409
  {
11717
12410
  "name": "state",
11718
- "type": "\"default\" | \"empty\" | \"loading\" | \"error\" | \"filtered\" | \"bulk\"",
12411
+ "type": "\"default\" | \"error\" | \"empty\" | \"loading\" | \"filtered\" | \"bulk\"",
11719
12412
  "required": false,
11720
12413
  "values": [
11721
12414
  "default",
12415
+ "error",
11722
12416
  "empty",
11723
12417
  "loading",
11724
- "error",
11725
12418
  "filtered",
11726
12419
  "bulk"
11727
12420
  ],
@@ -13633,22 +14326,22 @@
13633
14326
  "description": "Unique key for the grid -- defaults to `name` if omitted."
13634
14327
  },
13635
14328
  {
13636
- "name": "location",
14329
+ "name": "image",
13637
14330
  "type": "string",
13638
14331
  "required": true
13639
14332
  },
13640
14333
  {
13641
- "name": "name",
14334
+ "name": "location",
13642
14335
  "type": "string",
13643
14336
  "required": true
13644
14337
  },
13645
14338
  {
13646
- "name": "role",
14339
+ "name": "name",
13647
14340
  "type": "string",
13648
14341
  "required": true
13649
14342
  },
13650
14343
  {
13651
- "name": "image",
14344
+ "name": "role",
13652
14345
  "type": "string",
13653
14346
  "required": true
13654
14347
  },