@powerhousedao/design-system 6.1.0-dev.12 → 6.1.0-dev.14

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 (298) hide show
  1. package/dist/Removed-CO_5C1ce.js +178 -0
  2. package/dist/Removed-CO_5C1ce.js.map +1 -0
  3. package/dist/Tabler-FjvVqX5a.js +65 -0
  4. package/dist/Tabler-FjvVqX5a.js.map +1 -0
  5. package/dist/{button-49Walvwn.d.ts → button-C8doazjv.d.ts} +1 -1
  6. package/dist/{button-49Walvwn.d.ts.map → button-C8doazjv.d.ts.map} +1 -1
  7. package/dist/{character-counter-BcuG4STA.d.ts → character-counter-BWoglM2P.d.ts} +1 -1
  8. package/dist/{character-counter-BcuG4STA.d.ts.map → character-counter-BWoglM2P.d.ts.map} +1 -1
  9. package/dist/{checkbox-Bxc7-H_k.d.ts → checkbox-CGBtXQnI.d.ts} +3 -3
  10. package/dist/{checkbox-Bxc7-H_k.d.ts.map → checkbox-CGBtXQnI.d.ts.map} +1 -1
  11. package/dist/{checkbox-base-8xXJvAbj.d.ts → checkbox-base-CZo-4eL0.d.ts} +1 -1
  12. package/dist/{checkbox-base-8xXJvAbj.d.ts.map → checkbox-base-CZo-4eL0.d.ts.map} +1 -1
  13. package/dist/{command-CThXmS49.d.ts → command-By1kGfcI.d.ts} +15 -15
  14. package/dist/command-By1kGfcI.d.ts.map +1 -0
  15. package/dist/connect/components/toast/toast.d.ts.map +1 -1
  16. package/dist/connect/components/toast/toast.js +6 -6
  17. package/dist/connect/components/toast/toast.js.map +1 -1
  18. package/dist/connect/index.d.ts +49 -91
  19. package/dist/connect/index.d.ts.map +1 -1
  20. package/dist/connect/index.js +1032 -843
  21. package/dist/connect/index.js.map +1 -1
  22. package/dist/{content-Ce1V2wTc.d.ts → content-BHWIqmio.d.ts} +2 -2
  23. package/dist/{content-Ce1V2wTc.d.ts.map → content-BHWIqmio.d.ts.map} +1 -1
  24. package/dist/{enum-field-DJ4XRc2r.d.ts → enum-field-CwZVs3Ux.d.ts} +3 -3
  25. package/dist/{enum-field-DJ4XRc2r.d.ts.map → enum-field-CwZVs3Ux.d.ts.map} +1 -1
  26. package/dist/{form-B9JNvrH6.d.ts → form-CKRKn0TQ.d.ts} +1 -1
  27. package/dist/{form-B9JNvrH6.d.ts.map → form-CKRKn0TQ.d.ts.map} +1 -1
  28. package/dist/{form-description-BpST5Ww-.d.ts → form-description-CYkcMEzm.d.ts} +1 -1
  29. package/dist/{form-description-BpST5Ww-.d.ts.map → form-description-CYkcMEzm.d.ts.map} +1 -1
  30. package/dist/{form-group-BauWlFkQ.d.ts → form-group-C8kL6pdZ.d.ts} +1 -1
  31. package/dist/form-group-C8kL6pdZ.d.ts.map +1 -0
  32. package/dist/{form-label-Cz_gcj-B.d.ts → form-label-b6nQi0XO.d.ts} +1 -1
  33. package/dist/form-label-b6nQi0XO.d.ts.map +1 -0
  34. package/dist/{form-message-BPqNM4gG.d.ts → form-message-Dq72nBXz.d.ts} +1 -1
  35. package/dist/{form-message-BPqNM4gG.d.ts.map → form-message-Dq72nBXz.d.ts.map} +1 -1
  36. package/dist/{form-server-error-message-CzMQQ8ru.d.ts → form-server-error-message-DXbaiTfF.d.ts} +1 -1
  37. package/dist/{form-server-error-message-CzMQQ8ru.d.ts.map → form-server-error-message-DXbaiTfF.d.ts.map} +1 -1
  38. package/dist/{src-BgKEHW0i.js → icon-C4QOpsdI.js} +14 -964
  39. package/dist/icon-C4QOpsdI.js.map +1 -0
  40. package/dist/{id-autocomplete-ClooY-ur.d.ts → id-autocomplete-C-hwriS5.d.ts} +2 -2
  41. package/dist/{id-autocomplete-ClooY-ur.d.ts.map → id-autocomplete-C-hwriS5.d.ts.map} +1 -1
  42. package/dist/{id-autocomplete-input-container-O7l0T0zJ.d.ts → id-autocomplete-input-container-DFEyPh5p.d.ts} +2 -2
  43. package/dist/{id-autocomplete-input-container-O7l0T0zJ.d.ts.map → id-autocomplete-input-container-DFEyPh5p.d.ts.map} +1 -1
  44. package/dist/{id-autocomplete-list-CpPWWmw0.d.ts → id-autocomplete-list-EzLpF23C.d.ts} +2 -2
  45. package/dist/{id-autocomplete-list-CpPWWmw0.d.ts.map → id-autocomplete-list-EzLpF23C.d.ts.map} +1 -1
  46. package/dist/{id-autocomplete-list-option-QmSvQwgn.d.ts → id-autocomplete-list-option-CB5B07Hi.d.ts} +2 -2
  47. package/dist/{id-autocomplete-list-option-QmSvQwgn.d.ts.map → id-autocomplete-list-option-CB5B07Hi.d.ts.map} +1 -1
  48. package/dist/{index-BEiWWMW2.d.ts → index--hDSfvJT.d.ts} +2 -15
  49. package/dist/index--hDSfvJT.d.ts.map +1 -0
  50. package/dist/index-E7Wvm5uX.d.ts +1 -0
  51. package/dist/index-J3R2mDFQ.d.ts +1 -0
  52. package/dist/index.d.ts +3 -3
  53. package/dist/index.js +3 -2
  54. package/dist/{input-D11GgWGm.d.ts → input-BpEQjaWV.d.ts} +1 -1
  55. package/dist/input-BpEQjaWV.d.ts.map +1 -0
  56. package/dist/{json-viewer-vWp8vOvz.d.ts → json-viewer-DaTgmzkS.d.ts} +1 -1
  57. package/dist/{json-viewer-vWp8vOvz.d.ts.map → json-viewer-DaTgmzkS.d.ts.map} +1 -1
  58. package/dist/{message-list-aysvo-xf.d.ts → message-list-C4mPpBBa.d.ts} +2 -2
  59. package/dist/{message-list-aysvo-xf.d.ts.map → message-list-C4mPpBBa.d.ts.map} +1 -1
  60. package/dist/{popover-glLRVxPS.d.ts → popover-XSBOuSih.d.ts} +1 -1
  61. package/dist/{popover-glLRVxPS.d.ts.map → popover-XSBOuSih.d.ts.map} +1 -1
  62. package/dist/{radio-DZ4xl9oz.d.ts → radio-eL0Oy86J.d.ts} +1 -1
  63. package/dist/{radio-DZ4xl9oz.d.ts.map → radio-eL0Oy86J.d.ts.map} +1 -1
  64. package/dist/{radio-group-DjJbcDzB.d.ts → radio-group-Bkli6nUz.d.ts} +1 -1
  65. package/dist/{radio-group-DjJbcDzB.d.ts.map → radio-group-Bkli6nUz.d.ts.map} +1 -1
  66. package/dist/{radio-group-field-BkD0Nl0j.d.ts → radio-group-field-wlqeiLN3.d.ts} +3 -3
  67. package/dist/{radio-group-field-BkD0Nl0j.d.ts.map → radio-group-field-wlqeiLN3.d.ts.map} +1 -1
  68. package/dist/{search-autocomplete-OeZbE-VN.d.ts → search-autocomplete-BJJkrZ1i.d.ts} +2 -2
  69. package/dist/{search-autocomplete-OeZbE-VN.d.ts.map → search-autocomplete-BJJkrZ1i.d.ts.map} +1 -1
  70. package/dist/{select-field-B9KcyWc1.d.ts → select-field-C97QIhUL.d.ts} +2 -2
  71. package/dist/{select-field-B9KcyWc1.d.ts.map → select-field-C97QIhUL.d.ts.map} +1 -1
  72. package/dist/{selected-content-HHOKK679.d.ts → selected-content-CGsK5PR4.d.ts} +2 -2
  73. package/dist/selected-content-CGsK5PR4.d.ts.map +1 -0
  74. package/dist/sidebar-DOoE4krt.d.ts +102 -0
  75. package/dist/sidebar-DOoE4krt.d.ts.map +1 -0
  76. package/dist/sidebar-provider-C2eyz9TL.d.ts +46 -0
  77. package/dist/sidebar-provider-C2eyz9TL.d.ts.map +1 -0
  78. package/dist/{splitted-input-diff-DZ_0mBKD.d.ts → splitted-input-diff-CwPedpov.d.ts} +2 -2
  79. package/dist/splitted-input-diff-CwPedpov.d.ts.map +1 -0
  80. package/dist/src-BrrPQVce.js +710 -0
  81. package/dist/src-BrrPQVce.js.map +1 -0
  82. package/dist/style.css +84 -4173
  83. package/dist/{text-field-CwxxUhUk.d.ts → text-field-DSInH67J.d.ts} +3 -3
  84. package/dist/{text-field-CwxxUhUk.d.ts.map → text-field-DSInH67J.d.ts.map} +1 -1
  85. package/dist/{text-input-By73a1-n.d.ts → text-input-8zXIWHLi.d.ts} +3 -3
  86. package/dist/{text-input-By73a1-n.d.ts.map → text-input-8zXIWHLi.d.ts.map} +1 -1
  87. package/dist/{text-input-diff-C6OK2A4u.d.ts → text-input-diff-B0vLSKQm.d.ts} +2 -2
  88. package/dist/{text-input-diff-C6OK2A4u.d.ts.map → text-input-diff-B0vLSKQm.d.ts.map} +1 -1
  89. package/dist/{tooltip-Cf5jSzdt.d.ts → tooltip-BxS9HpML.d.ts} +1 -1
  90. package/dist/{tooltip-Cf5jSzdt.d.ts.map → tooltip-BxS9HpML.d.ts.map} +1 -1
  91. package/dist/{types-tThrTH_c.d.ts → types-BTq-St7H.d.ts} +1 -1
  92. package/dist/{types-tThrTH_c.d.ts.map → types-BTq-St7H.d.ts.map} +1 -1
  93. package/dist/{types-BfmDXMrz.d.ts → types-Bsn62tJB.d.ts} +1 -1
  94. package/dist/{types-BfmDXMrz.d.ts.map → types-Bsn62tJB.d.ts.map} +1 -1
  95. package/dist/{types-9JRQnd7a.d.ts → types-C04Q_Fan.d.ts} +1 -1
  96. package/dist/{types-9JRQnd7a.d.ts.map → types-C04Q_Fan.d.ts.map} +1 -1
  97. package/dist/types-CNbvfWjh.d.ts +31 -0
  98. package/dist/types-CNbvfWjh.d.ts.map +1 -0
  99. package/dist/ui/components/button/button.d.ts +1 -1
  100. package/dist/ui/components/button/button.js +3 -3
  101. package/dist/ui/components/button/button.js.map +1 -1
  102. package/dist/ui/components/character-counter/character-counter.d.ts +1 -1
  103. package/dist/ui/components/character-counter/character-counter.js +6 -6
  104. package/dist/ui/components/character-counter/character-counter.js.map +1 -1
  105. package/dist/ui/components/checkbox/checkbox-base.d.ts +1 -1
  106. package/dist/ui/components/checkbox/checkbox-base.js +3 -3
  107. package/dist/ui/components/checkbox/checkbox-base.js.map +1 -1
  108. package/dist/ui/components/checkbox/checkbox.d.ts +1 -1
  109. package/dist/ui/components/checkbox/checkbox.js +4 -4
  110. package/dist/ui/components/checkbox/checkbox.js.map +1 -1
  111. package/dist/ui/components/command/command.d.ts +1 -1
  112. package/dist/ui/components/command/command.js +9 -8
  113. package/dist/ui/components/command/command.js.map +1 -1
  114. package/dist/ui/components/enum-field/enum-field.d.ts +1 -1
  115. package/dist/ui/components/enum-field/types.d.ts +1 -1
  116. package/dist/ui/components/form/form.d.ts +1 -1
  117. package/dist/ui/components/form-description/form-description.d.ts +1 -1
  118. package/dist/ui/components/form-description/form-description.js +2 -2
  119. package/dist/ui/components/form-description/form-description.js.map +1 -1
  120. package/dist/ui/components/form-group/form-group.d.ts +1 -1
  121. package/dist/ui/components/form-label/form-label.d.ts +1 -1
  122. package/dist/ui/components/form-label/form-label.js +5 -4
  123. package/dist/ui/components/form-label/form-label.js.map +1 -1
  124. package/dist/ui/components/form-message/form-message.d.ts +1 -1
  125. package/dist/ui/components/form-message/form-message.js +5 -5
  126. package/dist/ui/components/form-message/form-message.js.map +1 -1
  127. package/dist/ui/components/form-message/form-server-error-message.d.ts +1 -1
  128. package/dist/ui/components/form-message/message-list.d.ts +1 -1
  129. package/dist/ui/components/form-message/message-list.js +6 -6
  130. package/dist/ui/components/form-message/message-list.js.map +1 -1
  131. package/dist/ui/components/id-autocomplete/id-autocomplete-input-container.d.ts +1 -1
  132. package/dist/ui/components/id-autocomplete/id-autocomplete-input-container.js +10 -9
  133. package/dist/ui/components/id-autocomplete/id-autocomplete-input-container.js.map +1 -1
  134. package/dist/ui/components/id-autocomplete/id-autocomplete-list-option.d.ts +1 -1
  135. package/dist/ui/components/id-autocomplete/id-autocomplete-list-option.js +20 -19
  136. package/dist/ui/components/id-autocomplete/id-autocomplete-list-option.js.map +1 -1
  137. package/dist/ui/components/id-autocomplete/id-autocomplete-list.d.ts +1 -1
  138. package/dist/ui/components/id-autocomplete/id-autocomplete-list.js +6 -6
  139. package/dist/ui/components/id-autocomplete/id-autocomplete-list.js.map +1 -1
  140. package/dist/ui/components/id-autocomplete/id-autocomplete.d.ts +1 -1
  141. package/dist/ui/components/id-autocomplete/id-autocomplete.js +4 -4
  142. package/dist/ui/components/id-autocomplete/id-autocomplete.js.map +1 -1
  143. package/dist/ui/components/id-autocomplete/types.d.ts +1 -1
  144. package/dist/ui/components/id-autocomplete/use-id-autocomplete.d.ts +1 -1
  145. package/dist/ui/components/index.d.ts +40 -37
  146. package/dist/ui/components/index.js +3 -1
  147. package/dist/ui/components/input/input.d.ts +1 -1
  148. package/dist/ui/components/input/input.js +2 -6
  149. package/dist/ui/components/input/input.js.map +1 -1
  150. package/dist/ui/components/input/splitted-input-diff.d.ts +1 -1
  151. package/dist/ui/components/input/splitted-input-diff.js +12 -11
  152. package/dist/ui/components/input/splitted-input-diff.js.map +1 -1
  153. package/dist/ui/components/input/subcomponent/input-diff.js +2 -2
  154. package/dist/ui/components/input/subcomponent/input-diff.js.map +1 -1
  155. package/dist/ui/components/input/subcomponent/text-diff.d.ts +1 -1
  156. package/dist/ui/components/input/subcomponent/text-diff.js +5 -5
  157. package/dist/ui/components/input/subcomponent/text-diff.js.map +1 -1
  158. package/dist/ui/components/json-viewer/json-viewer.d.ts +1 -1
  159. package/dist/ui/components/popover/popover.d.ts +1 -1
  160. package/dist/ui/components/popover/popover.js +3 -3
  161. package/dist/ui/components/popover/popover.js.map +1 -1
  162. package/dist/ui/components/radio-group-field/radio-group-field.d.ts +1 -1
  163. package/dist/ui/components/radio-group-field/radio-group-field.js +2 -2
  164. package/dist/ui/components/radio-group-field/radio-group-field.js.map +1 -1
  165. package/dist/ui/components/radio-group-field/radio-group.d.ts +1 -1
  166. package/dist/ui/components/radio-group-field/radio.d.ts +1 -1
  167. package/dist/ui/components/radio-group-field/radio.js +4 -4
  168. package/dist/ui/components/radio-group-field/radio.js.map +1 -1
  169. package/dist/ui/components/search-autocomplete/index.d.ts +3 -3
  170. package/dist/ui/components/search-autocomplete/search-autocomplete.d.ts +1 -1
  171. package/dist/ui/components/search-autocomplete/search-autocomplete.js +16 -16
  172. package/dist/ui/components/search-autocomplete/search-autocomplete.js.map +1 -1
  173. package/dist/ui/components/search-autocomplete/types.d.ts +1 -1
  174. package/dist/ui/components/search-autocomplete/use-search-autocomplete.d.ts +1 -1
  175. package/dist/ui/components/select-field/content.d.ts +1 -1
  176. package/dist/ui/components/select-field/content.js +10 -9
  177. package/dist/ui/components/select-field/content.js.map +1 -1
  178. package/dist/ui/components/select-field/select-field.d.ts +1 -1
  179. package/dist/ui/components/select-field/select-field.js +2 -2
  180. package/dist/ui/components/select-field/select-field.js.map +1 -1
  181. package/dist/ui/components/select-field/selected-content.d.ts +1 -1
  182. package/dist/ui/components/select-field/selected-content.js +11 -10
  183. package/dist/ui/components/select-field/selected-content.js.map +1 -1
  184. package/dist/ui/components/select-field/subcomponents/CommandItemList.d.ts +1 -1
  185. package/dist/ui/components/select-field/subcomponents/CommandItemList.d.ts.map +1 -1
  186. package/dist/ui/components/select-field/subcomponents/CommandItemList.js +11 -10
  187. package/dist/ui/components/select-field/subcomponents/CommandItemList.js.map +1 -1
  188. package/dist/ui/components/select-field/use-select-field.d.ts +1 -1
  189. package/dist/ui/components/sidebar/index.d.ts +4 -0
  190. package/dist/ui/components/sidebar/index.js +3 -0
  191. package/dist/ui/components/sidebar/sidebar.d.ts +2 -0
  192. package/dist/ui/components/sidebar/sidebar.js +110 -0
  193. package/dist/ui/components/sidebar/sidebar.js.map +1 -0
  194. package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.d.ts +14 -0
  195. package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.d.ts.map +1 -0
  196. package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.js +56 -0
  197. package/dist/ui/components/sidebar/subcomponents/sidebar-content-area.js.map +1 -0
  198. package/dist/ui/components/sidebar/subcomponents/sidebar-header.d.ts +11 -0
  199. package/dist/ui/components/sidebar/subcomponents/sidebar-header.d.ts.map +1 -0
  200. package/dist/ui/components/sidebar/subcomponents/sidebar-header.js +45 -0
  201. package/dist/ui/components/sidebar/subcomponents/sidebar-header.js.map +1 -0
  202. package/dist/ui/components/sidebar/subcomponents/sidebar-item.d.ts +35 -0
  203. package/dist/ui/components/sidebar/subcomponents/sidebar-item.d.ts.map +1 -0
  204. package/dist/ui/components/sidebar/subcomponents/sidebar-item.js +156 -0
  205. package/dist/ui/components/sidebar/subcomponents/sidebar-item.js.map +1 -0
  206. package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.d.ts +7 -0
  207. package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.d.ts.map +1 -0
  208. package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.js +30 -0
  209. package/dist/ui/components/sidebar/subcomponents/sidebar-pinning-area.js.map +1 -0
  210. package/dist/ui/components/sidebar/subcomponents/sidebar-provider/index.d.ts +2 -0
  211. package/dist/ui/components/sidebar/subcomponents/sidebar-provider/index.js +2 -0
  212. package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-provider.d.ts +2 -0
  213. package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-provider.js +268 -0
  214. package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-provider.js.map +1 -0
  215. package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.d.ts +92 -0
  216. package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.d.ts.map +1 -0
  217. package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.js +107 -0
  218. package/dist/ui/components/sidebar/subcomponents/sidebar-provider/sidebar-reducer.js.map +1 -0
  219. package/dist/ui/components/sidebar/subcomponents/sidebar-search/index.d.ts +4 -0
  220. package/dist/ui/components/sidebar/subcomponents/sidebar-search/index.js +4 -0
  221. package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.d.ts +10 -0
  222. package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.d.ts.map +1 -0
  223. package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.js +22 -0
  224. package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-navigation-arrow.js.map +1 -0
  225. package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.d.ts +10 -0
  226. package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.d.ts.map +1 -0
  227. package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.js +22 -0
  228. package/dist/ui/components/sidebar/subcomponents/sidebar-search/search-result-counter.js.map +1 -0
  229. package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.d.ts +8 -0
  230. package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.d.ts.map +1 -0
  231. package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.js +85 -0
  232. package/dist/ui/components/sidebar/subcomponents/sidebar-search/sidebar-search.js.map +1 -0
  233. package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.d.ts +16 -0
  234. package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.d.ts.map +1 -0
  235. package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.js +21 -0
  236. package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton-item.js.map +1 -0
  237. package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.d.ts +7 -0
  238. package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.d.ts.map +1 -0
  239. package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.js +63 -0
  240. package/dist/ui/components/sidebar/subcomponents/sidebar-skeleton.js.map +1 -0
  241. package/dist/ui/components/sidebar/subcomponents/status-icon.d.ts +16 -0
  242. package/dist/ui/components/sidebar/subcomponents/status-icon.d.ts.map +1 -0
  243. package/dist/ui/components/sidebar/subcomponents/status-icon.js +43 -0
  244. package/dist/ui/components/sidebar/subcomponents/status-icon.js.map +1 -0
  245. package/dist/ui/components/sidebar/types.d.ts +2 -0
  246. package/dist/ui/components/sidebar/types.js +14 -0
  247. package/dist/ui/components/sidebar/types.js.map +1 -0
  248. package/dist/ui/components/sidebar/use-ellipsis.d.ts +10 -0
  249. package/dist/ui/components/sidebar/use-ellipsis.d.ts.map +1 -0
  250. package/dist/ui/components/sidebar/use-ellipsis.js +26 -0
  251. package/dist/ui/components/sidebar/use-ellipsis.js.map +1 -0
  252. package/dist/ui/components/sidebar/use-sidebar-resize.d.ts +22 -0
  253. package/dist/ui/components/sidebar/use-sidebar-resize.d.ts.map +1 -0
  254. package/dist/ui/components/sidebar/use-sidebar-resize.js +72 -0
  255. package/dist/ui/components/sidebar/use-sidebar-resize.js.map +1 -0
  256. package/dist/ui/components/sidebar/utils.d.ts +14 -0
  257. package/dist/ui/components/sidebar/utils.d.ts.map +1 -0
  258. package/dist/ui/components/sidebar/utils.js +118 -0
  259. package/dist/ui/components/sidebar/utils.js.map +1 -0
  260. package/dist/ui/components/text-field/text-field.d.ts +1 -1
  261. package/dist/ui/components/text-input/text-input-diff.d.ts +1 -1
  262. package/dist/ui/components/text-input/text-input.d.ts +1 -1
  263. package/dist/ui/components/text-input/text-input.js +2 -2
  264. package/dist/ui/components/text-input/text-input.js.map +1 -1
  265. package/dist/ui/components/text-input/types.d.ts +1 -1
  266. package/dist/ui/components/tooltip/tooltip.d.ts +1 -1
  267. package/dist/ui/components/tooltip/tooltip.js +2 -2
  268. package/dist/ui/components/tooltip/tooltip.js.map +1 -1
  269. package/dist/ui/components/types.d.ts +1 -1
  270. package/dist/ui/components/value-transformer/value-transformer.d.ts +1 -1
  271. package/dist/ui/components/with-field-validation/with-field-validation.d.ts +1 -1
  272. package/dist/ui/index.d.ts +42 -39
  273. package/dist/ui/index.js +3 -1
  274. package/dist/ui/lib/date-picker.d.ts +1 -1
  275. package/dist/ui/lib/shared-value-transformers.d.ts +1 -1
  276. package/dist/ui/lib/types.d.ts +1 -1
  277. package/dist/ui/types.d.ts +2 -2
  278. package/dist/{use-id-autocomplete-BcL_O50p.d.ts → use-id-autocomplete-By7YSChC.d.ts} +2 -2
  279. package/dist/{use-id-autocomplete-BcL_O50p.d.ts.map → use-id-autocomplete-By7YSChC.d.ts.map} +1 -1
  280. package/dist/{use-search-autocomplete-Xf7shCtk.d.ts → use-search-autocomplete-IfcQ_gKh.d.ts} +2 -2
  281. package/dist/{use-search-autocomplete-Xf7shCtk.d.ts.map → use-search-autocomplete-IfcQ_gKh.d.ts.map} +1 -1
  282. package/dist/{value-transformer-DCiU65Qa.d.ts → value-transformer-DQjqtNih.d.ts} +2 -2
  283. package/dist/{value-transformer-DCiU65Qa.d.ts.map → value-transformer-DQjqtNih.d.ts.map} +1 -1
  284. package/dist/{with-field-validation-BIac25Sm.d.ts → with-field-validation-Di5D8vU-.d.ts} +2 -2
  285. package/dist/{with-field-validation-BIac25Sm.d.ts.map → with-field-validation-Di5D8vU-.d.ts.map} +1 -1
  286. package/package.json +9 -5
  287. package/theme.css +60 -14
  288. package/dist/command-CThXmS49.d.ts.map +0 -1
  289. package/dist/form-group-BauWlFkQ.d.ts.map +0 -1
  290. package/dist/form-label-Cz_gcj-B.d.ts.map +0 -1
  291. package/dist/index-BEiWWMW2.d.ts.map +0 -1
  292. package/dist/input-D11GgWGm.d.ts.map +0 -1
  293. package/dist/selected-content-HHOKK679.d.ts.map +0 -1
  294. package/dist/splitted-input-diff-DZ_0mBKD.d.ts.map +0 -1
  295. package/dist/src-BgKEHW0i.js.map +0 -1
  296. /package/dist/{index-CWsYGvaO.d.ts → index--okzibnx.d.ts} +0 -0
  297. /package/dist/{index-qM4PwHTs.d.ts → index-BLwMeReG.d.ts} +0 -0
  298. /package/dist/{index-uQcTfU6c.d.ts → index-Cw3C7_1f.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"CommandItemList.js","names":["cn","Icon","React","CommandItem","renderIcon","IconComponent","CommandItemList","options","selectedValues","multiple","selectionIcon","selectionIconPosition","hasAnyIcon","toggleOption","tabIndex","map","opt","isSelected","includes","value","label","disabled","icon"],"sources":["../../../../../src/ui/components/select-field/subcomponents/CommandItemList.tsx"],"sourcesContent":["import type { IconName } from \"#design-system\";\nimport { cn, Icon } from \"#design-system\";\nimport React from \"react\";\nimport { CommandItem } from \"../../command/command.js\";\nimport type { SelectProps } from \"../../enum-field/types.js\";\n\ninterface FavoriteOptionsProps {\n options: SelectProps[\"options\"];\n selectedValues: string[];\n multiple?: boolean;\n selectionIcon: \"auto\" | \"checkmark\";\n selectionIconPosition: \"left\" | \"right\";\n hasAnyIcon: boolean;\n toggleOption: (value: string) => void;\n tabIndex?: number;\n}\n\nconst renderIcon = (\n IconComponent:\n | IconName\n | React.ComponentType<{ className?: string }>\n | undefined,\n) => {\n if (typeof IconComponent === \"string\") {\n return (\n <Icon\n name={IconComponent}\n size={16}\n className={cn(\"text-gray-700 dark:text-gray-400\")}\n />\n );\n }\n return (\n IconComponent && (\n <IconComponent\n className={cn(\"size-4\", \"text-gray-700 dark:text-gray-400\")}\n />\n )\n );\n};\n\nexport const CommandItemList: React.FC<FavoriteOptionsProps> = ({\n options = [],\n selectedValues,\n multiple,\n selectionIcon,\n selectionIconPosition,\n hasAnyIcon,\n toggleOption,\n tabIndex,\n}) => {\n return (\n <>\n {options.map((opt) => {\n const isSelected = selectedValues.includes(opt.value);\n return (\n <CommandItem\n tabIndex={tabIndex}\n key={`favorite-${opt.value}`}\n value={opt.label}\n onSelect={() => !opt.disabled && toggleOption(opt.value)}\n disabled={opt.disabled}\n className={cn(\n \"cursor-pointer\",\n \"data-[selected=true]:bg-gray-100 dark:data-[selected=true]:bg-gray-900\",\n opt.disabled &&\n \"pointer-events-auto! cursor-not-allowed hover:bg-transparent dark:hover:bg-transparent\",\n )}\n role=\"option\"\n aria-selected={isSelected}\n >\n {selectionIcon === \"auto\" &&\n (multiple ? (\n <div\n className={cn(\n \"flex size-4 items-center justify-center rounded-md border\",\n \"border-gray-700 dark:border-gray-400\",\n isSelected &&\n \"bg-gray-900 text-slate-50 dark:bg-gray-400 dark:text-black\",\n )}\n >\n {isSelected && <Icon name=\"Checkmark\" size={16} />}\n </div>\n ) : (\n <div\n className={cn(\n \"relative size-4 rounded-full border\",\n isSelected\n ? \"border-gray-900 dark:border-gray-400\"\n : \"border-gray-800 dark:border-gray-400\",\n \"bg-transparent dark:bg-transparent\",\n )}\n >\n {isSelected && (\n <div className=\"absolute top-1/2 left-1/2 size-2.5 -translate-1/2 rounded-full bg-gray-900 dark:bg-gray-400\" />\n )}\n </div>\n ))}\n {selectionIcon === \"checkmark\" &&\n !(selectionIconPosition === \"right\" && hasAnyIcon) && (\n <div className=\"size-4\">\n {selectionIconPosition === \"left\" && isSelected && (\n <Icon\n name=\"Checkmark\"\n size={16}\n className=\"text-gray-900 dark:text-gray-50\"\n />\n )}\n </div>\n )}\n {renderIcon(opt.icon)}\n <span\n className={cn(\n \"flex-1 truncate text-sm/4 font-normal\",\n \"text-gray-700 dark:text-gray-500\",\n opt.disabled && \"text-gray-600 dark:text-gray-600\",\n )}\n >\n {opt.label}\n </span>\n {selectionIcon === \"checkmark\" &&\n selectionIconPosition === \"right\" && (\n <div className=\"size-4\">\n {isSelected && (\n <Icon\n name=\"Checkmark\"\n size={16}\n className=\"text-gray-900 dark:text-gray-50\"\n />\n )}\n </div>\n )}\n </CommandItem>\n );\n })}\n </>\n );\n};\n"],"mappings":";;;;;AAiBA,MAAMI,cACJC,kBAIG;AACH,KAAI,OAAOA,kBAAkB,SAC3B,QACE,oBAAC,MAAD;EACE,MAAMA;EACN,MAAM;EACN,WAAWL,GAAG,mCAAmC;EACjD,CAAA;AAGN,QACEK,iBACE,oBAAC,eAAD,EACE,WAAWL,GAAG,UAAU,mCAAmC,EAE9D,CAAA;;AAIL,MAAaM,mBAAmD,EAC9DC,UAAU,EAAE,EACZC,gBACAC,UACAC,eACAC,uBACAC,YACAC,cACAC,eACI;AACJ,QACE,oBAAA,YAAA,EAAA,UACGP,QAAQQ,KAAKC,QAAQ;EACpB,MAAMC,aAAaT,eAAeU,SAASF,IAAIG,MAAM;AACrD,SACE,qBAAC,aAAD;GACYL;GAEV,OAAOE,IAAII;GACX,gBAAgB,CAACJ,IAAIK,YAAYR,aAAaG,IAAIG,MAAM;GACxD,UAAUH,IAAIK;GACd,WAAWrB,GACT,kBACA,0EACAgB,IAAIK,YACF,yFACH;GACD,MAAK;GACL,iBAAeJ;aAbjB;IAeGP,kBAAkB,WAChBD,WACC,oBAAC,OAAD;KACE,WAAWT,GACT,6DACA,wCACAiB,cACE,6DACH;eAEAA,cAAc,oBAAC,MAAD;MAAM,MAAK;MAAY,MAAM;MAAM,CAAA;KAC9C,CAAA,GAEN,oBAAC,OAAD;KACE,WAAWjB,GACT,uCACAiB,aACI,yCACA,wCACJ,qCACD;eAEAA,cACC,oBAAC,OAAD,EAAK,WAAU,+FAChB,CAAA;KAEJ,CAAA;IACFP,kBAAkB,eACjB,EAAEC,0BAA0B,WAAWC,eACrC,oBAAC,OAAD;KAAK,WAAU;eACZD,0BAA0B,UAAUM,cACnC,oBAAC,MAAD;MACE,MAAK;MACL,MAAM;MACN,WAAU;MAEb,CAAA;KAEJ,CAAA;IACFb,WAAWY,IAAIM,KAAK;IACrB,oBAAC,QAAD;KACE,WAAWtB,GACT,yCACA,oCACAgB,IAAIK,YAAY,mCACjB;eAEAL,IAAII;KACD,CAAA;IACLV,kBAAkB,eACjBC,0BAA0B,WACxB,oBAAC,OAAD;KAAK,WAAU;eACZM,cACC,oBAAC,MAAD;MACE,MAAK;MACL,MAAM;MACN,WAAU;MAEb,CAAA;KAEJ,CAAA;IACS;KA1EP,YAAYD,IAAIG,QA0ET;GAEhB,EACD,CAAA"}
1
+ {"version":3,"file":"CommandItemList.js","names":["Icon","twMerge","React","CommandItem","renderIcon","IconComponent","CommandItemList","options","selectedValues","multiple","selectionIcon","selectionIconPosition","hasAnyIcon","toggleOption","tabIndex","map","opt","isSelected","includes","value","label","disabled","icon"],"sources":["../../../../../src/ui/components/select-field/subcomponents/CommandItemList.tsx"],"sourcesContent":["import type { IconName } from \"#design-system\";\nimport { Icon } from \"#design-system\";\nimport { twMerge } from \"tailwind-merge\";\nimport React from \"react\";\nimport { CommandItem } from \"../../command/command.js\";\nimport type { SelectProps } from \"../../enum-field/types.js\";\n\ninterface FavoriteOptionsProps {\n options: SelectProps[\"options\"];\n selectedValues: string[];\n multiple?: boolean;\n selectionIcon: \"auto\" | \"checkmark\";\n selectionIconPosition: \"left\" | \"right\";\n hasAnyIcon: boolean;\n toggleOption: (value: string) => void;\n tabIndex?: number;\n}\n\nconst renderIcon = (\n IconComponent:\n | IconName\n | React.ComponentType<{ className?: string }>\n | undefined,\n) => {\n if (typeof IconComponent === \"string\") {\n return (\n <Icon\n name={IconComponent}\n size={16}\n className={twMerge(\"text-gray-700 dark:text-slate-200\")}\n />\n );\n }\n return (\n IconComponent && (\n <IconComponent\n className={twMerge(\"size-4\", \"text-gray-700 dark:text-slate-200\")}\n />\n )\n );\n};\n\nexport const CommandItemList: React.FC<FavoriteOptionsProps> = ({\n options = [],\n selectedValues,\n multiple,\n selectionIcon,\n selectionIconPosition,\n hasAnyIcon,\n toggleOption,\n tabIndex,\n}) => {\n return (\n <>\n {options.map((opt) => {\n const isSelected = selectedValues.includes(opt.value);\n return (\n <CommandItem\n tabIndex={tabIndex}\n key={`favorite-${opt.value}`}\n value={opt.label}\n onSelect={() => !opt.disabled && toggleOption(opt.value)}\n disabled={opt.disabled}\n className={twMerge(\n \"cursor-pointer\",\n \"data-[selected=true]:bg-gray-100 dark:data-[selected=true]:bg-slate-500\",\n opt.disabled &&\n \"pointer-events-auto! cursor-not-allowed hover:bg-transparent dark:hover:bg-slate-500\",\n )}\n role=\"option\"\n aria-selected={isSelected}\n >\n {selectionIcon === \"auto\" &&\n (multiple ? (\n <div\n className={twMerge(\n \"flex size-4 items-center justify-center rounded-md border\",\n \"border-gray-700 dark:border-slate-200\",\n isSelected &&\n \"bg-gray-900 text-gray-50 dark:bg-slate-50 dark:text-slate-900\",\n )}\n >\n {isSelected && <Icon name=\"Checkmark\" size={16} />}\n </div>\n ) : (\n <div\n className={twMerge(\n \"relative size-4 rounded-full border\",\n isSelected\n ? \"border-gray-900 dark:border-slate-50\"\n : \"border-gray-800 dark:border-slate-100\",\n \"bg-transparent\",\n )}\n >\n {isSelected && (\n <div className=\"absolute top-1/2 left-1/2 size-2.5 -translate-1/2 rounded-full bg-gray-900 dark:bg-slate-50\" />\n )}\n </div>\n ))}\n {selectionIcon === \"checkmark\" &&\n !(selectionIconPosition === \"right\" && hasAnyIcon) && (\n <div className=\"size-4\">\n {selectionIconPosition === \"left\" && isSelected && (\n <Icon\n name=\"Checkmark\"\n size={16}\n className=\"text-gray-900 dark:text-slate-50\"\n />\n )}\n </div>\n )}\n {renderIcon(opt.icon)}\n <span\n className={twMerge(\n \"flex-1 truncate text-sm/4 font-normal\",\n \"text-gray-700 dark:text-slate-200\",\n opt.disabled && \"text-gray-700 dark:text-slate-200\",\n )}\n >\n {opt.label}\n </span>\n {selectionIcon === \"checkmark\" &&\n selectionIconPosition === \"right\" && (\n <div className=\"size-4\">\n {isSelected && (\n <Icon\n name=\"Checkmark\"\n size={16}\n className=\"text-gray-900 dark:text-slate-50\"\n />\n )}\n </div>\n )}\n </CommandItem>\n );\n })}\n </>\n );\n};\n"],"mappings":";;;;;;AAkBA,MAAMI,cACJC,kBAIG;AACH,KAAI,OAAOA,kBAAkB,SAC3B,QACE,oBAAC,MAAD;EACE,MAAMA;EACN,MAAM;EACN,WAAWJ,QAAQ,oCAAoC;EACvD,CAAA;AAGN,QACEI,iBACE,oBAAC,eAAD,EACE,WAAWJ,QAAQ,UAAU,oCAAoC,EAEpE,CAAA;;AAIL,MAAaK,mBAAmD,EAC9DC,UAAU,EAAE,EACZC,gBACAC,UACAC,eACAC,uBACAC,YACAC,cACAC,eACI;AACJ,QACE,oBAAA,YAAA,EAAA,UACGP,QAAQQ,KAAKC,QAAQ;EACpB,MAAMC,aAAaT,eAAeU,SAASF,IAAIG,MAAM;AACrD,SACE,qBAAC,aAAD;GACYL;GAEV,OAAOE,IAAII;GACX,gBAAgB,CAACJ,IAAIK,YAAYR,aAAaG,IAAIG,MAAM;GACxD,UAAUH,IAAIK;GACd,WAAWpB,QACT,kBACA,2EACAe,IAAIK,YACF,uFACH;GACD,MAAK;GACL,iBAAeJ;aAbjB;IAeGP,kBAAkB,WAChBD,WACC,oBAAC,OAAD;KACE,WAAWR,QACT,6DACA,yCACAgB,cACE,gEACH;eAEAA,cAAc,oBAAC,MAAD;MAAM,MAAK;MAAY,MAAM;MAAM,CAAA;KAC9C,CAAA,GAEN,oBAAC,OAAD;KACE,WAAWhB,QACT,uCACAgB,aACI,yCACA,yCACJ,iBACD;eAEAA,cACC,oBAAC,OAAD,EAAK,WAAU,+FAChB,CAAA;KAEJ,CAAA;IACFP,kBAAkB,eACjB,EAAEC,0BAA0B,WAAWC,eACrC,oBAAC,OAAD;KAAK,WAAU;eACZD,0BAA0B,UAAUM,cACnC,oBAAC,MAAD;MACE,MAAK;MACL,MAAM;MACN,WAAU;MAEb,CAAA;KAEJ,CAAA;IACFb,WAAWY,IAAIM,KAAK;IACrB,oBAAC,QAAD;KACE,WAAWrB,QACT,yCACA,qCACAe,IAAIK,YAAY,oCACjB;eAEAL,IAAII;KACD,CAAA;IACLV,kBAAkB,eACjBC,0BAA0B,WACxB,oBAAC,OAAD;KAAK,WAAU;eACZM,cACC,oBAAC,MAAD;MACE,MAAK;MACL,MAAM;MACN,WAAU;MAEb,CAAA;KAEJ,CAAA;IACS;KA1EP,YAAYD,IAAIG,QA0ET;GAEhB,EACD,CAAA"}
@@ -1,4 +1,4 @@
1
- import { C as SelectProps } from "../../../index-BEiWWMW2.js";
1
+ import { C as SelectProps } from "../../../index--hDSfvJT.js";
2
2
  import * as react from "react";
3
3
 
4
4
  //#region src/ui/components/select-field/use-select-field.d.ts
@@ -0,0 +1,4 @@
1
+ import { a as NodeStatus, i as NodeSortType, n as NodeSortComparisonFn, o as SidebarIcon, r as NodeSortOrder, s as SidebarNode, t as FlattenedNode } from "../../../types-CNbvfWjh.js";
2
+ import { n as SidebarProps, t as Sidebar } from "../../../sidebar-DOoE4krt.js";
3
+ import { n as useSidebar, t as SidebarProvider } from "../../../sidebar-provider-C2eyz9TL.js";
4
+ export { FlattenedNode, NodeSortComparisonFn, NodeSortOrder, NodeSortType, NodeStatus, Sidebar, SidebarIcon, SidebarNode, SidebarProps, SidebarProvider, useSidebar };
@@ -0,0 +1,3 @@
1
+ import { SidebarProvider, useSidebar } from "./subcomponents/sidebar-provider/sidebar-provider.js";
2
+ import { Sidebar } from "./sidebar.js";
3
+ export { Sidebar, SidebarProvider, useSidebar };
@@ -0,0 +1,2 @@
1
+ import { n as SidebarProps, t as Sidebar } from "../../../sidebar-DOoE4krt.js";
2
+ export { Sidebar, SidebarProps };
@@ -0,0 +1,110 @@
1
+ import { t as Icon } from "../../../icon-C4QOpsdI.js";
2
+ import { triggerEvent } from "./utils.js";
3
+ import { useSidebar } from "./subcomponents/sidebar-provider/sidebar-provider.js";
4
+ import { SidebarContentArea } from "./subcomponents/sidebar-content-area.js";
5
+ import { SidebarHeader } from "./subcomponents/sidebar-header.js";
6
+ import { SidebarPinningArea } from "./subcomponents/sidebar-pinning-area.js";
7
+ import { SidebarSearch } from "./subcomponents/sidebar-search/sidebar-search.js";
8
+ import { useSidebarResize } from "./use-sidebar-resize.js";
9
+ import { useCallback, useEffect } from "react";
10
+ import { twMerge } from "tailwind-merge";
11
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
+ //#region src/ui/components/sidebar/sidebar.tsx
13
+ /**
14
+ * Sidebar component that provides a collapsible and resizable navigation panel
15
+ * with support for hierarchical data, search, pinning, and custom styling.
16
+ */
17
+ const Sidebar = ({ activeNodeId, onActiveNodeChange, nodes, sidebarIcon, sidebarTitle, defaultLevel = 1, enableMacros = 0, allowPinning = true, resizable = true, showSearchBar = true, showStatusFilter = false, extraFooterContent, initialWidth = 300, maxWidth, className, handleOnTitleClick, isLoading = false, nodeSortType, nodeSortOrder = "asc" }) => {
18
+ const { sidebarRef, startResizing, isResizing, isSidebarOpen, handleToggleSidebar } = useSidebarResize({
19
+ defaultWidth: initialWidth,
20
+ minWidth: 220,
21
+ maxWidth
22
+ });
23
+ const { pinnedNodePath, setNodes, openLevel, togglePin, syncActiveNodeId, setActiveNodeChangeCallback, nodes: providerNodes, nodeSortType: currentSortType, nodeSortOrder: currentSortOrder } = useSidebar();
24
+ useEffect(() => {
25
+ if (nodes) setNodes(nodes, nodeSortType, nodeSortOrder);
26
+ }, [
27
+ nodes,
28
+ setNodes,
29
+ nodeSortType,
30
+ nodeSortOrder
31
+ ]);
32
+ useEffect(() => {
33
+ if (!nodes && providerNodes.length > 0 && (nodeSortType !== currentSortType || nodeSortOrder !== currentSortOrder)) setNodes(providerNodes, nodeSortType, nodeSortOrder);
34
+ }, [
35
+ nodes,
36
+ providerNodes,
37
+ setNodes,
38
+ nodeSortType,
39
+ nodeSortOrder,
40
+ currentSortType,
41
+ currentSortOrder
42
+ ]);
43
+ useEffect(() => {
44
+ if (defaultLevel > 1) openLevel(defaultLevel);
45
+ }, [defaultLevel]);
46
+ const handleActiveNodeChange = useCallback((node) => {
47
+ onActiveNodeChange?.(node);
48
+ triggerEvent("sidebar:change", { node }, sidebarRef.current);
49
+ }, [onActiveNodeChange, sidebarRef]);
50
+ useEffect(() => {
51
+ syncActiveNodeId(activeNodeId);
52
+ }, [activeNodeId, syncActiveNodeId]);
53
+ useEffect(() => {
54
+ setActiveNodeChangeCallback(handleActiveNodeChange);
55
+ }, [handleActiveNodeChange, setActiveNodeChangeCallback]);
56
+ useEffect(() => {
57
+ const hasPinnedNodes = pinnedNodePath.length > 0;
58
+ if (!allowPinning && hasPinnedNodes) {
59
+ const lastPinnedNodeId = pinnedNodePath[pinnedNodePath.length - 1].id;
60
+ togglePin(lastPinnedNodeId);
61
+ }
62
+ }, [
63
+ allowPinning,
64
+ pinnedNodePath,
65
+ togglePin
66
+ ]);
67
+ return /* @__PURE__ */ jsxs("aside", {
68
+ ref: sidebarRef,
69
+ style: { width: "min(100%, var(--sidebar-width))" },
70
+ className: twMerge("group peer relative flex h-svh max-h-screen flex-col bg-gray-50 shadow-lg transition-[width] duration-75 ease-linear dark:bg-slate-600", isResizing && "transition-none", className),
71
+ children: [isSidebarOpen && /* @__PURE__ */ jsxs(Fragment$1, { children: [
72
+ /* @__PURE__ */ jsx(SidebarHeader, {
73
+ sidebarTitle,
74
+ sidebarIcon,
75
+ enableMacros,
76
+ handleOnTitleClick
77
+ }),
78
+ allowPinning && pinnedNodePath.length > 0 && /* @__PURE__ */ jsx(SidebarPinningArea, {}),
79
+ /* @__PURE__ */ jsx(SidebarContentArea, {
80
+ allowPinning,
81
+ isLoading
82
+ }),
83
+ showSearchBar && /* @__PURE__ */ jsx(SidebarSearch, { showStatusFilter }),
84
+ extraFooterContent && /* @__PURE__ */ jsx("div", {
85
+ className: "w-full border-t border-gray-300 p-2 dark:border-slate-800",
86
+ children: extraFooterContent
87
+ })
88
+ ] }), resizable && /* @__PURE__ */ jsx("div", {
89
+ className: "group/sidebar-resizer absolute top-0 right-0 h-full w-[10px] translate-x-1/2 cursor-ew-resize select-none",
90
+ onMouseDown: startResizing,
91
+ children: /* @__PURE__ */ jsx("div", {
92
+ className: twMerge("relative h-full w-px translate-x-[5px] transition-colors group-hover/sidebar-resizer:bg-gray-500 dark:group-hover/sidebar-resizer:bg-slate-600", isResizing && "cursor-default bg-blue-500", !isSidebarOpen && "bg-gray-300 dark:bg-slate-600"),
93
+ children: /* @__PURE__ */ jsx("button", {
94
+ type: "button",
95
+ className: twMerge("absolute top-14 right-0 size-4 translate-x-1/2 rounded-full bg-gray-500 dark:bg-slate-900", "opacity-0 transition-opacity group-hover/sidebar-resizer:opacity-100"),
96
+ onClick: handleToggleSidebar,
97
+ children: /* @__PURE__ */ jsx(Icon, {
98
+ name: "Caret",
99
+ size: 16,
100
+ className: twMerge("min-w-4 text-gray-50 dark:text-slate-500", isSidebarOpen && "-rotate-180")
101
+ })
102
+ })
103
+ })
104
+ })]
105
+ });
106
+ };
107
+ //#endregion
108
+ export { Sidebar };
109
+
110
+ //# sourceMappingURL=sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.js","names":["useCallback","useEffect","twMerge","Icon","SidebarContentArea","SidebarHeader","SidebarPinningArea","useSidebar","SidebarSearch","useSidebarResize","triggerEvent","Sidebar","activeNodeId","onActiveNodeChange","nodes","sidebarIcon","sidebarTitle","defaultLevel","enableMacros","allowPinning","resizable","showSearchBar","showStatusFilter","extraFooterContent","initialWidth","maxWidth","className","handleOnTitleClick","isLoading","nodeSortType","nodeSortOrder","sidebarRef","startResizing","isResizing","isSidebarOpen","handleToggleSidebar","defaultWidth","minWidth","pinnedNodePath","setNodes","openLevel","togglePin","syncActiveNodeId","setActiveNodeChangeCallback","providerNodes","currentSortType","currentSortOrder","length","handleActiveNodeChange","node","current","hasPinnedNodes","lastPinnedNodeId","id","width"],"sources":["../../../../src/ui/components/sidebar/sidebar.tsx"],"sourcesContent":["import { useCallback, useEffect } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Icon } from \"../../../powerhouse/index.js\";\nimport { SidebarContentArea } from \"./subcomponents/sidebar-content-area.js\";\nimport { SidebarHeader } from \"./subcomponents/sidebar-header.js\";\nimport { SidebarPinningArea } from \"./subcomponents/sidebar-pinning-area.js\";\nimport { useSidebar } from \"./subcomponents/sidebar-provider/index.js\";\nimport { SidebarSearch } from \"./subcomponents/sidebar-search/index.js\";\nimport type { NodeSortOrder, NodeSortType, SidebarNode } from \"./types.js\";\nimport { useSidebarResize } from \"./use-sidebar-resize.js\";\nimport { triggerEvent } from \"./utils.js\";\n\nexport interface SidebarProps {\n /**\n * The ID of the currently active node\n */\n activeNodeId?: string;\n /**\n * Callback function to update the active node\n */\n onActiveNodeChange?: (newNode: SidebarNode) => void;\n /**\n * The nodes to be displayed in the sidebar\n */\n nodes?: SidebarNode[];\n /**\n * Which level should be shown by default (i.e., level 1).\n * @default 1 It is 1-indexed.\n */\n defaultLevel?: number;\n /**\n * Enables the vertical resizing of the sidebar\n * @default true\n */\n resizable?: boolean;\n /**\n * Whether pinning functionality is enabled for nodes\n * @default true\n */\n allowPinning?: boolean;\n /**\n * Configurable levels (e.g., 4). If its zero, then no buttons are shown (default).\n * @default 0\n */\n enableMacros?: number;\n /**\n * Whether to display the search bar in the sidebar\n * @default true\n */\n showSearchBar?: boolean;\n /**\n * Whether to display the status filter button in the sidebar. This option is ignored if `showSearchBar` is `false`.\n * @default false\n */\n showStatusFilter?: boolean;\n /**\n * The title that appears at the top of the sidebar, providing context or a heading for the hierarchy displayed within it.\n */\n sidebarTitle?: string;\n /**\n * An optional icon that can be displayed next to the sidebar title or at the top of the sidebar.\n */\n sidebarIcon?: React.ReactNode;\n /**\n * An optional footer content that can be displayed at the bottom of the sidebar.\n */\n extraFooterContent?: React.ReactNode;\n /**\n * The initial width of the sidebar.\n * @default 300\n */\n initialWidth?: number;\n /**\n * The maximum width of the sidebar.\n */\n maxWidth?: number;\n /**\n * Optional className for the sidebar container\n */\n className?: string;\n\n /**\n * Callback function triggered when the sidebar title is clicked.\n */\n handleOnTitleClick?: () => void;\n\n /**\n * Whether the sidebar is in a loading state, displaying skeleton items\n * @default false\n */\n isLoading?: boolean;\n /**\n * The type of sorting to apply to all nodes recursively.\n * Can be \"alphabetical\", \"natural\", or a custom comparison function.\n * When undefined, nodes maintain their original order.\n * Affects all levels of the tree hierarchy.\n */\n nodeSortType?: NodeSortType;\n /**\n * The order direction for sorting nodes (\"asc\" or \"desc\").\n * Only applicable when nodeSortType is defined.\n * @default \"asc\"\n */\n nodeSortOrder?: NodeSortOrder;\n}\n\n/**\n * Sidebar component that provides a collapsible and resizable navigation panel\n * with support for hierarchical data, search, pinning, and custom styling.\n */\nexport const Sidebar: React.FC<SidebarProps> = ({\n activeNodeId,\n onActiveNodeChange,\n nodes,\n sidebarIcon,\n sidebarTitle,\n defaultLevel = 1,\n enableMacros = 0,\n allowPinning = true,\n resizable = true,\n showSearchBar = true,\n showStatusFilter = false,\n extraFooterContent,\n initialWidth = 300,\n maxWidth,\n className,\n handleOnTitleClick,\n isLoading = false,\n nodeSortType,\n nodeSortOrder = \"asc\",\n}) => {\n const {\n sidebarRef,\n startResizing,\n isResizing,\n isSidebarOpen,\n handleToggleSidebar,\n } = useSidebarResize({\n defaultWidth: initialWidth,\n minWidth: 220,\n maxWidth,\n });\n\n const {\n pinnedNodePath,\n setNodes,\n openLevel,\n togglePin,\n syncActiveNodeId,\n setActiveNodeChangeCallback,\n nodes: providerNodes,\n nodeSortType: currentSortType,\n nodeSortOrder: currentSortOrder,\n } = useSidebar();\n\n useEffect(() => {\n if (nodes) {\n setNodes(nodes, nodeSortType, nodeSortOrder);\n }\n }, [nodes, setNodes, nodeSortType, nodeSortOrder]);\n\n useEffect(() => {\n if (\n !nodes &&\n providerNodes.length > 0 &&\n (nodeSortType !== currentSortType || nodeSortOrder !== currentSortOrder)\n ) {\n setNodes(providerNodes, nodeSortType, nodeSortOrder);\n }\n }, [\n nodes,\n providerNodes,\n setNodes,\n nodeSortType,\n nodeSortOrder,\n currentSortType,\n currentSortOrder,\n ]);\n\n // Initialize default expanded level on mount.\n // openLevel intentionally omitted — it changes every time currentRoots\n // changes, which would cause an infinite loop.\n useEffect(() => {\n if (defaultLevel > 1) {\n openLevel(defaultLevel);\n }\n }, [defaultLevel]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleActiveNodeChange = useCallback(\n (node: SidebarNode) => {\n onActiveNodeChange?.(node);\n triggerEvent(\"sidebar:change\", { node }, sidebarRef.current);\n },\n [onActiveNodeChange, sidebarRef],\n );\n useEffect(() => {\n syncActiveNodeId(activeNodeId);\n }, [activeNodeId, syncActiveNodeId]);\n\n useEffect(() => {\n setActiveNodeChangeCallback(handleActiveNodeChange);\n }, [handleActiveNodeChange, setActiveNodeChangeCallback]);\n\n useEffect(() => {\n const hasPinnedNodes = pinnedNodePath.length > 0;\n if (!allowPinning && hasPinnedNodes) {\n const lastPinnedNodeId = pinnedNodePath[pinnedNodePath.length - 1].id;\n togglePin(lastPinnedNodeId);\n }\n }, [allowPinning, pinnedNodePath, togglePin]);\n\n return (\n <aside\n ref={sidebarRef}\n style={{ width: \"min(100%, var(--sidebar-width))\" }}\n className={twMerge(\n \"group peer relative flex h-svh max-h-screen flex-col bg-gray-50 shadow-lg transition-[width] duration-75 ease-linear dark:bg-slate-600\",\n isResizing && \"transition-none\",\n className,\n )}\n >\n {isSidebarOpen && (\n <>\n <SidebarHeader\n sidebarTitle={sidebarTitle}\n sidebarIcon={sidebarIcon}\n enableMacros={enableMacros}\n handleOnTitleClick={handleOnTitleClick}\n />\n\n {allowPinning && pinnedNodePath.length > 0 && <SidebarPinningArea />}\n <SidebarContentArea\n allowPinning={allowPinning}\n isLoading={isLoading}\n />\n {showSearchBar && (\n <SidebarSearch showStatusFilter={showStatusFilter} />\n )}\n {extraFooterContent && (\n <div className=\"w-full border-t border-gray-300 p-2 dark:border-slate-800\">\n {extraFooterContent}\n </div>\n )}\n </>\n )}\n\n {resizable && (\n <div\n className=\"group/sidebar-resizer absolute top-0 right-0 h-full w-[10px] translate-x-1/2 cursor-ew-resize select-none\"\n onMouseDown={startResizing}\n >\n <div\n className={twMerge(\n \"relative h-full w-px translate-x-[5px] transition-colors group-hover/sidebar-resizer:bg-gray-500 dark:group-hover/sidebar-resizer:bg-slate-600\",\n isResizing && \"cursor-default bg-blue-500\",\n !isSidebarOpen && \"bg-gray-300 dark:bg-slate-600\",\n )}\n >\n <button\n type=\"button\"\n className={twMerge(\n \"absolute top-14 right-0 size-4 translate-x-1/2 rounded-full bg-gray-500 dark:bg-slate-900\",\n \"opacity-0 transition-opacity group-hover/sidebar-resizer:opacity-100\",\n )}\n onClick={handleToggleSidebar}\n >\n <Icon\n name=\"Caret\"\n size={16}\n className={twMerge(\n \"min-w-4 text-gray-50 dark:text-slate-500\",\n isSidebarOpen && \"-rotate-180\",\n )}\n />\n </button>\n </div>\n </div>\n )}\n </aside>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;AA8GA,MAAaW,WAAmC,EAC9CC,cACAC,oBACAC,OACAC,aACAC,cACAC,eAAe,GACfC,eAAe,GACfC,eAAe,MACfC,YAAY,MACZC,gBAAgB,MAChBC,mBAAmB,OACnBC,oBACAC,eAAe,KACfC,UACAC,WACAC,oBACAC,YAAY,OACZC,cACAC,gBAAgB,YACZ;CACJ,MAAM,EACJC,YACAC,eACAC,YACAC,eACAC,wBACE1B,iBAAiB;EACnB2B,cAAcZ;EACda,UAAU;EACVZ;EACD,CAAC;CAEF,MAAM,EACJa,gBACAC,UACAC,WACAC,WACAC,kBACAC,6BACA7B,OAAO8B,eACPf,cAAcgB,iBACdf,eAAegB,qBACbvC,YAAY;AAEhBN,iBAAgB;AACd,MAAIa,MACFyB,UAASzB,OAAOe,cAAcC,cAAc;IAE7C;EAAChB;EAAOyB;EAAUV;EAAcC;EAAc,CAAC;AAElD7B,iBAAgB;AACd,MACE,CAACa,SACD8B,cAAcG,SAAS,MACtBlB,iBAAiBgB,mBAAmBf,kBAAkBgB,kBAEvDP,UAASK,eAAef,cAAcC,cAAc;IAErD;EACDhB;EACA8B;EACAL;EACAV;EACAC;EACAe;EACAC;EACD,CAAC;AAKF7C,iBAAgB;AACd,MAAIgB,eAAe,EACjBuB,WAAUvB,aAAa;IAExB,CAACA,aAAa,CAAC;CAElB,MAAM+B,yBAAyBhD,aAC5BiD,SAAsB;AACrBpC,uBAAqBoC,KAAK;AAC1BvC,eAAa,kBAAkB,EAAEuC,MAAM,EAAElB,WAAWmB,QAAQ;IAE9D,CAACrC,oBAAoBkB,WACvB,CAAC;AACD9B,iBAAgB;AACdyC,mBAAiB9B,aAAa;IAC7B,CAACA,cAAc8B,iBAAiB,CAAC;AAEpCzC,iBAAgB;AACd0C,8BAA4BK,uBAAuB;IAClD,CAACA,wBAAwBL,4BAA4B,CAAC;AAEzD1C,iBAAgB;EACd,MAAMkD,iBAAiBb,eAAeS,SAAS;AAC/C,MAAI,CAAC5B,gBAAgBgC,gBAAgB;GACnC,MAAMC,mBAAmBd,eAAeA,eAAeS,SAAS,GAAGM;AACnEZ,aAAUW,iBAAiB;;IAE5B;EAACjC;EAAcmB;EAAgBG;EAAU,CAAC;AAE7C,QACE,qBAAC,SAAD;EACE,KAAKV;EACL,OAAO,EAAEuB,OAAO,mCAAmC;EACnD,WAAWpD,QACT,0IACA+B,cAAc,mBACdP,UACD;YAPH,CASGQ,iBACC,qBAAA,YAAA,EAAA,UAAA;GACE,oBAAC,eAAD;IACgBlB;IACDD;IACCG;IACMS;IAAmB,CAAA;GAGxCR,gBAAgBmB,eAAeS,SAAS,KAAK,oBAAC,oBAAD,EAAsB,CAAA;GACpE,oBAAC,oBAAD;IACgB5B;IACHS;IAAU,CAAA;GAEtBP,iBACC,oBAAC,eAAD,EAAiCC,kBAClC,CAAA;GACAC,sBACC,oBAAC,OAAD;IAAK,WAAU;cACZA;IAEJ,CAAA;GAEJ,EAAA,CAAA,EAEAH,aACC,oBAAC,OAAD;GACE,WAAU;GACV,aAAaY;aAEb,oBAAC,OAAD;IACE,WAAW9B,QACT,kJACA+B,cAAc,8BACd,CAACC,iBAAiB,gCACnB;cAED,oBAAC,UAAD;KACE,MAAK;KACL,WAAWhC,QACT,6FACA,uEACD;KACD,SAASiC;eAET,oBAAC,MAAD;MACE,MAAK;MACL,MAAM;MACN,WAAWjC,QACT,4CACAgC,iBAAiB,cAClB;MAAC,CAAA;KAEE,CAAA;IACL,CAAA;GAER,CAAA,CACK"}
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+
3
+ //#region src/ui/components/sidebar/subcomponents/sidebar-content-area.d.ts
4
+ interface SidebarContentAreaProps {
5
+ allowPinning?: boolean;
6
+ isLoading?: boolean;
7
+ }
8
+ declare const SidebarContentArea: ({
9
+ allowPinning,
10
+ isLoading
11
+ }: SidebarContentAreaProps) => react_jsx_runtime0.JSX.Element;
12
+ //#endregion
13
+ export { SidebarContentArea };
14
+ //# sourceMappingURL=sidebar-content-area.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-content-area.d.ts","names":[],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-content-area.tsx"],"mappings":";;;UAOU,uBAAA;EACR,YAAA;EACA,SAAA;AAAA;AAAA,cAGW,kBAAA;EAAsB,YAAA;EAAA;AAAA,GAGhC,uBAAA,KAAuB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -0,0 +1,56 @@
1
+ import { t as Icon } from "../../../../icon-C4QOpsdI.js";
2
+ import { SidebarItem } from "./sidebar-item.js";
3
+ import { useSidebar } from "./sidebar-provider/sidebar-provider.js";
4
+ import { SidebarSkeleton } from "./sidebar-skeleton.js";
5
+ import { twMerge } from "tailwind-merge";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { AutoSizer, List } from "react-virtualized";
8
+ //#region src/ui/components/sidebar/subcomponents/sidebar-content-area.tsx
9
+ const SidebarContentArea = ({ allowPinning, isLoading }) => {
10
+ const { flattenedNodes, toggleNode, togglePin, searchTerm, searchResults, activeSearchIndex, pinnedNodePath, activeNodeId, virtualListRef, onActiveNodeChange } = useSidebar();
11
+ const hasPinnedItems = allowPinning && pinnedNodePath.length > 0;
12
+ const renderNode = ({ index, key, style }) => {
13
+ const node = flattenedNodes[index];
14
+ return /* @__PURE__ */ jsx(SidebarItem, {
15
+ node,
16
+ toggleNode,
17
+ togglePin,
18
+ searchTerm,
19
+ searchResults,
20
+ activeSearchIndex,
21
+ allowPinning: allowPinning ?? false,
22
+ isActive: activeNodeId === node.id,
23
+ onChange: onActiveNodeChange,
24
+ style
25
+ }, key);
26
+ };
27
+ return /* @__PURE__ */ jsx("div", {
28
+ className: twMerge("flex flex-1 flex-col gap-1 overflow-y-auto", hasPinnedItems && "pt-0.5"),
29
+ children: isLoading ? /* @__PURE__ */ jsx(SidebarSkeleton, {}) : flattenedNodes.length === 0 ? /* @__PURE__ */ jsxs("div", {
30
+ className: "flex max-w-full items-center gap-2 p-2 text-sm/5 text-gray-400 dark:text-slate-400",
31
+ children: [/* @__PURE__ */ jsx(Icon, {
32
+ name: "TreeViewSlash",
33
+ size: 16,
34
+ className: "min-w-4"
35
+ }), /* @__PURE__ */ jsx("span", {
36
+ className: "truncate",
37
+ children: "This node is empty"
38
+ })]
39
+ }) : /* @__PURE__ */ jsx("div", {
40
+ className: "flex-1 overflow-hidden",
41
+ children: /* @__PURE__ */ jsx(AutoSizer, { children: ({ width, height }) => /* @__PURE__ */ jsx(List, {
42
+ ref: virtualListRef,
43
+ className: "p-2",
44
+ width,
45
+ height,
46
+ rowCount: flattenedNodes.length,
47
+ rowHeight: 40,
48
+ rowRenderer: renderNode
49
+ }) })
50
+ })
51
+ });
52
+ };
53
+ //#endregion
54
+ export { SidebarContentArea };
55
+
56
+ //# sourceMappingURL=sidebar-content-area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-content-area.js","names":["AutoSizer","List","twMerge","SidebarItem","useSidebar","SidebarSkeleton","Icon","SidebarContentArea","allowPinning","isLoading","flattenedNodes","toggleNode","togglePin","searchTerm","searchResults","activeSearchIndex","pinnedNodePath","activeNodeId","virtualListRef","onActiveNodeChange","hasPinnedItems","length","renderNode","index","key","style","node","id","width","height"],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-content-area.tsx"],"sourcesContent":["import { AutoSizer, List } from \"react-virtualized\";\nimport { twMerge } from \"tailwind-merge\";\nimport { SidebarItem } from \"./sidebar-item.js\";\nimport { useSidebar } from \"./sidebar-provider/index.js\";\nimport { SidebarSkeleton } from \"./sidebar-skeleton.js\";\nimport { Icon } from \"../../../../powerhouse/index.js\";\n\ninterface SidebarContentAreaProps {\n allowPinning?: boolean;\n isLoading?: boolean;\n}\n\nexport const SidebarContentArea = ({\n allowPinning,\n isLoading,\n}: SidebarContentAreaProps) => {\n const {\n flattenedNodes,\n toggleNode,\n togglePin,\n searchTerm,\n searchResults,\n activeSearchIndex,\n pinnedNodePath,\n activeNodeId,\n virtualListRef,\n onActiveNodeChange,\n } = useSidebar();\n const hasPinnedItems = allowPinning && pinnedNodePath.length > 0;\n\n const renderNode = ({\n index,\n key,\n style,\n }: {\n index: number;\n key: string;\n style: React.CSSProperties;\n }) => {\n const node = flattenedNodes[index];\n\n return (\n <SidebarItem\n key={key}\n node={node}\n toggleNode={toggleNode}\n togglePin={togglePin}\n searchTerm={searchTerm}\n searchResults={searchResults}\n activeSearchIndex={activeSearchIndex}\n allowPinning={allowPinning ?? false}\n isActive={activeNodeId === node.id}\n onChange={onActiveNodeChange}\n style={style}\n />\n );\n };\n\n return (\n <div\n className={twMerge(\n \"flex flex-1 flex-col gap-1 overflow-y-auto\",\n hasPinnedItems && \"pt-0.5\",\n )}\n >\n {isLoading ? (\n <SidebarSkeleton />\n ) : flattenedNodes.length === 0 ? (\n <div className=\"flex max-w-full items-center gap-2 p-2 text-sm/5 text-gray-400 dark:text-slate-400\">\n <Icon name=\"TreeViewSlash\" size={16} className=\"min-w-4\" />\n <span className=\"truncate\">This node is empty</span>\n </div>\n ) : (\n <div className=\"flex-1 overflow-hidden\">\n <AutoSizer>\n {({ width, height }) => (\n <List\n ref={virtualListRef}\n className=\"p-2\"\n width={width}\n height={height}\n rowCount={flattenedNodes.length}\n rowHeight={32 + 8}\n rowRenderer={renderNode}\n />\n )}\n </AutoSizer>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;AAYA,MAAaO,sBAAsB,EACjCC,cACAC,gBAC6B;CAC7B,MAAM,EACJC,gBACAC,YACAC,WACAC,YACAC,eACAC,mBACAC,gBACAC,cACAC,gBACAC,uBACEf,YAAY;CAChB,MAAMgB,iBAAiBZ,gBAAgBQ,eAAeK,SAAS;CAE/D,MAAMC,cAAc,EAClBC,OACAC,KACAC,YAKI;EACJ,MAAMC,OAAOhB,eAAea;AAE5B,SACE,oBAAC,aAAD;GAEQG;GACMf;GACDC;GACCC;GACGC;GACIC;GACnB,cAAcP,gBAAgB;GAC9B,UAAUS,iBAAiBS,KAAKC;GAChC,UAAUR;GACHM;GACP,EAXKD,IAWL;;AAIN,QACE,oBAAC,OAAD;EACE,WAAWtB,QACT,8CACAkB,kBAAkB,SACnB;YAEAX,YACC,oBAAC,iBAAD,EAAmB,CAAA,GACjBC,eAAeW,WAAW,IAC5B,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,MAAD;IAAM,MAAK;IAAgB,MAAM;IAAI,WAAU;IAAS,CAAA,EACxD,oBAAC,QAAD;IAAM,WAAU;cAAW;IAAwB,CAAA,CAC/C;OAEN,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,WAAD,EAAA,WACI,EAAEO,OAAOC,aACT,oBAAC,MAAD;IACE,KAAKX;IACL,WAAU;IACHU;IACCC;IACR,UAAUnB,eAAeW;IACzB,WAAW;IACX,aAAaC;IAEhB,CAAA,EACQ,CAAA;GAEd,CAAA;EACG,CAAA"}
@@ -0,0 +1,11 @@
1
+ //#region src/ui/components/sidebar/subcomponents/sidebar-header.d.ts
2
+ interface SidebarHeaderProps {
3
+ sidebarTitle?: string;
4
+ sidebarIcon?: React.ReactNode;
5
+ enableMacros?: number;
6
+ handleOnTitleClick?: () => void;
7
+ }
8
+ declare const SidebarHeader: React.FC<SidebarHeaderProps>;
9
+ //#endregion
10
+ export { SidebarHeader };
11
+ //# sourceMappingURL=sidebar-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-header.d.ts","names":[],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-header.tsx"],"mappings":";UAGU,kBAAA;EACR,YAAA;EACA,WAAA,GAAc,KAAA,CAAM,SAAA;EACpB,YAAA;EACA,kBAAA;AAAA;AAAA,cAGW,aAAA,EAAe,KAAA,CAAM,EAAA,CAAG,kBAAA"}
@@ -0,0 +1,45 @@
1
+ import { useSidebar } from "./sidebar-provider/sidebar-provider.js";
2
+ import { twMerge } from "tailwind-merge";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/ui/components/sidebar/subcomponents/sidebar-header.tsx
5
+ const SidebarHeader = ({ sidebarTitle, sidebarIcon, enableMacros = 0, handleOnTitleClick }) => {
6
+ const { maxDepth, openLevel } = useSidebar();
7
+ if (!sidebarTitle && !sidebarIcon && !enableMacros) return null;
8
+ let titleElement;
9
+ const baseTitleClasses = "truncate text-sm font-semibold text-gray-700 dark:text-slate-300";
10
+ if (handleOnTitleClick) titleElement = /* @__PURE__ */ jsx("button", {
11
+ type: "button",
12
+ className: twMerge(baseTitleClasses, "cursor-pointer"),
13
+ onClick: handleOnTitleClick,
14
+ children: sidebarTitle
15
+ });
16
+ else titleElement = /* @__PURE__ */ jsx("div", {
17
+ className: baseTitleClasses,
18
+ children: sidebarTitle
19
+ });
20
+ return /* @__PURE__ */ jsxs("header", {
21
+ className: "flex items-center justify-between gap-2 border-b border-gray-300 bg-gray-50 p-4 dark:border-slate-800 dark:bg-slate-600",
22
+ children: [/* @__PURE__ */ jsxs("div", {
23
+ className: "flex items-center gap-2 truncate",
24
+ children: [sidebarIcon, titleElement]
25
+ }), enableMacros > 0 && /* @__PURE__ */ jsx("div", {
26
+ className: "flex items-center gap-2 select-none",
27
+ children: Array.from({ length: Math.min(enableMacros, 4) }).map((_, index) => {
28
+ const isDisabled = index + 1 > maxDepth;
29
+ return /* @__PURE__ */ jsx("div", {
30
+ role: "button",
31
+ tabIndex: 0,
32
+ className: twMerge("w-[26px] rounded-lg bg-gray-50 p-1 text-center text-xs text-gray-100 dark:bg-slate-900 dark:text-slate-200", !isDisabled && "hover:bg-gray-100 hover:text-gray-200 dark:hover:bg-slate-600 dark:hover:text-slate-50", isDisabled && "cursor-not-allowed bg-gray-100 text-[#E2E4E7] dark:bg-[#252728] dark:text-slate-500"),
33
+ onClick: () => {
34
+ if (!isDisabled) openLevel(index + 1);
35
+ },
36
+ children: index + 1
37
+ }, `macro-${index}`);
38
+ })
39
+ })]
40
+ });
41
+ };
42
+ //#endregion
43
+ export { SidebarHeader };
44
+
45
+ //# sourceMappingURL=sidebar-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-header.js","names":["twMerge","useSidebar","SidebarHeader","sidebarTitle","sidebarIcon","enableMacros","handleOnTitleClick","maxDepth","openLevel","titleElement","baseTitleClasses","Array","from","length","Math","min","map","_","index","isDisabled"],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-header.tsx"],"sourcesContent":["import { twMerge } from \"tailwind-merge\";\nimport { useSidebar } from \"./sidebar-provider/index.js\";\n\ninterface SidebarHeaderProps {\n sidebarTitle?: string;\n sidebarIcon?: React.ReactNode;\n enableMacros?: number;\n handleOnTitleClick?: () => void;\n}\n\nexport const SidebarHeader: React.FC<SidebarHeaderProps> = ({\n sidebarTitle,\n sidebarIcon,\n enableMacros = 0,\n handleOnTitleClick,\n}) => {\n const { maxDepth, openLevel } = useSidebar();\n if (!sidebarTitle && !sidebarIcon && !enableMacros) {\n return null;\n }\n let titleElement;\n const baseTitleClasses =\n \"truncate text-sm font-semibold text-gray-700 dark:text-slate-300\";\n if (handleOnTitleClick) {\n titleElement = (\n <button\n type=\"button\"\n className={twMerge(baseTitleClasses, \"cursor-pointer\")}\n onClick={handleOnTitleClick}\n >\n {sidebarTitle}\n </button>\n );\n } else {\n titleElement = <div className={baseTitleClasses}>{sidebarTitle}</div>;\n }\n\n return (\n <header className=\"flex items-center justify-between gap-2 border-b border-gray-300 bg-gray-50 p-4 dark:border-slate-800 dark:bg-slate-600\">\n <div className=\"flex items-center gap-2 truncate\">\n {sidebarIcon}\n {titleElement}\n </div>\n\n {enableMacros > 0 && (\n <div className=\"flex items-center gap-2 select-none\">\n {Array.from({ length: Math.min(enableMacros, 4) }).map((_, index) => {\n const isDisabled = index + 1 > maxDepth;\n\n return (\n <div\n key={`macro-${index}`}\n role=\"button\"\n tabIndex={0}\n className={twMerge(\n \"w-[26px] rounded-lg bg-gray-50 p-1 text-center text-xs text-gray-100 dark:bg-slate-900 dark:text-slate-200\",\n !isDisabled &&\n \"hover:bg-gray-100 hover:text-gray-200 dark:hover:bg-slate-600 dark:hover:text-slate-50\",\n isDisabled &&\n \"cursor-not-allowed bg-gray-100 text-[#E2E4E7] dark:bg-[#252728] dark:text-slate-500\",\n )}\n onClick={() => {\n if (!isDisabled) {\n openLevel(index + 1);\n }\n }}\n >\n {index + 1}\n </div>\n );\n })}\n </div>\n )}\n </header>\n );\n};\n"],"mappings":";;;;AAUA,MAAaE,iBAA+C,EAC1DC,cACAC,aACAC,eAAe,GACfC,yBACI;CACJ,MAAM,EAAEC,UAAUC,cAAcP,YAAY;AAC5C,KAAI,CAACE,gBAAgB,CAACC,eAAe,CAACC,aACpC,QAAO;CAET,IAAII;CACJ,MAAMC,mBACJ;AACF,KAAIJ,mBACFG,gBACE,oBAAC,UAAD;EACE,MAAK;EACL,WAAWT,QAAQU,kBAAkB,iBAAiB;EACtD,SAASJ;YAERH;EAEJ,CAAA;KAEDM,gBAAe,oBAAC,OAAD;EAAK,WAAWC;YAAmBP;EAAmB,CAAA;AAGvE,QACE,qBAAC,UAAD;EAAQ,WAAU;YAAlB,CACE,qBAAC,OAAD;GAAK,WAAU;aAAf,CACGC,aACAK,aACE;MAEJJ,eAAe,KACd,oBAAC,OAAD;GAAK,WAAU;aACZM,MAAMC,KAAK,EAAEC,QAAQC,KAAKC,IAAIV,cAAc,EAAC,EAAG,CAAC,CAACW,KAAKC,GAAGC,UAAU;IACnE,MAAMC,aAAaD,QAAQ,IAAIX;AAE/B,WACE,oBAAC,OAAD;KAEE,MAAK;KACL,UAAU;KACV,WAAWP,QACT,8GACA,CAACmB,cACC,0FACFA,cACE,sFACH;KACD,eAAe;AACb,UAAI,CAACA,WACHX,WAAUU,QAAQ,EAAE;;eAIvBA,QAAQ;KACL,EAjBC,SAASA,QAiBV;KAER;GAEL,CAAA,CACM"}
@@ -0,0 +1,35 @@
1
+ import { s as SidebarNode, t as FlattenedNode } from "../../../../types-CNbvfWjh.js";
2
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
+
4
+ //#region src/ui/components/sidebar/subcomponents/sidebar-item.d.ts
5
+ interface SidebarItemProps {
6
+ node: FlattenedNode;
7
+ toggleNode?: (nodeId: string) => void;
8
+ togglePin: (nodeId: string) => void;
9
+ searchTerm: string;
10
+ searchResults: SidebarNode[];
11
+ activeSearchIndex: number;
12
+ allowPinning: boolean;
13
+ pinnedMode?: boolean;
14
+ isPinned?: boolean;
15
+ isActive?: boolean;
16
+ style?: React.CSSProperties;
17
+ onChange?: (node: SidebarNode) => void;
18
+ }
19
+ declare const SidebarItem: ({
20
+ node,
21
+ toggleNode,
22
+ togglePin,
23
+ searchTerm,
24
+ searchResults,
25
+ activeSearchIndex,
26
+ allowPinning,
27
+ pinnedMode,
28
+ isPinned,
29
+ isActive,
30
+ style,
31
+ onChange
32
+ }: SidebarItemProps) => react_jsx_runtime0.JSX.Element;
33
+ //#endregion
34
+ export { SidebarItem };
35
+ //# sourceMappingURL=sidebar-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-item.d.ts","names":[],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-item.tsx"],"mappings":";;;;UAWU,gBAAA;EACR,IAAA,EAAM,aAAA;EACN,UAAA,IAAc,MAAA;EACd,SAAA,GAAY,MAAA;EACZ,UAAA;EACA,aAAA,EAAe,WAAA;EACf,iBAAA;EACA,YAAA;EACA,UAAA;EACA,QAAA;EACA,QAAA;EACA,KAAA,GAAQ,KAAA,CAAM,aAAA;EACd,QAAA,IAAY,IAAA,EAAM,WAAA;AAAA;AAAA,cAMP,WAAA;EAAe,IAAA;EAAA,UAAA;EAAA,SAAA;EAAA,UAAA;EAAA,aAAA;EAAA,iBAAA;EAAA,YAAA;EAAA,UAAA;EAAA,QAAA;EAAA,QAAA;EAAA,KAAA;EAAA;AAAA,GAazB,gBAAA,KAAgB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -0,0 +1,156 @@
1
+ import { a as PinFilled, o as Pin, s as CaretDown, t as Icon } from "../../../../icon-C4QOpsdI.js";
2
+ import { Tooltip, TooltipProvider as Provider } from "../../tooltip/tooltip.js";
3
+ import { NodeStatus } from "../types.js";
4
+ import { useEllipsis } from "../use-ellipsis.js";
5
+ import { StatusIcon } from "./status-icon.js";
6
+ import { cloneElement, forwardRef, useMemo, useRef } from "react";
7
+ import { twMerge } from "tailwind-merge";
8
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/ui/components/sidebar/subcomponents/sidebar-item.tsx
10
+ const TOOLTIP_DELAY = 700;
11
+ const TOOLTIP_DELAY_LONG = 1728e5;
12
+ const SidebarItem = ({ node, toggleNode, togglePin, searchTerm, searchResults, activeSearchIndex, allowPinning, pinnedMode = false, isPinned = false, isActive = false, style, onChange }) => {
13
+ const paddingLeft = node.depth * 24;
14
+ const isSearchActive = searchResults.length > 0 && searchResults[activeSearchIndex].id === node.id;
15
+ const IconComponent = node.isExpanded ? node.expandedIcon ?? node.icon : node.icon;
16
+ const isDescendenceModified = useMemo(() => {
17
+ const check = (n) => {
18
+ if (n.status !== NodeStatus.UNCHANGED && n.status) return true;
19
+ if (n.children && n.children.length > 0) return n.children.some((child) => check(child));
20
+ return false;
21
+ };
22
+ return check(node);
23
+ }, [node]);
24
+ const hasStatus = node.status && node.status !== NodeStatus.UNCHANGED || isDescendenceModified;
25
+ const computedStyle = {
26
+ ...style,
27
+ paddingLeft
28
+ };
29
+ const ellipsisRef = useRef(null);
30
+ const hasEllipsis = useEllipsis(ellipsisRef);
31
+ return /* @__PURE__ */ jsx(Provider, { children: /* @__PURE__ */ jsx(Tooltip, {
32
+ content: node.title,
33
+ triggerAsChild: true,
34
+ side: "bottom",
35
+ delayDuration: hasEllipsis ? TOOLTIP_DELAY : TOOLTIP_DELAY_LONG,
36
+ children: /* @__PURE__ */ jsx("div", {
37
+ style: computedStyle,
38
+ className: twMerge("group/sidebar-item-wrapper flex w-full items-center", !pinnedMode && "pb-2"),
39
+ children: /* @__PURE__ */ jsx("div", {
40
+ tabIndex: 0,
41
+ "data-testid": "sidebar-item",
42
+ id: `sidebar-item-${node.id}`,
43
+ className: twMerge("group/sidebar-item relative flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-gray-700 select-none hover:bg-gray-100 dark:text-slate-400 dark:hover:bg-slate-900", hasStatus && "pr-6", allowPinning && (hasStatus ? "hover:pr-12" : "hover:pr-6"), isPinned && (hasStatus ? "pr-12" : "pr-6"), isSearchActive && "bg-yellow-100 dark:bg-[#604B0033]", pinnedMode && "after:absolute after:-top-2.5 after:left-[15px] after:h-4 after:w-px after:bg-gray-300 first:group-first/sidebar-item-wrapper:after:hidden hover:bg-gray-50 dark:hover:bg-slate-600", isActive && "bg-gray-200 font-medium text-gray-900 hover:bg-gray-200 dark:bg-slate-900 dark:text-slate-50 dark:hover:bg-slate-900", node.className),
44
+ onClick: () => {
45
+ toggleNode?.(node.id);
46
+ onChange?.(node);
47
+ },
48
+ children: /* @__PURE__ */ jsxs("div", {
49
+ className: "flex max-w-full items-center gap-2",
50
+ children: [
51
+ !pinnedMode && /* @__PURE__ */ jsx("div", {
52
+ className: "-m-2 -mr-1 h-full rounded-md py-2 pr-1 pl-2 hover:bg-gray-200",
53
+ onClick: (e) => {
54
+ e.stopPropagation();
55
+ toggleNode?.(node.id);
56
+ },
57
+ children: /* @__PURE__ */ jsx(CaretDown, {
58
+ width: "16",
59
+ height: "16",
60
+ className: twMerge("min-w-4", node.isExpanded && node.children && node.children.length > 0 ? "" : "-rotate-90", node.children === void 0 || node.children.length === 0 ? "text-gray-300 dark:text-slate-500" : "text-gray-700 dark:text-slate-400")
61
+ })
62
+ }),
63
+ IconComponent ? typeof IconComponent === "string" ? /* @__PURE__ */ jsx(Icon, {
64
+ name: IconComponent,
65
+ size: 16,
66
+ className: "min-w-4"
67
+ }) : /* @__PURE__ */ cloneElement(IconComponent, { className: "min-w-4 w-4" }) : pinnedMode ? /* @__PURE__ */ jsx(PinnedModeCircleIcon, { isPinned }) : null,
68
+ /* @__PURE__ */ jsx(RenderTitle, {
69
+ ref: ellipsisRef,
70
+ title: node.title,
71
+ searchTerm,
72
+ isSearchActive,
73
+ pinnedMode,
74
+ className: ""
75
+ }),
76
+ allowPinning && /* @__PURE__ */ jsx("div", {
77
+ className: twMerge("absolute top-1/2 flex -translate-y-1/2 items-center justify-center", hasStatus ? "right-8" : "right-2", isPinned ? "text-gray-700 hover:text-blue-900 dark:text-slate-50 dark:hover:text-blue-900" : "invisible text-gray-300 group-hover/sidebar-item:visible hover:text-gray-700 dark:text-slate-200 dark:hover:text-slate-100"),
78
+ onClick: (e) => {
79
+ e.stopPropagation();
80
+ togglePin(node.id);
81
+ },
82
+ children: isPinned ? /* @__PURE__ */ jsx(PinFilled, {
83
+ width: "16",
84
+ height: "16"
85
+ }) : /* @__PURE__ */ jsx(Pin, {
86
+ width: "16",
87
+ height: "16"
88
+ })
89
+ }),
90
+ hasStatus && /* @__PURE__ */ jsx("div", {
91
+ className: twMerge("absolute top-1/2 right-2 flex -translate-y-1/2 items-center justify-center", "text-gray-300 group-hover/sidebar-item:visible hover:text-gray-700 dark:text-slate-600 dark:hover:text-slate-500"),
92
+ onClick: (e) => {
93
+ e.stopPropagation();
94
+ togglePin(node.id);
95
+ },
96
+ children: /* @__PURE__ */ jsx(StatusIcon, {
97
+ status: node.status ?? NodeStatus.UNCHANGED,
98
+ isDescendenceModified
99
+ })
100
+ })
101
+ ]
102
+ })
103
+ })
104
+ })
105
+ }) });
106
+ };
107
+ const RenderTitle = /* @__PURE__ */ forwardRef(({ title, searchTerm, isSearchActive, pinnedMode, className }, ref) => {
108
+ return /* @__PURE__ */ jsx("div", {
109
+ ref,
110
+ className: twMerge("truncate text-sm/5", className),
111
+ children: searchTerm && title.toLowerCase().includes(searchTerm.toLowerCase()) && !pinnedMode ? (() => {
112
+ const highlightClass = isSearchActive ? "bg-yellow-300 dark:bg-[#604B00]" : "bg-gray-300 dark:bg-slate-800";
113
+ const parts = [];
114
+ let remaining = title;
115
+ const lowerTerm = searchTerm.toLowerCase();
116
+ let i = 0;
117
+ while (remaining.length > 0) {
118
+ const idx = remaining.toLowerCase().indexOf(lowerTerm);
119
+ if (idx === -1) {
120
+ parts.push(remaining);
121
+ break;
122
+ }
123
+ if (idx > 0) parts.push(remaining.slice(0, idx));
124
+ parts.push(/* @__PURE__ */ jsx("span", {
125
+ className: highlightClass,
126
+ children: remaining.slice(idx, idx + searchTerm.length)
127
+ }, i++));
128
+ remaining = remaining.slice(idx + searchTerm.length);
129
+ }
130
+ return /* @__PURE__ */ jsx(Fragment$1, { children: parts });
131
+ })() : title
132
+ });
133
+ });
134
+ RenderTitle.displayName = "RenderTitle";
135
+ const PinnedModeCircleIcon = ({ isPinned }) => /* @__PURE__ */ jsxs("svg", {
136
+ width: "16",
137
+ height: "16",
138
+ viewBox: "0 0 16 16",
139
+ fill: "none",
140
+ xmlns: "http://www.w3.org/2000/svg",
141
+ className: "min-w-4",
142
+ children: [/* @__PURE__ */ jsx("rect", {
143
+ width: "16",
144
+ height: "16",
145
+ rx: "6.4",
146
+ fill: "transparent"
147
+ }), /* @__PURE__ */ jsx("path", {
148
+ d: "M12 8C12 10.2091 10.2091 12 8 12C5.79086 12 4 10.2091 4 8C4 5.79086 5.79086 4 8 4C10.2091 4 12 5.79086 12 8Z",
149
+ fill: "currentColor",
150
+ className: isPinned ? "text-gray-500 dark:text-slate-500" : "text-gray-300 dark:text-slate-300"
151
+ })]
152
+ });
153
+ //#endregion
154
+ export { SidebarItem };
155
+
156
+ //# sourceMappingURL=sidebar-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-item.js","names":["cloneElement","forwardRef","useMemo","useRef","twMerge","CaretDown","Pin","PinFilled","Tooltip","TooltipProvider","NodeStatus","useEllipsis","StatusIcon","Icon","TOOLTIP_DELAY","TOOLTIP_DELAY_LONG","SidebarItem","node","toggleNode","togglePin","searchTerm","searchResults","activeSearchIndex","allowPinning","pinnedMode","isPinned","isActive","style","onChange","paddingLeft","depth","isSearchActive","length","id","IconComponent","isExpanded","expandedIcon","icon","isDescendenceModified","check","n","status","UNCHANGED","children","some","child","hasStatus","computedStyle","ellipsisRef","hasEllipsis","title","className","e","stopPropagation","undefined","RenderTitle","ref","toLowerCase","includes","highlightClass","parts","remaining","lowerTerm","i","idx","indexOf","push","slice","displayName","PinnedModeCircleIcon"],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-item.tsx"],"sourcesContent":["import { cloneElement, forwardRef, useMemo, useRef } from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport CaretDown from \"../../../../powerhouse/components/icon-components/CaretDown.js\";\nimport Pin from \"../../../../powerhouse/components/icon-components/Pin.js\";\nimport PinFilled from \"../../../../powerhouse/components/icon-components/PinFilled.js\";\nimport { Tooltip, TooltipProvider } from \"../../tooltip/tooltip.js\";\nimport { type FlattenedNode, NodeStatus, type SidebarNode } from \"../types.js\";\nimport { useEllipsis } from \"../use-ellipsis.js\";\nimport { StatusIcon } from \"./status-icon.js\";\nimport { Icon } from \"../../../../powerhouse/index.js\";\n\ninterface SidebarItemProps {\n node: FlattenedNode;\n toggleNode?: (nodeId: string) => void;\n togglePin: (nodeId: string) => void;\n searchTerm: string;\n searchResults: SidebarNode[];\n activeSearchIndex: number;\n allowPinning: boolean;\n pinnedMode?: boolean;\n isPinned?: boolean;\n isActive?: boolean;\n style?: React.CSSProperties;\n onChange?: (node: SidebarNode) => void;\n}\n\nconst TOOLTIP_DELAY = 700;\nconst TOOLTIP_DELAY_LONG = 172800000; // 2 days to simulate no tooltip\n\nexport const SidebarItem = ({\n node,\n toggleNode,\n togglePin,\n searchTerm,\n searchResults,\n activeSearchIndex,\n allowPinning,\n pinnedMode = false,\n isPinned = false,\n isActive = false,\n style,\n onChange,\n}: SidebarItemProps) => {\n const paddingLeft = node.depth * 24;\n const isSearchActive =\n searchResults.length > 0 && searchResults[activeSearchIndex].id === node.id;\n const IconComponent = node.isExpanded\n ? (node.expandedIcon ?? node.icon)\n : node.icon;\n const isDescendenceModified = useMemo(() => {\n const check = (n: SidebarNode): boolean => {\n // Check current node's status first\n if (n.status !== NodeStatus.UNCHANGED && n.status) {\n return true;\n }\n\n // Then recursively check all children\n if (n.children && n.children.length > 0) {\n return n.children.some((child) => check(child));\n }\n\n return false;\n };\n\n return check(node);\n }, [node]);\n const hasStatus =\n (node.status && node.status !== NodeStatus.UNCHANGED) ||\n isDescendenceModified;\n\n const computedStyle = { ...style, paddingLeft };\n\n // Check if the title has ellipsis to determine if the tooltip should be delayed\n const ellipsisRef = useRef<HTMLDivElement | null>(null);\n const hasEllipsis = useEllipsis(ellipsisRef);\n\n return (\n <TooltipProvider>\n <Tooltip\n content={node.title}\n triggerAsChild\n side=\"bottom\"\n delayDuration={hasEllipsis ? TOOLTIP_DELAY : TOOLTIP_DELAY_LONG}\n >\n <div\n style={computedStyle}\n className={twMerge(\n \"group/sidebar-item-wrapper flex w-full items-center\",\n !pinnedMode && \"pb-2\",\n )}\n >\n <div\n tabIndex={0}\n data-testid=\"sidebar-item\"\n id={`sidebar-item-${node.id}`}\n className={twMerge(\n \"group/sidebar-item relative flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-gray-700 select-none hover:bg-gray-100 dark:text-slate-400 dark:hover:bg-slate-900\",\n hasStatus && \"pr-6\",\n allowPinning && (hasStatus ? \"hover:pr-12\" : \"hover:pr-6\"),\n isPinned && (hasStatus ? \"pr-12\" : \"pr-6\"),\n isSearchActive && \"bg-yellow-100 dark:bg-[#604B0033]\",\n // line between pinned items\n pinnedMode &&\n \"after:absolute after:-top-2.5 after:left-[15px] after:h-4 after:w-px after:bg-gray-300 first:group-first/sidebar-item-wrapper:after:hidden hover:bg-gray-50 dark:hover:bg-slate-600\",\n isActive &&\n \"bg-gray-200 font-medium text-gray-900 hover:bg-gray-200 dark:bg-slate-900 dark:text-slate-50 dark:hover:bg-slate-900\",\n node.className,\n )}\n onClick={() => {\n toggleNode?.(node.id);\n onChange?.(node);\n }}\n >\n <div className=\"flex max-w-full items-center gap-2\">\n {!pinnedMode && (\n <div\n className=\"-m-2 -mr-1 h-full rounded-md py-2 pr-1 pl-2 hover:bg-gray-200\"\n onClick={(e) => {\n e.stopPropagation();\n toggleNode?.(node.id);\n }}\n >\n <CaretDown\n width=\"16\"\n height=\"16\"\n className={twMerge(\n \"min-w-4\",\n node.isExpanded &&\n node.children &&\n node.children.length > 0\n ? \"\"\n : \"-rotate-90\",\n node.children === undefined || node.children.length === 0\n ? \"text-gray-300 dark:text-slate-500\"\n : \"text-gray-700 dark:text-slate-400\",\n )}\n />\n </div>\n )}\n\n {IconComponent ? (\n typeof IconComponent === \"string\" ? (\n <Icon name={IconComponent} size={16} className=\"min-w-4\" />\n ) : (\n // @ts-expect-error -- this is a workaround\n cloneElement(IconComponent, { className: \"min-w-4 w-4\" })\n )\n ) : pinnedMode ? (\n <PinnedModeCircleIcon isPinned={isPinned} />\n ) : null}\n\n <RenderTitle\n ref={ellipsisRef}\n title={node.title}\n searchTerm={searchTerm}\n isSearchActive={isSearchActive}\n pinnedMode={pinnedMode}\n className=\"\"\n />\n\n {allowPinning && (\n <div\n className={twMerge(\n \"absolute top-1/2 flex -translate-y-1/2 items-center justify-center\",\n hasStatus ? \"right-8\" : \"right-2\",\n isPinned\n ? \"text-gray-700 hover:text-blue-900 dark:text-slate-50 dark:hover:text-blue-900\"\n : \"invisible text-gray-300 group-hover/sidebar-item:visible hover:text-gray-700 dark:text-slate-200 dark:hover:text-slate-100\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n togglePin(node.id);\n }}\n >\n {isPinned ? (\n <PinFilled width=\"16\" height=\"16\" />\n ) : (\n <Pin width=\"16\" height=\"16\" />\n )}\n </div>\n )}\n {hasStatus && (\n <div\n className={twMerge(\n \"absolute top-1/2 right-2 flex -translate-y-1/2 items-center justify-center\",\n \"text-gray-300 group-hover/sidebar-item:visible hover:text-gray-700 dark:text-slate-600 dark:hover:text-slate-500\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n togglePin(node.id);\n }}\n >\n <StatusIcon\n status={node.status ?? NodeStatus.UNCHANGED}\n isDescendenceModified={isDescendenceModified}\n />\n </div>\n )}\n </div>\n </div>\n </div>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nconst RenderTitle = forwardRef<\n HTMLDivElement,\n {\n title: string;\n searchTerm: string;\n isSearchActive: boolean;\n pinnedMode: boolean;\n className?: string;\n }\n>(({ title, searchTerm, isSearchActive, pinnedMode, className }, ref) => {\n return (\n <div ref={ref} className={twMerge(\"truncate text-sm/5\", className)}>\n {searchTerm &&\n title.toLowerCase().includes(searchTerm.toLowerCase()) &&\n !pinnedMode\n ? (() => {\n const highlightClass = isSearchActive\n ? \"bg-yellow-300 dark:bg-[#604B00]\"\n : \"bg-gray-300 dark:bg-slate-800\";\n const parts: React.ReactNode[] = [];\n let remaining = title;\n const lowerTerm = searchTerm.toLowerCase();\n let i = 0;\n while (remaining.length > 0) {\n const idx = remaining.toLowerCase().indexOf(lowerTerm);\n if (idx === -1) {\n parts.push(remaining);\n break;\n }\n if (idx > 0) parts.push(remaining.slice(0, idx));\n parts.push(\n <span key={i++} className={highlightClass}>\n {remaining.slice(idx, idx + searchTerm.length)}\n </span>,\n );\n remaining = remaining.slice(idx + searchTerm.length);\n }\n return <>{parts}</>;\n })()\n : title}\n </div>\n );\n});\n\nRenderTitle.displayName = \"RenderTitle\";\n\nconst PinnedModeCircleIcon = ({ isPinned }: { isPinned: boolean }) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"min-w-4\"\n >\n <rect width=\"16\" height=\"16\" rx=\"6.4\" fill=\"transparent\" />\n <path\n d=\"M12 8C12 10.2091 10.2091 12 8 12C5.79086 12 4 10.2091 4 8C4 5.79086 5.79086 4 8 4C10.2091 4 12 5.79086 12 8Z\"\n fill=\"currentColor\"\n className={\n isPinned\n ? \"text-gray-500 dark:text-slate-500\"\n : \"text-gray-300 dark:text-slate-300\"\n }\n />\n </svg>\n);\n"],"mappings":";;;;;;;;;AA0BA,MAAMc,gBAAgB;AACtB,MAAMC,qBAAqB;AAE3B,MAAaC,eAAe,EAC1BC,MACAC,YACAC,WACAC,YACAC,eACAC,mBACAC,cACAC,aAAa,OACbC,WAAW,OACXC,WAAW,OACXC,OACAC,eACsB;CACtB,MAAMC,cAAcZ,KAAKa,QAAQ;CACjC,MAAMC,iBACJV,cAAcW,SAAS,KAAKX,cAAcC,mBAAmBW,OAAOhB,KAAKgB;CAC3E,MAAMC,gBAAgBjB,KAAKkB,aACtBlB,KAAKmB,gBAAgBnB,KAAKoB,OAC3BpB,KAAKoB;CACT,MAAMC,wBAAwBpC,cAAc;EAC1C,MAAMqC,SAASC,MAA4B;AAEzC,OAAIA,EAAEC,WAAW/B,WAAWgC,aAAaF,EAAEC,OACzC,QAAO;AAIT,OAAID,EAAEG,YAAYH,EAAEG,SAASX,SAAS,EACpC,QAAOQ,EAAEG,SAASC,MAAMC,UAAUN,MAAMM,MAAM,CAAC;AAGjD,UAAO;;AAGT,SAAON,MAAMtB,KAAK;IACjB,CAACA,KAAK,CAAC;CACV,MAAM6B,YACH7B,KAAKwB,UAAUxB,KAAKwB,WAAW/B,WAAWgC,aAC3CJ;CAEF,MAAMS,gBAAgB;EAAE,GAAGpB;EAAOE;EAAa;CAG/C,MAAMmB,cAAc7C,OAA8B,KAAK;CACvD,MAAM8C,cAActC,YAAYqC,YAAY;AAE5C,QACE,oBAAC,UAAD,EAAA,UACE,oBAAC,SAAD;EACE,SAAS/B,KAAKiC;EACd,gBAAA;EACA,MAAK;EACL,eAAeD,cAAcnC,gBAAgBC;YAE7C,oBAAC,OAAD;GACE,OAAOgC;GACP,WAAW3C,QACT,uDACA,CAACoB,cAAc,OAChB;aAED,oBAAC,OAAD;IACE,UAAU;IACV,eAAY;IACZ,IAAI,gBAAgBP,KAAKgB;IACzB,WAAW7B,QACT,4LACA0C,aAAa,QACbvB,iBAAiBuB,YAAY,gBAAgB,eAC7CrB,aAAaqB,YAAY,UAAU,SACnCf,kBAAkB,qCAElBP,cACE,uLACFE,YACE,wHACFT,KAAKkC,UACN;IACD,eAAe;AACbjC,kBAAaD,KAAKgB,GAAG;AACrBL,gBAAWX,KAAK;;cAGlB,qBAAC,OAAD;KAAK,WAAU;eAAf;MACG,CAACO,cACA,oBAAC,OAAD;OACE,WAAU;OACV,UAAU4B,MAAM;AACdA,UAAEC,iBAAiB;AACnBnC,qBAAaD,KAAKgB,GAAG;;iBAGvB,oBAAC,WAAD;QACE,OAAM;QACN,QAAO;QACP,WAAW7B,QACT,WACAa,KAAKkB,cACHlB,KAAK0B,YACL1B,KAAK0B,SAASX,SAAS,IACrB,KACA,cACJf,KAAK0B,aAAaW,KAAAA,KAAarC,KAAK0B,SAASX,WAAW,IACpD,sCACA,oCACL;QAAC,CAAA;OAGP,CAAA;MAEAE,gBACC,OAAOA,kBAAkB,WACvB,oBAAC,MAAD;OAAM,MAAMA;OAAe,MAAM;OAAI,WAAU;OAAY,CAAA,GAG3DlC,6BAAakC,eAAe,EAAEiB,WAAW,eAAe,CAAC,GAEzD3B,aACF,oBAAC,sBAAD,EAAgCC,UAAY,CAAA,GAC1C;MAEJ,oBAAC,aAAD;OACE,KAAKuB;OACL,OAAO/B,KAAKiC;OACA9B;OACIW;OACJP;OACZ,WAAU;OAAE,CAAA;MAGbD,gBACC,oBAAC,OAAD;OACE,WAAWnB,QACT,sEACA0C,YAAY,YAAY,WACxBrB,WACI,kFACA,6HACL;OACD,UAAU2B,MAAM;AACdA,UAAEC,iBAAiB;AACnBlC,kBAAUF,KAAKgB,GAAG;;iBAGnBR,WACC,oBAAC,WAAD;QAAW,OAAM;QAAK,QAAO;QAAO,CAAA,GAEpC,oBAAC,KAAD;QAAK,OAAM;QAAK,QAAO;QACxB,CAAA;OAEJ,CAAA;MACAqB,aACC,oBAAC,OAAD;OACE,WAAW1C,QACT,8EACA,mHACD;OACD,UAAUgD,MAAM;AACdA,UAAEC,iBAAiB;AACnBlC,kBAAUF,KAAKgB,GAAG;;iBAGpB,oBAAC,YAAD;QACE,QAAQhB,KAAKwB,UAAU/B,WAAWgC;QACXJ;QAAsB,CAAA;OAGlD,CAAA;MACE;;IACF,CAAA;GACF,CAAA;EACE,CAAA,EACO,CAAA;;AAItB,MAAMiB,cAActD,4BASjB,EAAEiD,OAAO9B,YAAYW,gBAAgBP,YAAY2B,aAAaK,QAAQ;AACvE,QACE,oBAAC,OAAD;EAAUA;EAAK,WAAWpD,QAAQ,sBAAsB+C,UAAU;YAC/D/B,cACD8B,MAAMO,aAAa,CAACC,SAAStC,WAAWqC,aAAa,CAAC,IACtD,CAACjC,oBACU;GACL,MAAMmC,iBAAiB5B,iBACnB,oCACA;GACJ,MAAM6B,QAA2B,EAAE;GACnC,IAAIC,YAAYX;GAChB,MAAMY,YAAY1C,WAAWqC,aAAa;GAC1C,IAAIM,IAAI;AACR,UAAOF,UAAU7B,SAAS,GAAG;IAC3B,MAAMgC,MAAMH,UAAUJ,aAAa,CAACQ,QAAQH,UAAU;AACtD,QAAIE,QAAQ,IAAI;AACdJ,WAAMM,KAAKL,UAAU;AACrB;;AAEF,QAAIG,MAAM,EAAGJ,OAAMM,KAAKL,UAAUM,MAAM,GAAGH,IAAI,CAAC;AAChDJ,UAAMM,KACJ,oBAAC,QAAD;KAAgB,WAAWP;eACxBE,UAAUM,MAAMH,KAAKA,MAAM5C,WAAWY,OAAO;KAElD,EAHa+B,IAGb,CAAC;AACDF,gBAAYA,UAAUM,MAAMH,MAAM5C,WAAWY,OAAO;;AAEtD,UAAO,oBAAA,YAAA,EAAA,UAAG4B,OAAS,CAAA;MACjB,GACJV;EACA,CAAA;EAER;AAEFK,YAAYa,cAAc;AAE1B,MAAMC,wBAAwB,EAAE5C,eAC9B,qBAAC,OAAD;CACE,OAAM;CACN,QAAO;CACP,SAAQ;CACR,MAAK;CACL,OAAM;CACN,WAAU;WANZ,CAQE,oBAAC,QAAD;EAAM,OAAM;EAAK,QAAO;EAAK,IAAG;EAAM,MAAK;EAAa,CAAA,EACxD,oBAAC,QAAD;EACE,GAAE;EACF,MAAK;EACL,WACEA,WACI,sCACA;EACL,CAAA,CAGN"}
@@ -0,0 +1,7 @@
1
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+
3
+ //#region src/ui/components/sidebar/subcomponents/sidebar-pinning-area.d.ts
4
+ declare const SidebarPinningArea: () => react_jsx_runtime0.JSX.Element;
5
+ //#endregion
6
+ export { SidebarPinningArea };
7
+ //# sourceMappingURL=sidebar-pinning-area.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-pinning-area.d.ts","names":[],"sources":["../../../../../src/ui/components/sidebar/subcomponents/sidebar-pinning-area.tsx"],"mappings":";;;cAGa,kBAAA,QAAkB,kBAAA,CAAA,GAAA,CAAA,OAAA"}