@treeui/mcp 0.1.1 → 0.3.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.
package/dist/cli.cjs CHANGED
@@ -34,9 +34,9 @@ var import_server = require("@modelcontextprotocol/sdk/server/index.js");
34
34
 
35
35
  // src/generated/treeui.catalog.json
36
36
  var treeui_catalog_default = {
37
- generatedAt: "2026-04-10T16:42:52.904Z",
37
+ generatedAt: "2026-07-15T22:47:49.302Z",
38
38
  packageName: "@treeui/vue",
39
- packageVersion: "0.6.1",
39
+ packageVersion: "0.13.0",
40
40
  decisionGuides: [
41
41
  {
42
42
  id: "single-choice",
@@ -234,6 +234,50 @@ var treeui_catalog_default = {
234
234
  notes: []
235
235
  }
236
236
  ]
237
+ },
238
+ {
239
+ id: "data-viz-choice",
240
+ question: "Visualize numeric data",
241
+ options: [
242
+ {
243
+ use: "TStat",
244
+ when: [
245
+ "The story is a single headline number, optionally with a trend and delta.",
246
+ "It is not a plot \u2014 prefer the number over a chart when one value says it."
247
+ ],
248
+ notes: []
249
+ },
250
+ {
251
+ use: "TSparkline",
252
+ when: [
253
+ "You want an inline micro-trend next to a value, in a table cell, or in text.",
254
+ "No axes, legend, or tooltip are needed."
255
+ ],
256
+ notes: []
257
+ },
258
+ {
259
+ use: "TChart",
260
+ when: [
261
+ "You need line, area, or bar plots with axes, gridlines, legend, and hover tooltip.",
262
+ "There are one or more series over shared categories."
263
+ ],
264
+ notes: []
265
+ },
266
+ {
267
+ use: "TDonutChart",
268
+ when: [
269
+ "The data is a part-of-whole breakdown (donut or pie)."
270
+ ],
271
+ notes: []
272
+ },
273
+ {
274
+ use: "TProgress",
275
+ when: [
276
+ "You are showing completion toward a single target, not a distribution or trend."
277
+ ],
278
+ notes: []
279
+ }
280
+ ]
237
281
  }
238
282
  ],
239
283
  recipes: [
@@ -283,11 +327,28 @@ var treeui_catalog_default = {
283
327
  "Set end `min` from the selected start time when appropriate."
284
328
  ]
285
329
  },
330
+ {
331
+ id: "app-shell",
332
+ name: "Full-viewport application shell",
333
+ useWhen: [
334
+ "The app needs a header plus side navigation that fills the whole screen and adapts to mobile.",
335
+ "The layout must use the full page width on large monitors, not a centered column."
336
+ ],
337
+ compose: [
338
+ "TAppShell",
339
+ "TNavMenu"
340
+ ],
341
+ notes: [
342
+ "`TAppShell` orchestrates the header, sidebar, and fluid content in one component; put a `TNavMenu` in its `sidebar` slot and it inherits collapsed state automatically.",
343
+ "Leave `mobile` unset to auto-switch at `breakpoint` (default 768px), or bind it to force mobile; the sidebar becomes an off-canvas drawer with a header menu button.",
344
+ "Mount it at the app root. Wrap only inner regions in `TContainer` if a specific area needs a constrained reading width."
345
+ ]
346
+ },
286
347
  {
287
348
  id: "sidebar-shell",
288
349
  name: "Sidebar application shell",
289
350
  useWhen: [
290
- "The screen needs persistent section navigation."
351
+ "The screen needs persistent section navigation and you are composing the shell by hand."
291
352
  ],
292
353
  compose: [
293
354
  "TSidebar",
@@ -296,7 +357,8 @@ var treeui_catalog_default = {
296
357
  "TContainer"
297
358
  ],
298
359
  notes: [
299
- "Let `TNavMenu` inherit collapsed state from `TSidebar` when possible."
360
+ "Let `TNavMenu` inherit collapsed state from `TSidebar` when possible.",
361
+ "Prefer `TAppShell` (recipe `app-shell`) when you also need full-viewport sizing and a responsive mobile drawer."
300
362
  ]
301
363
  },
302
364
  {
@@ -394,15 +456,38 @@ var treeui_catalog_default = {
394
456
  id: "chart-surface",
395
457
  name: "Chart surface",
396
458
  useWhen: [
397
- "A screen needs data visualization, but the charting engine should stay external to TreeUI."
459
+ "A screen needs data visualization inside a framed, titled surface."
398
460
  ],
399
461
  compose: [
400
462
  "TCard",
401
463
  "TStack",
402
- "external chart library"
464
+ "TChart",
465
+ "TSelect"
403
466
  ],
404
467
  notes: [
405
- "Use TreeUI for the surrounding surface, headings, badges, filters, and empty/loading states."
468
+ "Prefer the native TChart / TDonutChart / TSparkline \u2014 no external charting library is required.",
469
+ "Use TreeUI for the surrounding surface, headings, badges, range filters, and empty/loading states.",
470
+ "TChart has its own loading and empty slots; you can still wrap it in TCard for the frame.",
471
+ "Only reach for an external chart engine for chart types TreeUI does not cover yet (e.g. scatter, heatmap)."
472
+ ]
473
+ },
474
+ {
475
+ id: "metric-dashboard",
476
+ name: "Metric dashboard",
477
+ useWhen: [
478
+ "A dashboard shows KPIs alongside trends and breakdowns."
479
+ ],
480
+ compose: [
481
+ "TStat",
482
+ "TSparkline",
483
+ "TChart",
484
+ "TDonutChart",
485
+ "TGrid"
486
+ ],
487
+ notes: [
488
+ "Lead with TStat tiles; embed a TSparkline in a stat's meta slot for the inline trend.",
489
+ "Use one TChart for the main time series and a TDonutChart for a part-of-whole split.",
490
+ "Keep series colors stable across the dashboard \u2014 rely on the --tree-color-chart-* order, do not remap by rank."
406
491
  ]
407
492
  },
408
493
  {
@@ -477,7 +562,7 @@ var treeui_catalog_default = {
477
562
  },
478
563
  globalRules: [
479
564
  "Always import `@treeui/vue/style.css` once in the consuming application.",
480
- "Compatibility aliases such as `TreeButton` remain available but are not the preferred direction.",
565
+ "All components use the `T<Name>` export prefix; there are no `Tree<Name>` aliases.",
481
566
  "Form controls use `modelValue` + `update:modelValue`.",
482
567
  "Overlay-style components generally support controlled and uncontrolled open state.",
483
568
  "Date-only values use `YYYY-MM-DD`.",
@@ -552,17 +637,27 @@ var treeui_catalog_default = {
552
637
  "Use `accept`, `multiple`, and size limits in the app layer to constrain uploads."
553
638
  ]
554
639
  },
640
+ TAppShell: {
641
+ required: [],
642
+ notes: [
643
+ "Mount at the app root; it fills the viewport (100dvh, full width) and scrolls its content region independently.",
644
+ "Put navigation in the `sidebar` slot (e.g. `TNavMenu`) \u2014 it inherits collapsed state from the shell provider like `TSidebar`.",
645
+ "Leave `mobile` unset to auto-switch to an off-canvas drawer at `breakpoint`, or bind `mobile` to control it explicitly.",
646
+ "Use `v-model:collapsed` for the desktop rail and `v-model:sidebarOpen` for the mobile drawer when the app persists layout state."
647
+ ]
648
+ },
555
649
  TSidebar: {
556
650
  required: [],
557
651
  notes: [
558
652
  "Pair with `TNavMenu` for app-section navigation.",
559
- "Use controlled `collapsed` state when the app shell persists layout preferences."
653
+ "Use controlled `collapsed` state when the app shell persists layout preferences.",
654
+ "Prefer `TAppShell` when you also want full-viewport sizing, a top header, and a responsive mobile drawer."
560
655
  ]
561
656
  },
562
657
  TNavMenu: {
563
658
  required: [],
564
659
  notes: [
565
- "When nested inside `TSidebar`, `collapsed` can be inherited from the sidebar provider."
660
+ "When nested inside `TSidebar` or `TAppShell`, `collapsed` can be inherited from the sidebar provider."
566
661
  ]
567
662
  },
568
663
  TTreeView: {
@@ -596,6 +691,32 @@ var treeui_catalog_default = {
596
691
  "Use `href` for native links.",
597
692
  "Use `to` when the app has vue-router and breadcrumb items should render RouterLink."
598
693
  ]
694
+ },
695
+ TChart: {
696
+ required: [],
697
+ notes: [
698
+ "Pass `series` as `{ name, data, color? }[]` and `labels` as a parallel `string[]` (one label per data index).",
699
+ "Set `type` to `line`, `area`, or `bar`; use `stacked` only with `bar`.",
700
+ "Series colors come from `--tree-color-chart-1..8` in order; pass `color` per series to override \u2014 do not remap colors when the series set changes.",
701
+ "Pass `valueFormat: (n) => string` to format axis and tooltip values (currency, compact, etc.).",
702
+ "No charting library or provider is required \u2014 the SVG and geometry are built in."
703
+ ]
704
+ },
705
+ TSparkline: {
706
+ required: [],
707
+ notes: [
708
+ "Pass `data` as `number[]`; there are no axes, legend, or tooltip by design.",
709
+ "Size it with `width`/`height`; use it inside `TStat`, table cells, or text.",
710
+ "Always keep a visible number nearby \u2014 a sparkline supplements a value, it does not replace it."
711
+ ]
712
+ },
713
+ TDonutChart: {
714
+ required: [],
715
+ notes: [
716
+ "Pass `segments` as `{ label, value, color? }[]`; non-positive values are dropped.",
717
+ "Set `thickness: 0` for a full pie; keep the default for a donut with a center readout.",
718
+ "Use the `center` slot (donut only) for a custom center; otherwise it shows the total or the hovered slice."
719
+ ]
599
720
  }
600
721
  },
601
722
  appPatterns: {
@@ -609,6 +730,9 @@ var treeui_catalog_default = {
609
730
  commonCompositions: [
610
731
  "TFormField + input-like control",
611
732
  "TGrid + TStat",
733
+ "TStat + TSparkline",
734
+ "TCard + TChart",
735
+ "TAppShell + TNavMenu",
612
736
  "TSidebar + TNavMenu",
613
737
  "TTable + TPagination",
614
738
  "TPricing + TPricingCard"
@@ -618,16 +742,13 @@ var treeui_catalog_default = {
618
742
  components: [
619
743
  {
620
744
  name: "TAccordion",
621
- legacyAlias: "TreeAccordion",
622
- aliases: [
623
- "TreeAccordion"
624
- ],
745
+ aliases: [],
625
746
  package: "@treeui/vue",
626
747
  kind: "disclosure",
627
748
  category: "Data Display",
628
749
  status: "available",
629
750
  purpose: "Organized content sections with expandable/collapsible behavior. Supports single-open and multi-open modes.\n",
630
- sourceFile: "packages/vue/src/components/TreeAccordion.vue",
751
+ sourceFile: "packages/vue/src/components/TAccordion.vue",
631
752
  storyFile: "apps/docs/src/stories/Accordion.stories.ts",
632
753
  storyTitle: "Components/Data Display/Accordion",
633
754
  manifestFile: "docs/ai/COMPONENTS/accordion.yaml",
@@ -674,16 +795,13 @@ var treeui_catalog_default = {
674
795
  },
675
796
  {
676
797
  name: "TAlert",
677
- legacyAlias: "TreeAlert",
678
- aliases: [
679
- "TreeAlert"
680
- ],
798
+ aliases: [],
681
799
  package: "@treeui/vue",
682
800
  kind: "feedback",
683
801
  category: "Feedback",
684
802
  status: "available",
685
803
  purpose: "Inline status banner for info, success, warning, and danger messages.",
686
- sourceFile: "packages/vue/src/components/TreeAlert.vue",
804
+ sourceFile: "packages/vue/src/components/TAlert.vue",
687
805
  storyFile: "apps/docs/src/stories/Alert.stories.ts",
688
806
  storyTitle: "Components/Feedback/Alert",
689
807
  manifestFile: "docs/ai/COMPONENTS/alert.yaml",
@@ -701,7 +819,7 @@ var treeui_catalog_default = {
701
819
  },
702
820
  {
703
821
  name: "size",
704
- type: "TreeSize",
822
+ type: "TSize",
705
823
  default: "md",
706
824
  values: [
707
825
  "sm",
@@ -776,15 +894,217 @@ var treeui_catalog_default = {
776
894
  recipes: []
777
895
  },
778
896
  {
779
- name: "TAvatar",
780
- legacyAlias: "TreeAvatar",
781
- aliases: [
782
- "TreeAvatar"
897
+ name: "TAppShell",
898
+ aliases: [],
899
+ package: "@treeui/vue",
900
+ kind: "layout",
901
+ category: "Layout",
902
+ status: "available",
903
+ purpose: "Full-viewport application shell with a top header, a persistent side navigation, and a fluid content area that collapses the sidebar into an off-canvas drawer on small screens.",
904
+ sourceFile: "packages/vue/src/components/TAppShell.vue",
905
+ storyFile: "apps/docs/src/stories/AppShell.stories.ts",
906
+ storyTitle: "Components/Layout/AppShell",
907
+ manifestFile: "docs/ai/COMPONENTS/app-shell.yaml",
908
+ props: [
909
+ {
910
+ name: "as",
911
+ type: "string",
912
+ default: "div"
913
+ },
914
+ {
915
+ name: "side",
916
+ type: "TSidebarSide",
917
+ default: "left",
918
+ values: [
919
+ "left",
920
+ "right"
921
+ ]
922
+ },
923
+ {
924
+ name: "sidebarWidth",
925
+ type: "string",
926
+ default: "17.5rem"
927
+ },
928
+ {
929
+ name: "collapsedWidth",
930
+ type: "string",
931
+ default: "4.75rem"
932
+ },
933
+ {
934
+ name: "collapsible",
935
+ type: "boolean",
936
+ default: "false"
937
+ },
938
+ {
939
+ name: "collapsed",
940
+ type: "boolean",
941
+ default: "undefined"
942
+ },
943
+ {
944
+ name: "defaultCollapsed",
945
+ type: "boolean",
946
+ default: "false"
947
+ },
948
+ {
949
+ name: "mobile",
950
+ type: "boolean",
951
+ default: "undefined"
952
+ },
953
+ {
954
+ name: "breakpoint",
955
+ type: "string",
956
+ default: "768px"
957
+ },
958
+ {
959
+ name: "sidebarOpen",
960
+ type: "boolean",
961
+ default: "undefined"
962
+ },
963
+ {
964
+ name: "defaultSidebarOpen",
965
+ type: "boolean",
966
+ default: "false"
967
+ },
968
+ {
969
+ name: "closeOnEscape",
970
+ type: "boolean",
971
+ default: "true"
972
+ },
973
+ {
974
+ name: "closeOnOverlay",
975
+ type: "boolean",
976
+ default: "true"
977
+ },
978
+ {
979
+ name: "showMenuButton",
980
+ type: "boolean",
981
+ default: "true"
982
+ },
983
+ {
984
+ name: "menuLabel",
985
+ type: "string",
986
+ default: "Open menu"
987
+ },
988
+ {
989
+ name: "closeLabel",
990
+ type: "string",
991
+ default: "Close menu"
992
+ },
993
+ {
994
+ name: "sidebarLabel",
995
+ type: "string",
996
+ default: "Sidebar"
997
+ }
783
998
  ],
999
+ events: [
1000
+ {
1001
+ name: "update:collapsed"
1002
+ },
1003
+ {
1004
+ name: "collapse-change"
1005
+ },
1006
+ {
1007
+ name: "update:sidebarOpen"
1008
+ },
1009
+ {
1010
+ name: "sidebar-open-change"
1011
+ }
1012
+ ],
1013
+ slots: [
1014
+ {
1015
+ name: "header"
1016
+ },
1017
+ {
1018
+ name: "sidebar"
1019
+ },
1020
+ {
1021
+ name: "default"
1022
+ },
1023
+ {
1024
+ name: "menu-icon"
1025
+ }
1026
+ ],
1027
+ a11y: [
1028
+ "role: dialog",
1029
+ "aria_modal: true",
1030
+ "focus_trap: true",
1031
+ "restores_focus_on_close: true",
1032
+ "escape_closes_when_enabled: true",
1033
+ "menu_button_aria_expanded: true",
1034
+ "menu_button_aria_controls_drawer: true",
1035
+ "sidebar_labelled_by_sidebar_label: true"
1036
+ ],
1037
+ behavior: [
1038
+ "fills_viewport_full_width_and_height: true",
1039
+ "header_spans_full_width_above_sidebar_and_content: true",
1040
+ "content_area_scrolls_independently: true",
1041
+ "auto_switches_to_mobile_at_breakpoint_when_mobile_undefined: true",
1042
+ "mobile_prop_forces_mobile_mode: true",
1043
+ "mobile_sidebar_becomes_off_canvas_drawer: true",
1044
+ "auto_menu_button_in_header_on_mobile: true",
1045
+ "controlled_and_uncontrolled_collapsed_state: true",
1046
+ "controlled_and_uncontrolled_sidebar_open_state: true",
1047
+ "provides_collapsed_state_to_descendants: true",
1048
+ "drawer_reports_collapsed_false_to_descendants_and_slots: true",
1049
+ "left_and_right_variants: true",
1050
+ "locks_body_scroll_while_drawer_open: true",
1051
+ "overlay_click_closes_when_enabled: true",
1052
+ "exposes_slot_props_with_mobile_collapsed_and_toggles: true"
1053
+ ],
1054
+ selection: {
1055
+ keywords: [
1056
+ "app shell",
1057
+ "layout",
1058
+ "dashboard",
1059
+ "admin",
1060
+ "header sidebar",
1061
+ "full screen",
1062
+ "responsive shell",
1063
+ "off-canvas"
1064
+ ],
1065
+ useWhen: [
1066
+ "You need a full-viewport application layout with a header, a side navigation, and a fluid content area.",
1067
+ "The layout should use the entire page width (not a centered max-width) and switch the sidebar to an off-canvas drawer on small screens."
1068
+ ],
1069
+ avoidWhen: [
1070
+ "You only need one region (just a top bar, or just a side rail) \u2014 compose TNavbar or TSidebar directly.",
1071
+ "The page content should be centered with a readable max width \u2014 use TContainer inside the shell content instead."
1072
+ ],
1073
+ alternatives: [
1074
+ {
1075
+ component: "TSidebar",
1076
+ when: "You want a standalone collapsible side rail without the header/content orchestration or responsive drawer."
1077
+ },
1078
+ {
1079
+ component: "TNavbar",
1080
+ when: "You only need the top application bar."
1081
+ },
1082
+ {
1083
+ component: "TDrawer",
1084
+ when: "You need a general temporary overlay panel rather than the shell's responsive navigation."
1085
+ }
1086
+ ]
1087
+ },
1088
+ setup: {
1089
+ required: [],
1090
+ notes: [
1091
+ "Mount at the app root; it fills the viewport (100dvh, full width) and scrolls its content region independently.",
1092
+ "Put navigation in the `sidebar` slot (e.g. `TNavMenu`) \u2014 it inherits collapsed state from the shell provider like `TSidebar`.",
1093
+ "Leave `mobile` unset to auto-switch to an off-canvas drawer at `breakpoint`, or bind `mobile` to control it explicitly.",
1094
+ "Use `v-model:collapsed` for the desktop rail and `v-model:sidebarOpen` for the mobile drawer when the app persists layout state."
1095
+ ]
1096
+ },
1097
+ recipes: [
1098
+ "app-shell"
1099
+ ]
1100
+ },
1101
+ {
1102
+ name: "TAvatar",
1103
+ aliases: [],
784
1104
  package: "@treeui/vue",
785
1105
  category: "Data Display",
786
1106
  description: "User image with fallback initials and optional status indicator dot.",
787
- sourceFile: "packages/vue/src/components/TreeAvatar.vue",
1107
+ sourceFile: "packages/vue/src/components/TAvatar.vue",
788
1108
  storyFile: "apps/docs/src/stories/Avatar.stories.ts",
789
1109
  storyTitle: "Components/Data Display/Avatar",
790
1110
  manifestFile: "docs/ai/COMPONENTS/avatar.yaml",
@@ -809,7 +1129,7 @@ var treeui_catalog_default = {
809
1129
  },
810
1130
  {
811
1131
  name: "size",
812
- type: "TreeSize",
1132
+ type: "TSize",
813
1133
  default: "md",
814
1134
  values: [
815
1135
  "sm",
@@ -819,7 +1139,7 @@ var treeui_catalog_default = {
819
1139
  },
820
1140
  {
821
1141
  name: "status",
822
- type: "TreeAvatarStatus",
1142
+ type: "TAvatarStatus",
823
1143
  required: false,
824
1144
  values: [
825
1145
  "online",
@@ -857,23 +1177,20 @@ var treeui_catalog_default = {
857
1177
  },
858
1178
  {
859
1179
  name: "TBadge",
860
- legacyAlias: "TreeBadge",
861
- aliases: [
862
- "TreeBadge"
863
- ],
1180
+ aliases: [],
864
1181
  package: "@treeui/vue",
865
1182
  kind: "display",
866
1183
  category: "Data Display",
867
1184
  status: "available",
868
1185
  purpose: "Compact status or metadata label with optional icon.",
869
- sourceFile: "packages/vue/src/components/TreeBadge.vue",
1186
+ sourceFile: "packages/vue/src/components/TBadge.vue",
870
1187
  storyFile: "apps/docs/src/stories/Badge.stories.ts",
871
1188
  storyTitle: "Components/Data Display/Badge",
872
1189
  manifestFile: "docs/ai/COMPONENTS/badge.yaml",
873
1190
  props: [
874
1191
  {
875
1192
  name: "variant",
876
- type: "TreeVariant",
1193
+ type: "TVariant",
877
1194
  default: "soft",
878
1195
  values: [
879
1196
  "solid",
@@ -885,7 +1202,7 @@ var treeui_catalog_default = {
885
1202
  },
886
1203
  {
887
1204
  name: "tone",
888
- type: "TreeBadgeTone",
1205
+ type: "TBadgeTone",
889
1206
  default: "neutral",
890
1207
  values: [
891
1208
  "neutral",
@@ -898,7 +1215,7 @@ var treeui_catalog_default = {
898
1215
  },
899
1216
  {
900
1217
  name: "size",
901
- type: "TreeSize",
1218
+ type: "TSize",
902
1219
  default: "md",
903
1220
  values: [
904
1221
  "sm",
@@ -937,16 +1254,13 @@ var treeui_catalog_default = {
937
1254
  },
938
1255
  {
939
1256
  name: "TBreadcrumb",
940
- legacyAlias: "TreeBreadcrumb",
941
- aliases: [
942
- "TreeBreadcrumb"
943
- ],
1257
+ aliases: [],
944
1258
  package: "@treeui/vue",
945
1259
  kind: "navigation",
946
1260
  category: "Navigation",
947
1261
  status: "available",
948
1262
  purpose: "Hierarchical navigation trail showing the user's current location within a site or application.",
949
- sourceFile: "packages/vue/src/components/TreeBreadcrumb.vue",
1263
+ sourceFile: "packages/vue/src/components/TBreadcrumb.vue",
950
1264
  storyFile: "apps/docs/src/stories/Breadcrumb.stories.ts",
951
1265
  storyTitle: "Components/Navigation/Breadcrumb",
952
1266
  manifestFile: "docs/ai/COMPONENTS/breadcrumb.yaml",
@@ -989,16 +1303,13 @@ var treeui_catalog_default = {
989
1303
  },
990
1304
  {
991
1305
  name: "TButton",
992
- legacyAlias: "TreeButton",
993
- aliases: [
994
- "TreeButton"
995
- ],
1306
+ aliases: [],
996
1307
  package: "@treeui/vue",
997
1308
  kind: "primitive",
998
1309
  category: "Actions",
999
1310
  status: "available",
1000
1311
  purpose: "Clickable action trigger with variants, sizes, optional polymorphism, and loading state.",
1001
- sourceFile: "packages/vue/src/components/TreeButton.vue",
1312
+ sourceFile: "packages/vue/src/components/TButton.vue",
1002
1313
  storyFile: "apps/docs/src/stories/Button.stories.ts",
1003
1314
  storyTitle: "Components/Actions/Button",
1004
1315
  manifestFile: "docs/ai/COMPONENTS/button.yaml",
@@ -1010,7 +1321,7 @@ var treeui_catalog_default = {
1010
1321
  },
1011
1322
  {
1012
1323
  name: "variant",
1013
- type: "TreeVariant",
1324
+ type: "TVariant",
1014
1325
  default: "solid",
1015
1326
  values: [
1016
1327
  "solid",
@@ -1022,7 +1333,7 @@ var treeui_catalog_default = {
1022
1333
  },
1023
1334
  {
1024
1335
  name: "size",
1025
- type: "TreeSize",
1336
+ type: "TSize",
1026
1337
  default: "md",
1027
1338
  values: [
1028
1339
  "sm",
@@ -1087,16 +1398,13 @@ var treeui_catalog_default = {
1087
1398
  },
1088
1399
  {
1089
1400
  name: "TCard",
1090
- legacyAlias: "TreeCard",
1091
- aliases: [
1092
- "TreeCard"
1093
- ],
1401
+ aliases: [],
1094
1402
  package: "@treeui/vue",
1095
1403
  kind: "layout",
1096
1404
  category: "Data Display",
1097
1405
  status: "available",
1098
1406
  purpose: "Surface container with optional header and footer slots.",
1099
- sourceFile: "packages/vue/src/components/TreeCard.vue",
1407
+ sourceFile: "packages/vue/src/components/TCard.vue",
1100
1408
  storyFile: "apps/docs/src/stories/Card.stories.ts",
1101
1409
  storyTitle: "Components/Data Display/Card",
1102
1410
  manifestFile: "docs/ai/COMPONENTS/card.yaml",
@@ -1108,7 +1416,7 @@ var treeui_catalog_default = {
1108
1416
  },
1109
1417
  {
1110
1418
  name: "variant",
1111
- type: "TreeCardVariant",
1419
+ type: "TCardVariant",
1112
1420
  default: "outline",
1113
1421
  values: [
1114
1422
  "outline",
@@ -1119,7 +1427,7 @@ var treeui_catalog_default = {
1119
1427
  },
1120
1428
  {
1121
1429
  name: "size",
1122
- type: "TreeSize",
1430
+ type: "TSize",
1123
1431
  default: "md",
1124
1432
  values: [
1125
1433
  "sm",
@@ -1151,7 +1459,8 @@ var treeui_catalog_default = {
1151
1459
  ],
1152
1460
  a11y: [],
1153
1461
  behavior: [
1154
- "body_wrapper_class: tree-card__body"
1462
+ "body_wrapper_class: t-card__body",
1463
+ "solid_variant_rescopes_color_tokens_for_nested_content: true"
1155
1464
  ],
1156
1465
  selection: {
1157
1466
  keywords: [
@@ -1187,17 +1496,210 @@ var treeui_catalog_default = {
1187
1496
  ]
1188
1497
  },
1189
1498
  {
1190
- name: "TCheckbox",
1191
- legacyAlias: "TreeCheckbox",
1192
- aliases: [
1193
- "TreeCheckbox"
1499
+ name: "TChart",
1500
+ aliases: [],
1501
+ package: "@treeui/vue",
1502
+ kind: "data-display",
1503
+ category: "Data Display",
1504
+ status: "available",
1505
+ purpose: "Lightweight cartesian chart (line, area, bar) for multi-series data, with axes, gridlines, hover tooltip, legend, and an accessible data table. No external charting dependency.",
1506
+ sourceFile: "packages/vue/src/components/TChart.vue",
1507
+ storyFile: "apps/docs/src/stories/Chart.stories.ts",
1508
+ storyTitle: "Components/Data Display/Chart",
1509
+ manifestFile: "docs/ai/COMPONENTS/chart.yaml",
1510
+ props: [
1511
+ {
1512
+ name: "type",
1513
+ type: "TChartType",
1514
+ default: "line",
1515
+ values: [
1516
+ "line",
1517
+ "area",
1518
+ "bar"
1519
+ ]
1520
+ },
1521
+ {
1522
+ name: "series",
1523
+ type: "TChartSeries[]",
1524
+ default: "[]",
1525
+ note: "Each item is { name: string; data: number[]; color?: string }."
1526
+ },
1527
+ {
1528
+ name: "labels",
1529
+ type: "string[]",
1530
+ default: "[]",
1531
+ note: "X-axis categories, aligned index-for-index to each series' data."
1532
+ },
1533
+ {
1534
+ name: "height",
1535
+ type: "number",
1536
+ default: "260",
1537
+ note: "Width is fluid (measured via ResizeObserver)."
1538
+ },
1539
+ {
1540
+ name: "smooth",
1541
+ type: "boolean",
1542
+ default: "false",
1543
+ note: "Curved line/area."
1544
+ },
1545
+ {
1546
+ name: "stacked",
1547
+ type: "boolean",
1548
+ default: "false",
1549
+ note: "Stacks bar series; ignored for line/area. Negative values are clamped to 0 in stacked mode (grouped mode renders them)."
1550
+ },
1551
+ {
1552
+ name: "showGrid",
1553
+ type: "boolean",
1554
+ default: "true"
1555
+ },
1556
+ {
1557
+ name: "showLegend",
1558
+ type: "boolean",
1559
+ default: "auto (true when more than one series)"
1560
+ },
1561
+ {
1562
+ name: "showXAxis",
1563
+ type: "boolean",
1564
+ default: "true"
1565
+ },
1566
+ {
1567
+ name: "showYAxis",
1568
+ type: "boolean",
1569
+ default: "true"
1570
+ },
1571
+ {
1572
+ name: "showTooltip",
1573
+ type: "boolean",
1574
+ default: "true"
1575
+ },
1576
+ {
1577
+ name: "showPoints",
1578
+ type: "boolean",
1579
+ default: "false",
1580
+ note: "Always draw markers on line/area points."
1581
+ },
1582
+ {
1583
+ name: "yTicks",
1584
+ type: "number",
1585
+ default: "5"
1586
+ },
1587
+ {
1588
+ name: "valueFormat",
1589
+ type: "(value: number) => string",
1590
+ default: "locale integers for |value| >= 1000"
1591
+ },
1592
+ {
1593
+ name: "minY",
1594
+ type: "number",
1595
+ default: "auto"
1596
+ },
1597
+ {
1598
+ name: "maxY",
1599
+ type: "number",
1600
+ default: "auto"
1601
+ },
1602
+ {
1603
+ name: "animated",
1604
+ type: "boolean",
1605
+ default: "true",
1606
+ note: "Draw-in animation; disabled under prefers-reduced-motion."
1607
+ },
1608
+ {
1609
+ name: "loading",
1610
+ type: "boolean",
1611
+ default: "false"
1612
+ },
1613
+ {
1614
+ name: "ariaLabel",
1615
+ type: "string",
1616
+ default: "auto-generated summary"
1617
+ }
1618
+ ],
1619
+ events: [
1620
+ {
1621
+ name: "point-click",
1622
+ payload: "{ index: number; label: string; values: { name: string; value: number; color: string }[] }"
1623
+ }
1624
+ ],
1625
+ slots: [
1626
+ {
1627
+ name: "legend"
1628
+ },
1629
+ {
1630
+ name: "tooltip"
1631
+ },
1632
+ {
1633
+ name: "empty"
1634
+ }
1635
+ ],
1636
+ a11y: [
1637
+ "SVG is aria-hidden; a visually-hidden <table> mirrors the series data for assistive tech.",
1638
+ "Legend defaults on for multiple series so identity is not color-only.",
1639
+ "Provide a meaningful ariaLabel describing what the chart shows."
1194
1640
  ],
1641
+ behavior: [
1642
+ "colors_auto_assign_from_chart_palette: --tree-color-chart-1..8, cycling; per-series color overrides",
1643
+ "bar_zero_baseline: true",
1644
+ "line_domain_uses_nice_ticks: true",
1645
+ "hover_shows_crosshair_and_tooltip: true"
1646
+ ],
1647
+ selection: {
1648
+ keywords: [
1649
+ "chart",
1650
+ "graph",
1651
+ "line chart",
1652
+ "area chart",
1653
+ "bar chart",
1654
+ "plot",
1655
+ "dashboard",
1656
+ "time series",
1657
+ "analytics"
1658
+ ],
1659
+ useWhen: [
1660
+ "You need a line, area, or bar chart with axes, gridlines, legend, and a hover tooltip.",
1661
+ "One or more series share a set of category labels."
1662
+ ],
1663
+ avoidWhen: [
1664
+ "A single value tells the story \u2014 use TStat.",
1665
+ "You only need an inline trend with no axes \u2014 use TSparkline.",
1666
+ "The data is a part-of-whole breakdown \u2014 use TDonutChart."
1667
+ ],
1668
+ alternatives: [
1669
+ {
1670
+ component: "TSparkline",
1671
+ when: "The trend should be inline and axis-less."
1672
+ },
1673
+ {
1674
+ component: "TDonutChart",
1675
+ when: "The data is proportional (parts of a whole)."
1676
+ }
1677
+ ]
1678
+ },
1679
+ setup: {
1680
+ required: [],
1681
+ notes: [
1682
+ "Pass `series` as `{ name, data, color? }[]` and `labels` as a parallel `string[]` (one label per data index).",
1683
+ "Set `type` to `line`, `area`, or `bar`; use `stacked` only with `bar`.",
1684
+ "Series colors come from `--tree-color-chart-1..8` in order; pass `color` per series to override \u2014 do not remap colors when the series set changes.",
1685
+ "Pass `valueFormat: (n) => string` to format axis and tooltip values (currency, compact, etc.).",
1686
+ "No charting library or provider is required \u2014 the SVG and geometry are built in."
1687
+ ]
1688
+ },
1689
+ recipes: [
1690
+ "chart-surface",
1691
+ "metric-dashboard"
1692
+ ]
1693
+ },
1694
+ {
1695
+ name: "TCheckbox",
1696
+ aliases: [],
1195
1697
  package: "@treeui/vue",
1196
1698
  kind: "primitive",
1197
1699
  category: "Data Entry",
1198
1700
  status: "available",
1199
1701
  purpose: "Boolean toggle with indeterminate state; supports v-model via modelValue.",
1200
- sourceFile: "packages/vue/src/components/TreeCheckbox.vue",
1702
+ sourceFile: "packages/vue/src/components/TCheckbox.vue",
1201
1703
  storyFile: "apps/docs/src/stories/Checkbox.stories.ts",
1202
1704
  storyTitle: "Components/Data Entry/Checkbox",
1203
1705
  manifestFile: "docs/ai/COMPONENTS/checkbox.yaml",
@@ -1209,7 +1711,7 @@ var treeui_catalog_default = {
1209
1711
  },
1210
1712
  {
1211
1713
  name: "size",
1212
- type: "TreeSize",
1714
+ type: "TSize",
1213
1715
  default: "md",
1214
1716
  values: [
1215
1717
  "sm",
@@ -1289,16 +1791,13 @@ var treeui_catalog_default = {
1289
1791
  },
1290
1792
  {
1291
1793
  name: "TCombobox",
1292
- legacyAlias: "TreeCombobox",
1293
- aliases: [
1294
- "TreeCombobox"
1295
- ],
1794
+ aliases: [],
1296
1795
  package: "@treeui/vue",
1297
1796
  kind: "primitive",
1298
1797
  category: "Data Entry",
1299
1798
  status: "available",
1300
1799
  purpose: "Searchable combobox / autocomplete input with local filtering, controlled selection, and shared open-state behavior.",
1301
- sourceFile: "packages/vue/src/components/TreeCombobox.vue",
1800
+ sourceFile: "packages/vue/src/components/TCombobox.vue",
1302
1801
  storyFile: "apps/docs/src/stories/Combobox.stories.ts",
1303
1802
  storyTitle: "Components/Data Entry/Combobox",
1304
1803
  manifestFile: "docs/ai/COMPONENTS/combobox.yaml",
@@ -1310,7 +1809,7 @@ var treeui_catalog_default = {
1310
1809
  },
1311
1810
  {
1312
1811
  name: "options",
1313
- type: "TreeComboboxOption[]",
1812
+ type: "TComboboxOption[]",
1314
1813
  default: "[]",
1315
1814
  note: "Array of { label: string; value: string; description?: string; keywords?: string[]; disabled?: boolean }"
1316
1815
  },
@@ -1326,7 +1825,7 @@ var treeui_catalog_default = {
1326
1825
  },
1327
1826
  {
1328
1827
  name: "size",
1329
- type: "TreeSize",
1828
+ type: "TSize",
1330
1829
  default: "md",
1331
1830
  values: [
1332
1831
  "sm",
@@ -1443,16 +1942,13 @@ var treeui_catalog_default = {
1443
1942
  },
1444
1943
  {
1445
1944
  name: "TConfirmDialog",
1446
- legacyAlias: "TreeConfirmDialog",
1447
- aliases: [
1448
- "TreeConfirmDialog"
1449
- ],
1945
+ aliases: [],
1450
1946
  package: "@treeui/vue",
1451
1947
  kind: "overlay",
1452
1948
  category: "Overlay",
1453
1949
  status: "available",
1454
1950
  purpose: "High-level confirmation dialog built on the shared modal contract, with default confirm and cancel actions.",
1455
- sourceFile: "packages/vue/src/components/TreeConfirmDialog.vue",
1951
+ sourceFile: "packages/vue/src/components/TConfirmDialog.vue",
1456
1952
  storyFile: "apps/docs/src/stories/ConfirmDialog.stories.ts",
1457
1953
  storyTitle: "Components/Overlay/ConfirmDialog",
1458
1954
  manifestFile: "docs/ai/COMPONENTS/confirm-dialog.yaml",
@@ -1474,7 +1970,7 @@ var treeui_catalog_default = {
1474
1970
  },
1475
1971
  {
1476
1972
  name: "size",
1477
- type: "TreeSize",
1973
+ type: "TSize",
1478
1974
  default: "sm",
1479
1975
  values: [
1480
1976
  "sm",
@@ -1504,7 +2000,7 @@ var treeui_catalog_default = {
1504
2000
  },
1505
2001
  {
1506
2002
  name: "confirmVariant",
1507
- type: "TreeVariant",
2003
+ type: "TVariant",
1508
2004
  default: "danger"
1509
2005
  },
1510
2006
  {
@@ -1612,16 +2108,13 @@ var treeui_catalog_default = {
1612
2108
  },
1613
2109
  {
1614
2110
  name: "TContainer",
1615
- legacyAlias: "TreeContainer",
1616
- aliases: [
1617
- "TreeContainer"
1618
- ],
2111
+ aliases: [],
1619
2112
  package: "@treeui/vue",
1620
2113
  kind: "layout",
1621
2114
  category: "Layout",
1622
2115
  status: "available",
1623
2116
  purpose: "Width-constrained layout wrapper for readable page content and app sections.",
1624
- sourceFile: "packages/vue/src/components/TreeContainer.vue",
2117
+ sourceFile: "packages/vue/src/components/TContainer.vue",
1625
2118
  storyFile: "apps/docs/src/stories/Container.stories.ts",
1626
2119
  storyTitle: "Components/Layout/Container",
1627
2120
  manifestFile: "docs/ai/COMPONENTS/container.yaml",
@@ -1633,7 +2126,7 @@ var treeui_catalog_default = {
1633
2126
  },
1634
2127
  {
1635
2128
  name: "size",
1636
- type: "TreeContainerSize",
2129
+ type: "TContainerSize",
1637
2130
  default: "lg",
1638
2131
  values: [
1639
2132
  "sm",
@@ -1704,10 +2197,7 @@ var treeui_catalog_default = {
1704
2197
  },
1705
2198
  {
1706
2199
  name: "TContextMenu",
1707
- legacyAlias: "TreeContextMenu",
1708
- aliases: [
1709
- "TreeContextMenu"
1710
- ],
2200
+ aliases: [],
1711
2201
  package: "@treeui/vue",
1712
2202
  category: "Overlay",
1713
2203
  status: "stable",
@@ -1717,7 +2207,7 @@ var treeui_catalog_default = {
1717
2207
  props: [
1718
2208
  {
1719
2209
  name: "items",
1720
- type: "TreeContextMenuItem[]",
2210
+ type: "TContextMenuItem[]",
1721
2211
  default: "[]",
1722
2212
  description: "Menu items to render."
1723
2213
  },
@@ -1741,7 +2231,7 @@ var treeui_catalog_default = {
1741
2231
  },
1742
2232
  {
1743
2233
  name: "size",
1744
- type: "TreeSize",
2234
+ type: "TSize",
1745
2235
  default: "md",
1746
2236
  description: "Item sizing variant."
1747
2237
  }
@@ -1814,16 +2304,13 @@ var treeui_catalog_default = {
1814
2304
  },
1815
2305
  {
1816
2306
  name: "TDatePicker",
1817
- legacyAlias: "TreeDatePicker",
1818
- aliases: [
1819
- "TreeDatePicker"
1820
- ],
2307
+ aliases: [],
1821
2308
  package: "@treeui/vue",
1822
2309
  kind: "form_overlay",
1823
2310
  category: "Data Entry",
1824
2311
  status: "available",
1825
2312
  purpose: "Date input with calendar popover and keyboard navigation.",
1826
- sourceFile: "packages/vue/src/components/TreeDatePicker.vue",
2313
+ sourceFile: "packages/vue/src/components/TDatePicker.vue",
1827
2314
  storyFile: "apps/docs/src/stories/DatePicker.stories.ts",
1828
2315
  storyTitle: "Components/Data Entry/DatePicker",
1829
2316
  manifestFile: "docs/ai/COMPONENTS/date-picker.yaml",
@@ -1845,7 +2332,7 @@ var treeui_catalog_default = {
1845
2332
  },
1846
2333
  {
1847
2334
  name: "size",
1848
- type: "TreeSize",
2335
+ type: "TSize",
1849
2336
  default: "md",
1850
2337
  values: [
1851
2338
  "sm",
@@ -1966,16 +2453,13 @@ var treeui_catalog_default = {
1966
2453
  },
1967
2454
  {
1968
2455
  name: "TDateTimePicker",
1969
- legacyAlias: "TreeDateTimePicker",
1970
- aliases: [
1971
- "TreeDateTimePicker"
1972
- ],
2456
+ aliases: [],
1973
2457
  package: "@treeui/vue",
1974
2458
  kind: "form",
1975
2459
  category: "Data Entry",
1976
2460
  status: "available",
1977
2461
  purpose: "Date and time picker with a calendar grid, time selection, and overlay trigger.",
1978
- sourceFile: "packages/vue/src/components/TreeDateTimePicker.vue",
2462
+ sourceFile: "packages/vue/src/components/TDateTimePicker.vue",
1979
2463
  storyFile: "apps/docs/src/stories/DateTimePicker.stories.ts",
1980
2464
  storyTitle: "Components/Data Entry/DateTimePicker",
1981
2465
  manifestFile: "docs/ai/COMPONENTS/date-time-picker.yaml",
@@ -1998,7 +2482,7 @@ var treeui_catalog_default = {
1998
2482
  },
1999
2483
  {
2000
2484
  name: "size",
2001
- type: "TreeSize",
2485
+ type: "TSize",
2002
2486
  default: "md",
2003
2487
  values: [
2004
2488
  "sm",
@@ -2127,14 +2611,11 @@ var treeui_catalog_default = {
2127
2611
  },
2128
2612
  {
2129
2613
  name: "TDivider",
2130
- legacyAlias: "TreeDivider",
2131
- aliases: [
2132
- "TreeDivider"
2133
- ],
2614
+ aliases: [],
2134
2615
  package: "@treeui/vue",
2135
2616
  category: "Layout",
2136
2617
  description: "Horizontal or vertical visual separator.",
2137
- sourceFile: "packages/vue/src/components/TreeDivider.vue",
2618
+ sourceFile: "packages/vue/src/components/TDivider.vue",
2138
2619
  storyFile: "apps/docs/src/stories/Divider.stories.ts",
2139
2620
  storyTitle: "Components/Layout/Divider",
2140
2621
  manifestFile: "docs/ai/COMPONENTS/divider.yaml",
@@ -2149,50 +2630,183 @@ var treeui_catalog_default = {
2149
2630
  ]
2150
2631
  },
2151
2632
  {
2152
- name: "decorative",
2633
+ name: "decorative",
2634
+ type: "boolean",
2635
+ default: "true",
2636
+ description: "When true, renders role='none' (purely visual). When false, renders as role='separator'."
2637
+ },
2638
+ {
2639
+ name: "label",
2640
+ type: "string",
2641
+ required: false,
2642
+ description: "Accessible label for non-decorative dividers."
2643
+ }
2644
+ ],
2645
+ events: [],
2646
+ slots: [],
2647
+ a11y: [
2648
+ "role: none (decorative) or separator (semantic)",
2649
+ "aria-orientation: Set when non-decorative.",
2650
+ "aria-label: Set from `label` prop when non-decorative."
2651
+ ],
2652
+ behavior: [],
2653
+ selection: {
2654
+ keywords: [],
2655
+ useWhen: [],
2656
+ avoidWhen: [],
2657
+ alternatives: []
2658
+ },
2659
+ setup: {
2660
+ required: [],
2661
+ notes: []
2662
+ },
2663
+ recipes: []
2664
+ },
2665
+ {
2666
+ name: "TDonutChart",
2667
+ aliases: [],
2668
+ package: "@treeui/vue",
2669
+ kind: "data-display",
2670
+ category: "Data Display",
2671
+ status: "available",
2672
+ purpose: "Part-of-whole chart rendered as a donut (default) or full pie, with a legend, percentages, an interactive center readout, and an accessible label.",
2673
+ sourceFile: "packages/vue/src/components/TDonutChart.vue",
2674
+ storyFile: "apps/docs/src/stories/DonutChart.stories.ts",
2675
+ storyTitle: "Components/Data Display/Donut Chart",
2676
+ manifestFile: "docs/ai/COMPONENTS/donut-chart.yaml",
2677
+ props: [
2678
+ {
2679
+ name: "segments",
2680
+ type: "TDonutSegment[]",
2681
+ default: "[]",
2682
+ note: "Each item is { label: string; value: number; color?: string }. Non-positive values are omitted."
2683
+ },
2684
+ {
2685
+ name: "size",
2686
+ type: "number",
2687
+ default: "200",
2688
+ note: "Square canvas in px."
2689
+ },
2690
+ {
2691
+ name: "thickness",
2692
+ type: "number",
2693
+ default: "26",
2694
+ note: "Ring thickness; 0 renders a full pie."
2695
+ },
2696
+ {
2697
+ name: "gap",
2698
+ type: "number",
2699
+ default: "2",
2700
+ note: "Gap between slices, in degrees."
2701
+ },
2702
+ {
2703
+ name: "rounded",
2704
+ type: "boolean",
2705
+ default: "false",
2706
+ note: "Round the ends of donut segments (widens the gap to make room). Best with a thinner ring."
2707
+ },
2708
+ {
2709
+ name: "showLegend",
2710
+ type: "boolean",
2711
+ default: "true"
2712
+ },
2713
+ {
2714
+ name: "showPercent",
2715
+ type: "boolean",
2716
+ default: "true"
2717
+ },
2718
+ {
2719
+ name: "centerLabel",
2720
+ type: "string",
2721
+ default: "Total",
2722
+ note: "Donut only; ignored for pie."
2723
+ },
2724
+ {
2725
+ name: "centerValue",
2726
+ type: "string | number",
2727
+ default: "auto (sum of values)"
2728
+ },
2729
+ {
2730
+ name: "valueFormat",
2731
+ type: "(value: number) => string",
2732
+ default: "locale integers for |value| >= 1000"
2733
+ },
2734
+ {
2735
+ name: "loading",
2153
2736
  type: "boolean",
2154
- default: "true",
2155
- description: "When true, renders role='none' (purely visual). When false, renders as role='separator'."
2737
+ default: "false"
2156
2738
  },
2157
2739
  {
2158
- name: "label",
2740
+ name: "ariaLabel",
2159
2741
  type: "string",
2160
- required: false,
2161
- description: "Accessible label for non-decorative dividers."
2742
+ default: "auto-generated summary"
2162
2743
  }
2163
2744
  ],
2164
2745
  events: [],
2165
- slots: [],
2746
+ slots: [
2747
+ {
2748
+ name: "center"
2749
+ },
2750
+ {
2751
+ name: "empty"
2752
+ }
2753
+ ],
2166
2754
  a11y: [
2167
- "role: none (decorative) or separator (semantic)",
2168
- "aria-orientation: Set when non-decorative.",
2169
- "aria-label: Set from `label` prop when non-decorative."
2755
+ "Renders role=img with an aria-label summarizing the chart.",
2756
+ "Legend + percentages give a non-visual reading of each slice."
2757
+ ],
2758
+ behavior: [
2759
+ "colors_auto_assign_from_chart_palette: --tree-color-chart-1..8, cycling; per-segment color overrides",
2760
+ "hovering_a_slice_dims_the_rest_and_updates_center: true",
2761
+ "center_shows_total_or_the_hovered_segment: true"
2170
2762
  ],
2171
- behavior: [],
2172
2763
  selection: {
2173
- keywords: [],
2174
- useWhen: [],
2175
- avoidWhen: [],
2176
- alternatives: []
2764
+ keywords: [
2765
+ "donut",
2766
+ "doughnut",
2767
+ "pie",
2768
+ "proportion",
2769
+ "share",
2770
+ "breakdown",
2771
+ "part of whole",
2772
+ "percentage"
2773
+ ],
2774
+ useWhen: [
2775
+ "You are showing how a total splits into a handful of categories.",
2776
+ "A donut center readout (total or hovered slice) is useful."
2777
+ ],
2778
+ avoidWhen: [
2779
+ "There are many categories or precise comparison matters \u2014 use TChart bars.",
2780
+ "The data is a trend over time \u2014 use TChart or TSparkline."
2781
+ ],
2782
+ alternatives: [
2783
+ {
2784
+ component: "TChart",
2785
+ when: "Precise magnitude comparison across categories is needed (bars)."
2786
+ }
2787
+ ]
2177
2788
  },
2178
2789
  setup: {
2179
2790
  required: [],
2180
- notes: []
2791
+ notes: [
2792
+ "Pass `segments` as `{ label, value, color? }[]`; non-positive values are dropped.",
2793
+ "Set `thickness: 0` for a full pie; keep the default for a donut with a center readout.",
2794
+ "Use the `center` slot (donut only) for a custom center; otherwise it shows the total or the hovered slice."
2795
+ ]
2181
2796
  },
2182
- recipes: []
2797
+ recipes: [
2798
+ "metric-dashboard"
2799
+ ]
2183
2800
  },
2184
2801
  {
2185
2802
  name: "TDrawer",
2186
- legacyAlias: "TreeDrawer",
2187
- aliases: [
2188
- "TreeDrawer"
2189
- ],
2803
+ aliases: [],
2190
2804
  package: "@treeui/vue",
2191
2805
  kind: "overlay",
2192
2806
  category: "Overlay",
2193
2807
  status: "available",
2194
2808
  purpose: "Side-anchored panel for secondary content, navigation, or forms.",
2195
- sourceFile: "packages/vue/src/components/TreeDrawer.vue",
2809
+ sourceFile: "packages/vue/src/components/TDrawer.vue",
2196
2810
  storyFile: "apps/docs/src/stories/Drawer.stories.ts",
2197
2811
  storyTitle: "Components/Overlay/Drawer",
2198
2812
  manifestFile: "docs/ai/COMPONENTS/drawer.yaml",
@@ -2214,7 +2828,7 @@ var treeui_catalog_default = {
2214
2828
  },
2215
2829
  {
2216
2830
  name: "size",
2217
- type: "TreeSize",
2831
+ type: "TSize",
2218
2832
  default: "md",
2219
2833
  values: [
2220
2834
  "sm",
@@ -2224,7 +2838,7 @@ var treeui_catalog_default = {
2224
2838
  },
2225
2839
  {
2226
2840
  name: "side",
2227
- type: "TreeDrawerSide",
2841
+ type: "TDrawerSide",
2228
2842
  default: "right",
2229
2843
  values: [
2230
2844
  "top",
@@ -2339,23 +2953,20 @@ var treeui_catalog_default = {
2339
2953
  },
2340
2954
  {
2341
2955
  name: "TDropdown",
2342
- legacyAlias: "TreeDropdown",
2343
- aliases: [
2344
- "TreeDropdown"
2345
- ],
2956
+ aliases: [],
2346
2957
  package: "@treeui/vue",
2347
2958
  kind: "overlay",
2348
2959
  category: "Overlay",
2349
2960
  status: "available",
2350
2961
  purpose: "Trigger + floating menu with keyboard navigation for action lists.",
2351
- sourceFile: "packages/vue/src/components/TreeDropdown.vue",
2962
+ sourceFile: "packages/vue/src/components/TDropdown.vue",
2352
2963
  storyFile: "apps/docs/src/stories/Dropdown.stories.ts",
2353
2964
  storyTitle: "Components/Overlay/Dropdown",
2354
2965
  manifestFile: "docs/ai/COMPONENTS/dropdown.yaml",
2355
2966
  props: [
2356
2967
  {
2357
2968
  name: "items",
2358
- type: "TreeDropdownItem[]",
2969
+ type: "TDropdownItem[]",
2359
2970
  default: "[]",
2360
2971
  note: "Array of { label: string; value: string; disabled?: boolean }"
2361
2972
  },
@@ -2376,7 +2987,7 @@ var treeui_catalog_default = {
2376
2987
  },
2377
2988
  {
2378
2989
  name: "size",
2379
- type: "TreeSize",
2990
+ type: "TSize",
2380
2991
  default: "md",
2381
2992
  values: [
2382
2993
  "sm",
@@ -2388,6 +2999,16 @@ var treeui_catalog_default = {
2388
2999
  name: "label",
2389
3000
  type: "string",
2390
3001
  default: ""
3002
+ },
3003
+ {
3004
+ name: "align",
3005
+ type: "TDropdownAlign",
3006
+ default: "start",
3007
+ values: [
3008
+ "start",
3009
+ "end"
3010
+ ],
3011
+ note: "Horizontal alignment of the menu relative to the trigger. Use `end` when the trigger sits near the right edge of a clipping container (e.g. a table actions column)."
2391
3012
  }
2392
3013
  ],
2393
3014
  events: [
@@ -2423,7 +3044,8 @@ var treeui_catalog_default = {
2423
3044
  behavior: [
2424
3045
  "outside_click_closes_menu: true",
2425
3046
  "focus_restores_on_close: true",
2426
- "chevron_rotates_when_open: true"
3047
+ "chevron_rotates_when_open: true",
3048
+ "menu_grows_to_fit_items_without_wrapping: true"
2427
3049
  ],
2428
3050
  selection: {
2429
3051
  keywords: [
@@ -2456,16 +3078,13 @@ var treeui_catalog_default = {
2456
3078
  },
2457
3079
  {
2458
3080
  name: "TEmptyState",
2459
- legacyAlias: "TreeEmptyState",
2460
- aliases: [
2461
- "TreeEmptyState"
2462
- ],
3081
+ aliases: [],
2463
3082
  package: "@treeui/vue",
2464
3083
  kind: "feedback",
2465
3084
  category: "Feedback",
2466
3085
  status: "available",
2467
3086
  purpose: "Structured empty, no-results, and first-run placeholder block with optional icon, body content, and actions.",
2468
- sourceFile: "packages/vue/src/components/TreeEmptyState.vue",
3087
+ sourceFile: "packages/vue/src/components/TEmptyState.vue",
2469
3088
  storyFile: "apps/docs/src/stories/EmptyState.stories.ts",
2470
3089
  storyTitle: "Components/Feedback/EmptyState",
2471
3090
  manifestFile: "docs/ai/COMPONENTS/empty-state.yaml",
@@ -2477,7 +3096,7 @@ var treeui_catalog_default = {
2477
3096
  },
2478
3097
  {
2479
3098
  name: "size",
2480
- type: "TreeSize",
3099
+ type: "TSize",
2481
3100
  default: "md",
2482
3101
  values: [
2483
3102
  "sm",
@@ -2551,16 +3170,13 @@ var treeui_catalog_default = {
2551
3170
  },
2552
3171
  {
2553
3172
  name: "TFileUpload",
2554
- legacyAlias: "TreeFileUpload",
2555
- aliases: [
2556
- "TreeFileUpload"
2557
- ],
3173
+ aliases: [],
2558
3174
  package: "@treeui/vue",
2559
3175
  kind: "form",
2560
3176
  category: "Form",
2561
3177
  status: "available",
2562
3178
  purpose: "Composable dropzone and file picker with browse, drag-and-drop, and Ctrl+V paste support.",
2563
- sourceFile: "packages/vue/src/components/TreeFileUpload.vue",
3179
+ sourceFile: "packages/vue/src/components/TFileUpload.vue",
2564
3180
  storyFile: "apps/docs/src/stories/FileUpload.stories.ts",
2565
3181
  storyTitle: "Components/Form/FileUpload",
2566
3182
  manifestFile: "docs/ai/COMPONENTS/file-upload.yaml",
@@ -2572,7 +3188,7 @@ var treeui_catalog_default = {
2572
3188
  },
2573
3189
  {
2574
3190
  name: "size",
2575
- type: "TreeSize",
3191
+ type: "TSize",
2576
3192
  default: "md",
2577
3193
  values: [
2578
3194
  "sm",
@@ -2705,15 +3321,12 @@ var treeui_catalog_default = {
2705
3321
  },
2706
3322
  {
2707
3323
  name: "TFormField",
2708
- legacyAlias: "TreeFormField",
2709
- aliases: [
2710
- "TreeFormField"
2711
- ],
3324
+ aliases: [],
2712
3325
  package: "@treeui/vue",
2713
3326
  category: "Data Entry",
2714
3327
  status: "milestone-1",
2715
3328
  description: "Label + input wrapper with error and hint slots. Provides consistent layout, labelling, and validation messaging for any form control.\n",
2716
- sourceFile: "packages/vue/src/components/TreeFormField.vue",
3329
+ sourceFile: "packages/vue/src/components/TFormField.vue",
2717
3330
  storyFile: "apps/docs/src/stories/FormField.stories.ts",
2718
3331
  storyTitle: "Components/Data Entry/FormField",
2719
3332
  manifestFile: "docs/ai/COMPONENTS/form-field.yaml",
@@ -2756,7 +3369,7 @@ var treeui_catalog_default = {
2756
3369
  },
2757
3370
  {
2758
3371
  name: "size",
2759
- type: "TreeSize",
3372
+ type: "TSize",
2760
3373
  default: "md",
2761
3374
  values: [
2762
3375
  "sm",
@@ -2837,16 +3450,13 @@ var treeui_catalog_default = {
2837
3450
  },
2838
3451
  {
2839
3452
  name: "TGrid",
2840
- legacyAlias: "TreeGrid",
2841
- aliases: [
2842
- "TreeGrid"
2843
- ],
3453
+ aliases: [],
2844
3454
  package: "@treeui/vue",
2845
3455
  kind: "layout",
2846
3456
  category: "Layout",
2847
3457
  status: "available",
2848
3458
  purpose: "Responsive grid wrapper for cards, forms, stats, and other multi-column layouts.",
2849
- sourceFile: "packages/vue/src/components/TreeGrid.vue",
3459
+ sourceFile: "packages/vue/src/components/TGrid.vue",
2850
3460
  storyFile: "apps/docs/src/stories/Grid.stories.ts",
2851
3461
  storyTitle: "Components/Layout/Grid",
2852
3462
  manifestFile: "docs/ai/COMPONENTS/grid.yaml",
@@ -2935,21 +3545,109 @@ var treeui_catalog_default = {
2935
3545
  },
2936
3546
  recipes: [
2937
3547
  "date-range-form",
2938
- "stat-grid"
3548
+ "stat-grid",
3549
+ "metric-dashboard"
2939
3550
  ]
2940
3551
  },
2941
3552
  {
2942
- name: "TInput",
2943
- legacyAlias: "TreeInput",
2944
- aliases: [
2945
- "TreeInput"
3553
+ name: "TIcon",
3554
+ aliases: [],
3555
+ package: "@treeui/vue",
3556
+ kind: "display",
3557
+ category: "Data Display",
3558
+ status: "available",
3559
+ purpose: "Render a registered TreeUI icon by name with consistent sizing and accessibility defaults.",
3560
+ sourceFile: "packages/vue/src/components/TIcon.vue",
3561
+ storyFile: "apps/docs/src/stories/Icon.stories.ts",
3562
+ storyTitle: "Components/Data Display/Icon",
3563
+ manifestFile: "docs/ai/COMPONENTS/icon.yaml",
3564
+ props: [
3565
+ {
3566
+ name: "name",
3567
+ type: "TIconName",
3568
+ required: true,
3569
+ values: [
3570
+ "alert-circle",
3571
+ "calendar",
3572
+ "check",
3573
+ "chevron-left",
3574
+ "chevron-down",
3575
+ "chevron-right",
3576
+ "info",
3577
+ "loader-circle",
3578
+ "search",
3579
+ "x"
3580
+ ],
3581
+ description: "Icon identifier from the @treeui/icons registry."
3582
+ },
3583
+ {
3584
+ name: "size",
3585
+ type: "number | string",
3586
+ default: "20",
3587
+ description: "Pixel size for both width and height of the rendered svg."
3588
+ },
3589
+ {
3590
+ name: "strokeWidth",
3591
+ type: "number | string",
3592
+ default: "2"
3593
+ },
3594
+ {
3595
+ name: "absoluteStrokeWidth",
3596
+ type: "boolean",
3597
+ default: "true",
3598
+ description: "When true, stroke width stays visually constant across sizes."
3599
+ },
3600
+ {
3601
+ name: "label",
3602
+ type: "string",
3603
+ default: "undefined",
3604
+ description: 'Accessible label. When set, the icon becomes role="img" with aria-label; otherwise it is aria-hidden.'
3605
+ }
3606
+ ],
3607
+ events: [],
3608
+ slots: [],
3609
+ a11y: [
3610
+ "decorative_by_default: true",
3611
+ "becomes_image_when_labeled: true",
3612
+ "rule: Provide `label` only when the icon conveys meaning that is not already in adjacent text."
2946
3613
  ],
3614
+ behavior: [],
3615
+ selection: {
3616
+ keywords: [
3617
+ "icon",
3618
+ "svg",
3619
+ "glyph",
3620
+ "pictogram"
3621
+ ],
3622
+ useWhen: [
3623
+ "You need to render a registered TreeUI icon by name.",
3624
+ "You want consistent sizing and a11y defaults without importing the icon component directly."
3625
+ ],
3626
+ avoidWhen: [
3627
+ "The icon is not in the @treeui/icons registry \u2014 import or register it instead."
3628
+ ],
3629
+ alternatives: [
3630
+ {
3631
+ component: "named import from @treeui/icons",
3632
+ when: "You need tree-shaken, statically-imported icon components."
3633
+ }
3634
+ ]
3635
+ },
3636
+ setup: {
3637
+ required: [],
3638
+ notes: []
3639
+ },
3640
+ recipes: []
3641
+ },
3642
+ {
3643
+ name: "TInput",
3644
+ aliases: [],
2947
3645
  package: "@treeui/vue",
2948
3646
  kind: "primitive",
2949
3647
  category: "Data Entry",
2950
3648
  status: "available",
2951
3649
  purpose: "Text input with size, loading, invalid, and prefix or suffix slots.",
2952
- sourceFile: "packages/vue/src/components/TreeInput.vue",
3650
+ sourceFile: "packages/vue/src/components/TInput.vue",
2953
3651
  storyFile: "apps/docs/src/stories/Input.stories.ts",
2954
3652
  storyTitle: "Components/Data Entry/Input",
2955
3653
  manifestFile: "docs/ai/COMPONENTS/input.yaml",
@@ -2961,7 +3659,7 @@ var treeui_catalog_default = {
2961
3659
  },
2962
3660
  {
2963
3661
  name: "size",
2964
- type: "TreeSize",
3662
+ type: "TSize",
2965
3663
  default: "md",
2966
3664
  values: [
2967
3665
  "sm",
@@ -3055,16 +3753,13 @@ var treeui_catalog_default = {
3055
3753
  },
3056
3754
  {
3057
3755
  name: "TLink",
3058
- legacyAlias: "TreeLink",
3059
- aliases: [
3060
- "TreeLink"
3061
- ],
3756
+ aliases: [],
3062
3757
  package: "@treeui/vue",
3063
3758
  kind: "navigation",
3064
3759
  category: "Navigation",
3065
3760
  status: "available",
3066
3761
  purpose: "Inline link with consistent styling, optional RouterLink rendering, and external link support.",
3067
- sourceFile: "packages/vue/src/components/TreeLink.vue",
3762
+ sourceFile: "packages/vue/src/components/TLink.vue",
3068
3763
  storyFile: "apps/docs/src/stories/Link.stories.ts",
3069
3764
  storyTitle: "Components/Navigation/Link",
3070
3765
  manifestFile: "docs/ai/COMPONENTS/link.yaml",
@@ -3094,7 +3789,7 @@ var treeui_catalog_default = {
3094
3789
  },
3095
3790
  {
3096
3791
  name: "variant",
3097
- type: "TreeLinkVariant",
3792
+ type: "TLinkVariant",
3098
3793
  default: "default",
3099
3794
  values: [
3100
3795
  "default",
@@ -3130,10 +3825,7 @@ var treeui_catalog_default = {
3130
3825
  },
3131
3826
  {
3132
3827
  name: "TMarkdownEditor",
3133
- legacyAlias: "TreeMarkdownEditor",
3134
- aliases: [
3135
- "TreeMarkdownEditor"
3136
- ],
3828
+ aliases: [],
3137
3829
  package: "@treeui/vue",
3138
3830
  category: "Form",
3139
3831
  status: "stable",
@@ -3150,7 +3842,7 @@ var treeui_catalog_default = {
3150
3842
  },
3151
3843
  {
3152
3844
  name: "size",
3153
- type: "TreeSize",
3845
+ type: "TSize",
3154
3846
  default: "md",
3155
3847
  values: [
3156
3848
  "sm",
@@ -3235,16 +3927,13 @@ var treeui_catalog_default = {
3235
3927
  },
3236
3928
  {
3237
3929
  name: "TModal",
3238
- legacyAlias: "TreeModal",
3239
- aliases: [
3240
- "TreeModal"
3241
- ],
3930
+ aliases: [],
3242
3931
  package: "@treeui/vue",
3243
3932
  kind: "overlay",
3244
3933
  category: "Overlay",
3245
3934
  status: "available",
3246
3935
  purpose: "Accessible modal dialog for focused tasks and confirmations.",
3247
- sourceFile: "packages/vue/src/components/TreeModal.vue",
3936
+ sourceFile: "packages/vue/src/components/TModal.vue",
3248
3937
  storyFile: "apps/docs/src/stories/Modal.stories.ts",
3249
3938
  storyTitle: "Components/Overlay/Modal",
3250
3939
  manifestFile: "docs/ai/COMPONENTS/modal.yaml",
@@ -3266,7 +3955,7 @@ var treeui_catalog_default = {
3266
3955
  },
3267
3956
  {
3268
3957
  name: "size",
3269
- type: "TreeSize",
3958
+ type: "TSize",
3270
3959
  default: "md",
3271
3960
  values: [
3272
3961
  "sm",
@@ -3386,16 +4075,13 @@ var treeui_catalog_default = {
3386
4075
  },
3387
4076
  {
3388
4077
  name: "TMultiSelect",
3389
- legacyAlias: "TreeMultiSelect",
3390
- aliases: [
3391
- "TreeMultiSelect"
3392
- ],
4078
+ aliases: [],
3393
4079
  package: "@treeui/vue",
3394
4080
  kind: "form",
3395
4081
  category: "Data Entry",
3396
4082
  status: "available",
3397
4083
  purpose: "Searchable multi-select control that renders selected values as tags.",
3398
- sourceFile: "packages/vue/src/components/TreeMultiSelect.vue",
4084
+ sourceFile: "packages/vue/src/components/TMultiSelect.vue",
3399
4085
  storyFile: "apps/docs/src/stories/MultiSelect.stories.ts",
3400
4086
  storyTitle: "Components/Data Entry/MultiSelect",
3401
4087
  manifestFile: "docs/ai/COMPONENTS/multi-select.yaml",
@@ -3407,7 +4093,7 @@ var treeui_catalog_default = {
3407
4093
  },
3408
4094
  {
3409
4095
  name: "options",
3410
- type: "TreeMultiSelectOption[]",
4096
+ type: "TMultiSelectOption[]",
3411
4097
  default: "[]",
3412
4098
  note: "Array of `{ label, value, description?, keywords?, disabled? }`."
3413
4099
  },
@@ -3423,7 +4109,7 @@ var treeui_catalog_default = {
3423
4109
  },
3424
4110
  {
3425
4111
  name: "size",
3426
- type: "TreeSize",
4112
+ type: "TSize",
3427
4113
  default: "md",
3428
4114
  values: [
3429
4115
  "sm",
@@ -3548,18 +4234,15 @@ var treeui_catalog_default = {
3548
4234
  },
3549
4235
  {
3550
4236
  name: "TNavbar",
3551
- legacyAlias: "TreeAppBar",
3552
4237
  aliases: [
3553
- "TAppBar",
3554
- "TreeAppBar",
3555
- "TreeNavbar"
4238
+ "TAppBar"
3556
4239
  ],
3557
4240
  package: "@treeui/vue",
3558
4241
  kind: "layout",
3559
4242
  category: "Layout",
3560
4243
  status: "available",
3561
4244
  purpose: "Top application bar with start, center, and end content areas.",
3562
- sourceFile: "packages/vue/src/components/TreeNavbar.vue",
4245
+ sourceFile: "packages/vue/src/components/TNavbar.vue",
3563
4246
  storyFile: "apps/docs/src/stories/Navbar.stories.ts",
3564
4247
  storyTitle: "Components/Layout/Navbar",
3565
4248
  manifestFile: "docs/ai/COMPONENTS/navbar.yaml",
@@ -3571,7 +4254,7 @@ var treeui_catalog_default = {
3571
4254
  },
3572
4255
  {
3573
4256
  name: "size",
3574
- type: "TreeSize",
4257
+ type: "TSize",
3575
4258
  default: "md",
3576
4259
  values: [
3577
4260
  "sm",
@@ -3649,16 +4332,13 @@ var treeui_catalog_default = {
3649
4332
  },
3650
4333
  {
3651
4334
  name: "TNavMenu",
3652
- legacyAlias: "TreeNavMenu",
3653
- aliases: [
3654
- "TreeNavMenu"
3655
- ],
4335
+ aliases: [],
3656
4336
  package: "@treeui/vue",
3657
4337
  kind: "navigation",
3658
4338
  category: "Layout",
3659
4339
  status: "available",
3660
4340
  purpose: "Vertical navigation menu with selection state, keyboard navigation, optional RouterLink rendering, and sidebar integration.",
3661
- sourceFile: "packages/vue/src/components/TreeNavMenu.vue",
4341
+ sourceFile: "packages/vue/src/components/TNavMenu.vue",
3662
4342
  storyFile: "apps/docs/src/stories/NavMenu.stories.ts",
3663
4343
  storyTitle: "Components/Layout/NavMenu",
3664
4344
  manifestFile: "docs/ai/COMPONENTS/nav-menu.yaml",
@@ -3675,13 +4355,13 @@ var treeui_catalog_default = {
3675
4355
  },
3676
4356
  {
3677
4357
  name: "items",
3678
- type: "TreeNavMenuItem[]",
4358
+ type: "TNavMenuItem[]",
3679
4359
  default: "[]",
3680
4360
  note: "Array of `{ label, value, shortLabel?, description?, icon?, to?, badge?, disabled? }`."
3681
4361
  },
3682
4362
  {
3683
4363
  name: "size",
3684
- type: "TreeSize",
4364
+ type: "TSize",
3685
4365
  default: "md",
3686
4366
  values: [
3687
4367
  "sm",
@@ -3756,25 +4436,23 @@ var treeui_catalog_default = {
3756
4436
  setup: {
3757
4437
  required: [],
3758
4438
  notes: [
3759
- "When nested inside `TSidebar`, `collapsed` can be inherited from the sidebar provider."
4439
+ "When nested inside `TSidebar` or `TAppShell`, `collapsed` can be inherited from the sidebar provider."
3760
4440
  ]
3761
4441
  },
3762
4442
  recipes: [
4443
+ "app-shell",
3763
4444
  "sidebar-shell"
3764
4445
  ]
3765
4446
  },
3766
4447
  {
3767
4448
  name: "TNumberInput",
3768
- legacyAlias: "TreeNumberInput",
3769
- aliases: [
3770
- "TreeNumberInput"
3771
- ],
4449
+ aliases: [],
3772
4450
  package: "@treeui/vue",
3773
4451
  kind: "form",
3774
4452
  category: "Data Entry",
3775
4453
  status: "available",
3776
4454
  purpose: "Numeric input with optional increment and decrement controls.",
3777
- sourceFile: "packages/vue/src/components/TreeNumberInput.vue",
4455
+ sourceFile: "packages/vue/src/components/TNumberInput.vue",
3778
4456
  storyFile: "apps/docs/src/stories/NumberInput.stories.ts",
3779
4457
  storyTitle: "Components/Data Entry/NumberInput",
3780
4458
  manifestFile: "docs/ai/COMPONENTS/number-input.yaml",
@@ -3800,7 +4478,7 @@ var treeui_catalog_default = {
3800
4478
  },
3801
4479
  {
3802
4480
  name: "size",
3803
- type: "TreeSize",
4481
+ type: "TSize",
3804
4482
  default: "md",
3805
4483
  values: [
3806
4484
  "sm",
@@ -3875,16 +4553,13 @@ var treeui_catalog_default = {
3875
4553
  },
3876
4554
  {
3877
4555
  name: "TPagination",
3878
- legacyAlias: "TreePagination",
3879
- aliases: [
3880
- "TreePagination"
3881
- ],
4556
+ aliases: [],
3882
4557
  package: "@treeui/vue",
3883
4558
  kind: "primitive",
3884
4559
  category: "Navigation",
3885
4560
  status: "available",
3886
4561
  purpose: "Page controls with previous/next navigation, numbered page buttons, and ellipsis for large page ranges. Supports v-model for the active page.\n",
3887
- sourceFile: "packages/vue/src/components/TreePagination.vue",
4562
+ sourceFile: "packages/vue/src/components/TPagination.vue",
3888
4563
  storyFile: "apps/docs/src/stories/Pagination.stories.ts",
3889
4564
  storyTitle: "Components/Navigation/Pagination",
3890
4565
  manifestFile: "docs/ai/COMPONENTS/pagination.yaml",
@@ -3909,7 +4584,7 @@ var treeui_catalog_default = {
3909
4584
  },
3910
4585
  {
3911
4586
  name: "size",
3912
- type: "TreeSize",
4587
+ type: "TSize",
3913
4588
  default: "md",
3914
4589
  values: [
3915
4590
  "sm",
@@ -3991,10 +4666,7 @@ var treeui_catalog_default = {
3991
4666
  },
3992
4667
  {
3993
4668
  name: "TPopover",
3994
- legacyAlias: "TreePopover",
3995
- aliases: [
3996
- "TreePopover"
3997
- ],
4669
+ aliases: [],
3998
4670
  package: "@treeui/vue",
3999
4671
  category: "Overlay",
4000
4672
  status: "stable",
@@ -4097,10 +4769,7 @@ var treeui_catalog_default = {
4097
4769
  },
4098
4770
  {
4099
4771
  name: "TPricing",
4100
- legacyAlias: "TreePricing",
4101
- aliases: [
4102
- "TreePricing"
4103
- ],
4772
+ aliases: [],
4104
4773
  package: "@treeui/vue",
4105
4774
  status: "stable",
4106
4775
  description: "Grid wrapper that renders multiple PricingCard components from an array of plan objects.\n",
@@ -4116,7 +4785,7 @@ var treeui_catalog_default = {
4116
4785
  },
4117
4786
  {
4118
4787
  name: "size",
4119
- type: "TreeSize",
4788
+ type: "TSize",
4120
4789
  default: "md",
4121
4790
  description: "Size applied to all child pricing cards."
4122
4791
  },
@@ -4164,10 +4833,7 @@ var treeui_catalog_default = {
4164
4833
  },
4165
4834
  {
4166
4835
  name: "TPricingCard",
4167
- legacyAlias: "TreePricingCard",
4168
- aliases: [
4169
- "TreePricingCard"
4170
- ],
4836
+ aliases: [],
4171
4837
  package: "@treeui/vue",
4172
4838
  category: "Data Display",
4173
4839
  status: "stable",
@@ -4232,7 +4898,7 @@ var treeui_catalog_default = {
4232
4898
  },
4233
4899
  {
4234
4900
  name: "size",
4235
- type: "TreeSize",
4901
+ type: "TSize",
4236
4902
  default: "md",
4237
4903
  description: "Card size \u2014 affects padding, font sizes."
4238
4904
  },
@@ -4277,7 +4943,7 @@ var treeui_catalog_default = {
4277
4943
  "Uses <h3> for plan title.",
4278
4944
  'Feature list uses role="list" with <ul>/<li>.',
4279
4945
  'Feature icons are aria-hidden="true".',
4280
- "CTA button inherits TreeButton a11y (disabled, aria-busy)."
4946
+ "CTA button inherits TButton a11y (disabled, aria-busy)."
4281
4947
  ],
4282
4948
  behavior: [],
4283
4949
  selection: {
@@ -4296,10 +4962,7 @@ var treeui_catalog_default = {
4296
4962
  },
4297
4963
  {
4298
4964
  name: "TProgress",
4299
- legacyAlias: "TreeProgress",
4300
- aliases: [
4301
- "TreeProgress"
4302
- ],
4965
+ aliases: [],
4303
4966
  package: "@treeui/vue",
4304
4967
  category: "Feedback",
4305
4968
  status: "draft",
@@ -4322,7 +4985,7 @@ var treeui_catalog_default = {
4322
4985
  },
4323
4986
  {
4324
4987
  name: "size",
4325
- type: "TreeSize",
4988
+ type: "TSize",
4326
4989
  default: "md",
4327
4990
  values: [
4328
4991
  "sm",
@@ -4360,15 +5023,12 @@ var treeui_catalog_default = {
4360
5023
  },
4361
5024
  {
4362
5025
  name: "TRadio",
4363
- legacyAlias: "TreeRadio",
4364
- aliases: [
4365
- "TreeRadio"
4366
- ],
5026
+ aliases: [],
4367
5027
  package: "@treeui/vue",
4368
5028
  kind: "primitive",
4369
5029
  status: "available",
4370
5030
  purpose: "Single radio option within a TRadioGroup; renders a native radio input.",
4371
- sourceFile: "packages/vue/src/components/TreeRadio.vue",
5031
+ sourceFile: "packages/vue/src/components/TRadio.vue",
4372
5032
  manifestFile: "docs/ai/COMPONENTS/radio.yaml",
4373
5033
  props: [
4374
5034
  {
@@ -4388,7 +5048,7 @@ var treeui_catalog_default = {
4388
5048
  },
4389
5049
  {
4390
5050
  name: "size",
4391
- type: "TreeSize",
5051
+ type: "TSize",
4392
5052
  default: "inherited_from_group",
4393
5053
  values: [
4394
5054
  "sm",
@@ -4431,16 +5091,13 @@ var treeui_catalog_default = {
4431
5091
  },
4432
5092
  {
4433
5093
  name: "TRadioGroup",
4434
- legacyAlias: "TreeRadioGroup",
4435
- aliases: [
4436
- "TreeRadioGroup"
4437
- ],
5094
+ aliases: [],
4438
5095
  package: "@treeui/vue",
4439
5096
  kind: "primitive",
4440
5097
  category: "Data Entry",
4441
5098
  status: "available",
4442
5099
  purpose: "Container for TRadio options; manages v-model for single-select from a group.",
4443
- sourceFile: "packages/vue/src/components/TreeRadioGroup.vue",
5100
+ sourceFile: "packages/vue/src/components/TRadioGroup.vue",
4444
5101
  storyFile: "apps/docs/src/stories/Radio.stories.ts",
4445
5102
  storyTitle: "Components/Data Entry/Radio",
4446
5103
  manifestFile: "docs/ai/COMPONENTS/radio.yaml",
@@ -4467,7 +5124,7 @@ var treeui_catalog_default = {
4467
5124
  },
4468
5125
  {
4469
5126
  name: "size",
4470
- type: "TreeSize",
5127
+ type: "TSize",
4471
5128
  default: "md",
4472
5129
  values: [
4473
5130
  "sm",
@@ -4509,16 +5166,13 @@ var treeui_catalog_default = {
4509
5166
  },
4510
5167
  {
4511
5168
  name: "TSelect",
4512
- legacyAlias: "TreeSelect",
4513
- aliases: [
4514
- "TreeSelect"
4515
- ],
5169
+ aliases: [],
4516
5170
  package: "@treeui/vue",
4517
5171
  kind: "primitive",
4518
5172
  category: "Data Entry",
4519
5173
  status: "available",
4520
5174
  purpose: "Custom styled dropdown select with listbox; controlled and uncontrolled via v-model and open/defaultOpen.",
4521
- sourceFile: "packages/vue/src/components/TreeSelect.vue",
5175
+ sourceFile: "packages/vue/src/components/TSelect.vue",
4522
5176
  storyFile: "apps/docs/src/stories/Select.stories.ts",
4523
5177
  storyTitle: "Components/Data Entry/Select",
4524
5178
  manifestFile: "docs/ai/COMPONENTS/select.yaml",
@@ -4530,7 +5184,7 @@ var treeui_catalog_default = {
4530
5184
  },
4531
5185
  {
4532
5186
  name: "options",
4533
- type: "TreeSelectOption[]",
5187
+ type: "TSelectOption[]",
4534
5188
  default: "[]",
4535
5189
  note: "Array of { label: string; value: string | number; disabled?: boolean }"
4536
5190
  },
@@ -4546,7 +5200,7 @@ var treeui_catalog_default = {
4546
5200
  },
4547
5201
  {
4548
5202
  name: "size",
4549
- type: "TreeSize",
5203
+ type: "TSize",
4550
5204
  default: "md",
4551
5205
  values: [
4552
5206
  "sm",
@@ -4613,7 +5267,8 @@ var treeui_catalog_default = {
4613
5267
  "check_icon_on_selected_option: true",
4614
5268
  "outside_click_closes_dropdown: true",
4615
5269
  "focus_restores_on_close: true",
4616
- "numeric_values_supported_without_string_coercion: true"
5270
+ "numeric_values_supported_without_string_coercion: true",
5271
+ "listbox_flips_above_trigger_when_space_below_is_insufficient: true"
4617
5272
  ],
4618
5273
  selection: {
4619
5274
  keywords: [
@@ -4646,20 +5301,19 @@ var treeui_catalog_default = {
4646
5301
  "Use `placeholder` when no selection has been made."
4647
5302
  ]
4648
5303
  },
4649
- recipes: []
5304
+ recipes: [
5305
+ "chart-surface"
5306
+ ]
4650
5307
  },
4651
5308
  {
4652
5309
  name: "TSelectableList",
4653
- legacyAlias: "TreeSelectableList",
4654
- aliases: [
4655
- "TreeSelectableList"
4656
- ],
5310
+ aliases: [],
4657
5311
  package: "@treeui/vue",
4658
5312
  kind: "selection",
4659
5313
  category: "Navigation & Disclosure",
4660
5314
  status: "available",
4661
5315
  purpose: "Rich single-selection list for options with description and metadata.",
4662
- sourceFile: "packages/vue/src/components/TreeSelectableList.vue",
5316
+ sourceFile: "packages/vue/src/components/TSelectableList.vue",
4663
5317
  storyFile: "apps/docs/src/stories/SelectableList.stories.ts",
4664
5318
  storyTitle: "Components/Navigation & Disclosure/SelectableList",
4665
5319
  manifestFile: "docs/ai/COMPONENTS/selectable-list.yaml",
@@ -4676,13 +5330,13 @@ var treeui_catalog_default = {
4676
5330
  },
4677
5331
  {
4678
5332
  name: "items",
4679
- type: "TreeSelectableListItem[]",
5333
+ type: "TSelectableListItem[]",
4680
5334
  default: "[]",
4681
5335
  note: "Array of `{ label, value, description?, meta?, disabled? }`."
4682
5336
  },
4683
5337
  {
4684
5338
  name: "size",
4685
- type: "TreeSize",
5339
+ type: "TSize",
4686
5340
  default: "md",
4687
5341
  values: [
4688
5342
  "sm",
@@ -4759,16 +5413,13 @@ var treeui_catalog_default = {
4759
5413
  },
4760
5414
  {
4761
5415
  name: "TSidebar",
4762
- legacyAlias: "TreeSidebar",
4763
- aliases: [
4764
- "TreeSidebar"
4765
- ],
5416
+ aliases: [],
4766
5417
  package: "@treeui/vue",
4767
5418
  kind: "layout",
4768
5419
  category: "Layout",
4769
5420
  status: "available",
4770
5421
  purpose: "Persistent or collapsible side shell for app navigation and secondary workspace controls.",
4771
- sourceFile: "packages/vue/src/components/TreeSidebar.vue",
5422
+ sourceFile: "packages/vue/src/components/TSidebar.vue",
4772
5423
  storyFile: "apps/docs/src/stories/Sidebar.stories.ts",
4773
5424
  storyTitle: "Components/Layout/Sidebar",
4774
5425
  manifestFile: "docs/ai/COMPONENTS/sidebar.yaml",
@@ -4795,7 +5446,7 @@ var treeui_catalog_default = {
4795
5446
  },
4796
5447
  {
4797
5448
  name: "size",
4798
- type: "TreeSize",
5449
+ type: "TSize",
4799
5450
  default: "md",
4800
5451
  values: [
4801
5452
  "sm",
@@ -4805,7 +5456,7 @@ var treeui_catalog_default = {
4805
5456
  },
4806
5457
  {
4807
5458
  name: "side",
4808
- type: "TreeSidebarSide",
5459
+ type: "TSidebarSide",
4809
5460
  default: "left",
4810
5461
  values: [
4811
5462
  "left",
@@ -4874,7 +5525,8 @@ var treeui_catalog_default = {
4874
5525
  "controlled_and_uncontrolled_collapsed_state: true",
4875
5526
  "provides_collapsed_state_to_descendants: true",
4876
5527
  "left_and_right_variants: true",
4877
- "exposes_slot_props_with_collapsed_state: true"
5528
+ "exposes_slot_props_with_collapsed_state: true",
5529
+ "collapsed_state_centers_header_and_footer_content: true"
4878
5530
  ],
4879
5531
  selection: {
4880
5532
  keywords: [
@@ -4899,7 +5551,8 @@ var treeui_catalog_default = {
4899
5551
  required: [],
4900
5552
  notes: [
4901
5553
  "Pair with `TNavMenu` for app-section navigation.",
4902
- "Use controlled `collapsed` state when the app shell persists layout preferences."
5554
+ "Use controlled `collapsed` state when the app shell persists layout preferences.",
5555
+ "Prefer `TAppShell` when you also want full-viewport sizing, a top header, and a responsive mobile drawer."
4903
5556
  ]
4904
5557
  },
4905
5558
  recipes: [
@@ -4908,16 +5561,13 @@ var treeui_catalog_default = {
4908
5561
  },
4909
5562
  {
4910
5563
  name: "TSkeleton",
4911
- legacyAlias: "TreeSkeleton",
4912
- aliases: [
4913
- "TreeSkeleton"
4914
- ],
5564
+ aliases: [],
4915
5565
  package: "@treeui/vue",
4916
5566
  kind: "feedback",
4917
5567
  category: "Feedback",
4918
5568
  status: "available",
4919
5569
  purpose: "Placeholder shimmer for loading states. Renders an animated block that indicates content is being loaded.",
4920
- sourceFile: "packages/vue/src/components/TreeSkeleton.vue",
5570
+ sourceFile: "packages/vue/src/components/TSkeleton.vue",
4921
5571
  storyFile: "apps/docs/src/stories/Skeleton.stories.ts",
4922
5572
  storyTitle: "Components/Feedback/Skeleton",
4923
5573
  manifestFile: "docs/ai/COMPONENTS/skeleton.yaml",
@@ -4973,24 +5623,144 @@ var treeui_catalog_default = {
4973
5623
  recipes: []
4974
5624
  },
4975
5625
  {
4976
- name: "TSpinner",
4977
- legacyAlias: "TreeSpinner",
4978
- aliases: [
4979
- "TreeSpinner"
5626
+ name: "TSparkline",
5627
+ aliases: [],
5628
+ package: "@treeui/vue",
5629
+ kind: "data-display",
5630
+ category: "Data Display",
5631
+ status: "available",
5632
+ purpose: "Tiny, axis-less inline trend chart (line, area, or bar) sized for stat tiles, table cells, and running text.",
5633
+ sourceFile: "packages/vue/src/components/TSparkline.vue",
5634
+ storyFile: "apps/docs/src/stories/Sparkline.stories.ts",
5635
+ storyTitle: "Components/Data Display/Sparkline",
5636
+ manifestFile: "docs/ai/COMPONENTS/sparkline.yaml",
5637
+ props: [
5638
+ {
5639
+ name: "data",
5640
+ type: "number[]",
5641
+ default: "[]"
5642
+ },
5643
+ {
5644
+ name: "type",
5645
+ type: "line | area | bar",
5646
+ default: "line"
5647
+ },
5648
+ {
5649
+ name: "color",
5650
+ type: "string",
5651
+ default: "var(--tree-color-chart-1)",
5652
+ note: "Any CSS color."
5653
+ },
5654
+ {
5655
+ name: "width",
5656
+ type: "number",
5657
+ default: "120"
5658
+ },
5659
+ {
5660
+ name: "height",
5661
+ type: "number",
5662
+ default: "32"
5663
+ },
5664
+ {
5665
+ name: "smooth",
5666
+ type: "boolean",
5667
+ default: "false",
5668
+ note: "Curved line/area."
5669
+ },
5670
+ {
5671
+ name: "strokeWidth",
5672
+ type: "number",
5673
+ default: "2",
5674
+ note: "Line/area only."
5675
+ },
5676
+ {
5677
+ name: "min",
5678
+ type: "number",
5679
+ default: "data min"
5680
+ },
5681
+ {
5682
+ name: "max",
5683
+ type: "number",
5684
+ default: "data max"
5685
+ },
5686
+ {
5687
+ name: "showLastPoint",
5688
+ type: "boolean",
5689
+ default: "false",
5690
+ note: "Marker on the final point (line/area)."
5691
+ },
5692
+ {
5693
+ name: "ariaLabel",
5694
+ type: "string",
5695
+ default: "Trend sparkline"
5696
+ }
4980
5697
  ],
5698
+ events: [],
5699
+ slots: [],
5700
+ a11y: [
5701
+ "Renders role=img with an aria-label; pass a specific one for meaningful trends.",
5702
+ "Pair with a visible number \u2014 a sparkline supplements a value, it does not replace it."
5703
+ ],
5704
+ behavior: [
5705
+ "no_axes_or_legend: true",
5706
+ "flat_series_renders_centered: true",
5707
+ "scales_to_intrinsic_width_and_height: true"
5708
+ ],
5709
+ selection: {
5710
+ keywords: [
5711
+ "sparkline",
5712
+ "mini chart",
5713
+ "inline chart",
5714
+ "micro trend",
5715
+ "trend line",
5716
+ "table chart"
5717
+ ],
5718
+ useWhen: [
5719
+ "You want a compact trend beside a value, in a table cell, or inline in text.",
5720
+ "No axes, legend, or tooltip are required."
5721
+ ],
5722
+ avoidWhen: [
5723
+ "You need axes, multiple labeled series, or a tooltip \u2014 use TChart."
5724
+ ],
5725
+ alternatives: [
5726
+ {
5727
+ component: "TChart",
5728
+ when: "The chart needs axes, a legend, or a tooltip."
5729
+ },
5730
+ {
5731
+ component: "TStat",
5732
+ when: "A single value with a trend badge is enough."
5733
+ }
5734
+ ]
5735
+ },
5736
+ setup: {
5737
+ required: [],
5738
+ notes: [
5739
+ "Pass `data` as `number[]`; there are no axes, legend, or tooltip by design.",
5740
+ "Size it with `width`/`height`; use it inside `TStat`, table cells, or text.",
5741
+ "Always keep a visible number nearby \u2014 a sparkline supplements a value, it does not replace it."
5742
+ ]
5743
+ },
5744
+ recipes: [
5745
+ "metric-dashboard"
5746
+ ]
5747
+ },
5748
+ {
5749
+ name: "TSpinner",
5750
+ aliases: [],
4981
5751
  package: "@treeui/vue",
4982
5752
  kind: "feedback",
4983
5753
  category: "Feedback",
4984
5754
  status: "available",
4985
5755
  purpose: "Accessible loading indicator.",
4986
- sourceFile: "packages/vue/src/components/TreeSpinner.vue",
5756
+ sourceFile: "packages/vue/src/components/TSpinner.vue",
4987
5757
  storyFile: "apps/docs/src/stories/Spinner.stories.ts",
4988
5758
  storyTitle: "Components/Feedback/Spinner",
4989
5759
  manifestFile: "docs/ai/COMPONENTS/spinner.yaml",
4990
5760
  props: [
4991
5761
  {
4992
5762
  name: "size",
4993
- type: "TreeSize",
5763
+ type: "TSize",
4994
5764
  default: "md",
4995
5765
  values: [
4996
5766
  "sm",
@@ -5026,16 +5796,13 @@ var treeui_catalog_default = {
5026
5796
  },
5027
5797
  {
5028
5798
  name: "TStack",
5029
- legacyAlias: "TreeStack",
5030
- aliases: [
5031
- "TreeStack"
5032
- ],
5799
+ aliases: [],
5033
5800
  package: "@treeui/vue",
5034
5801
  kind: "layout",
5035
5802
  category: "Layout",
5036
5803
  status: "available",
5037
5804
  purpose: "One-dimensional spacing and alignment wrapper for vertical or horizontal compositions.",
5038
- sourceFile: "packages/vue/src/components/TreeStack.vue",
5805
+ sourceFile: "packages/vue/src/components/TStack.vue",
5039
5806
  storyFile: "apps/docs/src/stories/Stack.stories.ts",
5040
5807
  storyTitle: "Components/Layout/Stack",
5041
5808
  manifestFile: "docs/ai/COMPONENTS/stack.yaml",
@@ -5047,7 +5814,7 @@ var treeui_catalog_default = {
5047
5814
  },
5048
5815
  {
5049
5816
  name: "direction",
5050
- type: "TreeStackDirection",
5817
+ type: "TStackDirection",
5051
5818
  default: "vertical",
5052
5819
  values: [
5053
5820
  "vertical",
@@ -5127,16 +5894,13 @@ var treeui_catalog_default = {
5127
5894
  },
5128
5895
  {
5129
5896
  name: "TStat",
5130
- legacyAlias: "TreeStat",
5131
- aliases: [
5132
- "TreeStat"
5133
- ],
5897
+ aliases: [],
5134
5898
  package: "@treeui/vue",
5135
5899
  kind: "data-display",
5136
5900
  category: "Data Display",
5137
5901
  status: "available",
5138
5902
  purpose: "Compact KPI display with label, value, trend, metadata, and optional icon.",
5139
- sourceFile: "packages/vue/src/components/TreeStat.vue",
5903
+ sourceFile: "packages/vue/src/components/TStat.vue",
5140
5904
  storyFile: "apps/docs/src/stories/Stat.stories.ts",
5141
5905
  storyTitle: "Components/Data Display/Stat",
5142
5906
  manifestFile: "docs/ai/COMPONENTS/stat.yaml",
@@ -5163,7 +5927,7 @@ var treeui_catalog_default = {
5163
5927
  },
5164
5928
  {
5165
5929
  name: "tone",
5166
- type: "TreeStatTone",
5930
+ type: "TStatTone",
5167
5931
  default: "neutral",
5168
5932
  values: [
5169
5933
  "neutral",
@@ -5175,7 +5939,7 @@ var treeui_catalog_default = {
5175
5939
  },
5176
5940
  {
5177
5941
  name: "trendDirection",
5178
- type: "TreeStatTrendDirection",
5942
+ type: "TStatTrendDirection",
5179
5943
  default: "neutral",
5180
5944
  values: [
5181
5945
  "up",
@@ -5234,6 +5998,10 @@ var treeui_catalog_default = {
5234
5998
  {
5235
5999
  component: "TCard",
5236
6000
  when: "The content is not a metric."
6001
+ },
6002
+ {
6003
+ component: "TSparkline",
6004
+ when: "You want to show the metric's trend as an inline mini-chart."
5237
6005
  }
5238
6006
  ]
5239
6007
  },
@@ -5242,23 +6010,21 @@ var treeui_catalog_default = {
5242
6010
  notes: []
5243
6011
  },
5244
6012
  recipes: [
5245
- "stat-grid"
6013
+ "stat-grid",
6014
+ "metric-dashboard"
5246
6015
  ]
5247
6016
  },
5248
6017
  {
5249
6018
  name: "TSteps",
5250
- legacyAlias: "TreeStepper",
5251
6019
  aliases: [
5252
- "TStepper",
5253
- "TreeStepper",
5254
- "TreeSteps"
6020
+ "TStepper"
5255
6021
  ],
5256
6022
  package: "@treeui/vue",
5257
6023
  kind: "navigation",
5258
6024
  category: "Navigation & Disclosure",
5259
6025
  status: "available",
5260
6026
  purpose: "Stepper component for visualizing workflow progress, with optional interactive selection.",
5261
- sourceFile: "packages/vue/src/components/TreeSteps.vue",
6027
+ sourceFile: "packages/vue/src/components/TSteps.vue",
5262
6028
  storyFile: "apps/docs/src/stories/Steps.stories.ts",
5263
6029
  storyTitle: "Components/Navigation & Disclosure/Steps",
5264
6030
  manifestFile: "docs/ai/COMPONENTS/steps.yaml",
@@ -5275,13 +6041,13 @@ var treeui_catalog_default = {
5275
6041
  },
5276
6042
  {
5277
6043
  name: "items",
5278
- type: "TreeStepItem[]",
6044
+ type: "TStepItem[]",
5279
6045
  default: "[]",
5280
6046
  note: "Array of `{ label, value, description?, meta?, status?, disabled? }`."
5281
6047
  },
5282
6048
  {
5283
6049
  name: "size",
5284
- type: "TreeSize",
6050
+ type: "TSize",
5285
6051
  default: "md",
5286
6052
  values: [
5287
6053
  "sm",
@@ -5291,7 +6057,7 @@ var treeui_catalog_default = {
5291
6057
  },
5292
6058
  {
5293
6059
  name: "orientation",
5294
- type: "TreeStepOrientation",
6060
+ type: "TStepOrientation",
5295
6061
  default: "horizontal",
5296
6062
  values: [
5297
6063
  "horizontal",
@@ -5354,16 +6120,13 @@ var treeui_catalog_default = {
5354
6120
  },
5355
6121
  {
5356
6122
  name: "TSwitch",
5357
- legacyAlias: "TreeSwitch",
5358
- aliases: [
5359
- "TreeSwitch"
5360
- ],
6123
+ aliases: [],
5361
6124
  package: "@treeui/vue",
5362
6125
  kind: "primitive",
5363
6126
  category: "Data Entry",
5364
6127
  status: "available",
5365
6128
  purpose: "On/off toggle; semantic alternative to checkbox for settings. Supports v-model via modelValue.",
5366
- sourceFile: "packages/vue/src/components/TreeSwitch.vue",
6129
+ sourceFile: "packages/vue/src/components/TSwitch.vue",
5367
6130
  storyFile: "apps/docs/src/stories/Switch.stories.ts",
5368
6131
  storyTitle: "Components/Data Entry/Switch",
5369
6132
  manifestFile: "docs/ai/COMPONENTS/switch.yaml",
@@ -5375,7 +6138,7 @@ var treeui_catalog_default = {
5375
6138
  },
5376
6139
  {
5377
6140
  name: "size",
5378
- type: "TreeSize",
6141
+ type: "TSize",
5379
6142
  default: "md",
5380
6143
  values: [
5381
6144
  "sm",
@@ -5446,21 +6209,18 @@ var treeui_catalog_default = {
5446
6209
  },
5447
6210
  {
5448
6211
  name: "TTable",
5449
- legacyAlias: "TreeTable",
5450
- aliases: [
5451
- "TreeTable"
5452
- ],
6212
+ aliases: [],
5453
6213
  package: "@treeui/vue",
5454
6214
  category: "Data Display",
5455
6215
  description: "Sortable, accessible data table with column definitions and row data.",
5456
- sourceFile: "packages/vue/src/components/TreeTable.vue",
6216
+ sourceFile: "packages/vue/src/components/TTable.vue",
5457
6217
  storyFile: "apps/docs/src/stories/Table.stories.ts",
5458
6218
  storyTitle: "Components/Data Display/Table",
5459
6219
  manifestFile: "docs/ai/COMPONENTS/table.yaml",
5460
6220
  props: [
5461
6221
  {
5462
6222
  name: "columns",
5463
- type: "TreeTableColumn[]",
6223
+ type: "TTableColumn[]",
5464
6224
  required: true,
5465
6225
  description: "Array of column definitions with key, label, sortable, align, and width."
5466
6226
  },
@@ -5472,7 +6232,7 @@ var treeui_catalog_default = {
5472
6232
  },
5473
6233
  {
5474
6234
  name: "size",
5475
- type: "TreeSize",
6235
+ type: "TSize",
5476
6236
  default: "md",
5477
6237
  values: [
5478
6238
  "sm",
@@ -5482,7 +6242,7 @@ var treeui_catalog_default = {
5482
6242
  },
5483
6243
  {
5484
6244
  name: "sortBy",
5485
- type: "TreeTableSortState",
6245
+ type: "TTableSortState",
5486
6246
  required: false,
5487
6247
  description: "Controlled sort state. When provided, overrides internal sort tracking."
5488
6248
  }
@@ -5491,7 +6251,7 @@ var treeui_catalog_default = {
5491
6251
  {
5492
6252
  name: "sort",
5493
6253
  description: "Emitted when a sortable column header is clicked.",
5494
- payload: "TreeTableSortState"
6254
+ payload: "TTableSortState"
5495
6255
  }
5496
6256
  ],
5497
6257
  slots: [
@@ -5550,16 +6310,13 @@ var treeui_catalog_default = {
5550
6310
  },
5551
6311
  {
5552
6312
  name: "TTabs",
5553
- legacyAlias: "TreeTabs",
5554
- aliases: [
5555
- "TreeTabs"
5556
- ],
6313
+ aliases: [],
5557
6314
  package: "@treeui/vue",
5558
6315
  kind: "navigation",
5559
6316
  category: "Navigation",
5560
6317
  status: "available",
5561
6318
  purpose: "Tabbed panel navigation with full keyboard support and automatic/manual activation modes.",
5562
- sourceFile: "packages/vue/src/components/TreeTabs.vue",
6319
+ sourceFile: "packages/vue/src/components/TTabs.vue",
5563
6320
  storyFile: "apps/docs/src/stories/Tabs.stories.ts",
5564
6321
  storyTitle: "Components/Navigation/Tabs",
5565
6322
  manifestFile: "docs/ai/COMPONENTS/tabs.yaml",
@@ -5578,7 +6335,7 @@ var treeui_catalog_default = {
5578
6335
  },
5579
6336
  {
5580
6337
  name: "size",
5581
- type: "TreeSize",
6338
+ type: "TSize",
5582
6339
  default: "md",
5583
6340
  values: [
5584
6341
  "sm",
@@ -5659,21 +6416,18 @@ var treeui_catalog_default = {
5659
6416
  },
5660
6417
  {
5661
6418
  name: "TTag",
5662
- legacyAlias: "TreeTag",
5663
- aliases: [
5664
- "TreeTag"
5665
- ],
6419
+ aliases: [],
5666
6420
  package: "@treeui/vue",
5667
6421
  category: "Data Display",
5668
6422
  description: "Removable label/chip for filters and selections.",
5669
- sourceFile: "packages/vue/src/components/TreeTag.vue",
6423
+ sourceFile: "packages/vue/src/components/TTag.vue",
5670
6424
  storyFile: "apps/docs/src/stories/Tag.stories.ts",
5671
6425
  storyTitle: "Components/Data Display/Tag",
5672
6426
  manifestFile: "docs/ai/COMPONENTS/tag.yaml",
5673
6427
  props: [
5674
6428
  {
5675
6429
  name: "variant",
5676
- type: "TreeTagVariant",
6430
+ type: "TTagVariant",
5677
6431
  default: "soft",
5678
6432
  values: [
5679
6433
  "solid",
@@ -5683,7 +6437,7 @@ var treeui_catalog_default = {
5683
6437
  },
5684
6438
  {
5685
6439
  name: "size",
5686
- type: "TreeSize",
6440
+ type: "TSize",
5687
6441
  default: "md",
5688
6442
  values: [
5689
6443
  "sm",
@@ -5742,16 +6496,13 @@ var treeui_catalog_default = {
5742
6496
  },
5743
6497
  {
5744
6498
  name: "TTextarea",
5745
- legacyAlias: "TreeTextarea",
5746
- aliases: [
5747
- "TreeTextarea"
5748
- ],
6499
+ aliases: [],
5749
6500
  package: "@treeui/vue",
5750
6501
  kind: "primitive",
5751
6502
  category: "Data Entry",
5752
6503
  status: "available",
5753
6504
  purpose: "Multi-line text field with size, loading, invalid states, and auto-grow option.",
5754
- sourceFile: "packages/vue/src/components/TreeTextarea.vue",
6505
+ sourceFile: "packages/vue/src/components/TTextarea.vue",
5755
6506
  storyFile: "apps/docs/src/stories/Textarea.stories.ts",
5756
6507
  storyTitle: "Components/Data Entry/Textarea",
5757
6508
  manifestFile: "docs/ai/COMPONENTS/textarea.yaml",
@@ -5763,7 +6514,7 @@ var treeui_catalog_default = {
5763
6514
  },
5764
6515
  {
5765
6516
  name: "size",
5766
- type: "TreeSize",
6517
+ type: "TSize",
5767
6518
  default: "md",
5768
6519
  values: [
5769
6520
  "sm",
@@ -5848,28 +6599,25 @@ var treeui_catalog_default = {
5848
6599
  },
5849
6600
  {
5850
6601
  name: "TTimeline",
5851
- legacyAlias: "TreeTimeline",
5852
- aliases: [
5853
- "TreeTimeline"
5854
- ],
6602
+ aliases: [],
5855
6603
  package: "@treeui/vue",
5856
6604
  kind: "data_display",
5857
6605
  status: "available",
5858
6606
  purpose: "Vertical timeline for activity history, audits, release events, and chronological product updates.",
5859
- sourceFile: "packages/vue/src/components/TreeTimeline.vue",
6607
+ sourceFile: "packages/vue/src/components/TTimeline.vue",
5860
6608
  storyFile: "apps/docs/src/stories/Timeline.stories.ts",
5861
6609
  storyTitle: "Release queued for review",
5862
6610
  manifestFile: "docs/ai/COMPONENTS/timeline.yaml",
5863
6611
  props: [
5864
6612
  {
5865
6613
  name: "items",
5866
- type: "TreeTimelineItem[]",
6614
+ type: "TTimelineItem[]",
5867
6615
  default: "[]",
5868
6616
  note: "Array of { id?: string | number; title: string; description?: string; meta?: string; timestamp?: string; datetime?: string; tone?: 'neutral' | 'brand' | 'success' | 'warning' | 'danger' }"
5869
6617
  },
5870
6618
  {
5871
6619
  name: "size",
5872
- type: "TreeSize",
6620
+ type: "TSize",
5873
6621
  default: "md",
5874
6622
  values: [
5875
6623
  "sm",
@@ -5911,15 +6659,12 @@ var treeui_catalog_default = {
5911
6659
  },
5912
6660
  {
5913
6661
  name: "TToast",
5914
- legacyAlias: "TreeToast",
5915
- aliases: [
5916
- "TreeToast"
5917
- ],
6662
+ aliases: [],
5918
6663
  package: "@treeui/vue",
5919
6664
  kind: "feedback",
5920
6665
  status: "available",
5921
6666
  purpose: "Ephemeral notification stack driven by a composable. Renders toast items inside a positioned container with auto-dismiss and manual close.",
5922
- sourceFile: "packages/vue/src/components/TreeToast.vue",
6667
+ sourceFile: "packages/vue/src/components/TToast.vue",
5923
6668
  manifestFile: "docs/ai/COMPONENTS/toast.yaml",
5924
6669
  props: [],
5925
6670
  events: [
@@ -5977,16 +6722,13 @@ var treeui_catalog_default = {
5977
6722
  },
5978
6723
  {
5979
6724
  name: "TToggleGroup",
5980
- legacyAlias: "TreeToggleGroup",
5981
- aliases: [
5982
- "TreeToggleGroup"
5983
- ],
6725
+ aliases: [],
5984
6726
  package: "@treeui/vue",
5985
6727
  kind: "selection",
5986
6728
  category: "Data Entry",
5987
6729
  status: "available",
5988
6730
  purpose: "Segmented button group for single or multiple visible choices.",
5989
- sourceFile: "packages/vue/src/components/TreeToggleGroup.vue",
6731
+ sourceFile: "packages/vue/src/components/TToggleGroup.vue",
5990
6732
  storyFile: "apps/docs/src/stories/ToggleGroup.stories.ts",
5991
6733
  storyTitle: "Components/Data Entry/ToggleGroup",
5992
6734
  manifestFile: "docs/ai/COMPONENTS/toggle-group.yaml",
@@ -5998,13 +6740,13 @@ var treeui_catalog_default = {
5998
6740
  },
5999
6741
  {
6000
6742
  name: "options",
6001
- type: "TreeToggleGroupOption[]",
6743
+ type: "TToggleGroupOption[]",
6002
6744
  default: "[]",
6003
6745
  note: "Array of `{ label, value, disabled? }`."
6004
6746
  },
6005
6747
  {
6006
6748
  name: "selectionMode",
6007
- type: "TreeToggleGroupSelectionMode",
6749
+ type: "TToggleGroupSelectionMode",
6008
6750
  default: "single",
6009
6751
  values: [
6010
6752
  "single",
@@ -6013,7 +6755,7 @@ var treeui_catalog_default = {
6013
6755
  },
6014
6756
  {
6015
6757
  name: "size",
6016
- type: "TreeSize",
6758
+ type: "TSize",
6017
6759
  default: "md",
6018
6760
  values: [
6019
6761
  "sm",
@@ -6023,7 +6765,7 @@ var treeui_catalog_default = {
6023
6765
  },
6024
6766
  {
6025
6767
  name: "variant",
6026
- type: "TreeToggleGroupVariant",
6768
+ type: "TToggleGroupVariant",
6027
6769
  default: "outline",
6028
6770
  values: [
6029
6771
  "outline",
@@ -6097,16 +6839,13 @@ var treeui_catalog_default = {
6097
6839
  },
6098
6840
  {
6099
6841
  name: "TTooltip",
6100
- legacyAlias: "TreeTooltip",
6101
- aliases: [
6102
- "TreeTooltip"
6103
- ],
6842
+ aliases: [],
6104
6843
  package: "@treeui/vue",
6105
6844
  kind: "overlay",
6106
6845
  category: "Overlay",
6107
6846
  status: "available",
6108
6847
  purpose: "Small contextual overlay shown on hover or focus.",
6109
- sourceFile: "packages/vue/src/components/TreeTooltip.vue",
6848
+ sourceFile: "packages/vue/src/components/TTooltip.vue",
6110
6849
  storyFile: "apps/docs/src/stories/Tooltip.stories.ts",
6111
6850
  storyTitle: "Components/Overlay/Tooltip",
6112
6851
  manifestFile: "docs/ai/COMPONENTS/tooltip.yaml",
@@ -6133,7 +6872,7 @@ var treeui_catalog_default = {
6133
6872
  },
6134
6873
  {
6135
6874
  name: "side",
6136
- type: "TreeTooltipSide",
6875
+ type: "TTooltipSide",
6137
6876
  default: "top",
6138
6877
  values: [
6139
6878
  "top",
@@ -6212,18 +6951,15 @@ var treeui_catalog_default = {
6212
6951
  },
6213
6952
  {
6214
6953
  name: "TTreeView",
6215
- legacyAlias: "TreeTreeView",
6216
- aliases: [
6217
- "TreeTreeView"
6218
- ],
6954
+ aliases: [],
6219
6955
  package: "@treeui/vue",
6220
6956
  kind: "selection",
6221
6957
  category: "Navigation & Disclosure",
6222
6958
  status: "available",
6223
6959
  purpose: "Hierarchical tree view with expansion, keyboard navigation, and single or multiple selection.",
6224
- sourceFile: "packages/vue/src/components/TreeTreeView.vue",
6960
+ sourceFile: "packages/vue/src/components/TTreeView.vue",
6225
6961
  storyFile: "apps/docs/src/stories/TreeView.stories.ts",
6226
- storyTitle: "Components/Navigation & Disclosure/TreeView",
6962
+ storyTitle: "Components/Navigation & Disclosure/TView",
6227
6963
  manifestFile: "docs/ai/COMPONENTS/tree-view.yaml",
6228
6964
  props: [
6229
6965
  {
@@ -6238,13 +6974,13 @@ var treeui_catalog_default = {
6238
6974
  },
6239
6975
  {
6240
6976
  name: "nodes",
6241
- type: "TreeTreeViewNode[]",
6977
+ type: "TTreeViewNode[]",
6242
6978
  default: "[]",
6243
6979
  note: "Array of `{ id, label, description?, meta?, disabled?, children? }`."
6244
6980
  },
6245
6981
  {
6246
6982
  name: "selectionMode",
6247
- type: "TreeTreeViewSelectionMode",
6983
+ type: "TTreeViewSelectionMode",
6248
6984
  default: "single",
6249
6985
  values: [
6250
6986
  "single",
@@ -6775,7 +7511,7 @@ var createTreeuiMcpServer = () => {
6775
7511
  inputSchema: {
6776
7512
  type: "object",
6777
7513
  properties: {
6778
- name: { type: "string", description: "Component name or alias, such as TSelect or TreeSelect." }
7514
+ name: { type: "string", description: "Component name or alias, such as TSelect or TSelect." }
6779
7515
  },
6780
7516
  required: ["name"]
6781
7517
  }