@gnome-ui/react 1.45.0 → 1.45.2

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 (857) hide show
  1. package/dist/components/AboutDialog/AboutDialog.cjs +1 -1
  2. package/dist/components/AboutDialog/AboutDialog.cjs.map +1 -1
  3. package/dist/components/AboutDialog/AboutDialog.d.ts +1 -1
  4. package/dist/components/AboutDialog/AboutDialog.js +3 -4
  5. package/dist/components/AboutDialog/AboutDialog.js.map +1 -1
  6. package/dist/components/AboutDialog/AboutDialog.module.css.cjs +1 -1
  7. package/dist/components/AboutDialog/AboutDialog.module.css.cjs.map +1 -1
  8. package/dist/components/AboutDialog/AboutDialog.module.css.js +30 -31
  9. package/dist/components/AboutDialog/AboutDialog.module.css.js.map +1 -1
  10. package/dist/components/AboutDialog/index.d.ts +1 -1
  11. package/dist/components/AboutDialog.cjs +1 -1
  12. package/dist/components/ActionRow/ActionRow.cjs +1 -1
  13. package/dist/components/ActionRow/ActionRow.cjs.map +1 -1
  14. package/dist/components/ActionRow/ActionRow.d.ts +2 -2
  15. package/dist/components/ActionRow/ActionRow.js +2 -2
  16. package/dist/components/ActionRow/ActionRow.js.map +1 -1
  17. package/dist/components/ActionRow/ActionRow.module.css.cjs +1 -1
  18. package/dist/components/ActionRow/ActionRow.module.css.cjs.map +1 -1
  19. package/dist/components/ActionRow/ActionRow.module.css.js +9 -9
  20. package/dist/components/ActionRow/ActionRow.module.css.js.map +1 -1
  21. package/dist/components/ActionRow/index.d.ts +1 -1
  22. package/dist/components/ActionRow.cjs +1 -1
  23. package/dist/components/Avatar/Avatar.cjs +1 -1
  24. package/dist/components/Avatar/Avatar.cjs.map +1 -1
  25. package/dist/components/Avatar/Avatar.d.ts +3 -3
  26. package/dist/components/Avatar/Avatar.js +2 -2
  27. package/dist/components/Avatar/Avatar.js.map +1 -1
  28. package/dist/components/Avatar/Avatar.module.css.cjs +1 -1
  29. package/dist/components/Avatar/Avatar.module.css.cjs.map +1 -1
  30. package/dist/components/Avatar/Avatar.module.css.js +16 -16
  31. package/dist/components/Avatar/Avatar.module.css.js.map +1 -1
  32. package/dist/components/Avatar/index.d.ts +1 -1
  33. package/dist/components/Avatar.cjs +1 -1
  34. package/dist/components/AvatarRotator/AvatarRotator.cjs +1 -1
  35. package/dist/components/AvatarRotator/AvatarRotator.cjs.map +1 -1
  36. package/dist/components/AvatarRotator/AvatarRotator.d.ts +1 -1
  37. package/dist/components/AvatarRotator/AvatarRotator.js +2 -2
  38. package/dist/components/AvatarRotator/AvatarRotator.js.map +1 -1
  39. package/dist/components/AvatarRotator/index.d.ts +1 -1
  40. package/dist/components/AvatarRotator.cjs +1 -1
  41. package/dist/components/Badge/Badge.cjs +1 -1
  42. package/dist/components/Badge/Badge.cjs.map +1 -1
  43. package/dist/components/Badge/Badge.d.ts +2 -2
  44. package/dist/components/Badge/Badge.js +2 -2
  45. package/dist/components/Badge/Badge.js.map +1 -1
  46. package/dist/components/Badge/Badge.module.css.cjs +1 -1
  47. package/dist/components/Badge/Badge.module.css.cjs.map +1 -1
  48. package/dist/components/Badge/Badge.module.css.js +9 -9
  49. package/dist/components/Badge/Badge.module.css.js.map +1 -1
  50. package/dist/components/Badge/index.d.ts +1 -1
  51. package/dist/components/Badge.cjs +1 -1
  52. package/dist/components/Banner/Banner.cjs +1 -1
  53. package/dist/components/Banner/Banner.cjs.map +1 -1
  54. package/dist/components/Banner/Banner.d.ts +2 -2
  55. package/dist/components/Banner/Banner.js +34 -36
  56. package/dist/components/Banner/Banner.js.map +1 -1
  57. package/dist/components/Banner/Banner.module.css.cjs +1 -1
  58. package/dist/components/Banner/Banner.module.css.cjs.map +1 -1
  59. package/dist/components/Banner/Banner.module.css.js +15 -16
  60. package/dist/components/Banner/Banner.module.css.js.map +1 -1
  61. package/dist/components/Banner/index.d.ts +1 -1
  62. package/dist/components/Banner.cjs +1 -1
  63. package/dist/components/Bin/Bin.cjs +1 -1
  64. package/dist/components/Bin/Bin.cjs.map +1 -1
  65. package/dist/components/Bin/Bin.d.ts +1 -1
  66. package/dist/components/Bin/Bin.js +4 -6
  67. package/dist/components/Bin/Bin.js.map +1 -1
  68. package/dist/components/Bin/index.d.ts +1 -1
  69. package/dist/components/Bin.cjs +1 -1
  70. package/dist/components/Blockquote/Blockquote.cjs +1 -1
  71. package/dist/components/Blockquote/Blockquote.cjs.map +1 -1
  72. package/dist/components/Blockquote/Blockquote.d.ts +2 -2
  73. package/dist/components/Blockquote/Blockquote.js +24 -26
  74. package/dist/components/Blockquote/Blockquote.js.map +1 -1
  75. package/dist/components/Blockquote/Blockquote.module.css.cjs +1 -1
  76. package/dist/components/Blockquote/Blockquote.module.css.cjs.map +1 -1
  77. package/dist/components/Blockquote/Blockquote.module.css.js +11 -11
  78. package/dist/components/Blockquote/Blockquote.module.css.js.map +1 -1
  79. package/dist/components/Blockquote/index.d.ts +1 -1
  80. package/dist/components/Blockquote.cjs +1 -1
  81. package/dist/components/BottomSheet/BottomSheet.cjs +1 -1
  82. package/dist/components/BottomSheet/BottomSheet.cjs.map +1 -1
  83. package/dist/components/BottomSheet/BottomSheet.d.ts +2 -2
  84. package/dist/components/BottomSheet/BottomSheet.js +2 -3
  85. package/dist/components/BottomSheet/BottomSheet.js.map +1 -1
  86. package/dist/components/BottomSheet/BottomSheet.module.css.cjs +1 -1
  87. package/dist/components/BottomSheet/BottomSheet.module.css.cjs.map +1 -1
  88. package/dist/components/BottomSheet/BottomSheet.module.css.js +10 -11
  89. package/dist/components/BottomSheet/BottomSheet.module.css.js.map +1 -1
  90. package/dist/components/BottomSheet/index.d.ts +1 -1
  91. package/dist/components/BottomSheet.cjs +1 -1
  92. package/dist/components/Box/Box.cjs +1 -1
  93. package/dist/components/Box/Box.cjs.map +1 -1
  94. package/dist/components/Box/Box.d.ts +4 -4
  95. package/dist/components/Box/Box.js +2 -2
  96. package/dist/components/Box/Box.js.map +1 -1
  97. package/dist/components/Box/index.d.ts +1 -1
  98. package/dist/components/Box.cjs +1 -1
  99. package/dist/components/BoxedList/BoxedList.cjs +1 -1
  100. package/dist/components/BoxedList/BoxedList.cjs.map +1 -1
  101. package/dist/components/BoxedList/BoxedList.d.ts +2 -2
  102. package/dist/components/BoxedList/BoxedList.js +2 -3
  103. package/dist/components/BoxedList/BoxedList.js.map +1 -1
  104. package/dist/components/BoxedList/BoxedList.module.css.cjs +1 -1
  105. package/dist/components/BoxedList/BoxedList.module.css.cjs.map +1 -1
  106. package/dist/components/BoxedList/BoxedList.module.css.js +5 -5
  107. package/dist/components/BoxedList/BoxedList.module.css.js.map +1 -1
  108. package/dist/components/BoxedList/index.d.ts +1 -1
  109. package/dist/components/BoxedList.cjs +1 -1
  110. package/dist/components/BreakpointBin/BreakpointBin.cjs +1 -1
  111. package/dist/components/BreakpointBin/BreakpointBin.cjs.map +1 -1
  112. package/dist/components/BreakpointBin/BreakpointBin.d.ts +2 -2
  113. package/dist/components/BreakpointBin/BreakpointBin.js +3 -3
  114. package/dist/components/BreakpointBin/BreakpointBin.js.map +1 -1
  115. package/dist/components/BreakpointBin/index.d.ts +1 -1
  116. package/dist/components/BreakpointBin.cjs +1 -1
  117. package/dist/components/Button/Button.cjs +1 -1
  118. package/dist/components/Button/Button.cjs.map +1 -1
  119. package/dist/components/Button/Button.d.ts +3 -3
  120. package/dist/components/Button/Button.js.map +1 -1
  121. package/dist/components/Button/Button.module.css.cjs +1 -1
  122. package/dist/components/Button/Button.module.css.cjs.map +1 -1
  123. package/dist/components/Button/Button.module.css.js +11 -11
  124. package/dist/components/Button/Button.module.css.js.map +1 -1
  125. package/dist/components/Button/index.d.ts +1 -1
  126. package/dist/components/Button.cjs +1 -1
  127. package/dist/components/ButtonContent/ButtonContent.cjs +1 -1
  128. package/dist/components/ButtonContent/ButtonContent.cjs.map +1 -1
  129. package/dist/components/ButtonContent/ButtonContent.d.ts +2 -2
  130. package/dist/components/ButtonContent/ButtonContent.js +24 -26
  131. package/dist/components/ButtonContent/ButtonContent.js.map +1 -1
  132. package/dist/components/ButtonContent/index.d.ts +1 -1
  133. package/dist/components/ButtonContent.cjs +1 -1
  134. package/dist/components/ButtonRow/ButtonRow.cjs +1 -1
  135. package/dist/components/ButtonRow/ButtonRow.cjs.map +1 -1
  136. package/dist/components/ButtonRow/ButtonRow.d.ts +2 -2
  137. package/dist/components/ButtonRow/ButtonRow.js +22 -24
  138. package/dist/components/ButtonRow/ButtonRow.js.map +1 -1
  139. package/dist/components/ButtonRow/ButtonRow.module.css.cjs +1 -1
  140. package/dist/components/ButtonRow/ButtonRow.module.css.cjs.map +1 -1
  141. package/dist/components/ButtonRow/ButtonRow.module.css.js +7 -7
  142. package/dist/components/ButtonRow/ButtonRow.module.css.js.map +1 -1
  143. package/dist/components/ButtonRow/index.d.ts +1 -1
  144. package/dist/components/ButtonRow.cjs +1 -1
  145. package/dist/components/Card/Card.cjs +1 -1
  146. package/dist/components/Card/Card.cjs.map +1 -1
  147. package/dist/components/Card/Card.d.ts +2 -2
  148. package/dist/components/Card/Card.js +10 -12
  149. package/dist/components/Card/Card.js.map +1 -1
  150. package/dist/components/Card/Card.module.css.cjs +1 -1
  151. package/dist/components/Card/Card.module.css.cjs.map +1 -1
  152. package/dist/components/Card/Card.module.css.js +8 -9
  153. package/dist/components/Card/Card.module.css.js.map +1 -1
  154. package/dist/components/Card/index.d.ts +1 -1
  155. package/dist/components/Card.cjs +1 -1
  156. package/dist/components/Carousel/Carousel.cjs +1 -1
  157. package/dist/components/Carousel/Carousel.cjs.map +1 -1
  158. package/dist/components/Carousel/Carousel.d.ts +4 -4
  159. package/dist/components/Carousel/Carousel.js +35 -40
  160. package/dist/components/Carousel/Carousel.js.map +1 -1
  161. package/dist/components/Carousel/Carousel.module.css.cjs +1 -1
  162. package/dist/components/Carousel/Carousel.module.css.cjs.map +1 -1
  163. package/dist/components/Carousel/Carousel.module.css.js +10 -10
  164. package/dist/components/Carousel/Carousel.module.css.js.map +1 -1
  165. package/dist/components/Carousel/index.d.ts +1 -1
  166. package/dist/components/Carousel.cjs +1 -1
  167. package/dist/components/CheckRow/CheckRow.cjs +1 -1
  168. package/dist/components/CheckRow/CheckRow.cjs.map +1 -1
  169. package/dist/components/CheckRow/CheckRow.d.ts +2 -2
  170. package/dist/components/CheckRow/CheckRow.js +7 -7
  171. package/dist/components/CheckRow/CheckRow.js.map +1 -1
  172. package/dist/components/CheckRow/CheckRow.module.css.cjs +1 -1
  173. package/dist/components/CheckRow/CheckRow.module.css.cjs.map +1 -1
  174. package/dist/components/CheckRow/CheckRow.module.css.js +10 -10
  175. package/dist/components/CheckRow/CheckRow.module.css.js.map +1 -1
  176. package/dist/components/CheckRow/index.d.ts +1 -1
  177. package/dist/components/CheckRow.cjs +1 -1
  178. package/dist/components/Checkbox/Checkbox.cjs +1 -1
  179. package/dist/components/Checkbox/Checkbox.cjs.map +1 -1
  180. package/dist/components/Checkbox/Checkbox.d.ts +3 -3
  181. package/dist/components/Checkbox/Checkbox.js +2 -2
  182. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  183. package/dist/components/Checkbox/Checkbox.module.css.cjs +1 -1
  184. package/dist/components/Checkbox/Checkbox.module.css.cjs.map +1 -1
  185. package/dist/components/Checkbox/Checkbox.module.css.js +1 -1
  186. package/dist/components/Checkbox/Checkbox.module.css.js.map +1 -1
  187. package/dist/components/Checkbox/index.d.ts +1 -1
  188. package/dist/components/Checkbox.cjs +1 -1
  189. package/dist/components/Chip/Chip.cjs +1 -1
  190. package/dist/components/Chip/Chip.cjs.map +1 -1
  191. package/dist/components/Chip/Chip.d.ts +2 -2
  192. package/dist/components/Chip/Chip.js +2 -2
  193. package/dist/components/Chip/Chip.js.map +1 -1
  194. package/dist/components/Chip/Chip.module.css.cjs +1 -1
  195. package/dist/components/Chip/Chip.module.css.cjs.map +1 -1
  196. package/dist/components/Chip/Chip.module.css.js +7 -7
  197. package/dist/components/Chip/Chip.module.css.js.map +1 -1
  198. package/dist/components/Chip/index.d.ts +1 -1
  199. package/dist/components/Chip.cjs +1 -1
  200. package/dist/components/Clamp/Clamp.cjs +1 -1
  201. package/dist/components/Clamp/Clamp.cjs.map +1 -1
  202. package/dist/components/Clamp/Clamp.d.ts +1 -1
  203. package/dist/components/Clamp/Clamp.js +9 -11
  204. package/dist/components/Clamp/Clamp.js.map +1 -1
  205. package/dist/components/Clamp/index.d.ts +1 -1
  206. package/dist/components/Clamp.cjs +1 -1
  207. package/dist/components/ColorPicker/ColorPicker.cjs +1 -1
  208. package/dist/components/ColorPicker/ColorPicker.cjs.map +1 -1
  209. package/dist/components/ColorPicker/ColorPicker.d.ts +6 -6
  210. package/dist/components/ColorPicker/ColorPicker.js +33 -37
  211. package/dist/components/ColorPicker/ColorPicker.js.map +1 -1
  212. package/dist/components/ColorPicker/ColorPicker.module.css.cjs +1 -1
  213. package/dist/components/ColorPicker/ColorPicker.module.css.cjs.map +1 -1
  214. package/dist/components/ColorPicker/ColorPicker.module.css.js +12 -13
  215. package/dist/components/ColorPicker/ColorPicker.module.css.js.map +1 -1
  216. package/dist/components/ColorPicker/index.d.ts +1 -1
  217. package/dist/components/ColorPicker.cjs +1 -1
  218. package/dist/components/ColumnView/ColumnView.cjs +1 -1
  219. package/dist/components/ColumnView/ColumnView.cjs.map +1 -1
  220. package/dist/components/ColumnView/ColumnView.d.ts +4 -4
  221. package/dist/components/ColumnView/ColumnView.js +26 -33
  222. package/dist/components/ColumnView/ColumnView.js.map +1 -1
  223. package/dist/components/ColumnView/ColumnView.module.css.cjs +1 -1
  224. package/dist/components/ColumnView/ColumnView.module.css.cjs.map +1 -1
  225. package/dist/components/ColumnView/ColumnView.module.css.js +22 -22
  226. package/dist/components/ColumnView/ColumnView.module.css.js.map +1 -1
  227. package/dist/components/ColumnView/index.d.ts +1 -1
  228. package/dist/components/ColumnView.cjs +1 -1
  229. package/dist/components/ComboRow/ComboRow.cjs +1 -1
  230. package/dist/components/ComboRow/ComboRow.cjs.map +1 -1
  231. package/dist/components/ComboRow/ComboRow.d.ts +2 -2
  232. package/dist/components/ComboRow/ComboRow.js +2 -4
  233. package/dist/components/ComboRow/ComboRow.js.map +1 -1
  234. package/dist/components/ComboRow/ComboRow.module.css.cjs +1 -1
  235. package/dist/components/ComboRow/ComboRow.module.css.cjs.map +1 -1
  236. package/dist/components/ComboRow/ComboRow.module.css.js +26 -27
  237. package/dist/components/ComboRow/ComboRow.module.css.js.map +1 -1
  238. package/dist/components/ComboRow/index.d.ts +1 -1
  239. package/dist/components/ComboRow.cjs +1 -1
  240. package/dist/components/ContributionGraph/ContributionGraph.cjs +1 -1
  241. package/dist/components/ContributionGraph/ContributionGraph.cjs.map +1 -1
  242. package/dist/components/ContributionGraph/ContributionGraph.d.ts +1 -1
  243. package/dist/components/ContributionGraph/ContributionGraph.js +43 -43
  244. package/dist/components/ContributionGraph/ContributionGraph.js.map +1 -1
  245. package/dist/components/ContributionGraph/index.d.ts +1 -1
  246. package/dist/components/ContributionGraph.cjs +1 -1
  247. package/dist/components/CountDownTimer/CountDownTimer.cjs +1 -1
  248. package/dist/components/CountDownTimer/CountDownTimer.cjs.map +1 -1
  249. package/dist/components/CountDownTimer/CountDownTimer.d.ts +3 -3
  250. package/dist/components/CountDownTimer/CountDownTimer.js +2 -2
  251. package/dist/components/CountDownTimer/CountDownTimer.js.map +1 -1
  252. package/dist/components/CountDownTimer/index.d.ts +1 -1
  253. package/dist/components/CountDownTimer.cjs +1 -1
  254. package/dist/components/Dialog/Dialog.cjs +1 -1
  255. package/dist/components/Dialog/Dialog.cjs.map +1 -1
  256. package/dist/components/Dialog/Dialog.d.ts +5 -5
  257. package/dist/components/Dialog/Dialog.js +2 -2
  258. package/dist/components/Dialog/Dialog.js.map +1 -1
  259. package/dist/components/Dialog/Dialog.module.css.cjs +1 -1
  260. package/dist/components/Dialog/Dialog.module.css.cjs.map +1 -1
  261. package/dist/components/Dialog/Dialog.module.css.js +13 -14
  262. package/dist/components/Dialog/Dialog.module.css.js.map +1 -1
  263. package/dist/components/Dialog/dialogUtils.cjs +1 -1
  264. package/dist/components/Dialog/dialogUtils.cjs.map +1 -1
  265. package/dist/components/Dialog/dialogUtils.js.map +1 -1
  266. package/dist/components/Dialog/index.d.ts +1 -1
  267. package/dist/components/Dialog.cjs +1 -1
  268. package/dist/components/Drawer/Drawer.cjs +1 -1
  269. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  270. package/dist/components/Drawer/Drawer.d.ts +4 -4
  271. package/dist/components/Drawer/Drawer.js +2 -2
  272. package/dist/components/Drawer/Drawer.js.map +1 -1
  273. package/dist/components/Drawer/Drawer.module.css.cjs +1 -1
  274. package/dist/components/Drawer/Drawer.module.css.cjs.map +1 -1
  275. package/dist/components/Drawer/Drawer.module.css.js +14 -15
  276. package/dist/components/Drawer/Drawer.module.css.js.map +1 -1
  277. package/dist/components/Drawer/index.d.ts +1 -1
  278. package/dist/components/Drawer.cjs +1 -1
  279. package/dist/components/Dropdown/Dropdown.cjs +1 -1
  280. package/dist/components/Dropdown/Dropdown.cjs.map +1 -1
  281. package/dist/components/Dropdown/Dropdown.d.ts +3 -3
  282. package/dist/components/Dropdown/Dropdown.js +2 -2
  283. package/dist/components/Dropdown/Dropdown.js.map +1 -1
  284. package/dist/components/Dropdown/Dropdown.module.css.cjs +1 -1
  285. package/dist/components/Dropdown/Dropdown.module.css.cjs.map +1 -1
  286. package/dist/components/Dropdown/Dropdown.module.css.js +22 -23
  287. package/dist/components/Dropdown/Dropdown.module.css.js.map +1 -1
  288. package/dist/components/Dropdown/index.d.ts +1 -1
  289. package/dist/components/Dropdown.cjs +1 -1
  290. package/dist/components/EntryRow/EntryRow.cjs +1 -1
  291. package/dist/components/EntryRow/EntryRow.cjs.map +1 -1
  292. package/dist/components/EntryRow/EntryRow.d.ts +1 -1
  293. package/dist/components/EntryRow/EntryRow.js +2 -2
  294. package/dist/components/EntryRow/EntryRow.js.map +1 -1
  295. package/dist/components/EntryRow/EntryRow.module.css.cjs +1 -1
  296. package/dist/components/EntryRow/EntryRow.module.css.cjs.map +1 -1
  297. package/dist/components/EntryRow/EntryRow.module.css.js +10 -10
  298. package/dist/components/EntryRow/EntryRow.module.css.js.map +1 -1
  299. package/dist/components/EntryRow/index.d.ts +1 -1
  300. package/dist/components/EntryRow.cjs +1 -1
  301. package/dist/components/ExpanderRow/ExpanderRow.cjs +1 -1
  302. package/dist/components/ExpanderRow/ExpanderRow.cjs.map +1 -1
  303. package/dist/components/ExpanderRow/ExpanderRow.d.ts +1 -1
  304. package/dist/components/ExpanderRow/ExpanderRow.js +2 -2
  305. package/dist/components/ExpanderRow/ExpanderRow.js.map +1 -1
  306. package/dist/components/ExpanderRow/ExpanderRow.module.css.cjs +1 -1
  307. package/dist/components/ExpanderRow/ExpanderRow.module.css.cjs.map +1 -1
  308. package/dist/components/ExpanderRow/ExpanderRow.module.css.js +14 -14
  309. package/dist/components/ExpanderRow/ExpanderRow.module.css.js.map +1 -1
  310. package/dist/components/ExpanderRow/index.d.ts +1 -1
  311. package/dist/components/ExpanderRow.cjs +1 -1
  312. package/dist/components/Footer/Footer.cjs +1 -1
  313. package/dist/components/Footer/Footer.cjs.map +1 -1
  314. package/dist/components/Footer/Footer.d.ts +1 -1
  315. package/dist/components/Footer/Footer.js +22 -24
  316. package/dist/components/Footer/Footer.js.map +1 -1
  317. package/dist/components/Footer/index.d.ts +1 -1
  318. package/dist/components/Footer.cjs +1 -1
  319. package/dist/components/Frame/Frame.cjs +1 -1
  320. package/dist/components/Frame/Frame.cjs.map +1 -1
  321. package/dist/components/Frame/Frame.d.ts +1 -1
  322. package/dist/components/Frame/Frame.js +5 -7
  323. package/dist/components/Frame/Frame.js.map +1 -1
  324. package/dist/components/Frame/index.d.ts +1 -1
  325. package/dist/components/Frame.cjs +1 -1
  326. package/dist/components/GnomeProvider/GnomeContext.cjs +1 -1
  327. package/dist/components/GnomeProvider/GnomeContext.cjs.map +1 -1
  328. package/dist/components/GnomeProvider/GnomeContext.d.ts +5 -5
  329. package/dist/components/GnomeProvider/GnomeContext.js.map +1 -1
  330. package/dist/components/GnomeProvider/GnomeProvider.cjs +1 -1
  331. package/dist/components/GnomeProvider/GnomeProvider.cjs.map +1 -1
  332. package/dist/components/GnomeProvider/GnomeProvider.d.ts +1 -1
  333. package/dist/components/GnomeProvider/GnomeProvider.js +2 -2
  334. package/dist/components/GnomeProvider/GnomeProvider.js.map +1 -1
  335. package/dist/components/HeaderBar/HeaderBar.cjs +1 -1
  336. package/dist/components/HeaderBar/HeaderBar.cjs.map +1 -1
  337. package/dist/components/HeaderBar/HeaderBar.d.ts +2 -2
  338. package/dist/components/HeaderBar/HeaderBar.js +26 -28
  339. package/dist/components/HeaderBar/HeaderBar.js.map +1 -1
  340. package/dist/components/HeaderBar/index.d.ts +1 -1
  341. package/dist/components/HeaderBar.cjs +1 -1
  342. package/dist/components/Icon/Icon.cjs +1 -1
  343. package/dist/components/Icon/Icon.cjs.map +1 -1
  344. package/dist/components/Icon/Icon.d.ts +3 -3
  345. package/dist/components/Icon/Icon.js +2 -2
  346. package/dist/components/Icon/Icon.js.map +1 -1
  347. package/dist/components/Icon/index.d.ts +1 -1
  348. package/dist/components/Icon.cjs +1 -1
  349. package/dist/components/IconButton/IconButton.cjs +1 -1
  350. package/dist/components/IconButton/IconButton.cjs.map +1 -1
  351. package/dist/components/IconButton/IconButton.d.ts +2 -2
  352. package/dist/components/IconButton/IconButton.js +4 -4
  353. package/dist/components/IconButton/IconButton.js.map +1 -1
  354. package/dist/components/IconButton/index.d.ts +1 -1
  355. package/dist/components/IconButton.cjs +1 -1
  356. package/dist/components/InlineViewSwitcher/InlineViewSwitcher.cjs +1 -1
  357. package/dist/components/InlineViewSwitcher/InlineViewSwitcher.cjs.map +1 -1
  358. package/dist/components/InlineViewSwitcher/InlineViewSwitcher.d.ts +3 -3
  359. package/dist/components/InlineViewSwitcher/InlineViewSwitcher.js +10 -10
  360. package/dist/components/InlineViewSwitcher/InlineViewSwitcher.js.map +1 -1
  361. package/dist/components/InlineViewSwitcher/InlineViewSwitcher.module.css.cjs +1 -1
  362. package/dist/components/InlineViewSwitcher/InlineViewSwitcher.module.css.cjs.map +1 -1
  363. package/dist/components/InlineViewSwitcher/InlineViewSwitcher.module.css.js +10 -10
  364. package/dist/components/InlineViewSwitcher/InlineViewSwitcher.module.css.js.map +1 -1
  365. package/dist/components/InlineViewSwitcher/InlineViewSwitcherItem.cjs +1 -1
  366. package/dist/components/InlineViewSwitcher/InlineViewSwitcherItem.cjs.map +1 -1
  367. package/dist/components/InlineViewSwitcher/InlineViewSwitcherItem.d.ts +2 -2
  368. package/dist/components/InlineViewSwitcher/InlineViewSwitcherItem.js +2 -2
  369. package/dist/components/InlineViewSwitcher/InlineViewSwitcherItem.js.map +1 -1
  370. package/dist/components/InlineViewSwitcher/index.d.ts +2 -2
  371. package/dist/components/InlineViewSwitcher.cjs +1 -1
  372. package/dist/components/Link/Link.cjs +1 -1
  373. package/dist/components/Link/Link.cjs.map +1 -1
  374. package/dist/components/Link/Link.d.ts +1 -1
  375. package/dist/components/Link/Link.js +2 -2
  376. package/dist/components/Link/Link.js.map +1 -1
  377. package/dist/components/Link/Link.module.css.cjs +1 -1
  378. package/dist/components/Link/Link.module.css.cjs.map +1 -1
  379. package/dist/components/Link/Link.module.css.js +2 -2
  380. package/dist/components/Link/Link.module.css.js.map +1 -1
  381. package/dist/components/Link/index.d.ts +1 -1
  382. package/dist/components/Link.cjs +1 -1
  383. package/dist/components/LinkedGroup/LinkedGroup.cjs +1 -1
  384. package/dist/components/LinkedGroup/LinkedGroup.cjs.map +1 -1
  385. package/dist/components/LinkedGroup/LinkedGroup.d.ts +1 -1
  386. package/dist/components/LinkedGroup/LinkedGroup.js +9 -11
  387. package/dist/components/LinkedGroup/LinkedGroup.js.map +1 -1
  388. package/dist/components/LinkedGroup/LinkedGroup.module.css.cjs +1 -1
  389. package/dist/components/LinkedGroup/LinkedGroup.module.css.cjs.map +1 -1
  390. package/dist/components/LinkedGroup/LinkedGroup.module.css.js +2 -2
  391. package/dist/components/LinkedGroup/LinkedGroup.module.css.js.map +1 -1
  392. package/dist/components/LinkedGroup/index.d.ts +1 -1
  393. package/dist/components/LinkedGroup.cjs +1 -1
  394. package/dist/components/NavigationSplitView/NavigationSplitView.cjs +1 -1
  395. package/dist/components/NavigationSplitView/NavigationSplitView.cjs.map +1 -1
  396. package/dist/components/NavigationSplitView/NavigationSplitView.d.ts +2 -2
  397. package/dist/components/NavigationSplitView/NavigationSplitView.js +2 -2
  398. package/dist/components/NavigationSplitView/NavigationSplitView.js.map +1 -1
  399. package/dist/components/NavigationSplitView/index.d.ts +1 -1
  400. package/dist/components/NavigationSplitView.cjs +1 -1
  401. package/dist/components/NavigationView/NavigationView.cjs +1 -1
  402. package/dist/components/NavigationView/NavigationView.cjs.map +1 -1
  403. package/dist/components/NavigationView/NavigationView.d.ts +4 -4
  404. package/dist/components/NavigationView/NavigationView.js +3 -4
  405. package/dist/components/NavigationView/NavigationView.js.map +1 -1
  406. package/dist/components/NavigationView/NavigationView.module.css.cjs +1 -1
  407. package/dist/components/NavigationView/NavigationView.module.css.cjs.map +1 -1
  408. package/dist/components/NavigationView/NavigationView.module.css.js +11 -12
  409. package/dist/components/NavigationView/NavigationView.module.css.js.map +1 -1
  410. package/dist/components/NavigationView/index.d.ts +2 -2
  411. package/dist/components/NavigationView.cjs +1 -1
  412. package/dist/components/OverlaySplitView/OverlaySplitView.cjs +1 -1
  413. package/dist/components/OverlaySplitView/OverlaySplitView.cjs.map +1 -1
  414. package/dist/components/OverlaySplitView/OverlaySplitView.d.ts +3 -3
  415. package/dist/components/OverlaySplitView/OverlaySplitView.js +2 -2
  416. package/dist/components/OverlaySplitView/OverlaySplitView.js.map +1 -1
  417. package/dist/components/OverlaySplitView/OverlaySplitView.module.css.cjs +1 -1
  418. package/dist/components/OverlaySplitView/OverlaySplitView.module.css.cjs.map +1 -1
  419. package/dist/components/OverlaySplitView/OverlaySplitView.module.css.js +12 -12
  420. package/dist/components/OverlaySplitView/OverlaySplitView.module.css.js.map +1 -1
  421. package/dist/components/OverlaySplitView/index.d.ts +1 -1
  422. package/dist/components/OverlaySplitView.cjs +1 -1
  423. package/dist/components/PasswordEntryRow/PasswordEntryRow.cjs +1 -1
  424. package/dist/components/PasswordEntryRow/PasswordEntryRow.cjs.map +1 -1
  425. package/dist/components/PasswordEntryRow/PasswordEntryRow.d.ts +2 -2
  426. package/dist/components/PasswordEntryRow/PasswordEntryRow.js +2 -2
  427. package/dist/components/PasswordEntryRow/PasswordEntryRow.js.map +1 -1
  428. package/dist/components/PasswordEntryRow/PasswordEntryRow.module.css.cjs +1 -1
  429. package/dist/components/PasswordEntryRow/PasswordEntryRow.module.css.cjs.map +1 -1
  430. package/dist/components/PasswordEntryRow/PasswordEntryRow.module.css.js +1 -1
  431. package/dist/components/PasswordEntryRow/PasswordEntryRow.module.css.js.map +1 -1
  432. package/dist/components/PasswordEntryRow/index.d.ts +1 -1
  433. package/dist/components/PasswordEntryRow.cjs +1 -1
  434. package/dist/components/PathBar/PathBar.cjs +1 -1
  435. package/dist/components/PathBar/PathBar.cjs.map +1 -1
  436. package/dist/components/PathBar/PathBar.d.ts +1 -1
  437. package/dist/components/PathBar/PathBar.js +48 -50
  438. package/dist/components/PathBar/PathBar.js.map +1 -1
  439. package/dist/components/PathBar/PathBar.module.css.cjs +1 -1
  440. package/dist/components/PathBar/PathBar.module.css.cjs.map +1 -1
  441. package/dist/components/PathBar/PathBar.module.css.js +7 -7
  442. package/dist/components/PathBar/PathBar.module.css.js.map +1 -1
  443. package/dist/components/PathBar/index.d.ts +1 -1
  444. package/dist/components/PathBar.cjs +1 -1
  445. package/dist/components/Popover/Popover.cjs +1 -1
  446. package/dist/components/Popover/Popover.cjs.map +1 -1
  447. package/dist/components/Popover/Popover.d.ts +3 -3
  448. package/dist/components/Popover/Popover.js +5 -5
  449. package/dist/components/Popover/Popover.js.map +1 -1
  450. package/dist/components/Popover/Popover.module.css.cjs +1 -1
  451. package/dist/components/Popover/Popover.module.css.cjs.map +1 -1
  452. package/dist/components/Popover/Popover.module.css.js +7 -7
  453. package/dist/components/Popover/Popover.module.css.js.map +1 -1
  454. package/dist/components/Popover/index.d.ts +1 -1
  455. package/dist/components/Popover.cjs +1 -1
  456. package/dist/components/PreferencesDialog/PreferencesDialog.cjs +1 -1
  457. package/dist/components/PreferencesDialog/PreferencesDialog.cjs.map +1 -1
  458. package/dist/components/PreferencesDialog/PreferencesDialog.d.ts +2 -2
  459. package/dist/components/PreferencesDialog/PreferencesDialog.js +2 -3
  460. package/dist/components/PreferencesDialog/PreferencesDialog.js.map +1 -1
  461. package/dist/components/PreferencesDialog/PreferencesDialog.module.css.cjs +1 -1
  462. package/dist/components/PreferencesDialog/PreferencesDialog.module.css.cjs.map +1 -1
  463. package/dist/components/PreferencesDialog/PreferencesDialog.module.css.js +20 -21
  464. package/dist/components/PreferencesDialog/PreferencesDialog.module.css.js.map +1 -1
  465. package/dist/components/PreferencesDialog/index.d.ts +1 -1
  466. package/dist/components/PreferencesDialog.cjs +1 -1
  467. package/dist/components/PreferencesGroup/PreferencesGroup.cjs +1 -1
  468. package/dist/components/PreferencesGroup/PreferencesGroup.cjs.map +1 -1
  469. package/dist/components/PreferencesGroup/PreferencesGroup.d.ts +1 -1
  470. package/dist/components/PreferencesGroup/PreferencesGroup.js +2 -2
  471. package/dist/components/PreferencesGroup/PreferencesGroup.js.map +1 -1
  472. package/dist/components/PreferencesGroup/index.d.ts +1 -1
  473. package/dist/components/PreferencesGroup.cjs +1 -1
  474. package/dist/components/PreferencesPage/PreferencesPage.cjs +1 -1
  475. package/dist/components/PreferencesPage/PreferencesPage.cjs.map +1 -1
  476. package/dist/components/PreferencesPage/PreferencesPage.d.ts +1 -1
  477. package/dist/components/PreferencesPage/PreferencesPage.js +9 -11
  478. package/dist/components/PreferencesPage/PreferencesPage.js.map +1 -1
  479. package/dist/components/PreferencesPage/index.d.ts +1 -1
  480. package/dist/components/PreferencesPage.cjs +1 -1
  481. package/dist/components/ProgressBar/ProgressBar.cjs +1 -1
  482. package/dist/components/ProgressBar/ProgressBar.cjs.map +1 -1
  483. package/dist/components/ProgressBar/ProgressBar.d.ts +4 -4
  484. package/dist/components/ProgressBar/ProgressBar.js +2 -2
  485. package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
  486. package/dist/components/ProgressBar/ProgressBar.module.css.cjs +1 -1
  487. package/dist/components/ProgressBar/ProgressBar.module.css.cjs.map +1 -1
  488. package/dist/components/ProgressBar/ProgressBar.module.css.js +8 -8
  489. package/dist/components/ProgressBar/ProgressBar.module.css.js.map +1 -1
  490. package/dist/components/ProgressBar/index.d.ts +1 -1
  491. package/dist/components/ProgressBar.cjs +1 -1
  492. package/dist/components/RadioButton/RadioButton.cjs +1 -1
  493. package/dist/components/RadioButton/RadioButton.cjs.map +1 -1
  494. package/dist/components/RadioButton/RadioButton.d.ts +3 -3
  495. package/dist/components/RadioButton/RadioButton.js +5 -7
  496. package/dist/components/RadioButton/RadioButton.js.map +1 -1
  497. package/dist/components/RadioButton/RadioButton.module.css.cjs +1 -1
  498. package/dist/components/RadioButton/RadioButton.module.css.cjs.map +1 -1
  499. package/dist/components/RadioButton/RadioButton.module.css.js +1 -1
  500. package/dist/components/RadioButton/RadioButton.module.css.js.map +1 -1
  501. package/dist/components/RadioButton/index.d.ts +1 -1
  502. package/dist/components/RadioButton.cjs +1 -1
  503. package/dist/components/SearchBar/SearchBar.cjs +1 -1
  504. package/dist/components/SearchBar/SearchBar.cjs.map +1 -1
  505. package/dist/components/SearchBar/SearchBar.d.ts +2 -2
  506. package/dist/components/SearchBar/SearchBar.js +3 -5
  507. package/dist/components/SearchBar/SearchBar.js.map +1 -1
  508. package/dist/components/SearchBar/SearchBar.module.css.cjs +1 -1
  509. package/dist/components/SearchBar/SearchBar.module.css.cjs.map +1 -1
  510. package/dist/components/SearchBar/SearchBar.module.css.js +13 -13
  511. package/dist/components/SearchBar/SearchBar.module.css.js.map +1 -1
  512. package/dist/components/SearchBar/index.d.ts +1 -1
  513. package/dist/components/SearchBar.cjs +1 -1
  514. package/dist/components/SegmentedBar/SegmentedBar.cjs +1 -1
  515. package/dist/components/SegmentedBar/SegmentedBar.cjs.map +1 -1
  516. package/dist/components/SegmentedBar/SegmentedBar.d.ts +1 -1
  517. package/dist/components/SegmentedBar/SegmentedBar.js.map +1 -1
  518. package/dist/components/SegmentedBar/SegmentedBar.module.css.cjs +1 -1
  519. package/dist/components/SegmentedBar/SegmentedBar.module.css.cjs.map +1 -1
  520. package/dist/components/SegmentedBar/SegmentedBar.module.css.js +12 -12
  521. package/dist/components/SegmentedBar/SegmentedBar.module.css.js.map +1 -1
  522. package/dist/components/SegmentedBar/index.d.ts +1 -1
  523. package/dist/components/SegmentedBar.cjs +1 -1
  524. package/dist/components/Separator/Separator.cjs +1 -1
  525. package/dist/components/Separator/Separator.cjs.map +1 -1
  526. package/dist/components/Separator/Separator.d.ts +2 -2
  527. package/dist/components/Separator/Separator.js +2 -2
  528. package/dist/components/Separator/Separator.js.map +1 -1
  529. package/dist/components/Separator/index.d.ts +1 -1
  530. package/dist/components/Separator.cjs +1 -1
  531. package/dist/components/ShortcutLabel/ShortcutLabel.cjs +1 -1
  532. package/dist/components/ShortcutLabel/ShortcutLabel.cjs.map +1 -1
  533. package/dist/components/ShortcutLabel/ShortcutLabel.d.ts +1 -1
  534. package/dist/components/ShortcutLabel/ShortcutLabel.js +2 -3
  535. package/dist/components/ShortcutLabel/ShortcutLabel.js.map +1 -1
  536. package/dist/components/ShortcutLabel/index.d.ts +1 -1
  537. package/dist/components/ShortcutLabel.cjs +1 -1
  538. package/dist/components/ShortcutsDialog/ShortcutsDialog.cjs +1 -1
  539. package/dist/components/ShortcutsDialog/ShortcutsDialog.cjs.map +1 -1
  540. package/dist/components/ShortcutsDialog/ShortcutsDialog.d.ts +1 -1
  541. package/dist/components/ShortcutsDialog/ShortcutsDialog.js +2 -4
  542. package/dist/components/ShortcutsDialog/ShortcutsDialog.js.map +1 -1
  543. package/dist/components/ShortcutsDialog/ShortcutsDialog.module.css.cjs +1 -1
  544. package/dist/components/ShortcutsDialog/ShortcutsDialog.module.css.cjs.map +1 -1
  545. package/dist/components/ShortcutsDialog/ShortcutsDialog.module.css.js +23 -24
  546. package/dist/components/ShortcutsDialog/ShortcutsDialog.module.css.js.map +1 -1
  547. package/dist/components/ShortcutsDialog/index.d.ts +1 -1
  548. package/dist/components/ShortcutsDialog.cjs +1 -1
  549. package/dist/components/Sidebar/Sidebar.cjs +1 -1
  550. package/dist/components/Sidebar/Sidebar.cjs.map +1 -1
  551. package/dist/components/Sidebar/Sidebar.d.ts +3 -3
  552. package/dist/components/Sidebar/Sidebar.js +2 -3
  553. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  554. package/dist/components/Sidebar/Sidebar.module.css.cjs +1 -1
  555. package/dist/components/Sidebar/Sidebar.module.css.cjs.map +1 -1
  556. package/dist/components/Sidebar/Sidebar.module.css.js +34 -35
  557. package/dist/components/Sidebar/Sidebar.module.css.js.map +1 -1
  558. package/dist/components/Sidebar/SidebarItem.cjs +1 -1
  559. package/dist/components/Sidebar/SidebarItem.cjs.map +1 -1
  560. package/dist/components/Sidebar/SidebarItem.d.ts +2 -2
  561. package/dist/components/Sidebar/SidebarItem.js +16 -16
  562. package/dist/components/Sidebar/SidebarItem.js.map +1 -1
  563. package/dist/components/Sidebar/SidebarSection.cjs +1 -1
  564. package/dist/components/Sidebar/SidebarSection.cjs.map +1 -1
  565. package/dist/components/Sidebar/SidebarSection.d.ts +1 -1
  566. package/dist/components/Sidebar/SidebarSection.js +0 -1
  567. package/dist/components/Sidebar/SidebarSection.js.map +1 -1
  568. package/dist/components/Sidebar/index.d.ts +4 -4
  569. package/dist/components/Sidebar.cjs +1 -1
  570. package/dist/components/Sidebar.js +3 -3
  571. package/dist/components/Skeleton/Skeleton.cjs +1 -1
  572. package/dist/components/Skeleton/Skeleton.cjs.map +1 -1
  573. package/dist/components/Skeleton/Skeleton.d.ts +2 -2
  574. package/dist/components/Skeleton/Skeleton.js +9 -10
  575. package/dist/components/Skeleton/Skeleton.js.map +1 -1
  576. package/dist/components/Skeleton/Skeleton.module.css.cjs +1 -1
  577. package/dist/components/Skeleton/Skeleton.module.css.cjs.map +1 -1
  578. package/dist/components/Skeleton/Skeleton.module.css.js +7 -7
  579. package/dist/components/Skeleton/Skeleton.module.css.js.map +1 -1
  580. package/dist/components/Skeleton/index.d.ts +1 -1
  581. package/dist/components/Skeleton.cjs +1 -1
  582. package/dist/components/Slider/Slider.cjs +1 -1
  583. package/dist/components/Slider/Slider.cjs.map +1 -1
  584. package/dist/components/Slider/Slider.d.ts +5 -5
  585. package/dist/components/Slider/Slider.js +2 -2
  586. package/dist/components/Slider/Slider.js.map +1 -1
  587. package/dist/components/Slider/Slider.module.css.cjs +1 -1
  588. package/dist/components/Slider/Slider.module.css.cjs.map +1 -1
  589. package/dist/components/Slider/Slider.module.css.js +9 -9
  590. package/dist/components/Slider/Slider.module.css.js.map +1 -1
  591. package/dist/components/Slider/index.d.ts +1 -1
  592. package/dist/components/Slider.cjs +1 -1
  593. package/dist/components/SpinButton/SpinButton.cjs +1 -1
  594. package/dist/components/SpinButton/SpinButton.cjs.map +1 -1
  595. package/dist/components/SpinButton/SpinButton.d.ts +4 -4
  596. package/dist/components/SpinButton/SpinButton.js +2 -2
  597. package/dist/components/SpinButton/SpinButton.js.map +1 -1
  598. package/dist/components/SpinButton/SpinButton.module.css.cjs +1 -1
  599. package/dist/components/SpinButton/SpinButton.module.css.cjs.map +1 -1
  600. package/dist/components/SpinButton/SpinButton.module.css.js +4 -4
  601. package/dist/components/SpinButton/SpinButton.module.css.js.map +1 -1
  602. package/dist/components/SpinButton/index.d.ts +1 -1
  603. package/dist/components/SpinButton.cjs +1 -1
  604. package/dist/components/SpinRow/SpinRow.cjs +1 -1
  605. package/dist/components/SpinRow/SpinRow.cjs.map +1 -1
  606. package/dist/components/SpinRow/SpinRow.d.ts +2 -2
  607. package/dist/components/SpinRow/SpinRow.js +2 -2
  608. package/dist/components/SpinRow/SpinRow.js.map +1 -1
  609. package/dist/components/SpinRow/SpinRow.module.css.cjs +1 -1
  610. package/dist/components/SpinRow/SpinRow.module.css.cjs.map +1 -1
  611. package/dist/components/SpinRow/SpinRow.module.css.js +9 -9
  612. package/dist/components/SpinRow/SpinRow.module.css.js.map +1 -1
  613. package/dist/components/SpinRow/index.d.ts +1 -1
  614. package/dist/components/SpinRow.cjs +1 -1
  615. package/dist/components/Spinner/Spinner.cjs +1 -1
  616. package/dist/components/Spinner/Spinner.cjs.map +1 -1
  617. package/dist/components/Spinner/Spinner.d.ts +2 -2
  618. package/dist/components/Spinner/Spinner.js +2 -2
  619. package/dist/components/Spinner/Spinner.js.map +1 -1
  620. package/dist/components/Spinner/Spinner.module.css.cjs +1 -1
  621. package/dist/components/Spinner/Spinner.module.css.cjs.map +1 -1
  622. package/dist/components/Spinner/Spinner.module.css.js +5 -5
  623. package/dist/components/Spinner/Spinner.module.css.js.map +1 -1
  624. package/dist/components/Spinner/index.d.ts +1 -1
  625. package/dist/components/Spinner.cjs +1 -1
  626. package/dist/components/SplitButton/SplitButton.cjs +1 -1
  627. package/dist/components/SplitButton/SplitButton.cjs.map +1 -1
  628. package/dist/components/SplitButton/SplitButton.d.ts +3 -3
  629. package/dist/components/SplitButton/SplitButton.js +2 -2
  630. package/dist/components/SplitButton/SplitButton.js.map +1 -1
  631. package/dist/components/SplitButton/SplitButton.module.css.cjs +1 -1
  632. package/dist/components/SplitButton/SplitButton.module.css.cjs.map +1 -1
  633. package/dist/components/SplitButton/SplitButton.module.css.js +10 -10
  634. package/dist/components/SplitButton/SplitButton.module.css.js.map +1 -1
  635. package/dist/components/SplitButton/index.d.ts +1 -1
  636. package/dist/components/SplitButton.cjs +1 -1
  637. package/dist/components/StatusBadge/StatusBadge.cjs +1 -1
  638. package/dist/components/StatusBadge/StatusBadge.cjs.map +1 -1
  639. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -2
  640. package/dist/components/StatusBadge/StatusBadge.js +9 -11
  641. package/dist/components/StatusBadge/StatusBadge.js.map +1 -1
  642. package/dist/components/StatusBadge/index.d.ts +1 -1
  643. package/dist/components/StatusBadge.cjs +1 -1
  644. package/dist/components/StatusPage/StatusPage.cjs +1 -1
  645. package/dist/components/StatusPage/StatusPage.cjs.map +1 -1
  646. package/dist/components/StatusPage/StatusPage.d.ts +2 -2
  647. package/dist/components/StatusPage/StatusPage.js +2 -2
  648. package/dist/components/StatusPage/StatusPage.js.map +1 -1
  649. package/dist/components/StatusPage/index.d.ts +1 -1
  650. package/dist/components/StatusPage.cjs +1 -1
  651. package/dist/components/Switch/Switch.cjs +1 -1
  652. package/dist/components/Switch/Switch.cjs.map +1 -1
  653. package/dist/components/Switch/Switch.d.ts +3 -3
  654. package/dist/components/Switch/Switch.js +6 -8
  655. package/dist/components/Switch/Switch.js.map +1 -1
  656. package/dist/components/Switch/Switch.module.css.cjs +1 -1
  657. package/dist/components/Switch/Switch.module.css.cjs.map +1 -1
  658. package/dist/components/Switch/Switch.module.css.js +1 -1
  659. package/dist/components/Switch/Switch.module.css.js.map +1 -1
  660. package/dist/components/Switch/index.d.ts +1 -1
  661. package/dist/components/Switch.cjs +1 -1
  662. package/dist/components/SwitchRow/SwitchRow.cjs +1 -1
  663. package/dist/components/SwitchRow/SwitchRow.cjs.map +1 -1
  664. package/dist/components/SwitchRow/SwitchRow.d.ts +2 -2
  665. package/dist/components/SwitchRow/SwitchRow.js +7 -7
  666. package/dist/components/SwitchRow/SwitchRow.js.map +1 -1
  667. package/dist/components/SwitchRow/SwitchRow.module.css.cjs +1 -1
  668. package/dist/components/SwitchRow/SwitchRow.module.css.cjs.map +1 -1
  669. package/dist/components/SwitchRow/SwitchRow.module.css.js +9 -9
  670. package/dist/components/SwitchRow/SwitchRow.module.css.js.map +1 -1
  671. package/dist/components/SwitchRow/index.d.ts +1 -1
  672. package/dist/components/SwitchRow.cjs +1 -1
  673. package/dist/components/Tabs/TabBar.cjs +1 -1
  674. package/dist/components/Tabs/TabBar.cjs.map +1 -1
  675. package/dist/components/Tabs/TabBar.d.ts +2 -2
  676. package/dist/components/Tabs/TabBar.js +10 -10
  677. package/dist/components/Tabs/TabBar.js.map +1 -1
  678. package/dist/components/Tabs/TabItem.cjs +1 -1
  679. package/dist/components/Tabs/TabItem.cjs.map +1 -1
  680. package/dist/components/Tabs/TabItem.d.ts +1 -1
  681. package/dist/components/Tabs/TabItem.js.map +1 -1
  682. package/dist/components/Tabs/TabPanel.cjs +1 -1
  683. package/dist/components/Tabs/TabPanel.cjs.map +1 -1
  684. package/dist/components/Tabs/TabPanel.d.ts +1 -1
  685. package/dist/components/Tabs/TabPanel.js +8 -11
  686. package/dist/components/Tabs/TabPanel.js.map +1 -1
  687. package/dist/components/Tabs/Tabs.module.css.cjs +1 -1
  688. package/dist/components/Tabs/Tabs.module.css.cjs.map +1 -1
  689. package/dist/components/Tabs/Tabs.module.css.js +10 -10
  690. package/dist/components/Tabs/Tabs.module.css.js.map +1 -1
  691. package/dist/components/Tabs/index.d.ts +3 -3
  692. package/dist/components/Tabs.cjs +1 -1
  693. package/dist/components/TerminalView/TerminalView.cjs +1 -1
  694. package/dist/components/TerminalView/TerminalView.cjs.map +1 -1
  695. package/dist/components/TerminalView/TerminalView.d.ts +2 -2
  696. package/dist/components/TerminalView/TerminalView.js +3 -3
  697. package/dist/components/TerminalView/TerminalView.js.map +1 -1
  698. package/dist/components/TerminalView/index.d.ts +1 -1
  699. package/dist/components/TerminalView.cjs +1 -1
  700. package/dist/components/Text/Text.cjs +1 -1
  701. package/dist/components/Text/Text.cjs.map +1 -1
  702. package/dist/components/Text/Text.d.ts +3 -3
  703. package/dist/components/Text/Text.js +10 -13
  704. package/dist/components/Text/Text.js.map +1 -1
  705. package/dist/components/Text/Text.module.css.cjs +1 -1
  706. package/dist/components/Text/Text.module.css.js +9 -10
  707. package/dist/components/Text/index.d.ts +1 -1
  708. package/dist/components/Text.cjs +1 -1
  709. package/dist/components/TextField/TextField.cjs +1 -1
  710. package/dist/components/TextField/TextField.cjs.map +1 -1
  711. package/dist/components/TextField/TextField.d.ts +2 -2
  712. package/dist/components/TextField/TextField.js +2 -2
  713. package/dist/components/TextField/TextField.js.map +1 -1
  714. package/dist/components/TextField/TextField.module.css.cjs +1 -1
  715. package/dist/components/TextField/TextField.module.css.cjs.map +1 -1
  716. package/dist/components/TextField/TextField.module.css.js +7 -7
  717. package/dist/components/TextField/TextField.module.css.js.map +1 -1
  718. package/dist/components/TextField/index.d.ts +1 -1
  719. package/dist/components/TextField.cjs +1 -1
  720. package/dist/components/Timeline/Timeline.cjs +1 -1
  721. package/dist/components/Timeline/Timeline.cjs.map +1 -1
  722. package/dist/components/Timeline/Timeline.d.ts +3 -3
  723. package/dist/components/Timeline/Timeline.js +2 -2
  724. package/dist/components/Timeline/Timeline.js.map +1 -1
  725. package/dist/components/Timeline/index.d.ts +1 -1
  726. package/dist/components/Timeline.cjs +1 -1
  727. package/dist/components/Toast/Toast.cjs +1 -1
  728. package/dist/components/Toast/Toast.cjs.map +1 -1
  729. package/dist/components/Toast/Toast.d.ts +2 -2
  730. package/dist/components/Toast/Toast.js +40 -36
  731. package/dist/components/Toast/Toast.js.map +1 -1
  732. package/dist/components/Toast/Toast.module.css.cjs +1 -1
  733. package/dist/components/Toast/Toast.module.css.cjs.map +1 -1
  734. package/dist/components/Toast/Toast.module.css.js +11 -12
  735. package/dist/components/Toast/Toast.module.css.js.map +1 -1
  736. package/dist/components/Toast/Toaster.cjs +1 -1
  737. package/dist/components/Toast/Toaster.cjs.map +1 -1
  738. package/dist/components/Toast/Toaster.d.ts +2 -2
  739. package/dist/components/Toast/Toaster.js +2 -2
  740. package/dist/components/Toast/Toaster.js.map +1 -1
  741. package/dist/components/Toast/index.d.ts +2 -2
  742. package/dist/components/Toast.cjs +1 -1
  743. package/dist/components/ToggleGroup/ToggleGroup.cjs +1 -1
  744. package/dist/components/ToggleGroup/ToggleGroup.cjs.map +1 -1
  745. package/dist/components/ToggleGroup/ToggleGroup.d.ts +2 -2
  746. package/dist/components/ToggleGroup/ToggleGroup.js +10 -10
  747. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -1
  748. package/dist/components/ToggleGroup/ToggleGroup.module.css.cjs +1 -1
  749. package/dist/components/ToggleGroup/ToggleGroup.module.css.cjs.map +1 -1
  750. package/dist/components/ToggleGroup/ToggleGroup.module.css.js +6 -6
  751. package/dist/components/ToggleGroup/ToggleGroup.module.css.js.map +1 -1
  752. package/dist/components/ToggleGroup/ToggleGroupItem.cjs +1 -1
  753. package/dist/components/ToggleGroup/ToggleGroupItem.cjs.map +1 -1
  754. package/dist/components/ToggleGroup/ToggleGroupItem.d.ts +2 -2
  755. package/dist/components/ToggleGroup/ToggleGroupItem.js +2 -2
  756. package/dist/components/ToggleGroup/ToggleGroupItem.js.map +1 -1
  757. package/dist/components/ToggleGroup/index.d.ts +2 -2
  758. package/dist/components/ToggleGroup.cjs +1 -1
  759. package/dist/components/Toolbar/Spacer.cjs +1 -1
  760. package/dist/components/Toolbar/Spacer.cjs.map +1 -1
  761. package/dist/components/Toolbar/Spacer.d.ts +2 -3
  762. package/dist/components/Toolbar/Spacer.js +5 -7
  763. package/dist/components/Toolbar/Spacer.js.map +1 -1
  764. package/dist/components/Toolbar/Toolbar.cjs +1 -1
  765. package/dist/components/Toolbar/Toolbar.cjs.map +1 -1
  766. package/dist/components/Toolbar/Toolbar.d.ts +1 -1
  767. package/dist/components/Toolbar/Toolbar.js +5 -7
  768. package/dist/components/Toolbar/Toolbar.js.map +1 -1
  769. package/dist/components/Toolbar/index.d.ts +3 -3
  770. package/dist/components/Toolbar.cjs +1 -1
  771. package/dist/components/Toolbar.js +3 -3
  772. package/dist/components/ToolbarView/ToolbarView.cjs +1 -1
  773. package/dist/components/ToolbarView/ToolbarView.cjs.map +1 -1
  774. package/dist/components/ToolbarView/ToolbarView.d.ts +1 -1
  775. package/dist/components/ToolbarView/ToolbarView.js +18 -20
  776. package/dist/components/ToolbarView/ToolbarView.js.map +1 -1
  777. package/dist/components/ToolbarView/index.d.ts +1 -1
  778. package/dist/components/ToolbarView.cjs +1 -1
  779. package/dist/components/Tooltip/Tooltip.cjs +1 -1
  780. package/dist/components/Tooltip/Tooltip.cjs.map +1 -1
  781. package/dist/components/Tooltip/Tooltip.d.ts +3 -3
  782. package/dist/components/Tooltip/Tooltip.js +6 -6
  783. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  784. package/dist/components/Tooltip/Tooltip.module.css.cjs +1 -1
  785. package/dist/components/Tooltip/Tooltip.module.css.cjs.map +1 -1
  786. package/dist/components/Tooltip/Tooltip.module.css.js +6 -6
  787. package/dist/components/Tooltip/Tooltip.module.css.js.map +1 -1
  788. package/dist/components/Tooltip/index.d.ts +1 -1
  789. package/dist/components/Tooltip.cjs +1 -1
  790. package/dist/components/ViewSwitcher/ViewSwitcher.cjs +1 -1
  791. package/dist/components/ViewSwitcher/ViewSwitcher.cjs.map +1 -1
  792. package/dist/components/ViewSwitcher/ViewSwitcher.d.ts +2 -2
  793. package/dist/components/ViewSwitcher/ViewSwitcher.js +10 -10
  794. package/dist/components/ViewSwitcher/ViewSwitcher.js.map +1 -1
  795. package/dist/components/ViewSwitcher/ViewSwitcher.module.css.cjs +1 -1
  796. package/dist/components/ViewSwitcher/ViewSwitcher.module.css.cjs.map +1 -1
  797. package/dist/components/ViewSwitcher/ViewSwitcher.module.css.js +5 -5
  798. package/dist/components/ViewSwitcher/ViewSwitcher.module.css.js.map +1 -1
  799. package/dist/components/ViewSwitcher/ViewSwitcherItem.cjs +1 -1
  800. package/dist/components/ViewSwitcher/ViewSwitcherItem.cjs.map +1 -1
  801. package/dist/components/ViewSwitcher/ViewSwitcherItem.d.ts +2 -2
  802. package/dist/components/ViewSwitcher/ViewSwitcherItem.js +24 -26
  803. package/dist/components/ViewSwitcher/ViewSwitcherItem.js.map +1 -1
  804. package/dist/components/ViewSwitcher/index.d.ts +2 -2
  805. package/dist/components/ViewSwitcher.cjs +1 -1
  806. package/dist/components/ViewSwitcherBar/ViewSwitcherBar.cjs +1 -1
  807. package/dist/components/ViewSwitcherBar/ViewSwitcherBar.cjs.map +1 -1
  808. package/dist/components/ViewSwitcherBar/ViewSwitcherBar.d.ts +1 -1
  809. package/dist/components/ViewSwitcherBar/ViewSwitcherBar.js +7 -9
  810. package/dist/components/ViewSwitcherBar/ViewSwitcherBar.js.map +1 -1
  811. package/dist/components/ViewSwitcherBar/ViewSwitcherBar.module.css.cjs +1 -1
  812. package/dist/components/ViewSwitcherBar/ViewSwitcherBar.module.css.cjs.map +1 -1
  813. package/dist/components/ViewSwitcherBar/ViewSwitcherBar.module.css.js +1 -1
  814. package/dist/components/ViewSwitcherBar/ViewSwitcherBar.module.css.js.map +1 -1
  815. package/dist/components/ViewSwitcherBar/index.d.ts +1 -1
  816. package/dist/components/ViewSwitcherBar.cjs +1 -1
  817. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.cjs +1 -1
  818. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.cjs.map +1 -1
  819. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.d.ts +2 -2
  820. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.js +10 -10
  821. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.js.map +1 -1
  822. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.module.css.cjs +1 -1
  823. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.module.css.cjs.map +1 -1
  824. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.module.css.js +14 -14
  825. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebar.module.css.js.map +1 -1
  826. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebarItem.cjs +1 -1
  827. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebarItem.cjs.map +1 -1
  828. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebarItem.d.ts +2 -2
  829. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebarItem.js +2 -2
  830. package/dist/components/ViewSwitcherSidebar/ViewSwitcherSidebarItem.js.map +1 -1
  831. package/dist/components/ViewSwitcherSidebar/index.d.ts +2 -2
  832. package/dist/components/ViewSwitcherSidebar.cjs +1 -1
  833. package/dist/components/WindowTitle/WindowTitle.cjs +1 -1
  834. package/dist/components/WindowTitle/WindowTitle.cjs.map +1 -1
  835. package/dist/components/WindowTitle/WindowTitle.d.ts +1 -1
  836. package/dist/components/WindowTitle/WindowTitle.js +11 -13
  837. package/dist/components/WindowTitle/WindowTitle.js.map +1 -1
  838. package/dist/components/WindowTitle/index.d.ts +1 -1
  839. package/dist/components/WindowTitle.cjs +1 -1
  840. package/dist/components/WrapBox/WrapBox.cjs +1 -1
  841. package/dist/components/WrapBox/WrapBox.cjs.map +1 -1
  842. package/dist/components/WrapBox/WrapBox.d.ts +3 -3
  843. package/dist/components/WrapBox/WrapBox.js +5 -5
  844. package/dist/components/WrapBox/WrapBox.js.map +1 -1
  845. package/dist/components/WrapBox/index.d.ts +1 -1
  846. package/dist/components/WrapBox.cjs +1 -1
  847. package/dist/hooks/index.d.ts +3 -3
  848. package/dist/hooks/useBreakpoint.cjs +1 -1
  849. package/dist/hooks/useBreakpoint.cjs.map +1 -1
  850. package/dist/hooks/useBreakpoint.js +12 -12
  851. package/dist/hooks/useBreakpoint.js.map +1 -1
  852. package/dist/hooks.cjs +1 -1
  853. package/dist/index.cjs +1 -1
  854. package/dist/index.d.ts +153 -153
  855. package/dist/index.js +5 -5
  856. package/dist/style.css +1 -1
  857. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"PathBar.module.css.js","names":[],"sources":["../../../src/components/PathBar/PathBar.module.css"],"sourcesContent":["/* ─── Root ────────────────────────────────────────────────────────────────── */\n\n.pathBar {\n display: flex;\n align-items: center;\n min-width: 0;\n font-family: var(--gnome-font-family, sans-serif);\n}\n\n/* ─── List ────────────────────────────────────────────────────────────────── */\n\n.list {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0;\n margin: 0;\n padding: 0;\n list-style: none;\n min-width: 0;\n}\n\n/* ─── Item ────────────────────────────────────────────────────────────────── */\n\n.item {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n/* ─── Separator ───────────────────────────────────────────────────────────── */\n\n.separator {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.35));\n opacity: 0.5;\n margin: 0 1px;\n}\n\n/* ─── Ancestor segment (button) ───────────────────────────────────────────── */\n\n.segment {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 6px;\n border-radius: var(--gnome-radius-sm, 6px);\n border: none;\n background: transparent;\n font-family: inherit;\n font-size: var(--gnome-font-size-body, 1rem);\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n cursor: pointer;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 160px;\n transition: background-color var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n}\n\n.segment:hover {\n background-color: var(--gnome-hover-overlay, rgba(0, 0, 0, 0.06));\n}\n\n.segment:active {\n background-color: var(--gnome-active-overlay, rgba(0, 0, 0, 0.12));\n}\n\n.segment:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 var(--gnome-focus-ring-offset, 2px) var(--gnome-window-bg-color, #fafafa),\n 0 0 0 calc(var(--gnome-focus-ring-offset, 2px) + var(--gnome-focus-ring-width, 2px))\n var(--gnome-focus-ring-color, #3584e4);\n}\n\n/* ─── Current segment (non-interactive) ──────────────────────────────────── */\n\n.current {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 6px;\n font-family: inherit;\n font-size: var(--gnome-font-size-body, 1rem);\n font-weight: var(--gnome-font-weight-semibold, 600);\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n/* ─── Icon ────────────────────────────────────────────────────────────────── */\n\n.icon {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n/* ─── Reduced motion ──────────────────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n .segment {\n transition: none;\n }\n}\n\n/* ─── Dark mode ───────────────────────────────────────────────────────────── */\n\n@media (prefers-color-scheme: dark) {\n .segment:hover {\n background-color: rgba(255, 255, 255, 0.08);\n }\n\n .segment:active {\n background-color: rgba(255, 255, 255, 0.14);\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"PathBar.module.css.js","names":[],"sources":["../../../src/components/PathBar/PathBar.module.css"],"sourcesContent":["/* ─── Root ────────────────────────────────────────────────────────────────── */\n\n.pathBar {\n display: flex;\n align-items: center;\n min-width: 0;\n font-family: var(--gnome-font-family, sans-serif);\n}\n\n/* ─── List ────────────────────────────────────────────────────────────────── */\n\n.list {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0;\n margin: 0;\n padding: 0;\n list-style: none;\n min-width: 0;\n}\n\n/* ─── Item ────────────────────────────────────────────────────────────────── */\n\n.item {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n/* ─── Separator ───────────────────────────────────────────────────────────── */\n\n.separator {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.35));\n opacity: 0.5;\n margin: 0 1px;\n}\n\n/* ─── Ancestor segment (button) ───────────────────────────────────────────── */\n\n.segment {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 6px;\n border-radius: var(--gnome-radius-sm, 6px);\n border: none;\n background: transparent;\n font-family: inherit;\n font-size: var(--gnome-font-size-body, 1rem);\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n cursor: pointer;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 160px;\n transition: background-color var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n}\n\n.segment:hover {\n background-color: var(--gnome-hover-overlay, rgba(0, 0, 0, 0.06));\n}\n\n.segment:active {\n background-color: var(--gnome-active-overlay, rgba(0, 0, 0, 0.12));\n}\n\n.segment:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 var(--gnome-focus-ring-offset, 2px) var(--gnome-window-bg-color, #fafafa),\n 0 0 0 calc(var(--gnome-focus-ring-offset, 2px) + var(--gnome-focus-ring-width, 2px))\n var(--gnome-focus-ring-color, #3584e4);\n}\n\n/* ─── Current segment (non-interactive) ──────────────────────────────────── */\n\n.current {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 6px;\n font-family: inherit;\n font-size: var(--gnome-font-size-body, 1rem);\n font-weight: var(--gnome-font-weight-semibold, 600);\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n/* ─── Icon ────────────────────────────────────────────────────────────────── */\n\n.icon {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n/* ─── Reduced motion ──────────────────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n .segment {\n transition: none;\n }\n}\n\n/* ─── Dark mode ───────────────────────────────────────────────────────────── */\n\n@media (prefers-color-scheme: dark) {\n .segment:hover {\n background-color: rgba(255, 255, 255, 0.08);\n }\n\n .segment:active {\n background-color: rgba(255, 255, 255, 0.14);\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- export { PathBar } from './PathBar';
2
1
  export type { PathBarProps, PathBarSegment } from './PathBar';
2
+ export { PathBar } from './PathBar';
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./PathBar/PathBar.cjs`);exports.PathBar=e.PathBar;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./PathBar/PathBar.cjs");exports.PathBar=e.PathBar;
@@ -1,2 +1,2 @@
1
- const e=require(`./Popover.module.css.cjs`);let t=require(`react`),n=require(`react-dom`),r=require(`react/jsx-runtime`);var i=8,a=10,o=6;function s(e,t,n){let r=window.innerWidth,s=window.innerHeight,c=[...new Set([n,n===`top`?`bottom`:n===`bottom`?`top`:n===`left`?`right`:`left`,`bottom`,`top`,`left`,`right`])];function l(n){return n===`bottom`?{top:e.bottom+i,left:e.left+e.width/2-t.width/2}:n===`top`?{top:e.top-t.height-i,left:e.left+e.width/2-t.width/2}:n===`left`?{top:e.top+e.height/2-t.height/2,left:e.left-t.width-i}:{top:e.top+e.height/2-t.height/2,left:e.right+i}}for(let n of c){let{top:i,left:o}=l(n),c=o>=a&&o+t.width<=r-a,u=i>=a&&i+t.height<=s-a;if(c&&u)return{top:i,left:o,placement:n,arrowOffset:n===`top`||n===`bottom`?e.left+e.width/2-o:e.top+e.height/2-i}}for(let n of c){let{top:i,left:c}=l(n),u=i>=a&&i+t.height<=s-a,d=c>=a&&c+t.width<=r-a;if((n===`top`||n===`bottom`)&&u){let s=Math.max(a,Math.min(c,r-t.width-a)),l=e.left+e.width/2-s;return{top:i,left:s,placement:n,arrowOffset:Math.max(o+4,Math.min(l,t.width-o-4))}}if((n===`left`||n===`right`)&&d){let r=Math.max(a,Math.min(i,s-t.height-a)),l=e.top+e.height/2-r;return{top:r,left:c,placement:n,arrowOffset:Math.max(o+4,Math.min(l,t.height-o-4))}}}let u=e.bottom+i,d=e.left+e.width/2-t.width/2,f=Math.max(a,Math.min(u,s-t.height-a)),p=Math.max(a,Math.min(d,r-t.width-a)),m=e.left+e.width/2-p;return{top:f,left:p,placement:`bottom`,arrowOffset:Math.max(o+4,Math.min(m,t.width-o-4))}}function c({content:i,placement:a=`bottom`,open:c,onClose:l,onOpenChange:u,children:d}){let f=c!==void 0,[p,m]=(0,t.useState)(!1),h=f?c:p,[g,_]=(0,t.useState)(null),v=(0,t.useId)(),y=(0,t.useId)(),b=(0,t.useRef)(null),x=(0,t.useRef)(null),S=(0,t.useRef)(null),C=(0,t.useCallback)(()=>{f?l?.():m(!1),u?.(!1)},[f,l,u]),w=(0,t.useCallback)(()=>{h?C():(f||m(!0),u?.(!0))},[h,C,f,u]),T=(0,t.useCallback)(()=>{!b.current||!x.current||_(s(b.current.getBoundingClientRect(),x.current.getBoundingClientRect(),a))},[a]);(0,t.useEffect)(()=>{if(!h)return;let e=requestAnimationFrame(()=>{T(),window.addEventListener(`scroll`,T,{passive:!0,capture:!0}),window.addEventListener(`resize`,T,{passive:!0})});return()=>{cancelAnimationFrame(e),window.removeEventListener(`scroll`,T,{capture:!0}),window.removeEventListener(`resize`,T)}},[h,T]),(0,t.useEffect)(()=>{h?(S.current=document.activeElement,requestAnimationFrame(()=>{(x.current?.querySelector(`button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])`)??x.current)?.focus()})):(S.current?.focus(),_(null))},[h]),(0,t.useEffect)(()=>{if(!h)return;let e=e=>{!b.current?.contains(e.target)&&!x.current?.contains(e.target)&&C()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[h,C]);let E=(0,t.useCallback)(e=>{e.key===`Escape`&&(e.stopPropagation(),C())},[C]),D=(0,t.cloneElement)(d,{ref:b,id:v,"aria-haspopup":`dialog`,"aria-expanded":h,"aria-controls":h?y:void 0,onClick:e=>{w(),d.props.onClick?.(e)}}),O=(0,r.jsxs)(`div`,{ref:x,id:y,role:`dialog`,"aria-labelledby":v,tabIndex:-1,className:[e.default.panel,g?e.default[g.placement]:null,h&&g?e.default.visible:null].filter(Boolean).join(` `),style:g?{top:g.top,left:g.left}:{visibility:`hidden`,pointerEvents:`none`,top:-9999,left:-9999},onKeyDown:E,children:[(0,r.jsx)(`div`,{className:e.default.arrow,"aria-hidden":`true`,style:g?.arrowOffset===void 0?void 0:g.placement===`top`||g.placement===`bottom`?{left:g.arrowOffset-o,marginLeft:0}:{top:g.arrowOffset-o,marginTop:0}}),i]});return(0,r.jsxs)(r.Fragment,{children:[D,h&&(typeof document<`u`?(0,n.createPortal)(O,document.body):O)]})}exports.Popover=c;
1
+ const e=require("./Popover.module.css.cjs");let t=require("react"),n=require("react-dom"),r=require("react/jsx-runtime");var i=8,a=10,o=6;function s(e,t,n){let r=window.innerWidth,s=window.innerHeight,c=[...new Set([n,n===`top`?`bottom`:n===`bottom`?`top`:n===`left`?`right`:`left`,`bottom`,`top`,`left`,`right`])];function l(n){return n===`bottom`?{top:e.bottom+i,left:e.left+e.width/2-t.width/2}:n===`top`?{top:e.top-t.height-i,left:e.left+e.width/2-t.width/2}:n===`left`?{top:e.top+e.height/2-t.height/2,left:e.left-t.width-i}:{top:e.top+e.height/2-t.height/2,left:e.right+i}}for(let n of c){let{top:i,left:o}=l(n),c=o>=a&&o+t.width<=r-a,u=i>=a&&i+t.height<=s-a;if(c&&u)return{top:i,left:o,placement:n,arrowOffset:n===`top`||n===`bottom`?e.left+e.width/2-o:e.top+e.height/2-i}}for(let n of c){let{top:i,left:c}=l(n),u=i>=a&&i+t.height<=s-a,d=c>=a&&c+t.width<=r-a;if((n===`top`||n===`bottom`)&&u){let s=Math.max(a,Math.min(c,r-t.width-a)),l=e.left+e.width/2-s;return{top:i,left:s,placement:n,arrowOffset:Math.max(10,Math.min(l,t.width-o-4))}}if((n===`left`||n===`right`)&&d){let r=Math.max(a,Math.min(i,s-t.height-a)),l=e.top+e.height/2-r;return{top:r,left:c,placement:n,arrowOffset:Math.max(10,Math.min(l,t.height-o-4))}}}let u=e.bottom+i,d=e.left+e.width/2-t.width/2,f=Math.max(a,Math.min(u,s-t.height-a)),p=Math.max(a,Math.min(d,r-t.width-a)),m=e.left+e.width/2-p;return{top:f,left:p,placement:`bottom`,arrowOffset:Math.max(10,Math.min(m,t.width-o-4))}}var c=({content:i,placement:a=`bottom`,open:c,onClose:l,onOpenChange:u,children:d})=>{let f=c!==void 0,[p,m]=(0,t.useState)(!1),h=f?c:p,[g,_]=(0,t.useState)(null),v=(0,t.useId)(),y=(0,t.useId)(),b=(0,t.useRef)(null),x=(0,t.useRef)(null),S=(0,t.useRef)(null),C=(0,t.useCallback)(()=>{f?l?.():m(!1),u?.(!1)},[f,l,u]),w=(0,t.useCallback)(()=>{h?C():(f||m(!0),u?.(!0))},[h,C,f,u]),T=(0,t.useCallback)(()=>{!b.current||!x.current||_(s(b.current.getBoundingClientRect(),x.current.getBoundingClientRect(),a))},[a]);(0,t.useEffect)(()=>{if(!h)return;let e=requestAnimationFrame(()=>{T(),window.addEventListener(`scroll`,T,{passive:!0,capture:!0}),window.addEventListener(`resize`,T,{passive:!0})});return()=>{cancelAnimationFrame(e),window.removeEventListener(`scroll`,T,{capture:!0}),window.removeEventListener(`resize`,T)}},[h,T]),(0,t.useEffect)(()=>{h?(S.current=document.activeElement,requestAnimationFrame(()=>{(x.current?.querySelector(`button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])`)??x.current)?.focus()})):(S.current?.focus(),_(null))},[h]),(0,t.useEffect)(()=>{if(!h)return;let e=e=>{!b.current?.contains(e.target)&&!x.current?.contains(e.target)&&C()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[h,C]);let E=(0,t.useCallback)(e=>{e.key===`Escape`&&(e.stopPropagation(),C())},[C]),D=(0,t.cloneElement)(d,{ref:b,id:v,"aria-haspopup":`dialog`,"aria-expanded":h,"aria-controls":h?y:void 0,onClick:e=>{w(),d.props.onClick?.(e)}}),O=(0,r.jsxs)(`div`,{ref:x,id:y,role:`dialog`,"aria-labelledby":v,tabIndex:-1,className:[e.default.panel,g?e.default[g.placement]:null,h&&g?e.default.visible:null].filter(Boolean).join(` `),style:g?{top:g.top,left:g.left}:{visibility:`hidden`,pointerEvents:`none`,top:-9999,left:-9999},onKeyDown:E,children:[(0,r.jsx)(`div`,{className:e.default.arrow,"aria-hidden":`true`,style:g?.arrowOffset===void 0?void 0:g.placement===`top`||g.placement===`bottom`?{left:g.arrowOffset-o,marginLeft:0}:{top:g.arrowOffset-o,marginTop:0}}),i]});return(0,r.jsxs)(r.Fragment,{children:[D,h&&(typeof document<`u`?(0,n.createPortal)(O,document.body):O)]})};exports.Popover=c;
2
2
  //# sourceMappingURL=Popover.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.cjs","names":[],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useId,\n useEffect,\n useCallback,\n cloneElement,\n type ReactElement,\n type HTMLAttributes,\n type ReactNode,\n type KeyboardEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"./Popover.module.css\";\n\nexport type PopoverPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface PopoverProps {\n /**\n * The rich content rendered inside the popover panel.\n * Can include interactive elements (buttons, links, forms).\n */\n content: ReactNode;\n /**\n * Preferred placement relative to the trigger.\n * Flips automatically when there is not enough viewport space.\n * Defaults to `\"bottom\"`.\n */\n placement?: PopoverPlacement;\n /**\n * Whether the popover is open (controlled mode).\n * Omit to use uncontrolled mode where the trigger toggles it.\n */\n open?: boolean;\n /**\n * Called when the popover requests to be closed\n * (Escape key, outside click, or trigger click while open).\n */\n onClose?: () => void;\n /**\n * Called when open state should change (controlled mode).\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * The trigger element. Must be a single React element that can\n * receive `ref` and click/keyboard event props.\n */\n children: ReactElement<HTMLAttributes<HTMLElement>>;\n}\n\ninterface Position {\n top: number;\n left: number;\n placement: PopoverPlacement;\n /** Arrow center offset in px from the near edge of the panel.\n * Horizontal (left) for top/bottom; vertical (top) for left/right.\n * Undefined means use the default 50% CSS. */\n arrowOffset?: number;\n}\n\nconst GAP = 8;\nconst MARGIN = 10;\nconst ARROW_HALF = 6; // half of the 12 px arrow\n\nfunction computePosition(\n trigger: DOMRect,\n popover: DOMRect,\n preferred: PopoverPlacement\n): Position {\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n const order: PopoverPlacement[] = [\n preferred,\n preferred === \"top\" ? \"bottom\"\n : preferred === \"bottom\" ? \"top\"\n : preferred === \"left\" ? \"right\"\n : \"left\",\n \"bottom\", \"top\", \"left\", \"right\",\n ];\n\n // De-duplicate while preserving order\n const candidates = [...new Set(order)];\n\n function calcRaw(p: PopoverPlacement): { top: number; left: number } {\n if (p === \"bottom\") return {\n top: trigger.bottom + GAP,\n left: trigger.left + trigger.width / 2 - popover.width / 2,\n };\n if (p === \"top\") return {\n top: trigger.top - popover.height - GAP,\n left: trigger.left + trigger.width / 2 - popover.width / 2,\n };\n if (p === \"left\") return {\n top: trigger.top + trigger.height / 2 - popover.height / 2,\n left: trigger.left - popover.width - GAP,\n };\n return {\n top: trigger.top + trigger.height / 2 - popover.height / 2,\n left: trigger.right + GAP,\n };\n }\n\n // First pass: find a placement that fits both axes perfectly.\n for (const p of candidates) {\n const { top, left } = calcRaw(p);\n const fitsH = left >= MARGIN && left + popover.width <= vw - MARGIN;\n const fitsV = top >= MARGIN && top + popover.height <= vh - MARGIN;\n if (fitsH && fitsV) {\n // Always use pixel arrowOffset (never rely on CSS left:50%) so the arrow\n // points exactly at the trigger center regardless of sub-pixel rounding.\n const arrowOffset =\n p === \"top\" || p === \"bottom\"\n ? trigger.left + trigger.width / 2 - left\n : trigger.top + trigger.height / 2 - top;\n return { top, left, placement: p, arrowOffset };\n }\n }\n\n // Second pass: fits the primary axis; clamp the secondary axis and\n // shift the arrow so it still points at the trigger center.\n for (const p of candidates) {\n const { top, left } = calcRaw(p);\n const fitsV = top >= MARGIN && top + popover.height <= vh - MARGIN;\n const fitsH = left >= MARGIN && left + popover.width <= vw - MARGIN;\n\n if ((p === \"top\" || p === \"bottom\") && fitsV) {\n const clampedLeft = Math.max(MARGIN, Math.min(left, vw - popover.width - MARGIN));\n const rawOffset = trigger.left + trigger.width / 2 - clampedLeft;\n return {\n top, left: clampedLeft, placement: p,\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawOffset, popover.width - ARROW_HALF - 4)),\n };\n }\n\n if ((p === \"left\" || p === \"right\") && fitsH) {\n const clampedTop = Math.max(MARGIN, Math.min(top, vh - popover.height - MARGIN));\n const rawOffset = trigger.top + trigger.height / 2 - clampedTop;\n return {\n top: clampedTop, left, placement: p,\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawOffset, popover.height - ARROW_HALF - 4)),\n };\n }\n }\n\n // Fallback: clamp bottom placement and shift arrow to match trigger.\n const fbTop = trigger.bottom + GAP;\n const fbLeft = trigger.left + trigger.width / 2 - popover.width / 2;\n const clampedTop = Math.max(MARGIN, Math.min(fbTop, vh - popover.height - MARGIN));\n const clampedLeft = Math.max(MARGIN, Math.min(fbLeft, vw - popover.width - MARGIN));\n const rawArrowOffset = trigger.left + trigger.width / 2 - clampedLeft;\n return {\n top: clampedTop,\n left: clampedLeft,\n placement: \"bottom\",\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawArrowOffset, popover.width - ARROW_HALF - 4)),\n };\n}\n\n/**\n * Floating panel anchored to a trigger element.\n *\n * Unlike `Tooltip`, a Popover can contain rich interactive content\n * (menus, forms, details). It follows the Adwaita `GtkPopover` pattern.\n *\n * - Supports both controlled (`open` + `onClose`) and uncontrolled modes.\n * - Auto-positions with viewport-aware flip.\n * - Closes on Escape, outside click, or trigger re-click.\n * - Focus is moved into the panel on open; returns to the trigger on close.\n * - `aria-haspopup=\"dialog\"` + `aria-expanded` wired to the trigger.\n * - `role=\"dialog\"` on the panel with `aria-labelledby` when a heading is present.\n *\n * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Popover.html\n */\nexport function Popover({\n content,\n placement: preferredPlacement = \"bottom\",\n open: controlledOpen,\n onClose,\n onOpenChange,\n children,\n}: PopoverProps) {\n const isControlled = controlledOpen !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const [pos, setPos] = useState<Position | null>(null);\n\n const triggerId = useId();\n const popoverId = useId();\n const triggerRef = useRef<HTMLElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const previouslyFocused = useRef<Element | null>(null);\n\n const close = useCallback(() => {\n if (isControlled) {\n onClose?.();\n } else {\n setUncontrolledOpen(false);\n }\n onOpenChange?.(false);\n }, [isControlled, onClose, onOpenChange]);\n\n const toggle = useCallback(() => {\n if (open) {\n close();\n } else {\n if (!isControlled) setUncontrolledOpen(true);\n onOpenChange?.(true);\n }\n }, [open, close, isControlled, onOpenChange]);\n\n // Position panel\n const place = useCallback(() => {\n if (!triggerRef.current || !panelRef.current) return;\n setPos(\n computePosition(\n triggerRef.current.getBoundingClientRect(),\n panelRef.current.getBoundingClientRect(),\n preferredPlacement\n )\n );\n }, [preferredPlacement]);\n\n // Reposition on open, scroll, resize\n useEffect(() => {\n if (!open) return;\n // Two RAF: first lets panel mount with hidden styles so we can measure it;\n // second applies the measured position.\n const id = requestAnimationFrame(() => {\n place();\n window.addEventListener(\"scroll\", place, { passive: true, capture: true });\n window.addEventListener(\"resize\", place, { passive: true });\n });\n return () => {\n cancelAnimationFrame(id);\n window.removeEventListener(\"scroll\", place, { capture: true });\n window.removeEventListener(\"resize\", place);\n };\n }, [open, place]);\n\n // Save / restore focus\n useEffect(() => {\n if (open) {\n previouslyFocused.current = document.activeElement;\n requestAnimationFrame(() => {\n const first = panelRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n (first ?? panelRef.current)?.focus();\n });\n } else {\n (previouslyFocused.current as HTMLElement | null)?.focus();\n setPos(null);\n }\n }, [open]);\n\n // Close on outside pointer\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (\n !triggerRef.current?.contains(e.target as Node) &&\n !panelRef.current?.contains(e.target as Node)\n ) {\n close();\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, close]);\n\n // Escape key\n const handlePanelKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") { e.stopPropagation(); close(); }\n },\n [close]\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const trigger = cloneElement(children as any, {\n ref: triggerRef,\n id: triggerId,\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": open,\n \"aria-controls\": open ? popoverId : undefined,\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n toggle();\n children.props.onClick?.(e);\n },\n });\n\n const panel = (\n <div\n ref={panelRef}\n id={popoverId}\n role=\"dialog\"\n aria-labelledby={triggerId}\n tabIndex={-1}\n className={[\n styles.panel,\n pos ? styles[pos.placement] : null,\n open && pos ? styles.visible : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={\n pos\n ? { top: pos.top, left: pos.left }\n : { visibility: \"hidden\", pointerEvents: \"none\", top: -9999, left: -9999 }\n }\n onKeyDown={handlePanelKeyDown}\n >\n {/* Arrow — offset shifts it to point at the trigger when the panel is clamped */}\n <div\n className={styles.arrow}\n aria-hidden=\"true\"\n style={\n pos?.arrowOffset !== undefined\n ? pos.placement === \"top\" || pos.placement === \"bottom\"\n ? { left: pos.arrowOffset - ARROW_HALF, marginLeft: 0 }\n : { top: pos.arrowOffset - ARROW_HALF, marginTop: 0 }\n : undefined\n }\n />\n {content}\n </div>\n );\n\n return (\n <>\n {trigger}\n {open &&\n (typeof document !== \"undefined\"\n ? createPortal(panel, document.body)\n : panel)}\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Popover.cjs","names":[],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import {\n cloneElement,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactElement,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\n\nimport styles from './Popover.module.css';\n\nexport type PopoverPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface PopoverProps {\n /**\n * The rich content rendered inside the popover panel.\n * Can include interactive elements (buttons, links, forms).\n */\n content: ReactNode;\n /**\n * Preferred placement relative to the trigger.\n * Flips automatically when there is not enough viewport space.\n * Defaults to `\"bottom\"`.\n */\n placement?: PopoverPlacement;\n /**\n * Whether the popover is open (controlled mode).\n * Omit to use uncontrolled mode where the trigger toggles it.\n */\n open?: boolean;\n /**\n * Called when the popover requests to be closed\n * (Escape key, outside click, or trigger click while open).\n */\n onClose?: () => void;\n /**\n * Called when open state should change (controlled mode).\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * The trigger element. Must be a single React element that can\n * receive `ref` and click/keyboard event props.\n */\n children: ReactElement<HTMLAttributes<HTMLElement>>;\n}\n\ninterface Position {\n top: number;\n left: number;\n placement: PopoverPlacement;\n /** Arrow center offset in px from the near edge of the panel.\n * Horizontal (left) for top/bottom; vertical (top) for left/right.\n * Undefined means use the default 50% CSS. */\n arrowOffset?: number;\n}\n\nconst GAP = 8;\nconst MARGIN = 10;\nconst ARROW_HALF = 6; // half of the 12 px arrow\n\nfunction computePosition(\n trigger: DOMRect,\n popover: DOMRect,\n preferred: PopoverPlacement,\n): Position {\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n const order: PopoverPlacement[] = [\n preferred,\n preferred === 'top'\n ? 'bottom'\n : preferred === 'bottom'\n ? 'top'\n : preferred === 'left'\n ? 'right'\n : 'left',\n 'bottom',\n 'top',\n 'left',\n 'right',\n ];\n\n // De-duplicate while preserving order\n const candidates = [...new Set(order)];\n\n function calcRaw(p: PopoverPlacement): { top: number; left: number } {\n if (p === 'bottom') {\n return {\n top: trigger.bottom + GAP,\n left: trigger.left + trigger.width / 2 - popover.width / 2,\n };\n }\n\n if (p === 'top') {\n return {\n top: trigger.top - popover.height - GAP,\n left: trigger.left + trigger.width / 2 - popover.width / 2,\n };\n }\n\n if (p === 'left') {\n return {\n top: trigger.top + trigger.height / 2 - popover.height / 2,\n left: trigger.left - popover.width - GAP,\n };\n }\n\n return {\n top: trigger.top + trigger.height / 2 - popover.height / 2,\n left: trigger.right + GAP,\n };\n }\n\n // First pass: find a placement that fits both axes perfectly.\n for (const p of candidates) {\n const { top, left } = calcRaw(p);\n const fitsH = left >= MARGIN && left + popover.width <= vw - MARGIN;\n const fitsV = top >= MARGIN && top + popover.height <= vh - MARGIN;\n\n if (fitsH && fitsV) {\n // Always use pixel arrowOffset (never rely on CSS left:50%) so the arrow\n // points exactly at the trigger center regardless of sub-pixel rounding.\n const arrowOffset =\n p === 'top' || p === 'bottom'\n ? trigger.left + trigger.width / 2 - left\n : trigger.top + trigger.height / 2 - top;\n\n return { top, left, placement: p, arrowOffset };\n }\n }\n\n // Second pass: fits the primary axis; clamp the secondary axis and\n // shift the arrow so it still points at the trigger center.\n for (const p of candidates) {\n const { top, left } = calcRaw(p);\n const fitsV = top >= MARGIN && top + popover.height <= vh - MARGIN;\n const fitsH = left >= MARGIN && left + popover.width <= vw - MARGIN;\n\n if ((p === 'top' || p === 'bottom') && fitsV) {\n const clampedLeft = Math.max(MARGIN, Math.min(left, vw - popover.width - MARGIN));\n const rawOffset = trigger.left + trigger.width / 2 - clampedLeft;\n\n return {\n top,\n left: clampedLeft,\n placement: p,\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawOffset, popover.width - ARROW_HALF - 4)),\n };\n }\n\n if ((p === 'left' || p === 'right') && fitsH) {\n const clampedTop = Math.max(MARGIN, Math.min(top, vh - popover.height - MARGIN));\n const rawOffset = trigger.top + trigger.height / 2 - clampedTop;\n\n return {\n top: clampedTop,\n left,\n placement: p,\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawOffset, popover.height - ARROW_HALF - 4)),\n };\n }\n }\n\n // Fallback: clamp bottom placement and shift arrow to match trigger.\n const fbTop = trigger.bottom + GAP;\n const fbLeft = trigger.left + trigger.width / 2 - popover.width / 2;\n const clampedTop = Math.max(MARGIN, Math.min(fbTop, vh - popover.height - MARGIN));\n const clampedLeft = Math.max(MARGIN, Math.min(fbLeft, vw - popover.width - MARGIN));\n const rawArrowOffset = trigger.left + trigger.width / 2 - clampedLeft;\n\n return {\n top: clampedTop,\n left: clampedLeft,\n placement: 'bottom',\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawArrowOffset, popover.width - ARROW_HALF - 4)),\n };\n}\n\n/**\n * Floating panel anchored to a trigger element.\n *\n * Unlike `Tooltip`, a Popover can contain rich interactive content\n * (menus, forms, details). It follows the Adwaita `GtkPopover` pattern.\n *\n * - Supports both controlled (`open` + `onClose`) and uncontrolled modes.\n * - Auto-positions with viewport-aware flip.\n * - Closes on Escape, outside click, or trigger re-click.\n * - Focus is moved into the panel on open; returns to the trigger on close.\n * - `aria-haspopup=\"dialog\"` + `aria-expanded` wired to the trigger.\n * - `role=\"dialog\"` on the panel with `aria-labelledby` when a heading is present.\n *\n * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Popover.html\n */\nexport const Popover = ({\n content,\n placement: preferredPlacement = 'bottom',\n open: controlledOpen,\n onClose,\n onOpenChange,\n children,\n}: PopoverProps) => {\n const isControlled = controlledOpen !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const [pos, setPos] = useState<Position | null>(null);\n\n const triggerId = useId();\n const popoverId = useId();\n const triggerRef = useRef<HTMLElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const previouslyFocused = useRef<Element | null>(null);\n\n const close = useCallback(() => {\n if (isControlled) {\n onClose?.();\n } else {\n setUncontrolledOpen(false);\n }\n\n onOpenChange?.(false);\n }, [isControlled, onClose, onOpenChange]);\n\n const toggle = useCallback(() => {\n if (open) {\n close();\n } else {\n if (!isControlled) {\n setUncontrolledOpen(true);\n }\n\n onOpenChange?.(true);\n }\n }, [open, close, isControlled, onOpenChange]);\n\n // Position panel\n const place = useCallback(() => {\n if (!triggerRef.current || !panelRef.current) {\n return;\n }\n\n setPos(\n computePosition(\n triggerRef.current.getBoundingClientRect(),\n panelRef.current.getBoundingClientRect(),\n preferredPlacement,\n ),\n );\n }, [preferredPlacement]);\n\n // Reposition on open, scroll, resize\n useEffect(() => {\n if (!open) {\n return;\n }\n\n // Two RAF: first lets panel mount with hidden styles so we can measure it;\n // second applies the measured position.\n const id = requestAnimationFrame(() => {\n place();\n window.addEventListener('scroll', place, { passive: true, capture: true });\n window.addEventListener('resize', place, { passive: true });\n });\n\n return () => {\n cancelAnimationFrame(id);\n window.removeEventListener('scroll', place, { capture: true });\n window.removeEventListener('resize', place);\n };\n }, [open, place]);\n\n // Save / restore focus\n useEffect(() => {\n if (open) {\n previouslyFocused.current = document.activeElement;\n requestAnimationFrame(() => {\n const first = panelRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n\n (first ?? panelRef.current)?.focus();\n });\n } else {\n (previouslyFocused.current as HTMLElement | null)?.focus();\n setPos(null);\n }\n }, [open]);\n\n // Close on outside pointer\n useEffect(() => {\n if (!open) {\n return;\n }\n\n const handler = (e: MouseEvent) => {\n if (\n !triggerRef.current?.contains(e.target as Node) &&\n !panelRef.current?.contains(e.target as Node)\n ) {\n close();\n }\n };\n\n document.addEventListener('mousedown', handler);\n\n return () => document.removeEventListener('mousedown', handler);\n }, [open, close]);\n\n // Escape key\n const handlePanelKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n close();\n }\n },\n [close],\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const trigger = cloneElement(children as any, {\n ref: triggerRef,\n id: triggerId,\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n 'aria-controls': open ? popoverId : undefined,\n onClick: (e: ReactMouseEvent<HTMLElement>) => {\n toggle();\n children.props.onClick?.(e);\n },\n });\n\n const panel = (\n <div\n ref={panelRef}\n id={popoverId}\n role=\"dialog\"\n aria-labelledby={triggerId}\n tabIndex={-1}\n className={[\n styles.panel,\n pos ? styles[pos.placement] : null,\n open && pos ? styles.visible : null,\n ]\n .filter(Boolean)\n .join(' ')}\n style={\n pos\n ? { top: pos.top, left: pos.left }\n : { visibility: 'hidden', pointerEvents: 'none', top: -9999, left: -9999 }\n }\n onKeyDown={handlePanelKeyDown}\n >\n {/* Arrow — offset shifts it to point at the trigger when the panel is clamped */}\n <div\n className={styles.arrow}\n aria-hidden=\"true\"\n style={\n pos?.arrowOffset !== undefined\n ? pos.placement === 'top' || pos.placement === 'bottom'\n ? { left: pos.arrowOffset - ARROW_HALF, marginLeft: 0 }\n : { top: pos.arrowOffset - ARROW_HALF, marginTop: 0 }\n : undefined\n }\n />\n {content}\n </div>\n );\n\n return (\n <>\n {trigger}\n {open && (typeof document !== 'undefined' ? createPortal(panel, document.body) : panel)}\n </>\n );\n};\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { ReactElement, HTMLAttributes, ReactNode } from 'react';
2
- export type PopoverPlacement = "top" | "bottom" | "left" | "right";
1
+ import { HTMLAttributes, ReactElement, ReactNode } from 'react';
2
+ export type PopoverPlacement = 'top' | 'bottom' | 'left' | 'right';
3
3
  export interface PopoverProps {
4
4
  /**
5
5
  * The rich content rendered inside the popover panel.
@@ -47,4 +47,4 @@ export interface PopoverProps {
47
47
  *
48
48
  * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Popover.html
49
49
  */
50
- export declare function Popover({ content, placement: preferredPlacement, open: controlledOpen, onClose, onOpenChange, children, }: PopoverProps): import("react/jsx-runtime").JSX.Element;
50
+ export declare const Popover: ({ content, placement: preferredPlacement, open: controlledOpen, onClose, onOpenChange, children, }: PopoverProps) => import("react/jsx-runtime").JSX.Element;
@@ -45,7 +45,7 @@ function m(e, t, n) {
45
45
  top: a,
46
46
  left: i,
47
47
  placement: n,
48
- arrowOffset: Math.max(p + 4, Math.min(o, t.width - p - 4))
48
+ arrowOffset: Math.max(10, Math.min(o, t.width - p - 4))
49
49
  };
50
50
  }
51
51
  if ((n === "left" || n === "right") && l) {
@@ -54,7 +54,7 @@ function m(e, t, n) {
54
54
  top: r,
55
55
  left: s,
56
56
  placement: n,
57
- arrowOffset: Math.max(p + 4, Math.min(o, t.height - p - 4))
57
+ arrowOffset: Math.max(10, Math.min(o, t.height - p - 4))
58
58
  };
59
59
  }
60
60
  }
@@ -63,10 +63,10 @@ function m(e, t, n) {
63
63
  top: l,
64
64
  left: u,
65
65
  placement: "bottom",
66
- arrowOffset: Math.max(p + 4, Math.min(m, t.width - p - 4))
66
+ arrowOffset: Math.max(10, Math.min(m, t.width - p - 4))
67
67
  };
68
68
  }
69
- function h({ content: d, placement: f = "bottom", open: h, onClose: g, onOpenChange: _, children: v }) {
69
+ var h = ({ content: d, placement: f = "bottom", open: h, onClose: g, onOpenChange: _, children: v }) => {
70
70
  let y = h !== void 0, [b, x] = o(!1), S = y ? h : b, [C, w] = o(null), T = i(), E = i(), D = a(null), O = a(null), k = a(null), A = n(() => {
71
71
  y ? g?.() : x(!1), _?.(!1);
72
72
  }, [
@@ -150,7 +150,7 @@ function h({ content: d, placement: f = "bottom", open: h, onClose: g, onOpenCha
150
150
  }), d]
151
151
  });
152
152
  return /* @__PURE__ */ u(c, { children: [P, S && (typeof document < "u" ? s(F, document.body) : F)] });
153
- }
153
+ };
154
154
  //#endregion
155
155
  export { h as Popover };
156
156
 
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.js","names":[],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useId,\n useEffect,\n useCallback,\n cloneElement,\n type ReactElement,\n type HTMLAttributes,\n type ReactNode,\n type KeyboardEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"./Popover.module.css\";\n\nexport type PopoverPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface PopoverProps {\n /**\n * The rich content rendered inside the popover panel.\n * Can include interactive elements (buttons, links, forms).\n */\n content: ReactNode;\n /**\n * Preferred placement relative to the trigger.\n * Flips automatically when there is not enough viewport space.\n * Defaults to `\"bottom\"`.\n */\n placement?: PopoverPlacement;\n /**\n * Whether the popover is open (controlled mode).\n * Omit to use uncontrolled mode where the trigger toggles it.\n */\n open?: boolean;\n /**\n * Called when the popover requests to be closed\n * (Escape key, outside click, or trigger click while open).\n */\n onClose?: () => void;\n /**\n * Called when open state should change (controlled mode).\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * The trigger element. Must be a single React element that can\n * receive `ref` and click/keyboard event props.\n */\n children: ReactElement<HTMLAttributes<HTMLElement>>;\n}\n\ninterface Position {\n top: number;\n left: number;\n placement: PopoverPlacement;\n /** Arrow center offset in px from the near edge of the panel.\n * Horizontal (left) for top/bottom; vertical (top) for left/right.\n * Undefined means use the default 50% CSS. */\n arrowOffset?: number;\n}\n\nconst GAP = 8;\nconst MARGIN = 10;\nconst ARROW_HALF = 6; // half of the 12 px arrow\n\nfunction computePosition(\n trigger: DOMRect,\n popover: DOMRect,\n preferred: PopoverPlacement\n): Position {\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n const order: PopoverPlacement[] = [\n preferred,\n preferred === \"top\" ? \"bottom\"\n : preferred === \"bottom\" ? \"top\"\n : preferred === \"left\" ? \"right\"\n : \"left\",\n \"bottom\", \"top\", \"left\", \"right\",\n ];\n\n // De-duplicate while preserving order\n const candidates = [...new Set(order)];\n\n function calcRaw(p: PopoverPlacement): { top: number; left: number } {\n if (p === \"bottom\") return {\n top: trigger.bottom + GAP,\n left: trigger.left + trigger.width / 2 - popover.width / 2,\n };\n if (p === \"top\") return {\n top: trigger.top - popover.height - GAP,\n left: trigger.left + trigger.width / 2 - popover.width / 2,\n };\n if (p === \"left\") return {\n top: trigger.top + trigger.height / 2 - popover.height / 2,\n left: trigger.left - popover.width - GAP,\n };\n return {\n top: trigger.top + trigger.height / 2 - popover.height / 2,\n left: trigger.right + GAP,\n };\n }\n\n // First pass: find a placement that fits both axes perfectly.\n for (const p of candidates) {\n const { top, left } = calcRaw(p);\n const fitsH = left >= MARGIN && left + popover.width <= vw - MARGIN;\n const fitsV = top >= MARGIN && top + popover.height <= vh - MARGIN;\n if (fitsH && fitsV) {\n // Always use pixel arrowOffset (never rely on CSS left:50%) so the arrow\n // points exactly at the trigger center regardless of sub-pixel rounding.\n const arrowOffset =\n p === \"top\" || p === \"bottom\"\n ? trigger.left + trigger.width / 2 - left\n : trigger.top + trigger.height / 2 - top;\n return { top, left, placement: p, arrowOffset };\n }\n }\n\n // Second pass: fits the primary axis; clamp the secondary axis and\n // shift the arrow so it still points at the trigger center.\n for (const p of candidates) {\n const { top, left } = calcRaw(p);\n const fitsV = top >= MARGIN && top + popover.height <= vh - MARGIN;\n const fitsH = left >= MARGIN && left + popover.width <= vw - MARGIN;\n\n if ((p === \"top\" || p === \"bottom\") && fitsV) {\n const clampedLeft = Math.max(MARGIN, Math.min(left, vw - popover.width - MARGIN));\n const rawOffset = trigger.left + trigger.width / 2 - clampedLeft;\n return {\n top, left: clampedLeft, placement: p,\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawOffset, popover.width - ARROW_HALF - 4)),\n };\n }\n\n if ((p === \"left\" || p === \"right\") && fitsH) {\n const clampedTop = Math.max(MARGIN, Math.min(top, vh - popover.height - MARGIN));\n const rawOffset = trigger.top + trigger.height / 2 - clampedTop;\n return {\n top: clampedTop, left, placement: p,\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawOffset, popover.height - ARROW_HALF - 4)),\n };\n }\n }\n\n // Fallback: clamp bottom placement and shift arrow to match trigger.\n const fbTop = trigger.bottom + GAP;\n const fbLeft = trigger.left + trigger.width / 2 - popover.width / 2;\n const clampedTop = Math.max(MARGIN, Math.min(fbTop, vh - popover.height - MARGIN));\n const clampedLeft = Math.max(MARGIN, Math.min(fbLeft, vw - popover.width - MARGIN));\n const rawArrowOffset = trigger.left + trigger.width / 2 - clampedLeft;\n return {\n top: clampedTop,\n left: clampedLeft,\n placement: \"bottom\",\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawArrowOffset, popover.width - ARROW_HALF - 4)),\n };\n}\n\n/**\n * Floating panel anchored to a trigger element.\n *\n * Unlike `Tooltip`, a Popover can contain rich interactive content\n * (menus, forms, details). It follows the Adwaita `GtkPopover` pattern.\n *\n * - Supports both controlled (`open` + `onClose`) and uncontrolled modes.\n * - Auto-positions with viewport-aware flip.\n * - Closes on Escape, outside click, or trigger re-click.\n * - Focus is moved into the panel on open; returns to the trigger on close.\n * - `aria-haspopup=\"dialog\"` + `aria-expanded` wired to the trigger.\n * - `role=\"dialog\"` on the panel with `aria-labelledby` when a heading is present.\n *\n * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Popover.html\n */\nexport function Popover({\n content,\n placement: preferredPlacement = \"bottom\",\n open: controlledOpen,\n onClose,\n onOpenChange,\n children,\n}: PopoverProps) {\n const isControlled = controlledOpen !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const [pos, setPos] = useState<Position | null>(null);\n\n const triggerId = useId();\n const popoverId = useId();\n const triggerRef = useRef<HTMLElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const previouslyFocused = useRef<Element | null>(null);\n\n const close = useCallback(() => {\n if (isControlled) {\n onClose?.();\n } else {\n setUncontrolledOpen(false);\n }\n onOpenChange?.(false);\n }, [isControlled, onClose, onOpenChange]);\n\n const toggle = useCallback(() => {\n if (open) {\n close();\n } else {\n if (!isControlled) setUncontrolledOpen(true);\n onOpenChange?.(true);\n }\n }, [open, close, isControlled, onOpenChange]);\n\n // Position panel\n const place = useCallback(() => {\n if (!triggerRef.current || !panelRef.current) return;\n setPos(\n computePosition(\n triggerRef.current.getBoundingClientRect(),\n panelRef.current.getBoundingClientRect(),\n preferredPlacement\n )\n );\n }, [preferredPlacement]);\n\n // Reposition on open, scroll, resize\n useEffect(() => {\n if (!open) return;\n // Two RAF: first lets panel mount with hidden styles so we can measure it;\n // second applies the measured position.\n const id = requestAnimationFrame(() => {\n place();\n window.addEventListener(\"scroll\", place, { passive: true, capture: true });\n window.addEventListener(\"resize\", place, { passive: true });\n });\n return () => {\n cancelAnimationFrame(id);\n window.removeEventListener(\"scroll\", place, { capture: true });\n window.removeEventListener(\"resize\", place);\n };\n }, [open, place]);\n\n // Save / restore focus\n useEffect(() => {\n if (open) {\n previouslyFocused.current = document.activeElement;\n requestAnimationFrame(() => {\n const first = panelRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n (first ?? panelRef.current)?.focus();\n });\n } else {\n (previouslyFocused.current as HTMLElement | null)?.focus();\n setPos(null);\n }\n }, [open]);\n\n // Close on outside pointer\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (\n !triggerRef.current?.contains(e.target as Node) &&\n !panelRef.current?.contains(e.target as Node)\n ) {\n close();\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, close]);\n\n // Escape key\n const handlePanelKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") { e.stopPropagation(); close(); }\n },\n [close]\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const trigger = cloneElement(children as any, {\n ref: triggerRef,\n id: triggerId,\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": open,\n \"aria-controls\": open ? popoverId : undefined,\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n toggle();\n children.props.onClick?.(e);\n },\n });\n\n const panel = (\n <div\n ref={panelRef}\n id={popoverId}\n role=\"dialog\"\n aria-labelledby={triggerId}\n tabIndex={-1}\n className={[\n styles.panel,\n pos ? styles[pos.placement] : null,\n open && pos ? styles.visible : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={\n pos\n ? { top: pos.top, left: pos.left }\n : { visibility: \"hidden\", pointerEvents: \"none\", top: -9999, left: -9999 }\n }\n onKeyDown={handlePanelKeyDown}\n >\n {/* Arrow — offset shifts it to point at the trigger when the panel is clamped */}\n <div\n className={styles.arrow}\n aria-hidden=\"true\"\n style={\n pos?.arrowOffset !== undefined\n ? pos.placement === \"top\" || pos.placement === \"bottom\"\n ? { left: pos.arrowOffset - ARROW_HALF, marginLeft: 0 }\n : { top: pos.arrowOffset - ARROW_HALF, marginTop: 0 }\n : undefined\n }\n />\n {content}\n </div>\n );\n\n return (\n <>\n {trigger}\n {open &&\n (typeof document !== \"undefined\"\n ? createPortal(panel, document.body)\n : panel)}\n </>\n );\n}\n"],"mappings":";;;;;AA4DA,IAAM,IAAM,GACN,IAAS,IACT,IAAa;AAEnB,SAAS,EACP,GACA,GACA,GACU;CACV,IAAM,IAAK,OAAO,YACZ,IAAK,OAAO,aAYZ,IAAa,CAAC,GAAG,IAAI,IAVO;EAChC;EACA,MAAc,QAAW,WACvB,MAAc,WAAW,QACzB,MAAc,SAAW,UACzB;EACF;EAAU;EAAO;EAAQ;EAC1B,CAGoC,CAAC;CAEtC,SAAS,EAAQ,GAAoD;AAanE,SAZI,MAAM,WAAiB;GACzB,KAAM,EAAQ,SAAS;GACvB,MAAM,EAAQ,OAAO,EAAQ,QAAQ,IAAI,EAAQ,QAAQ;GAC1D,GACG,MAAM,QAAc;GACtB,KAAM,EAAQ,MAAM,EAAQ,SAAS;GACrC,MAAM,EAAQ,OAAO,EAAQ,QAAQ,IAAI,EAAQ,QAAQ;GAC1D,GACG,MAAM,SAAe;GACvB,KAAM,EAAQ,MAAM,EAAQ,SAAS,IAAI,EAAQ,SAAS;GAC1D,MAAM,EAAQ,OAAO,EAAQ,QAAQ;GACtC,GACM;GACL,KAAM,EAAQ,MAAM,EAAQ,SAAS,IAAI,EAAQ,SAAS;GAC1D,MAAM,EAAQ,QAAQ;GACvB;;AAIH,MAAK,IAAM,KAAK,GAAY;EAC1B,IAAM,EAAE,QAAK,YAAS,EAAQ,EAAE,EAC1B,IAAQ,KAAQ,KAAU,IAAO,EAAQ,SAAU,IAAK,GACxD,IAAQ,KAAQ,KAAU,IAAO,EAAQ,UAAU,IAAK;AAC9D,MAAI,KAAS,EAOX,QAAO;GAAE;GAAK;GAAM,WAAW;GAAG,aAHhC,MAAM,SAAS,MAAM,WACjB,EAAQ,OAAO,EAAQ,QAAS,IAAI,IACpC,EAAQ,MAAO,EAAQ,SAAS,IAAI;GACK;;AAMnD,MAAK,IAAM,KAAK,GAAY;EAC1B,IAAM,EAAE,QAAK,YAAS,EAAQ,EAAE,EAC1B,IAAQ,KAAQ,KAAU,IAAO,EAAQ,UAAU,IAAK,GACxD,IAAQ,KAAQ,KAAU,IAAO,EAAQ,SAAU,IAAK;AAE9D,OAAK,MAAM,SAAS,MAAM,aAAa,GAAO;GAC5C,IAAM,IAAc,KAAK,IAAI,GAAQ,KAAK,IAAI,GAAM,IAAK,EAAQ,QAAQ,EAAO,CAAC,EAC3E,IAAY,EAAQ,OAAO,EAAQ,QAAQ,IAAI;AACrD,UAAO;IACL;IAAK,MAAM;IAAa,WAAW;IACnC,aAAa,KAAK,IAAI,IAAa,GAAG,KAAK,IAAI,GAAW,EAAQ,QAAQ,IAAa,EAAE,CAAC;IAC3F;;AAGH,OAAK,MAAM,UAAU,MAAM,YAAY,GAAO;GAC5C,IAAM,IAAa,KAAK,IAAI,GAAQ,KAAK,IAAI,GAAK,IAAK,EAAQ,SAAS,EAAO,CAAC,EAC1E,IAAY,EAAQ,MAAM,EAAQ,SAAS,IAAI;AACrD,UAAO;IACL,KAAK;IAAY;IAAM,WAAW;IAClC,aAAa,KAAK,IAAI,IAAa,GAAG,KAAK,IAAI,GAAW,EAAQ,SAAS,IAAa,EAAE,CAAC;IAC5F;;;CAKL,IAAM,IAAS,EAAQ,SAAS,GAC1B,IAAS,EAAQ,OAAO,EAAQ,QAAQ,IAAI,EAAQ,QAAQ,GAC5D,IAAc,KAAK,IAAI,GAAQ,KAAK,IAAI,GAAQ,IAAK,EAAQ,SAAS,EAAO,CAAC,EAC9E,IAAc,KAAK,IAAI,GAAQ,KAAK,IAAI,GAAQ,IAAK,EAAQ,QAAS,EAAO,CAAC,EAC9E,IAAiB,EAAQ,OAAO,EAAQ,QAAQ,IAAI;AAC1D,QAAO;EACL,KAAK;EACL,MAAM;EACN,WAAW;EACX,aAAa,KAAK,IAAI,IAAa,GAAG,KAAK,IAAI,GAAgB,EAAQ,QAAQ,IAAa,EAAE,CAAC;EAChG;;AAkBH,SAAgB,EAAQ,EACtB,YACA,WAAW,IAAqB,UAChC,MAAM,GACN,YACA,iBACA,eACe;CACf,IAAM,IAAe,MAAmB,KAAA,GAClC,CAAC,GAAkB,KAAuB,EAAS,GAAM,EACzD,IAAO,IAAe,IAAiB,GAEvC,CAAC,GAAK,KAAU,EAA0B,KAAK,EAE/C,IAAa,GAAO,EACpB,IAAa,GAAO,EACpB,IAAa,EAAoB,KAAK,EACtC,IAAa,EAAuB,KAAK,EACzC,IAAoB,EAAuB,KAAK,EAEhD,IAAQ,QAAkB;AAM9B,EALI,IACF,KAAW,GAEX,EAAoB,GAAM,EAE5B,IAAe,GAAM;IACpB;EAAC;EAAc;EAAS;EAAa,CAAC,EAEnC,IAAS,QAAkB;AAC/B,EAAI,IACF,GAAO,IAEF,KAAc,EAAoB,GAAK,EAC5C,IAAe,GAAK;IAErB;EAAC;EAAM;EAAO;EAAc;EAAa,CAAC,EAGvC,IAAQ,QAAkB;AAC1B,GAAC,EAAW,WAAW,CAAC,EAAS,WACrC,EACE,EACE,EAAW,QAAQ,uBAAuB,EAC1C,EAAS,QAAQ,uBAAuB,EACxC,EACD,CACF;IACA,CAAC,EAAmB,CAAC;AAoCxB,CAjCA,QAAgB;AACd,MAAI,CAAC,EAAM;EAGX,IAAM,IAAK,4BAA4B;AAGrC,GAFA,GAAO,EACP,OAAO,iBAAiB,UAAU,GAAO;IAAE,SAAS;IAAM,SAAS;IAAM,CAAC,EAC1E,OAAO,iBAAiB,UAAU,GAAO,EAAE,SAAS,IAAM,CAAC;IAC3D;AACF,eAAa;AAGX,GAFA,qBAAqB,EAAG,EACxB,OAAO,oBAAoB,UAAU,GAAO,EAAE,SAAS,IAAM,CAAC,EAC9D,OAAO,oBAAoB,UAAU,EAAM;;IAE5C,CAAC,GAAM,EAAM,CAAC,EAGjB,QAAgB;AACd,EAAI,KACF,EAAkB,UAAU,SAAS,eACrC,4BAA4B;AAI1B,IAHc,EAAS,SAAS,cAC9B,6EACD,IACS,EAAS,UAAU,OAAO;IACpC,KAED,EAAkB,SAAgC,OAAO,EAC1D,EAAO,KAAK;IAEb,CAAC,EAAK,CAAC,EAGV,QAAgB;AACd,MAAI,CAAC,EAAM;EACX,IAAM,KAAW,MAAkB;AACjC,GACE,CAAC,EAAW,SAAS,SAAS,EAAE,OAAe,IAC/C,CAAC,EAAS,SAAS,SAAS,EAAE,OAAe,IAE7C,GAAO;;AAIX,SADA,SAAS,iBAAiB,aAAa,EAAQ,QAClC,SAAS,oBAAoB,aAAa,EAAQ;IAC9D,CAAC,GAAM,EAAM,CAAC;CAGjB,IAAM,IAAqB,GACxB,MAAqC;AACpC,EAAI,EAAE,QAAQ,aAAY,EAAE,iBAAiB,EAAE,GAAO;IAExD,CAAC,EAAM,CACR,EAGK,IAAU,EAAa,GAAiB;EAC5C,KAAK;EACL,IAAI;EACJ,iBAAiB;EACjB,iBAAiB;EACjB,iBAAiB,IAAO,IAAY,KAAA;EACpC,UAAU,MAAqC;AAE7C,GADA,GAAQ,EACR,EAAS,MAAM,UAAU,EAAE;;EAE9B,CAAC,EAEI,IACJ,kBAAC,OAAD;EACE,KAAK;EACL,IAAI;EACJ,MAAK;EACL,mBAAiB;EACjB,UAAU;EACV,WAAW;GACT,EAAO;GACP,IAAM,EAAO,EAAI,aAAa;GAC9B,KAAQ,IAAM,EAAO,UAAU;GAChC,CACE,OAAO,QAAQ,CACf,KAAK,IAAI;EACZ,OACE,IACI;GAAE,KAAK,EAAI;GAAK,MAAM,EAAI;GAAM,GAChC;GAAE,YAAY;GAAU,eAAe;GAAQ,KAAK;GAAO,MAAM;GAAO;EAE9E,WAAW;YAlBb,CAqBE,kBAAC,OAAD;GACE,WAAW,EAAO;GAClB,eAAY;GACZ,OACE,GAAK,gBAAgB,KAAA,IAIjB,KAAA,IAHA,EAAI,cAAc,SAAS,EAAI,cAAc,WAC3C;IAAE,MAAM,EAAI,cAAc;IAAY,YAAY;IAAG,GACrD;IAAE,KAAM,EAAI,cAAc;IAAY,WAAW;IAAG;GAG5D,CAAA,EACD,EACG;;AAGR,QACE,kBAAA,GAAA,EAAA,UAAA,CACG,GACA,MACE,OAAO,WAAa,MACjB,EAAa,GAAO,SAAS,KAAK,GAClC,GACL,EAAA,CAAA"}
1
+ {"version":3,"file":"Popover.js","names":[],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import {\n cloneElement,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactElement,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\n\nimport styles from './Popover.module.css';\n\nexport type PopoverPlacement = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface PopoverProps {\n /**\n * The rich content rendered inside the popover panel.\n * Can include interactive elements (buttons, links, forms).\n */\n content: ReactNode;\n /**\n * Preferred placement relative to the trigger.\n * Flips automatically when there is not enough viewport space.\n * Defaults to `\"bottom\"`.\n */\n placement?: PopoverPlacement;\n /**\n * Whether the popover is open (controlled mode).\n * Omit to use uncontrolled mode where the trigger toggles it.\n */\n open?: boolean;\n /**\n * Called when the popover requests to be closed\n * (Escape key, outside click, or trigger click while open).\n */\n onClose?: () => void;\n /**\n * Called when open state should change (controlled mode).\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * The trigger element. Must be a single React element that can\n * receive `ref` and click/keyboard event props.\n */\n children: ReactElement<HTMLAttributes<HTMLElement>>;\n}\n\ninterface Position {\n top: number;\n left: number;\n placement: PopoverPlacement;\n /** Arrow center offset in px from the near edge of the panel.\n * Horizontal (left) for top/bottom; vertical (top) for left/right.\n * Undefined means use the default 50% CSS. */\n arrowOffset?: number;\n}\n\nconst GAP = 8;\nconst MARGIN = 10;\nconst ARROW_HALF = 6; // half of the 12 px arrow\n\nfunction computePosition(\n trigger: DOMRect,\n popover: DOMRect,\n preferred: PopoverPlacement,\n): Position {\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n const order: PopoverPlacement[] = [\n preferred,\n preferred === 'top'\n ? 'bottom'\n : preferred === 'bottom'\n ? 'top'\n : preferred === 'left'\n ? 'right'\n : 'left',\n 'bottom',\n 'top',\n 'left',\n 'right',\n ];\n\n // De-duplicate while preserving order\n const candidates = [...new Set(order)];\n\n function calcRaw(p: PopoverPlacement): { top: number; left: number } {\n if (p === 'bottom') {\n return {\n top: trigger.bottom + GAP,\n left: trigger.left + trigger.width / 2 - popover.width / 2,\n };\n }\n\n if (p === 'top') {\n return {\n top: trigger.top - popover.height - GAP,\n left: trigger.left + trigger.width / 2 - popover.width / 2,\n };\n }\n\n if (p === 'left') {\n return {\n top: trigger.top + trigger.height / 2 - popover.height / 2,\n left: trigger.left - popover.width - GAP,\n };\n }\n\n return {\n top: trigger.top + trigger.height / 2 - popover.height / 2,\n left: trigger.right + GAP,\n };\n }\n\n // First pass: find a placement that fits both axes perfectly.\n for (const p of candidates) {\n const { top, left } = calcRaw(p);\n const fitsH = left >= MARGIN && left + popover.width <= vw - MARGIN;\n const fitsV = top >= MARGIN && top + popover.height <= vh - MARGIN;\n\n if (fitsH && fitsV) {\n // Always use pixel arrowOffset (never rely on CSS left:50%) so the arrow\n // points exactly at the trigger center regardless of sub-pixel rounding.\n const arrowOffset =\n p === 'top' || p === 'bottom'\n ? trigger.left + trigger.width / 2 - left\n : trigger.top + trigger.height / 2 - top;\n\n return { top, left, placement: p, arrowOffset };\n }\n }\n\n // Second pass: fits the primary axis; clamp the secondary axis and\n // shift the arrow so it still points at the trigger center.\n for (const p of candidates) {\n const { top, left } = calcRaw(p);\n const fitsV = top >= MARGIN && top + popover.height <= vh - MARGIN;\n const fitsH = left >= MARGIN && left + popover.width <= vw - MARGIN;\n\n if ((p === 'top' || p === 'bottom') && fitsV) {\n const clampedLeft = Math.max(MARGIN, Math.min(left, vw - popover.width - MARGIN));\n const rawOffset = trigger.left + trigger.width / 2 - clampedLeft;\n\n return {\n top,\n left: clampedLeft,\n placement: p,\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawOffset, popover.width - ARROW_HALF - 4)),\n };\n }\n\n if ((p === 'left' || p === 'right') && fitsH) {\n const clampedTop = Math.max(MARGIN, Math.min(top, vh - popover.height - MARGIN));\n const rawOffset = trigger.top + trigger.height / 2 - clampedTop;\n\n return {\n top: clampedTop,\n left,\n placement: p,\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawOffset, popover.height - ARROW_HALF - 4)),\n };\n }\n }\n\n // Fallback: clamp bottom placement and shift arrow to match trigger.\n const fbTop = trigger.bottom + GAP;\n const fbLeft = trigger.left + trigger.width / 2 - popover.width / 2;\n const clampedTop = Math.max(MARGIN, Math.min(fbTop, vh - popover.height - MARGIN));\n const clampedLeft = Math.max(MARGIN, Math.min(fbLeft, vw - popover.width - MARGIN));\n const rawArrowOffset = trigger.left + trigger.width / 2 - clampedLeft;\n\n return {\n top: clampedTop,\n left: clampedLeft,\n placement: 'bottom',\n arrowOffset: Math.max(ARROW_HALF + 4, Math.min(rawArrowOffset, popover.width - ARROW_HALF - 4)),\n };\n}\n\n/**\n * Floating panel anchored to a trigger element.\n *\n * Unlike `Tooltip`, a Popover can contain rich interactive content\n * (menus, forms, details). It follows the Adwaita `GtkPopover` pattern.\n *\n * - Supports both controlled (`open` + `onClose`) and uncontrolled modes.\n * - Auto-positions with viewport-aware flip.\n * - Closes on Escape, outside click, or trigger re-click.\n * - Focus is moved into the panel on open; returns to the trigger on close.\n * - `aria-haspopup=\"dialog\"` + `aria-expanded` wired to the trigger.\n * - `role=\"dialog\"` on the panel with `aria-labelledby` when a heading is present.\n *\n * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.Popover.html\n */\nexport const Popover = ({\n content,\n placement: preferredPlacement = 'bottom',\n open: controlledOpen,\n onClose,\n onOpenChange,\n children,\n}: PopoverProps) => {\n const isControlled = controlledOpen !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const [pos, setPos] = useState<Position | null>(null);\n\n const triggerId = useId();\n const popoverId = useId();\n const triggerRef = useRef<HTMLElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const previouslyFocused = useRef<Element | null>(null);\n\n const close = useCallback(() => {\n if (isControlled) {\n onClose?.();\n } else {\n setUncontrolledOpen(false);\n }\n\n onOpenChange?.(false);\n }, [isControlled, onClose, onOpenChange]);\n\n const toggle = useCallback(() => {\n if (open) {\n close();\n } else {\n if (!isControlled) {\n setUncontrolledOpen(true);\n }\n\n onOpenChange?.(true);\n }\n }, [open, close, isControlled, onOpenChange]);\n\n // Position panel\n const place = useCallback(() => {\n if (!triggerRef.current || !panelRef.current) {\n return;\n }\n\n setPos(\n computePosition(\n triggerRef.current.getBoundingClientRect(),\n panelRef.current.getBoundingClientRect(),\n preferredPlacement,\n ),\n );\n }, [preferredPlacement]);\n\n // Reposition on open, scroll, resize\n useEffect(() => {\n if (!open) {\n return;\n }\n\n // Two RAF: first lets panel mount with hidden styles so we can measure it;\n // second applies the measured position.\n const id = requestAnimationFrame(() => {\n place();\n window.addEventListener('scroll', place, { passive: true, capture: true });\n window.addEventListener('resize', place, { passive: true });\n });\n\n return () => {\n cancelAnimationFrame(id);\n window.removeEventListener('scroll', place, { capture: true });\n window.removeEventListener('resize', place);\n };\n }, [open, place]);\n\n // Save / restore focus\n useEffect(() => {\n if (open) {\n previouslyFocused.current = document.activeElement;\n requestAnimationFrame(() => {\n const first = panelRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n\n (first ?? panelRef.current)?.focus();\n });\n } else {\n (previouslyFocused.current as HTMLElement | null)?.focus();\n setPos(null);\n }\n }, [open]);\n\n // Close on outside pointer\n useEffect(() => {\n if (!open) {\n return;\n }\n\n const handler = (e: MouseEvent) => {\n if (\n !triggerRef.current?.contains(e.target as Node) &&\n !panelRef.current?.contains(e.target as Node)\n ) {\n close();\n }\n };\n\n document.addEventListener('mousedown', handler);\n\n return () => document.removeEventListener('mousedown', handler);\n }, [open, close]);\n\n // Escape key\n const handlePanelKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n close();\n }\n },\n [close],\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const trigger = cloneElement(children as any, {\n ref: triggerRef,\n id: triggerId,\n 'aria-haspopup': 'dialog',\n 'aria-expanded': open,\n 'aria-controls': open ? popoverId : undefined,\n onClick: (e: ReactMouseEvent<HTMLElement>) => {\n toggle();\n children.props.onClick?.(e);\n },\n });\n\n const panel = (\n <div\n ref={panelRef}\n id={popoverId}\n role=\"dialog\"\n aria-labelledby={triggerId}\n tabIndex={-1}\n className={[\n styles.panel,\n pos ? styles[pos.placement] : null,\n open && pos ? styles.visible : null,\n ]\n .filter(Boolean)\n .join(' ')}\n style={\n pos\n ? { top: pos.top, left: pos.left }\n : { visibility: 'hidden', pointerEvents: 'none', top: -9999, left: -9999 }\n }\n onKeyDown={handlePanelKeyDown}\n >\n {/* Arrow — offset shifts it to point at the trigger when the panel is clamped */}\n <div\n className={styles.arrow}\n aria-hidden=\"true\"\n style={\n pos?.arrowOffset !== undefined\n ? pos.placement === 'top' || pos.placement === 'bottom'\n ? { left: pos.arrowOffset - ARROW_HALF, marginLeft: 0 }\n : { top: pos.arrowOffset - ARROW_HALF, marginTop: 0 }\n : undefined\n }\n />\n {content}\n </div>\n );\n\n return (\n <>\n {trigger}\n {open && (typeof document !== 'undefined' ? createPortal(panel, document.body) : panel)}\n </>\n );\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var e={panel:`_panel_1tk9v_3`,visible:`_visible_1tk9v_36`,arrow:`_arrow_1tk9v_44`,bottom:`_bottom_1tk9v_59`,top:`_top_1tk9v_67`,left:`_left_1tk9v_75`,right:`_right_1tk9v_83`};exports.default=e;
1
+ var e={panel:`_panel_46zzm_3`,visible:`_visible_46zzm_36`,arrow:`_arrow_46zzm_44`,bottom:`_bottom_46zzm_59`,top:`_top_46zzm_67`,left:`_left_46zzm_75`,right:`_right_46zzm_83`};exports.default=e;
2
2
  //# sourceMappingURL=Popover.module.css.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.module.css.cjs","names":[],"sources":["../../../src/components/Popover/Popover.module.css"],"sourcesContent":["/* ─── Panel ──────────────────────────────────────────────────────────────────── */\n\n.panel {\n position: fixed;\n z-index: 10200; /* above Toaster (9999), below Dialog (10000) */\n\n min-width: 180px;\n max-width: 320px;\n\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #ffffff));\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n\n border: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n border-radius: var(--gnome-radius-lg, 12px);\n box-shadow:\n 0 4px 20px rgba(0, 0, 0, 0.14),\n 0 1px 4px rgba(0, 0, 0, 0.08);\n\n padding: var(--gnome-space-2, 12px);\n\n font-family: var(--gnome-font-family);\n\n /* Hidden before position is known */\n opacity: 0;\n transform: scale(0.95);\n transition:\n opacity var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease),\n transform var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n\n /* Don't intercept events while invisible */\n pointer-events: none;\n\n outline: none;\n}\n\n.visible {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n}\n\n/* ─── Arrow ──────────────────────────────────────────────────────────────────── */\n\n.arrow {\n position: absolute;\n width: 12px;\n height: 12px;\n\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #ffffff));\n border: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n\n /* Arrow points toward the trigger */\n transform: rotate(45deg);\n pointer-events: none;\n z-index: -1;\n}\n\n/* Position arrow on each side */\n.bottom .arrow {\n top: -6px;\n left: 50%;\n margin-left: -6px;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.top .arrow {\n bottom: -6px;\n left: 50%;\n margin-left: -6px;\n border-left-color: transparent;\n border-top-color: transparent;\n}\n\n.left .arrow {\n right: -6px;\n top: 50%;\n margin-top: -6px;\n border-left-color: transparent;\n border-bottom-color: transparent;\n}\n\n.right .arrow {\n left: -6px;\n top: 50%;\n margin-top: -6px;\n border-right-color: transparent;\n border-top-color: transparent;\n}\n\n/* ─── Dark mode ──────────────────────────────────────────────────────────────── */\n\n@media (prefers-color-scheme: dark) {\n .panel {\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #383838));\n border-color: rgba(255, 255, 255, 0.1);\n box-shadow:\n 0 4px 24px rgba(0, 0, 0, 0.4),\n 0 1px 4px rgba(0, 0, 0, 0.3);\n }\n\n .arrow {\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #383838));\n border-color: rgba(255, 255, 255, 0.1);\n }\n\n .bottom .arrow { border-right-color: transparent; border-bottom-color: transparent; }\n .top .arrow { border-left-color: transparent; border-top-color: transparent; }\n .left .arrow { border-left-color: transparent; border-bottom-color: transparent; }\n .right .arrow { border-right-color: transparent; border-top-color: transparent; }\n}\n\n/* ─── Reduced motion ─────────────────────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n .panel {\n transition: opacity var(--gnome-duration-fast, 100ms) linear;\n transform: none;\n }\n\n .visible {\n transform: none;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"Popover.module.css.cjs","names":[],"sources":["../../../src/components/Popover/Popover.module.css"],"sourcesContent":["/* ─── Panel ──────────────────────────────────────────────────────────────────── */\n\n.panel {\n position: fixed;\n z-index: 10200; /* above Toaster (9999), below Dialog (10000) */\n\n min-width: 180px;\n max-width: 320px;\n\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #ffffff));\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n\n border: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n border-radius: var(--gnome-radius-lg, 12px);\n box-shadow:\n 0 4px 20px rgba(0, 0, 0, 0.14),\n 0 1px 4px rgba(0, 0, 0, 0.08);\n\n padding: var(--gnome-space-2, 12px);\n\n font-family: var(--gnome-font-family);\n\n /* Hidden before position is known */\n opacity: 0;\n transform: scale(0.95);\n transition:\n opacity var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease),\n transform var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n\n /* Don't intercept events while invisible */\n pointer-events: none;\n\n outline: none;\n}\n\n.visible {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n}\n\n/* ─── Arrow ──────────────────────────────────────────────────────────────────── */\n\n.arrow {\n position: absolute;\n width: 12px;\n height: 12px;\n\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #ffffff));\n border: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n\n /* Arrow points toward the trigger */\n transform: rotate(45deg);\n pointer-events: none;\n z-index: -1;\n}\n\n/* Position arrow on each side */\n.bottom .arrow {\n top: -6px;\n left: 50%;\n margin-left: -6px;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.top .arrow {\n bottom: -6px;\n left: 50%;\n margin-left: -6px;\n border-left-color: transparent;\n border-top-color: transparent;\n}\n\n.left .arrow {\n right: -6px;\n top: 50%;\n margin-top: -6px;\n border-left-color: transparent;\n border-bottom-color: transparent;\n}\n\n.right .arrow {\n left: -6px;\n top: 50%;\n margin-top: -6px;\n border-right-color: transparent;\n border-top-color: transparent;\n}\n\n/* ─── Dark mode ──────────────────────────────────────────────────────────────── */\n\n@media (prefers-color-scheme: dark) {\n .panel {\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #383838));\n border-color: rgba(255, 255, 255, 0.1);\n box-shadow:\n 0 4px 24px rgba(0, 0, 0, 0.4),\n 0 1px 4px rgba(0, 0, 0, 0.3);\n }\n\n .arrow {\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #383838));\n border-color: rgba(255, 255, 255, 0.1);\n }\n\n .bottom .arrow {\n border-right-color: transparent;\n border-bottom-color: transparent;\n }\n .top .arrow {\n border-left-color: transparent;\n border-top-color: transparent;\n }\n .left .arrow {\n border-left-color: transparent;\n border-bottom-color: transparent;\n }\n .right .arrow {\n border-right-color: transparent;\n border-top-color: transparent;\n }\n}\n\n/* ─── Reduced motion ─────────────────────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n .panel {\n transition: opacity var(--gnome-duration-fast, 100ms) linear;\n transform: none;\n }\n\n .visible {\n transform: none;\n }\n}\n"],"mappings":""}
@@ -1,11 +1,11 @@
1
1
  var e = {
2
- panel: "_panel_1tk9v_3",
3
- visible: "_visible_1tk9v_36",
4
- arrow: "_arrow_1tk9v_44",
5
- bottom: "_bottom_1tk9v_59",
6
- top: "_top_1tk9v_67",
7
- left: "_left_1tk9v_75",
8
- right: "_right_1tk9v_83"
2
+ panel: "_panel_46zzm_3",
3
+ visible: "_visible_46zzm_36",
4
+ arrow: "_arrow_46zzm_44",
5
+ bottom: "_bottom_46zzm_59",
6
+ top: "_top_46zzm_67",
7
+ left: "_left_46zzm_75",
8
+ right: "_right_46zzm_83"
9
9
  };
10
10
  //#endregion
11
11
  export { e as default };
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.module.css.js","names":[],"sources":["../../../src/components/Popover/Popover.module.css"],"sourcesContent":["/* ─── Panel ──────────────────────────────────────────────────────────────────── */\n\n.panel {\n position: fixed;\n z-index: 10200; /* above Toaster (9999), below Dialog (10000) */\n\n min-width: 180px;\n max-width: 320px;\n\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #ffffff));\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n\n border: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n border-radius: var(--gnome-radius-lg, 12px);\n box-shadow:\n 0 4px 20px rgba(0, 0, 0, 0.14),\n 0 1px 4px rgba(0, 0, 0, 0.08);\n\n padding: var(--gnome-space-2, 12px);\n\n font-family: var(--gnome-font-family);\n\n /* Hidden before position is known */\n opacity: 0;\n transform: scale(0.95);\n transition:\n opacity var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease),\n transform var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n\n /* Don't intercept events while invisible */\n pointer-events: none;\n\n outline: none;\n}\n\n.visible {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n}\n\n/* ─── Arrow ──────────────────────────────────────────────────────────────────── */\n\n.arrow {\n position: absolute;\n width: 12px;\n height: 12px;\n\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #ffffff));\n border: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n\n /* Arrow points toward the trigger */\n transform: rotate(45deg);\n pointer-events: none;\n z-index: -1;\n}\n\n/* Position arrow on each side */\n.bottom .arrow {\n top: -6px;\n left: 50%;\n margin-left: -6px;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.top .arrow {\n bottom: -6px;\n left: 50%;\n margin-left: -6px;\n border-left-color: transparent;\n border-top-color: transparent;\n}\n\n.left .arrow {\n right: -6px;\n top: 50%;\n margin-top: -6px;\n border-left-color: transparent;\n border-bottom-color: transparent;\n}\n\n.right .arrow {\n left: -6px;\n top: 50%;\n margin-top: -6px;\n border-right-color: transparent;\n border-top-color: transparent;\n}\n\n/* ─── Dark mode ──────────────────────────────────────────────────────────────── */\n\n@media (prefers-color-scheme: dark) {\n .panel {\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #383838));\n border-color: rgba(255, 255, 255, 0.1);\n box-shadow:\n 0 4px 24px rgba(0, 0, 0, 0.4),\n 0 1px 4px rgba(0, 0, 0, 0.3);\n }\n\n .arrow {\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #383838));\n border-color: rgba(255, 255, 255, 0.1);\n }\n\n .bottom .arrow { border-right-color: transparent; border-bottom-color: transparent; }\n .top .arrow { border-left-color: transparent; border-top-color: transparent; }\n .left .arrow { border-left-color: transparent; border-bottom-color: transparent; }\n .right .arrow { border-right-color: transparent; border-top-color: transparent; }\n}\n\n/* ─── Reduced motion ─────────────────────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n .panel {\n transition: opacity var(--gnome-duration-fast, 100ms) linear;\n transform: none;\n }\n\n .visible {\n transform: none;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"Popover.module.css.js","names":[],"sources":["../../../src/components/Popover/Popover.module.css"],"sourcesContent":["/* ─── Panel ──────────────────────────────────────────────────────────────────── */\n\n.panel {\n position: fixed;\n z-index: 10200; /* above Toaster (9999), below Dialog (10000) */\n\n min-width: 180px;\n max-width: 320px;\n\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #ffffff));\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n\n border: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n border-radius: var(--gnome-radius-lg, 12px);\n box-shadow:\n 0 4px 20px rgba(0, 0, 0, 0.14),\n 0 1px 4px rgba(0, 0, 0, 0.08);\n\n padding: var(--gnome-space-2, 12px);\n\n font-family: var(--gnome-font-family);\n\n /* Hidden before position is known */\n opacity: 0;\n transform: scale(0.95);\n transition:\n opacity var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease),\n transform var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n\n /* Don't intercept events while invisible */\n pointer-events: none;\n\n outline: none;\n}\n\n.visible {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n}\n\n/* ─── Arrow ──────────────────────────────────────────────────────────────────── */\n\n.arrow {\n position: absolute;\n width: 12px;\n height: 12px;\n\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #ffffff));\n border: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n\n /* Arrow points toward the trigger */\n transform: rotate(45deg);\n pointer-events: none;\n z-index: -1;\n}\n\n/* Position arrow on each side */\n.bottom .arrow {\n top: -6px;\n left: 50%;\n margin-left: -6px;\n border-right-color: transparent;\n border-bottom-color: transparent;\n}\n\n.top .arrow {\n bottom: -6px;\n left: 50%;\n margin-left: -6px;\n border-left-color: transparent;\n border-top-color: transparent;\n}\n\n.left .arrow {\n right: -6px;\n top: 50%;\n margin-top: -6px;\n border-left-color: transparent;\n border-bottom-color: transparent;\n}\n\n.right .arrow {\n left: -6px;\n top: 50%;\n margin-top: -6px;\n border-right-color: transparent;\n border-top-color: transparent;\n}\n\n/* ─── Dark mode ──────────────────────────────────────────────────────────────── */\n\n@media (prefers-color-scheme: dark) {\n .panel {\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #383838));\n border-color: rgba(255, 255, 255, 0.1);\n box-shadow:\n 0 4px 24px rgba(0, 0, 0, 0.4),\n 0 1px 4px rgba(0, 0, 0, 0.3);\n }\n\n .arrow {\n background-color: var(--gnome-popover-bg-color, var(--gnome-card-bg-color, #383838));\n border-color: rgba(255, 255, 255, 0.1);\n }\n\n .bottom .arrow {\n border-right-color: transparent;\n border-bottom-color: transparent;\n }\n .top .arrow {\n border-left-color: transparent;\n border-top-color: transparent;\n }\n .left .arrow {\n border-left-color: transparent;\n border-bottom-color: transparent;\n }\n .right .arrow {\n border-right-color: transparent;\n border-top-color: transparent;\n }\n}\n\n/* ─── Reduced motion ─────────────────────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n .panel {\n transition: opacity var(--gnome-duration-fast, 100ms) linear;\n transform: none;\n }\n\n .visible {\n transform: none;\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
+ export type { PopoverPlacement, PopoverProps } from './Popover';
1
2
  export { Popover } from './Popover';
2
- export type { PopoverProps, PopoverPlacement } from './Popover';
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./Popover/Popover.cjs`);exports.Popover=e.Popover;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./Popover/Popover.cjs");exports.Popover=e.Popover;
@@ -1,2 +1,2 @@
1
- const e=require(`./PreferencesDialog.module.css.cjs`);let t=require(`react`),n=require(`react-dom`),r=require(`react/jsx-runtime`);var i=`button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`;function a(e,t){if(e.key!==`Tab`)return;let n=Array.from(t.current?.querySelectorAll(i)??[]);if(!n.length)return;let r=n[0],a=n[n.length-1];e.shiftKey?document.activeElement===r&&(e.preventDefault(),a.focus()):document.activeElement===a&&(e.preventDefault(),r.focus())}function o({open:o,onClose:s,children:c,searchable:l=!0,className:u,...d}){let f=(0,t.useRef)(null),p=(0,t.useRef)(null),m=(0,t.useId)(),h=t.Children.toArray(c).filter(e=>(0,t.isValidElement)(e)),[g,_]=(0,t.useState)(0),[v,y]=(0,t.useState)(``);(0,t.useEffect)(()=>{if(o){_(0),y(``);let e=requestAnimationFrame(()=>{l&&p.current?p.current.focus():(f.current?.querySelector(i))?.focus()});return()=>cancelAnimationFrame(e)}},[o,l]);let b=(0,t.useCallback)(e=>{if(e.key===`Escape`){e.stopPropagation(),s();return}a(e,f)},[s]),x=h.length>1,S=h[g]??h[0],C=v.trim().toLowerCase();return o?(0,n.createPortal)((0,r.jsx)(`div`,{className:e.default.backdrop,onClick:e=>{e.target===e.currentTarget&&s()},role:`presentation`,children:(0,r.jsxs)(`div`,{ref:f,role:`dialog`,"aria-modal":`true`,"aria-labelledby":m,className:[e.default.dialog,x?e.default.dialogMulti:null,u].filter(Boolean).join(` `),onKeyDown:b,...d,children:[(0,r.jsxs)(`div`,{className:e.default.header,children:[(0,r.jsx)(`button`,{type:`button`,className:e.default.closeBtn,onClick:s,"aria-label":`Close preferences`,children:`✕`}),(0,r.jsx)(`span`,{id:m,className:e.default.title,children:`Preferences`}),l&&(0,r.jsx)(`div`,{className:e.default.searchWrap,children:(0,r.jsx)(`input`,{ref:p,type:`search`,placeholder:`Search…`,value:v,onChange:e=>y(e.target.value),className:e.default.searchInput,"aria-label":`Search preferences`})})]}),(0,r.jsxs)(`div`,{className:e.default.body,children:[x&&(0,r.jsx)(`nav`,{className:e.default.sidebar,"aria-label":`Preferences pages`,children:(0,r.jsx)(`ul`,{role:`tablist`,className:e.default.navList,children:h.map((t,n)=>(0,r.jsx)(`li`,{role:`presentation`,children:(0,r.jsxs)(`button`,{role:`tab`,type:`button`,"aria-selected":n===g,className:[e.default.navItem,n===g?e.default.navItemActive:null].filter(Boolean).join(` `),onClick:()=>_(n),children:[t.props.iconName&&(0,r.jsx)(`span`,{className:[e.default.navIcon,`icon`,t.props.iconName].join(` `),"aria-hidden":`true`}),(0,r.jsx)(`span`,{className:e.default.navLabel,children:t.props.title})]})},n))})}),(0,r.jsx)(`div`,{className:e.default.pageWrap,children:S&&(0,t.cloneElement)(S,{"data-search-query":C||void 0})})]})]})}),document.body):null}exports.PreferencesDialog=o;
1
+ const e=require("./PreferencesDialog.module.css.cjs");let t=require("react"),n=require("react-dom"),r=require("react/jsx-runtime");var i=`button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`;function a(e,t){if(e.key!==`Tab`)return;let n=Array.from(t.current?.querySelectorAll(i)??[]);if(!n.length)return;let r=n[0],a=n[n.length-1];e.shiftKey?document.activeElement===r&&(e.preventDefault(),a.focus()):document.activeElement===a&&(e.preventDefault(),r.focus())}var o=({open:o,onClose:s,children:c,searchable:l=!0,className:u,...d})=>{let f=(0,t.useRef)(null),p=(0,t.useRef)(null),m=(0,t.useId)(),h=t.Children.toArray(c).filter(e=>(0,t.isValidElement)(e)),[g,_]=(0,t.useState)(0),[v,y]=(0,t.useState)(``);(0,t.useEffect)(()=>{if(o){_(0),y(``);let e=requestAnimationFrame(()=>{l&&p.current?p.current.focus():(f.current?.querySelector(i))?.focus()});return()=>cancelAnimationFrame(e)}},[o,l]);let b=(0,t.useCallback)(e=>{if(e.key===`Escape`){e.stopPropagation(),s();return}a(e,f)},[s]),x=h.length>1,S=h[g]??h[0],C=v.trim().toLowerCase();return o?(0,n.createPortal)((0,r.jsx)(`div`,{className:e.default.backdrop,onClick:e=>{e.target===e.currentTarget&&s()},role:`presentation`,children:(0,r.jsxs)(`div`,{ref:f,role:`dialog`,"aria-modal":`true`,"aria-labelledby":m,className:[e.default.dialog,x?e.default.dialogMulti:null,u].filter(Boolean).join(` `),onKeyDown:b,...d,children:[(0,r.jsxs)(`div`,{className:e.default.header,children:[(0,r.jsx)(`button`,{type:`button`,className:e.default.closeBtn,onClick:s,"aria-label":`Close preferences`,children:`✕`}),(0,r.jsx)(`span`,{id:m,className:e.default.title,children:`Preferences`}),l&&(0,r.jsx)(`div`,{className:e.default.searchWrap,children:(0,r.jsx)(`input`,{ref:p,type:`search`,placeholder:`Search…`,value:v,onChange:e=>y(e.target.value),className:e.default.searchInput,"aria-label":`Search preferences`})})]}),(0,r.jsxs)(`div`,{className:e.default.body,children:[x&&(0,r.jsx)(`nav`,{className:e.default.sidebar,"aria-label":`Preferences pages`,children:(0,r.jsx)(`ul`,{className:e.default.navList,children:h.map((t,n)=>(0,r.jsx)(`li`,{role:`presentation`,children:(0,r.jsxs)(`button`,{role:`tab`,type:`button`,"aria-selected":n===g,className:[e.default.navItem,n===g?e.default.navItemActive:null].filter(Boolean).join(` `),onClick:()=>_(n),children:[t.props.iconName&&(0,r.jsx)(`span`,{className:[e.default.navIcon,`icon`,t.props.iconName].join(` `),"aria-hidden":`true`}),(0,r.jsx)(`span`,{className:e.default.navLabel,children:t.props.title})]})},n))})}),(0,r.jsx)(`div`,{className:e.default.pageWrap,children:S&&(0,t.cloneElement)(S,{"data-search-query":C||void 0})})]})]})}),document.body):null};exports.PreferencesDialog=o;
2
2
  //# sourceMappingURL=PreferencesDialog.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"PreferencesDialog.cjs","names":[],"sources":["../../../src/components/PreferencesDialog/PreferencesDialog.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"./PreferencesDialog.module.css\";\nimport type { PreferencesPageProps } from \"../PreferencesPage/PreferencesPage\";\n\n// ─── Focus trap ───────────────────────────────────────────────────────────────\n\nconst FOCUSABLE =\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nfunction trapFocus(\n e: KeyboardEvent<HTMLDivElement>,\n ref: React.RefObject<HTMLDivElement | null>\n) {\n if (e.key !== \"Tab\") return;\n const focusable = Array.from(\n ref.current?.querySelectorAll<HTMLElement>(FOCUSABLE) ?? []\n );\n if (!focusable.length) return;\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (e.shiftKey) {\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n}\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface PreferencesDialogProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Whether the dialog is open. */\n open: boolean;\n /** Called when the user requests to close the dialog. */\n onClose: () => void;\n /**\n * `PreferencesPage` children. Each page appears as a sidebar entry.\n * When only one page is provided the sidebar is hidden.\n */\n children?: ReactNode;\n /**\n * Whether to show a search bar in the header.\n * When `true` the user can filter group/row content by typing.\n * Defaults to `true`.\n */\n searchable?: boolean;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Multi-page settings dialog using `PreferencesPage` tabs.\n *\n * Renders a wide modal with an optional sidebar listing pages. Each\n * `PreferencesPage` child becomes a navigation entry. Supports built-in\n * search when `searchable` is `true` (the default).\n *\n * Mirrors `AdwPreferencesDialog`.\n *\n * @example\n * ```tsx\n * <PreferencesDialog open={open} onClose={() => setOpen(false)}>\n * <PreferencesPage title=\"General\" iconName=\"preferences-system-symbolic\">\n * <PreferencesGroup title=\"Appearance\">\n * <BoxedList>\n * <SwitchRow title=\"Dark mode\" />\n * </BoxedList>\n * </PreferencesGroup>\n * </PreferencesPage>\n * </PreferencesDialog>\n * ```\n *\n * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.PreferencesDialog.html\n */\nexport function PreferencesDialog({\n open,\n onClose,\n children,\n searchable = true,\n className,\n ...props\n}: PreferencesDialogProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const titleId = useId();\n\n const pages = Children.toArray(children).filter(\n (c): c is ReactElement<PreferencesPageProps> =>\n isValidElement(c)\n ) as ReactElement<PreferencesPageProps>[];\n\n const [activeIndex, setActiveIndex] = useState(0);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n // Reset state when dialog opens\n useEffect(() => {\n if (open) {\n setActiveIndex(0);\n setSearchQuery(\"\");\n // Focus search or first focusable after open animation\n const id = requestAnimationFrame(() => {\n if (searchable && searchRef.current) {\n searchRef.current.focus();\n } else {\n const first = dialogRef.current?.querySelector<HTMLElement>(FOCUSABLE);\n first?.focus();\n }\n });\n return () => cancelAnimationFrame(id);\n }\n }, [open, searchable]);\n\n // Close on Escape\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onClose();\n return;\n }\n trapFocus(e, dialogRef);\n },\n [onClose]\n );\n\n const multiPage = pages.length > 1;\n const activePage = pages[activeIndex] ?? pages[0];\n\n // Filter content by search query\n const query = searchQuery.trim().toLowerCase();\n\n if (!open) return null;\n\n return createPortal(\n <div\n className={styles.backdrop}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose();\n }}\n role=\"presentation\"\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={[\n styles.dialog,\n multiPage ? styles.dialogMulti : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {/* ── Header ─────────────────────────────────────────────────────── */}\n <div className={styles.header}>\n <button\n type=\"button\"\n className={styles.closeBtn}\n onClick={onClose}\n aria-label=\"Close preferences\"\n >\n ✕\n </button>\n <span id={titleId} className={styles.title}>\n Preferences\n </span>\n {searchable && (\n <div className={styles.searchWrap}>\n <input\n ref={searchRef}\n type=\"search\"\n placeholder=\"Search…\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className={styles.searchInput}\n aria-label=\"Search preferences\"\n />\n </div>\n )}\n </div>\n\n {/* ── Body ───────────────────────────────────────────────────────── */}\n <div className={styles.body}>\n {/* Sidebar — only shown when there are multiple pages */}\n {multiPage && (\n <nav className={styles.sidebar} aria-label=\"Preferences pages\">\n <ul role=\"tablist\" className={styles.navList}>\n {pages.map((page, i) => (\n <li key={i} role=\"presentation\">\n <button\n role=\"tab\"\n type=\"button\"\n aria-selected={i === activeIndex}\n className={[\n styles.navItem,\n i === activeIndex ? styles.navItemActive : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={() => setActiveIndex(i)}\n >\n {page.props.iconName && (\n <span\n className={[\n styles.navIcon,\n \"icon\",\n page.props.iconName,\n ].join(\" \")}\n aria-hidden=\"true\"\n />\n )}\n <span className={styles.navLabel}>\n {page.props.title}\n </span>\n </button>\n </li>\n ))}\n </ul>\n </nav>\n )}\n\n {/* Page content */}\n <div className={styles.pageWrap}>\n {activePage &&\n cloneElement(activePage, {\n \"data-search-query\": query || undefined,\n } as Partial<PreferencesPageProps>)}\n </div>\n </div>\n </div>\n </div>,\n document.body\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"PreferencesDialog.cjs","names":[],"sources":["../../../src/components/PreferencesDialog/PreferencesDialog.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n type HTMLAttributes,\n isValidElement,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n type RefObject,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\n\nimport type { PreferencesPageProps } from '../PreferencesPage/PreferencesPage';\n\nimport styles from './PreferencesDialog.module.css';\n\n// ─── Focus trap ───────────────────────────────────────────────────────────────\n\nconst FOCUSABLE =\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nfunction trapFocus(e: KeyboardEvent<HTMLDivElement>, ref: RefObject<HTMLDivElement | null>) {\n if (e.key !== 'Tab') {\n return;\n }\n\n const focusable = Array.from(ref.current?.querySelectorAll<HTMLElement>(FOCUSABLE) ?? []);\n\n if (!focusable.length) {\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n}\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface PreferencesDialogProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Whether the dialog is open. */\n open: boolean;\n /** Called when the user requests to close the dialog. */\n onClose: () => void;\n /**\n * `PreferencesPage` children. Each page appears as a sidebar entry.\n * When only one page is provided the sidebar is hidden.\n */\n children?: ReactNode;\n /**\n * Whether to show a search bar in the header.\n * When `true` the user can filter group/row content by typing.\n * Defaults to `true`.\n */\n searchable?: boolean;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Multi-page settings dialog using `PreferencesPage` tabs.\n *\n * Renders a wide modal with an optional sidebar listing pages. Each\n * `PreferencesPage` child becomes a navigation entry. Supports built-in\n * search when `searchable` is `true` (the default).\n *\n * Mirrors `AdwPreferencesDialog`.\n *\n * @example\n * ```tsx\n * <PreferencesDialog open={open} onClose={() => setOpen(false)}>\n * <PreferencesPage title=\"General\" iconName=\"preferences-system-symbolic\">\n * <PreferencesGroup title=\"Appearance\">\n * <BoxedList>\n * <SwitchRow title=\"Dark mode\" />\n * </BoxedList>\n * </PreferencesGroup>\n * </PreferencesPage>\n * </PreferencesDialog>\n * ```\n *\n * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.PreferencesDialog.html\n */\nexport const PreferencesDialog = ({\n open,\n onClose,\n children,\n searchable = true,\n className,\n ...props\n}: PreferencesDialogProps) => {\n const dialogRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const titleId = useId();\n\n const pages = Children.toArray(children).filter((c): c is ReactElement<PreferencesPageProps> =>\n isValidElement(c),\n ) as ReactElement<PreferencesPageProps>[];\n\n const [activeIndex, setActiveIndex] = useState(0);\n const [searchQuery, setSearchQuery] = useState('');\n\n // Reset state when dialog opens\n useEffect(() => {\n if (open) {\n setActiveIndex(0);\n setSearchQuery('');\n // Focus search or first focusable after open animation\n const id = requestAnimationFrame(() => {\n if (searchable && searchRef.current) {\n searchRef.current.focus();\n } else {\n const first = dialogRef.current?.querySelector<HTMLElement>(FOCUSABLE);\n\n first?.focus();\n }\n });\n\n return () => cancelAnimationFrame(id);\n }\n }, [open, searchable]);\n\n // Close on Escape\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n\n return;\n }\n\n trapFocus(e, dialogRef);\n },\n [onClose],\n );\n\n const multiPage = pages.length > 1;\n const activePage = pages[activeIndex] ?? pages[0];\n\n // Filter content by search query\n const query = searchQuery.trim().toLowerCase();\n\n if (!open) {\n return null;\n }\n\n return createPortal(\n <div\n className={styles.backdrop}\n onClick={(e) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n }}\n role=\"presentation\"\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={[styles.dialog, multiPage ? styles.dialogMulti : null, className]\n .filter(Boolean)\n .join(' ')}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {/* ── Header ─────────────────────────────────────────────────────── */}\n <div className={styles.header}>\n <button\n type=\"button\"\n className={styles.closeBtn}\n onClick={onClose}\n aria-label=\"Close preferences\"\n >\n ✕\n </button>\n <span id={titleId} className={styles.title}>\n Preferences\n </span>\n {searchable && (\n <div className={styles.searchWrap}>\n <input\n ref={searchRef}\n type=\"search\"\n placeholder=\"Search…\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className={styles.searchInput}\n aria-label=\"Search preferences\"\n />\n </div>\n )}\n </div>\n\n {/* ── Body ───────────────────────────────────────────────────────── */}\n <div className={styles.body}>\n {/* Sidebar — only shown when there are multiple pages */}\n {multiPage && (\n <nav className={styles.sidebar} aria-label=\"Preferences pages\">\n <ul className={styles.navList}>\n {pages.map((page, i) => (\n <li key={i} role=\"presentation\">\n <button\n role=\"tab\"\n type=\"button\"\n aria-selected={i === activeIndex}\n className={[styles.navItem, i === activeIndex ? styles.navItemActive : null]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setActiveIndex(i)}\n >\n {page.props.iconName && (\n <span\n className={[styles.navIcon, 'icon', page.props.iconName].join(' ')}\n aria-hidden=\"true\"\n />\n )}\n <span className={styles.navLabel}>{page.props.title}</span>\n </button>\n </li>\n ))}\n </ul>\n </nav>\n )}\n\n {/* Page content */}\n <div className={styles.pageWrap}>\n {activePage &&\n cloneElement(activePage, {\n 'data-search-query': query || undefined,\n } as Partial<PreferencesPageProps>)}\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n};\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { HTMLAttributes, ReactNode } from 'react';
2
- export interface PreferencesDialogProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
2
+ export interface PreferencesDialogProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
3
3
  /** Whether the dialog is open. */
4
4
  open: boolean;
5
5
  /** Called when the user requests to close the dialog. */
@@ -40,4 +40,4 @@ export interface PreferencesDialogProps extends Omit<HTMLAttributes<HTMLDivEleme
40
40
  *
41
41
  * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.PreferencesDialog.html
42
42
  */
43
- export declare function PreferencesDialog({ open, onClose, children, searchable, className, ...props }: PreferencesDialogProps): import('react').ReactPortal | null;
43
+ export declare const PreferencesDialog: ({ open, onClose, children, searchable, className, ...props }: PreferencesDialogProps) => import('react').ReactPortal | null;
@@ -11,7 +11,7 @@ function p(e, t) {
11
11
  let r = n[0], i = n[n.length - 1];
12
12
  e.shiftKey ? document.activeElement === r && (e.preventDefault(), i.focus()) : document.activeElement === i && (e.preventDefault(), r.focus());
13
13
  }
14
- function m({ open: m, onClose: h, children: g, searchable: _ = !0, className: v, ...y }) {
14
+ var m = ({ open: m, onClose: h, children: g, searchable: _ = !0, className: v, ...y }) => {
15
15
  let b = s(null), x = s(null), S = o(), C = t.toArray(g).filter((e) => r(e)), [w, T] = c(0), [E, D] = c("");
16
16
  a(() => {
17
17
  if (m) {
@@ -81,7 +81,6 @@ function m({ open: m, onClose: h, children: g, searchable: _ = !0, className: v,
81
81
  className: e.sidebar,
82
82
  "aria-label": "Preferences pages",
83
83
  children: /* @__PURE__ */ u("ul", {
84
- role: "tablist",
85
84
  className: e.navList,
86
85
  children: C.map((t, n) => /* @__PURE__ */ u("li", {
87
86
  role: "presentation",
@@ -112,7 +111,7 @@ function m({ open: m, onClose: h, children: g, searchable: _ = !0, className: v,
112
111
  })]
113
112
  })
114
113
  }), document.body) : null;
115
- }
114
+ };
116
115
  //#endregion
117
116
  export { m as PreferencesDialog };
118
117
 
@@ -1 +1 @@
1
- {"version":3,"file":"PreferencesDialog.js","names":[],"sources":["../../../src/components/PreferencesDialog/PreferencesDialog.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"./PreferencesDialog.module.css\";\nimport type { PreferencesPageProps } from \"../PreferencesPage/PreferencesPage\";\n\n// ─── Focus trap ───────────────────────────────────────────────────────────────\n\nconst FOCUSABLE =\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nfunction trapFocus(\n e: KeyboardEvent<HTMLDivElement>,\n ref: React.RefObject<HTMLDivElement | null>\n) {\n if (e.key !== \"Tab\") return;\n const focusable = Array.from(\n ref.current?.querySelectorAll<HTMLElement>(FOCUSABLE) ?? []\n );\n if (!focusable.length) return;\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (e.shiftKey) {\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n}\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface PreferencesDialogProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Whether the dialog is open. */\n open: boolean;\n /** Called when the user requests to close the dialog. */\n onClose: () => void;\n /**\n * `PreferencesPage` children. Each page appears as a sidebar entry.\n * When only one page is provided the sidebar is hidden.\n */\n children?: ReactNode;\n /**\n * Whether to show a search bar in the header.\n * When `true` the user can filter group/row content by typing.\n * Defaults to `true`.\n */\n searchable?: boolean;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Multi-page settings dialog using `PreferencesPage` tabs.\n *\n * Renders a wide modal with an optional sidebar listing pages. Each\n * `PreferencesPage` child becomes a navigation entry. Supports built-in\n * search when `searchable` is `true` (the default).\n *\n * Mirrors `AdwPreferencesDialog`.\n *\n * @example\n * ```tsx\n * <PreferencesDialog open={open} onClose={() => setOpen(false)}>\n * <PreferencesPage title=\"General\" iconName=\"preferences-system-symbolic\">\n * <PreferencesGroup title=\"Appearance\">\n * <BoxedList>\n * <SwitchRow title=\"Dark mode\" />\n * </BoxedList>\n * </PreferencesGroup>\n * </PreferencesPage>\n * </PreferencesDialog>\n * ```\n *\n * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.PreferencesDialog.html\n */\nexport function PreferencesDialog({\n open,\n onClose,\n children,\n searchable = true,\n className,\n ...props\n}: PreferencesDialogProps) {\n const dialogRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const titleId = useId();\n\n const pages = Children.toArray(children).filter(\n (c): c is ReactElement<PreferencesPageProps> =>\n isValidElement(c)\n ) as ReactElement<PreferencesPageProps>[];\n\n const [activeIndex, setActiveIndex] = useState(0);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n // Reset state when dialog opens\n useEffect(() => {\n if (open) {\n setActiveIndex(0);\n setSearchQuery(\"\");\n // Focus search or first focusable after open animation\n const id = requestAnimationFrame(() => {\n if (searchable && searchRef.current) {\n searchRef.current.focus();\n } else {\n const first = dialogRef.current?.querySelector<HTMLElement>(FOCUSABLE);\n first?.focus();\n }\n });\n return () => cancelAnimationFrame(id);\n }\n }, [open, searchable]);\n\n // Close on Escape\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onClose();\n return;\n }\n trapFocus(e, dialogRef);\n },\n [onClose]\n );\n\n const multiPage = pages.length > 1;\n const activePage = pages[activeIndex] ?? pages[0];\n\n // Filter content by search query\n const query = searchQuery.trim().toLowerCase();\n\n if (!open) return null;\n\n return createPortal(\n <div\n className={styles.backdrop}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose();\n }}\n role=\"presentation\"\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={[\n styles.dialog,\n multiPage ? styles.dialogMulti : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {/* ── Header ─────────────────────────────────────────────────────── */}\n <div className={styles.header}>\n <button\n type=\"button\"\n className={styles.closeBtn}\n onClick={onClose}\n aria-label=\"Close preferences\"\n >\n ✕\n </button>\n <span id={titleId} className={styles.title}>\n Preferences\n </span>\n {searchable && (\n <div className={styles.searchWrap}>\n <input\n ref={searchRef}\n type=\"search\"\n placeholder=\"Search…\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className={styles.searchInput}\n aria-label=\"Search preferences\"\n />\n </div>\n )}\n </div>\n\n {/* ── Body ───────────────────────────────────────────────────────── */}\n <div className={styles.body}>\n {/* Sidebar — only shown when there are multiple pages */}\n {multiPage && (\n <nav className={styles.sidebar} aria-label=\"Preferences pages\">\n <ul role=\"tablist\" className={styles.navList}>\n {pages.map((page, i) => (\n <li key={i} role=\"presentation\">\n <button\n role=\"tab\"\n type=\"button\"\n aria-selected={i === activeIndex}\n className={[\n styles.navItem,\n i === activeIndex ? styles.navItemActive : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n onClick={() => setActiveIndex(i)}\n >\n {page.props.iconName && (\n <span\n className={[\n styles.navIcon,\n \"icon\",\n page.props.iconName,\n ].join(\" \")}\n aria-hidden=\"true\"\n />\n )}\n <span className={styles.navLabel}>\n {page.props.title}\n </span>\n </button>\n </li>\n ))}\n </ul>\n </nav>\n )}\n\n {/* Page content */}\n <div className={styles.pageWrap}>\n {activePage &&\n cloneElement(activePage, {\n \"data-search-query\": query || undefined,\n } as Partial<PreferencesPageProps>)}\n </div>\n </div>\n </div>\n </div>,\n document.body\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"PreferencesDialog.js","names":[],"sources":["../../../src/components/PreferencesDialog/PreferencesDialog.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n type HTMLAttributes,\n isValidElement,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n type RefObject,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\n\nimport type { PreferencesPageProps } from '../PreferencesPage/PreferencesPage';\n\nimport styles from './PreferencesDialog.module.css';\n\n// ─── Focus trap ───────────────────────────────────────────────────────────────\n\nconst FOCUSABLE =\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nfunction trapFocus(e: KeyboardEvent<HTMLDivElement>, ref: RefObject<HTMLDivElement | null>) {\n if (e.key !== 'Tab') {\n return;\n }\n\n const focusable = Array.from(ref.current?.querySelectorAll<HTMLElement>(FOCUSABLE) ?? []);\n\n if (!focusable.length) {\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (e.shiftKey) {\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n}\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface PreferencesDialogProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Whether the dialog is open. */\n open: boolean;\n /** Called when the user requests to close the dialog. */\n onClose: () => void;\n /**\n * `PreferencesPage` children. Each page appears as a sidebar entry.\n * When only one page is provided the sidebar is hidden.\n */\n children?: ReactNode;\n /**\n * Whether to show a search bar in the header.\n * When `true` the user can filter group/row content by typing.\n * Defaults to `true`.\n */\n searchable?: boolean;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Multi-page settings dialog using `PreferencesPage` tabs.\n *\n * Renders a wide modal with an optional sidebar listing pages. Each\n * `PreferencesPage` child becomes a navigation entry. Supports built-in\n * search when `searchable` is `true` (the default).\n *\n * Mirrors `AdwPreferencesDialog`.\n *\n * @example\n * ```tsx\n * <PreferencesDialog open={open} onClose={() => setOpen(false)}>\n * <PreferencesPage title=\"General\" iconName=\"preferences-system-symbolic\">\n * <PreferencesGroup title=\"Appearance\">\n * <BoxedList>\n * <SwitchRow title=\"Dark mode\" />\n * </BoxedList>\n * </PreferencesGroup>\n * </PreferencesPage>\n * </PreferencesDialog>\n * ```\n *\n * @see https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/class.PreferencesDialog.html\n */\nexport const PreferencesDialog = ({\n open,\n onClose,\n children,\n searchable = true,\n className,\n ...props\n}: PreferencesDialogProps) => {\n const dialogRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const titleId = useId();\n\n const pages = Children.toArray(children).filter((c): c is ReactElement<PreferencesPageProps> =>\n isValidElement(c),\n ) as ReactElement<PreferencesPageProps>[];\n\n const [activeIndex, setActiveIndex] = useState(0);\n const [searchQuery, setSearchQuery] = useState('');\n\n // Reset state when dialog opens\n useEffect(() => {\n if (open) {\n setActiveIndex(0);\n setSearchQuery('');\n // Focus search or first focusable after open animation\n const id = requestAnimationFrame(() => {\n if (searchable && searchRef.current) {\n searchRef.current.focus();\n } else {\n const first = dialogRef.current?.querySelector<HTMLElement>(FOCUSABLE);\n\n first?.focus();\n }\n });\n\n return () => cancelAnimationFrame(id);\n }\n }, [open, searchable]);\n\n // Close on Escape\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n\n return;\n }\n\n trapFocus(e, dialogRef);\n },\n [onClose],\n );\n\n const multiPage = pages.length > 1;\n const activePage = pages[activeIndex] ?? pages[0];\n\n // Filter content by search query\n const query = searchQuery.trim().toLowerCase();\n\n if (!open) {\n return null;\n }\n\n return createPortal(\n <div\n className={styles.backdrop}\n onClick={(e) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n }}\n role=\"presentation\"\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n className={[styles.dialog, multiPage ? styles.dialogMulti : null, className]\n .filter(Boolean)\n .join(' ')}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {/* ── Header ─────────────────────────────────────────────────────── */}\n <div className={styles.header}>\n <button\n type=\"button\"\n className={styles.closeBtn}\n onClick={onClose}\n aria-label=\"Close preferences\"\n >\n ✕\n </button>\n <span id={titleId} className={styles.title}>\n Preferences\n </span>\n {searchable && (\n <div className={styles.searchWrap}>\n <input\n ref={searchRef}\n type=\"search\"\n placeholder=\"Search…\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className={styles.searchInput}\n aria-label=\"Search preferences\"\n />\n </div>\n )}\n </div>\n\n {/* ── Body ───────────────────────────────────────────────────────── */}\n <div className={styles.body}>\n {/* Sidebar — only shown when there are multiple pages */}\n {multiPage && (\n <nav className={styles.sidebar} aria-label=\"Preferences pages\">\n <ul className={styles.navList}>\n {pages.map((page, i) => (\n <li key={i} role=\"presentation\">\n <button\n role=\"tab\"\n type=\"button\"\n aria-selected={i === activeIndex}\n className={[styles.navItem, i === activeIndex ? styles.navItemActive : null]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setActiveIndex(i)}\n >\n {page.props.iconName && (\n <span\n className={[styles.navIcon, 'icon', page.props.iconName].join(' ')}\n aria-hidden=\"true\"\n />\n )}\n <span className={styles.navLabel}>{page.props.title}</span>\n </button>\n </li>\n ))}\n </ul>\n </nav>\n )}\n\n {/* Page content */}\n <div className={styles.pageWrap}>\n {activePage &&\n cloneElement(activePage, {\n 'data-search-query': query || undefined,\n } as Partial<PreferencesPageProps>)}\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var e=`_backdrop_1u1bd_3`,t=`_dialog_1u1bd_26`,n=`_dialogMulti_1u1bd_46`,r=`_header_1u1bd_63`,i=`_closeBtn_1u1bd_73`,a=`_title_1u1bd_102`,o=`_searchWrap_1u1bd_112`,s=`_searchInput_1u1bd_116`,c=`_body_1u1bd_143`,l=`_sidebar_1u1bd_152`,u=`_navList_1u1bd_160`,d=`_navItem_1u1bd_169`,f=`_navItemActive_1u1bd_190`,p=`_navIcon_1u1bd_205`,m=`_navLabel_1u1bd_211`,h=`_pageWrap_1u1bd_221`,g={backdrop:e,"backdrop-in":`_backdrop-in_1u1bd_1`,dialog:t,"dialog-in":`_dialog-in_1u1bd_1`,dialogMulti:n,header:r,closeBtn:i,title:a,searchWrap:o,searchInput:s,body:c,sidebar:l,navList:u,navItem:d,navItemActive:f,navIcon:p,navLabel:m,pageWrap:h};exports.default=g;
1
+ var e={backdrop:`_backdrop_1k5wp_3`,"backdrop-in":`_backdrop-in_1k5wp_1`,dialog:`_dialog_1k5wp_30`,"dialog-in":`_dialog-in_1k5wp_1`,dialogMulti:`_dialogMulti_1k5wp_50`,header:`_header_1k5wp_67`,closeBtn:`_closeBtn_1k5wp_78`,title:`_title_1k5wp_108`,searchWrap:`_searchWrap_1k5wp_118`,searchInput:`_searchInput_1k5wp_122`,body:`_body_1k5wp_151`,sidebar:`_sidebar_1k5wp_160`,navList:`_navList_1k5wp_168`,navItem:`_navItem_1k5wp_177`,navItemActive:`_navItemActive_1k5wp_198`,navIcon:`_navIcon_1k5wp_213`,navLabel:`_navLabel_1k5wp_219`,pageWrap:`_pageWrap_1k5wp_229`};exports.default=e;
2
2
  //# sourceMappingURL=PreferencesDialog.module.css.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"PreferencesDialog.module.css.cjs","names":[],"sources":["../../../src/components/PreferencesDialog/PreferencesDialog.module.css"],"sourcesContent":["/* ─── Backdrop ──────────────────────────────────────────────────────────────── */\n\n.backdrop {\n position: fixed;\n inset: 0;\n z-index: 10000;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n background-color: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n\n animation: backdrop-in var(--gnome-duration-normal, 200ms) var(--gnome-easing-default, ease) both;\n}\n\n@keyframes backdrop-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* ─── Dialog card ───────────────────────────────────────────────────────────── */\n\n.dialog {\n display: flex;\n flex-direction: column;\n width: min(540px, calc(100vw - 48px));\n max-height: min(640px, 90dvh);\n\n background-color: var(--gnome-dialog-bg-color, var(--gnome-window-bg-color, #fafafa));\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n\n border-radius: var(--gnome-radius-xl, 16px);\n box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.25),\n 0 0 0 1px rgba(0, 0, 0, 0.08);\n\n overflow: hidden;\n\n animation: dialog-in var(--gnome-duration-normal, 200ms) var(--gnome-easing-default, ease) both;\n}\n\n/* Wider layout when sidebar is present */\n.dialogMulti {\n width: min(720px, calc(100vw - 48px));\n}\n\n@keyframes dialog-in {\n from {\n opacity: 0;\n transform: scale(0.94) translateY(-8px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n/* ─── Header ────────────────────────────────────────────────────────────────── */\n\n.header {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: var(--gnome-space-2, 12px);\n padding: var(--gnome-space-2, 12px) var(--gnome-space-2, 12px) var(--gnome-space-2, 12px) var(--gnome-space-3, 16px);\n border-bottom: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n flex-shrink: 0;\n}\n\n.closeBtn {\n appearance: none;\n border: none;\n background: transparent;\n cursor: pointer;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.875rem;\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n opacity: 0.6;\n transition: background-color var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease),\n opacity var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n order: -1;\n}\n\n.closeBtn:hover {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n opacity: 1;\n}\n\n.closeBtn:focus-visible {\n outline: var(--gnome-focus-ring-width, 3px) solid var(--gnome-focus-ring-color, #3584e4);\n outline-offset: 2px;\n}\n\n.title {\n font-family: var(--gnome-font-family);\n font-size: var(--gnome-font-size-body, 1rem);\n font-weight: var(--gnome-font-weight-semibold, 600);\n line-height: 1;\n text-align: center;\n}\n\n/* ─── Search ────────────────────────────────────────────────────────────────── */\n\n.searchWrap {\n grid-column: 3;\n}\n\n.searchInput {\n appearance: none;\n border: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.15));\n border-radius: var(--gnome-radius-md, 8px);\n background-color: var(--gnome-card-bg-color, rgba(0, 0, 0, 0.04));\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n padding: 5px var(--gnome-space-2, 12px);\n font-family: var(--gnome-font-family);\n font-size: var(--gnome-font-size-body, 1rem);\n line-height: 1.5;\n width: 180px;\n transition: border-color var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease),\n box-shadow var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n}\n\n.searchInput::placeholder {\n opacity: 0.5;\n}\n\n.searchInput:focus {\n outline: none;\n border-color: var(--gnome-accent-color, #3584e4);\n box-shadow: 0 0 0 var(--gnome-focus-ring-width, 3px) color-mix(in srgb, var(--gnome-accent-color, #3584e4) 30%, transparent);\n}\n\n/* ─── Body ──────────────────────────────────────────────────────────────────── */\n\n.body {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* ─── Sidebar ───────────────────────────────────────────────────────────────── */\n\n.sidebar {\n width: 200px;\n flex-shrink: 0;\n border-right: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n overflow-y: auto;\n padding: var(--gnome-space-2, 12px) var(--gnome-space-2, 12px);\n}\n\n.navList {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.navItem {\n appearance: none;\n border: none;\n background: transparent;\n cursor: pointer;\n width: 100%;\n padding: 8px var(--gnome-space-2, 12px);\n border-radius: var(--gnome-radius-md, 8px);\n display: flex;\n align-items: center;\n gap: var(--gnome-space-2, 12px);\n text-align: left;\n\n font-family: var(--gnome-font-family);\n font-size: var(--gnome-font-size-body, 1rem);\n font-weight: var(--gnome-font-weight-normal, 400);\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n\n transition: background-color var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n}\n\n.navItem:hover:not(.navItemActive) {\n background-color: color-mix(in srgb, currentColor 6%, transparent);\n}\n\n.navItemActive {\n background-color: color-mix(in srgb, var(--gnome-accent-color, #3584e4) 12%, transparent);\n color: var(--gnome-accent-color, #3584e4);\n font-weight: var(--gnome-font-weight-semibold, 600);\n}\n\n.navItem:focus-visible {\n outline: var(--gnome-focus-ring-width, 3px) solid var(--gnome-focus-ring-color, #3584e4);\n outline-offset: 2px;\n}\n\n.navIcon {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n\n.navLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* ─── Page area ─────────────────────────────────────────────────────────────── */\n\n.pageWrap {\n flex: 1;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n/* ─── Dark mode ─────────────────────────────────────────────────────────────── */\n\n@media (prefers-color-scheme: dark) {\n .backdrop {\n background-color: rgba(0, 0, 0, 0.65);\n }\n\n .dialog {\n background-color: var(--gnome-dialog-bg-color, var(--gnome-window-bg-color, #242424));\n box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.5),\n 0 0 0 1px rgba(255, 255, 255, 0.08);\n }\n\n .header {\n border-bottom-color: rgba(255, 255, 255, 0.08);\n }\n\n .sidebar {\n border-right-color: rgba(255, 255, 255, 0.08);\n }\n\n .searchInput {\n background-color: rgba(255, 255, 255, 0.06);\n border-color: rgba(255, 255, 255, 0.15);\n }\n}\n\n/* ─── Reduced motion ────────────────────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n .backdrop,\n .dialog {\n animation: none;\n }\n\n .closeBtn,\n .navItem,\n .searchInput {\n transition: none;\n }\n}\n\n/* ─── High contrast ─────────────────────────────────────────────────────────── */\n\n@media (prefers-contrast: more) {\n .dialog {\n box-shadow: none;\n border: 2px solid var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n }\n\n .header {\n border-bottom-width: 2px;\n }\n\n .sidebar {\n border-right-width: 2px;\n }\n\n .navItemActive {\n outline: 2px solid var(--gnome-accent-color, #3584e4);\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"PreferencesDialog.module.css.cjs","names":[],"sources":["../../../src/components/PreferencesDialog/PreferencesDialog.module.css"],"sourcesContent":["/* ─── Backdrop ──────────────────────────────────────────────────────────────── */\n\n.backdrop {\n position: fixed;\n inset: 0;\n z-index: 10000;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n background-color: rgba(0, 0, 0, 0.5);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n\n animation: backdrop-in var(--gnome-duration-normal, 200ms) var(--gnome-easing-default, ease) both;\n}\n\n@keyframes backdrop-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* ─── Dialog card ───────────────────────────────────────────────────────────── */\n\n.dialog {\n display: flex;\n flex-direction: column;\n width: min(540px, calc(100vw - 48px));\n max-height: min(640px, 90dvh);\n\n background-color: var(--gnome-dialog-bg-color, var(--gnome-window-bg-color, #fafafa));\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n\n border-radius: var(--gnome-radius-xl, 16px);\n box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.25),\n 0 0 0 1px rgba(0, 0, 0, 0.08);\n\n overflow: hidden;\n\n animation: dialog-in var(--gnome-duration-normal, 200ms) var(--gnome-easing-default, ease) both;\n}\n\n/* Wider layout when sidebar is present */\n.dialogMulti {\n width: min(720px, calc(100vw - 48px));\n}\n\n@keyframes dialog-in {\n from {\n opacity: 0;\n transform: scale(0.94) translateY(-8px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n/* ─── Header ────────────────────────────────────────────────────────────────── */\n\n.header {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n gap: var(--gnome-space-2, 12px);\n padding: var(--gnome-space-2, 12px) var(--gnome-space-2, 12px) var(--gnome-space-2, 12px)\n var(--gnome-space-3, 16px);\n border-bottom: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n flex-shrink: 0;\n}\n\n.closeBtn {\n appearance: none;\n border: none;\n background: transparent;\n cursor: pointer;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.875rem;\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n opacity: 0.6;\n transition:\n background-color var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease),\n opacity var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n order: -1;\n}\n\n.closeBtn:hover {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n opacity: 1;\n}\n\n.closeBtn:focus-visible {\n outline: var(--gnome-focus-ring-width, 3px) solid var(--gnome-focus-ring-color, #3584e4);\n outline-offset: 2px;\n}\n\n.title {\n font-family: var(--gnome-font-family);\n font-size: var(--gnome-font-size-body, 1rem);\n font-weight: var(--gnome-font-weight-semibold, 600);\n line-height: 1;\n text-align: center;\n}\n\n/* ─── Search ────────────────────────────────────────────────────────────────── */\n\n.searchWrap {\n grid-column: 3;\n}\n\n.searchInput {\n appearance: none;\n border: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.15));\n border-radius: var(--gnome-radius-md, 8px);\n background-color: var(--gnome-card-bg-color, rgba(0, 0, 0, 0.04));\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n padding: 5px var(--gnome-space-2, 12px);\n font-family: var(--gnome-font-family);\n font-size: var(--gnome-font-size-body, 1rem);\n line-height: 1.5;\n width: 180px;\n transition:\n border-color var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease),\n box-shadow var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n}\n\n.searchInput::placeholder {\n opacity: 0.5;\n}\n\n.searchInput:focus {\n outline: none;\n border-color: var(--gnome-accent-color, #3584e4);\n box-shadow: 0 0 0 var(--gnome-focus-ring-width, 3px)\n color-mix(in srgb, var(--gnome-accent-color, #3584e4) 30%, transparent);\n}\n\n/* ─── Body ──────────────────────────────────────────────────────────────────── */\n\n.body {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* ─── Sidebar ───────────────────────────────────────────────────────────────── */\n\n.sidebar {\n width: 200px;\n flex-shrink: 0;\n border-right: 1px solid var(--gnome-card-shade-color, rgba(0, 0, 0, 0.1));\n overflow-y: auto;\n padding: var(--gnome-space-2, 12px) var(--gnome-space-2, 12px);\n}\n\n.navList {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.navItem {\n appearance: none;\n border: none;\n background: transparent;\n cursor: pointer;\n width: 100%;\n padding: 8px var(--gnome-space-2, 12px);\n border-radius: var(--gnome-radius-md, 8px);\n display: flex;\n align-items: center;\n gap: var(--gnome-space-2, 12px);\n text-align: left;\n\n font-family: var(--gnome-font-family);\n font-size: var(--gnome-font-size-body, 1rem);\n font-weight: var(--gnome-font-weight-normal, 400);\n color: var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n\n transition: background-color var(--gnome-duration-fast, 100ms) var(--gnome-easing-default, ease);\n}\n\n.navItem:hover:not(.navItemActive) {\n background-color: color-mix(in srgb, currentColor 6%, transparent);\n}\n\n.navItemActive {\n background-color: color-mix(in srgb, var(--gnome-accent-color, #3584e4) 12%, transparent);\n color: var(--gnome-accent-color, #3584e4);\n font-weight: var(--gnome-font-weight-semibold, 600);\n}\n\n.navItem:focus-visible {\n outline: var(--gnome-focus-ring-width, 3px) solid var(--gnome-focus-ring-color, #3584e4);\n outline-offset: 2px;\n}\n\n.navIcon {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n\n.navLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* ─── Page area ─────────────────────────────────────────────────────────────── */\n\n.pageWrap {\n flex: 1;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n/* ─── Dark mode ─────────────────────────────────────────────────────────────── */\n\n@media (prefers-color-scheme: dark) {\n .backdrop {\n background-color: rgba(0, 0, 0, 0.65);\n }\n\n .dialog {\n background-color: var(--gnome-dialog-bg-color, var(--gnome-window-bg-color, #242424));\n box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.5),\n 0 0 0 1px rgba(255, 255, 255, 0.08);\n }\n\n .header {\n border-bottom-color: rgba(255, 255, 255, 0.08);\n }\n\n .sidebar {\n border-right-color: rgba(255, 255, 255, 0.08);\n }\n\n .searchInput {\n background-color: rgba(255, 255, 255, 0.06);\n border-color: rgba(255, 255, 255, 0.15);\n }\n}\n\n/* ─── Reduced motion ────────────────────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n .backdrop,\n .dialog {\n animation: none;\n }\n\n .closeBtn,\n .navItem,\n .searchInput {\n transition: none;\n }\n}\n\n/* ─── High contrast ─────────────────────────────────────────────────────────── */\n\n@media (prefers-contrast: more) {\n .dialog {\n box-shadow: none;\n border: 2px solid var(--gnome-window-fg-color, rgba(0, 0, 0, 0.8));\n }\n\n .header {\n border-bottom-width: 2px;\n }\n\n .sidebar {\n border-right-width: 2px;\n }\n\n .navItemActive {\n outline: 2px solid var(--gnome-accent-color, #3584e4);\n }\n}\n"],"mappings":""}