@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/index.cjs CHANGED
@@ -47,9 +47,9 @@ module.exports = __toCommonJS(index_exports);
47
47
 
48
48
  // src/generated/treeui.catalog.json
49
49
  var treeui_catalog_default = {
50
- generatedAt: "2026-04-10T16:42:52.904Z",
50
+ generatedAt: "2026-07-15T22:47:49.302Z",
51
51
  packageName: "@treeui/vue",
52
- packageVersion: "0.6.1",
52
+ packageVersion: "0.13.0",
53
53
  decisionGuides: [
54
54
  {
55
55
  id: "single-choice",
@@ -247,6 +247,50 @@ var treeui_catalog_default = {
247
247
  notes: []
248
248
  }
249
249
  ]
250
+ },
251
+ {
252
+ id: "data-viz-choice",
253
+ question: "Visualize numeric data",
254
+ options: [
255
+ {
256
+ use: "TStat",
257
+ when: [
258
+ "The story is a single headline number, optionally with a trend and delta.",
259
+ "It is not a plot \u2014 prefer the number over a chart when one value says it."
260
+ ],
261
+ notes: []
262
+ },
263
+ {
264
+ use: "TSparkline",
265
+ when: [
266
+ "You want an inline micro-trend next to a value, in a table cell, or in text.",
267
+ "No axes, legend, or tooltip are needed."
268
+ ],
269
+ notes: []
270
+ },
271
+ {
272
+ use: "TChart",
273
+ when: [
274
+ "You need line, area, or bar plots with axes, gridlines, legend, and hover tooltip.",
275
+ "There are one or more series over shared categories."
276
+ ],
277
+ notes: []
278
+ },
279
+ {
280
+ use: "TDonutChart",
281
+ when: [
282
+ "The data is a part-of-whole breakdown (donut or pie)."
283
+ ],
284
+ notes: []
285
+ },
286
+ {
287
+ use: "TProgress",
288
+ when: [
289
+ "You are showing completion toward a single target, not a distribution or trend."
290
+ ],
291
+ notes: []
292
+ }
293
+ ]
250
294
  }
251
295
  ],
252
296
  recipes: [
@@ -296,11 +340,28 @@ var treeui_catalog_default = {
296
340
  "Set end `min` from the selected start time when appropriate."
297
341
  ]
298
342
  },
343
+ {
344
+ id: "app-shell",
345
+ name: "Full-viewport application shell",
346
+ useWhen: [
347
+ "The app needs a header plus side navigation that fills the whole screen and adapts to mobile.",
348
+ "The layout must use the full page width on large monitors, not a centered column."
349
+ ],
350
+ compose: [
351
+ "TAppShell",
352
+ "TNavMenu"
353
+ ],
354
+ notes: [
355
+ "`TAppShell` orchestrates the header, sidebar, and fluid content in one component; put a `TNavMenu` in its `sidebar` slot and it inherits collapsed state automatically.",
356
+ "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.",
357
+ "Mount it at the app root. Wrap only inner regions in `TContainer` if a specific area needs a constrained reading width."
358
+ ]
359
+ },
299
360
  {
300
361
  id: "sidebar-shell",
301
362
  name: "Sidebar application shell",
302
363
  useWhen: [
303
- "The screen needs persistent section navigation."
364
+ "The screen needs persistent section navigation and you are composing the shell by hand."
304
365
  ],
305
366
  compose: [
306
367
  "TSidebar",
@@ -309,7 +370,8 @@ var treeui_catalog_default = {
309
370
  "TContainer"
310
371
  ],
311
372
  notes: [
312
- "Let `TNavMenu` inherit collapsed state from `TSidebar` when possible."
373
+ "Let `TNavMenu` inherit collapsed state from `TSidebar` when possible.",
374
+ "Prefer `TAppShell` (recipe `app-shell`) when you also need full-viewport sizing and a responsive mobile drawer."
313
375
  ]
314
376
  },
315
377
  {
@@ -407,15 +469,38 @@ var treeui_catalog_default = {
407
469
  id: "chart-surface",
408
470
  name: "Chart surface",
409
471
  useWhen: [
410
- "A screen needs data visualization, but the charting engine should stay external to TreeUI."
472
+ "A screen needs data visualization inside a framed, titled surface."
411
473
  ],
412
474
  compose: [
413
475
  "TCard",
414
476
  "TStack",
415
- "external chart library"
477
+ "TChart",
478
+ "TSelect"
416
479
  ],
417
480
  notes: [
418
- "Use TreeUI for the surrounding surface, headings, badges, filters, and empty/loading states."
481
+ "Prefer the native TChart / TDonutChart / TSparkline \u2014 no external charting library is required.",
482
+ "Use TreeUI for the surrounding surface, headings, badges, range filters, and empty/loading states.",
483
+ "TChart has its own loading and empty slots; you can still wrap it in TCard for the frame.",
484
+ "Only reach for an external chart engine for chart types TreeUI does not cover yet (e.g. scatter, heatmap)."
485
+ ]
486
+ },
487
+ {
488
+ id: "metric-dashboard",
489
+ name: "Metric dashboard",
490
+ useWhen: [
491
+ "A dashboard shows KPIs alongside trends and breakdowns."
492
+ ],
493
+ compose: [
494
+ "TStat",
495
+ "TSparkline",
496
+ "TChart",
497
+ "TDonutChart",
498
+ "TGrid"
499
+ ],
500
+ notes: [
501
+ "Lead with TStat tiles; embed a TSparkline in a stat's meta slot for the inline trend.",
502
+ "Use one TChart for the main time series and a TDonutChart for a part-of-whole split.",
503
+ "Keep series colors stable across the dashboard \u2014 rely on the --tree-color-chart-* order, do not remap by rank."
419
504
  ]
420
505
  },
421
506
  {
@@ -490,7 +575,7 @@ var treeui_catalog_default = {
490
575
  },
491
576
  globalRules: [
492
577
  "Always import `@treeui/vue/style.css` once in the consuming application.",
493
- "Compatibility aliases such as `TreeButton` remain available but are not the preferred direction.",
578
+ "All components use the `T<Name>` export prefix; there are no `Tree<Name>` aliases.",
494
579
  "Form controls use `modelValue` + `update:modelValue`.",
495
580
  "Overlay-style components generally support controlled and uncontrolled open state.",
496
581
  "Date-only values use `YYYY-MM-DD`.",
@@ -565,17 +650,27 @@ var treeui_catalog_default = {
565
650
  "Use `accept`, `multiple`, and size limits in the app layer to constrain uploads."
566
651
  ]
567
652
  },
653
+ TAppShell: {
654
+ required: [],
655
+ notes: [
656
+ "Mount at the app root; it fills the viewport (100dvh, full width) and scrolls its content region independently.",
657
+ "Put navigation in the `sidebar` slot (e.g. `TNavMenu`) \u2014 it inherits collapsed state from the shell provider like `TSidebar`.",
658
+ "Leave `mobile` unset to auto-switch to an off-canvas drawer at `breakpoint`, or bind `mobile` to control it explicitly.",
659
+ "Use `v-model:collapsed` for the desktop rail and `v-model:sidebarOpen` for the mobile drawer when the app persists layout state."
660
+ ]
661
+ },
568
662
  TSidebar: {
569
663
  required: [],
570
664
  notes: [
571
665
  "Pair with `TNavMenu` for app-section navigation.",
572
- "Use controlled `collapsed` state when the app shell persists layout preferences."
666
+ "Use controlled `collapsed` state when the app shell persists layout preferences.",
667
+ "Prefer `TAppShell` when you also want full-viewport sizing, a top header, and a responsive mobile drawer."
573
668
  ]
574
669
  },
575
670
  TNavMenu: {
576
671
  required: [],
577
672
  notes: [
578
- "When nested inside `TSidebar`, `collapsed` can be inherited from the sidebar provider."
673
+ "When nested inside `TSidebar` or `TAppShell`, `collapsed` can be inherited from the sidebar provider."
579
674
  ]
580
675
  },
581
676
  TTreeView: {
@@ -609,6 +704,32 @@ var treeui_catalog_default = {
609
704
  "Use `href` for native links.",
610
705
  "Use `to` when the app has vue-router and breadcrumb items should render RouterLink."
611
706
  ]
707
+ },
708
+ TChart: {
709
+ required: [],
710
+ notes: [
711
+ "Pass `series` as `{ name, data, color? }[]` and `labels` as a parallel `string[]` (one label per data index).",
712
+ "Set `type` to `line`, `area`, or `bar`; use `stacked` only with `bar`.",
713
+ "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.",
714
+ "Pass `valueFormat: (n) => string` to format axis and tooltip values (currency, compact, etc.).",
715
+ "No charting library or provider is required \u2014 the SVG and geometry are built in."
716
+ ]
717
+ },
718
+ TSparkline: {
719
+ required: [],
720
+ notes: [
721
+ "Pass `data` as `number[]`; there are no axes, legend, or tooltip by design.",
722
+ "Size it with `width`/`height`; use it inside `TStat`, table cells, or text.",
723
+ "Always keep a visible number nearby \u2014 a sparkline supplements a value, it does not replace it."
724
+ ]
725
+ },
726
+ TDonutChart: {
727
+ required: [],
728
+ notes: [
729
+ "Pass `segments` as `{ label, value, color? }[]`; non-positive values are dropped.",
730
+ "Set `thickness: 0` for a full pie; keep the default for a donut with a center readout.",
731
+ "Use the `center` slot (donut only) for a custom center; otherwise it shows the total or the hovered slice."
732
+ ]
612
733
  }
613
734
  },
614
735
  appPatterns: {
@@ -622,6 +743,9 @@ var treeui_catalog_default = {
622
743
  commonCompositions: [
623
744
  "TFormField + input-like control",
624
745
  "TGrid + TStat",
746
+ "TStat + TSparkline",
747
+ "TCard + TChart",
748
+ "TAppShell + TNavMenu",
625
749
  "TSidebar + TNavMenu",
626
750
  "TTable + TPagination",
627
751
  "TPricing + TPricingCard"
@@ -631,16 +755,13 @@ var treeui_catalog_default = {
631
755
  components: [
632
756
  {
633
757
  name: "TAccordion",
634
- legacyAlias: "TreeAccordion",
635
- aliases: [
636
- "TreeAccordion"
637
- ],
758
+ aliases: [],
638
759
  package: "@treeui/vue",
639
760
  kind: "disclosure",
640
761
  category: "Data Display",
641
762
  status: "available",
642
763
  purpose: "Organized content sections with expandable/collapsible behavior. Supports single-open and multi-open modes.\n",
643
- sourceFile: "packages/vue/src/components/TreeAccordion.vue",
764
+ sourceFile: "packages/vue/src/components/TAccordion.vue",
644
765
  storyFile: "apps/docs/src/stories/Accordion.stories.ts",
645
766
  storyTitle: "Components/Data Display/Accordion",
646
767
  manifestFile: "docs/ai/COMPONENTS/accordion.yaml",
@@ -687,16 +808,13 @@ var treeui_catalog_default = {
687
808
  },
688
809
  {
689
810
  name: "TAlert",
690
- legacyAlias: "TreeAlert",
691
- aliases: [
692
- "TreeAlert"
693
- ],
811
+ aliases: [],
694
812
  package: "@treeui/vue",
695
813
  kind: "feedback",
696
814
  category: "Feedback",
697
815
  status: "available",
698
816
  purpose: "Inline status banner for info, success, warning, and danger messages.",
699
- sourceFile: "packages/vue/src/components/TreeAlert.vue",
817
+ sourceFile: "packages/vue/src/components/TAlert.vue",
700
818
  storyFile: "apps/docs/src/stories/Alert.stories.ts",
701
819
  storyTitle: "Components/Feedback/Alert",
702
820
  manifestFile: "docs/ai/COMPONENTS/alert.yaml",
@@ -714,7 +832,7 @@ var treeui_catalog_default = {
714
832
  },
715
833
  {
716
834
  name: "size",
717
- type: "TreeSize",
835
+ type: "TSize",
718
836
  default: "md",
719
837
  values: [
720
838
  "sm",
@@ -789,15 +907,217 @@ var treeui_catalog_default = {
789
907
  recipes: []
790
908
  },
791
909
  {
792
- name: "TAvatar",
793
- legacyAlias: "TreeAvatar",
794
- aliases: [
795
- "TreeAvatar"
910
+ name: "TAppShell",
911
+ aliases: [],
912
+ package: "@treeui/vue",
913
+ kind: "layout",
914
+ category: "Layout",
915
+ status: "available",
916
+ 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.",
917
+ sourceFile: "packages/vue/src/components/TAppShell.vue",
918
+ storyFile: "apps/docs/src/stories/AppShell.stories.ts",
919
+ storyTitle: "Components/Layout/AppShell",
920
+ manifestFile: "docs/ai/COMPONENTS/app-shell.yaml",
921
+ props: [
922
+ {
923
+ name: "as",
924
+ type: "string",
925
+ default: "div"
926
+ },
927
+ {
928
+ name: "side",
929
+ type: "TSidebarSide",
930
+ default: "left",
931
+ values: [
932
+ "left",
933
+ "right"
934
+ ]
935
+ },
936
+ {
937
+ name: "sidebarWidth",
938
+ type: "string",
939
+ default: "17.5rem"
940
+ },
941
+ {
942
+ name: "collapsedWidth",
943
+ type: "string",
944
+ default: "4.75rem"
945
+ },
946
+ {
947
+ name: "collapsible",
948
+ type: "boolean",
949
+ default: "false"
950
+ },
951
+ {
952
+ name: "collapsed",
953
+ type: "boolean",
954
+ default: "undefined"
955
+ },
956
+ {
957
+ name: "defaultCollapsed",
958
+ type: "boolean",
959
+ default: "false"
960
+ },
961
+ {
962
+ name: "mobile",
963
+ type: "boolean",
964
+ default: "undefined"
965
+ },
966
+ {
967
+ name: "breakpoint",
968
+ type: "string",
969
+ default: "768px"
970
+ },
971
+ {
972
+ name: "sidebarOpen",
973
+ type: "boolean",
974
+ default: "undefined"
975
+ },
976
+ {
977
+ name: "defaultSidebarOpen",
978
+ type: "boolean",
979
+ default: "false"
980
+ },
981
+ {
982
+ name: "closeOnEscape",
983
+ type: "boolean",
984
+ default: "true"
985
+ },
986
+ {
987
+ name: "closeOnOverlay",
988
+ type: "boolean",
989
+ default: "true"
990
+ },
991
+ {
992
+ name: "showMenuButton",
993
+ type: "boolean",
994
+ default: "true"
995
+ },
996
+ {
997
+ name: "menuLabel",
998
+ type: "string",
999
+ default: "Open menu"
1000
+ },
1001
+ {
1002
+ name: "closeLabel",
1003
+ type: "string",
1004
+ default: "Close menu"
1005
+ },
1006
+ {
1007
+ name: "sidebarLabel",
1008
+ type: "string",
1009
+ default: "Sidebar"
1010
+ }
796
1011
  ],
1012
+ events: [
1013
+ {
1014
+ name: "update:collapsed"
1015
+ },
1016
+ {
1017
+ name: "collapse-change"
1018
+ },
1019
+ {
1020
+ name: "update:sidebarOpen"
1021
+ },
1022
+ {
1023
+ name: "sidebar-open-change"
1024
+ }
1025
+ ],
1026
+ slots: [
1027
+ {
1028
+ name: "header"
1029
+ },
1030
+ {
1031
+ name: "sidebar"
1032
+ },
1033
+ {
1034
+ name: "default"
1035
+ },
1036
+ {
1037
+ name: "menu-icon"
1038
+ }
1039
+ ],
1040
+ a11y: [
1041
+ "role: dialog",
1042
+ "aria_modal: true",
1043
+ "focus_trap: true",
1044
+ "restores_focus_on_close: true",
1045
+ "escape_closes_when_enabled: true",
1046
+ "menu_button_aria_expanded: true",
1047
+ "menu_button_aria_controls_drawer: true",
1048
+ "sidebar_labelled_by_sidebar_label: true"
1049
+ ],
1050
+ behavior: [
1051
+ "fills_viewport_full_width_and_height: true",
1052
+ "header_spans_full_width_above_sidebar_and_content: true",
1053
+ "content_area_scrolls_independently: true",
1054
+ "auto_switches_to_mobile_at_breakpoint_when_mobile_undefined: true",
1055
+ "mobile_prop_forces_mobile_mode: true",
1056
+ "mobile_sidebar_becomes_off_canvas_drawer: true",
1057
+ "auto_menu_button_in_header_on_mobile: true",
1058
+ "controlled_and_uncontrolled_collapsed_state: true",
1059
+ "controlled_and_uncontrolled_sidebar_open_state: true",
1060
+ "provides_collapsed_state_to_descendants: true",
1061
+ "drawer_reports_collapsed_false_to_descendants_and_slots: true",
1062
+ "left_and_right_variants: true",
1063
+ "locks_body_scroll_while_drawer_open: true",
1064
+ "overlay_click_closes_when_enabled: true",
1065
+ "exposes_slot_props_with_mobile_collapsed_and_toggles: true"
1066
+ ],
1067
+ selection: {
1068
+ keywords: [
1069
+ "app shell",
1070
+ "layout",
1071
+ "dashboard",
1072
+ "admin",
1073
+ "header sidebar",
1074
+ "full screen",
1075
+ "responsive shell",
1076
+ "off-canvas"
1077
+ ],
1078
+ useWhen: [
1079
+ "You need a full-viewport application layout with a header, a side navigation, and a fluid content area.",
1080
+ "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."
1081
+ ],
1082
+ avoidWhen: [
1083
+ "You only need one region (just a top bar, or just a side rail) \u2014 compose TNavbar or TSidebar directly.",
1084
+ "The page content should be centered with a readable max width \u2014 use TContainer inside the shell content instead."
1085
+ ],
1086
+ alternatives: [
1087
+ {
1088
+ component: "TSidebar",
1089
+ when: "You want a standalone collapsible side rail without the header/content orchestration or responsive drawer."
1090
+ },
1091
+ {
1092
+ component: "TNavbar",
1093
+ when: "You only need the top application bar."
1094
+ },
1095
+ {
1096
+ component: "TDrawer",
1097
+ when: "You need a general temporary overlay panel rather than the shell's responsive navigation."
1098
+ }
1099
+ ]
1100
+ },
1101
+ setup: {
1102
+ required: [],
1103
+ notes: [
1104
+ "Mount at the app root; it fills the viewport (100dvh, full width) and scrolls its content region independently.",
1105
+ "Put navigation in the `sidebar` slot (e.g. `TNavMenu`) \u2014 it inherits collapsed state from the shell provider like `TSidebar`.",
1106
+ "Leave `mobile` unset to auto-switch to an off-canvas drawer at `breakpoint`, or bind `mobile` to control it explicitly.",
1107
+ "Use `v-model:collapsed` for the desktop rail and `v-model:sidebarOpen` for the mobile drawer when the app persists layout state."
1108
+ ]
1109
+ },
1110
+ recipes: [
1111
+ "app-shell"
1112
+ ]
1113
+ },
1114
+ {
1115
+ name: "TAvatar",
1116
+ aliases: [],
797
1117
  package: "@treeui/vue",
798
1118
  category: "Data Display",
799
1119
  description: "User image with fallback initials and optional status indicator dot.",
800
- sourceFile: "packages/vue/src/components/TreeAvatar.vue",
1120
+ sourceFile: "packages/vue/src/components/TAvatar.vue",
801
1121
  storyFile: "apps/docs/src/stories/Avatar.stories.ts",
802
1122
  storyTitle: "Components/Data Display/Avatar",
803
1123
  manifestFile: "docs/ai/COMPONENTS/avatar.yaml",
@@ -822,7 +1142,7 @@ var treeui_catalog_default = {
822
1142
  },
823
1143
  {
824
1144
  name: "size",
825
- type: "TreeSize",
1145
+ type: "TSize",
826
1146
  default: "md",
827
1147
  values: [
828
1148
  "sm",
@@ -832,7 +1152,7 @@ var treeui_catalog_default = {
832
1152
  },
833
1153
  {
834
1154
  name: "status",
835
- type: "TreeAvatarStatus",
1155
+ type: "TAvatarStatus",
836
1156
  required: false,
837
1157
  values: [
838
1158
  "online",
@@ -870,23 +1190,20 @@ var treeui_catalog_default = {
870
1190
  },
871
1191
  {
872
1192
  name: "TBadge",
873
- legacyAlias: "TreeBadge",
874
- aliases: [
875
- "TreeBadge"
876
- ],
1193
+ aliases: [],
877
1194
  package: "@treeui/vue",
878
1195
  kind: "display",
879
1196
  category: "Data Display",
880
1197
  status: "available",
881
1198
  purpose: "Compact status or metadata label with optional icon.",
882
- sourceFile: "packages/vue/src/components/TreeBadge.vue",
1199
+ sourceFile: "packages/vue/src/components/TBadge.vue",
883
1200
  storyFile: "apps/docs/src/stories/Badge.stories.ts",
884
1201
  storyTitle: "Components/Data Display/Badge",
885
1202
  manifestFile: "docs/ai/COMPONENTS/badge.yaml",
886
1203
  props: [
887
1204
  {
888
1205
  name: "variant",
889
- type: "TreeVariant",
1206
+ type: "TVariant",
890
1207
  default: "soft",
891
1208
  values: [
892
1209
  "solid",
@@ -898,7 +1215,7 @@ var treeui_catalog_default = {
898
1215
  },
899
1216
  {
900
1217
  name: "tone",
901
- type: "TreeBadgeTone",
1218
+ type: "TBadgeTone",
902
1219
  default: "neutral",
903
1220
  values: [
904
1221
  "neutral",
@@ -911,7 +1228,7 @@ var treeui_catalog_default = {
911
1228
  },
912
1229
  {
913
1230
  name: "size",
914
- type: "TreeSize",
1231
+ type: "TSize",
915
1232
  default: "md",
916
1233
  values: [
917
1234
  "sm",
@@ -950,16 +1267,13 @@ var treeui_catalog_default = {
950
1267
  },
951
1268
  {
952
1269
  name: "TBreadcrumb",
953
- legacyAlias: "TreeBreadcrumb",
954
- aliases: [
955
- "TreeBreadcrumb"
956
- ],
1270
+ aliases: [],
957
1271
  package: "@treeui/vue",
958
1272
  kind: "navigation",
959
1273
  category: "Navigation",
960
1274
  status: "available",
961
1275
  purpose: "Hierarchical navigation trail showing the user's current location within a site or application.",
962
- sourceFile: "packages/vue/src/components/TreeBreadcrumb.vue",
1276
+ sourceFile: "packages/vue/src/components/TBreadcrumb.vue",
963
1277
  storyFile: "apps/docs/src/stories/Breadcrumb.stories.ts",
964
1278
  storyTitle: "Components/Navigation/Breadcrumb",
965
1279
  manifestFile: "docs/ai/COMPONENTS/breadcrumb.yaml",
@@ -1002,16 +1316,13 @@ var treeui_catalog_default = {
1002
1316
  },
1003
1317
  {
1004
1318
  name: "TButton",
1005
- legacyAlias: "TreeButton",
1006
- aliases: [
1007
- "TreeButton"
1008
- ],
1319
+ aliases: [],
1009
1320
  package: "@treeui/vue",
1010
1321
  kind: "primitive",
1011
1322
  category: "Actions",
1012
1323
  status: "available",
1013
1324
  purpose: "Clickable action trigger with variants, sizes, optional polymorphism, and loading state.",
1014
- sourceFile: "packages/vue/src/components/TreeButton.vue",
1325
+ sourceFile: "packages/vue/src/components/TButton.vue",
1015
1326
  storyFile: "apps/docs/src/stories/Button.stories.ts",
1016
1327
  storyTitle: "Components/Actions/Button",
1017
1328
  manifestFile: "docs/ai/COMPONENTS/button.yaml",
@@ -1023,7 +1334,7 @@ var treeui_catalog_default = {
1023
1334
  },
1024
1335
  {
1025
1336
  name: "variant",
1026
- type: "TreeVariant",
1337
+ type: "TVariant",
1027
1338
  default: "solid",
1028
1339
  values: [
1029
1340
  "solid",
@@ -1035,7 +1346,7 @@ var treeui_catalog_default = {
1035
1346
  },
1036
1347
  {
1037
1348
  name: "size",
1038
- type: "TreeSize",
1349
+ type: "TSize",
1039
1350
  default: "md",
1040
1351
  values: [
1041
1352
  "sm",
@@ -1100,16 +1411,13 @@ var treeui_catalog_default = {
1100
1411
  },
1101
1412
  {
1102
1413
  name: "TCard",
1103
- legacyAlias: "TreeCard",
1104
- aliases: [
1105
- "TreeCard"
1106
- ],
1414
+ aliases: [],
1107
1415
  package: "@treeui/vue",
1108
1416
  kind: "layout",
1109
1417
  category: "Data Display",
1110
1418
  status: "available",
1111
1419
  purpose: "Surface container with optional header and footer slots.",
1112
- sourceFile: "packages/vue/src/components/TreeCard.vue",
1420
+ sourceFile: "packages/vue/src/components/TCard.vue",
1113
1421
  storyFile: "apps/docs/src/stories/Card.stories.ts",
1114
1422
  storyTitle: "Components/Data Display/Card",
1115
1423
  manifestFile: "docs/ai/COMPONENTS/card.yaml",
@@ -1121,7 +1429,7 @@ var treeui_catalog_default = {
1121
1429
  },
1122
1430
  {
1123
1431
  name: "variant",
1124
- type: "TreeCardVariant",
1432
+ type: "TCardVariant",
1125
1433
  default: "outline",
1126
1434
  values: [
1127
1435
  "outline",
@@ -1132,7 +1440,7 @@ var treeui_catalog_default = {
1132
1440
  },
1133
1441
  {
1134
1442
  name: "size",
1135
- type: "TreeSize",
1443
+ type: "TSize",
1136
1444
  default: "md",
1137
1445
  values: [
1138
1446
  "sm",
@@ -1164,7 +1472,8 @@ var treeui_catalog_default = {
1164
1472
  ],
1165
1473
  a11y: [],
1166
1474
  behavior: [
1167
- "body_wrapper_class: tree-card__body"
1475
+ "body_wrapper_class: t-card__body",
1476
+ "solid_variant_rescopes_color_tokens_for_nested_content: true"
1168
1477
  ],
1169
1478
  selection: {
1170
1479
  keywords: [
@@ -1200,17 +1509,210 @@ var treeui_catalog_default = {
1200
1509
  ]
1201
1510
  },
1202
1511
  {
1203
- name: "TCheckbox",
1204
- legacyAlias: "TreeCheckbox",
1205
- aliases: [
1206
- "TreeCheckbox"
1512
+ name: "TChart",
1513
+ aliases: [],
1514
+ package: "@treeui/vue",
1515
+ kind: "data-display",
1516
+ category: "Data Display",
1517
+ status: "available",
1518
+ 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.",
1519
+ sourceFile: "packages/vue/src/components/TChart.vue",
1520
+ storyFile: "apps/docs/src/stories/Chart.stories.ts",
1521
+ storyTitle: "Components/Data Display/Chart",
1522
+ manifestFile: "docs/ai/COMPONENTS/chart.yaml",
1523
+ props: [
1524
+ {
1525
+ name: "type",
1526
+ type: "TChartType",
1527
+ default: "line",
1528
+ values: [
1529
+ "line",
1530
+ "area",
1531
+ "bar"
1532
+ ]
1533
+ },
1534
+ {
1535
+ name: "series",
1536
+ type: "TChartSeries[]",
1537
+ default: "[]",
1538
+ note: "Each item is { name: string; data: number[]; color?: string }."
1539
+ },
1540
+ {
1541
+ name: "labels",
1542
+ type: "string[]",
1543
+ default: "[]",
1544
+ note: "X-axis categories, aligned index-for-index to each series' data."
1545
+ },
1546
+ {
1547
+ name: "height",
1548
+ type: "number",
1549
+ default: "260",
1550
+ note: "Width is fluid (measured via ResizeObserver)."
1551
+ },
1552
+ {
1553
+ name: "smooth",
1554
+ type: "boolean",
1555
+ default: "false",
1556
+ note: "Curved line/area."
1557
+ },
1558
+ {
1559
+ name: "stacked",
1560
+ type: "boolean",
1561
+ default: "false",
1562
+ note: "Stacks bar series; ignored for line/area. Negative values are clamped to 0 in stacked mode (grouped mode renders them)."
1563
+ },
1564
+ {
1565
+ name: "showGrid",
1566
+ type: "boolean",
1567
+ default: "true"
1568
+ },
1569
+ {
1570
+ name: "showLegend",
1571
+ type: "boolean",
1572
+ default: "auto (true when more than one series)"
1573
+ },
1574
+ {
1575
+ name: "showXAxis",
1576
+ type: "boolean",
1577
+ default: "true"
1578
+ },
1579
+ {
1580
+ name: "showYAxis",
1581
+ type: "boolean",
1582
+ default: "true"
1583
+ },
1584
+ {
1585
+ name: "showTooltip",
1586
+ type: "boolean",
1587
+ default: "true"
1588
+ },
1589
+ {
1590
+ name: "showPoints",
1591
+ type: "boolean",
1592
+ default: "false",
1593
+ note: "Always draw markers on line/area points."
1594
+ },
1595
+ {
1596
+ name: "yTicks",
1597
+ type: "number",
1598
+ default: "5"
1599
+ },
1600
+ {
1601
+ name: "valueFormat",
1602
+ type: "(value: number) => string",
1603
+ default: "locale integers for |value| >= 1000"
1604
+ },
1605
+ {
1606
+ name: "minY",
1607
+ type: "number",
1608
+ default: "auto"
1609
+ },
1610
+ {
1611
+ name: "maxY",
1612
+ type: "number",
1613
+ default: "auto"
1614
+ },
1615
+ {
1616
+ name: "animated",
1617
+ type: "boolean",
1618
+ default: "true",
1619
+ note: "Draw-in animation; disabled under prefers-reduced-motion."
1620
+ },
1621
+ {
1622
+ name: "loading",
1623
+ type: "boolean",
1624
+ default: "false"
1625
+ },
1626
+ {
1627
+ name: "ariaLabel",
1628
+ type: "string",
1629
+ default: "auto-generated summary"
1630
+ }
1631
+ ],
1632
+ events: [
1633
+ {
1634
+ name: "point-click",
1635
+ payload: "{ index: number; label: string; values: { name: string; value: number; color: string }[] }"
1636
+ }
1637
+ ],
1638
+ slots: [
1639
+ {
1640
+ name: "legend"
1641
+ },
1642
+ {
1643
+ name: "tooltip"
1644
+ },
1645
+ {
1646
+ name: "empty"
1647
+ }
1648
+ ],
1649
+ a11y: [
1650
+ "SVG is aria-hidden; a visually-hidden <table> mirrors the series data for assistive tech.",
1651
+ "Legend defaults on for multiple series so identity is not color-only.",
1652
+ "Provide a meaningful ariaLabel describing what the chart shows."
1207
1653
  ],
1654
+ behavior: [
1655
+ "colors_auto_assign_from_chart_palette: --tree-color-chart-1..8, cycling; per-series color overrides",
1656
+ "bar_zero_baseline: true",
1657
+ "line_domain_uses_nice_ticks: true",
1658
+ "hover_shows_crosshair_and_tooltip: true"
1659
+ ],
1660
+ selection: {
1661
+ keywords: [
1662
+ "chart",
1663
+ "graph",
1664
+ "line chart",
1665
+ "area chart",
1666
+ "bar chart",
1667
+ "plot",
1668
+ "dashboard",
1669
+ "time series",
1670
+ "analytics"
1671
+ ],
1672
+ useWhen: [
1673
+ "You need a line, area, or bar chart with axes, gridlines, legend, and a hover tooltip.",
1674
+ "One or more series share a set of category labels."
1675
+ ],
1676
+ avoidWhen: [
1677
+ "A single value tells the story \u2014 use TStat.",
1678
+ "You only need an inline trend with no axes \u2014 use TSparkline.",
1679
+ "The data is a part-of-whole breakdown \u2014 use TDonutChart."
1680
+ ],
1681
+ alternatives: [
1682
+ {
1683
+ component: "TSparkline",
1684
+ when: "The trend should be inline and axis-less."
1685
+ },
1686
+ {
1687
+ component: "TDonutChart",
1688
+ when: "The data is proportional (parts of a whole)."
1689
+ }
1690
+ ]
1691
+ },
1692
+ setup: {
1693
+ required: [],
1694
+ notes: [
1695
+ "Pass `series` as `{ name, data, color? }[]` and `labels` as a parallel `string[]` (one label per data index).",
1696
+ "Set `type` to `line`, `area`, or `bar`; use `stacked` only with `bar`.",
1697
+ "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.",
1698
+ "Pass `valueFormat: (n) => string` to format axis and tooltip values (currency, compact, etc.).",
1699
+ "No charting library or provider is required \u2014 the SVG and geometry are built in."
1700
+ ]
1701
+ },
1702
+ recipes: [
1703
+ "chart-surface",
1704
+ "metric-dashboard"
1705
+ ]
1706
+ },
1707
+ {
1708
+ name: "TCheckbox",
1709
+ aliases: [],
1208
1710
  package: "@treeui/vue",
1209
1711
  kind: "primitive",
1210
1712
  category: "Data Entry",
1211
1713
  status: "available",
1212
1714
  purpose: "Boolean toggle with indeterminate state; supports v-model via modelValue.",
1213
- sourceFile: "packages/vue/src/components/TreeCheckbox.vue",
1715
+ sourceFile: "packages/vue/src/components/TCheckbox.vue",
1214
1716
  storyFile: "apps/docs/src/stories/Checkbox.stories.ts",
1215
1717
  storyTitle: "Components/Data Entry/Checkbox",
1216
1718
  manifestFile: "docs/ai/COMPONENTS/checkbox.yaml",
@@ -1222,7 +1724,7 @@ var treeui_catalog_default = {
1222
1724
  },
1223
1725
  {
1224
1726
  name: "size",
1225
- type: "TreeSize",
1727
+ type: "TSize",
1226
1728
  default: "md",
1227
1729
  values: [
1228
1730
  "sm",
@@ -1302,16 +1804,13 @@ var treeui_catalog_default = {
1302
1804
  },
1303
1805
  {
1304
1806
  name: "TCombobox",
1305
- legacyAlias: "TreeCombobox",
1306
- aliases: [
1307
- "TreeCombobox"
1308
- ],
1807
+ aliases: [],
1309
1808
  package: "@treeui/vue",
1310
1809
  kind: "primitive",
1311
1810
  category: "Data Entry",
1312
1811
  status: "available",
1313
1812
  purpose: "Searchable combobox / autocomplete input with local filtering, controlled selection, and shared open-state behavior.",
1314
- sourceFile: "packages/vue/src/components/TreeCombobox.vue",
1813
+ sourceFile: "packages/vue/src/components/TCombobox.vue",
1315
1814
  storyFile: "apps/docs/src/stories/Combobox.stories.ts",
1316
1815
  storyTitle: "Components/Data Entry/Combobox",
1317
1816
  manifestFile: "docs/ai/COMPONENTS/combobox.yaml",
@@ -1323,7 +1822,7 @@ var treeui_catalog_default = {
1323
1822
  },
1324
1823
  {
1325
1824
  name: "options",
1326
- type: "TreeComboboxOption[]",
1825
+ type: "TComboboxOption[]",
1327
1826
  default: "[]",
1328
1827
  note: "Array of { label: string; value: string; description?: string; keywords?: string[]; disabled?: boolean }"
1329
1828
  },
@@ -1339,7 +1838,7 @@ var treeui_catalog_default = {
1339
1838
  },
1340
1839
  {
1341
1840
  name: "size",
1342
- type: "TreeSize",
1841
+ type: "TSize",
1343
1842
  default: "md",
1344
1843
  values: [
1345
1844
  "sm",
@@ -1456,16 +1955,13 @@ var treeui_catalog_default = {
1456
1955
  },
1457
1956
  {
1458
1957
  name: "TConfirmDialog",
1459
- legacyAlias: "TreeConfirmDialog",
1460
- aliases: [
1461
- "TreeConfirmDialog"
1462
- ],
1958
+ aliases: [],
1463
1959
  package: "@treeui/vue",
1464
1960
  kind: "overlay",
1465
1961
  category: "Overlay",
1466
1962
  status: "available",
1467
1963
  purpose: "High-level confirmation dialog built on the shared modal contract, with default confirm and cancel actions.",
1468
- sourceFile: "packages/vue/src/components/TreeConfirmDialog.vue",
1964
+ sourceFile: "packages/vue/src/components/TConfirmDialog.vue",
1469
1965
  storyFile: "apps/docs/src/stories/ConfirmDialog.stories.ts",
1470
1966
  storyTitle: "Components/Overlay/ConfirmDialog",
1471
1967
  manifestFile: "docs/ai/COMPONENTS/confirm-dialog.yaml",
@@ -1487,7 +1983,7 @@ var treeui_catalog_default = {
1487
1983
  },
1488
1984
  {
1489
1985
  name: "size",
1490
- type: "TreeSize",
1986
+ type: "TSize",
1491
1987
  default: "sm",
1492
1988
  values: [
1493
1989
  "sm",
@@ -1517,7 +2013,7 @@ var treeui_catalog_default = {
1517
2013
  },
1518
2014
  {
1519
2015
  name: "confirmVariant",
1520
- type: "TreeVariant",
2016
+ type: "TVariant",
1521
2017
  default: "danger"
1522
2018
  },
1523
2019
  {
@@ -1625,16 +2121,13 @@ var treeui_catalog_default = {
1625
2121
  },
1626
2122
  {
1627
2123
  name: "TContainer",
1628
- legacyAlias: "TreeContainer",
1629
- aliases: [
1630
- "TreeContainer"
1631
- ],
2124
+ aliases: [],
1632
2125
  package: "@treeui/vue",
1633
2126
  kind: "layout",
1634
2127
  category: "Layout",
1635
2128
  status: "available",
1636
2129
  purpose: "Width-constrained layout wrapper for readable page content and app sections.",
1637
- sourceFile: "packages/vue/src/components/TreeContainer.vue",
2130
+ sourceFile: "packages/vue/src/components/TContainer.vue",
1638
2131
  storyFile: "apps/docs/src/stories/Container.stories.ts",
1639
2132
  storyTitle: "Components/Layout/Container",
1640
2133
  manifestFile: "docs/ai/COMPONENTS/container.yaml",
@@ -1646,7 +2139,7 @@ var treeui_catalog_default = {
1646
2139
  },
1647
2140
  {
1648
2141
  name: "size",
1649
- type: "TreeContainerSize",
2142
+ type: "TContainerSize",
1650
2143
  default: "lg",
1651
2144
  values: [
1652
2145
  "sm",
@@ -1717,10 +2210,7 @@ var treeui_catalog_default = {
1717
2210
  },
1718
2211
  {
1719
2212
  name: "TContextMenu",
1720
- legacyAlias: "TreeContextMenu",
1721
- aliases: [
1722
- "TreeContextMenu"
1723
- ],
2213
+ aliases: [],
1724
2214
  package: "@treeui/vue",
1725
2215
  category: "Overlay",
1726
2216
  status: "stable",
@@ -1730,7 +2220,7 @@ var treeui_catalog_default = {
1730
2220
  props: [
1731
2221
  {
1732
2222
  name: "items",
1733
- type: "TreeContextMenuItem[]",
2223
+ type: "TContextMenuItem[]",
1734
2224
  default: "[]",
1735
2225
  description: "Menu items to render."
1736
2226
  },
@@ -1754,7 +2244,7 @@ var treeui_catalog_default = {
1754
2244
  },
1755
2245
  {
1756
2246
  name: "size",
1757
- type: "TreeSize",
2247
+ type: "TSize",
1758
2248
  default: "md",
1759
2249
  description: "Item sizing variant."
1760
2250
  }
@@ -1827,16 +2317,13 @@ var treeui_catalog_default = {
1827
2317
  },
1828
2318
  {
1829
2319
  name: "TDatePicker",
1830
- legacyAlias: "TreeDatePicker",
1831
- aliases: [
1832
- "TreeDatePicker"
1833
- ],
2320
+ aliases: [],
1834
2321
  package: "@treeui/vue",
1835
2322
  kind: "form_overlay",
1836
2323
  category: "Data Entry",
1837
2324
  status: "available",
1838
2325
  purpose: "Date input with calendar popover and keyboard navigation.",
1839
- sourceFile: "packages/vue/src/components/TreeDatePicker.vue",
2326
+ sourceFile: "packages/vue/src/components/TDatePicker.vue",
1840
2327
  storyFile: "apps/docs/src/stories/DatePicker.stories.ts",
1841
2328
  storyTitle: "Components/Data Entry/DatePicker",
1842
2329
  manifestFile: "docs/ai/COMPONENTS/date-picker.yaml",
@@ -1858,7 +2345,7 @@ var treeui_catalog_default = {
1858
2345
  },
1859
2346
  {
1860
2347
  name: "size",
1861
- type: "TreeSize",
2348
+ type: "TSize",
1862
2349
  default: "md",
1863
2350
  values: [
1864
2351
  "sm",
@@ -1979,16 +2466,13 @@ var treeui_catalog_default = {
1979
2466
  },
1980
2467
  {
1981
2468
  name: "TDateTimePicker",
1982
- legacyAlias: "TreeDateTimePicker",
1983
- aliases: [
1984
- "TreeDateTimePicker"
1985
- ],
2469
+ aliases: [],
1986
2470
  package: "@treeui/vue",
1987
2471
  kind: "form",
1988
2472
  category: "Data Entry",
1989
2473
  status: "available",
1990
2474
  purpose: "Date and time picker with a calendar grid, time selection, and overlay trigger.",
1991
- sourceFile: "packages/vue/src/components/TreeDateTimePicker.vue",
2475
+ sourceFile: "packages/vue/src/components/TDateTimePicker.vue",
1992
2476
  storyFile: "apps/docs/src/stories/DateTimePicker.stories.ts",
1993
2477
  storyTitle: "Components/Data Entry/DateTimePicker",
1994
2478
  manifestFile: "docs/ai/COMPONENTS/date-time-picker.yaml",
@@ -2011,7 +2495,7 @@ var treeui_catalog_default = {
2011
2495
  },
2012
2496
  {
2013
2497
  name: "size",
2014
- type: "TreeSize",
2498
+ type: "TSize",
2015
2499
  default: "md",
2016
2500
  values: [
2017
2501
  "sm",
@@ -2140,14 +2624,11 @@ var treeui_catalog_default = {
2140
2624
  },
2141
2625
  {
2142
2626
  name: "TDivider",
2143
- legacyAlias: "TreeDivider",
2144
- aliases: [
2145
- "TreeDivider"
2146
- ],
2627
+ aliases: [],
2147
2628
  package: "@treeui/vue",
2148
2629
  category: "Layout",
2149
2630
  description: "Horizontal or vertical visual separator.",
2150
- sourceFile: "packages/vue/src/components/TreeDivider.vue",
2631
+ sourceFile: "packages/vue/src/components/TDivider.vue",
2151
2632
  storyFile: "apps/docs/src/stories/Divider.stories.ts",
2152
2633
  storyTitle: "Components/Layout/Divider",
2153
2634
  manifestFile: "docs/ai/COMPONENTS/divider.yaml",
@@ -2162,50 +2643,183 @@ var treeui_catalog_default = {
2162
2643
  ]
2163
2644
  },
2164
2645
  {
2165
- name: "decorative",
2646
+ name: "decorative",
2647
+ type: "boolean",
2648
+ default: "true",
2649
+ description: "When true, renders role='none' (purely visual). When false, renders as role='separator'."
2650
+ },
2651
+ {
2652
+ name: "label",
2653
+ type: "string",
2654
+ required: false,
2655
+ description: "Accessible label for non-decorative dividers."
2656
+ }
2657
+ ],
2658
+ events: [],
2659
+ slots: [],
2660
+ a11y: [
2661
+ "role: none (decorative) or separator (semantic)",
2662
+ "aria-orientation: Set when non-decorative.",
2663
+ "aria-label: Set from `label` prop when non-decorative."
2664
+ ],
2665
+ behavior: [],
2666
+ selection: {
2667
+ keywords: [],
2668
+ useWhen: [],
2669
+ avoidWhen: [],
2670
+ alternatives: []
2671
+ },
2672
+ setup: {
2673
+ required: [],
2674
+ notes: []
2675
+ },
2676
+ recipes: []
2677
+ },
2678
+ {
2679
+ name: "TDonutChart",
2680
+ aliases: [],
2681
+ package: "@treeui/vue",
2682
+ kind: "data-display",
2683
+ category: "Data Display",
2684
+ status: "available",
2685
+ 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.",
2686
+ sourceFile: "packages/vue/src/components/TDonutChart.vue",
2687
+ storyFile: "apps/docs/src/stories/DonutChart.stories.ts",
2688
+ storyTitle: "Components/Data Display/Donut Chart",
2689
+ manifestFile: "docs/ai/COMPONENTS/donut-chart.yaml",
2690
+ props: [
2691
+ {
2692
+ name: "segments",
2693
+ type: "TDonutSegment[]",
2694
+ default: "[]",
2695
+ note: "Each item is { label: string; value: number; color?: string }. Non-positive values are omitted."
2696
+ },
2697
+ {
2698
+ name: "size",
2699
+ type: "number",
2700
+ default: "200",
2701
+ note: "Square canvas in px."
2702
+ },
2703
+ {
2704
+ name: "thickness",
2705
+ type: "number",
2706
+ default: "26",
2707
+ note: "Ring thickness; 0 renders a full pie."
2708
+ },
2709
+ {
2710
+ name: "gap",
2711
+ type: "number",
2712
+ default: "2",
2713
+ note: "Gap between slices, in degrees."
2714
+ },
2715
+ {
2716
+ name: "rounded",
2717
+ type: "boolean",
2718
+ default: "false",
2719
+ note: "Round the ends of donut segments (widens the gap to make room). Best with a thinner ring."
2720
+ },
2721
+ {
2722
+ name: "showLegend",
2723
+ type: "boolean",
2724
+ default: "true"
2725
+ },
2726
+ {
2727
+ name: "showPercent",
2728
+ type: "boolean",
2729
+ default: "true"
2730
+ },
2731
+ {
2732
+ name: "centerLabel",
2733
+ type: "string",
2734
+ default: "Total",
2735
+ note: "Donut only; ignored for pie."
2736
+ },
2737
+ {
2738
+ name: "centerValue",
2739
+ type: "string | number",
2740
+ default: "auto (sum of values)"
2741
+ },
2742
+ {
2743
+ name: "valueFormat",
2744
+ type: "(value: number) => string",
2745
+ default: "locale integers for |value| >= 1000"
2746
+ },
2747
+ {
2748
+ name: "loading",
2166
2749
  type: "boolean",
2167
- default: "true",
2168
- description: "When true, renders role='none' (purely visual). When false, renders as role='separator'."
2750
+ default: "false"
2169
2751
  },
2170
2752
  {
2171
- name: "label",
2753
+ name: "ariaLabel",
2172
2754
  type: "string",
2173
- required: false,
2174
- description: "Accessible label for non-decorative dividers."
2755
+ default: "auto-generated summary"
2175
2756
  }
2176
2757
  ],
2177
2758
  events: [],
2178
- slots: [],
2759
+ slots: [
2760
+ {
2761
+ name: "center"
2762
+ },
2763
+ {
2764
+ name: "empty"
2765
+ }
2766
+ ],
2179
2767
  a11y: [
2180
- "role: none (decorative) or separator (semantic)",
2181
- "aria-orientation: Set when non-decorative.",
2182
- "aria-label: Set from `label` prop when non-decorative."
2768
+ "Renders role=img with an aria-label summarizing the chart.",
2769
+ "Legend + percentages give a non-visual reading of each slice."
2770
+ ],
2771
+ behavior: [
2772
+ "colors_auto_assign_from_chart_palette: --tree-color-chart-1..8, cycling; per-segment color overrides",
2773
+ "hovering_a_slice_dims_the_rest_and_updates_center: true",
2774
+ "center_shows_total_or_the_hovered_segment: true"
2183
2775
  ],
2184
- behavior: [],
2185
2776
  selection: {
2186
- keywords: [],
2187
- useWhen: [],
2188
- avoidWhen: [],
2189
- alternatives: []
2777
+ keywords: [
2778
+ "donut",
2779
+ "doughnut",
2780
+ "pie",
2781
+ "proportion",
2782
+ "share",
2783
+ "breakdown",
2784
+ "part of whole",
2785
+ "percentage"
2786
+ ],
2787
+ useWhen: [
2788
+ "You are showing how a total splits into a handful of categories.",
2789
+ "A donut center readout (total or hovered slice) is useful."
2790
+ ],
2791
+ avoidWhen: [
2792
+ "There are many categories or precise comparison matters \u2014 use TChart bars.",
2793
+ "The data is a trend over time \u2014 use TChart or TSparkline."
2794
+ ],
2795
+ alternatives: [
2796
+ {
2797
+ component: "TChart",
2798
+ when: "Precise magnitude comparison across categories is needed (bars)."
2799
+ }
2800
+ ]
2190
2801
  },
2191
2802
  setup: {
2192
2803
  required: [],
2193
- notes: []
2804
+ notes: [
2805
+ "Pass `segments` as `{ label, value, color? }[]`; non-positive values are dropped.",
2806
+ "Set `thickness: 0` for a full pie; keep the default for a donut with a center readout.",
2807
+ "Use the `center` slot (donut only) for a custom center; otherwise it shows the total or the hovered slice."
2808
+ ]
2194
2809
  },
2195
- recipes: []
2810
+ recipes: [
2811
+ "metric-dashboard"
2812
+ ]
2196
2813
  },
2197
2814
  {
2198
2815
  name: "TDrawer",
2199
- legacyAlias: "TreeDrawer",
2200
- aliases: [
2201
- "TreeDrawer"
2202
- ],
2816
+ aliases: [],
2203
2817
  package: "@treeui/vue",
2204
2818
  kind: "overlay",
2205
2819
  category: "Overlay",
2206
2820
  status: "available",
2207
2821
  purpose: "Side-anchored panel for secondary content, navigation, or forms.",
2208
- sourceFile: "packages/vue/src/components/TreeDrawer.vue",
2822
+ sourceFile: "packages/vue/src/components/TDrawer.vue",
2209
2823
  storyFile: "apps/docs/src/stories/Drawer.stories.ts",
2210
2824
  storyTitle: "Components/Overlay/Drawer",
2211
2825
  manifestFile: "docs/ai/COMPONENTS/drawer.yaml",
@@ -2227,7 +2841,7 @@ var treeui_catalog_default = {
2227
2841
  },
2228
2842
  {
2229
2843
  name: "size",
2230
- type: "TreeSize",
2844
+ type: "TSize",
2231
2845
  default: "md",
2232
2846
  values: [
2233
2847
  "sm",
@@ -2237,7 +2851,7 @@ var treeui_catalog_default = {
2237
2851
  },
2238
2852
  {
2239
2853
  name: "side",
2240
- type: "TreeDrawerSide",
2854
+ type: "TDrawerSide",
2241
2855
  default: "right",
2242
2856
  values: [
2243
2857
  "top",
@@ -2352,23 +2966,20 @@ var treeui_catalog_default = {
2352
2966
  },
2353
2967
  {
2354
2968
  name: "TDropdown",
2355
- legacyAlias: "TreeDropdown",
2356
- aliases: [
2357
- "TreeDropdown"
2358
- ],
2969
+ aliases: [],
2359
2970
  package: "@treeui/vue",
2360
2971
  kind: "overlay",
2361
2972
  category: "Overlay",
2362
2973
  status: "available",
2363
2974
  purpose: "Trigger + floating menu with keyboard navigation for action lists.",
2364
- sourceFile: "packages/vue/src/components/TreeDropdown.vue",
2975
+ sourceFile: "packages/vue/src/components/TDropdown.vue",
2365
2976
  storyFile: "apps/docs/src/stories/Dropdown.stories.ts",
2366
2977
  storyTitle: "Components/Overlay/Dropdown",
2367
2978
  manifestFile: "docs/ai/COMPONENTS/dropdown.yaml",
2368
2979
  props: [
2369
2980
  {
2370
2981
  name: "items",
2371
- type: "TreeDropdownItem[]",
2982
+ type: "TDropdownItem[]",
2372
2983
  default: "[]",
2373
2984
  note: "Array of { label: string; value: string; disabled?: boolean }"
2374
2985
  },
@@ -2389,7 +3000,7 @@ var treeui_catalog_default = {
2389
3000
  },
2390
3001
  {
2391
3002
  name: "size",
2392
- type: "TreeSize",
3003
+ type: "TSize",
2393
3004
  default: "md",
2394
3005
  values: [
2395
3006
  "sm",
@@ -2401,6 +3012,16 @@ var treeui_catalog_default = {
2401
3012
  name: "label",
2402
3013
  type: "string",
2403
3014
  default: ""
3015
+ },
3016
+ {
3017
+ name: "align",
3018
+ type: "TDropdownAlign",
3019
+ default: "start",
3020
+ values: [
3021
+ "start",
3022
+ "end"
3023
+ ],
3024
+ 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)."
2404
3025
  }
2405
3026
  ],
2406
3027
  events: [
@@ -2436,7 +3057,8 @@ var treeui_catalog_default = {
2436
3057
  behavior: [
2437
3058
  "outside_click_closes_menu: true",
2438
3059
  "focus_restores_on_close: true",
2439
- "chevron_rotates_when_open: true"
3060
+ "chevron_rotates_when_open: true",
3061
+ "menu_grows_to_fit_items_without_wrapping: true"
2440
3062
  ],
2441
3063
  selection: {
2442
3064
  keywords: [
@@ -2469,16 +3091,13 @@ var treeui_catalog_default = {
2469
3091
  },
2470
3092
  {
2471
3093
  name: "TEmptyState",
2472
- legacyAlias: "TreeEmptyState",
2473
- aliases: [
2474
- "TreeEmptyState"
2475
- ],
3094
+ aliases: [],
2476
3095
  package: "@treeui/vue",
2477
3096
  kind: "feedback",
2478
3097
  category: "Feedback",
2479
3098
  status: "available",
2480
3099
  purpose: "Structured empty, no-results, and first-run placeholder block with optional icon, body content, and actions.",
2481
- sourceFile: "packages/vue/src/components/TreeEmptyState.vue",
3100
+ sourceFile: "packages/vue/src/components/TEmptyState.vue",
2482
3101
  storyFile: "apps/docs/src/stories/EmptyState.stories.ts",
2483
3102
  storyTitle: "Components/Feedback/EmptyState",
2484
3103
  manifestFile: "docs/ai/COMPONENTS/empty-state.yaml",
@@ -2490,7 +3109,7 @@ var treeui_catalog_default = {
2490
3109
  },
2491
3110
  {
2492
3111
  name: "size",
2493
- type: "TreeSize",
3112
+ type: "TSize",
2494
3113
  default: "md",
2495
3114
  values: [
2496
3115
  "sm",
@@ -2564,16 +3183,13 @@ var treeui_catalog_default = {
2564
3183
  },
2565
3184
  {
2566
3185
  name: "TFileUpload",
2567
- legacyAlias: "TreeFileUpload",
2568
- aliases: [
2569
- "TreeFileUpload"
2570
- ],
3186
+ aliases: [],
2571
3187
  package: "@treeui/vue",
2572
3188
  kind: "form",
2573
3189
  category: "Form",
2574
3190
  status: "available",
2575
3191
  purpose: "Composable dropzone and file picker with browse, drag-and-drop, and Ctrl+V paste support.",
2576
- sourceFile: "packages/vue/src/components/TreeFileUpload.vue",
3192
+ sourceFile: "packages/vue/src/components/TFileUpload.vue",
2577
3193
  storyFile: "apps/docs/src/stories/FileUpload.stories.ts",
2578
3194
  storyTitle: "Components/Form/FileUpload",
2579
3195
  manifestFile: "docs/ai/COMPONENTS/file-upload.yaml",
@@ -2585,7 +3201,7 @@ var treeui_catalog_default = {
2585
3201
  },
2586
3202
  {
2587
3203
  name: "size",
2588
- type: "TreeSize",
3204
+ type: "TSize",
2589
3205
  default: "md",
2590
3206
  values: [
2591
3207
  "sm",
@@ -2718,15 +3334,12 @@ var treeui_catalog_default = {
2718
3334
  },
2719
3335
  {
2720
3336
  name: "TFormField",
2721
- legacyAlias: "TreeFormField",
2722
- aliases: [
2723
- "TreeFormField"
2724
- ],
3337
+ aliases: [],
2725
3338
  package: "@treeui/vue",
2726
3339
  category: "Data Entry",
2727
3340
  status: "milestone-1",
2728
3341
  description: "Label + input wrapper with error and hint slots. Provides consistent layout, labelling, and validation messaging for any form control.\n",
2729
- sourceFile: "packages/vue/src/components/TreeFormField.vue",
3342
+ sourceFile: "packages/vue/src/components/TFormField.vue",
2730
3343
  storyFile: "apps/docs/src/stories/FormField.stories.ts",
2731
3344
  storyTitle: "Components/Data Entry/FormField",
2732
3345
  manifestFile: "docs/ai/COMPONENTS/form-field.yaml",
@@ -2769,7 +3382,7 @@ var treeui_catalog_default = {
2769
3382
  },
2770
3383
  {
2771
3384
  name: "size",
2772
- type: "TreeSize",
3385
+ type: "TSize",
2773
3386
  default: "md",
2774
3387
  values: [
2775
3388
  "sm",
@@ -2850,16 +3463,13 @@ var treeui_catalog_default = {
2850
3463
  },
2851
3464
  {
2852
3465
  name: "TGrid",
2853
- legacyAlias: "TreeGrid",
2854
- aliases: [
2855
- "TreeGrid"
2856
- ],
3466
+ aliases: [],
2857
3467
  package: "@treeui/vue",
2858
3468
  kind: "layout",
2859
3469
  category: "Layout",
2860
3470
  status: "available",
2861
3471
  purpose: "Responsive grid wrapper for cards, forms, stats, and other multi-column layouts.",
2862
- sourceFile: "packages/vue/src/components/TreeGrid.vue",
3472
+ sourceFile: "packages/vue/src/components/TGrid.vue",
2863
3473
  storyFile: "apps/docs/src/stories/Grid.stories.ts",
2864
3474
  storyTitle: "Components/Layout/Grid",
2865
3475
  manifestFile: "docs/ai/COMPONENTS/grid.yaml",
@@ -2948,21 +3558,109 @@ var treeui_catalog_default = {
2948
3558
  },
2949
3559
  recipes: [
2950
3560
  "date-range-form",
2951
- "stat-grid"
3561
+ "stat-grid",
3562
+ "metric-dashboard"
2952
3563
  ]
2953
3564
  },
2954
3565
  {
2955
- name: "TInput",
2956
- legacyAlias: "TreeInput",
2957
- aliases: [
2958
- "TreeInput"
3566
+ name: "TIcon",
3567
+ aliases: [],
3568
+ package: "@treeui/vue",
3569
+ kind: "display",
3570
+ category: "Data Display",
3571
+ status: "available",
3572
+ purpose: "Render a registered TreeUI icon by name with consistent sizing and accessibility defaults.",
3573
+ sourceFile: "packages/vue/src/components/TIcon.vue",
3574
+ storyFile: "apps/docs/src/stories/Icon.stories.ts",
3575
+ storyTitle: "Components/Data Display/Icon",
3576
+ manifestFile: "docs/ai/COMPONENTS/icon.yaml",
3577
+ props: [
3578
+ {
3579
+ name: "name",
3580
+ type: "TIconName",
3581
+ required: true,
3582
+ values: [
3583
+ "alert-circle",
3584
+ "calendar",
3585
+ "check",
3586
+ "chevron-left",
3587
+ "chevron-down",
3588
+ "chevron-right",
3589
+ "info",
3590
+ "loader-circle",
3591
+ "search",
3592
+ "x"
3593
+ ],
3594
+ description: "Icon identifier from the @treeui/icons registry."
3595
+ },
3596
+ {
3597
+ name: "size",
3598
+ type: "number | string",
3599
+ default: "20",
3600
+ description: "Pixel size for both width and height of the rendered svg."
3601
+ },
3602
+ {
3603
+ name: "strokeWidth",
3604
+ type: "number | string",
3605
+ default: "2"
3606
+ },
3607
+ {
3608
+ name: "absoluteStrokeWidth",
3609
+ type: "boolean",
3610
+ default: "true",
3611
+ description: "When true, stroke width stays visually constant across sizes."
3612
+ },
3613
+ {
3614
+ name: "label",
3615
+ type: "string",
3616
+ default: "undefined",
3617
+ description: 'Accessible label. When set, the icon becomes role="img" with aria-label; otherwise it is aria-hidden.'
3618
+ }
3619
+ ],
3620
+ events: [],
3621
+ slots: [],
3622
+ a11y: [
3623
+ "decorative_by_default: true",
3624
+ "becomes_image_when_labeled: true",
3625
+ "rule: Provide `label` only when the icon conveys meaning that is not already in adjacent text."
2959
3626
  ],
3627
+ behavior: [],
3628
+ selection: {
3629
+ keywords: [
3630
+ "icon",
3631
+ "svg",
3632
+ "glyph",
3633
+ "pictogram"
3634
+ ],
3635
+ useWhen: [
3636
+ "You need to render a registered TreeUI icon by name.",
3637
+ "You want consistent sizing and a11y defaults without importing the icon component directly."
3638
+ ],
3639
+ avoidWhen: [
3640
+ "The icon is not in the @treeui/icons registry \u2014 import or register it instead."
3641
+ ],
3642
+ alternatives: [
3643
+ {
3644
+ component: "named import from @treeui/icons",
3645
+ when: "You need tree-shaken, statically-imported icon components."
3646
+ }
3647
+ ]
3648
+ },
3649
+ setup: {
3650
+ required: [],
3651
+ notes: []
3652
+ },
3653
+ recipes: []
3654
+ },
3655
+ {
3656
+ name: "TInput",
3657
+ aliases: [],
2960
3658
  package: "@treeui/vue",
2961
3659
  kind: "primitive",
2962
3660
  category: "Data Entry",
2963
3661
  status: "available",
2964
3662
  purpose: "Text input with size, loading, invalid, and prefix or suffix slots.",
2965
- sourceFile: "packages/vue/src/components/TreeInput.vue",
3663
+ sourceFile: "packages/vue/src/components/TInput.vue",
2966
3664
  storyFile: "apps/docs/src/stories/Input.stories.ts",
2967
3665
  storyTitle: "Components/Data Entry/Input",
2968
3666
  manifestFile: "docs/ai/COMPONENTS/input.yaml",
@@ -2974,7 +3672,7 @@ var treeui_catalog_default = {
2974
3672
  },
2975
3673
  {
2976
3674
  name: "size",
2977
- type: "TreeSize",
3675
+ type: "TSize",
2978
3676
  default: "md",
2979
3677
  values: [
2980
3678
  "sm",
@@ -3068,16 +3766,13 @@ var treeui_catalog_default = {
3068
3766
  },
3069
3767
  {
3070
3768
  name: "TLink",
3071
- legacyAlias: "TreeLink",
3072
- aliases: [
3073
- "TreeLink"
3074
- ],
3769
+ aliases: [],
3075
3770
  package: "@treeui/vue",
3076
3771
  kind: "navigation",
3077
3772
  category: "Navigation",
3078
3773
  status: "available",
3079
3774
  purpose: "Inline link with consistent styling, optional RouterLink rendering, and external link support.",
3080
- sourceFile: "packages/vue/src/components/TreeLink.vue",
3775
+ sourceFile: "packages/vue/src/components/TLink.vue",
3081
3776
  storyFile: "apps/docs/src/stories/Link.stories.ts",
3082
3777
  storyTitle: "Components/Navigation/Link",
3083
3778
  manifestFile: "docs/ai/COMPONENTS/link.yaml",
@@ -3107,7 +3802,7 @@ var treeui_catalog_default = {
3107
3802
  },
3108
3803
  {
3109
3804
  name: "variant",
3110
- type: "TreeLinkVariant",
3805
+ type: "TLinkVariant",
3111
3806
  default: "default",
3112
3807
  values: [
3113
3808
  "default",
@@ -3143,10 +3838,7 @@ var treeui_catalog_default = {
3143
3838
  },
3144
3839
  {
3145
3840
  name: "TMarkdownEditor",
3146
- legacyAlias: "TreeMarkdownEditor",
3147
- aliases: [
3148
- "TreeMarkdownEditor"
3149
- ],
3841
+ aliases: [],
3150
3842
  package: "@treeui/vue",
3151
3843
  category: "Form",
3152
3844
  status: "stable",
@@ -3163,7 +3855,7 @@ var treeui_catalog_default = {
3163
3855
  },
3164
3856
  {
3165
3857
  name: "size",
3166
- type: "TreeSize",
3858
+ type: "TSize",
3167
3859
  default: "md",
3168
3860
  values: [
3169
3861
  "sm",
@@ -3248,16 +3940,13 @@ var treeui_catalog_default = {
3248
3940
  },
3249
3941
  {
3250
3942
  name: "TModal",
3251
- legacyAlias: "TreeModal",
3252
- aliases: [
3253
- "TreeModal"
3254
- ],
3943
+ aliases: [],
3255
3944
  package: "@treeui/vue",
3256
3945
  kind: "overlay",
3257
3946
  category: "Overlay",
3258
3947
  status: "available",
3259
3948
  purpose: "Accessible modal dialog for focused tasks and confirmations.",
3260
- sourceFile: "packages/vue/src/components/TreeModal.vue",
3949
+ sourceFile: "packages/vue/src/components/TModal.vue",
3261
3950
  storyFile: "apps/docs/src/stories/Modal.stories.ts",
3262
3951
  storyTitle: "Components/Overlay/Modal",
3263
3952
  manifestFile: "docs/ai/COMPONENTS/modal.yaml",
@@ -3279,7 +3968,7 @@ var treeui_catalog_default = {
3279
3968
  },
3280
3969
  {
3281
3970
  name: "size",
3282
- type: "TreeSize",
3971
+ type: "TSize",
3283
3972
  default: "md",
3284
3973
  values: [
3285
3974
  "sm",
@@ -3399,16 +4088,13 @@ var treeui_catalog_default = {
3399
4088
  },
3400
4089
  {
3401
4090
  name: "TMultiSelect",
3402
- legacyAlias: "TreeMultiSelect",
3403
- aliases: [
3404
- "TreeMultiSelect"
3405
- ],
4091
+ aliases: [],
3406
4092
  package: "@treeui/vue",
3407
4093
  kind: "form",
3408
4094
  category: "Data Entry",
3409
4095
  status: "available",
3410
4096
  purpose: "Searchable multi-select control that renders selected values as tags.",
3411
- sourceFile: "packages/vue/src/components/TreeMultiSelect.vue",
4097
+ sourceFile: "packages/vue/src/components/TMultiSelect.vue",
3412
4098
  storyFile: "apps/docs/src/stories/MultiSelect.stories.ts",
3413
4099
  storyTitle: "Components/Data Entry/MultiSelect",
3414
4100
  manifestFile: "docs/ai/COMPONENTS/multi-select.yaml",
@@ -3420,7 +4106,7 @@ var treeui_catalog_default = {
3420
4106
  },
3421
4107
  {
3422
4108
  name: "options",
3423
- type: "TreeMultiSelectOption[]",
4109
+ type: "TMultiSelectOption[]",
3424
4110
  default: "[]",
3425
4111
  note: "Array of `{ label, value, description?, keywords?, disabled? }`."
3426
4112
  },
@@ -3436,7 +4122,7 @@ var treeui_catalog_default = {
3436
4122
  },
3437
4123
  {
3438
4124
  name: "size",
3439
- type: "TreeSize",
4125
+ type: "TSize",
3440
4126
  default: "md",
3441
4127
  values: [
3442
4128
  "sm",
@@ -3561,18 +4247,15 @@ var treeui_catalog_default = {
3561
4247
  },
3562
4248
  {
3563
4249
  name: "TNavbar",
3564
- legacyAlias: "TreeAppBar",
3565
4250
  aliases: [
3566
- "TAppBar",
3567
- "TreeAppBar",
3568
- "TreeNavbar"
4251
+ "TAppBar"
3569
4252
  ],
3570
4253
  package: "@treeui/vue",
3571
4254
  kind: "layout",
3572
4255
  category: "Layout",
3573
4256
  status: "available",
3574
4257
  purpose: "Top application bar with start, center, and end content areas.",
3575
- sourceFile: "packages/vue/src/components/TreeNavbar.vue",
4258
+ sourceFile: "packages/vue/src/components/TNavbar.vue",
3576
4259
  storyFile: "apps/docs/src/stories/Navbar.stories.ts",
3577
4260
  storyTitle: "Components/Layout/Navbar",
3578
4261
  manifestFile: "docs/ai/COMPONENTS/navbar.yaml",
@@ -3584,7 +4267,7 @@ var treeui_catalog_default = {
3584
4267
  },
3585
4268
  {
3586
4269
  name: "size",
3587
- type: "TreeSize",
4270
+ type: "TSize",
3588
4271
  default: "md",
3589
4272
  values: [
3590
4273
  "sm",
@@ -3662,16 +4345,13 @@ var treeui_catalog_default = {
3662
4345
  },
3663
4346
  {
3664
4347
  name: "TNavMenu",
3665
- legacyAlias: "TreeNavMenu",
3666
- aliases: [
3667
- "TreeNavMenu"
3668
- ],
4348
+ aliases: [],
3669
4349
  package: "@treeui/vue",
3670
4350
  kind: "navigation",
3671
4351
  category: "Layout",
3672
4352
  status: "available",
3673
4353
  purpose: "Vertical navigation menu with selection state, keyboard navigation, optional RouterLink rendering, and sidebar integration.",
3674
- sourceFile: "packages/vue/src/components/TreeNavMenu.vue",
4354
+ sourceFile: "packages/vue/src/components/TNavMenu.vue",
3675
4355
  storyFile: "apps/docs/src/stories/NavMenu.stories.ts",
3676
4356
  storyTitle: "Components/Layout/NavMenu",
3677
4357
  manifestFile: "docs/ai/COMPONENTS/nav-menu.yaml",
@@ -3688,13 +4368,13 @@ var treeui_catalog_default = {
3688
4368
  },
3689
4369
  {
3690
4370
  name: "items",
3691
- type: "TreeNavMenuItem[]",
4371
+ type: "TNavMenuItem[]",
3692
4372
  default: "[]",
3693
4373
  note: "Array of `{ label, value, shortLabel?, description?, icon?, to?, badge?, disabled? }`."
3694
4374
  },
3695
4375
  {
3696
4376
  name: "size",
3697
- type: "TreeSize",
4377
+ type: "TSize",
3698
4378
  default: "md",
3699
4379
  values: [
3700
4380
  "sm",
@@ -3769,25 +4449,23 @@ var treeui_catalog_default = {
3769
4449
  setup: {
3770
4450
  required: [],
3771
4451
  notes: [
3772
- "When nested inside `TSidebar`, `collapsed` can be inherited from the sidebar provider."
4452
+ "When nested inside `TSidebar` or `TAppShell`, `collapsed` can be inherited from the sidebar provider."
3773
4453
  ]
3774
4454
  },
3775
4455
  recipes: [
4456
+ "app-shell",
3776
4457
  "sidebar-shell"
3777
4458
  ]
3778
4459
  },
3779
4460
  {
3780
4461
  name: "TNumberInput",
3781
- legacyAlias: "TreeNumberInput",
3782
- aliases: [
3783
- "TreeNumberInput"
3784
- ],
4462
+ aliases: [],
3785
4463
  package: "@treeui/vue",
3786
4464
  kind: "form",
3787
4465
  category: "Data Entry",
3788
4466
  status: "available",
3789
4467
  purpose: "Numeric input with optional increment and decrement controls.",
3790
- sourceFile: "packages/vue/src/components/TreeNumberInput.vue",
4468
+ sourceFile: "packages/vue/src/components/TNumberInput.vue",
3791
4469
  storyFile: "apps/docs/src/stories/NumberInput.stories.ts",
3792
4470
  storyTitle: "Components/Data Entry/NumberInput",
3793
4471
  manifestFile: "docs/ai/COMPONENTS/number-input.yaml",
@@ -3813,7 +4491,7 @@ var treeui_catalog_default = {
3813
4491
  },
3814
4492
  {
3815
4493
  name: "size",
3816
- type: "TreeSize",
4494
+ type: "TSize",
3817
4495
  default: "md",
3818
4496
  values: [
3819
4497
  "sm",
@@ -3888,16 +4566,13 @@ var treeui_catalog_default = {
3888
4566
  },
3889
4567
  {
3890
4568
  name: "TPagination",
3891
- legacyAlias: "TreePagination",
3892
- aliases: [
3893
- "TreePagination"
3894
- ],
4569
+ aliases: [],
3895
4570
  package: "@treeui/vue",
3896
4571
  kind: "primitive",
3897
4572
  category: "Navigation",
3898
4573
  status: "available",
3899
4574
  purpose: "Page controls with previous/next navigation, numbered page buttons, and ellipsis for large page ranges. Supports v-model for the active page.\n",
3900
- sourceFile: "packages/vue/src/components/TreePagination.vue",
4575
+ sourceFile: "packages/vue/src/components/TPagination.vue",
3901
4576
  storyFile: "apps/docs/src/stories/Pagination.stories.ts",
3902
4577
  storyTitle: "Components/Navigation/Pagination",
3903
4578
  manifestFile: "docs/ai/COMPONENTS/pagination.yaml",
@@ -3922,7 +4597,7 @@ var treeui_catalog_default = {
3922
4597
  },
3923
4598
  {
3924
4599
  name: "size",
3925
- type: "TreeSize",
4600
+ type: "TSize",
3926
4601
  default: "md",
3927
4602
  values: [
3928
4603
  "sm",
@@ -4004,10 +4679,7 @@ var treeui_catalog_default = {
4004
4679
  },
4005
4680
  {
4006
4681
  name: "TPopover",
4007
- legacyAlias: "TreePopover",
4008
- aliases: [
4009
- "TreePopover"
4010
- ],
4682
+ aliases: [],
4011
4683
  package: "@treeui/vue",
4012
4684
  category: "Overlay",
4013
4685
  status: "stable",
@@ -4110,10 +4782,7 @@ var treeui_catalog_default = {
4110
4782
  },
4111
4783
  {
4112
4784
  name: "TPricing",
4113
- legacyAlias: "TreePricing",
4114
- aliases: [
4115
- "TreePricing"
4116
- ],
4785
+ aliases: [],
4117
4786
  package: "@treeui/vue",
4118
4787
  status: "stable",
4119
4788
  description: "Grid wrapper that renders multiple PricingCard components from an array of plan objects.\n",
@@ -4129,7 +4798,7 @@ var treeui_catalog_default = {
4129
4798
  },
4130
4799
  {
4131
4800
  name: "size",
4132
- type: "TreeSize",
4801
+ type: "TSize",
4133
4802
  default: "md",
4134
4803
  description: "Size applied to all child pricing cards."
4135
4804
  },
@@ -4177,10 +4846,7 @@ var treeui_catalog_default = {
4177
4846
  },
4178
4847
  {
4179
4848
  name: "TPricingCard",
4180
- legacyAlias: "TreePricingCard",
4181
- aliases: [
4182
- "TreePricingCard"
4183
- ],
4849
+ aliases: [],
4184
4850
  package: "@treeui/vue",
4185
4851
  category: "Data Display",
4186
4852
  status: "stable",
@@ -4245,7 +4911,7 @@ var treeui_catalog_default = {
4245
4911
  },
4246
4912
  {
4247
4913
  name: "size",
4248
- type: "TreeSize",
4914
+ type: "TSize",
4249
4915
  default: "md",
4250
4916
  description: "Card size \u2014 affects padding, font sizes."
4251
4917
  },
@@ -4290,7 +4956,7 @@ var treeui_catalog_default = {
4290
4956
  "Uses <h3> for plan title.",
4291
4957
  'Feature list uses role="list" with <ul>/<li>.',
4292
4958
  'Feature icons are aria-hidden="true".',
4293
- "CTA button inherits TreeButton a11y (disabled, aria-busy)."
4959
+ "CTA button inherits TButton a11y (disabled, aria-busy)."
4294
4960
  ],
4295
4961
  behavior: [],
4296
4962
  selection: {
@@ -4309,10 +4975,7 @@ var treeui_catalog_default = {
4309
4975
  },
4310
4976
  {
4311
4977
  name: "TProgress",
4312
- legacyAlias: "TreeProgress",
4313
- aliases: [
4314
- "TreeProgress"
4315
- ],
4978
+ aliases: [],
4316
4979
  package: "@treeui/vue",
4317
4980
  category: "Feedback",
4318
4981
  status: "draft",
@@ -4335,7 +4998,7 @@ var treeui_catalog_default = {
4335
4998
  },
4336
4999
  {
4337
5000
  name: "size",
4338
- type: "TreeSize",
5001
+ type: "TSize",
4339
5002
  default: "md",
4340
5003
  values: [
4341
5004
  "sm",
@@ -4373,15 +5036,12 @@ var treeui_catalog_default = {
4373
5036
  },
4374
5037
  {
4375
5038
  name: "TRadio",
4376
- legacyAlias: "TreeRadio",
4377
- aliases: [
4378
- "TreeRadio"
4379
- ],
5039
+ aliases: [],
4380
5040
  package: "@treeui/vue",
4381
5041
  kind: "primitive",
4382
5042
  status: "available",
4383
5043
  purpose: "Single radio option within a TRadioGroup; renders a native radio input.",
4384
- sourceFile: "packages/vue/src/components/TreeRadio.vue",
5044
+ sourceFile: "packages/vue/src/components/TRadio.vue",
4385
5045
  manifestFile: "docs/ai/COMPONENTS/radio.yaml",
4386
5046
  props: [
4387
5047
  {
@@ -4401,7 +5061,7 @@ var treeui_catalog_default = {
4401
5061
  },
4402
5062
  {
4403
5063
  name: "size",
4404
- type: "TreeSize",
5064
+ type: "TSize",
4405
5065
  default: "inherited_from_group",
4406
5066
  values: [
4407
5067
  "sm",
@@ -4444,16 +5104,13 @@ var treeui_catalog_default = {
4444
5104
  },
4445
5105
  {
4446
5106
  name: "TRadioGroup",
4447
- legacyAlias: "TreeRadioGroup",
4448
- aliases: [
4449
- "TreeRadioGroup"
4450
- ],
5107
+ aliases: [],
4451
5108
  package: "@treeui/vue",
4452
5109
  kind: "primitive",
4453
5110
  category: "Data Entry",
4454
5111
  status: "available",
4455
5112
  purpose: "Container for TRadio options; manages v-model for single-select from a group.",
4456
- sourceFile: "packages/vue/src/components/TreeRadioGroup.vue",
5113
+ sourceFile: "packages/vue/src/components/TRadioGroup.vue",
4457
5114
  storyFile: "apps/docs/src/stories/Radio.stories.ts",
4458
5115
  storyTitle: "Components/Data Entry/Radio",
4459
5116
  manifestFile: "docs/ai/COMPONENTS/radio.yaml",
@@ -4480,7 +5137,7 @@ var treeui_catalog_default = {
4480
5137
  },
4481
5138
  {
4482
5139
  name: "size",
4483
- type: "TreeSize",
5140
+ type: "TSize",
4484
5141
  default: "md",
4485
5142
  values: [
4486
5143
  "sm",
@@ -4522,16 +5179,13 @@ var treeui_catalog_default = {
4522
5179
  },
4523
5180
  {
4524
5181
  name: "TSelect",
4525
- legacyAlias: "TreeSelect",
4526
- aliases: [
4527
- "TreeSelect"
4528
- ],
5182
+ aliases: [],
4529
5183
  package: "@treeui/vue",
4530
5184
  kind: "primitive",
4531
5185
  category: "Data Entry",
4532
5186
  status: "available",
4533
5187
  purpose: "Custom styled dropdown select with listbox; controlled and uncontrolled via v-model and open/defaultOpen.",
4534
- sourceFile: "packages/vue/src/components/TreeSelect.vue",
5188
+ sourceFile: "packages/vue/src/components/TSelect.vue",
4535
5189
  storyFile: "apps/docs/src/stories/Select.stories.ts",
4536
5190
  storyTitle: "Components/Data Entry/Select",
4537
5191
  manifestFile: "docs/ai/COMPONENTS/select.yaml",
@@ -4543,7 +5197,7 @@ var treeui_catalog_default = {
4543
5197
  },
4544
5198
  {
4545
5199
  name: "options",
4546
- type: "TreeSelectOption[]",
5200
+ type: "TSelectOption[]",
4547
5201
  default: "[]",
4548
5202
  note: "Array of { label: string; value: string | number; disabled?: boolean }"
4549
5203
  },
@@ -4559,7 +5213,7 @@ var treeui_catalog_default = {
4559
5213
  },
4560
5214
  {
4561
5215
  name: "size",
4562
- type: "TreeSize",
5216
+ type: "TSize",
4563
5217
  default: "md",
4564
5218
  values: [
4565
5219
  "sm",
@@ -4626,7 +5280,8 @@ var treeui_catalog_default = {
4626
5280
  "check_icon_on_selected_option: true",
4627
5281
  "outside_click_closes_dropdown: true",
4628
5282
  "focus_restores_on_close: true",
4629
- "numeric_values_supported_without_string_coercion: true"
5283
+ "numeric_values_supported_without_string_coercion: true",
5284
+ "listbox_flips_above_trigger_when_space_below_is_insufficient: true"
4630
5285
  ],
4631
5286
  selection: {
4632
5287
  keywords: [
@@ -4659,20 +5314,19 @@ var treeui_catalog_default = {
4659
5314
  "Use `placeholder` when no selection has been made."
4660
5315
  ]
4661
5316
  },
4662
- recipes: []
5317
+ recipes: [
5318
+ "chart-surface"
5319
+ ]
4663
5320
  },
4664
5321
  {
4665
5322
  name: "TSelectableList",
4666
- legacyAlias: "TreeSelectableList",
4667
- aliases: [
4668
- "TreeSelectableList"
4669
- ],
5323
+ aliases: [],
4670
5324
  package: "@treeui/vue",
4671
5325
  kind: "selection",
4672
5326
  category: "Navigation & Disclosure",
4673
5327
  status: "available",
4674
5328
  purpose: "Rich single-selection list for options with description and metadata.",
4675
- sourceFile: "packages/vue/src/components/TreeSelectableList.vue",
5329
+ sourceFile: "packages/vue/src/components/TSelectableList.vue",
4676
5330
  storyFile: "apps/docs/src/stories/SelectableList.stories.ts",
4677
5331
  storyTitle: "Components/Navigation & Disclosure/SelectableList",
4678
5332
  manifestFile: "docs/ai/COMPONENTS/selectable-list.yaml",
@@ -4689,13 +5343,13 @@ var treeui_catalog_default = {
4689
5343
  },
4690
5344
  {
4691
5345
  name: "items",
4692
- type: "TreeSelectableListItem[]",
5346
+ type: "TSelectableListItem[]",
4693
5347
  default: "[]",
4694
5348
  note: "Array of `{ label, value, description?, meta?, disabled? }`."
4695
5349
  },
4696
5350
  {
4697
5351
  name: "size",
4698
- type: "TreeSize",
5352
+ type: "TSize",
4699
5353
  default: "md",
4700
5354
  values: [
4701
5355
  "sm",
@@ -4772,16 +5426,13 @@ var treeui_catalog_default = {
4772
5426
  },
4773
5427
  {
4774
5428
  name: "TSidebar",
4775
- legacyAlias: "TreeSidebar",
4776
- aliases: [
4777
- "TreeSidebar"
4778
- ],
5429
+ aliases: [],
4779
5430
  package: "@treeui/vue",
4780
5431
  kind: "layout",
4781
5432
  category: "Layout",
4782
5433
  status: "available",
4783
5434
  purpose: "Persistent or collapsible side shell for app navigation and secondary workspace controls.",
4784
- sourceFile: "packages/vue/src/components/TreeSidebar.vue",
5435
+ sourceFile: "packages/vue/src/components/TSidebar.vue",
4785
5436
  storyFile: "apps/docs/src/stories/Sidebar.stories.ts",
4786
5437
  storyTitle: "Components/Layout/Sidebar",
4787
5438
  manifestFile: "docs/ai/COMPONENTS/sidebar.yaml",
@@ -4808,7 +5459,7 @@ var treeui_catalog_default = {
4808
5459
  },
4809
5460
  {
4810
5461
  name: "size",
4811
- type: "TreeSize",
5462
+ type: "TSize",
4812
5463
  default: "md",
4813
5464
  values: [
4814
5465
  "sm",
@@ -4818,7 +5469,7 @@ var treeui_catalog_default = {
4818
5469
  },
4819
5470
  {
4820
5471
  name: "side",
4821
- type: "TreeSidebarSide",
5472
+ type: "TSidebarSide",
4822
5473
  default: "left",
4823
5474
  values: [
4824
5475
  "left",
@@ -4887,7 +5538,8 @@ var treeui_catalog_default = {
4887
5538
  "controlled_and_uncontrolled_collapsed_state: true",
4888
5539
  "provides_collapsed_state_to_descendants: true",
4889
5540
  "left_and_right_variants: true",
4890
- "exposes_slot_props_with_collapsed_state: true"
5541
+ "exposes_slot_props_with_collapsed_state: true",
5542
+ "collapsed_state_centers_header_and_footer_content: true"
4891
5543
  ],
4892
5544
  selection: {
4893
5545
  keywords: [
@@ -4912,7 +5564,8 @@ var treeui_catalog_default = {
4912
5564
  required: [],
4913
5565
  notes: [
4914
5566
  "Pair with `TNavMenu` for app-section navigation.",
4915
- "Use controlled `collapsed` state when the app shell persists layout preferences."
5567
+ "Use controlled `collapsed` state when the app shell persists layout preferences.",
5568
+ "Prefer `TAppShell` when you also want full-viewport sizing, a top header, and a responsive mobile drawer."
4916
5569
  ]
4917
5570
  },
4918
5571
  recipes: [
@@ -4921,16 +5574,13 @@ var treeui_catalog_default = {
4921
5574
  },
4922
5575
  {
4923
5576
  name: "TSkeleton",
4924
- legacyAlias: "TreeSkeleton",
4925
- aliases: [
4926
- "TreeSkeleton"
4927
- ],
5577
+ aliases: [],
4928
5578
  package: "@treeui/vue",
4929
5579
  kind: "feedback",
4930
5580
  category: "Feedback",
4931
5581
  status: "available",
4932
5582
  purpose: "Placeholder shimmer for loading states. Renders an animated block that indicates content is being loaded.",
4933
- sourceFile: "packages/vue/src/components/TreeSkeleton.vue",
5583
+ sourceFile: "packages/vue/src/components/TSkeleton.vue",
4934
5584
  storyFile: "apps/docs/src/stories/Skeleton.stories.ts",
4935
5585
  storyTitle: "Components/Feedback/Skeleton",
4936
5586
  manifestFile: "docs/ai/COMPONENTS/skeleton.yaml",
@@ -4986,24 +5636,144 @@ var treeui_catalog_default = {
4986
5636
  recipes: []
4987
5637
  },
4988
5638
  {
4989
- name: "TSpinner",
4990
- legacyAlias: "TreeSpinner",
4991
- aliases: [
4992
- "TreeSpinner"
5639
+ name: "TSparkline",
5640
+ aliases: [],
5641
+ package: "@treeui/vue",
5642
+ kind: "data-display",
5643
+ category: "Data Display",
5644
+ status: "available",
5645
+ purpose: "Tiny, axis-less inline trend chart (line, area, or bar) sized for stat tiles, table cells, and running text.",
5646
+ sourceFile: "packages/vue/src/components/TSparkline.vue",
5647
+ storyFile: "apps/docs/src/stories/Sparkline.stories.ts",
5648
+ storyTitle: "Components/Data Display/Sparkline",
5649
+ manifestFile: "docs/ai/COMPONENTS/sparkline.yaml",
5650
+ props: [
5651
+ {
5652
+ name: "data",
5653
+ type: "number[]",
5654
+ default: "[]"
5655
+ },
5656
+ {
5657
+ name: "type",
5658
+ type: "line | area | bar",
5659
+ default: "line"
5660
+ },
5661
+ {
5662
+ name: "color",
5663
+ type: "string",
5664
+ default: "var(--tree-color-chart-1)",
5665
+ note: "Any CSS color."
5666
+ },
5667
+ {
5668
+ name: "width",
5669
+ type: "number",
5670
+ default: "120"
5671
+ },
5672
+ {
5673
+ name: "height",
5674
+ type: "number",
5675
+ default: "32"
5676
+ },
5677
+ {
5678
+ name: "smooth",
5679
+ type: "boolean",
5680
+ default: "false",
5681
+ note: "Curved line/area."
5682
+ },
5683
+ {
5684
+ name: "strokeWidth",
5685
+ type: "number",
5686
+ default: "2",
5687
+ note: "Line/area only."
5688
+ },
5689
+ {
5690
+ name: "min",
5691
+ type: "number",
5692
+ default: "data min"
5693
+ },
5694
+ {
5695
+ name: "max",
5696
+ type: "number",
5697
+ default: "data max"
5698
+ },
5699
+ {
5700
+ name: "showLastPoint",
5701
+ type: "boolean",
5702
+ default: "false",
5703
+ note: "Marker on the final point (line/area)."
5704
+ },
5705
+ {
5706
+ name: "ariaLabel",
5707
+ type: "string",
5708
+ default: "Trend sparkline"
5709
+ }
4993
5710
  ],
5711
+ events: [],
5712
+ slots: [],
5713
+ a11y: [
5714
+ "Renders role=img with an aria-label; pass a specific one for meaningful trends.",
5715
+ "Pair with a visible number \u2014 a sparkline supplements a value, it does not replace it."
5716
+ ],
5717
+ behavior: [
5718
+ "no_axes_or_legend: true",
5719
+ "flat_series_renders_centered: true",
5720
+ "scales_to_intrinsic_width_and_height: true"
5721
+ ],
5722
+ selection: {
5723
+ keywords: [
5724
+ "sparkline",
5725
+ "mini chart",
5726
+ "inline chart",
5727
+ "micro trend",
5728
+ "trend line",
5729
+ "table chart"
5730
+ ],
5731
+ useWhen: [
5732
+ "You want a compact trend beside a value, in a table cell, or inline in text.",
5733
+ "No axes, legend, or tooltip are required."
5734
+ ],
5735
+ avoidWhen: [
5736
+ "You need axes, multiple labeled series, or a tooltip \u2014 use TChart."
5737
+ ],
5738
+ alternatives: [
5739
+ {
5740
+ component: "TChart",
5741
+ when: "The chart needs axes, a legend, or a tooltip."
5742
+ },
5743
+ {
5744
+ component: "TStat",
5745
+ when: "A single value with a trend badge is enough."
5746
+ }
5747
+ ]
5748
+ },
5749
+ setup: {
5750
+ required: [],
5751
+ notes: [
5752
+ "Pass `data` as `number[]`; there are no axes, legend, or tooltip by design.",
5753
+ "Size it with `width`/`height`; use it inside `TStat`, table cells, or text.",
5754
+ "Always keep a visible number nearby \u2014 a sparkline supplements a value, it does not replace it."
5755
+ ]
5756
+ },
5757
+ recipes: [
5758
+ "metric-dashboard"
5759
+ ]
5760
+ },
5761
+ {
5762
+ name: "TSpinner",
5763
+ aliases: [],
4994
5764
  package: "@treeui/vue",
4995
5765
  kind: "feedback",
4996
5766
  category: "Feedback",
4997
5767
  status: "available",
4998
5768
  purpose: "Accessible loading indicator.",
4999
- sourceFile: "packages/vue/src/components/TreeSpinner.vue",
5769
+ sourceFile: "packages/vue/src/components/TSpinner.vue",
5000
5770
  storyFile: "apps/docs/src/stories/Spinner.stories.ts",
5001
5771
  storyTitle: "Components/Feedback/Spinner",
5002
5772
  manifestFile: "docs/ai/COMPONENTS/spinner.yaml",
5003
5773
  props: [
5004
5774
  {
5005
5775
  name: "size",
5006
- type: "TreeSize",
5776
+ type: "TSize",
5007
5777
  default: "md",
5008
5778
  values: [
5009
5779
  "sm",
@@ -5039,16 +5809,13 @@ var treeui_catalog_default = {
5039
5809
  },
5040
5810
  {
5041
5811
  name: "TStack",
5042
- legacyAlias: "TreeStack",
5043
- aliases: [
5044
- "TreeStack"
5045
- ],
5812
+ aliases: [],
5046
5813
  package: "@treeui/vue",
5047
5814
  kind: "layout",
5048
5815
  category: "Layout",
5049
5816
  status: "available",
5050
5817
  purpose: "One-dimensional spacing and alignment wrapper for vertical or horizontal compositions.",
5051
- sourceFile: "packages/vue/src/components/TreeStack.vue",
5818
+ sourceFile: "packages/vue/src/components/TStack.vue",
5052
5819
  storyFile: "apps/docs/src/stories/Stack.stories.ts",
5053
5820
  storyTitle: "Components/Layout/Stack",
5054
5821
  manifestFile: "docs/ai/COMPONENTS/stack.yaml",
@@ -5060,7 +5827,7 @@ var treeui_catalog_default = {
5060
5827
  },
5061
5828
  {
5062
5829
  name: "direction",
5063
- type: "TreeStackDirection",
5830
+ type: "TStackDirection",
5064
5831
  default: "vertical",
5065
5832
  values: [
5066
5833
  "vertical",
@@ -5140,16 +5907,13 @@ var treeui_catalog_default = {
5140
5907
  },
5141
5908
  {
5142
5909
  name: "TStat",
5143
- legacyAlias: "TreeStat",
5144
- aliases: [
5145
- "TreeStat"
5146
- ],
5910
+ aliases: [],
5147
5911
  package: "@treeui/vue",
5148
5912
  kind: "data-display",
5149
5913
  category: "Data Display",
5150
5914
  status: "available",
5151
5915
  purpose: "Compact KPI display with label, value, trend, metadata, and optional icon.",
5152
- sourceFile: "packages/vue/src/components/TreeStat.vue",
5916
+ sourceFile: "packages/vue/src/components/TStat.vue",
5153
5917
  storyFile: "apps/docs/src/stories/Stat.stories.ts",
5154
5918
  storyTitle: "Components/Data Display/Stat",
5155
5919
  manifestFile: "docs/ai/COMPONENTS/stat.yaml",
@@ -5176,7 +5940,7 @@ var treeui_catalog_default = {
5176
5940
  },
5177
5941
  {
5178
5942
  name: "tone",
5179
- type: "TreeStatTone",
5943
+ type: "TStatTone",
5180
5944
  default: "neutral",
5181
5945
  values: [
5182
5946
  "neutral",
@@ -5188,7 +5952,7 @@ var treeui_catalog_default = {
5188
5952
  },
5189
5953
  {
5190
5954
  name: "trendDirection",
5191
- type: "TreeStatTrendDirection",
5955
+ type: "TStatTrendDirection",
5192
5956
  default: "neutral",
5193
5957
  values: [
5194
5958
  "up",
@@ -5247,6 +6011,10 @@ var treeui_catalog_default = {
5247
6011
  {
5248
6012
  component: "TCard",
5249
6013
  when: "The content is not a metric."
6014
+ },
6015
+ {
6016
+ component: "TSparkline",
6017
+ when: "You want to show the metric's trend as an inline mini-chart."
5250
6018
  }
5251
6019
  ]
5252
6020
  },
@@ -5255,23 +6023,21 @@ var treeui_catalog_default = {
5255
6023
  notes: []
5256
6024
  },
5257
6025
  recipes: [
5258
- "stat-grid"
6026
+ "stat-grid",
6027
+ "metric-dashboard"
5259
6028
  ]
5260
6029
  },
5261
6030
  {
5262
6031
  name: "TSteps",
5263
- legacyAlias: "TreeStepper",
5264
6032
  aliases: [
5265
- "TStepper",
5266
- "TreeStepper",
5267
- "TreeSteps"
6033
+ "TStepper"
5268
6034
  ],
5269
6035
  package: "@treeui/vue",
5270
6036
  kind: "navigation",
5271
6037
  category: "Navigation & Disclosure",
5272
6038
  status: "available",
5273
6039
  purpose: "Stepper component for visualizing workflow progress, with optional interactive selection.",
5274
- sourceFile: "packages/vue/src/components/TreeSteps.vue",
6040
+ sourceFile: "packages/vue/src/components/TSteps.vue",
5275
6041
  storyFile: "apps/docs/src/stories/Steps.stories.ts",
5276
6042
  storyTitle: "Components/Navigation & Disclosure/Steps",
5277
6043
  manifestFile: "docs/ai/COMPONENTS/steps.yaml",
@@ -5288,13 +6054,13 @@ var treeui_catalog_default = {
5288
6054
  },
5289
6055
  {
5290
6056
  name: "items",
5291
- type: "TreeStepItem[]",
6057
+ type: "TStepItem[]",
5292
6058
  default: "[]",
5293
6059
  note: "Array of `{ label, value, description?, meta?, status?, disabled? }`."
5294
6060
  },
5295
6061
  {
5296
6062
  name: "size",
5297
- type: "TreeSize",
6063
+ type: "TSize",
5298
6064
  default: "md",
5299
6065
  values: [
5300
6066
  "sm",
@@ -5304,7 +6070,7 @@ var treeui_catalog_default = {
5304
6070
  },
5305
6071
  {
5306
6072
  name: "orientation",
5307
- type: "TreeStepOrientation",
6073
+ type: "TStepOrientation",
5308
6074
  default: "horizontal",
5309
6075
  values: [
5310
6076
  "horizontal",
@@ -5367,16 +6133,13 @@ var treeui_catalog_default = {
5367
6133
  },
5368
6134
  {
5369
6135
  name: "TSwitch",
5370
- legacyAlias: "TreeSwitch",
5371
- aliases: [
5372
- "TreeSwitch"
5373
- ],
6136
+ aliases: [],
5374
6137
  package: "@treeui/vue",
5375
6138
  kind: "primitive",
5376
6139
  category: "Data Entry",
5377
6140
  status: "available",
5378
6141
  purpose: "On/off toggle; semantic alternative to checkbox for settings. Supports v-model via modelValue.",
5379
- sourceFile: "packages/vue/src/components/TreeSwitch.vue",
6142
+ sourceFile: "packages/vue/src/components/TSwitch.vue",
5380
6143
  storyFile: "apps/docs/src/stories/Switch.stories.ts",
5381
6144
  storyTitle: "Components/Data Entry/Switch",
5382
6145
  manifestFile: "docs/ai/COMPONENTS/switch.yaml",
@@ -5388,7 +6151,7 @@ var treeui_catalog_default = {
5388
6151
  },
5389
6152
  {
5390
6153
  name: "size",
5391
- type: "TreeSize",
6154
+ type: "TSize",
5392
6155
  default: "md",
5393
6156
  values: [
5394
6157
  "sm",
@@ -5459,21 +6222,18 @@ var treeui_catalog_default = {
5459
6222
  },
5460
6223
  {
5461
6224
  name: "TTable",
5462
- legacyAlias: "TreeTable",
5463
- aliases: [
5464
- "TreeTable"
5465
- ],
6225
+ aliases: [],
5466
6226
  package: "@treeui/vue",
5467
6227
  category: "Data Display",
5468
6228
  description: "Sortable, accessible data table with column definitions and row data.",
5469
- sourceFile: "packages/vue/src/components/TreeTable.vue",
6229
+ sourceFile: "packages/vue/src/components/TTable.vue",
5470
6230
  storyFile: "apps/docs/src/stories/Table.stories.ts",
5471
6231
  storyTitle: "Components/Data Display/Table",
5472
6232
  manifestFile: "docs/ai/COMPONENTS/table.yaml",
5473
6233
  props: [
5474
6234
  {
5475
6235
  name: "columns",
5476
- type: "TreeTableColumn[]",
6236
+ type: "TTableColumn[]",
5477
6237
  required: true,
5478
6238
  description: "Array of column definitions with key, label, sortable, align, and width."
5479
6239
  },
@@ -5485,7 +6245,7 @@ var treeui_catalog_default = {
5485
6245
  },
5486
6246
  {
5487
6247
  name: "size",
5488
- type: "TreeSize",
6248
+ type: "TSize",
5489
6249
  default: "md",
5490
6250
  values: [
5491
6251
  "sm",
@@ -5495,7 +6255,7 @@ var treeui_catalog_default = {
5495
6255
  },
5496
6256
  {
5497
6257
  name: "sortBy",
5498
- type: "TreeTableSortState",
6258
+ type: "TTableSortState",
5499
6259
  required: false,
5500
6260
  description: "Controlled sort state. When provided, overrides internal sort tracking."
5501
6261
  }
@@ -5504,7 +6264,7 @@ var treeui_catalog_default = {
5504
6264
  {
5505
6265
  name: "sort",
5506
6266
  description: "Emitted when a sortable column header is clicked.",
5507
- payload: "TreeTableSortState"
6267
+ payload: "TTableSortState"
5508
6268
  }
5509
6269
  ],
5510
6270
  slots: [
@@ -5563,16 +6323,13 @@ var treeui_catalog_default = {
5563
6323
  },
5564
6324
  {
5565
6325
  name: "TTabs",
5566
- legacyAlias: "TreeTabs",
5567
- aliases: [
5568
- "TreeTabs"
5569
- ],
6326
+ aliases: [],
5570
6327
  package: "@treeui/vue",
5571
6328
  kind: "navigation",
5572
6329
  category: "Navigation",
5573
6330
  status: "available",
5574
6331
  purpose: "Tabbed panel navigation with full keyboard support and automatic/manual activation modes.",
5575
- sourceFile: "packages/vue/src/components/TreeTabs.vue",
6332
+ sourceFile: "packages/vue/src/components/TTabs.vue",
5576
6333
  storyFile: "apps/docs/src/stories/Tabs.stories.ts",
5577
6334
  storyTitle: "Components/Navigation/Tabs",
5578
6335
  manifestFile: "docs/ai/COMPONENTS/tabs.yaml",
@@ -5591,7 +6348,7 @@ var treeui_catalog_default = {
5591
6348
  },
5592
6349
  {
5593
6350
  name: "size",
5594
- type: "TreeSize",
6351
+ type: "TSize",
5595
6352
  default: "md",
5596
6353
  values: [
5597
6354
  "sm",
@@ -5672,21 +6429,18 @@ var treeui_catalog_default = {
5672
6429
  },
5673
6430
  {
5674
6431
  name: "TTag",
5675
- legacyAlias: "TreeTag",
5676
- aliases: [
5677
- "TreeTag"
5678
- ],
6432
+ aliases: [],
5679
6433
  package: "@treeui/vue",
5680
6434
  category: "Data Display",
5681
6435
  description: "Removable label/chip for filters and selections.",
5682
- sourceFile: "packages/vue/src/components/TreeTag.vue",
6436
+ sourceFile: "packages/vue/src/components/TTag.vue",
5683
6437
  storyFile: "apps/docs/src/stories/Tag.stories.ts",
5684
6438
  storyTitle: "Components/Data Display/Tag",
5685
6439
  manifestFile: "docs/ai/COMPONENTS/tag.yaml",
5686
6440
  props: [
5687
6441
  {
5688
6442
  name: "variant",
5689
- type: "TreeTagVariant",
6443
+ type: "TTagVariant",
5690
6444
  default: "soft",
5691
6445
  values: [
5692
6446
  "solid",
@@ -5696,7 +6450,7 @@ var treeui_catalog_default = {
5696
6450
  },
5697
6451
  {
5698
6452
  name: "size",
5699
- type: "TreeSize",
6453
+ type: "TSize",
5700
6454
  default: "md",
5701
6455
  values: [
5702
6456
  "sm",
@@ -5755,16 +6509,13 @@ var treeui_catalog_default = {
5755
6509
  },
5756
6510
  {
5757
6511
  name: "TTextarea",
5758
- legacyAlias: "TreeTextarea",
5759
- aliases: [
5760
- "TreeTextarea"
5761
- ],
6512
+ aliases: [],
5762
6513
  package: "@treeui/vue",
5763
6514
  kind: "primitive",
5764
6515
  category: "Data Entry",
5765
6516
  status: "available",
5766
6517
  purpose: "Multi-line text field with size, loading, invalid states, and auto-grow option.",
5767
- sourceFile: "packages/vue/src/components/TreeTextarea.vue",
6518
+ sourceFile: "packages/vue/src/components/TTextarea.vue",
5768
6519
  storyFile: "apps/docs/src/stories/Textarea.stories.ts",
5769
6520
  storyTitle: "Components/Data Entry/Textarea",
5770
6521
  manifestFile: "docs/ai/COMPONENTS/textarea.yaml",
@@ -5776,7 +6527,7 @@ var treeui_catalog_default = {
5776
6527
  },
5777
6528
  {
5778
6529
  name: "size",
5779
- type: "TreeSize",
6530
+ type: "TSize",
5780
6531
  default: "md",
5781
6532
  values: [
5782
6533
  "sm",
@@ -5861,28 +6612,25 @@ var treeui_catalog_default = {
5861
6612
  },
5862
6613
  {
5863
6614
  name: "TTimeline",
5864
- legacyAlias: "TreeTimeline",
5865
- aliases: [
5866
- "TreeTimeline"
5867
- ],
6615
+ aliases: [],
5868
6616
  package: "@treeui/vue",
5869
6617
  kind: "data_display",
5870
6618
  status: "available",
5871
6619
  purpose: "Vertical timeline for activity history, audits, release events, and chronological product updates.",
5872
- sourceFile: "packages/vue/src/components/TreeTimeline.vue",
6620
+ sourceFile: "packages/vue/src/components/TTimeline.vue",
5873
6621
  storyFile: "apps/docs/src/stories/Timeline.stories.ts",
5874
6622
  storyTitle: "Release queued for review",
5875
6623
  manifestFile: "docs/ai/COMPONENTS/timeline.yaml",
5876
6624
  props: [
5877
6625
  {
5878
6626
  name: "items",
5879
- type: "TreeTimelineItem[]",
6627
+ type: "TTimelineItem[]",
5880
6628
  default: "[]",
5881
6629
  note: "Array of { id?: string | number; title: string; description?: string; meta?: string; timestamp?: string; datetime?: string; tone?: 'neutral' | 'brand' | 'success' | 'warning' | 'danger' }"
5882
6630
  },
5883
6631
  {
5884
6632
  name: "size",
5885
- type: "TreeSize",
6633
+ type: "TSize",
5886
6634
  default: "md",
5887
6635
  values: [
5888
6636
  "sm",
@@ -5924,15 +6672,12 @@ var treeui_catalog_default = {
5924
6672
  },
5925
6673
  {
5926
6674
  name: "TToast",
5927
- legacyAlias: "TreeToast",
5928
- aliases: [
5929
- "TreeToast"
5930
- ],
6675
+ aliases: [],
5931
6676
  package: "@treeui/vue",
5932
6677
  kind: "feedback",
5933
6678
  status: "available",
5934
6679
  purpose: "Ephemeral notification stack driven by a composable. Renders toast items inside a positioned container with auto-dismiss and manual close.",
5935
- sourceFile: "packages/vue/src/components/TreeToast.vue",
6680
+ sourceFile: "packages/vue/src/components/TToast.vue",
5936
6681
  manifestFile: "docs/ai/COMPONENTS/toast.yaml",
5937
6682
  props: [],
5938
6683
  events: [
@@ -5990,16 +6735,13 @@ var treeui_catalog_default = {
5990
6735
  },
5991
6736
  {
5992
6737
  name: "TToggleGroup",
5993
- legacyAlias: "TreeToggleGroup",
5994
- aliases: [
5995
- "TreeToggleGroup"
5996
- ],
6738
+ aliases: [],
5997
6739
  package: "@treeui/vue",
5998
6740
  kind: "selection",
5999
6741
  category: "Data Entry",
6000
6742
  status: "available",
6001
6743
  purpose: "Segmented button group for single or multiple visible choices.",
6002
- sourceFile: "packages/vue/src/components/TreeToggleGroup.vue",
6744
+ sourceFile: "packages/vue/src/components/TToggleGroup.vue",
6003
6745
  storyFile: "apps/docs/src/stories/ToggleGroup.stories.ts",
6004
6746
  storyTitle: "Components/Data Entry/ToggleGroup",
6005
6747
  manifestFile: "docs/ai/COMPONENTS/toggle-group.yaml",
@@ -6011,13 +6753,13 @@ var treeui_catalog_default = {
6011
6753
  },
6012
6754
  {
6013
6755
  name: "options",
6014
- type: "TreeToggleGroupOption[]",
6756
+ type: "TToggleGroupOption[]",
6015
6757
  default: "[]",
6016
6758
  note: "Array of `{ label, value, disabled? }`."
6017
6759
  },
6018
6760
  {
6019
6761
  name: "selectionMode",
6020
- type: "TreeToggleGroupSelectionMode",
6762
+ type: "TToggleGroupSelectionMode",
6021
6763
  default: "single",
6022
6764
  values: [
6023
6765
  "single",
@@ -6026,7 +6768,7 @@ var treeui_catalog_default = {
6026
6768
  },
6027
6769
  {
6028
6770
  name: "size",
6029
- type: "TreeSize",
6771
+ type: "TSize",
6030
6772
  default: "md",
6031
6773
  values: [
6032
6774
  "sm",
@@ -6036,7 +6778,7 @@ var treeui_catalog_default = {
6036
6778
  },
6037
6779
  {
6038
6780
  name: "variant",
6039
- type: "TreeToggleGroupVariant",
6781
+ type: "TToggleGroupVariant",
6040
6782
  default: "outline",
6041
6783
  values: [
6042
6784
  "outline",
@@ -6110,16 +6852,13 @@ var treeui_catalog_default = {
6110
6852
  },
6111
6853
  {
6112
6854
  name: "TTooltip",
6113
- legacyAlias: "TreeTooltip",
6114
- aliases: [
6115
- "TreeTooltip"
6116
- ],
6855
+ aliases: [],
6117
6856
  package: "@treeui/vue",
6118
6857
  kind: "overlay",
6119
6858
  category: "Overlay",
6120
6859
  status: "available",
6121
6860
  purpose: "Small contextual overlay shown on hover or focus.",
6122
- sourceFile: "packages/vue/src/components/TreeTooltip.vue",
6861
+ sourceFile: "packages/vue/src/components/TTooltip.vue",
6123
6862
  storyFile: "apps/docs/src/stories/Tooltip.stories.ts",
6124
6863
  storyTitle: "Components/Overlay/Tooltip",
6125
6864
  manifestFile: "docs/ai/COMPONENTS/tooltip.yaml",
@@ -6146,7 +6885,7 @@ var treeui_catalog_default = {
6146
6885
  },
6147
6886
  {
6148
6887
  name: "side",
6149
- type: "TreeTooltipSide",
6888
+ type: "TTooltipSide",
6150
6889
  default: "top",
6151
6890
  values: [
6152
6891
  "top",
@@ -6225,18 +6964,15 @@ var treeui_catalog_default = {
6225
6964
  },
6226
6965
  {
6227
6966
  name: "TTreeView",
6228
- legacyAlias: "TreeTreeView",
6229
- aliases: [
6230
- "TreeTreeView"
6231
- ],
6967
+ aliases: [],
6232
6968
  package: "@treeui/vue",
6233
6969
  kind: "selection",
6234
6970
  category: "Navigation & Disclosure",
6235
6971
  status: "available",
6236
6972
  purpose: "Hierarchical tree view with expansion, keyboard navigation, and single or multiple selection.",
6237
- sourceFile: "packages/vue/src/components/TreeTreeView.vue",
6973
+ sourceFile: "packages/vue/src/components/TTreeView.vue",
6238
6974
  storyFile: "apps/docs/src/stories/TreeView.stories.ts",
6239
- storyTitle: "Components/Navigation & Disclosure/TreeView",
6975
+ storyTitle: "Components/Navigation & Disclosure/TView",
6240
6976
  manifestFile: "docs/ai/COMPONENTS/tree-view.yaml",
6241
6977
  props: [
6242
6978
  {
@@ -6251,13 +6987,13 @@ var treeui_catalog_default = {
6251
6987
  },
6252
6988
  {
6253
6989
  name: "nodes",
6254
- type: "TreeTreeViewNode[]",
6990
+ type: "TTreeViewNode[]",
6255
6991
  default: "[]",
6256
6992
  note: "Array of `{ id, label, description?, meta?, disabled?, children? }`."
6257
6993
  },
6258
6994
  {
6259
6995
  name: "selectionMode",
6260
- type: "TreeTreeViewSelectionMode",
6996
+ type: "TTreeViewSelectionMode",
6261
6997
  default: "single",
6262
6998
  values: [
6263
6999
  "single",
@@ -6928,11 +7664,9 @@ var buildCatalogFromRepo = (repoRoot) => {
6928
7664
  const setup2 = normalizeSetupEntry(componentSetup[name]);
6929
7665
  const aliases = Array.from(
6930
7666
  new Set(
6931
- [
6932
- ...normalizeStringList(document.aliases),
6933
- aliasMap[name],
6934
- name.startsWith("T") ? `Tree${name.slice(1)}` : void 0
6935
- ].filter((value) => Boolean(value))
7667
+ [...normalizeStringList(document.aliases), aliasMap[name]].filter(
7668
+ (value) => Boolean(value)
7669
+ )
6936
7670
  )
6937
7671
  );
6938
7672
  const componentRecipes = recipes.filter((recipe) => recipe.compose.includes(name)).map((recipe) => recipe.id);
@@ -7136,7 +7870,7 @@ var createTreeuiMcpServer = () => {
7136
7870
  inputSchema: {
7137
7871
  type: "object",
7138
7872
  properties: {
7139
- name: { type: "string", description: "Component name or alias, such as TSelect or TreeSelect." }
7873
+ name: { type: "string", description: "Component name or alias, such as TSelect or TSelect." }
7140
7874
  },
7141
7875
  required: ["name"]
7142
7876
  }