@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.
@@ -1,8 +1,8 @@
1
1
  // src/generated/treeui.catalog.json
2
2
  var treeui_catalog_default = {
3
- generatedAt: "2026-04-10T16:42:52.904Z",
3
+ generatedAt: "2026-07-15T22:47:49.302Z",
4
4
  packageName: "@treeui/vue",
5
- packageVersion: "0.6.1",
5
+ packageVersion: "0.13.0",
6
6
  decisionGuides: [
7
7
  {
8
8
  id: "single-choice",
@@ -200,6 +200,50 @@ var treeui_catalog_default = {
200
200
  notes: []
201
201
  }
202
202
  ]
203
+ },
204
+ {
205
+ id: "data-viz-choice",
206
+ question: "Visualize numeric data",
207
+ options: [
208
+ {
209
+ use: "TStat",
210
+ when: [
211
+ "The story is a single headline number, optionally with a trend and delta.",
212
+ "It is not a plot \u2014 prefer the number over a chart when one value says it."
213
+ ],
214
+ notes: []
215
+ },
216
+ {
217
+ use: "TSparkline",
218
+ when: [
219
+ "You want an inline micro-trend next to a value, in a table cell, or in text.",
220
+ "No axes, legend, or tooltip are needed."
221
+ ],
222
+ notes: []
223
+ },
224
+ {
225
+ use: "TChart",
226
+ when: [
227
+ "You need line, area, or bar plots with axes, gridlines, legend, and hover tooltip.",
228
+ "There are one or more series over shared categories."
229
+ ],
230
+ notes: []
231
+ },
232
+ {
233
+ use: "TDonutChart",
234
+ when: [
235
+ "The data is a part-of-whole breakdown (donut or pie)."
236
+ ],
237
+ notes: []
238
+ },
239
+ {
240
+ use: "TProgress",
241
+ when: [
242
+ "You are showing completion toward a single target, not a distribution or trend."
243
+ ],
244
+ notes: []
245
+ }
246
+ ]
203
247
  }
204
248
  ],
205
249
  recipes: [
@@ -249,11 +293,28 @@ var treeui_catalog_default = {
249
293
  "Set end `min` from the selected start time when appropriate."
250
294
  ]
251
295
  },
296
+ {
297
+ id: "app-shell",
298
+ name: "Full-viewport application shell",
299
+ useWhen: [
300
+ "The app needs a header plus side navigation that fills the whole screen and adapts to mobile.",
301
+ "The layout must use the full page width on large monitors, not a centered column."
302
+ ],
303
+ compose: [
304
+ "TAppShell",
305
+ "TNavMenu"
306
+ ],
307
+ notes: [
308
+ "`TAppShell` orchestrates the header, sidebar, and fluid content in one component; put a `TNavMenu` in its `sidebar` slot and it inherits collapsed state automatically.",
309
+ "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.",
310
+ "Mount it at the app root. Wrap only inner regions in `TContainer` if a specific area needs a constrained reading width."
311
+ ]
312
+ },
252
313
  {
253
314
  id: "sidebar-shell",
254
315
  name: "Sidebar application shell",
255
316
  useWhen: [
256
- "The screen needs persistent section navigation."
317
+ "The screen needs persistent section navigation and you are composing the shell by hand."
257
318
  ],
258
319
  compose: [
259
320
  "TSidebar",
@@ -262,7 +323,8 @@ var treeui_catalog_default = {
262
323
  "TContainer"
263
324
  ],
264
325
  notes: [
265
- "Let `TNavMenu` inherit collapsed state from `TSidebar` when possible."
326
+ "Let `TNavMenu` inherit collapsed state from `TSidebar` when possible.",
327
+ "Prefer `TAppShell` (recipe `app-shell`) when you also need full-viewport sizing and a responsive mobile drawer."
266
328
  ]
267
329
  },
268
330
  {
@@ -360,15 +422,38 @@ var treeui_catalog_default = {
360
422
  id: "chart-surface",
361
423
  name: "Chart surface",
362
424
  useWhen: [
363
- "A screen needs data visualization, but the charting engine should stay external to TreeUI."
425
+ "A screen needs data visualization inside a framed, titled surface."
364
426
  ],
365
427
  compose: [
366
428
  "TCard",
367
429
  "TStack",
368
- "external chart library"
430
+ "TChart",
431
+ "TSelect"
369
432
  ],
370
433
  notes: [
371
- "Use TreeUI for the surrounding surface, headings, badges, filters, and empty/loading states."
434
+ "Prefer the native TChart / TDonutChart / TSparkline \u2014 no external charting library is required.",
435
+ "Use TreeUI for the surrounding surface, headings, badges, range filters, and empty/loading states.",
436
+ "TChart has its own loading and empty slots; you can still wrap it in TCard for the frame.",
437
+ "Only reach for an external chart engine for chart types TreeUI does not cover yet (e.g. scatter, heatmap)."
438
+ ]
439
+ },
440
+ {
441
+ id: "metric-dashboard",
442
+ name: "Metric dashboard",
443
+ useWhen: [
444
+ "A dashboard shows KPIs alongside trends and breakdowns."
445
+ ],
446
+ compose: [
447
+ "TStat",
448
+ "TSparkline",
449
+ "TChart",
450
+ "TDonutChart",
451
+ "TGrid"
452
+ ],
453
+ notes: [
454
+ "Lead with TStat tiles; embed a TSparkline in a stat's meta slot for the inline trend.",
455
+ "Use one TChart for the main time series and a TDonutChart for a part-of-whole split.",
456
+ "Keep series colors stable across the dashboard \u2014 rely on the --tree-color-chart-* order, do not remap by rank."
372
457
  ]
373
458
  },
374
459
  {
@@ -443,7 +528,7 @@ var treeui_catalog_default = {
443
528
  },
444
529
  globalRules: [
445
530
  "Always import `@treeui/vue/style.css` once in the consuming application.",
446
- "Compatibility aliases such as `TreeButton` remain available but are not the preferred direction.",
531
+ "All components use the `T<Name>` export prefix; there are no `Tree<Name>` aliases.",
447
532
  "Form controls use `modelValue` + `update:modelValue`.",
448
533
  "Overlay-style components generally support controlled and uncontrolled open state.",
449
534
  "Date-only values use `YYYY-MM-DD`.",
@@ -518,17 +603,27 @@ var treeui_catalog_default = {
518
603
  "Use `accept`, `multiple`, and size limits in the app layer to constrain uploads."
519
604
  ]
520
605
  },
606
+ TAppShell: {
607
+ required: [],
608
+ notes: [
609
+ "Mount at the app root; it fills the viewport (100dvh, full width) and scrolls its content region independently.",
610
+ "Put navigation in the `sidebar` slot (e.g. `TNavMenu`) \u2014 it inherits collapsed state from the shell provider like `TSidebar`.",
611
+ "Leave `mobile` unset to auto-switch to an off-canvas drawer at `breakpoint`, or bind `mobile` to control it explicitly.",
612
+ "Use `v-model:collapsed` for the desktop rail and `v-model:sidebarOpen` for the mobile drawer when the app persists layout state."
613
+ ]
614
+ },
521
615
  TSidebar: {
522
616
  required: [],
523
617
  notes: [
524
618
  "Pair with `TNavMenu` for app-section navigation.",
525
- "Use controlled `collapsed` state when the app shell persists layout preferences."
619
+ "Use controlled `collapsed` state when the app shell persists layout preferences.",
620
+ "Prefer `TAppShell` when you also want full-viewport sizing, a top header, and a responsive mobile drawer."
526
621
  ]
527
622
  },
528
623
  TNavMenu: {
529
624
  required: [],
530
625
  notes: [
531
- "When nested inside `TSidebar`, `collapsed` can be inherited from the sidebar provider."
626
+ "When nested inside `TSidebar` or `TAppShell`, `collapsed` can be inherited from the sidebar provider."
532
627
  ]
533
628
  },
534
629
  TTreeView: {
@@ -562,6 +657,32 @@ var treeui_catalog_default = {
562
657
  "Use `href` for native links.",
563
658
  "Use `to` when the app has vue-router and breadcrumb items should render RouterLink."
564
659
  ]
660
+ },
661
+ TChart: {
662
+ required: [],
663
+ notes: [
664
+ "Pass `series` as `{ name, data, color? }[]` and `labels` as a parallel `string[]` (one label per data index).",
665
+ "Set `type` to `line`, `area`, or `bar`; use `stacked` only with `bar`.",
666
+ "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.",
667
+ "Pass `valueFormat: (n) => string` to format axis and tooltip values (currency, compact, etc.).",
668
+ "No charting library or provider is required \u2014 the SVG and geometry are built in."
669
+ ]
670
+ },
671
+ TSparkline: {
672
+ required: [],
673
+ notes: [
674
+ "Pass `data` as `number[]`; there are no axes, legend, or tooltip by design.",
675
+ "Size it with `width`/`height`; use it inside `TStat`, table cells, or text.",
676
+ "Always keep a visible number nearby \u2014 a sparkline supplements a value, it does not replace it."
677
+ ]
678
+ },
679
+ TDonutChart: {
680
+ required: [],
681
+ notes: [
682
+ "Pass `segments` as `{ label, value, color? }[]`; non-positive values are dropped.",
683
+ "Set `thickness: 0` for a full pie; keep the default for a donut with a center readout.",
684
+ "Use the `center` slot (donut only) for a custom center; otherwise it shows the total or the hovered slice."
685
+ ]
565
686
  }
566
687
  },
567
688
  appPatterns: {
@@ -575,6 +696,9 @@ var treeui_catalog_default = {
575
696
  commonCompositions: [
576
697
  "TFormField + input-like control",
577
698
  "TGrid + TStat",
699
+ "TStat + TSparkline",
700
+ "TCard + TChart",
701
+ "TAppShell + TNavMenu",
578
702
  "TSidebar + TNavMenu",
579
703
  "TTable + TPagination",
580
704
  "TPricing + TPricingCard"
@@ -584,16 +708,13 @@ var treeui_catalog_default = {
584
708
  components: [
585
709
  {
586
710
  name: "TAccordion",
587
- legacyAlias: "TreeAccordion",
588
- aliases: [
589
- "TreeAccordion"
590
- ],
711
+ aliases: [],
591
712
  package: "@treeui/vue",
592
713
  kind: "disclosure",
593
714
  category: "Data Display",
594
715
  status: "available",
595
716
  purpose: "Organized content sections with expandable/collapsible behavior. Supports single-open and multi-open modes.\n",
596
- sourceFile: "packages/vue/src/components/TreeAccordion.vue",
717
+ sourceFile: "packages/vue/src/components/TAccordion.vue",
597
718
  storyFile: "apps/docs/src/stories/Accordion.stories.ts",
598
719
  storyTitle: "Components/Data Display/Accordion",
599
720
  manifestFile: "docs/ai/COMPONENTS/accordion.yaml",
@@ -640,16 +761,13 @@ var treeui_catalog_default = {
640
761
  },
641
762
  {
642
763
  name: "TAlert",
643
- legacyAlias: "TreeAlert",
644
- aliases: [
645
- "TreeAlert"
646
- ],
764
+ aliases: [],
647
765
  package: "@treeui/vue",
648
766
  kind: "feedback",
649
767
  category: "Feedback",
650
768
  status: "available",
651
769
  purpose: "Inline status banner for info, success, warning, and danger messages.",
652
- sourceFile: "packages/vue/src/components/TreeAlert.vue",
770
+ sourceFile: "packages/vue/src/components/TAlert.vue",
653
771
  storyFile: "apps/docs/src/stories/Alert.stories.ts",
654
772
  storyTitle: "Components/Feedback/Alert",
655
773
  manifestFile: "docs/ai/COMPONENTS/alert.yaml",
@@ -667,7 +785,7 @@ var treeui_catalog_default = {
667
785
  },
668
786
  {
669
787
  name: "size",
670
- type: "TreeSize",
788
+ type: "TSize",
671
789
  default: "md",
672
790
  values: [
673
791
  "sm",
@@ -742,15 +860,217 @@ var treeui_catalog_default = {
742
860
  recipes: []
743
861
  },
744
862
  {
745
- name: "TAvatar",
746
- legacyAlias: "TreeAvatar",
747
- aliases: [
748
- "TreeAvatar"
863
+ name: "TAppShell",
864
+ aliases: [],
865
+ package: "@treeui/vue",
866
+ kind: "layout",
867
+ category: "Layout",
868
+ status: "available",
869
+ 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.",
870
+ sourceFile: "packages/vue/src/components/TAppShell.vue",
871
+ storyFile: "apps/docs/src/stories/AppShell.stories.ts",
872
+ storyTitle: "Components/Layout/AppShell",
873
+ manifestFile: "docs/ai/COMPONENTS/app-shell.yaml",
874
+ props: [
875
+ {
876
+ name: "as",
877
+ type: "string",
878
+ default: "div"
879
+ },
880
+ {
881
+ name: "side",
882
+ type: "TSidebarSide",
883
+ default: "left",
884
+ values: [
885
+ "left",
886
+ "right"
887
+ ]
888
+ },
889
+ {
890
+ name: "sidebarWidth",
891
+ type: "string",
892
+ default: "17.5rem"
893
+ },
894
+ {
895
+ name: "collapsedWidth",
896
+ type: "string",
897
+ default: "4.75rem"
898
+ },
899
+ {
900
+ name: "collapsible",
901
+ type: "boolean",
902
+ default: "false"
903
+ },
904
+ {
905
+ name: "collapsed",
906
+ type: "boolean",
907
+ default: "undefined"
908
+ },
909
+ {
910
+ name: "defaultCollapsed",
911
+ type: "boolean",
912
+ default: "false"
913
+ },
914
+ {
915
+ name: "mobile",
916
+ type: "boolean",
917
+ default: "undefined"
918
+ },
919
+ {
920
+ name: "breakpoint",
921
+ type: "string",
922
+ default: "768px"
923
+ },
924
+ {
925
+ name: "sidebarOpen",
926
+ type: "boolean",
927
+ default: "undefined"
928
+ },
929
+ {
930
+ name: "defaultSidebarOpen",
931
+ type: "boolean",
932
+ default: "false"
933
+ },
934
+ {
935
+ name: "closeOnEscape",
936
+ type: "boolean",
937
+ default: "true"
938
+ },
939
+ {
940
+ name: "closeOnOverlay",
941
+ type: "boolean",
942
+ default: "true"
943
+ },
944
+ {
945
+ name: "showMenuButton",
946
+ type: "boolean",
947
+ default: "true"
948
+ },
949
+ {
950
+ name: "menuLabel",
951
+ type: "string",
952
+ default: "Open menu"
953
+ },
954
+ {
955
+ name: "closeLabel",
956
+ type: "string",
957
+ default: "Close menu"
958
+ },
959
+ {
960
+ name: "sidebarLabel",
961
+ type: "string",
962
+ default: "Sidebar"
963
+ }
749
964
  ],
965
+ events: [
966
+ {
967
+ name: "update:collapsed"
968
+ },
969
+ {
970
+ name: "collapse-change"
971
+ },
972
+ {
973
+ name: "update:sidebarOpen"
974
+ },
975
+ {
976
+ name: "sidebar-open-change"
977
+ }
978
+ ],
979
+ slots: [
980
+ {
981
+ name: "header"
982
+ },
983
+ {
984
+ name: "sidebar"
985
+ },
986
+ {
987
+ name: "default"
988
+ },
989
+ {
990
+ name: "menu-icon"
991
+ }
992
+ ],
993
+ a11y: [
994
+ "role: dialog",
995
+ "aria_modal: true",
996
+ "focus_trap: true",
997
+ "restores_focus_on_close: true",
998
+ "escape_closes_when_enabled: true",
999
+ "menu_button_aria_expanded: true",
1000
+ "menu_button_aria_controls_drawer: true",
1001
+ "sidebar_labelled_by_sidebar_label: true"
1002
+ ],
1003
+ behavior: [
1004
+ "fills_viewport_full_width_and_height: true",
1005
+ "header_spans_full_width_above_sidebar_and_content: true",
1006
+ "content_area_scrolls_independently: true",
1007
+ "auto_switches_to_mobile_at_breakpoint_when_mobile_undefined: true",
1008
+ "mobile_prop_forces_mobile_mode: true",
1009
+ "mobile_sidebar_becomes_off_canvas_drawer: true",
1010
+ "auto_menu_button_in_header_on_mobile: true",
1011
+ "controlled_and_uncontrolled_collapsed_state: true",
1012
+ "controlled_and_uncontrolled_sidebar_open_state: true",
1013
+ "provides_collapsed_state_to_descendants: true",
1014
+ "drawer_reports_collapsed_false_to_descendants_and_slots: true",
1015
+ "left_and_right_variants: true",
1016
+ "locks_body_scroll_while_drawer_open: true",
1017
+ "overlay_click_closes_when_enabled: true",
1018
+ "exposes_slot_props_with_mobile_collapsed_and_toggles: true"
1019
+ ],
1020
+ selection: {
1021
+ keywords: [
1022
+ "app shell",
1023
+ "layout",
1024
+ "dashboard",
1025
+ "admin",
1026
+ "header sidebar",
1027
+ "full screen",
1028
+ "responsive shell",
1029
+ "off-canvas"
1030
+ ],
1031
+ useWhen: [
1032
+ "You need a full-viewport application layout with a header, a side navigation, and a fluid content area.",
1033
+ "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."
1034
+ ],
1035
+ avoidWhen: [
1036
+ "You only need one region (just a top bar, or just a side rail) \u2014 compose TNavbar or TSidebar directly.",
1037
+ "The page content should be centered with a readable max width \u2014 use TContainer inside the shell content instead."
1038
+ ],
1039
+ alternatives: [
1040
+ {
1041
+ component: "TSidebar",
1042
+ when: "You want a standalone collapsible side rail without the header/content orchestration or responsive drawer."
1043
+ },
1044
+ {
1045
+ component: "TNavbar",
1046
+ when: "You only need the top application bar."
1047
+ },
1048
+ {
1049
+ component: "TDrawer",
1050
+ when: "You need a general temporary overlay panel rather than the shell's responsive navigation."
1051
+ }
1052
+ ]
1053
+ },
1054
+ setup: {
1055
+ required: [],
1056
+ notes: [
1057
+ "Mount at the app root; it fills the viewport (100dvh, full width) and scrolls its content region independently.",
1058
+ "Put navigation in the `sidebar` slot (e.g. `TNavMenu`) \u2014 it inherits collapsed state from the shell provider like `TSidebar`.",
1059
+ "Leave `mobile` unset to auto-switch to an off-canvas drawer at `breakpoint`, or bind `mobile` to control it explicitly.",
1060
+ "Use `v-model:collapsed` for the desktop rail and `v-model:sidebarOpen` for the mobile drawer when the app persists layout state."
1061
+ ]
1062
+ },
1063
+ recipes: [
1064
+ "app-shell"
1065
+ ]
1066
+ },
1067
+ {
1068
+ name: "TAvatar",
1069
+ aliases: [],
750
1070
  package: "@treeui/vue",
751
1071
  category: "Data Display",
752
1072
  description: "User image with fallback initials and optional status indicator dot.",
753
- sourceFile: "packages/vue/src/components/TreeAvatar.vue",
1073
+ sourceFile: "packages/vue/src/components/TAvatar.vue",
754
1074
  storyFile: "apps/docs/src/stories/Avatar.stories.ts",
755
1075
  storyTitle: "Components/Data Display/Avatar",
756
1076
  manifestFile: "docs/ai/COMPONENTS/avatar.yaml",
@@ -775,7 +1095,7 @@ var treeui_catalog_default = {
775
1095
  },
776
1096
  {
777
1097
  name: "size",
778
- type: "TreeSize",
1098
+ type: "TSize",
779
1099
  default: "md",
780
1100
  values: [
781
1101
  "sm",
@@ -785,7 +1105,7 @@ var treeui_catalog_default = {
785
1105
  },
786
1106
  {
787
1107
  name: "status",
788
- type: "TreeAvatarStatus",
1108
+ type: "TAvatarStatus",
789
1109
  required: false,
790
1110
  values: [
791
1111
  "online",
@@ -823,23 +1143,20 @@ var treeui_catalog_default = {
823
1143
  },
824
1144
  {
825
1145
  name: "TBadge",
826
- legacyAlias: "TreeBadge",
827
- aliases: [
828
- "TreeBadge"
829
- ],
1146
+ aliases: [],
830
1147
  package: "@treeui/vue",
831
1148
  kind: "display",
832
1149
  category: "Data Display",
833
1150
  status: "available",
834
1151
  purpose: "Compact status or metadata label with optional icon.",
835
- sourceFile: "packages/vue/src/components/TreeBadge.vue",
1152
+ sourceFile: "packages/vue/src/components/TBadge.vue",
836
1153
  storyFile: "apps/docs/src/stories/Badge.stories.ts",
837
1154
  storyTitle: "Components/Data Display/Badge",
838
1155
  manifestFile: "docs/ai/COMPONENTS/badge.yaml",
839
1156
  props: [
840
1157
  {
841
1158
  name: "variant",
842
- type: "TreeVariant",
1159
+ type: "TVariant",
843
1160
  default: "soft",
844
1161
  values: [
845
1162
  "solid",
@@ -851,7 +1168,7 @@ var treeui_catalog_default = {
851
1168
  },
852
1169
  {
853
1170
  name: "tone",
854
- type: "TreeBadgeTone",
1171
+ type: "TBadgeTone",
855
1172
  default: "neutral",
856
1173
  values: [
857
1174
  "neutral",
@@ -864,7 +1181,7 @@ var treeui_catalog_default = {
864
1181
  },
865
1182
  {
866
1183
  name: "size",
867
- type: "TreeSize",
1184
+ type: "TSize",
868
1185
  default: "md",
869
1186
  values: [
870
1187
  "sm",
@@ -903,16 +1220,13 @@ var treeui_catalog_default = {
903
1220
  },
904
1221
  {
905
1222
  name: "TBreadcrumb",
906
- legacyAlias: "TreeBreadcrumb",
907
- aliases: [
908
- "TreeBreadcrumb"
909
- ],
1223
+ aliases: [],
910
1224
  package: "@treeui/vue",
911
1225
  kind: "navigation",
912
1226
  category: "Navigation",
913
1227
  status: "available",
914
1228
  purpose: "Hierarchical navigation trail showing the user's current location within a site or application.",
915
- sourceFile: "packages/vue/src/components/TreeBreadcrumb.vue",
1229
+ sourceFile: "packages/vue/src/components/TBreadcrumb.vue",
916
1230
  storyFile: "apps/docs/src/stories/Breadcrumb.stories.ts",
917
1231
  storyTitle: "Components/Navigation/Breadcrumb",
918
1232
  manifestFile: "docs/ai/COMPONENTS/breadcrumb.yaml",
@@ -955,16 +1269,13 @@ var treeui_catalog_default = {
955
1269
  },
956
1270
  {
957
1271
  name: "TButton",
958
- legacyAlias: "TreeButton",
959
- aliases: [
960
- "TreeButton"
961
- ],
1272
+ aliases: [],
962
1273
  package: "@treeui/vue",
963
1274
  kind: "primitive",
964
1275
  category: "Actions",
965
1276
  status: "available",
966
1277
  purpose: "Clickable action trigger with variants, sizes, optional polymorphism, and loading state.",
967
- sourceFile: "packages/vue/src/components/TreeButton.vue",
1278
+ sourceFile: "packages/vue/src/components/TButton.vue",
968
1279
  storyFile: "apps/docs/src/stories/Button.stories.ts",
969
1280
  storyTitle: "Components/Actions/Button",
970
1281
  manifestFile: "docs/ai/COMPONENTS/button.yaml",
@@ -976,7 +1287,7 @@ var treeui_catalog_default = {
976
1287
  },
977
1288
  {
978
1289
  name: "variant",
979
- type: "TreeVariant",
1290
+ type: "TVariant",
980
1291
  default: "solid",
981
1292
  values: [
982
1293
  "solid",
@@ -988,7 +1299,7 @@ var treeui_catalog_default = {
988
1299
  },
989
1300
  {
990
1301
  name: "size",
991
- type: "TreeSize",
1302
+ type: "TSize",
992
1303
  default: "md",
993
1304
  values: [
994
1305
  "sm",
@@ -1053,16 +1364,13 @@ var treeui_catalog_default = {
1053
1364
  },
1054
1365
  {
1055
1366
  name: "TCard",
1056
- legacyAlias: "TreeCard",
1057
- aliases: [
1058
- "TreeCard"
1059
- ],
1367
+ aliases: [],
1060
1368
  package: "@treeui/vue",
1061
1369
  kind: "layout",
1062
1370
  category: "Data Display",
1063
1371
  status: "available",
1064
1372
  purpose: "Surface container with optional header and footer slots.",
1065
- sourceFile: "packages/vue/src/components/TreeCard.vue",
1373
+ sourceFile: "packages/vue/src/components/TCard.vue",
1066
1374
  storyFile: "apps/docs/src/stories/Card.stories.ts",
1067
1375
  storyTitle: "Components/Data Display/Card",
1068
1376
  manifestFile: "docs/ai/COMPONENTS/card.yaml",
@@ -1074,7 +1382,7 @@ var treeui_catalog_default = {
1074
1382
  },
1075
1383
  {
1076
1384
  name: "variant",
1077
- type: "TreeCardVariant",
1385
+ type: "TCardVariant",
1078
1386
  default: "outline",
1079
1387
  values: [
1080
1388
  "outline",
@@ -1085,7 +1393,7 @@ var treeui_catalog_default = {
1085
1393
  },
1086
1394
  {
1087
1395
  name: "size",
1088
- type: "TreeSize",
1396
+ type: "TSize",
1089
1397
  default: "md",
1090
1398
  values: [
1091
1399
  "sm",
@@ -1117,7 +1425,8 @@ var treeui_catalog_default = {
1117
1425
  ],
1118
1426
  a11y: [],
1119
1427
  behavior: [
1120
- "body_wrapper_class: tree-card__body"
1428
+ "body_wrapper_class: t-card__body",
1429
+ "solid_variant_rescopes_color_tokens_for_nested_content: true"
1121
1430
  ],
1122
1431
  selection: {
1123
1432
  keywords: [
@@ -1153,17 +1462,210 @@ var treeui_catalog_default = {
1153
1462
  ]
1154
1463
  },
1155
1464
  {
1156
- name: "TCheckbox",
1157
- legacyAlias: "TreeCheckbox",
1158
- aliases: [
1159
- "TreeCheckbox"
1465
+ name: "TChart",
1466
+ aliases: [],
1467
+ package: "@treeui/vue",
1468
+ kind: "data-display",
1469
+ category: "Data Display",
1470
+ status: "available",
1471
+ 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.",
1472
+ sourceFile: "packages/vue/src/components/TChart.vue",
1473
+ storyFile: "apps/docs/src/stories/Chart.stories.ts",
1474
+ storyTitle: "Components/Data Display/Chart",
1475
+ manifestFile: "docs/ai/COMPONENTS/chart.yaml",
1476
+ props: [
1477
+ {
1478
+ name: "type",
1479
+ type: "TChartType",
1480
+ default: "line",
1481
+ values: [
1482
+ "line",
1483
+ "area",
1484
+ "bar"
1485
+ ]
1486
+ },
1487
+ {
1488
+ name: "series",
1489
+ type: "TChartSeries[]",
1490
+ default: "[]",
1491
+ note: "Each item is { name: string; data: number[]; color?: string }."
1492
+ },
1493
+ {
1494
+ name: "labels",
1495
+ type: "string[]",
1496
+ default: "[]",
1497
+ note: "X-axis categories, aligned index-for-index to each series' data."
1498
+ },
1499
+ {
1500
+ name: "height",
1501
+ type: "number",
1502
+ default: "260",
1503
+ note: "Width is fluid (measured via ResizeObserver)."
1504
+ },
1505
+ {
1506
+ name: "smooth",
1507
+ type: "boolean",
1508
+ default: "false",
1509
+ note: "Curved line/area."
1510
+ },
1511
+ {
1512
+ name: "stacked",
1513
+ type: "boolean",
1514
+ default: "false",
1515
+ note: "Stacks bar series; ignored for line/area. Negative values are clamped to 0 in stacked mode (grouped mode renders them)."
1516
+ },
1517
+ {
1518
+ name: "showGrid",
1519
+ type: "boolean",
1520
+ default: "true"
1521
+ },
1522
+ {
1523
+ name: "showLegend",
1524
+ type: "boolean",
1525
+ default: "auto (true when more than one series)"
1526
+ },
1527
+ {
1528
+ name: "showXAxis",
1529
+ type: "boolean",
1530
+ default: "true"
1531
+ },
1532
+ {
1533
+ name: "showYAxis",
1534
+ type: "boolean",
1535
+ default: "true"
1536
+ },
1537
+ {
1538
+ name: "showTooltip",
1539
+ type: "boolean",
1540
+ default: "true"
1541
+ },
1542
+ {
1543
+ name: "showPoints",
1544
+ type: "boolean",
1545
+ default: "false",
1546
+ note: "Always draw markers on line/area points."
1547
+ },
1548
+ {
1549
+ name: "yTicks",
1550
+ type: "number",
1551
+ default: "5"
1552
+ },
1553
+ {
1554
+ name: "valueFormat",
1555
+ type: "(value: number) => string",
1556
+ default: "locale integers for |value| >= 1000"
1557
+ },
1558
+ {
1559
+ name: "minY",
1560
+ type: "number",
1561
+ default: "auto"
1562
+ },
1563
+ {
1564
+ name: "maxY",
1565
+ type: "number",
1566
+ default: "auto"
1567
+ },
1568
+ {
1569
+ name: "animated",
1570
+ type: "boolean",
1571
+ default: "true",
1572
+ note: "Draw-in animation; disabled under prefers-reduced-motion."
1573
+ },
1574
+ {
1575
+ name: "loading",
1576
+ type: "boolean",
1577
+ default: "false"
1578
+ },
1579
+ {
1580
+ name: "ariaLabel",
1581
+ type: "string",
1582
+ default: "auto-generated summary"
1583
+ }
1584
+ ],
1585
+ events: [
1586
+ {
1587
+ name: "point-click",
1588
+ payload: "{ index: number; label: string; values: { name: string; value: number; color: string }[] }"
1589
+ }
1590
+ ],
1591
+ slots: [
1592
+ {
1593
+ name: "legend"
1594
+ },
1595
+ {
1596
+ name: "tooltip"
1597
+ },
1598
+ {
1599
+ name: "empty"
1600
+ }
1601
+ ],
1602
+ a11y: [
1603
+ "SVG is aria-hidden; a visually-hidden <table> mirrors the series data for assistive tech.",
1604
+ "Legend defaults on for multiple series so identity is not color-only.",
1605
+ "Provide a meaningful ariaLabel describing what the chart shows."
1160
1606
  ],
1607
+ behavior: [
1608
+ "colors_auto_assign_from_chart_palette: --tree-color-chart-1..8, cycling; per-series color overrides",
1609
+ "bar_zero_baseline: true",
1610
+ "line_domain_uses_nice_ticks: true",
1611
+ "hover_shows_crosshair_and_tooltip: true"
1612
+ ],
1613
+ selection: {
1614
+ keywords: [
1615
+ "chart",
1616
+ "graph",
1617
+ "line chart",
1618
+ "area chart",
1619
+ "bar chart",
1620
+ "plot",
1621
+ "dashboard",
1622
+ "time series",
1623
+ "analytics"
1624
+ ],
1625
+ useWhen: [
1626
+ "You need a line, area, or bar chart with axes, gridlines, legend, and a hover tooltip.",
1627
+ "One or more series share a set of category labels."
1628
+ ],
1629
+ avoidWhen: [
1630
+ "A single value tells the story \u2014 use TStat.",
1631
+ "You only need an inline trend with no axes \u2014 use TSparkline.",
1632
+ "The data is a part-of-whole breakdown \u2014 use TDonutChart."
1633
+ ],
1634
+ alternatives: [
1635
+ {
1636
+ component: "TSparkline",
1637
+ when: "The trend should be inline and axis-less."
1638
+ },
1639
+ {
1640
+ component: "TDonutChart",
1641
+ when: "The data is proportional (parts of a whole)."
1642
+ }
1643
+ ]
1644
+ },
1645
+ setup: {
1646
+ required: [],
1647
+ notes: [
1648
+ "Pass `series` as `{ name, data, color? }[]` and `labels` as a parallel `string[]` (one label per data index).",
1649
+ "Set `type` to `line`, `area`, or `bar`; use `stacked` only with `bar`.",
1650
+ "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.",
1651
+ "Pass `valueFormat: (n) => string` to format axis and tooltip values (currency, compact, etc.).",
1652
+ "No charting library or provider is required \u2014 the SVG and geometry are built in."
1653
+ ]
1654
+ },
1655
+ recipes: [
1656
+ "chart-surface",
1657
+ "metric-dashboard"
1658
+ ]
1659
+ },
1660
+ {
1661
+ name: "TCheckbox",
1662
+ aliases: [],
1161
1663
  package: "@treeui/vue",
1162
1664
  kind: "primitive",
1163
1665
  category: "Data Entry",
1164
1666
  status: "available",
1165
1667
  purpose: "Boolean toggle with indeterminate state; supports v-model via modelValue.",
1166
- sourceFile: "packages/vue/src/components/TreeCheckbox.vue",
1668
+ sourceFile: "packages/vue/src/components/TCheckbox.vue",
1167
1669
  storyFile: "apps/docs/src/stories/Checkbox.stories.ts",
1168
1670
  storyTitle: "Components/Data Entry/Checkbox",
1169
1671
  manifestFile: "docs/ai/COMPONENTS/checkbox.yaml",
@@ -1175,7 +1677,7 @@ var treeui_catalog_default = {
1175
1677
  },
1176
1678
  {
1177
1679
  name: "size",
1178
- type: "TreeSize",
1680
+ type: "TSize",
1179
1681
  default: "md",
1180
1682
  values: [
1181
1683
  "sm",
@@ -1255,16 +1757,13 @@ var treeui_catalog_default = {
1255
1757
  },
1256
1758
  {
1257
1759
  name: "TCombobox",
1258
- legacyAlias: "TreeCombobox",
1259
- aliases: [
1260
- "TreeCombobox"
1261
- ],
1760
+ aliases: [],
1262
1761
  package: "@treeui/vue",
1263
1762
  kind: "primitive",
1264
1763
  category: "Data Entry",
1265
1764
  status: "available",
1266
1765
  purpose: "Searchable combobox / autocomplete input with local filtering, controlled selection, and shared open-state behavior.",
1267
- sourceFile: "packages/vue/src/components/TreeCombobox.vue",
1766
+ sourceFile: "packages/vue/src/components/TCombobox.vue",
1268
1767
  storyFile: "apps/docs/src/stories/Combobox.stories.ts",
1269
1768
  storyTitle: "Components/Data Entry/Combobox",
1270
1769
  manifestFile: "docs/ai/COMPONENTS/combobox.yaml",
@@ -1276,7 +1775,7 @@ var treeui_catalog_default = {
1276
1775
  },
1277
1776
  {
1278
1777
  name: "options",
1279
- type: "TreeComboboxOption[]",
1778
+ type: "TComboboxOption[]",
1280
1779
  default: "[]",
1281
1780
  note: "Array of { label: string; value: string; description?: string; keywords?: string[]; disabled?: boolean }"
1282
1781
  },
@@ -1292,7 +1791,7 @@ var treeui_catalog_default = {
1292
1791
  },
1293
1792
  {
1294
1793
  name: "size",
1295
- type: "TreeSize",
1794
+ type: "TSize",
1296
1795
  default: "md",
1297
1796
  values: [
1298
1797
  "sm",
@@ -1409,16 +1908,13 @@ var treeui_catalog_default = {
1409
1908
  },
1410
1909
  {
1411
1910
  name: "TConfirmDialog",
1412
- legacyAlias: "TreeConfirmDialog",
1413
- aliases: [
1414
- "TreeConfirmDialog"
1415
- ],
1911
+ aliases: [],
1416
1912
  package: "@treeui/vue",
1417
1913
  kind: "overlay",
1418
1914
  category: "Overlay",
1419
1915
  status: "available",
1420
1916
  purpose: "High-level confirmation dialog built on the shared modal contract, with default confirm and cancel actions.",
1421
- sourceFile: "packages/vue/src/components/TreeConfirmDialog.vue",
1917
+ sourceFile: "packages/vue/src/components/TConfirmDialog.vue",
1422
1918
  storyFile: "apps/docs/src/stories/ConfirmDialog.stories.ts",
1423
1919
  storyTitle: "Components/Overlay/ConfirmDialog",
1424
1920
  manifestFile: "docs/ai/COMPONENTS/confirm-dialog.yaml",
@@ -1440,7 +1936,7 @@ var treeui_catalog_default = {
1440
1936
  },
1441
1937
  {
1442
1938
  name: "size",
1443
- type: "TreeSize",
1939
+ type: "TSize",
1444
1940
  default: "sm",
1445
1941
  values: [
1446
1942
  "sm",
@@ -1470,7 +1966,7 @@ var treeui_catalog_default = {
1470
1966
  },
1471
1967
  {
1472
1968
  name: "confirmVariant",
1473
- type: "TreeVariant",
1969
+ type: "TVariant",
1474
1970
  default: "danger"
1475
1971
  },
1476
1972
  {
@@ -1578,16 +2074,13 @@ var treeui_catalog_default = {
1578
2074
  },
1579
2075
  {
1580
2076
  name: "TContainer",
1581
- legacyAlias: "TreeContainer",
1582
- aliases: [
1583
- "TreeContainer"
1584
- ],
2077
+ aliases: [],
1585
2078
  package: "@treeui/vue",
1586
2079
  kind: "layout",
1587
2080
  category: "Layout",
1588
2081
  status: "available",
1589
2082
  purpose: "Width-constrained layout wrapper for readable page content and app sections.",
1590
- sourceFile: "packages/vue/src/components/TreeContainer.vue",
2083
+ sourceFile: "packages/vue/src/components/TContainer.vue",
1591
2084
  storyFile: "apps/docs/src/stories/Container.stories.ts",
1592
2085
  storyTitle: "Components/Layout/Container",
1593
2086
  manifestFile: "docs/ai/COMPONENTS/container.yaml",
@@ -1599,7 +2092,7 @@ var treeui_catalog_default = {
1599
2092
  },
1600
2093
  {
1601
2094
  name: "size",
1602
- type: "TreeContainerSize",
2095
+ type: "TContainerSize",
1603
2096
  default: "lg",
1604
2097
  values: [
1605
2098
  "sm",
@@ -1670,10 +2163,7 @@ var treeui_catalog_default = {
1670
2163
  },
1671
2164
  {
1672
2165
  name: "TContextMenu",
1673
- legacyAlias: "TreeContextMenu",
1674
- aliases: [
1675
- "TreeContextMenu"
1676
- ],
2166
+ aliases: [],
1677
2167
  package: "@treeui/vue",
1678
2168
  category: "Overlay",
1679
2169
  status: "stable",
@@ -1683,7 +2173,7 @@ var treeui_catalog_default = {
1683
2173
  props: [
1684
2174
  {
1685
2175
  name: "items",
1686
- type: "TreeContextMenuItem[]",
2176
+ type: "TContextMenuItem[]",
1687
2177
  default: "[]",
1688
2178
  description: "Menu items to render."
1689
2179
  },
@@ -1707,7 +2197,7 @@ var treeui_catalog_default = {
1707
2197
  },
1708
2198
  {
1709
2199
  name: "size",
1710
- type: "TreeSize",
2200
+ type: "TSize",
1711
2201
  default: "md",
1712
2202
  description: "Item sizing variant."
1713
2203
  }
@@ -1780,16 +2270,13 @@ var treeui_catalog_default = {
1780
2270
  },
1781
2271
  {
1782
2272
  name: "TDatePicker",
1783
- legacyAlias: "TreeDatePicker",
1784
- aliases: [
1785
- "TreeDatePicker"
1786
- ],
2273
+ aliases: [],
1787
2274
  package: "@treeui/vue",
1788
2275
  kind: "form_overlay",
1789
2276
  category: "Data Entry",
1790
2277
  status: "available",
1791
2278
  purpose: "Date input with calendar popover and keyboard navigation.",
1792
- sourceFile: "packages/vue/src/components/TreeDatePicker.vue",
2279
+ sourceFile: "packages/vue/src/components/TDatePicker.vue",
1793
2280
  storyFile: "apps/docs/src/stories/DatePicker.stories.ts",
1794
2281
  storyTitle: "Components/Data Entry/DatePicker",
1795
2282
  manifestFile: "docs/ai/COMPONENTS/date-picker.yaml",
@@ -1811,7 +2298,7 @@ var treeui_catalog_default = {
1811
2298
  },
1812
2299
  {
1813
2300
  name: "size",
1814
- type: "TreeSize",
2301
+ type: "TSize",
1815
2302
  default: "md",
1816
2303
  values: [
1817
2304
  "sm",
@@ -1932,16 +2419,13 @@ var treeui_catalog_default = {
1932
2419
  },
1933
2420
  {
1934
2421
  name: "TDateTimePicker",
1935
- legacyAlias: "TreeDateTimePicker",
1936
- aliases: [
1937
- "TreeDateTimePicker"
1938
- ],
2422
+ aliases: [],
1939
2423
  package: "@treeui/vue",
1940
2424
  kind: "form",
1941
2425
  category: "Data Entry",
1942
2426
  status: "available",
1943
2427
  purpose: "Date and time picker with a calendar grid, time selection, and overlay trigger.",
1944
- sourceFile: "packages/vue/src/components/TreeDateTimePicker.vue",
2428
+ sourceFile: "packages/vue/src/components/TDateTimePicker.vue",
1945
2429
  storyFile: "apps/docs/src/stories/DateTimePicker.stories.ts",
1946
2430
  storyTitle: "Components/Data Entry/DateTimePicker",
1947
2431
  manifestFile: "docs/ai/COMPONENTS/date-time-picker.yaml",
@@ -1964,7 +2448,7 @@ var treeui_catalog_default = {
1964
2448
  },
1965
2449
  {
1966
2450
  name: "size",
1967
- type: "TreeSize",
2451
+ type: "TSize",
1968
2452
  default: "md",
1969
2453
  values: [
1970
2454
  "sm",
@@ -2093,14 +2577,11 @@ var treeui_catalog_default = {
2093
2577
  },
2094
2578
  {
2095
2579
  name: "TDivider",
2096
- legacyAlias: "TreeDivider",
2097
- aliases: [
2098
- "TreeDivider"
2099
- ],
2580
+ aliases: [],
2100
2581
  package: "@treeui/vue",
2101
2582
  category: "Layout",
2102
2583
  description: "Horizontal or vertical visual separator.",
2103
- sourceFile: "packages/vue/src/components/TreeDivider.vue",
2584
+ sourceFile: "packages/vue/src/components/TDivider.vue",
2104
2585
  storyFile: "apps/docs/src/stories/Divider.stories.ts",
2105
2586
  storyTitle: "Components/Layout/Divider",
2106
2587
  manifestFile: "docs/ai/COMPONENTS/divider.yaml",
@@ -2115,50 +2596,183 @@ var treeui_catalog_default = {
2115
2596
  ]
2116
2597
  },
2117
2598
  {
2118
- name: "decorative",
2599
+ name: "decorative",
2600
+ type: "boolean",
2601
+ default: "true",
2602
+ description: "When true, renders role='none' (purely visual). When false, renders as role='separator'."
2603
+ },
2604
+ {
2605
+ name: "label",
2606
+ type: "string",
2607
+ required: false,
2608
+ description: "Accessible label for non-decorative dividers."
2609
+ }
2610
+ ],
2611
+ events: [],
2612
+ slots: [],
2613
+ a11y: [
2614
+ "role: none (decorative) or separator (semantic)",
2615
+ "aria-orientation: Set when non-decorative.",
2616
+ "aria-label: Set from `label` prop when non-decorative."
2617
+ ],
2618
+ behavior: [],
2619
+ selection: {
2620
+ keywords: [],
2621
+ useWhen: [],
2622
+ avoidWhen: [],
2623
+ alternatives: []
2624
+ },
2625
+ setup: {
2626
+ required: [],
2627
+ notes: []
2628
+ },
2629
+ recipes: []
2630
+ },
2631
+ {
2632
+ name: "TDonutChart",
2633
+ aliases: [],
2634
+ package: "@treeui/vue",
2635
+ kind: "data-display",
2636
+ category: "Data Display",
2637
+ status: "available",
2638
+ 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.",
2639
+ sourceFile: "packages/vue/src/components/TDonutChart.vue",
2640
+ storyFile: "apps/docs/src/stories/DonutChart.stories.ts",
2641
+ storyTitle: "Components/Data Display/Donut Chart",
2642
+ manifestFile: "docs/ai/COMPONENTS/donut-chart.yaml",
2643
+ props: [
2644
+ {
2645
+ name: "segments",
2646
+ type: "TDonutSegment[]",
2647
+ default: "[]",
2648
+ note: "Each item is { label: string; value: number; color?: string }. Non-positive values are omitted."
2649
+ },
2650
+ {
2651
+ name: "size",
2652
+ type: "number",
2653
+ default: "200",
2654
+ note: "Square canvas in px."
2655
+ },
2656
+ {
2657
+ name: "thickness",
2658
+ type: "number",
2659
+ default: "26",
2660
+ note: "Ring thickness; 0 renders a full pie."
2661
+ },
2662
+ {
2663
+ name: "gap",
2664
+ type: "number",
2665
+ default: "2",
2666
+ note: "Gap between slices, in degrees."
2667
+ },
2668
+ {
2669
+ name: "rounded",
2670
+ type: "boolean",
2671
+ default: "false",
2672
+ note: "Round the ends of donut segments (widens the gap to make room). Best with a thinner ring."
2673
+ },
2674
+ {
2675
+ name: "showLegend",
2676
+ type: "boolean",
2677
+ default: "true"
2678
+ },
2679
+ {
2680
+ name: "showPercent",
2681
+ type: "boolean",
2682
+ default: "true"
2683
+ },
2684
+ {
2685
+ name: "centerLabel",
2686
+ type: "string",
2687
+ default: "Total",
2688
+ note: "Donut only; ignored for pie."
2689
+ },
2690
+ {
2691
+ name: "centerValue",
2692
+ type: "string | number",
2693
+ default: "auto (sum of values)"
2694
+ },
2695
+ {
2696
+ name: "valueFormat",
2697
+ type: "(value: number) => string",
2698
+ default: "locale integers for |value| >= 1000"
2699
+ },
2700
+ {
2701
+ name: "loading",
2119
2702
  type: "boolean",
2120
- default: "true",
2121
- description: "When true, renders role='none' (purely visual). When false, renders as role='separator'."
2703
+ default: "false"
2122
2704
  },
2123
2705
  {
2124
- name: "label",
2706
+ name: "ariaLabel",
2125
2707
  type: "string",
2126
- required: false,
2127
- description: "Accessible label for non-decorative dividers."
2708
+ default: "auto-generated summary"
2128
2709
  }
2129
2710
  ],
2130
2711
  events: [],
2131
- slots: [],
2712
+ slots: [
2713
+ {
2714
+ name: "center"
2715
+ },
2716
+ {
2717
+ name: "empty"
2718
+ }
2719
+ ],
2132
2720
  a11y: [
2133
- "role: none (decorative) or separator (semantic)",
2134
- "aria-orientation: Set when non-decorative.",
2135
- "aria-label: Set from `label` prop when non-decorative."
2721
+ "Renders role=img with an aria-label summarizing the chart.",
2722
+ "Legend + percentages give a non-visual reading of each slice."
2723
+ ],
2724
+ behavior: [
2725
+ "colors_auto_assign_from_chart_palette: --tree-color-chart-1..8, cycling; per-segment color overrides",
2726
+ "hovering_a_slice_dims_the_rest_and_updates_center: true",
2727
+ "center_shows_total_or_the_hovered_segment: true"
2136
2728
  ],
2137
- behavior: [],
2138
2729
  selection: {
2139
- keywords: [],
2140
- useWhen: [],
2141
- avoidWhen: [],
2142
- alternatives: []
2730
+ keywords: [
2731
+ "donut",
2732
+ "doughnut",
2733
+ "pie",
2734
+ "proportion",
2735
+ "share",
2736
+ "breakdown",
2737
+ "part of whole",
2738
+ "percentage"
2739
+ ],
2740
+ useWhen: [
2741
+ "You are showing how a total splits into a handful of categories.",
2742
+ "A donut center readout (total or hovered slice) is useful."
2743
+ ],
2744
+ avoidWhen: [
2745
+ "There are many categories or precise comparison matters \u2014 use TChart bars.",
2746
+ "The data is a trend over time \u2014 use TChart or TSparkline."
2747
+ ],
2748
+ alternatives: [
2749
+ {
2750
+ component: "TChart",
2751
+ when: "Precise magnitude comparison across categories is needed (bars)."
2752
+ }
2753
+ ]
2143
2754
  },
2144
2755
  setup: {
2145
2756
  required: [],
2146
- notes: []
2757
+ notes: [
2758
+ "Pass `segments` as `{ label, value, color? }[]`; non-positive values are dropped.",
2759
+ "Set `thickness: 0` for a full pie; keep the default for a donut with a center readout.",
2760
+ "Use the `center` slot (donut only) for a custom center; otherwise it shows the total or the hovered slice."
2761
+ ]
2147
2762
  },
2148
- recipes: []
2763
+ recipes: [
2764
+ "metric-dashboard"
2765
+ ]
2149
2766
  },
2150
2767
  {
2151
2768
  name: "TDrawer",
2152
- legacyAlias: "TreeDrawer",
2153
- aliases: [
2154
- "TreeDrawer"
2155
- ],
2769
+ aliases: [],
2156
2770
  package: "@treeui/vue",
2157
2771
  kind: "overlay",
2158
2772
  category: "Overlay",
2159
2773
  status: "available",
2160
2774
  purpose: "Side-anchored panel for secondary content, navigation, or forms.",
2161
- sourceFile: "packages/vue/src/components/TreeDrawer.vue",
2775
+ sourceFile: "packages/vue/src/components/TDrawer.vue",
2162
2776
  storyFile: "apps/docs/src/stories/Drawer.stories.ts",
2163
2777
  storyTitle: "Components/Overlay/Drawer",
2164
2778
  manifestFile: "docs/ai/COMPONENTS/drawer.yaml",
@@ -2180,7 +2794,7 @@ var treeui_catalog_default = {
2180
2794
  },
2181
2795
  {
2182
2796
  name: "size",
2183
- type: "TreeSize",
2797
+ type: "TSize",
2184
2798
  default: "md",
2185
2799
  values: [
2186
2800
  "sm",
@@ -2190,7 +2804,7 @@ var treeui_catalog_default = {
2190
2804
  },
2191
2805
  {
2192
2806
  name: "side",
2193
- type: "TreeDrawerSide",
2807
+ type: "TDrawerSide",
2194
2808
  default: "right",
2195
2809
  values: [
2196
2810
  "top",
@@ -2305,23 +2919,20 @@ var treeui_catalog_default = {
2305
2919
  },
2306
2920
  {
2307
2921
  name: "TDropdown",
2308
- legacyAlias: "TreeDropdown",
2309
- aliases: [
2310
- "TreeDropdown"
2311
- ],
2922
+ aliases: [],
2312
2923
  package: "@treeui/vue",
2313
2924
  kind: "overlay",
2314
2925
  category: "Overlay",
2315
2926
  status: "available",
2316
2927
  purpose: "Trigger + floating menu with keyboard navigation for action lists.",
2317
- sourceFile: "packages/vue/src/components/TreeDropdown.vue",
2928
+ sourceFile: "packages/vue/src/components/TDropdown.vue",
2318
2929
  storyFile: "apps/docs/src/stories/Dropdown.stories.ts",
2319
2930
  storyTitle: "Components/Overlay/Dropdown",
2320
2931
  manifestFile: "docs/ai/COMPONENTS/dropdown.yaml",
2321
2932
  props: [
2322
2933
  {
2323
2934
  name: "items",
2324
- type: "TreeDropdownItem[]",
2935
+ type: "TDropdownItem[]",
2325
2936
  default: "[]",
2326
2937
  note: "Array of { label: string; value: string; disabled?: boolean }"
2327
2938
  },
@@ -2342,7 +2953,7 @@ var treeui_catalog_default = {
2342
2953
  },
2343
2954
  {
2344
2955
  name: "size",
2345
- type: "TreeSize",
2956
+ type: "TSize",
2346
2957
  default: "md",
2347
2958
  values: [
2348
2959
  "sm",
@@ -2354,6 +2965,16 @@ var treeui_catalog_default = {
2354
2965
  name: "label",
2355
2966
  type: "string",
2356
2967
  default: ""
2968
+ },
2969
+ {
2970
+ name: "align",
2971
+ type: "TDropdownAlign",
2972
+ default: "start",
2973
+ values: [
2974
+ "start",
2975
+ "end"
2976
+ ],
2977
+ 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)."
2357
2978
  }
2358
2979
  ],
2359
2980
  events: [
@@ -2389,7 +3010,8 @@ var treeui_catalog_default = {
2389
3010
  behavior: [
2390
3011
  "outside_click_closes_menu: true",
2391
3012
  "focus_restores_on_close: true",
2392
- "chevron_rotates_when_open: true"
3013
+ "chevron_rotates_when_open: true",
3014
+ "menu_grows_to_fit_items_without_wrapping: true"
2393
3015
  ],
2394
3016
  selection: {
2395
3017
  keywords: [
@@ -2422,16 +3044,13 @@ var treeui_catalog_default = {
2422
3044
  },
2423
3045
  {
2424
3046
  name: "TEmptyState",
2425
- legacyAlias: "TreeEmptyState",
2426
- aliases: [
2427
- "TreeEmptyState"
2428
- ],
3047
+ aliases: [],
2429
3048
  package: "@treeui/vue",
2430
3049
  kind: "feedback",
2431
3050
  category: "Feedback",
2432
3051
  status: "available",
2433
3052
  purpose: "Structured empty, no-results, and first-run placeholder block with optional icon, body content, and actions.",
2434
- sourceFile: "packages/vue/src/components/TreeEmptyState.vue",
3053
+ sourceFile: "packages/vue/src/components/TEmptyState.vue",
2435
3054
  storyFile: "apps/docs/src/stories/EmptyState.stories.ts",
2436
3055
  storyTitle: "Components/Feedback/EmptyState",
2437
3056
  manifestFile: "docs/ai/COMPONENTS/empty-state.yaml",
@@ -2443,7 +3062,7 @@ var treeui_catalog_default = {
2443
3062
  },
2444
3063
  {
2445
3064
  name: "size",
2446
- type: "TreeSize",
3065
+ type: "TSize",
2447
3066
  default: "md",
2448
3067
  values: [
2449
3068
  "sm",
@@ -2517,16 +3136,13 @@ var treeui_catalog_default = {
2517
3136
  },
2518
3137
  {
2519
3138
  name: "TFileUpload",
2520
- legacyAlias: "TreeFileUpload",
2521
- aliases: [
2522
- "TreeFileUpload"
2523
- ],
3139
+ aliases: [],
2524
3140
  package: "@treeui/vue",
2525
3141
  kind: "form",
2526
3142
  category: "Form",
2527
3143
  status: "available",
2528
3144
  purpose: "Composable dropzone and file picker with browse, drag-and-drop, and Ctrl+V paste support.",
2529
- sourceFile: "packages/vue/src/components/TreeFileUpload.vue",
3145
+ sourceFile: "packages/vue/src/components/TFileUpload.vue",
2530
3146
  storyFile: "apps/docs/src/stories/FileUpload.stories.ts",
2531
3147
  storyTitle: "Components/Form/FileUpload",
2532
3148
  manifestFile: "docs/ai/COMPONENTS/file-upload.yaml",
@@ -2538,7 +3154,7 @@ var treeui_catalog_default = {
2538
3154
  },
2539
3155
  {
2540
3156
  name: "size",
2541
- type: "TreeSize",
3157
+ type: "TSize",
2542
3158
  default: "md",
2543
3159
  values: [
2544
3160
  "sm",
@@ -2671,15 +3287,12 @@ var treeui_catalog_default = {
2671
3287
  },
2672
3288
  {
2673
3289
  name: "TFormField",
2674
- legacyAlias: "TreeFormField",
2675
- aliases: [
2676
- "TreeFormField"
2677
- ],
3290
+ aliases: [],
2678
3291
  package: "@treeui/vue",
2679
3292
  category: "Data Entry",
2680
3293
  status: "milestone-1",
2681
3294
  description: "Label + input wrapper with error and hint slots. Provides consistent layout, labelling, and validation messaging for any form control.\n",
2682
- sourceFile: "packages/vue/src/components/TreeFormField.vue",
3295
+ sourceFile: "packages/vue/src/components/TFormField.vue",
2683
3296
  storyFile: "apps/docs/src/stories/FormField.stories.ts",
2684
3297
  storyTitle: "Components/Data Entry/FormField",
2685
3298
  manifestFile: "docs/ai/COMPONENTS/form-field.yaml",
@@ -2722,7 +3335,7 @@ var treeui_catalog_default = {
2722
3335
  },
2723
3336
  {
2724
3337
  name: "size",
2725
- type: "TreeSize",
3338
+ type: "TSize",
2726
3339
  default: "md",
2727
3340
  values: [
2728
3341
  "sm",
@@ -2803,16 +3416,13 @@ var treeui_catalog_default = {
2803
3416
  },
2804
3417
  {
2805
3418
  name: "TGrid",
2806
- legacyAlias: "TreeGrid",
2807
- aliases: [
2808
- "TreeGrid"
2809
- ],
3419
+ aliases: [],
2810
3420
  package: "@treeui/vue",
2811
3421
  kind: "layout",
2812
3422
  category: "Layout",
2813
3423
  status: "available",
2814
3424
  purpose: "Responsive grid wrapper for cards, forms, stats, and other multi-column layouts.",
2815
- sourceFile: "packages/vue/src/components/TreeGrid.vue",
3425
+ sourceFile: "packages/vue/src/components/TGrid.vue",
2816
3426
  storyFile: "apps/docs/src/stories/Grid.stories.ts",
2817
3427
  storyTitle: "Components/Layout/Grid",
2818
3428
  manifestFile: "docs/ai/COMPONENTS/grid.yaml",
@@ -2901,21 +3511,109 @@ var treeui_catalog_default = {
2901
3511
  },
2902
3512
  recipes: [
2903
3513
  "date-range-form",
2904
- "stat-grid"
3514
+ "stat-grid",
3515
+ "metric-dashboard"
2905
3516
  ]
2906
3517
  },
2907
3518
  {
2908
- name: "TInput",
2909
- legacyAlias: "TreeInput",
2910
- aliases: [
2911
- "TreeInput"
3519
+ name: "TIcon",
3520
+ aliases: [],
3521
+ package: "@treeui/vue",
3522
+ kind: "display",
3523
+ category: "Data Display",
3524
+ status: "available",
3525
+ purpose: "Render a registered TreeUI icon by name with consistent sizing and accessibility defaults.",
3526
+ sourceFile: "packages/vue/src/components/TIcon.vue",
3527
+ storyFile: "apps/docs/src/stories/Icon.stories.ts",
3528
+ storyTitle: "Components/Data Display/Icon",
3529
+ manifestFile: "docs/ai/COMPONENTS/icon.yaml",
3530
+ props: [
3531
+ {
3532
+ name: "name",
3533
+ type: "TIconName",
3534
+ required: true,
3535
+ values: [
3536
+ "alert-circle",
3537
+ "calendar",
3538
+ "check",
3539
+ "chevron-left",
3540
+ "chevron-down",
3541
+ "chevron-right",
3542
+ "info",
3543
+ "loader-circle",
3544
+ "search",
3545
+ "x"
3546
+ ],
3547
+ description: "Icon identifier from the @treeui/icons registry."
3548
+ },
3549
+ {
3550
+ name: "size",
3551
+ type: "number | string",
3552
+ default: "20",
3553
+ description: "Pixel size for both width and height of the rendered svg."
3554
+ },
3555
+ {
3556
+ name: "strokeWidth",
3557
+ type: "number | string",
3558
+ default: "2"
3559
+ },
3560
+ {
3561
+ name: "absoluteStrokeWidth",
3562
+ type: "boolean",
3563
+ default: "true",
3564
+ description: "When true, stroke width stays visually constant across sizes."
3565
+ },
3566
+ {
3567
+ name: "label",
3568
+ type: "string",
3569
+ default: "undefined",
3570
+ description: 'Accessible label. When set, the icon becomes role="img" with aria-label; otherwise it is aria-hidden.'
3571
+ }
3572
+ ],
3573
+ events: [],
3574
+ slots: [],
3575
+ a11y: [
3576
+ "decorative_by_default: true",
3577
+ "becomes_image_when_labeled: true",
3578
+ "rule: Provide `label` only when the icon conveys meaning that is not already in adjacent text."
2912
3579
  ],
3580
+ behavior: [],
3581
+ selection: {
3582
+ keywords: [
3583
+ "icon",
3584
+ "svg",
3585
+ "glyph",
3586
+ "pictogram"
3587
+ ],
3588
+ useWhen: [
3589
+ "You need to render a registered TreeUI icon by name.",
3590
+ "You want consistent sizing and a11y defaults without importing the icon component directly."
3591
+ ],
3592
+ avoidWhen: [
3593
+ "The icon is not in the @treeui/icons registry \u2014 import or register it instead."
3594
+ ],
3595
+ alternatives: [
3596
+ {
3597
+ component: "named import from @treeui/icons",
3598
+ when: "You need tree-shaken, statically-imported icon components."
3599
+ }
3600
+ ]
3601
+ },
3602
+ setup: {
3603
+ required: [],
3604
+ notes: []
3605
+ },
3606
+ recipes: []
3607
+ },
3608
+ {
3609
+ name: "TInput",
3610
+ aliases: [],
2913
3611
  package: "@treeui/vue",
2914
3612
  kind: "primitive",
2915
3613
  category: "Data Entry",
2916
3614
  status: "available",
2917
3615
  purpose: "Text input with size, loading, invalid, and prefix or suffix slots.",
2918
- sourceFile: "packages/vue/src/components/TreeInput.vue",
3616
+ sourceFile: "packages/vue/src/components/TInput.vue",
2919
3617
  storyFile: "apps/docs/src/stories/Input.stories.ts",
2920
3618
  storyTitle: "Components/Data Entry/Input",
2921
3619
  manifestFile: "docs/ai/COMPONENTS/input.yaml",
@@ -2927,7 +3625,7 @@ var treeui_catalog_default = {
2927
3625
  },
2928
3626
  {
2929
3627
  name: "size",
2930
- type: "TreeSize",
3628
+ type: "TSize",
2931
3629
  default: "md",
2932
3630
  values: [
2933
3631
  "sm",
@@ -3021,16 +3719,13 @@ var treeui_catalog_default = {
3021
3719
  },
3022
3720
  {
3023
3721
  name: "TLink",
3024
- legacyAlias: "TreeLink",
3025
- aliases: [
3026
- "TreeLink"
3027
- ],
3722
+ aliases: [],
3028
3723
  package: "@treeui/vue",
3029
3724
  kind: "navigation",
3030
3725
  category: "Navigation",
3031
3726
  status: "available",
3032
3727
  purpose: "Inline link with consistent styling, optional RouterLink rendering, and external link support.",
3033
- sourceFile: "packages/vue/src/components/TreeLink.vue",
3728
+ sourceFile: "packages/vue/src/components/TLink.vue",
3034
3729
  storyFile: "apps/docs/src/stories/Link.stories.ts",
3035
3730
  storyTitle: "Components/Navigation/Link",
3036
3731
  manifestFile: "docs/ai/COMPONENTS/link.yaml",
@@ -3060,7 +3755,7 @@ var treeui_catalog_default = {
3060
3755
  },
3061
3756
  {
3062
3757
  name: "variant",
3063
- type: "TreeLinkVariant",
3758
+ type: "TLinkVariant",
3064
3759
  default: "default",
3065
3760
  values: [
3066
3761
  "default",
@@ -3096,10 +3791,7 @@ var treeui_catalog_default = {
3096
3791
  },
3097
3792
  {
3098
3793
  name: "TMarkdownEditor",
3099
- legacyAlias: "TreeMarkdownEditor",
3100
- aliases: [
3101
- "TreeMarkdownEditor"
3102
- ],
3794
+ aliases: [],
3103
3795
  package: "@treeui/vue",
3104
3796
  category: "Form",
3105
3797
  status: "stable",
@@ -3116,7 +3808,7 @@ var treeui_catalog_default = {
3116
3808
  },
3117
3809
  {
3118
3810
  name: "size",
3119
- type: "TreeSize",
3811
+ type: "TSize",
3120
3812
  default: "md",
3121
3813
  values: [
3122
3814
  "sm",
@@ -3201,16 +3893,13 @@ var treeui_catalog_default = {
3201
3893
  },
3202
3894
  {
3203
3895
  name: "TModal",
3204
- legacyAlias: "TreeModal",
3205
- aliases: [
3206
- "TreeModal"
3207
- ],
3896
+ aliases: [],
3208
3897
  package: "@treeui/vue",
3209
3898
  kind: "overlay",
3210
3899
  category: "Overlay",
3211
3900
  status: "available",
3212
3901
  purpose: "Accessible modal dialog for focused tasks and confirmations.",
3213
- sourceFile: "packages/vue/src/components/TreeModal.vue",
3902
+ sourceFile: "packages/vue/src/components/TModal.vue",
3214
3903
  storyFile: "apps/docs/src/stories/Modal.stories.ts",
3215
3904
  storyTitle: "Components/Overlay/Modal",
3216
3905
  manifestFile: "docs/ai/COMPONENTS/modal.yaml",
@@ -3232,7 +3921,7 @@ var treeui_catalog_default = {
3232
3921
  },
3233
3922
  {
3234
3923
  name: "size",
3235
- type: "TreeSize",
3924
+ type: "TSize",
3236
3925
  default: "md",
3237
3926
  values: [
3238
3927
  "sm",
@@ -3352,16 +4041,13 @@ var treeui_catalog_default = {
3352
4041
  },
3353
4042
  {
3354
4043
  name: "TMultiSelect",
3355
- legacyAlias: "TreeMultiSelect",
3356
- aliases: [
3357
- "TreeMultiSelect"
3358
- ],
4044
+ aliases: [],
3359
4045
  package: "@treeui/vue",
3360
4046
  kind: "form",
3361
4047
  category: "Data Entry",
3362
4048
  status: "available",
3363
4049
  purpose: "Searchable multi-select control that renders selected values as tags.",
3364
- sourceFile: "packages/vue/src/components/TreeMultiSelect.vue",
4050
+ sourceFile: "packages/vue/src/components/TMultiSelect.vue",
3365
4051
  storyFile: "apps/docs/src/stories/MultiSelect.stories.ts",
3366
4052
  storyTitle: "Components/Data Entry/MultiSelect",
3367
4053
  manifestFile: "docs/ai/COMPONENTS/multi-select.yaml",
@@ -3373,7 +4059,7 @@ var treeui_catalog_default = {
3373
4059
  },
3374
4060
  {
3375
4061
  name: "options",
3376
- type: "TreeMultiSelectOption[]",
4062
+ type: "TMultiSelectOption[]",
3377
4063
  default: "[]",
3378
4064
  note: "Array of `{ label, value, description?, keywords?, disabled? }`."
3379
4065
  },
@@ -3389,7 +4075,7 @@ var treeui_catalog_default = {
3389
4075
  },
3390
4076
  {
3391
4077
  name: "size",
3392
- type: "TreeSize",
4078
+ type: "TSize",
3393
4079
  default: "md",
3394
4080
  values: [
3395
4081
  "sm",
@@ -3514,18 +4200,15 @@ var treeui_catalog_default = {
3514
4200
  },
3515
4201
  {
3516
4202
  name: "TNavbar",
3517
- legacyAlias: "TreeAppBar",
3518
4203
  aliases: [
3519
- "TAppBar",
3520
- "TreeAppBar",
3521
- "TreeNavbar"
4204
+ "TAppBar"
3522
4205
  ],
3523
4206
  package: "@treeui/vue",
3524
4207
  kind: "layout",
3525
4208
  category: "Layout",
3526
4209
  status: "available",
3527
4210
  purpose: "Top application bar with start, center, and end content areas.",
3528
- sourceFile: "packages/vue/src/components/TreeNavbar.vue",
4211
+ sourceFile: "packages/vue/src/components/TNavbar.vue",
3529
4212
  storyFile: "apps/docs/src/stories/Navbar.stories.ts",
3530
4213
  storyTitle: "Components/Layout/Navbar",
3531
4214
  manifestFile: "docs/ai/COMPONENTS/navbar.yaml",
@@ -3537,7 +4220,7 @@ var treeui_catalog_default = {
3537
4220
  },
3538
4221
  {
3539
4222
  name: "size",
3540
- type: "TreeSize",
4223
+ type: "TSize",
3541
4224
  default: "md",
3542
4225
  values: [
3543
4226
  "sm",
@@ -3615,16 +4298,13 @@ var treeui_catalog_default = {
3615
4298
  },
3616
4299
  {
3617
4300
  name: "TNavMenu",
3618
- legacyAlias: "TreeNavMenu",
3619
- aliases: [
3620
- "TreeNavMenu"
3621
- ],
4301
+ aliases: [],
3622
4302
  package: "@treeui/vue",
3623
4303
  kind: "navigation",
3624
4304
  category: "Layout",
3625
4305
  status: "available",
3626
4306
  purpose: "Vertical navigation menu with selection state, keyboard navigation, optional RouterLink rendering, and sidebar integration.",
3627
- sourceFile: "packages/vue/src/components/TreeNavMenu.vue",
4307
+ sourceFile: "packages/vue/src/components/TNavMenu.vue",
3628
4308
  storyFile: "apps/docs/src/stories/NavMenu.stories.ts",
3629
4309
  storyTitle: "Components/Layout/NavMenu",
3630
4310
  manifestFile: "docs/ai/COMPONENTS/nav-menu.yaml",
@@ -3641,13 +4321,13 @@ var treeui_catalog_default = {
3641
4321
  },
3642
4322
  {
3643
4323
  name: "items",
3644
- type: "TreeNavMenuItem[]",
4324
+ type: "TNavMenuItem[]",
3645
4325
  default: "[]",
3646
4326
  note: "Array of `{ label, value, shortLabel?, description?, icon?, to?, badge?, disabled? }`."
3647
4327
  },
3648
4328
  {
3649
4329
  name: "size",
3650
- type: "TreeSize",
4330
+ type: "TSize",
3651
4331
  default: "md",
3652
4332
  values: [
3653
4333
  "sm",
@@ -3722,25 +4402,23 @@ var treeui_catalog_default = {
3722
4402
  setup: {
3723
4403
  required: [],
3724
4404
  notes: [
3725
- "When nested inside `TSidebar`, `collapsed` can be inherited from the sidebar provider."
4405
+ "When nested inside `TSidebar` or `TAppShell`, `collapsed` can be inherited from the sidebar provider."
3726
4406
  ]
3727
4407
  },
3728
4408
  recipes: [
4409
+ "app-shell",
3729
4410
  "sidebar-shell"
3730
4411
  ]
3731
4412
  },
3732
4413
  {
3733
4414
  name: "TNumberInput",
3734
- legacyAlias: "TreeNumberInput",
3735
- aliases: [
3736
- "TreeNumberInput"
3737
- ],
4415
+ aliases: [],
3738
4416
  package: "@treeui/vue",
3739
4417
  kind: "form",
3740
4418
  category: "Data Entry",
3741
4419
  status: "available",
3742
4420
  purpose: "Numeric input with optional increment and decrement controls.",
3743
- sourceFile: "packages/vue/src/components/TreeNumberInput.vue",
4421
+ sourceFile: "packages/vue/src/components/TNumberInput.vue",
3744
4422
  storyFile: "apps/docs/src/stories/NumberInput.stories.ts",
3745
4423
  storyTitle: "Components/Data Entry/NumberInput",
3746
4424
  manifestFile: "docs/ai/COMPONENTS/number-input.yaml",
@@ -3766,7 +4444,7 @@ var treeui_catalog_default = {
3766
4444
  },
3767
4445
  {
3768
4446
  name: "size",
3769
- type: "TreeSize",
4447
+ type: "TSize",
3770
4448
  default: "md",
3771
4449
  values: [
3772
4450
  "sm",
@@ -3841,16 +4519,13 @@ var treeui_catalog_default = {
3841
4519
  },
3842
4520
  {
3843
4521
  name: "TPagination",
3844
- legacyAlias: "TreePagination",
3845
- aliases: [
3846
- "TreePagination"
3847
- ],
4522
+ aliases: [],
3848
4523
  package: "@treeui/vue",
3849
4524
  kind: "primitive",
3850
4525
  category: "Navigation",
3851
4526
  status: "available",
3852
4527
  purpose: "Page controls with previous/next navigation, numbered page buttons, and ellipsis for large page ranges. Supports v-model for the active page.\n",
3853
- sourceFile: "packages/vue/src/components/TreePagination.vue",
4528
+ sourceFile: "packages/vue/src/components/TPagination.vue",
3854
4529
  storyFile: "apps/docs/src/stories/Pagination.stories.ts",
3855
4530
  storyTitle: "Components/Navigation/Pagination",
3856
4531
  manifestFile: "docs/ai/COMPONENTS/pagination.yaml",
@@ -3875,7 +4550,7 @@ var treeui_catalog_default = {
3875
4550
  },
3876
4551
  {
3877
4552
  name: "size",
3878
- type: "TreeSize",
4553
+ type: "TSize",
3879
4554
  default: "md",
3880
4555
  values: [
3881
4556
  "sm",
@@ -3957,10 +4632,7 @@ var treeui_catalog_default = {
3957
4632
  },
3958
4633
  {
3959
4634
  name: "TPopover",
3960
- legacyAlias: "TreePopover",
3961
- aliases: [
3962
- "TreePopover"
3963
- ],
4635
+ aliases: [],
3964
4636
  package: "@treeui/vue",
3965
4637
  category: "Overlay",
3966
4638
  status: "stable",
@@ -4063,10 +4735,7 @@ var treeui_catalog_default = {
4063
4735
  },
4064
4736
  {
4065
4737
  name: "TPricing",
4066
- legacyAlias: "TreePricing",
4067
- aliases: [
4068
- "TreePricing"
4069
- ],
4738
+ aliases: [],
4070
4739
  package: "@treeui/vue",
4071
4740
  status: "stable",
4072
4741
  description: "Grid wrapper that renders multiple PricingCard components from an array of plan objects.\n",
@@ -4082,7 +4751,7 @@ var treeui_catalog_default = {
4082
4751
  },
4083
4752
  {
4084
4753
  name: "size",
4085
- type: "TreeSize",
4754
+ type: "TSize",
4086
4755
  default: "md",
4087
4756
  description: "Size applied to all child pricing cards."
4088
4757
  },
@@ -4130,10 +4799,7 @@ var treeui_catalog_default = {
4130
4799
  },
4131
4800
  {
4132
4801
  name: "TPricingCard",
4133
- legacyAlias: "TreePricingCard",
4134
- aliases: [
4135
- "TreePricingCard"
4136
- ],
4802
+ aliases: [],
4137
4803
  package: "@treeui/vue",
4138
4804
  category: "Data Display",
4139
4805
  status: "stable",
@@ -4198,7 +4864,7 @@ var treeui_catalog_default = {
4198
4864
  },
4199
4865
  {
4200
4866
  name: "size",
4201
- type: "TreeSize",
4867
+ type: "TSize",
4202
4868
  default: "md",
4203
4869
  description: "Card size \u2014 affects padding, font sizes."
4204
4870
  },
@@ -4243,7 +4909,7 @@ var treeui_catalog_default = {
4243
4909
  "Uses <h3> for plan title.",
4244
4910
  'Feature list uses role="list" with <ul>/<li>.',
4245
4911
  'Feature icons are aria-hidden="true".',
4246
- "CTA button inherits TreeButton a11y (disabled, aria-busy)."
4912
+ "CTA button inherits TButton a11y (disabled, aria-busy)."
4247
4913
  ],
4248
4914
  behavior: [],
4249
4915
  selection: {
@@ -4262,10 +4928,7 @@ var treeui_catalog_default = {
4262
4928
  },
4263
4929
  {
4264
4930
  name: "TProgress",
4265
- legacyAlias: "TreeProgress",
4266
- aliases: [
4267
- "TreeProgress"
4268
- ],
4931
+ aliases: [],
4269
4932
  package: "@treeui/vue",
4270
4933
  category: "Feedback",
4271
4934
  status: "draft",
@@ -4288,7 +4951,7 @@ var treeui_catalog_default = {
4288
4951
  },
4289
4952
  {
4290
4953
  name: "size",
4291
- type: "TreeSize",
4954
+ type: "TSize",
4292
4955
  default: "md",
4293
4956
  values: [
4294
4957
  "sm",
@@ -4326,15 +4989,12 @@ var treeui_catalog_default = {
4326
4989
  },
4327
4990
  {
4328
4991
  name: "TRadio",
4329
- legacyAlias: "TreeRadio",
4330
- aliases: [
4331
- "TreeRadio"
4332
- ],
4992
+ aliases: [],
4333
4993
  package: "@treeui/vue",
4334
4994
  kind: "primitive",
4335
4995
  status: "available",
4336
4996
  purpose: "Single radio option within a TRadioGroup; renders a native radio input.",
4337
- sourceFile: "packages/vue/src/components/TreeRadio.vue",
4997
+ sourceFile: "packages/vue/src/components/TRadio.vue",
4338
4998
  manifestFile: "docs/ai/COMPONENTS/radio.yaml",
4339
4999
  props: [
4340
5000
  {
@@ -4354,7 +5014,7 @@ var treeui_catalog_default = {
4354
5014
  },
4355
5015
  {
4356
5016
  name: "size",
4357
- type: "TreeSize",
5017
+ type: "TSize",
4358
5018
  default: "inherited_from_group",
4359
5019
  values: [
4360
5020
  "sm",
@@ -4397,16 +5057,13 @@ var treeui_catalog_default = {
4397
5057
  },
4398
5058
  {
4399
5059
  name: "TRadioGroup",
4400
- legacyAlias: "TreeRadioGroup",
4401
- aliases: [
4402
- "TreeRadioGroup"
4403
- ],
5060
+ aliases: [],
4404
5061
  package: "@treeui/vue",
4405
5062
  kind: "primitive",
4406
5063
  category: "Data Entry",
4407
5064
  status: "available",
4408
5065
  purpose: "Container for TRadio options; manages v-model for single-select from a group.",
4409
- sourceFile: "packages/vue/src/components/TreeRadioGroup.vue",
5066
+ sourceFile: "packages/vue/src/components/TRadioGroup.vue",
4410
5067
  storyFile: "apps/docs/src/stories/Radio.stories.ts",
4411
5068
  storyTitle: "Components/Data Entry/Radio",
4412
5069
  manifestFile: "docs/ai/COMPONENTS/radio.yaml",
@@ -4433,7 +5090,7 @@ var treeui_catalog_default = {
4433
5090
  },
4434
5091
  {
4435
5092
  name: "size",
4436
- type: "TreeSize",
5093
+ type: "TSize",
4437
5094
  default: "md",
4438
5095
  values: [
4439
5096
  "sm",
@@ -4475,16 +5132,13 @@ var treeui_catalog_default = {
4475
5132
  },
4476
5133
  {
4477
5134
  name: "TSelect",
4478
- legacyAlias: "TreeSelect",
4479
- aliases: [
4480
- "TreeSelect"
4481
- ],
5135
+ aliases: [],
4482
5136
  package: "@treeui/vue",
4483
5137
  kind: "primitive",
4484
5138
  category: "Data Entry",
4485
5139
  status: "available",
4486
5140
  purpose: "Custom styled dropdown select with listbox; controlled and uncontrolled via v-model and open/defaultOpen.",
4487
- sourceFile: "packages/vue/src/components/TreeSelect.vue",
5141
+ sourceFile: "packages/vue/src/components/TSelect.vue",
4488
5142
  storyFile: "apps/docs/src/stories/Select.stories.ts",
4489
5143
  storyTitle: "Components/Data Entry/Select",
4490
5144
  manifestFile: "docs/ai/COMPONENTS/select.yaml",
@@ -4496,7 +5150,7 @@ var treeui_catalog_default = {
4496
5150
  },
4497
5151
  {
4498
5152
  name: "options",
4499
- type: "TreeSelectOption[]",
5153
+ type: "TSelectOption[]",
4500
5154
  default: "[]",
4501
5155
  note: "Array of { label: string; value: string | number; disabled?: boolean }"
4502
5156
  },
@@ -4512,7 +5166,7 @@ var treeui_catalog_default = {
4512
5166
  },
4513
5167
  {
4514
5168
  name: "size",
4515
- type: "TreeSize",
5169
+ type: "TSize",
4516
5170
  default: "md",
4517
5171
  values: [
4518
5172
  "sm",
@@ -4579,7 +5233,8 @@ var treeui_catalog_default = {
4579
5233
  "check_icon_on_selected_option: true",
4580
5234
  "outside_click_closes_dropdown: true",
4581
5235
  "focus_restores_on_close: true",
4582
- "numeric_values_supported_without_string_coercion: true"
5236
+ "numeric_values_supported_without_string_coercion: true",
5237
+ "listbox_flips_above_trigger_when_space_below_is_insufficient: true"
4583
5238
  ],
4584
5239
  selection: {
4585
5240
  keywords: [
@@ -4612,20 +5267,19 @@ var treeui_catalog_default = {
4612
5267
  "Use `placeholder` when no selection has been made."
4613
5268
  ]
4614
5269
  },
4615
- recipes: []
5270
+ recipes: [
5271
+ "chart-surface"
5272
+ ]
4616
5273
  },
4617
5274
  {
4618
5275
  name: "TSelectableList",
4619
- legacyAlias: "TreeSelectableList",
4620
- aliases: [
4621
- "TreeSelectableList"
4622
- ],
5276
+ aliases: [],
4623
5277
  package: "@treeui/vue",
4624
5278
  kind: "selection",
4625
5279
  category: "Navigation & Disclosure",
4626
5280
  status: "available",
4627
5281
  purpose: "Rich single-selection list for options with description and metadata.",
4628
- sourceFile: "packages/vue/src/components/TreeSelectableList.vue",
5282
+ sourceFile: "packages/vue/src/components/TSelectableList.vue",
4629
5283
  storyFile: "apps/docs/src/stories/SelectableList.stories.ts",
4630
5284
  storyTitle: "Components/Navigation & Disclosure/SelectableList",
4631
5285
  manifestFile: "docs/ai/COMPONENTS/selectable-list.yaml",
@@ -4642,13 +5296,13 @@ var treeui_catalog_default = {
4642
5296
  },
4643
5297
  {
4644
5298
  name: "items",
4645
- type: "TreeSelectableListItem[]",
5299
+ type: "TSelectableListItem[]",
4646
5300
  default: "[]",
4647
5301
  note: "Array of `{ label, value, description?, meta?, disabled? }`."
4648
5302
  },
4649
5303
  {
4650
5304
  name: "size",
4651
- type: "TreeSize",
5305
+ type: "TSize",
4652
5306
  default: "md",
4653
5307
  values: [
4654
5308
  "sm",
@@ -4725,16 +5379,13 @@ var treeui_catalog_default = {
4725
5379
  },
4726
5380
  {
4727
5381
  name: "TSidebar",
4728
- legacyAlias: "TreeSidebar",
4729
- aliases: [
4730
- "TreeSidebar"
4731
- ],
5382
+ aliases: [],
4732
5383
  package: "@treeui/vue",
4733
5384
  kind: "layout",
4734
5385
  category: "Layout",
4735
5386
  status: "available",
4736
5387
  purpose: "Persistent or collapsible side shell for app navigation and secondary workspace controls.",
4737
- sourceFile: "packages/vue/src/components/TreeSidebar.vue",
5388
+ sourceFile: "packages/vue/src/components/TSidebar.vue",
4738
5389
  storyFile: "apps/docs/src/stories/Sidebar.stories.ts",
4739
5390
  storyTitle: "Components/Layout/Sidebar",
4740
5391
  manifestFile: "docs/ai/COMPONENTS/sidebar.yaml",
@@ -4761,7 +5412,7 @@ var treeui_catalog_default = {
4761
5412
  },
4762
5413
  {
4763
5414
  name: "size",
4764
- type: "TreeSize",
5415
+ type: "TSize",
4765
5416
  default: "md",
4766
5417
  values: [
4767
5418
  "sm",
@@ -4771,7 +5422,7 @@ var treeui_catalog_default = {
4771
5422
  },
4772
5423
  {
4773
5424
  name: "side",
4774
- type: "TreeSidebarSide",
5425
+ type: "TSidebarSide",
4775
5426
  default: "left",
4776
5427
  values: [
4777
5428
  "left",
@@ -4840,7 +5491,8 @@ var treeui_catalog_default = {
4840
5491
  "controlled_and_uncontrolled_collapsed_state: true",
4841
5492
  "provides_collapsed_state_to_descendants: true",
4842
5493
  "left_and_right_variants: true",
4843
- "exposes_slot_props_with_collapsed_state: true"
5494
+ "exposes_slot_props_with_collapsed_state: true",
5495
+ "collapsed_state_centers_header_and_footer_content: true"
4844
5496
  ],
4845
5497
  selection: {
4846
5498
  keywords: [
@@ -4865,7 +5517,8 @@ var treeui_catalog_default = {
4865
5517
  required: [],
4866
5518
  notes: [
4867
5519
  "Pair with `TNavMenu` for app-section navigation.",
4868
- "Use controlled `collapsed` state when the app shell persists layout preferences."
5520
+ "Use controlled `collapsed` state when the app shell persists layout preferences.",
5521
+ "Prefer `TAppShell` when you also want full-viewport sizing, a top header, and a responsive mobile drawer."
4869
5522
  ]
4870
5523
  },
4871
5524
  recipes: [
@@ -4874,16 +5527,13 @@ var treeui_catalog_default = {
4874
5527
  },
4875
5528
  {
4876
5529
  name: "TSkeleton",
4877
- legacyAlias: "TreeSkeleton",
4878
- aliases: [
4879
- "TreeSkeleton"
4880
- ],
5530
+ aliases: [],
4881
5531
  package: "@treeui/vue",
4882
5532
  kind: "feedback",
4883
5533
  category: "Feedback",
4884
5534
  status: "available",
4885
5535
  purpose: "Placeholder shimmer for loading states. Renders an animated block that indicates content is being loaded.",
4886
- sourceFile: "packages/vue/src/components/TreeSkeleton.vue",
5536
+ sourceFile: "packages/vue/src/components/TSkeleton.vue",
4887
5537
  storyFile: "apps/docs/src/stories/Skeleton.stories.ts",
4888
5538
  storyTitle: "Components/Feedback/Skeleton",
4889
5539
  manifestFile: "docs/ai/COMPONENTS/skeleton.yaml",
@@ -4939,24 +5589,144 @@ var treeui_catalog_default = {
4939
5589
  recipes: []
4940
5590
  },
4941
5591
  {
4942
- name: "TSpinner",
4943
- legacyAlias: "TreeSpinner",
4944
- aliases: [
4945
- "TreeSpinner"
5592
+ name: "TSparkline",
5593
+ aliases: [],
5594
+ package: "@treeui/vue",
5595
+ kind: "data-display",
5596
+ category: "Data Display",
5597
+ status: "available",
5598
+ purpose: "Tiny, axis-less inline trend chart (line, area, or bar) sized for stat tiles, table cells, and running text.",
5599
+ sourceFile: "packages/vue/src/components/TSparkline.vue",
5600
+ storyFile: "apps/docs/src/stories/Sparkline.stories.ts",
5601
+ storyTitle: "Components/Data Display/Sparkline",
5602
+ manifestFile: "docs/ai/COMPONENTS/sparkline.yaml",
5603
+ props: [
5604
+ {
5605
+ name: "data",
5606
+ type: "number[]",
5607
+ default: "[]"
5608
+ },
5609
+ {
5610
+ name: "type",
5611
+ type: "line | area | bar",
5612
+ default: "line"
5613
+ },
5614
+ {
5615
+ name: "color",
5616
+ type: "string",
5617
+ default: "var(--tree-color-chart-1)",
5618
+ note: "Any CSS color."
5619
+ },
5620
+ {
5621
+ name: "width",
5622
+ type: "number",
5623
+ default: "120"
5624
+ },
5625
+ {
5626
+ name: "height",
5627
+ type: "number",
5628
+ default: "32"
5629
+ },
5630
+ {
5631
+ name: "smooth",
5632
+ type: "boolean",
5633
+ default: "false",
5634
+ note: "Curved line/area."
5635
+ },
5636
+ {
5637
+ name: "strokeWidth",
5638
+ type: "number",
5639
+ default: "2",
5640
+ note: "Line/area only."
5641
+ },
5642
+ {
5643
+ name: "min",
5644
+ type: "number",
5645
+ default: "data min"
5646
+ },
5647
+ {
5648
+ name: "max",
5649
+ type: "number",
5650
+ default: "data max"
5651
+ },
5652
+ {
5653
+ name: "showLastPoint",
5654
+ type: "boolean",
5655
+ default: "false",
5656
+ note: "Marker on the final point (line/area)."
5657
+ },
5658
+ {
5659
+ name: "ariaLabel",
5660
+ type: "string",
5661
+ default: "Trend sparkline"
5662
+ }
4946
5663
  ],
5664
+ events: [],
5665
+ slots: [],
5666
+ a11y: [
5667
+ "Renders role=img with an aria-label; pass a specific one for meaningful trends.",
5668
+ "Pair with a visible number \u2014 a sparkline supplements a value, it does not replace it."
5669
+ ],
5670
+ behavior: [
5671
+ "no_axes_or_legend: true",
5672
+ "flat_series_renders_centered: true",
5673
+ "scales_to_intrinsic_width_and_height: true"
5674
+ ],
5675
+ selection: {
5676
+ keywords: [
5677
+ "sparkline",
5678
+ "mini chart",
5679
+ "inline chart",
5680
+ "micro trend",
5681
+ "trend line",
5682
+ "table chart"
5683
+ ],
5684
+ useWhen: [
5685
+ "You want a compact trend beside a value, in a table cell, or inline in text.",
5686
+ "No axes, legend, or tooltip are required."
5687
+ ],
5688
+ avoidWhen: [
5689
+ "You need axes, multiple labeled series, or a tooltip \u2014 use TChart."
5690
+ ],
5691
+ alternatives: [
5692
+ {
5693
+ component: "TChart",
5694
+ when: "The chart needs axes, a legend, or a tooltip."
5695
+ },
5696
+ {
5697
+ component: "TStat",
5698
+ when: "A single value with a trend badge is enough."
5699
+ }
5700
+ ]
5701
+ },
5702
+ setup: {
5703
+ required: [],
5704
+ notes: [
5705
+ "Pass `data` as `number[]`; there are no axes, legend, or tooltip by design.",
5706
+ "Size it with `width`/`height`; use it inside `TStat`, table cells, or text.",
5707
+ "Always keep a visible number nearby \u2014 a sparkline supplements a value, it does not replace it."
5708
+ ]
5709
+ },
5710
+ recipes: [
5711
+ "metric-dashboard"
5712
+ ]
5713
+ },
5714
+ {
5715
+ name: "TSpinner",
5716
+ aliases: [],
4947
5717
  package: "@treeui/vue",
4948
5718
  kind: "feedback",
4949
5719
  category: "Feedback",
4950
5720
  status: "available",
4951
5721
  purpose: "Accessible loading indicator.",
4952
- sourceFile: "packages/vue/src/components/TreeSpinner.vue",
5722
+ sourceFile: "packages/vue/src/components/TSpinner.vue",
4953
5723
  storyFile: "apps/docs/src/stories/Spinner.stories.ts",
4954
5724
  storyTitle: "Components/Feedback/Spinner",
4955
5725
  manifestFile: "docs/ai/COMPONENTS/spinner.yaml",
4956
5726
  props: [
4957
5727
  {
4958
5728
  name: "size",
4959
- type: "TreeSize",
5729
+ type: "TSize",
4960
5730
  default: "md",
4961
5731
  values: [
4962
5732
  "sm",
@@ -4992,16 +5762,13 @@ var treeui_catalog_default = {
4992
5762
  },
4993
5763
  {
4994
5764
  name: "TStack",
4995
- legacyAlias: "TreeStack",
4996
- aliases: [
4997
- "TreeStack"
4998
- ],
5765
+ aliases: [],
4999
5766
  package: "@treeui/vue",
5000
5767
  kind: "layout",
5001
5768
  category: "Layout",
5002
5769
  status: "available",
5003
5770
  purpose: "One-dimensional spacing and alignment wrapper for vertical or horizontal compositions.",
5004
- sourceFile: "packages/vue/src/components/TreeStack.vue",
5771
+ sourceFile: "packages/vue/src/components/TStack.vue",
5005
5772
  storyFile: "apps/docs/src/stories/Stack.stories.ts",
5006
5773
  storyTitle: "Components/Layout/Stack",
5007
5774
  manifestFile: "docs/ai/COMPONENTS/stack.yaml",
@@ -5013,7 +5780,7 @@ var treeui_catalog_default = {
5013
5780
  },
5014
5781
  {
5015
5782
  name: "direction",
5016
- type: "TreeStackDirection",
5783
+ type: "TStackDirection",
5017
5784
  default: "vertical",
5018
5785
  values: [
5019
5786
  "vertical",
@@ -5093,16 +5860,13 @@ var treeui_catalog_default = {
5093
5860
  },
5094
5861
  {
5095
5862
  name: "TStat",
5096
- legacyAlias: "TreeStat",
5097
- aliases: [
5098
- "TreeStat"
5099
- ],
5863
+ aliases: [],
5100
5864
  package: "@treeui/vue",
5101
5865
  kind: "data-display",
5102
5866
  category: "Data Display",
5103
5867
  status: "available",
5104
5868
  purpose: "Compact KPI display with label, value, trend, metadata, and optional icon.",
5105
- sourceFile: "packages/vue/src/components/TreeStat.vue",
5869
+ sourceFile: "packages/vue/src/components/TStat.vue",
5106
5870
  storyFile: "apps/docs/src/stories/Stat.stories.ts",
5107
5871
  storyTitle: "Components/Data Display/Stat",
5108
5872
  manifestFile: "docs/ai/COMPONENTS/stat.yaml",
@@ -5129,7 +5893,7 @@ var treeui_catalog_default = {
5129
5893
  },
5130
5894
  {
5131
5895
  name: "tone",
5132
- type: "TreeStatTone",
5896
+ type: "TStatTone",
5133
5897
  default: "neutral",
5134
5898
  values: [
5135
5899
  "neutral",
@@ -5141,7 +5905,7 @@ var treeui_catalog_default = {
5141
5905
  },
5142
5906
  {
5143
5907
  name: "trendDirection",
5144
- type: "TreeStatTrendDirection",
5908
+ type: "TStatTrendDirection",
5145
5909
  default: "neutral",
5146
5910
  values: [
5147
5911
  "up",
@@ -5200,6 +5964,10 @@ var treeui_catalog_default = {
5200
5964
  {
5201
5965
  component: "TCard",
5202
5966
  when: "The content is not a metric."
5967
+ },
5968
+ {
5969
+ component: "TSparkline",
5970
+ when: "You want to show the metric's trend as an inline mini-chart."
5203
5971
  }
5204
5972
  ]
5205
5973
  },
@@ -5208,23 +5976,21 @@ var treeui_catalog_default = {
5208
5976
  notes: []
5209
5977
  },
5210
5978
  recipes: [
5211
- "stat-grid"
5979
+ "stat-grid",
5980
+ "metric-dashboard"
5212
5981
  ]
5213
5982
  },
5214
5983
  {
5215
5984
  name: "TSteps",
5216
- legacyAlias: "TreeStepper",
5217
5985
  aliases: [
5218
- "TStepper",
5219
- "TreeStepper",
5220
- "TreeSteps"
5986
+ "TStepper"
5221
5987
  ],
5222
5988
  package: "@treeui/vue",
5223
5989
  kind: "navigation",
5224
5990
  category: "Navigation & Disclosure",
5225
5991
  status: "available",
5226
5992
  purpose: "Stepper component for visualizing workflow progress, with optional interactive selection.",
5227
- sourceFile: "packages/vue/src/components/TreeSteps.vue",
5993
+ sourceFile: "packages/vue/src/components/TSteps.vue",
5228
5994
  storyFile: "apps/docs/src/stories/Steps.stories.ts",
5229
5995
  storyTitle: "Components/Navigation & Disclosure/Steps",
5230
5996
  manifestFile: "docs/ai/COMPONENTS/steps.yaml",
@@ -5241,13 +6007,13 @@ var treeui_catalog_default = {
5241
6007
  },
5242
6008
  {
5243
6009
  name: "items",
5244
- type: "TreeStepItem[]",
6010
+ type: "TStepItem[]",
5245
6011
  default: "[]",
5246
6012
  note: "Array of `{ label, value, description?, meta?, status?, disabled? }`."
5247
6013
  },
5248
6014
  {
5249
6015
  name: "size",
5250
- type: "TreeSize",
6016
+ type: "TSize",
5251
6017
  default: "md",
5252
6018
  values: [
5253
6019
  "sm",
@@ -5257,7 +6023,7 @@ var treeui_catalog_default = {
5257
6023
  },
5258
6024
  {
5259
6025
  name: "orientation",
5260
- type: "TreeStepOrientation",
6026
+ type: "TStepOrientation",
5261
6027
  default: "horizontal",
5262
6028
  values: [
5263
6029
  "horizontal",
@@ -5320,16 +6086,13 @@ var treeui_catalog_default = {
5320
6086
  },
5321
6087
  {
5322
6088
  name: "TSwitch",
5323
- legacyAlias: "TreeSwitch",
5324
- aliases: [
5325
- "TreeSwitch"
5326
- ],
6089
+ aliases: [],
5327
6090
  package: "@treeui/vue",
5328
6091
  kind: "primitive",
5329
6092
  category: "Data Entry",
5330
6093
  status: "available",
5331
6094
  purpose: "On/off toggle; semantic alternative to checkbox for settings. Supports v-model via modelValue.",
5332
- sourceFile: "packages/vue/src/components/TreeSwitch.vue",
6095
+ sourceFile: "packages/vue/src/components/TSwitch.vue",
5333
6096
  storyFile: "apps/docs/src/stories/Switch.stories.ts",
5334
6097
  storyTitle: "Components/Data Entry/Switch",
5335
6098
  manifestFile: "docs/ai/COMPONENTS/switch.yaml",
@@ -5341,7 +6104,7 @@ var treeui_catalog_default = {
5341
6104
  },
5342
6105
  {
5343
6106
  name: "size",
5344
- type: "TreeSize",
6107
+ type: "TSize",
5345
6108
  default: "md",
5346
6109
  values: [
5347
6110
  "sm",
@@ -5412,21 +6175,18 @@ var treeui_catalog_default = {
5412
6175
  },
5413
6176
  {
5414
6177
  name: "TTable",
5415
- legacyAlias: "TreeTable",
5416
- aliases: [
5417
- "TreeTable"
5418
- ],
6178
+ aliases: [],
5419
6179
  package: "@treeui/vue",
5420
6180
  category: "Data Display",
5421
6181
  description: "Sortable, accessible data table with column definitions and row data.",
5422
- sourceFile: "packages/vue/src/components/TreeTable.vue",
6182
+ sourceFile: "packages/vue/src/components/TTable.vue",
5423
6183
  storyFile: "apps/docs/src/stories/Table.stories.ts",
5424
6184
  storyTitle: "Components/Data Display/Table",
5425
6185
  manifestFile: "docs/ai/COMPONENTS/table.yaml",
5426
6186
  props: [
5427
6187
  {
5428
6188
  name: "columns",
5429
- type: "TreeTableColumn[]",
6189
+ type: "TTableColumn[]",
5430
6190
  required: true,
5431
6191
  description: "Array of column definitions with key, label, sortable, align, and width."
5432
6192
  },
@@ -5438,7 +6198,7 @@ var treeui_catalog_default = {
5438
6198
  },
5439
6199
  {
5440
6200
  name: "size",
5441
- type: "TreeSize",
6201
+ type: "TSize",
5442
6202
  default: "md",
5443
6203
  values: [
5444
6204
  "sm",
@@ -5448,7 +6208,7 @@ var treeui_catalog_default = {
5448
6208
  },
5449
6209
  {
5450
6210
  name: "sortBy",
5451
- type: "TreeTableSortState",
6211
+ type: "TTableSortState",
5452
6212
  required: false,
5453
6213
  description: "Controlled sort state. When provided, overrides internal sort tracking."
5454
6214
  }
@@ -5457,7 +6217,7 @@ var treeui_catalog_default = {
5457
6217
  {
5458
6218
  name: "sort",
5459
6219
  description: "Emitted when a sortable column header is clicked.",
5460
- payload: "TreeTableSortState"
6220
+ payload: "TTableSortState"
5461
6221
  }
5462
6222
  ],
5463
6223
  slots: [
@@ -5516,16 +6276,13 @@ var treeui_catalog_default = {
5516
6276
  },
5517
6277
  {
5518
6278
  name: "TTabs",
5519
- legacyAlias: "TreeTabs",
5520
- aliases: [
5521
- "TreeTabs"
5522
- ],
6279
+ aliases: [],
5523
6280
  package: "@treeui/vue",
5524
6281
  kind: "navigation",
5525
6282
  category: "Navigation",
5526
6283
  status: "available",
5527
6284
  purpose: "Tabbed panel navigation with full keyboard support and automatic/manual activation modes.",
5528
- sourceFile: "packages/vue/src/components/TreeTabs.vue",
6285
+ sourceFile: "packages/vue/src/components/TTabs.vue",
5529
6286
  storyFile: "apps/docs/src/stories/Tabs.stories.ts",
5530
6287
  storyTitle: "Components/Navigation/Tabs",
5531
6288
  manifestFile: "docs/ai/COMPONENTS/tabs.yaml",
@@ -5544,7 +6301,7 @@ var treeui_catalog_default = {
5544
6301
  },
5545
6302
  {
5546
6303
  name: "size",
5547
- type: "TreeSize",
6304
+ type: "TSize",
5548
6305
  default: "md",
5549
6306
  values: [
5550
6307
  "sm",
@@ -5625,21 +6382,18 @@ var treeui_catalog_default = {
5625
6382
  },
5626
6383
  {
5627
6384
  name: "TTag",
5628
- legacyAlias: "TreeTag",
5629
- aliases: [
5630
- "TreeTag"
5631
- ],
6385
+ aliases: [],
5632
6386
  package: "@treeui/vue",
5633
6387
  category: "Data Display",
5634
6388
  description: "Removable label/chip for filters and selections.",
5635
- sourceFile: "packages/vue/src/components/TreeTag.vue",
6389
+ sourceFile: "packages/vue/src/components/TTag.vue",
5636
6390
  storyFile: "apps/docs/src/stories/Tag.stories.ts",
5637
6391
  storyTitle: "Components/Data Display/Tag",
5638
6392
  manifestFile: "docs/ai/COMPONENTS/tag.yaml",
5639
6393
  props: [
5640
6394
  {
5641
6395
  name: "variant",
5642
- type: "TreeTagVariant",
6396
+ type: "TTagVariant",
5643
6397
  default: "soft",
5644
6398
  values: [
5645
6399
  "solid",
@@ -5649,7 +6403,7 @@ var treeui_catalog_default = {
5649
6403
  },
5650
6404
  {
5651
6405
  name: "size",
5652
- type: "TreeSize",
6406
+ type: "TSize",
5653
6407
  default: "md",
5654
6408
  values: [
5655
6409
  "sm",
@@ -5708,16 +6462,13 @@ var treeui_catalog_default = {
5708
6462
  },
5709
6463
  {
5710
6464
  name: "TTextarea",
5711
- legacyAlias: "TreeTextarea",
5712
- aliases: [
5713
- "TreeTextarea"
5714
- ],
6465
+ aliases: [],
5715
6466
  package: "@treeui/vue",
5716
6467
  kind: "primitive",
5717
6468
  category: "Data Entry",
5718
6469
  status: "available",
5719
6470
  purpose: "Multi-line text field with size, loading, invalid states, and auto-grow option.",
5720
- sourceFile: "packages/vue/src/components/TreeTextarea.vue",
6471
+ sourceFile: "packages/vue/src/components/TTextarea.vue",
5721
6472
  storyFile: "apps/docs/src/stories/Textarea.stories.ts",
5722
6473
  storyTitle: "Components/Data Entry/Textarea",
5723
6474
  manifestFile: "docs/ai/COMPONENTS/textarea.yaml",
@@ -5729,7 +6480,7 @@ var treeui_catalog_default = {
5729
6480
  },
5730
6481
  {
5731
6482
  name: "size",
5732
- type: "TreeSize",
6483
+ type: "TSize",
5733
6484
  default: "md",
5734
6485
  values: [
5735
6486
  "sm",
@@ -5814,28 +6565,25 @@ var treeui_catalog_default = {
5814
6565
  },
5815
6566
  {
5816
6567
  name: "TTimeline",
5817
- legacyAlias: "TreeTimeline",
5818
- aliases: [
5819
- "TreeTimeline"
5820
- ],
6568
+ aliases: [],
5821
6569
  package: "@treeui/vue",
5822
6570
  kind: "data_display",
5823
6571
  status: "available",
5824
6572
  purpose: "Vertical timeline for activity history, audits, release events, and chronological product updates.",
5825
- sourceFile: "packages/vue/src/components/TreeTimeline.vue",
6573
+ sourceFile: "packages/vue/src/components/TTimeline.vue",
5826
6574
  storyFile: "apps/docs/src/stories/Timeline.stories.ts",
5827
6575
  storyTitle: "Release queued for review",
5828
6576
  manifestFile: "docs/ai/COMPONENTS/timeline.yaml",
5829
6577
  props: [
5830
6578
  {
5831
6579
  name: "items",
5832
- type: "TreeTimelineItem[]",
6580
+ type: "TTimelineItem[]",
5833
6581
  default: "[]",
5834
6582
  note: "Array of { id?: string | number; title: string; description?: string; meta?: string; timestamp?: string; datetime?: string; tone?: 'neutral' | 'brand' | 'success' | 'warning' | 'danger' }"
5835
6583
  },
5836
6584
  {
5837
6585
  name: "size",
5838
- type: "TreeSize",
6586
+ type: "TSize",
5839
6587
  default: "md",
5840
6588
  values: [
5841
6589
  "sm",
@@ -5877,15 +6625,12 @@ var treeui_catalog_default = {
5877
6625
  },
5878
6626
  {
5879
6627
  name: "TToast",
5880
- legacyAlias: "TreeToast",
5881
- aliases: [
5882
- "TreeToast"
5883
- ],
6628
+ aliases: [],
5884
6629
  package: "@treeui/vue",
5885
6630
  kind: "feedback",
5886
6631
  status: "available",
5887
6632
  purpose: "Ephemeral notification stack driven by a composable. Renders toast items inside a positioned container with auto-dismiss and manual close.",
5888
- sourceFile: "packages/vue/src/components/TreeToast.vue",
6633
+ sourceFile: "packages/vue/src/components/TToast.vue",
5889
6634
  manifestFile: "docs/ai/COMPONENTS/toast.yaml",
5890
6635
  props: [],
5891
6636
  events: [
@@ -5943,16 +6688,13 @@ var treeui_catalog_default = {
5943
6688
  },
5944
6689
  {
5945
6690
  name: "TToggleGroup",
5946
- legacyAlias: "TreeToggleGroup",
5947
- aliases: [
5948
- "TreeToggleGroup"
5949
- ],
6691
+ aliases: [],
5950
6692
  package: "@treeui/vue",
5951
6693
  kind: "selection",
5952
6694
  category: "Data Entry",
5953
6695
  status: "available",
5954
6696
  purpose: "Segmented button group for single or multiple visible choices.",
5955
- sourceFile: "packages/vue/src/components/TreeToggleGroup.vue",
6697
+ sourceFile: "packages/vue/src/components/TToggleGroup.vue",
5956
6698
  storyFile: "apps/docs/src/stories/ToggleGroup.stories.ts",
5957
6699
  storyTitle: "Components/Data Entry/ToggleGroup",
5958
6700
  manifestFile: "docs/ai/COMPONENTS/toggle-group.yaml",
@@ -5964,13 +6706,13 @@ var treeui_catalog_default = {
5964
6706
  },
5965
6707
  {
5966
6708
  name: "options",
5967
- type: "TreeToggleGroupOption[]",
6709
+ type: "TToggleGroupOption[]",
5968
6710
  default: "[]",
5969
6711
  note: "Array of `{ label, value, disabled? }`."
5970
6712
  },
5971
6713
  {
5972
6714
  name: "selectionMode",
5973
- type: "TreeToggleGroupSelectionMode",
6715
+ type: "TToggleGroupSelectionMode",
5974
6716
  default: "single",
5975
6717
  values: [
5976
6718
  "single",
@@ -5979,7 +6721,7 @@ var treeui_catalog_default = {
5979
6721
  },
5980
6722
  {
5981
6723
  name: "size",
5982
- type: "TreeSize",
6724
+ type: "TSize",
5983
6725
  default: "md",
5984
6726
  values: [
5985
6727
  "sm",
@@ -5989,7 +6731,7 @@ var treeui_catalog_default = {
5989
6731
  },
5990
6732
  {
5991
6733
  name: "variant",
5992
- type: "TreeToggleGroupVariant",
6734
+ type: "TToggleGroupVariant",
5993
6735
  default: "outline",
5994
6736
  values: [
5995
6737
  "outline",
@@ -6063,16 +6805,13 @@ var treeui_catalog_default = {
6063
6805
  },
6064
6806
  {
6065
6807
  name: "TTooltip",
6066
- legacyAlias: "TreeTooltip",
6067
- aliases: [
6068
- "TreeTooltip"
6069
- ],
6808
+ aliases: [],
6070
6809
  package: "@treeui/vue",
6071
6810
  kind: "overlay",
6072
6811
  category: "Overlay",
6073
6812
  status: "available",
6074
6813
  purpose: "Small contextual overlay shown on hover or focus.",
6075
- sourceFile: "packages/vue/src/components/TreeTooltip.vue",
6814
+ sourceFile: "packages/vue/src/components/TTooltip.vue",
6076
6815
  storyFile: "apps/docs/src/stories/Tooltip.stories.ts",
6077
6816
  storyTitle: "Components/Overlay/Tooltip",
6078
6817
  manifestFile: "docs/ai/COMPONENTS/tooltip.yaml",
@@ -6099,7 +6838,7 @@ var treeui_catalog_default = {
6099
6838
  },
6100
6839
  {
6101
6840
  name: "side",
6102
- type: "TreeTooltipSide",
6841
+ type: "TTooltipSide",
6103
6842
  default: "top",
6104
6843
  values: [
6105
6844
  "top",
@@ -6178,18 +6917,15 @@ var treeui_catalog_default = {
6178
6917
  },
6179
6918
  {
6180
6919
  name: "TTreeView",
6181
- legacyAlias: "TreeTreeView",
6182
- aliases: [
6183
- "TreeTreeView"
6184
- ],
6920
+ aliases: [],
6185
6921
  package: "@treeui/vue",
6186
6922
  kind: "selection",
6187
6923
  category: "Navigation & Disclosure",
6188
6924
  status: "available",
6189
6925
  purpose: "Hierarchical tree view with expansion, keyboard navigation, and single or multiple selection.",
6190
- sourceFile: "packages/vue/src/components/TreeTreeView.vue",
6926
+ sourceFile: "packages/vue/src/components/TTreeView.vue",
6191
6927
  storyFile: "apps/docs/src/stories/TreeView.stories.ts",
6192
- storyTitle: "Components/Navigation & Disclosure/TreeView",
6928
+ storyTitle: "Components/Navigation & Disclosure/TView",
6193
6929
  manifestFile: "docs/ai/COMPONENTS/tree-view.yaml",
6194
6930
  props: [
6195
6931
  {
@@ -6204,13 +6940,13 @@ var treeui_catalog_default = {
6204
6940
  },
6205
6941
  {
6206
6942
  name: "nodes",
6207
- type: "TreeTreeViewNode[]",
6943
+ type: "TTreeViewNode[]",
6208
6944
  default: "[]",
6209
6945
  note: "Array of `{ id, label, description?, meta?, disabled?, children? }`."
6210
6946
  },
6211
6947
  {
6212
6948
  name: "selectionMode",
6213
- type: "TreeTreeViewSelectionMode",
6949
+ type: "TTreeViewSelectionMode",
6214
6950
  default: "single",
6215
6951
  values: [
6216
6952
  "single",
@@ -6748,7 +7484,7 @@ var createTreeuiMcpServer = () => {
6748
7484
  inputSchema: {
6749
7485
  type: "object",
6750
7486
  properties: {
6751
- name: { type: "string", description: "Component name or alias, such as TSelect or TreeSelect." }
7487
+ name: { type: "string", description: "Component name or alias, such as TSelect or TSelect." }
6752
7488
  },
6753
7489
  required: ["name"]
6754
7490
  }