@treeui/vue 0.19.1 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/components/TAppShell.cjs.map +1 -1
  2. package/dist/components/TAppShell.js.map +1 -1
  3. package/dist/components/TAppShell.vue.d.ts +5 -1
  4. package/dist/components/TAppShell.vue.d.ts.map +1 -1
  5. package/dist/components/TAppShell.vue_vue_type_script_setup_true_lang.cjs +1 -1
  6. package/dist/components/TAppShell.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  7. package/dist/components/TAppShell.vue_vue_type_script_setup_true_lang.js +51 -44
  8. package/dist/components/TAppShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/components/TBrandLockup.cjs +2 -0
  10. package/dist/components/TBrandLockup.cjs.map +1 -0
  11. package/dist/components/TBrandLockup.js +7 -0
  12. package/dist/components/TBrandLockup.js.map +1 -0
  13. package/dist/components/TBrandLockup.vue.d.ts +43 -0
  14. package/dist/components/TBrandLockup.vue.d.ts.map +1 -0
  15. package/dist/components/TBrandLockup.vue_vue_type_script_setup_true_lang.cjs +2 -0
  16. package/dist/components/TBrandLockup.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  17. package/dist/components/TBrandLockup.vue_vue_type_script_setup_true_lang.js +54 -0
  18. package/dist/components/TBrandLockup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  19. package/dist/components/TButton.cjs.map +1 -1
  20. package/dist/components/TButton.js.map +1 -1
  21. package/dist/components/TButton.vue.d.ts.map +1 -1
  22. package/dist/components/TButton.vue_vue_type_script_setup_true_lang.cjs +1 -1
  23. package/dist/components/TButton.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  24. package/dist/components/TButton.vue_vue_type_script_setup_true_lang.js +36 -32
  25. package/dist/components/TButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/components/TCard.cjs.map +1 -1
  27. package/dist/components/TCard.js.map +1 -1
  28. package/dist/components/TCard.vue.d.ts +8 -0
  29. package/dist/components/TCard.vue.d.ts.map +1 -1
  30. package/dist/components/TCard.vue_vue_type_script_setup_true_lang.cjs +1 -1
  31. package/dist/components/TCard.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  32. package/dist/components/TCard.vue_vue_type_script_setup_true_lang.js +7 -2
  33. package/dist/components/TCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  34. package/dist/components/TCheckbox.vue.d.ts +1 -1
  35. package/dist/components/TCheckbox.vue.d.ts.map +1 -1
  36. package/dist/components/TCodeBlock.cjs +2 -0
  37. package/dist/components/TCodeBlock.cjs.map +1 -0
  38. package/dist/components/TCodeBlock.js +7 -0
  39. package/dist/components/TCodeBlock.js.map +1 -0
  40. package/dist/components/TCodeBlock.vue.d.ts +47 -0
  41. package/dist/components/TCodeBlock.vue.d.ts.map +1 -0
  42. package/dist/components/TCodeBlock.vue_vue_type_script_setup_true_lang.cjs +2 -0
  43. package/dist/components/TCodeBlock.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  44. package/dist/components/TCodeBlock.vue_vue_type_script_setup_true_lang.js +53 -0
  45. package/dist/components/TCodeBlock.vue_vue_type_script_setup_true_lang.js.map +1 -0
  46. package/dist/components/TCombobox.vue.d.ts +2 -2
  47. package/dist/components/TCombobox.vue.d.ts.map +1 -1
  48. package/dist/components/TConfirmDialog.vue.d.ts +2 -2
  49. package/dist/components/TDatePicker.vue.d.ts +2 -2
  50. package/dist/components/TDatePicker.vue.d.ts.map +1 -1
  51. package/dist/components/TDateTimePicker.vue.d.ts +4 -4
  52. package/dist/components/TDateTimePicker.vue.d.ts.map +1 -1
  53. package/dist/components/TFileUpload.vue.d.ts +1 -1
  54. package/dist/components/TFileUpload.vue.d.ts.map +1 -1
  55. package/dist/components/TGrid.vue.d.ts +1 -1
  56. package/dist/components/TGrid.vue.d.ts.map +1 -1
  57. package/dist/components/TInput.vue.d.ts +1 -1
  58. package/dist/components/TInput.vue.d.ts.map +1 -1
  59. package/dist/components/TLanguageSelect.vue.d.ts +2 -2
  60. package/dist/components/TLanguageSelect.vue.d.ts.map +1 -1
  61. package/dist/components/TLanguageSelect.vue_vue_type_script_setup_true_lang.cjs +1 -1
  62. package/dist/components/TLanguageSelect.vue_vue_type_script_setup_true_lang.js +15 -15
  63. package/dist/components/TLink.cjs.map +1 -1
  64. package/dist/components/TLink.js.map +1 -1
  65. package/dist/components/TLink.vue.d.ts +8 -0
  66. package/dist/components/TLink.vue.d.ts.map +1 -1
  67. package/dist/components/TLink.vue_vue_type_script_setup_true_lang.cjs +1 -1
  68. package/dist/components/TLink.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  69. package/dist/components/TLink.vue_vue_type_script_setup_true_lang.js +5 -1
  70. package/dist/components/TLink.vue_vue_type_script_setup_true_lang.js.map +1 -1
  71. package/dist/components/TLinkTile.cjs +2 -0
  72. package/dist/components/TLinkTile.cjs.map +1 -0
  73. package/dist/components/TLinkTile.js +7 -0
  74. package/dist/components/TLinkTile.js.map +1 -0
  75. package/dist/components/TLinkTile.vue.d.ts +41 -0
  76. package/dist/components/TLinkTile.vue.d.ts.map +1 -0
  77. package/dist/components/TLinkTile.vue_vue_type_script_setup_true_lang.cjs +2 -0
  78. package/dist/components/TLinkTile.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  79. package/dist/components/TLinkTile.vue_vue_type_script_setup_true_lang.js +62 -0
  80. package/dist/components/TLinkTile.vue_vue_type_script_setup_true_lang.js.map +1 -0
  81. package/dist/components/TMultiSelect.vue.d.ts +2 -2
  82. package/dist/components/TMultiSelect.vue.d.ts.map +1 -1
  83. package/dist/components/TNavMenu.vue.d.ts +1 -1
  84. package/dist/components/TNavMenu.vue.d.ts.map +1 -1
  85. package/dist/components/TNumberInput.vue.d.ts +1 -1
  86. package/dist/components/TNumberInput.vue.d.ts.map +1 -1
  87. package/dist/components/TPage.vue.d.ts +1 -1
  88. package/dist/components/TPage.vue.d.ts.map +1 -1
  89. package/dist/components/TPageHeader.vue.d.ts +1 -1
  90. package/dist/components/TPageHeader.vue.d.ts.map +1 -1
  91. package/dist/components/TPopover.cjs.map +1 -1
  92. package/dist/components/TPopover.js.map +1 -1
  93. package/dist/components/TPopover.vue.d.ts +4 -1
  94. package/dist/components/TPopover.vue.d.ts.map +1 -1
  95. package/dist/components/TPopover.vue_vue_type_script_setup_true_lang.cjs +1 -1
  96. package/dist/components/TPopover.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  97. package/dist/components/TPopover.vue_vue_type_script_setup_true_lang.js +3 -1
  98. package/dist/components/TPopover.vue_vue_type_script_setup_true_lang.js.map +1 -1
  99. package/dist/components/TRadioGroup.vue.d.ts +1 -1
  100. package/dist/components/TRadioGroup.vue.d.ts.map +1 -1
  101. package/dist/components/TSelect.vue.d.ts +2 -2
  102. package/dist/components/TSelect.vue.d.ts.map +1 -1
  103. package/dist/components/TSidebar.vue.d.ts +1 -1
  104. package/dist/components/TSidebar.vue.d.ts.map +1 -1
  105. package/dist/components/TSparkline.vue.d.ts +1 -1
  106. package/dist/components/TSparkline.vue.d.ts.map +1 -1
  107. package/dist/components/TSplit.vue.d.ts +1 -1
  108. package/dist/components/TSplit.vue.d.ts.map +1 -1
  109. package/dist/components/TStack.cjs.map +1 -1
  110. package/dist/components/TStack.js.map +1 -1
  111. package/dist/components/TStack.vue.d.ts +11 -2
  112. package/dist/components/TStack.vue.d.ts.map +1 -1
  113. package/dist/components/TStack.vue_vue_type_script_setup_true_lang.cjs +1 -1
  114. package/dist/components/TStack.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  115. package/dist/components/TStack.vue_vue_type_script_setup_true_lang.js +3 -1
  116. package/dist/components/TStack.vue_vue_type_script_setup_true_lang.js.map +1 -1
  117. package/dist/components/TSteps.vue.d.ts +1 -1
  118. package/dist/components/TSteps.vue.d.ts.map +1 -1
  119. package/dist/components/TTable.cjs.map +1 -1
  120. package/dist/components/TTable.js.map +1 -1
  121. package/dist/components/TTable.vue.d.ts +16 -0
  122. package/dist/components/TTable.vue.d.ts.map +1 -1
  123. package/dist/components/TTable.vue_vue_type_script_setup_true_lang.cjs +1 -1
  124. package/dist/components/TTable.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  125. package/dist/components/TTable.vue_vue_type_script_setup_true_lang.js +29 -9
  126. package/dist/components/TTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  127. package/dist/components/TText.cjs.map +1 -1
  128. package/dist/components/TText.js.map +1 -1
  129. package/dist/components/TText.vue.d.ts +9 -0
  130. package/dist/components/TText.vue.d.ts.map +1 -1
  131. package/dist/components/TText.vue_vue_type_script_setup_true_lang.cjs +1 -1
  132. package/dist/components/TText.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  133. package/dist/components/TText.vue_vue_type_script_setup_true_lang.js +2 -0
  134. package/dist/components/TText.vue_vue_type_script_setup_true_lang.js.map +1 -1
  135. package/dist/components/TTextarea.vue.d.ts +1 -1
  136. package/dist/components/TTextarea.vue.d.ts.map +1 -1
  137. package/dist/components/index.d.ts +8 -4
  138. package/dist/components/index.d.ts.map +1 -1
  139. package/dist/components/index.js +74 -71
  140. package/dist/index.cjs +1 -1
  141. package/dist/index.js +84 -81
  142. package/dist/plugin.cjs +1 -1
  143. package/dist/plugin.cjs.map +1 -1
  144. package/dist/plugin.d.ts.map +1 -1
  145. package/dist/plugin.js +148 -142
  146. package/dist/plugin.js.map +1 -1
  147. package/dist/style.css +1 -1
  148. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"TNumberInput.vue.d.ts","sourceRoot":"","sources":["../../src/components/TNumberInput.vue"],"names":[],"mappings":"AAiRA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAMhD,KAAK,WAAW,GAAG;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;;;;;;gBATa,MAAM,GAAG,IAAI;cAKf,OAAO;UADX,KAAK;UADL,MAAM;aAGH,OAAO;iBACH,MAAM;SANd,MAAM;SACN,MAAM;cAMD,OAAO;;AA0TtB,wBAQG"}
1
+ {"version":3,"file":"TNumberInput.vue.d.ts","sourceRoot":"","sources":["../../src/components/TNumberInput.vue"],"names":[],"mappings":"AAiRA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAMhD,KAAK,WAAW,GAAG;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;;;;;;gBATa,MAAM,GAAG,IAAI;cAKf,OAAO;UADX,KAAK;UADL,MAAM;iBAIC,MAAM;aADV,OAAO;SALX,MAAM;SACN,MAAM;cAMD,OAAO;;AA0TtB,wBAQG"}
@@ -21,8 +21,8 @@ declare function __VLS_template(): {
21
21
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
22
22
  declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
23
23
  width: TContainerSize;
24
- gap: TPageGap;
25
24
  as: string;
25
+ gap: TPageGap;
26
26
  padded: boolean;
27
27
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
28
28
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
@@ -1 +1 @@
1
- {"version":3,"file":"TPage.vue.d.ts","sourceRoot":"","sources":["../../src/components/TPage.vue"],"names":[],"mappings":"AAsEA,OAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMnE,QAAA,MAAM,aAAa,6BAA8B,CAAC;AAElD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,KAAK,WAAW,GAAG;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,wDAAwD;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB,CAAC;AAsCJ,iBAAS,cAAc;WAmDT,OAAO,IAA6B;;yBAVpB,GAAG;;;;EAehC;AAcD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;WAlHT,cAAc;SAIhB,QAAQ;QANT,MAAM;YAIF,OAAO;6EAuHlB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"TPage.vue.d.ts","sourceRoot":"","sources":["../../src/components/TPage.vue"],"names":[],"mappings":"AAsEA,OAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMnE,QAAA,MAAM,aAAa,6BAA8B,CAAC;AAElD,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,KAAK,WAAW,GAAG;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,wDAAwD;IACxD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB,CAAC;AAsCJ,iBAAS,cAAc;WAmDT,OAAO,IAA6B;;yBAVpB,GAAG;;;;EAehC;AAcD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;WAlHT,cAAc;QAFjB,MAAM;SAML,QAAQ;YAFL,OAAO;6EAuHlB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -27,8 +27,8 @@ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
27
27
  declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
28
28
  title: string;
29
29
  as: string;
30
- level: 1 | 2 | 3 | 4 | 5 | 6;
31
30
  subtitle: string;
31
+ level: 1 | 2 | 3 | 4 | 5 | 6;
32
32
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
33
33
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
34
34
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"TPageHeader.vue.d.ts","sourceRoot":"","sources":["../../src/components/TPageHeader.vue"],"names":[],"mappings":"AA6GA,KAAK,WAAW,GAAG;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAyCJ,iBAAS,cAAc;WAoFT,OAAO,IAA6B;;qBAjHnC,MAAM,OAAO;gBAClB,MAAM,OAAO;mBACV,MAAM,OAAO;kBACd,MAAM,OAAO;kBACb,MAAM,OAAO;;qBAJV,MAAM,OAAO;gBAClB,MAAM,OAAO;mBACV,MAAM,OAAO;kBACd,MAAM,OAAO;kBACb,MAAM,OAAO;;;;EAkHxB;AAeD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;WAvJT,MAAM;QAIT,MAAM;WADH,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;cAFlB,MAAM;6EA6JnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"TPageHeader.vue.d.ts","sourceRoot":"","sources":["../../src/components/TPageHeader.vue"],"names":[],"mappings":"AA6GA,KAAK,WAAW,GAAG;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAyCJ,iBAAS,cAAc;WAoFT,OAAO,IAA6B;;qBAjHnC,MAAM,OAAO;gBAClB,MAAM,OAAO;mBACV,MAAM,OAAO;kBACd,MAAM,OAAO;kBACb,MAAM,OAAO;;qBAJV,MAAM,OAAO;gBAClB,MAAM,OAAO;mBACV,MAAM,OAAO;kBACd,MAAM,OAAO;kBACb,MAAM,OAAO;;;;EAkHxB;AAeD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;WAvJT,MAAM;QAIT,MAAM;cAHA,MAAM;WAET,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;6EA2J/B,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TPopover.cjs","names":[],"sources":["../../src/components/TPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { createId, focusFirst, isEscapeKey } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n side?: TTooltipSide;\n align?: 'start' | 'center' | 'end';\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n side: 'bottom',\n align: 'center',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean; contentId: string }): unknown;\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('t-popover');\nconst rootRef = ref<HTMLElement | null>(null);\n// Bound to the anchor wrapper, not the fallback button: the fallback does not\n// render when a consumer supplies a `trigger` slot, so a ref on it would be\n// null exactly when focus restoration matters most. focusFirst() resolves the\n// real trigger either way. Mirrors TDropdown's trigger-wrapper ref.\nconst triggerRef = ref<HTMLElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 't-popover',\n {\n 'is-open': isOpen.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst contentClasses = computed(() => [\n 't-popover__content',\n `t-popover__content--${props.side}`,\n `t-popover__content--align-${props.align}`,\n]);\n\nconst openPopover = () => {\n if (props.disabled) return;\n setValue(true);\n nextTick(() => {\n if (contentRef.value) {\n if (!focusFirst(contentRef.value)) {\n contentRef.value.focus();\n }\n }\n });\n};\n\nconst closePopover = (restoreFocus = false) => {\n setValue(false);\n if (restoreFocus) {\n nextTick(() => {\n if (triggerRef.value) focusFirst(triggerRef.value);\n });\n }\n};\n\nconst togglePopover = () => {\n if (isOpen.value) {\n closePopover();\n } else {\n openPopover();\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closePopover();\n }\n};\n\nconst onContentKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closePopover(true);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closePopover();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n ref=\"triggerRef\"\n class=\"t-popover__anchor\"\n @click=\"togglePopover\"\n @keydown=\"onTriggerKeydown\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n :content-id=\"contentId\"\n >\n <button\n type=\"button\"\n class=\"t-popover__trigger\"\n :disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? contentId : undefined\"\n aria-haspopup=\"dialog\"\n v-bind=\"triggerAttrs\"\n />\n </slot>\n </div>\n <transition name=\"t-popover-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n ref=\"contentRef\"\n role=\"dialog\"\n :class=\"contentClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n tabindex=\"-1\"\n @keydown=\"onContentKeydown\"\n >\n <slot />\n </div>\n </transition>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TPopover.cjs","names":[],"sources":["../../src/components/TPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { createId, focusFirst, isEscapeKey } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TSize, TTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n side?: TTooltipSide;\n align?: 'start' | 'center' | 'end';\n /** Panel density. Scales the content padding by the shared size tokens. */\n size?: TSize;\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n side: 'bottom',\n align: 'center',\n size: 'md',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean; contentId: string }): unknown;\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('t-popover');\nconst rootRef = ref<HTMLElement | null>(null);\n// Bound to the anchor wrapper, not the fallback button: the fallback does not\n// render when a consumer supplies a `trigger` slot, so a ref on it would be\n// null exactly when focus restoration matters most. focusFirst() resolves the\n// real trigger either way. Mirrors TDropdown's trigger-wrapper ref.\nconst triggerRef = ref<HTMLElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 't-popover',\n {\n 'is-open': isOpen.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst contentClasses = computed(() => [\n 't-popover__content',\n `t-popover__content--${props.side}`,\n `t-popover__content--align-${props.align}`,\n `t-popover__content--${props.size}`,\n]);\n\nconst openPopover = () => {\n if (props.disabled) return;\n setValue(true);\n nextTick(() => {\n if (contentRef.value) {\n if (!focusFirst(contentRef.value)) {\n contentRef.value.focus();\n }\n }\n });\n};\n\nconst closePopover = (restoreFocus = false) => {\n setValue(false);\n if (restoreFocus) {\n nextTick(() => {\n if (triggerRef.value) focusFirst(triggerRef.value);\n });\n }\n};\n\nconst togglePopover = () => {\n if (isOpen.value) {\n closePopover();\n } else {\n openPopover();\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closePopover();\n }\n};\n\nconst onContentKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closePopover(true);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closePopover();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n ref=\"triggerRef\"\n class=\"t-popover__anchor\"\n @click=\"togglePopover\"\n @keydown=\"onTriggerKeydown\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n :content-id=\"contentId\"\n >\n <button\n type=\"button\"\n class=\"t-popover__trigger\"\n :disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? contentId : undefined\"\n aria-haspopup=\"dialog\"\n v-bind=\"triggerAttrs\"\n />\n </slot>\n </div>\n <transition name=\"t-popover-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n ref=\"contentRef\"\n role=\"dialog\"\n :class=\"contentClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n tabindex=\"-1\"\n @keydown=\"onContentKeydown\"\n >\n <slot />\n </div>\n </transition>\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"TPopover.js","names":[],"sources":["../../src/components/TPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { createId, focusFirst, isEscapeKey } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n side?: TTooltipSide;\n align?: 'start' | 'center' | 'end';\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n side: 'bottom',\n align: 'center',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean; contentId: string }): unknown;\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('t-popover');\nconst rootRef = ref<HTMLElement | null>(null);\n// Bound to the anchor wrapper, not the fallback button: the fallback does not\n// render when a consumer supplies a `trigger` slot, so a ref on it would be\n// null exactly when focus restoration matters most. focusFirst() resolves the\n// real trigger either way. Mirrors TDropdown's trigger-wrapper ref.\nconst triggerRef = ref<HTMLElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 't-popover',\n {\n 'is-open': isOpen.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst contentClasses = computed(() => [\n 't-popover__content',\n `t-popover__content--${props.side}`,\n `t-popover__content--align-${props.align}`,\n]);\n\nconst openPopover = () => {\n if (props.disabled) return;\n setValue(true);\n nextTick(() => {\n if (contentRef.value) {\n if (!focusFirst(contentRef.value)) {\n contentRef.value.focus();\n }\n }\n });\n};\n\nconst closePopover = (restoreFocus = false) => {\n setValue(false);\n if (restoreFocus) {\n nextTick(() => {\n if (triggerRef.value) focusFirst(triggerRef.value);\n });\n }\n};\n\nconst togglePopover = () => {\n if (isOpen.value) {\n closePopover();\n } else {\n openPopover();\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closePopover();\n }\n};\n\nconst onContentKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closePopover(true);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closePopover();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n ref=\"triggerRef\"\n class=\"t-popover__anchor\"\n @click=\"togglePopover\"\n @keydown=\"onTriggerKeydown\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n :content-id=\"contentId\"\n >\n <button\n type=\"button\"\n class=\"t-popover__trigger\"\n :disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? contentId : undefined\"\n aria-haspopup=\"dialog\"\n v-bind=\"triggerAttrs\"\n />\n </slot>\n </div>\n <transition name=\"t-popover-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n ref=\"contentRef\"\n role=\"dialog\"\n :class=\"contentClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n tabindex=\"-1\"\n @keydown=\"onContentKeydown\"\n >\n <slot />\n </div>\n </transition>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TPopover.js","names":[],"sources":["../../src/components/TPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { createId, focusFirst, isEscapeKey } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TSize, TTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n side?: TTooltipSide;\n align?: 'start' | 'center' | 'end';\n /** Panel density. Scales the content padding by the shared size tokens. */\n size?: TSize;\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n side: 'bottom',\n align: 'center',\n size: 'md',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean; contentId: string }): unknown;\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('t-popover');\nconst rootRef = ref<HTMLElement | null>(null);\n// Bound to the anchor wrapper, not the fallback button: the fallback does not\n// render when a consumer supplies a `trigger` slot, so a ref on it would be\n// null exactly when focus restoration matters most. focusFirst() resolves the\n// real trigger either way. Mirrors TDropdown's trigger-wrapper ref.\nconst triggerRef = ref<HTMLElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 't-popover',\n {\n 'is-open': isOpen.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst contentClasses = computed(() => [\n 't-popover__content',\n `t-popover__content--${props.side}`,\n `t-popover__content--align-${props.align}`,\n `t-popover__content--${props.size}`,\n]);\n\nconst openPopover = () => {\n if (props.disabled) return;\n setValue(true);\n nextTick(() => {\n if (contentRef.value) {\n if (!focusFirst(contentRef.value)) {\n contentRef.value.focus();\n }\n }\n });\n};\n\nconst closePopover = (restoreFocus = false) => {\n setValue(false);\n if (restoreFocus) {\n nextTick(() => {\n if (triggerRef.value) focusFirst(triggerRef.value);\n });\n }\n};\n\nconst togglePopover = () => {\n if (isOpen.value) {\n closePopover();\n } else {\n openPopover();\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closePopover();\n }\n};\n\nconst onContentKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closePopover(true);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closePopover();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n ref=\"triggerRef\"\n class=\"t-popover__anchor\"\n @click=\"togglePopover\"\n @keydown=\"onTriggerKeydown\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n :content-id=\"contentId\"\n >\n <button\n type=\"button\"\n class=\"t-popover__trigger\"\n :disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? contentId : undefined\"\n aria-haspopup=\"dialog\"\n v-bind=\"triggerAttrs\"\n />\n </slot>\n </div>\n <transition name=\"t-popover-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n ref=\"contentRef\"\n role=\"dialog\"\n :class=\"contentClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n tabindex=\"-1\"\n @keydown=\"onContentKeydown\"\n >\n <slot />\n </div>\n </transition>\n </div>\n</template>\n"],"mappings":""}
@@ -1,10 +1,12 @@
1
- import { TTooltipSide } from '../types/contracts';
1
+ import { TSize, TTooltipSide } from '../types/contracts';
2
2
  type __VLS_Props = {
3
3
  open?: boolean;
4
4
  defaultOpen?: boolean;
5
5
  disabled?: boolean;
6
6
  side?: TTooltipSide;
7
7
  align?: 'start' | 'center' | 'end';
8
+ /** Panel density. Scales the content padding by the shared size tokens. */
9
+ size?: TSize;
8
10
  id?: string;
9
11
  };
10
12
  declare function __VLS_template(): {
@@ -38,6 +40,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
38
40
  "onOpen-change"?: ((value: boolean) => any) | undefined;
39
41
  }>, {
40
42
  disabled: boolean;
43
+ size: TSize;
41
44
  id: string;
42
45
  align: "start" | "center" | "end";
43
46
  open: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"TPopover.vue.d.ts","sourceRoot":"","sources":["../../src/components/TPopover.vue"],"names":[],"mappings":"AAoMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,KAAK,WAAW,GAAG;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AA4IJ,iBAAS,cAAc;WA0ET,OAAO,IAA6B;;uBAlMjC;YAAE,MAAM,EAAE,OAAO,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO;mBACpD,OAAO;;uBADH;YAAE,MAAM,EAAE,OAAO,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO;mBACpD,OAAO;;;;;;;;EAsMnB;AAsBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;cAtPN,OAAO;QAGb,MAAM;WADH,OAAO,GAAG,QAAQ,GAAG,KAAK;UAJ3B,OAAO;iBACA,OAAO;UAEd,YAAY;;;;;OA8PrB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"TPopover.vue.d.ts","sourceRoot":"","sources":["../../src/components/TPopover.vue"],"names":[],"mappings":"AAwMA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAM9D,KAAK,WAAW,GAAG;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AA+IJ,iBAAS,cAAc;WA0ET,OAAO,IAA6B;;uBApMjC;YAAE,MAAM,EAAE,OAAO,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO;mBACpD,OAAO;;uBADH;YAAE,MAAM,EAAE,OAAO,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO;mBACpD,OAAO;;;;;;;;EAwMnB;AAsBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;cA3PN,OAAO;UAIX,KAAK;QACP,MAAM;WAHH,OAAO,GAAG,QAAQ,GAAG,KAAK;UAJ3B,OAAO;iBACA,OAAO;UAEd,YAAY;;;;;OAmQrB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,2 +1,2 @@
1
- const e=require("../composables/useControllableOpen.cjs");let t=require("vue"),n=require("@treeui/utils");var r=[`data-state`],i=[`disabled`,`aria-expanded`,`aria-controls`],a=[`id`,`data-state`],o=(0,t.defineComponent)({inheritAttrs:!1,__name:`TPopover`,props:{open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},side:{default:`bottom`},align:{default:`center`},id:{default:void 0}},emits:[`update:open`,`open-change`],setup(o,{emit:s}){let c=o,l=s,u=(0,t.useAttrs)(),d=c.id??(0,n.createId)(`t-popover`),f=(0,t.ref)(null),p=(0,t.ref)(null),m=(0,t.ref)(null),h=(0,t.computed)(()=>{let{class:e,style:t,...n}=u;return n}),{value:g,setValue:_}=e.useControllableOpen((0,t.toRef)(c,`open`),c.defaultOpen,e=>{l(`update:open`,e),l(`open-change`,e)}),v=(0,t.computed)(()=>[`t-popover`,{"is-open":g.value,"is-disabled":c.disabled},u.class]),y=(0,t.computed)(()=>u.style),b=(0,t.computed)(()=>[`t-popover__content`,`t-popover__content--${c.side}`,`t-popover__content--align-${c.align}`]),x=()=>{c.disabled||(_(!0),(0,t.nextTick)(()=>{m.value&&((0,n.focusFirst)(m.value)||m.value.focus())}))},S=(e=!1)=>{_(!1),e&&(0,t.nextTick)(()=>{p.value&&(0,n.focusFirst)(p.value)})},C=()=>{g.value?S():x()},w=e=>{c.disabled||(0,n.isEscapeKey)(e)&&g.value&&(e.preventDefault(),S())},T=e=>{(0,n.isEscapeKey)(e)&&(e.preventDefault(),S(!0))},E=e=>{if(!g.value)return;let t=e.target;t instanceof Node&&(f.value?.contains(t)||S())};return(0,t.watch)(g,e=>{e?document.addEventListener(`pointerdown`,E):document.removeEventListener(`pointerdown`,E)}),(0,t.onBeforeUnmount)(()=>{document.removeEventListener(`pointerdown`,E)}),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`rootRef`,ref:f,class:(0,t.normalizeClass)(v.value),style:(0,t.normalizeStyle)(y.value),"data-state":(0,t.unref)(g)?`open`:`closed`},[(0,t.createElementVNode)(`div`,{ref_key:`triggerRef`,ref:p,class:`t-popover__anchor`,onClick:C,onKeydown:w},[(0,t.renderSlot)(e.$slots,`trigger`,{isOpen:(0,t.unref)(g),contentId:(0,t.unref)(d)},()=>[(0,t.createElementVNode)(`button`,(0,t.mergeProps)({type:`button`,class:`t-popover__trigger`,disabled:o.disabled,"aria-expanded":(0,t.unref)(g),"aria-controls":(0,t.unref)(g)?(0,t.unref)(d):void 0,"aria-haspopup":`dialog`},h.value),null,16,i)])],544),(0,t.createVNode)(t.Transition,{name:`t-popover-fade`},{default:(0,t.withCtx)(()=>[(0,t.unref)(g)&&!o.disabled?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,id:(0,t.unref)(d),ref_key:`contentRef`,ref:m,role:`dialog`,class:(0,t.normalizeClass)(b.value),"data-state":(0,t.unref)(g)?`open`:`closed`,tabindex:`-1`,onKeydown:T},[(0,t.renderSlot)(e.$slots,`default`)],42,a)):(0,t.createCommentVNode)(``,!0)]),_:3})],14,r))}});exports.default=o;
1
+ const e=require("../composables/useControllableOpen.cjs");let t=require("vue"),n=require("@treeui/utils");var r=[`data-state`],i=[`disabled`,`aria-expanded`,`aria-controls`],a=[`id`,`data-state`],o=(0,t.defineComponent)({inheritAttrs:!1,__name:`TPopover`,props:{open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},side:{default:`bottom`},align:{default:`center`},size:{default:`md`},id:{default:void 0}},emits:[`update:open`,`open-change`],setup(o,{emit:s}){let c=o,l=s,u=(0,t.useAttrs)(),d=c.id??(0,n.createId)(`t-popover`),f=(0,t.ref)(null),p=(0,t.ref)(null),m=(0,t.ref)(null),h=(0,t.computed)(()=>{let{class:e,style:t,...n}=u;return n}),{value:g,setValue:_}=e.useControllableOpen((0,t.toRef)(c,`open`),c.defaultOpen,e=>{l(`update:open`,e),l(`open-change`,e)}),v=(0,t.computed)(()=>[`t-popover`,{"is-open":g.value,"is-disabled":c.disabled},u.class]),y=(0,t.computed)(()=>u.style),b=(0,t.computed)(()=>[`t-popover__content`,`t-popover__content--${c.side}`,`t-popover__content--align-${c.align}`,`t-popover__content--${c.size}`]),x=()=>{c.disabled||(_(!0),(0,t.nextTick)(()=>{m.value&&((0,n.focusFirst)(m.value)||m.value.focus())}))},S=(e=!1)=>{_(!1),e&&(0,t.nextTick)(()=>{p.value&&(0,n.focusFirst)(p.value)})},C=()=>{g.value?S():x()},w=e=>{c.disabled||(0,n.isEscapeKey)(e)&&g.value&&(e.preventDefault(),S())},T=e=>{(0,n.isEscapeKey)(e)&&(e.preventDefault(),S(!0))},E=e=>{if(!g.value)return;let t=e.target;t instanceof Node&&(f.value?.contains(t)||S())};return(0,t.watch)(g,e=>{e?document.addEventListener(`pointerdown`,E):document.removeEventListener(`pointerdown`,E)}),(0,t.onBeforeUnmount)(()=>{document.removeEventListener(`pointerdown`,E)}),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`rootRef`,ref:f,class:(0,t.normalizeClass)(v.value),style:(0,t.normalizeStyle)(y.value),"data-state":(0,t.unref)(g)?`open`:`closed`},[(0,t.createElementVNode)(`div`,{ref_key:`triggerRef`,ref:p,class:`t-popover__anchor`,onClick:C,onKeydown:w},[(0,t.renderSlot)(e.$slots,`trigger`,{isOpen:(0,t.unref)(g),contentId:(0,t.unref)(d)},()=>[(0,t.createElementVNode)(`button`,(0,t.mergeProps)({type:`button`,class:`t-popover__trigger`,disabled:o.disabled,"aria-expanded":(0,t.unref)(g),"aria-controls":(0,t.unref)(g)?(0,t.unref)(d):void 0,"aria-haspopup":`dialog`},h.value),null,16,i)])],544),(0,t.createVNode)(t.Transition,{name:`t-popover-fade`},{default:(0,t.withCtx)(()=>[(0,t.unref)(g)&&!o.disabled?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,id:(0,t.unref)(d),ref_key:`contentRef`,ref:m,role:`dialog`,class:(0,t.normalizeClass)(b.value),"data-state":(0,t.unref)(g)?`open`:`closed`,tabindex:`-1`,onKeydown:T},[(0,t.renderSlot)(e.$slots,`default`)],42,a)):(0,t.createCommentVNode)(``,!0)]),_:3})],14,r))}});exports.default=o;
2
2
  //# sourceMappingURL=TPopover.vue_vue_type_script_setup_true_lang.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TPopover.vue_vue_type_script_setup_true_lang.cjs","names":[],"sources":["../../src/components/TPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { createId, focusFirst, isEscapeKey } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n side?: TTooltipSide;\n align?: 'start' | 'center' | 'end';\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n side: 'bottom',\n align: 'center',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean; contentId: string }): unknown;\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('t-popover');\nconst rootRef = ref<HTMLElement | null>(null);\n// Bound to the anchor wrapper, not the fallback button: the fallback does not\n// render when a consumer supplies a `trigger` slot, so a ref on it would be\n// null exactly when focus restoration matters most. focusFirst() resolves the\n// real trigger either way. Mirrors TDropdown's trigger-wrapper ref.\nconst triggerRef = ref<HTMLElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 't-popover',\n {\n 'is-open': isOpen.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst contentClasses = computed(() => [\n 't-popover__content',\n `t-popover__content--${props.side}`,\n `t-popover__content--align-${props.align}`,\n]);\n\nconst openPopover = () => {\n if (props.disabled) return;\n setValue(true);\n nextTick(() => {\n if (contentRef.value) {\n if (!focusFirst(contentRef.value)) {\n contentRef.value.focus();\n }\n }\n });\n};\n\nconst closePopover = (restoreFocus = false) => {\n setValue(false);\n if (restoreFocus) {\n nextTick(() => {\n if (triggerRef.value) focusFirst(triggerRef.value);\n });\n }\n};\n\nconst togglePopover = () => {\n if (isOpen.value) {\n closePopover();\n } else {\n openPopover();\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closePopover();\n }\n};\n\nconst onContentKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closePopover(true);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closePopover();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n ref=\"triggerRef\"\n class=\"t-popover__anchor\"\n @click=\"togglePopover\"\n @keydown=\"onTriggerKeydown\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n :content-id=\"contentId\"\n >\n <button\n type=\"button\"\n class=\"t-popover__trigger\"\n :disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? contentId : undefined\"\n aria-haspopup=\"dialog\"\n v-bind=\"triggerAttrs\"\n />\n </slot>\n </div>\n <transition name=\"t-popover-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n ref=\"contentRef\"\n role=\"dialog\"\n :class=\"contentClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n tabindex=\"-1\"\n @keydown=\"onContentKeydown\"\n >\n <slot />\n </div>\n </transition>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"TPopover.vue_vue_type_script_setup_true_lang.cjs","names":[],"sources":["../../src/components/TPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { createId, focusFirst, isEscapeKey } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TSize, TTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n side?: TTooltipSide;\n align?: 'start' | 'center' | 'end';\n /** Panel density. Scales the content padding by the shared size tokens. */\n size?: TSize;\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n side: 'bottom',\n align: 'center',\n size: 'md',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean; contentId: string }): unknown;\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('t-popover');\nconst rootRef = ref<HTMLElement | null>(null);\n// Bound to the anchor wrapper, not the fallback button: the fallback does not\n// render when a consumer supplies a `trigger` slot, so a ref on it would be\n// null exactly when focus restoration matters most. focusFirst() resolves the\n// real trigger either way. Mirrors TDropdown's trigger-wrapper ref.\nconst triggerRef = ref<HTMLElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 't-popover',\n {\n 'is-open': isOpen.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst contentClasses = computed(() => [\n 't-popover__content',\n `t-popover__content--${props.side}`,\n `t-popover__content--align-${props.align}`,\n `t-popover__content--${props.size}`,\n]);\n\nconst openPopover = () => {\n if (props.disabled) return;\n setValue(true);\n nextTick(() => {\n if (contentRef.value) {\n if (!focusFirst(contentRef.value)) {\n contentRef.value.focus();\n }\n }\n });\n};\n\nconst closePopover = (restoreFocus = false) => {\n setValue(false);\n if (restoreFocus) {\n nextTick(() => {\n if (triggerRef.value) focusFirst(triggerRef.value);\n });\n }\n};\n\nconst togglePopover = () => {\n if (isOpen.value) {\n closePopover();\n } else {\n openPopover();\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closePopover();\n }\n};\n\nconst onContentKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closePopover(true);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closePopover();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n ref=\"triggerRef\"\n class=\"t-popover__anchor\"\n @click=\"togglePopover\"\n @keydown=\"onTriggerKeydown\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n :content-id=\"contentId\"\n >\n <button\n type=\"button\"\n class=\"t-popover__trigger\"\n :disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? contentId : undefined\"\n aria-haspopup=\"dialog\"\n v-bind=\"triggerAttrs\"\n />\n </slot>\n </div>\n <transition name=\"t-popover-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n ref=\"contentRef\"\n role=\"dialog\"\n :class=\"contentClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n tabindex=\"-1\"\n @keydown=\"onContentKeydown\"\n >\n <slot />\n </div>\n </transition>\n </div>\n</template>\n"],"mappings":"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"}
@@ -24,6 +24,7 @@ var w = ["data-state"], T = [
24
24
  },
25
25
  side: { default: "bottom" },
26
26
  align: { default: "center" },
27
+ size: { default: "md" },
27
28
  id: { default: void 0 }
28
29
  },
29
30
  emits: ["update:open", "open-change"],
@@ -43,7 +44,8 @@ var w = ["data-state"], T = [
43
44
  ]), z = n(() => A.style), B = n(() => [
44
45
  "t-popover__content",
45
46
  `t-popover__content--${O.side}`,
46
- `t-popover__content--align-${O.align}`
47
+ `t-popover__content--align-${O.align}`,
48
+ `t-popover__content--${O.size}`
47
49
  ]), V = () => {
48
50
  O.disabled || (L(!0), l(() => {
49
51
  P.value && (S(P.value) || P.value.focus());
@@ -1 +1 @@
1
- {"version":3,"file":"TPopover.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/TPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { createId, focusFirst, isEscapeKey } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n side?: TTooltipSide;\n align?: 'start' | 'center' | 'end';\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n side: 'bottom',\n align: 'center',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean; contentId: string }): unknown;\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('t-popover');\nconst rootRef = ref<HTMLElement | null>(null);\n// Bound to the anchor wrapper, not the fallback button: the fallback does not\n// render when a consumer supplies a `trigger` slot, so a ref on it would be\n// null exactly when focus restoration matters most. focusFirst() resolves the\n// real trigger either way. Mirrors TDropdown's trigger-wrapper ref.\nconst triggerRef = ref<HTMLElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 't-popover',\n {\n 'is-open': isOpen.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst contentClasses = computed(() => [\n 't-popover__content',\n `t-popover__content--${props.side}`,\n `t-popover__content--align-${props.align}`,\n]);\n\nconst openPopover = () => {\n if (props.disabled) return;\n setValue(true);\n nextTick(() => {\n if (contentRef.value) {\n if (!focusFirst(contentRef.value)) {\n contentRef.value.focus();\n }\n }\n });\n};\n\nconst closePopover = (restoreFocus = false) => {\n setValue(false);\n if (restoreFocus) {\n nextTick(() => {\n if (triggerRef.value) focusFirst(triggerRef.value);\n });\n }\n};\n\nconst togglePopover = () => {\n if (isOpen.value) {\n closePopover();\n } else {\n openPopover();\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closePopover();\n }\n};\n\nconst onContentKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closePopover(true);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closePopover();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n ref=\"triggerRef\"\n class=\"t-popover__anchor\"\n @click=\"togglePopover\"\n @keydown=\"onTriggerKeydown\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n :content-id=\"contentId\"\n >\n <button\n type=\"button\"\n class=\"t-popover__trigger\"\n :disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? contentId : undefined\"\n aria-haspopup=\"dialog\"\n v-bind=\"triggerAttrs\"\n />\n </slot>\n </div>\n <transition name=\"t-popover-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n ref=\"contentRef\"\n role=\"dialog\"\n :class=\"contentClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n tabindex=\"-1\"\n @keydown=\"onContentKeydown\"\n >\n <slot />\n </div>\n </transition>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"TPopover.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/TPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, toRef, useAttrs, watch } from 'vue';\nimport { createId, focusFirst, isEscapeKey } from '@treeui/utils';\nimport { useControllableOpen } from '../composables/useControllableOpen';\nimport type { TSize, TTooltipSide } from '../types/contracts';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n side?: TTooltipSide;\n align?: 'start' | 'center' | 'end';\n /** Panel density. Scales the content padding by the shared size tokens. */\n size?: TSize;\n id?: string;\n }>(),\n {\n open: undefined,\n defaultOpen: false,\n disabled: false,\n side: 'bottom',\n align: 'center',\n size: 'md',\n id: undefined,\n },\n);\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n 'open-change': [value: boolean];\n}>();\n\ndefineSlots<{\n trigger(props: { isOpen: boolean; contentId: string }): unknown;\n default(): unknown;\n}>();\n\nconst attrs = useAttrs();\nconst contentId = props.id ?? createId('t-popover');\nconst rootRef = ref<HTMLElement | null>(null);\n// Bound to the anchor wrapper, not the fallback button: the fallback does not\n// render when a consumer supplies a `trigger` slot, so a ref on it would be\n// null exactly when focus restoration matters most. focusFirst() resolves the\n// real trigger either way. Mirrors TDropdown's trigger-wrapper ref.\nconst triggerRef = ref<HTMLElement | null>(null);\nconst contentRef = ref<HTMLElement | null>(null);\n\nconst triggerAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n\nconst { value: isOpen, setValue } = useControllableOpen(\n toRef(props, 'open'),\n props.defaultOpen,\n (value) => {\n emit('update:open', value);\n emit('open-change', value);\n },\n);\n\nconst rootClasses = computed(() => [\n 't-popover',\n {\n 'is-open': isOpen.value,\n 'is-disabled': props.disabled,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => attrs.style);\n\nconst contentClasses = computed(() => [\n 't-popover__content',\n `t-popover__content--${props.side}`,\n `t-popover__content--align-${props.align}`,\n `t-popover__content--${props.size}`,\n]);\n\nconst openPopover = () => {\n if (props.disabled) return;\n setValue(true);\n nextTick(() => {\n if (contentRef.value) {\n if (!focusFirst(contentRef.value)) {\n contentRef.value.focus();\n }\n }\n });\n};\n\nconst closePopover = (restoreFocus = false) => {\n setValue(false);\n if (restoreFocus) {\n nextTick(() => {\n if (triggerRef.value) focusFirst(triggerRef.value);\n });\n }\n};\n\nconst togglePopover = () => {\n if (isOpen.value) {\n closePopover();\n } else {\n openPopover();\n }\n};\n\nconst onTriggerKeydown = (event: KeyboardEvent) => {\n if (props.disabled) return;\n\n if (isEscapeKey(event) && isOpen.value) {\n event.preventDefault();\n closePopover();\n }\n};\n\nconst onContentKeydown = (event: KeyboardEvent) => {\n if (isEscapeKey(event)) {\n event.preventDefault();\n closePopover(true);\n }\n};\n\nconst onDocumentPointerDown = (event: PointerEvent) => {\n if (!isOpen.value) return;\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (rootRef.value?.contains(target)) return;\n closePopover();\n};\n\nwatch(isOpen, (value) => {\n if (value) {\n document.addEventListener('pointerdown', onDocumentPointerDown);\n } else {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n }\n});\n\nonBeforeUnmount(() => {\n document.removeEventListener('pointerdown', onDocumentPointerDown);\n});\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n >\n <div\n ref=\"triggerRef\"\n class=\"t-popover__anchor\"\n @click=\"togglePopover\"\n @keydown=\"onTriggerKeydown\"\n >\n <slot\n name=\"trigger\"\n :is-open=\"isOpen\"\n :content-id=\"contentId\"\n >\n <button\n type=\"button\"\n class=\"t-popover__trigger\"\n :disabled=\"disabled\"\n :aria-expanded=\"isOpen\"\n :aria-controls=\"isOpen ? contentId : undefined\"\n aria-haspopup=\"dialog\"\n v-bind=\"triggerAttrs\"\n />\n </slot>\n </div>\n <transition name=\"t-popover-fade\">\n <div\n v-if=\"isOpen && !disabled\"\n :id=\"contentId\"\n ref=\"contentRef\"\n role=\"dialog\"\n :class=\"contentClasses\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n tabindex=\"-1\"\n @keydown=\"onContentKeydown\"\n >\n <slot />\n </div>\n </transition>\n </div>\n</template>\n"],"mappings":"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"}
@@ -23,8 +23,8 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
23
23
  modelValue: string;
24
24
  disabled: boolean;
25
25
  size: TSize;
26
- invalid: boolean;
27
26
  name: string;
27
+ invalid: boolean;
28
28
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
29
29
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
30
30
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"TRadioGroup.vue.d.ts","sourceRoot":"","sources":["../../src/components/TRadioGroup.vue"],"names":[],"mappings":"AAoEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAMhD,KAAK,WAAW,GAAG;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,CAAC;AAmDJ,iBAAS,cAAc;WA0BT,OAAO,IAA6B;;yBAVrB,GAAG;;;;EAe/B;AAaD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;gBArGJ,MAAM;cAER,OAAO;UAEX,KAAK;aADF,OAAO;UAFV,MAAM;6EA4Gf,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"TRadioGroup.vue.d.ts","sourceRoot":"","sources":["../../src/components/TRadioGroup.vue"],"names":[],"mappings":"AAoEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAMhD,KAAK,WAAW,GAAG;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,CAAC;AAmDJ,iBAAS,cAAc;WA0BT,OAAO,IAA6B;;yBAVrB,GAAG;;;;EAe/B;AAaD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;gBArGJ,MAAM;cAER,OAAO;UAEX,KAAK;UAHL,MAAM;aAEH,OAAO;6EA0GnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -43,12 +43,12 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
43
43
  disabled: boolean;
44
44
  size: TSize;
45
45
  width: TFieldWidth;
46
+ placeholder: string;
46
47
  loading: boolean;
48
+ open: boolean;
47
49
  invalid: boolean;
48
50
  options: TSelectOption[];
49
- open: boolean;
50
51
  defaultOpen: boolean;
51
- placeholder: string;
52
52
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
53
53
  rootRef: HTMLDivElement;
54
54
  triggerRef: HTMLButtonElement;
@@ -1 +1 @@
1
- {"version":3,"file":"TSelect.vue.d.ts","sourceRoot":"","sources":["../../src/components/TSelect.vue"],"names":[],"mappings":"AA0XA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAO7D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,KAAK,WAAW,GAAG;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,kDAAkD;IAClD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAsQJ,iBAAS,cAAc;WAoJT,OAAO,IAA6B;;wBAbtB,GAAG;;;;;;;;EAkB9B;AA2BD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;gBAtcJ,MAAM,GAAG,MAAM;cAOjB,OAAO;UAHX,KAAK;WAEJ,WAAW;aAET,OAAO;aACP,OAAO;aARP,aAAa,EAAE;UAClB,OAAO;iBACA,OAAO;iBAOP,MAAM;;;;;OAqctB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"TSelect.vue.d.ts","sourceRoot":"","sources":["../../src/components/TSelect.vue"],"names":[],"mappings":"AA0XA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAO7D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,KAAK,WAAW,GAAG;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,kDAAkD;IAClD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAsQJ,iBAAS,cAAc;WAoJT,OAAO,IAA6B;;wBAbtB,GAAG;;;;;;;;EAkB9B;AA2BD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;gBAtcJ,MAAM,GAAG,MAAM;cAOjB,OAAO;UAHX,KAAK;WAEJ,WAAW;iBAIL,MAAM;aAFV,OAAO;UANV,OAAO;aAOJ,OAAO;aARP,aAAa,EAAE;iBAEX,OAAO;;;;;OA4cvB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -59,10 +59,10 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
59
59
  size: TSize;
60
60
  width: string;
61
61
  as: string;
62
+ collapsed: boolean;
62
63
  side: TSidebarSide;
63
64
  sticky: boolean;
64
65
  bordered: boolean;
65
- collapsed: boolean;
66
66
  defaultCollapsed: boolean;
67
67
  collapsedWidth: string;
68
68
  collapseLabel: string;
@@ -1 +1 @@
1
- {"version":3,"file":"TSidebar.vue.d.ts","sourceRoot":"","sources":["../../src/components/TSidebar.vue"],"names":[],"mappings":"AAqLA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAOhD,QAAA,MAAM,iBAAiB,4BAA6B,CAAC;AAErD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAK9D,KAAK,WAAW,GAAG;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA4GJ,iBAAS,cAAc;WAkFT,OAAO,IAA6B;;iBApKvC,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;kBACzC,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;iBAC3C,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;iBAC1C,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;;iBAH1C,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;kBACzC,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;iBAC3C,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;iBAC1C,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;;;;EAsKpD;AAiBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;iBA9NH,OAAO;UACd,KAAK;WAIJ,MAAM;QART,MAAM;UAKJ,YAAY;YACV,OAAO;cACL,OAAO;eANN,OAAO;sBACA,OAAO;oBAOT,MAAM;mBACP,MAAM;iBACR,MAAM;6EA8NtB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"TSidebar.vue.d.ts","sourceRoot":"","sources":["../../src/components/TSidebar.vue"],"names":[],"mappings":"AAqLA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAOhD,QAAA,MAAM,iBAAiB,4BAA6B,CAAC;AAErD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAK9D,KAAK,WAAW,GAAG;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA4GJ,iBAAS,cAAc;WAkFT,OAAO,IAA6B;;iBApKvC,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;kBACzC,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;iBAC3C,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;iBAC1C,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;;iBAH1C,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;kBACzC,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;iBAC3C,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;iBAC1C,CAAC,KAAK,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO;;;;EAsKpD;AAiBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;iBA9NH,OAAO;UACd,KAAK;WAIJ,MAAM;QART,MAAM;eACC,OAAO;UAIZ,YAAY;YACV,OAAO;cACL,OAAO;sBALC,OAAO;oBAOT,MAAM;mBACP,MAAM;iBACR,MAAM;6EA8NtB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -28,8 +28,8 @@ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {
28
28
  data: number[];
29
29
  width: number;
30
30
  height: number;
31
- color: string;
32
31
  strokeWidth: number;
32
+ color: string;
33
33
  min: number;
34
34
  max: number;
35
35
  smooth: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"TSparkline.vue.d.ts","sourceRoot":"","sources":["../../src/components/TSparkline.vue"],"names":[],"mappings":"AAyJA,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9C,KAAK,WAAW,GAAG;IACf,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;;UAnBO,cAAc;UAFd,MAAM,EAAE;WAMP,MAAM;YAEL,MAAM;WAJP,MAAM;iBAQA,MAAM;SAEd,MAAM;SAEN,MAAM;YANH,OAAO;eAUJ,MAAM;mBAFF,OAAO;;AA8K3B,wBAQG"}
1
+ {"version":3,"file":"TSparkline.vue.d.ts","sourceRoot":"","sources":["../../src/components/TSparkline.vue"],"names":[],"mappings":"AAyJA,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9C,KAAK,WAAW,GAAG;IACf,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;;UAnBO,cAAc;UAFd,MAAM,EAAE;WAMP,MAAM;YAEL,MAAM;iBAID,MAAM;WARZ,MAAM;SAUR,MAAM;SAEN,MAAM;YANH,OAAO;eAUJ,MAAM;mBAFF,OAAO;;AA8K3B,wBAQG"}
@@ -21,8 +21,8 @@ declare function __VLS_template(): {
21
21
  };
22
22
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
23
23
  declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
24
- gap: string;
25
24
  as: string;
25
+ gap: string;
26
26
  align: string;
27
27
  side: "start" | "end";
28
28
  minWidth: string;
@@ -1 +1 @@
1
- {"version":3,"file":"TSplit.vue.d.ts","sourceRoot":"","sources":["../../src/components/TSplit.vue"],"names":[],"mappings":"AAgFA,KAAK,WAAW,GAAG;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA8CJ,iBAAS,cAAc;WA8CT,OAAO,IAA6B;;yBAXrB,GAAG;uBACL,GAAG;;;;EAe7B;AAYD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;SAvHX,MAAM;QADP,MAAM;WASH,MAAM;UAFP,OAAO,GAAG,KAAK;cAFX,MAAM;WAFT,MAAM;6EA4HhB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"TSplit.vue.d.ts","sourceRoot":"","sources":["../../src/components/TSplit.vue"],"names":[],"mappings":"AAgFA,KAAK,WAAW,GAAG;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA8CJ,iBAAS,cAAc;WA8CT,OAAO,IAA6B;;yBAXrB,GAAG;uBACL,GAAG;;;;EAe7B;AAYD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;QAxHZ,MAAM;SACL,MAAM;WAQJ,MAAM;UAFP,OAAO,GAAG,KAAK;cAFX,MAAM;WAFT,MAAM;6EA4HhB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TStack.cjs","names":[],"sources":["../../src/components/TStack.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStackDirections = ['vertical', 'horizontal'] as const;\n\nexport type TStackDirection = (typeof _treeStackDirections)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n direction?: TStackDirection;\n gap?: string;\n align?: string;\n justify?: string;\n wrap?: boolean;\n reverse?: boolean;\n /** Expand to fill available space along the parent's main axis. */\n grow?: boolean;\n }>(),\n {\n as: 'div',\n direction: 'vertical',\n gap: 'var(--tree-space-4)',\n align: 'stretch',\n justify: 'flex-start',\n wrap: false,\n reverse: false,\n grow: false,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 't-stack',\n `t-stack--${props.direction}`,\n {\n 'is-wrapping': props.wrap,\n 'is-reversed': props.reverse,\n 'is-grow': props.grow,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n alignItems: props.align,\n justifyContent: props.justify,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TStack.cjs","names":[],"sources":["../../src/components/TStack.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStackDirections = ['vertical', 'horizontal'] as const;\nconst _treeStackFills = ['viewport', 'parent'] as const;\n\nexport type TStackDirection = (typeof _treeStackDirections)[number];\nexport type TStackFill = (typeof _treeStackFills)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n direction?: TStackDirection;\n gap?: string;\n align?: string;\n justify?: string;\n wrap?: boolean;\n reverse?: boolean;\n /** Expand to fill available space along the parent's main axis. */\n grow?: boolean;\n /**\n * Give the stack a minimum block size so a centered child fills the screen\n * or its parent: `viewport` → `100dvh`, `parent` → `100%`. Compose with\n * `align`/`justify=\"center\"` for a centered loading or empty state.\n */\n fill?: TStackFill;\n }>(),\n {\n as: 'div',\n direction: 'vertical',\n gap: 'var(--tree-space-4)',\n align: 'stretch',\n justify: 'flex-start',\n wrap: false,\n reverse: false,\n grow: false,\n fill: undefined,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 't-stack',\n `t-stack--${props.direction}`,\n props.fill ? `t-stack--fill-${props.fill}` : null,\n {\n 'is-wrapping': props.wrap,\n 'is-reversed': props.reverse,\n 'is-grow': props.grow,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n alignItems: props.align,\n justifyContent: props.justify,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"TStack.js","names":[],"sources":["../../src/components/TStack.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStackDirections = ['vertical', 'horizontal'] as const;\n\nexport type TStackDirection = (typeof _treeStackDirections)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n direction?: TStackDirection;\n gap?: string;\n align?: string;\n justify?: string;\n wrap?: boolean;\n reverse?: boolean;\n /** Expand to fill available space along the parent's main axis. */\n grow?: boolean;\n }>(),\n {\n as: 'div',\n direction: 'vertical',\n gap: 'var(--tree-space-4)',\n align: 'stretch',\n justify: 'flex-start',\n wrap: false,\n reverse: false,\n grow: false,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 't-stack',\n `t-stack--${props.direction}`,\n {\n 'is-wrapping': props.wrap,\n 'is-reversed': props.reverse,\n 'is-grow': props.grow,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n alignItems: props.align,\n justifyContent: props.justify,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TStack.js","names":[],"sources":["../../src/components/TStack.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStackDirections = ['vertical', 'horizontal'] as const;\nconst _treeStackFills = ['viewport', 'parent'] as const;\n\nexport type TStackDirection = (typeof _treeStackDirections)[number];\nexport type TStackFill = (typeof _treeStackFills)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n direction?: TStackDirection;\n gap?: string;\n align?: string;\n justify?: string;\n wrap?: boolean;\n reverse?: boolean;\n /** Expand to fill available space along the parent's main axis. */\n grow?: boolean;\n /**\n * Give the stack a minimum block size so a centered child fills the screen\n * or its parent: `viewport` → `100dvh`, `parent` → `100%`. Compose with\n * `align`/`justify=\"center\"` for a centered loading or empty state.\n */\n fill?: TStackFill;\n }>(),\n {\n as: 'div',\n direction: 'vertical',\n gap: 'var(--tree-space-4)',\n align: 'stretch',\n justify: 'flex-start',\n wrap: false,\n reverse: false,\n grow: false,\n fill: undefined,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 't-stack',\n `t-stack--${props.direction}`,\n props.fill ? `t-stack--fill-${props.fill}` : null,\n {\n 'is-wrapping': props.wrap,\n 'is-reversed': props.reverse,\n 'is-grow': props.grow,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n alignItems: props.align,\n justifyContent: props.justify,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n"],"mappings":""}
@@ -1,5 +1,7 @@
1
1
  declare const _treeStackDirections: readonly ["vertical", "horizontal"];
2
+ declare const _treeStackFills: readonly ["viewport", "parent"];
2
3
  export type TStackDirection = (typeof _treeStackDirections)[number];
4
+ export type TStackFill = (typeof _treeStackFills)[number];
3
5
  type __VLS_Props = {
4
6
  as?: string;
5
7
  direction?: TStackDirection;
@@ -10,6 +12,12 @@ type __VLS_Props = {
10
12
  reverse?: boolean;
11
13
  /** Expand to fill available space along the parent's main axis. */
12
14
  grow?: boolean;
15
+ /**
16
+ * Give the stack a minimum block size so a centered child fills the screen
17
+ * or its parent: `viewport` → `100dvh`, `parent` → `100%`. Compose with
18
+ * `align`/`justify="center"` for a centered loading or empty state.
19
+ */
20
+ fill?: TStackFill;
13
21
  };
14
22
  declare function __VLS_template(): {
15
23
  attrs: Partial<{}>;
@@ -22,11 +30,12 @@ declare function __VLS_template(): {
22
30
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
23
31
  declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
24
32
  reverse: boolean;
25
- gap: string;
33
+ fill: TStackFill;
26
34
  as: string;
35
+ gap: string;
27
36
  align: string;
28
- justify: string;
29
37
  wrap: boolean;
38
+ justify: string;
30
39
  direction: TStackDirection;
31
40
  grow: boolean;
32
41
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
@@ -1 +1 @@
1
- {"version":3,"file":"TStack.vue.d.ts","sourceRoot":"","sources":["../../src/components/TStack.vue"],"names":[],"mappings":"AAiFA,QAAA,MAAM,oBAAoB,qCAAsC,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,KAAK,WAAW,GAAG;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAsDJ,iBAAS,cAAc;WAkCT,OAAO,IAA6B;;yBAVrB,GAAG;;;;EAe/B;AAYD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;aA7GP,OAAO;SAJX,MAAM;QAFP,MAAM;WAGH,MAAM;aACJ,MAAM;UACT,OAAO;eAJF,eAAe;UAOpB,OAAO;6EAkHhB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"TStack.vue.d.ts","sourceRoot":"","sources":["../../src/components/TStack.vue"],"names":[],"mappings":"AA2FA,QAAA,MAAM,oBAAoB,qCAAsC,CAAC;AACjE,QAAA,MAAM,eAAe,iCAAkC,CAAC;AAExD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,KAAK,WAAW,GAAG;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAyDJ,iBAAS,cAAc;WAkCT,OAAO,IAA6B;;yBAVrB,GAAG;;;;EAe/B;AAYD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;aAtHP,OAAO;UAQV,UAAU;QAdZ,MAAM;SAEL,MAAM;WACJ,MAAM;UAEP,OAAO;aADJ,MAAM;eAHJ,eAAe;UAOpB,OAAO;6EA2HhB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1,2 +1,2 @@
1
- let e=require("vue");var t=(0,e.defineComponent)({inheritAttrs:!1,__name:`TStack`,props:{as:{default:`div`},direction:{default:`vertical`},gap:{default:`var(--tree-space-4)`},align:{default:`stretch`},justify:{default:`flex-start`},wrap:{type:Boolean,default:!1},reverse:{type:Boolean,default:!1},grow:{type:Boolean,default:!1}},setup(t){let n=t,r=(0,e.useAttrs)(),i=(0,e.computed)(()=>[`t-stack`,`t-stack--${n.direction}`,{"is-wrapping":n.wrap,"is-reversed":n.reverse,"is-grow":n.grow},r.class]),a=(0,e.computed)(()=>[{gap:n.gap,alignItems:n.align,justifyContent:n.justify},r.style]),o=(0,e.computed)(()=>{let{class:e,style:t,...n}=r;return n});return(n,r)=>((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t.as),(0,e.mergeProps)(o.value,{class:i.value,style:a.value}),{default:(0,e.withCtx)(()=>[(0,e.renderSlot)(n.$slots,`default`)]),_:3},16,[`class`,`style`]))}});exports.default=t;
1
+ let e=require("vue");var t=(0,e.defineComponent)({inheritAttrs:!1,__name:`TStack`,props:{as:{default:`div`},direction:{default:`vertical`},gap:{default:`var(--tree-space-4)`},align:{default:`stretch`},justify:{default:`flex-start`},wrap:{type:Boolean,default:!1},reverse:{type:Boolean,default:!1},grow:{type:Boolean,default:!1},fill:{default:void 0}},setup(t){let n=t,r=(0,e.useAttrs)(),i=(0,e.computed)(()=>[`t-stack`,`t-stack--${n.direction}`,n.fill?`t-stack--fill-${n.fill}`:null,{"is-wrapping":n.wrap,"is-reversed":n.reverse,"is-grow":n.grow},r.class]),a=(0,e.computed)(()=>[{gap:n.gap,alignItems:n.align,justifyContent:n.justify},r.style]),o=(0,e.computed)(()=>{let{class:e,style:t,...n}=r;return n});return(n,r)=>((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t.as),(0,e.mergeProps)(o.value,{class:i.value,style:a.value}),{default:(0,e.withCtx)(()=>[(0,e.renderSlot)(n.$slots,`default`)]),_:3},16,[`class`,`style`]))}});exports.default=t;
2
2
  //# sourceMappingURL=TStack.vue_vue_type_script_setup_true_lang.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TStack.vue_vue_type_script_setup_true_lang.cjs","names":[],"sources":["../../src/components/TStack.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStackDirections = ['vertical', 'horizontal'] as const;\n\nexport type TStackDirection = (typeof _treeStackDirections)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n direction?: TStackDirection;\n gap?: string;\n align?: string;\n justify?: string;\n wrap?: boolean;\n reverse?: boolean;\n /** Expand to fill available space along the parent's main axis. */\n grow?: boolean;\n }>(),\n {\n as: 'div',\n direction: 'vertical',\n gap: 'var(--tree-space-4)',\n align: 'stretch',\n justify: 'flex-start',\n wrap: false,\n reverse: false,\n grow: false,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 't-stack',\n `t-stack--${props.direction}`,\n {\n 'is-wrapping': props.wrap,\n 'is-reversed': props.reverse,\n 'is-grow': props.grow,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n alignItems: props.align,\n justifyContent: props.justify,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n"],"mappings":"kVAWA,IAAM,EAAQ,EAwBR,GAAA,EAAA,EAAA,SAAA,CAAiB,EAEjB,GAAA,EAAA,EAAA,SAAA,KAA6B,CACjC,UACA,YAAY,EAAM,YAClB,CACE,cAAe,EAAM,KACrB,cAAe,EAAM,QACrB,UAAW,EAAM,IACnB,EACA,EAAM,KACR,CAAC,EAEK,GAAA,EAAA,EAAA,SAAA,KAA2B,CAC/B,CACE,IAAK,EAAM,IACX,WAAY,EAAM,MAClB,eAAgB,EAAM,OACxB,EACA,EAAM,KACR,CAAC,EAEK,GAAA,EAAA,EAAA,SAAA,KAA2B,CAC/B,GAAM,CAAE,MAAO,EAAQ,MAAO,EAAQ,GAAG,GAAS,EAClD,OAAO,CACT,CAAC,kFAKQ,EAAA,EAAE,GAAA,EAAA,EAAA,WAAA,CACC,EAKE,MALO,CAChB,MAAO,EAAA,MACP,MAAO,EAAA,mCAEA,EAAA,EAAA,EAAA,WAAA,CAAA,EAAA,OAAA,SAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"TStack.vue_vue_type_script_setup_true_lang.cjs","names":[],"sources":["../../src/components/TStack.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStackDirections = ['vertical', 'horizontal'] as const;\nconst _treeStackFills = ['viewport', 'parent'] as const;\n\nexport type TStackDirection = (typeof _treeStackDirections)[number];\nexport type TStackFill = (typeof _treeStackFills)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n direction?: TStackDirection;\n gap?: string;\n align?: string;\n justify?: string;\n wrap?: boolean;\n reverse?: boolean;\n /** Expand to fill available space along the parent's main axis. */\n grow?: boolean;\n /**\n * Give the stack a minimum block size so a centered child fills the screen\n * or its parent: `viewport` → `100dvh`, `parent` → `100%`. Compose with\n * `align`/`justify=\"center\"` for a centered loading or empty state.\n */\n fill?: TStackFill;\n }>(),\n {\n as: 'div',\n direction: 'vertical',\n gap: 'var(--tree-space-4)',\n align: 'stretch',\n justify: 'flex-start',\n wrap: false,\n reverse: false,\n grow: false,\n fill: undefined,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 't-stack',\n `t-stack--${props.direction}`,\n props.fill ? `t-stack--fill-${props.fill}` : null,\n {\n 'is-wrapping': props.wrap,\n 'is-reversed': props.reverse,\n 'is-grow': props.grow,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n alignItems: props.align,\n justifyContent: props.justify,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n"],"mappings":"wWAaA,IAAM,EAAQ,EA+BR,GAAA,EAAA,EAAA,SAAA,CAAiB,EAEjB,GAAA,EAAA,EAAA,SAAA,KAA6B,CACjC,UACA,YAAY,EAAM,YAClB,EAAM,KAAO,iBAAiB,EAAM,OAAS,KAC7C,CACE,cAAe,EAAM,KACrB,cAAe,EAAM,QACrB,UAAW,EAAM,IACnB,EACA,EAAM,KACR,CAAC,EAEK,GAAA,EAAA,EAAA,SAAA,KAA2B,CAC/B,CACE,IAAK,EAAM,IACX,WAAY,EAAM,MAClB,eAAgB,EAAM,OACxB,EACA,EAAM,KACR,CAAC,EAEK,GAAA,EAAA,EAAA,SAAA,KAA2B,CAC/B,GAAM,CAAE,MAAO,EAAQ,MAAO,EAAQ,GAAG,GAAS,EAClD,OAAO,CACT,CAAC,kFAKQ,EAAA,EAAE,GAAA,EAAA,EAAA,WAAA,CACC,EAKE,MALO,CAChB,MAAO,EAAA,MACP,MAAO,EAAA,mCAEA,EAAA,EAAA,EAAA,WAAA,CAAA,EAAA,OAAA,SAAA,CAAA,CAAA"}
@@ -20,12 +20,14 @@ var l = /*@__PURE__*/ n({
20
20
  grow: {
21
21
  type: Boolean,
22
22
  default: !1
23
- }
23
+ },
24
+ fill: { default: void 0 }
24
25
  },
25
26
  setup(n) {
26
27
  let l = n, u = s(), d = e(() => [
27
28
  "t-stack",
28
29
  `t-stack--${l.direction}`,
30
+ l.fill ? `t-stack--fill-${l.fill}` : null,
29
31
  {
30
32
  "is-wrapping": l.wrap,
31
33
  "is-reversed": l.reverse,
@@ -1 +1 @@
1
- {"version":3,"file":"TStack.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/TStack.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStackDirections = ['vertical', 'horizontal'] as const;\n\nexport type TStackDirection = (typeof _treeStackDirections)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n direction?: TStackDirection;\n gap?: string;\n align?: string;\n justify?: string;\n wrap?: boolean;\n reverse?: boolean;\n /** Expand to fill available space along the parent's main axis. */\n grow?: boolean;\n }>(),\n {\n as: 'div',\n direction: 'vertical',\n gap: 'var(--tree-space-4)',\n align: 'stretch',\n justify: 'flex-start',\n wrap: false,\n reverse: false,\n grow: false,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 't-stack',\n `t-stack--${props.direction}`,\n {\n 'is-wrapping': props.wrap,\n 'is-reversed': props.reverse,\n 'is-grow': props.grow,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n alignItems: props.align,\n justifyContent: props.justify,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAWA,IAAM,IAAQ,GAwBR,IAAQ,EAAS,GAEjB,IAAc,QAAe;GACjC;GACA,YAAY,EAAM;GAClB;IACE,eAAe,EAAM;IACrB,eAAe,EAAM;IACrB,WAAW,EAAM;GACnB;GACA,EAAM;EACR,CAAC,GAEK,IAAY,QAAe,CAC/B;GACE,KAAK,EAAM;GACX,YAAY,EAAM;GAClB,gBAAgB,EAAM;EACxB,GACA,EAAM,KACR,CAAC,GAEK,IAAY,QAAe;GAC/B,IAAM,EAAE,OAAO,GAAQ,OAAO,GAAQ,GAAG,MAAS;GAClD,OAAO;EACT,CAAC;yBAIC,EAOY,EANL,EAAA,EAAE,GADT,EAEU,EAKE,OALO;GAChB,OAAO,EAAA;GACP,OAAO,EAAA;;oBAEA,CAAR,EAAQ,EAAA,QAAA,SAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"TStack.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/TStack.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, useAttrs } from 'vue';\n\ndefineOptions({\n inheritAttrs: false,\n});\n\nconst _treeStackDirections = ['vertical', 'horizontal'] as const;\nconst _treeStackFills = ['viewport', 'parent'] as const;\n\nexport type TStackDirection = (typeof _treeStackDirections)[number];\nexport type TStackFill = (typeof _treeStackFills)[number];\n\nconst props = withDefaults(\n defineProps<{\n as?: string;\n direction?: TStackDirection;\n gap?: string;\n align?: string;\n justify?: string;\n wrap?: boolean;\n reverse?: boolean;\n /** Expand to fill available space along the parent's main axis. */\n grow?: boolean;\n /**\n * Give the stack a minimum block size so a centered child fills the screen\n * or its parent: `viewport` → `100dvh`, `parent` → `100%`. Compose with\n * `align`/`justify=\"center\"` for a centered loading or empty state.\n */\n fill?: TStackFill;\n }>(),\n {\n as: 'div',\n direction: 'vertical',\n gap: 'var(--tree-space-4)',\n align: 'stretch',\n justify: 'flex-start',\n wrap: false,\n reverse: false,\n grow: false,\n fill: undefined,\n },\n);\n\nconst attrs = useAttrs();\n\nconst rootClasses = computed(() => [\n 't-stack',\n `t-stack--${props.direction}`,\n props.fill ? `t-stack--fill-${props.fill}` : null,\n {\n 'is-wrapping': props.wrap,\n 'is-reversed': props.reverse,\n 'is-grow': props.grow,\n },\n attrs.class,\n]);\n\nconst rootStyle = computed(() => [\n {\n gap: props.gap,\n alignItems: props.align,\n justifyContent: props.justify,\n },\n attrs.style,\n]);\n\nconst rootAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <component\n :is=\"as\"\n v-bind=\"rootAttrs\"\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n >\n <slot />\n </component>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;EAaA,IAAM,IAAQ,GA+BR,IAAQ,EAAS,GAEjB,IAAc,QAAe;GACjC;GACA,YAAY,EAAM;GAClB,EAAM,OAAO,iBAAiB,EAAM,SAAS;GAC7C;IACE,eAAe,EAAM;IACrB,eAAe,EAAM;IACrB,WAAW,EAAM;GACnB;GACA,EAAM;EACR,CAAC,GAEK,IAAY,QAAe,CAC/B;GACE,KAAK,EAAM;GACX,YAAY,EAAM;GAClB,gBAAgB,EAAM;EACxB,GACA,EAAM,KACR,CAAC,GAEK,IAAY,QAAe;GAC/B,IAAM,EAAE,OAAO,GAAQ,OAAO,GAAQ,GAAG,MAAS;GAClD,OAAO;EACT,CAAC;yBAIC,EAOY,EANL,EAAA,EAAE,GADT,EAEU,EAKE,OALO;GAChB,OAAO,EAAA;GACP,OAAO,EAAA;;oBAEA,CAAR,EAAQ,EAAA,QAAA,SAAA,CAAA,CAAA"}
@@ -48,9 +48,9 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
48
48
  modelValue: string;
49
49
  defaultValue: string;
50
50
  size: TSize;
51
+ interactive: boolean;
51
52
  items: TStepItem[];
52
53
  orientation: TStepOrientation;
53
- interactive: boolean;
54
54
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
55
55
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
56
56
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"TSteps.vue.d.ts","sourceRoot":"","sources":["../../src/components/TSteps.vue"],"names":[],"mappings":"AAiMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAMhD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,iBAAiB,uDAAwD,CAAC;AAChF,QAAA,MAAM,qBAAqB,qCAAsC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAItE,KAAK,WAAW,GAAG;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAwGJ,iBAAS,cAAc;WA0FT,OAAO,IAA6B;;eA/KzC,CAAC,KAAK,EAAE;YACb,IAAI,EAAE,SAAS,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,WAAW,CAAC;YACpB,OAAO,EAAE,OAAO,CAAC;SAClB,KAAK,OAAO;;eALN,CAAC,KAAK,EAAE;YACb,IAAI,EAAE,SAAS,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,WAAW,CAAC;YACpB,OAAO,EAAE,OAAO,CAAC;SAClB,KAAK,OAAO;;;;EA+Kd;AAiBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;gBA/NJ,MAAM;kBACJ,MAAM;UAEd,KAAK;WADJ,SAAS,EAAE;iBAEL,gBAAgB;iBAChB,OAAO;6EAkOvB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"TSteps.vue.d.ts","sourceRoot":"","sources":["../../src/components/TSteps.vue"],"names":[],"mappings":"AAiMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAMhD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,QAAA,MAAM,iBAAiB,uDAAwD,CAAC;AAChF,QAAA,MAAM,qBAAqB,qCAAsC,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAItE,KAAK,WAAW,GAAG;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAwGJ,iBAAS,cAAc;WA0FT,OAAO,IAA6B;;eA/KzC,CAAC,KAAK,EAAE;YACb,IAAI,EAAE,SAAS,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,WAAW,CAAC;YACpB,OAAO,EAAE,OAAO,CAAC;SAClB,KAAK,OAAO;;eALN,CAAC,KAAK,EAAE;YACb,IAAI,EAAE,SAAS,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,WAAW,CAAC;YACpB,OAAO,EAAE,OAAO,CAAC;SAClB,KAAK,OAAO;;;;EA+Kd;AAiBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;gBA/NJ,MAAM;kBACJ,MAAM;UAEd,KAAK;iBAEE,OAAO;WAHb,SAAS,EAAE;iBAEL,gBAAgB;6EAmOhC,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TTable.cjs","names":[],"sources":["../../src/components/TTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue';\nimport type { TIconName } from '@treeui/icons';\nimport type { TSize } from '../types/contracts';\nimport TIcon from './TIcon.vue';\n\n// The scroll container is the root element, but the accessible name and any\n// aria-*/id belong on the <table> itself, so attrs are split rather than\n// inherited onto the wrapper.\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport type TTableColumn = {\n key: string;\n label: string;\n sortable?: boolean;\n align?: 'left' | 'center' | 'right';\n width?: string;\n};\n\nexport type TTableSortDirection = 'asc' | 'desc' | 'none';\n\nexport type TTableSortState = {\n key: string;\n direction: TTableSortDirection;\n};\n\nconst props = withDefaults(\n defineProps<{\n columns: TTableColumn[];\n rows: Record<string, unknown>[];\n size?: TSize;\n sortBy?: TTableSortState;\n /**\n * Visible `<caption>` naming the table. For a name without visible text,\n * pass `aria-label` / `aria-labelledby` instead — both land on the `<table>`.\n */\n caption?: string;\n }>(),\n {\n size: 'md',\n sortBy: undefined,\n caption: undefined,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'sort', state: TTableSortState): void;\n}>();\n\ndefineSlots<{\n [key: `cell-${string}`]: (props: { row: Record<string, unknown>; value: unknown }) => void;\n [key: `header-${string}`]: (props: { column: TTableColumn }) => void;\n empty: () => void;\n}>();\n\nconst internalSort = ref<TTableSortState | undefined>(undefined);\n\nconst currentSort = computed(() => props.sortBy ?? internalSort.value);\n\nconst classes = computed(() => [\n 't-table',\n `t-table--${props.size}`,\n]);\n\nconst sortedRows = computed(() => {\n const sort = currentSort.value;\n if (!sort || sort.direction === 'none') return props.rows;\n\n return [...props.rows].sort((a, b) => {\n const aVal = a[sort.key];\n const bVal = b[sort.key];\n\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n\n return sort.direction === 'desc' ? -cmp : cmp;\n });\n});\n\nfunction handleSort(column: TTableColumn) {\n if (!column.sortable) return;\n\n const cur = currentSort.value;\n let direction: TTableSortDirection = 'asc';\n\n if (cur?.key === column.key) {\n if (cur.direction === 'asc') direction = 'desc';\n else if (cur.direction === 'desc') direction = 'none';\n else direction = 'asc';\n }\n\n const state: TTableSortState = { key: column.key, direction };\n internalSort.value = state;\n emit('sort', state);\n}\n\nfunction sortAriaSort(column: TTableColumn): 'none' | 'ascending' | 'descending' | undefined {\n if (!column.sortable) return undefined;\n const cur = currentSort.value;\n if (cur?.key !== column.key || cur.direction === 'none') return 'none';\n return cur.direction === 'asc' ? 'ascending' : 'descending';\n}\n\nfunction handleHeaderKeydown(event: KeyboardEvent, column: TTableColumn) {\n if (column.sortable && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n handleSort(column);\n }\n}\n\nfunction isSortedBy(column: TTableColumn): boolean {\n const cur = currentSort.value;\n return cur?.key === column.key && cur.direction !== 'none';\n}\n\nfunction sortIconName(column: TTableColumn): TIconName {\n const cur = currentSort.value;\n if (!isSortedBy(column)) return 'chevrons-up-down';\n return cur?.direction === 'asc' ? 'chevron-up' : 'chevron-down';\n}\n\nconst attrs = useAttrs();\n\n// class/style stay on the scroll wrapper (the root); everything else —\n// aria-label, aria-labelledby, id, data-* — is forwarded to the <table>.\nconst tableAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <div\n class=\"t-table-wrapper\"\n :class=\"attrs.class\"\n :style=\"attrs.style\"\n >\n <table\n v-bind=\"tableAttrs\"\n :class=\"classes\"\n >\n <caption\n v-if=\"caption\"\n class=\"t-table__caption\"\n >\n {{ caption }}\n </caption>\n <thead class=\"t-table__head\">\n <tr class=\"t-table__row\">\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n class=\"t-table__header\"\n :class=\"[\n column.sortable ? 't-table__header--sortable' : '',\n column.align ? `t-table__header--${column.align}` : '',\n ]\"\n :style=\"column.width ? { width: column.width } : undefined\"\n :aria-sort=\"sortAriaSort(column)\"\n :tabindex=\"column.sortable ? 0 : undefined\"\n scope=\"col\"\n @click=\"handleSort(column)\"\n @keydown=\"handleHeaderKeydown($event, column)\"\n >\n <slot\n :name=\"`header-${column.key}`\"\n :column=\"column\"\n >\n <span class=\"t-table__header-content\">\n {{ column.label }}\n <span\n v-if=\"column.sortable\"\n class=\"t-table__sort-icon\"\n :class=\"{ 'is-inactive': !isSortedBy(column) }\"\n aria-hidden=\"true\"\n >\n <TIcon\n :name=\"sortIconName(column)\"\n :size=\"14\"\n />\n </span>\n </span>\n </slot>\n </th>\n </tr>\n </thead>\n <tbody class=\"t-table__body\">\n <tr\n v-if=\"sortedRows.length === 0\"\n class=\"t-table__row t-table__row--empty\"\n >\n <td\n :colspan=\"columns.length\"\n class=\"t-table__cell t-table__cell--empty\"\n >\n <slot name=\"empty\">\n No data available.\n </slot>\n </td>\n </tr>\n <tr\n v-for=\"(row, index) in sortedRows\"\n :key=\"index\"\n class=\"t-table__row\"\n >\n <td\n v-for=\"column in columns\"\n :key=\"column.key\"\n class=\"t-table__cell\"\n :class=\"column.align ? `t-table__cell--${column.align}` : ''\"\n >\n <slot\n :name=\"`cell-${column.key}`\"\n :row=\"row\"\n :value=\"row[column.key]\"\n >\n {{ row[column.key] ?? '' }}\n </slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TTable.cjs","names":[],"sources":["../../src/components/TTable.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, useAttrs } from 'vue';\nimport type { TIconName } from '@treeui/icons';\nimport type { TSize } from '../types/contracts';\nimport TIcon from './TIcon.vue';\n\n// The scroll container is the root element, but the accessible name and any\n// aria-*/id belong on the <table> itself, so attrs are split rather than\n// inherited onto the wrapper.\ndefineOptions({\n inheritAttrs: false,\n});\n\nexport type TTableColumn = {\n key: string;\n label: string;\n sortable?: boolean;\n align?: 'left' | 'center' | 'right';\n width?: string;\n};\n\nexport type TTableSortDirection = 'asc' | 'desc' | 'none';\n\nexport type TTableSortState = {\n key: string;\n direction: TTableSortDirection;\n};\n\nexport type TTableRowState = 'default' | 'muted';\n\nconst props = withDefaults(\n defineProps<{\n columns: TTableColumn[];\n rows: Record<string, unknown>[];\n size?: TSize;\n sortBy?: TTableSortState;\n /**\n * Visible `<caption>` naming the table. For a name without visible text,\n * pass `aria-label` / `aria-labelledby` instead — both land on the `<table>`.\n */\n caption?: string;\n /**\n * Stable identity per row. A key (or a function of the row) so rows keep\n * their identity across sorting — otherwise Vue keys by array index and\n * `rowState` styling follows the position, not the data.\n */\n rowKey?: string | ((row: Record<string, unknown>, index: number) => string | number);\n /**\n * Semantic per-row state. `muted` recesses a row (e.g. a resource that no\n * longer exists). It is applied by data, not position, so it survives\n * sorting. Dimming is not an accessible signal on its own — pair it with a\n * status cell or visually hidden text conveying the same meaning.\n */\n rowState?: (row: Record<string, unknown>, index: number) => TTableRowState;\n }>(),\n {\n size: 'md',\n sortBy: undefined,\n caption: undefined,\n rowKey: undefined,\n rowState: undefined,\n },\n);\n\nconst emit = defineEmits<{\n (e: 'sort', state: TTableSortState): void;\n}>();\n\ndefineSlots<{\n [key: `cell-${string}`]: (props: { row: Record<string, unknown>; value: unknown }) => void;\n [key: `header-${string}`]: (props: { column: TTableColumn }) => void;\n empty: () => void;\n}>();\n\nconst internalSort = ref<TTableSortState | undefined>(undefined);\n\nconst currentSort = computed(() => props.sortBy ?? internalSort.value);\n\nconst classes = computed(() => [\n 't-table',\n `t-table--${props.size}`,\n]);\n\nconst sortedRows = computed(() => {\n const sort = currentSort.value;\n if (!sort || sort.direction === 'none') return props.rows;\n\n return [...props.rows].sort((a, b) => {\n const aVal = a[sort.key];\n const bVal = b[sort.key];\n\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n\n return sort.direction === 'desc' ? -cmp : cmp;\n });\n});\n\nfunction handleSort(column: TTableColumn) {\n if (!column.sortable) return;\n\n const cur = currentSort.value;\n let direction: TTableSortDirection = 'asc';\n\n if (cur?.key === column.key) {\n if (cur.direction === 'asc') direction = 'desc';\n else if (cur.direction === 'desc') direction = 'none';\n else direction = 'asc';\n }\n\n const state: TTableSortState = { key: column.key, direction };\n internalSort.value = state;\n emit('sort', state);\n}\n\nfunction sortAriaSort(column: TTableColumn): 'none' | 'ascending' | 'descending' | undefined {\n if (!column.sortable) return undefined;\n const cur = currentSort.value;\n if (cur?.key !== column.key || cur.direction === 'none') return 'none';\n return cur.direction === 'asc' ? 'ascending' : 'descending';\n}\n\nfunction handleHeaderKeydown(event: KeyboardEvent, column: TTableColumn) {\n if (column.sortable && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n handleSort(column);\n }\n}\n\nfunction isSortedBy(column: TTableColumn): boolean {\n const cur = currentSort.value;\n return cur?.key === column.key && cur.direction !== 'none';\n}\n\nfunction sortIconName(column: TTableColumn): TIconName {\n const cur = currentSort.value;\n if (!isSortedBy(column)) return 'chevrons-up-down';\n return cur?.direction === 'asc' ? 'chevron-up' : 'chevron-down';\n}\n\nfunction resolveRowKey(row: Record<string, unknown>, index: number): string | number {\n if (typeof props.rowKey === 'function') return props.rowKey(row, index);\n if (typeof props.rowKey === 'string') {\n const value = row[props.rowKey];\n if (typeof value === 'string' || typeof value === 'number') return value;\n }\n return index;\n}\n\nfunction rowStateClass(row: Record<string, unknown>, index: number): string | null {\n const state = props.rowState?.(row, index);\n return state && state !== 'default' ? `t-table__row--${state}` : null;\n}\n\nconst attrs = useAttrs();\n\n// class/style stay on the scroll wrapper (the root); everything else —\n// aria-label, aria-labelledby, id, data-* — is forwarded to the <table>.\nconst tableAttrs = computed(() => {\n const { class: _class, style: _style, ...rest } = attrs;\n return rest;\n});\n</script>\n\n<template>\n <div\n class=\"t-table-wrapper\"\n :class=\"attrs.class\"\n :style=\"attrs.style\"\n >\n <table\n v-bind=\"tableAttrs\"\n :class=\"classes\"\n >\n <caption\n v-if=\"caption\"\n class=\"t-table__caption\"\n >\n {{ caption }}\n </caption>\n <thead class=\"t-table__head\">\n <tr class=\"t-table__row\">\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n class=\"t-table__header\"\n :class=\"[\n column.sortable ? 't-table__header--sortable' : '',\n column.align ? `t-table__header--${column.align}` : '',\n ]\"\n :style=\"column.width ? { width: column.width } : undefined\"\n :aria-sort=\"sortAriaSort(column)\"\n :tabindex=\"column.sortable ? 0 : undefined\"\n scope=\"col\"\n @click=\"handleSort(column)\"\n @keydown=\"handleHeaderKeydown($event, column)\"\n >\n <slot\n :name=\"`header-${column.key}`\"\n :column=\"column\"\n >\n <span class=\"t-table__header-content\">\n {{ column.label }}\n <span\n v-if=\"column.sortable\"\n class=\"t-table__sort-icon\"\n :class=\"{ 'is-inactive': !isSortedBy(column) }\"\n aria-hidden=\"true\"\n >\n <TIcon\n :name=\"sortIconName(column)\"\n :size=\"14\"\n />\n </span>\n </span>\n </slot>\n </th>\n </tr>\n </thead>\n <tbody class=\"t-table__body\">\n <tr\n v-if=\"sortedRows.length === 0\"\n class=\"t-table__row t-table__row--empty\"\n >\n <td\n :colspan=\"columns.length\"\n class=\"t-table__cell t-table__cell--empty\"\n >\n <slot name=\"empty\">\n No data available.\n </slot>\n </td>\n </tr>\n <tr\n v-for=\"(row, index) in sortedRows\"\n :key=\"resolveRowKey(row, index)\"\n class=\"t-table__row\"\n :class=\"rowStateClass(row, index)\"\n >\n <td\n v-for=\"column in columns\"\n :key=\"column.key\"\n class=\"t-table__cell\"\n :class=\"column.align ? `t-table__cell--${column.align}` : ''\"\n >\n <slot\n :name=\"`cell-${column.key}`\"\n :row=\"row\"\n :value=\"row[column.key]\"\n >\n {{ row[column.key] ?? '' }}\n </slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n"],"mappings":""}