@tumaet/prompt-ui-components 0.0.3 → 0.0.5

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 (232) hide show
  1. package/dist/components/DatePicker.js +18 -0
  2. package/dist/components/DatePicker.js.map +1 -0
  3. package/dist/components/DateRangePicker.js +12 -0
  4. package/dist/components/DateRangePicker.js.map +1 -0
  5. package/dist/components/DeleteConfirmationDialog.js +13 -0
  6. package/dist/components/DeleteConfirmationDialog.js.map +1 -0
  7. package/dist/components/ErrorPage.js +9 -0
  8. package/dist/components/ErrorPage.js.map +1 -0
  9. package/dist/components/LoadingPage.js +6 -0
  10. package/dist/components/LoadingPage.js.map +1 -0
  11. package/dist/components/ManagementPageHeader.js +5 -0
  12. package/dist/components/ManagementPageHeader.js.map +1 -0
  13. package/dist/components/MultiSelect.js +96 -0
  14. package/dist/components/MultiSelect.js.map +1 -0
  15. package/dist/components/SaveChangesAlert.js +31 -0
  16. package/dist/components/SaveChangesAlert.js.map +1 -0
  17. package/dist/components/UnauthorizedPage.js +13 -0
  18. package/dist/components/UnauthorizedPage.js.map +1 -0
  19. package/dist/components/index.js +9 -0
  20. package/dist/components/index.js.map +1 -1
  21. package/dist/components/minimal-tiptap/components/bubble-menu/link-bubble-menu.js +65 -0
  22. package/dist/components/minimal-tiptap/components/bubble-menu/link-bubble-menu.js.map +1 -0
  23. package/dist/components/minimal-tiptap/components/image/image-edit-block.js +38 -0
  24. package/dist/components/minimal-tiptap/components/image/image-edit-block.js.map +1 -0
  25. package/dist/components/minimal-tiptap/components/image/image-edit-dialog.js +12 -0
  26. package/dist/components/minimal-tiptap/components/image/image-edit-dialog.js.map +1 -0
  27. package/dist/components/minimal-tiptap/components/link/link-edit-block.js +34 -0
  28. package/dist/components/minimal-tiptap/components/link/link-edit-block.js.map +1 -0
  29. package/dist/components/minimal-tiptap/components/link/link-edit-popover.js +38 -0
  30. package/dist/components/minimal-tiptap/components/link/link-edit-popover.js.map +1 -0
  31. package/dist/components/minimal-tiptap/components/link/link-popover-block.js +28 -0
  32. package/dist/components/minimal-tiptap/components/link/link-popover-block.js.map +1 -0
  33. package/dist/components/minimal-tiptap/components/measured-container.js +16 -0
  34. package/dist/components/minimal-tiptap/components/measured-container.js.map +1 -0
  35. package/dist/components/minimal-tiptap/components/section/five.js +39 -0
  36. package/dist/components/minimal-tiptap/components/section/five.js.map +1 -0
  37. package/dist/components/minimal-tiptap/components/section/four.js +29 -0
  38. package/dist/components/minimal-tiptap/components/section/four.js.map +1 -0
  39. package/dist/components/minimal-tiptap/components/section/mailingPlaceholders.js +23 -0
  40. package/dist/components/minimal-tiptap/components/section/mailingPlaceholders.js.map +1 -0
  41. package/dist/components/minimal-tiptap/components/section/one.js +77 -0
  42. package/dist/components/minimal-tiptap/components/section/one.js.map +1 -0
  43. package/dist/components/minimal-tiptap/components/section/three.js +79 -0
  44. package/dist/components/minimal-tiptap/components/section/three.js.map +1 -0
  45. package/dist/components/minimal-tiptap/components/section/two.js +65 -0
  46. package/dist/components/minimal-tiptap/components/section/two.js.map +1 -0
  47. package/dist/components/minimal-tiptap/components/shortcut-key.js +11 -0
  48. package/dist/components/minimal-tiptap/components/shortcut-key.js.map +1 -0
  49. package/dist/components/minimal-tiptap/components/spinner.js +9 -0
  50. package/dist/components/minimal-tiptap/components/spinner.js.map +1 -0
  51. package/dist/components/minimal-tiptap/components/toolbar-button.js +15 -0
  52. package/dist/components/minimal-tiptap/components/toolbar-button.js.map +1 -0
  53. package/dist/components/minimal-tiptap/components/toolbar-section.js +27 -0
  54. package/dist/components/minimal-tiptap/components/toolbar-section.js.map +1 -0
  55. package/dist/components/minimal-tiptap/extensions/code-block-lowlight/code-block-lowlight.js +16 -0
  56. package/dist/components/minimal-tiptap/extensions/code-block-lowlight/code-block-lowlight.js.map +1 -0
  57. package/dist/components/minimal-tiptap/extensions/code-block-lowlight/index.js +2 -0
  58. package/dist/components/minimal-tiptap/extensions/code-block-lowlight/index.js.map +1 -0
  59. package/dist/components/minimal-tiptap/extensions/color/color.js +20 -0
  60. package/dist/components/minimal-tiptap/extensions/color/color.js.map +1 -0
  61. package/dist/components/minimal-tiptap/extensions/color/index.js +2 -0
  62. package/dist/components/minimal-tiptap/extensions/color/index.js.map +1 -0
  63. package/dist/components/minimal-tiptap/extensions/file-handler/index.js +74 -0
  64. package/dist/components/minimal-tiptap/extensions/file-handler/index.js.map +1 -0
  65. package/dist/components/minimal-tiptap/extensions/horizontal-rule/horizontal-rule.js +16 -0
  66. package/dist/components/minimal-tiptap/extensions/horizontal-rule/horizontal-rule.js.map +1 -0
  67. package/dist/components/minimal-tiptap/extensions/horizontal-rule/index.js +2 -0
  68. package/dist/components/minimal-tiptap/extensions/horizontal-rule/index.js.map +1 -0
  69. package/dist/components/minimal-tiptap/extensions/image/components/image-actions.js +39 -0
  70. package/dist/components/minimal-tiptap/extensions/image/components/image-actions.js.map +1 -0
  71. package/dist/components/minimal-tiptap/extensions/image/components/image-overlay.js +9 -0
  72. package/dist/components/minimal-tiptap/extensions/image/components/image-overlay.js.map +1 -0
  73. package/dist/components/minimal-tiptap/extensions/image/components/image-view-block.js +167 -0
  74. package/dist/components/minimal-tiptap/extensions/image/components/image-view-block.js.map +1 -0
  75. package/dist/components/minimal-tiptap/extensions/image/components/resize-handle.js +11 -0
  76. package/dist/components/minimal-tiptap/extensions/image/components/resize-handle.js.map +1 -0
  77. package/dist/components/minimal-tiptap/extensions/image/hooks/use-drag-resize.js +88 -0
  78. package/dist/components/minimal-tiptap/extensions/image/hooks/use-drag-resize.js.map +1 -0
  79. package/dist/components/minimal-tiptap/extensions/image/hooks/use-image-actions.js +32 -0
  80. package/dist/components/minimal-tiptap/extensions/image/hooks/use-image-actions.js.map +1 -0
  81. package/dist/components/minimal-tiptap/extensions/image/image.js +225 -0
  82. package/dist/components/minimal-tiptap/extensions/image/image.js.map +1 -0
  83. package/dist/components/minimal-tiptap/extensions/image/index.js +2 -0
  84. package/dist/components/minimal-tiptap/extensions/image/index.js.map +1 -0
  85. package/dist/components/minimal-tiptap/extensions/index.js +10 -0
  86. package/dist/components/minimal-tiptap/extensions/index.js.map +1 -0
  87. package/dist/components/minimal-tiptap/extensions/link/index.js +2 -0
  88. package/dist/components/minimal-tiptap/extensions/link/index.js.map +1 -0
  89. package/dist/components/minimal-tiptap/extensions/link/link.js +74 -0
  90. package/dist/components/minimal-tiptap/extensions/link/link.js.map +1 -0
  91. package/dist/components/minimal-tiptap/extensions/reset-marks-on-enter/index.js +2 -0
  92. package/dist/components/minimal-tiptap/extensions/reset-marks-on-enter/index.js.map +1 -0
  93. package/dist/components/minimal-tiptap/extensions/reset-marks-on-enter/reset-marks-on-enter.js +20 -0
  94. package/dist/components/minimal-tiptap/extensions/reset-marks-on-enter/reset-marks-on-enter.js.map +1 -0
  95. package/dist/components/minimal-tiptap/extensions/selection/index.js +2 -0
  96. package/dist/components/minimal-tiptap/extensions/selection/index.js.map +1 -0
  97. package/dist/components/minimal-tiptap/extensions/selection/selection.js +31 -0
  98. package/dist/components/minimal-tiptap/extensions/selection/selection.js.map +1 -0
  99. package/dist/components/minimal-tiptap/extensions/unset-all-marks/index.js +2 -0
  100. package/dist/components/minimal-tiptap/extensions/unset-all-marks/index.js.map +1 -0
  101. package/dist/components/minimal-tiptap/extensions/unset-all-marks/unset-all-marks.js +9 -0
  102. package/dist/components/minimal-tiptap/extensions/unset-all-marks/unset-all-marks.js.map +1 -0
  103. package/dist/components/minimal-tiptap/form-description-tiptap.js +26 -0
  104. package/dist/components/minimal-tiptap/form-description-tiptap.js.map +1 -0
  105. package/dist/components/minimal-tiptap/hooks/use-container-size.js +44 -0
  106. package/dist/components/minimal-tiptap/hooks/use-container-size.js.map +1 -0
  107. package/dist/components/minimal-tiptap/hooks/use-minimal-tiptap.js +160 -0
  108. package/dist/components/minimal-tiptap/hooks/use-minimal-tiptap.js.map +1 -0
  109. package/dist/components/minimal-tiptap/hooks/use-theme.js +19 -0
  110. package/dist/components/minimal-tiptap/hooks/use-theme.js.map +1 -0
  111. package/dist/components/minimal-tiptap/hooks/use-throttle.js +24 -0
  112. package/dist/components/minimal-tiptap/hooks/use-throttle.js.map +1 -0
  113. package/dist/components/minimal-tiptap/index.js +2 -0
  114. package/dist/components/minimal-tiptap/index.js.map +1 -0
  115. package/dist/components/minimal-tiptap/mailing-tiptap.js +30 -0
  116. package/dist/components/minimal-tiptap/mailing-tiptap.js.map +1 -0
  117. package/dist/components/minimal-tiptap/minimal-tiptap.js +29 -0
  118. package/dist/components/minimal-tiptap/minimal-tiptap.js.map +1 -0
  119. package/dist/components/minimal-tiptap/types.js +2 -0
  120. package/dist/components/minimal-tiptap/types.js.map +1 -0
  121. package/dist/components/minimal-tiptap/utils.js +156 -0
  122. package/dist/components/minimal-tiptap/utils.js.map +1 -0
  123. package/dist/components/table/GroupActionDialog.js +8 -0
  124. package/dist/components/table/GroupActionDialog.js.map +1 -0
  125. package/dist/components/table/SortableHeader.js +7 -0
  126. package/dist/components/table/SortableHeader.js.map +1 -0
  127. package/dist/components/ui/accordion.js +1 -1
  128. package/dist/components/ui/alert-dialog.js +2 -2
  129. package/dist/components/ui/alert.js +1 -1
  130. package/dist/components/ui/avatar.js +1 -1
  131. package/dist/components/ui/badge.js +1 -1
  132. package/dist/components/ui/breadcrumb.js +1 -1
  133. package/dist/components/ui/button.js +1 -1
  134. package/dist/components/ui/calendar.js +2 -2
  135. package/dist/components/ui/card.js +1 -1
  136. package/dist/components/ui/chart.js +1 -1
  137. package/dist/components/ui/checkbox.js +1 -1
  138. package/dist/components/ui/command.js +2 -2
  139. package/dist/components/ui/dialog.js +1 -1
  140. package/dist/components/ui/dropdown-menu.js +1 -1
  141. package/dist/components/ui/form.js +2 -2
  142. package/dist/components/ui/input.js +1 -1
  143. package/dist/components/ui/label.js +1 -1
  144. package/dist/components/ui/popover.js +1 -1
  145. package/dist/components/ui/progress.js +1 -1
  146. package/dist/components/ui/radio-group.js +1 -1
  147. package/dist/components/ui/scroll-area.js +1 -1
  148. package/dist/components/ui/select.js +1 -1
  149. package/dist/components/ui/separator.js +1 -1
  150. package/dist/components/ui/sheet.js +1 -1
  151. package/dist/components/ui/sidebar.js +8 -8
  152. package/dist/components/ui/skeleton.js +1 -1
  153. package/dist/components/ui/switch.js +1 -1
  154. package/dist/components/ui/table.js +1 -1
  155. package/dist/components/ui/tabs.js +1 -1
  156. package/dist/components/ui/textarea.js +1 -1
  157. package/dist/components/ui/toast.js +1 -1
  158. package/dist/components/ui/toaster.js +2 -2
  159. package/dist/components/ui/toggle-group.js +2 -2
  160. package/dist/components/ui/toggle.js +1 -1
  161. package/dist/components/ui/tooltip.js +1 -1
  162. package/dist/index.css +2 -3
  163. package/dist/index.js +1 -0
  164. package/dist/index.js.map +1 -1
  165. package/dist/types/components/DatePicker.d.ts +6 -0
  166. package/dist/types/components/DateRangePicker.d.ts +8 -0
  167. package/dist/types/components/DeleteConfirmationDialog.d.ts +9 -0
  168. package/dist/types/components/ErrorPage.d.ts +9 -0
  169. package/dist/types/components/LoadingPage.d.ts +1 -0
  170. package/dist/types/components/ManagementPageHeader.d.ts +5 -0
  171. package/dist/types/components/MultiSelect.d.ts +68 -0
  172. package/dist/types/components/SaveChangesAlert.d.ts +8 -0
  173. package/dist/types/components/UnauthorizedPage.d.ts +7 -0
  174. package/dist/types/components/index.d.ts +9 -0
  175. package/dist/types/components/minimal-tiptap/components/bubble-menu/link-bubble-menu.d.ts +7 -0
  176. package/dist/types/components/minimal-tiptap/components/image/image-edit-block.d.ts +8 -0
  177. package/dist/types/components/minimal-tiptap/components/image/image-edit-dialog.d.ts +8 -0
  178. package/dist/types/components/minimal-tiptap/components/link/link-edit-block.d.ts +9 -0
  179. package/dist/types/components/minimal-tiptap/components/link/link-edit-popover.d.ts +8 -0
  180. package/dist/types/components/minimal-tiptap/components/link/link-popover-block.d.ts +8 -0
  181. package/dist/types/components/minimal-tiptap/components/measured-container.d.ts +2 -0
  182. package/dist/types/components/minimal-tiptap/components/section/five.d.ts +12 -0
  183. package/dist/types/components/minimal-tiptap/components/section/four.d.ts +12 -0
  184. package/dist/types/components/minimal-tiptap/components/section/mailingPlaceholders.d.ts +10 -0
  185. package/dist/types/components/minimal-tiptap/components/section/one.d.ts +11 -0
  186. package/dist/types/components/minimal-tiptap/components/section/three.d.ts +9 -0
  187. package/dist/types/components/minimal-tiptap/components/section/two.d.ts +12 -0
  188. package/dist/types/components/minimal-tiptap/components/shortcut-key.d.ts +5 -0
  189. package/dist/types/components/minimal-tiptap/components/spinner.d.ts +5 -0
  190. package/dist/types/components/minimal-tiptap/components/toolbar-button.d.ts +10 -0
  191. package/dist/types/components/minimal-tiptap/components/toolbar-section.d.ts +16 -0
  192. package/dist/types/components/minimal-tiptap/extensions/code-block-lowlight/code-block-lowlight.d.ts +2 -0
  193. package/dist/types/components/minimal-tiptap/extensions/code-block-lowlight/index.d.ts +1 -0
  194. package/dist/types/components/minimal-tiptap/extensions/color/color.d.ts +1 -0
  195. package/dist/types/components/minimal-tiptap/extensions/color/index.d.ts +1 -0
  196. package/dist/types/components/minimal-tiptap/extensions/file-handler/index.d.ts +12 -0
  197. package/dist/types/components/minimal-tiptap/extensions/horizontal-rule/horizontal-rule.d.ts +2 -0
  198. package/dist/types/components/minimal-tiptap/extensions/horizontal-rule/index.d.ts +1 -0
  199. package/dist/types/components/minimal-tiptap/extensions/image/components/image-actions.d.ts +17 -0
  200. package/dist/types/components/minimal-tiptap/extensions/image/components/image-overlay.d.ts +2 -0
  201. package/dist/types/components/minimal-tiptap/extensions/image/components/image-view-block.d.ts +3 -0
  202. package/dist/types/components/minimal-tiptap/extensions/image/components/resize-handle.d.ts +6 -0
  203. package/dist/types/components/minimal-tiptap/extensions/image/hooks/use-drag-resize.d.ts +24 -0
  204. package/dist/types/components/minimal-tiptap/extensions/image/hooks/use-image-actions.d.ts +24 -0
  205. package/dist/types/components/minimal-tiptap/extensions/image/image.d.ts +52 -0
  206. package/dist/types/components/minimal-tiptap/extensions/image/index.d.ts +1 -0
  207. package/dist/types/components/minimal-tiptap/extensions/index.d.ts +9 -0
  208. package/dist/types/components/minimal-tiptap/extensions/link/index.d.ts +1 -0
  209. package/dist/types/components/minimal-tiptap/extensions/link/link.d.ts +2 -0
  210. package/dist/types/components/minimal-tiptap/extensions/reset-marks-on-enter/index.d.ts +1 -0
  211. package/dist/types/components/minimal-tiptap/extensions/reset-marks-on-enter/reset-marks-on-enter.d.ts +2 -0
  212. package/dist/types/components/minimal-tiptap/extensions/selection/index.d.ts +1 -0
  213. package/dist/types/components/minimal-tiptap/extensions/selection/selection.d.ts +3 -0
  214. package/dist/types/components/minimal-tiptap/extensions/unset-all-marks/index.d.ts +1 -0
  215. package/dist/types/components/minimal-tiptap/extensions/unset-all-marks/unset-all-marks.d.ts +2 -0
  216. package/dist/types/components/minimal-tiptap/form-description-tiptap.d.ts +4 -0
  217. package/dist/types/components/minimal-tiptap/hooks/use-container-size.d.ts +1 -0
  218. package/dist/types/components/minimal-tiptap/hooks/use-minimal-tiptap.d.ts +13 -0
  219. package/dist/types/components/minimal-tiptap/hooks/use-theme.d.ts +2 -0
  220. package/dist/types/components/minimal-tiptap/hooks/use-throttle.d.ts +1 -0
  221. package/dist/types/components/minimal-tiptap/index.d.ts +1 -0
  222. package/dist/types/components/minimal-tiptap/mailing-tiptap.d.ts +13 -0
  223. package/dist/types/components/minimal-tiptap/minimal-tiptap.d.ts +12 -0
  224. package/dist/types/components/minimal-tiptap/types.d.ts +25 -0
  225. package/dist/types/components/minimal-tiptap/utils.d.ts +38 -0
  226. package/dist/types/components/table/GroupActionDialog.d.ts +11 -0
  227. package/dist/types/components/table/SortableHeader.d.ts +4 -0
  228. package/dist/types/components/ui/sidebar.d.ts +2 -2
  229. package/dist/types/hooks/use-toast.d.ts +1 -1
  230. package/dist/types/index.d.ts +1 -0
  231. package/package.json +24 -2
  232. package/src/index.css +1 -2
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { format } from 'date-fns';
4
+ import { CalendarIcon } from 'lucide-react';
5
+ import { enGB } from 'date-fns/locale';
6
+ import { cn } from '../lib/utils';
7
+ import { Button } from '../components/ui/button';
8
+ import { Calendar } from '../components/ui/calendar';
9
+ import { Popover, PopoverContent, PopoverTrigger } from '../components/ui/popover';
10
+ export const DatePicker = ({ date, onSelect }) => {
11
+ const [open, setOpen] = React.useState(false);
12
+ const handleSelect = (newDate) => {
13
+ onSelect(newDate);
14
+ setOpen(false);
15
+ };
16
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: 'outline', className: cn('w-[280px] justify-start text-left font-normal', !date && 'text-muted-foreground'), children: [_jsx(CalendarIcon, { className: 'mr-2 h-4 w-4' }), date ? format(date, 'PPP') : _jsx("span", { children: "Pick a date" })] }) }), _jsx(PopoverContent, { className: 'w-auto p-0', children: _jsx(Calendar, { mode: 'single', selected: date, onSelect: handleSelect, defaultMonth: date, initialFocus: true, locale: enGB }) })] }));
17
+ };
18
+ //# sourceMappingURL=DatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../src/components/DatePicker.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAOjF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAmB,EAAe,EAAE;IAC7E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,MAAM,YAAY,GAAG,CAAC,OAAyB,EAAE,EAAE;QACjD,QAAQ,CAAC,OAAO,CAAC,CAAA;QACjB,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC,CAAA;IAED,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACxC,KAAC,cAAc,IAAC,OAAO,kBACrB,MAAC,MAAM,IACL,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,EAAE,CACX,+CAA+C,EAC/C,CAAC,IAAI,IAAI,uBAAuB,CACjC,aAED,KAAC,YAAY,IAAC,SAAS,EAAC,cAAc,GAAG,EACxC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,yCAAwB,IAC/C,GACM,EACjB,KAAC,cAAc,IAAC,SAAS,EAAC,YAAY,YACpC,KAAC,QAAQ,IACP,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,IAAI,EACd,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,IAAI,EAClB,YAAY,QACZ,MAAM,EAAE,IAAI,GACZ,GACa,IACT,CACX,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CalendarIcon } from 'lucide-react';
3
+ import { format } from 'date-fns';
4
+ import { enGB } from 'date-fns/locale';
5
+ import { cn } from '../lib/utils';
6
+ import { Button } from '../components/ui/button';
7
+ import { Calendar } from '../components/ui/calendar';
8
+ import { Popover, PopoverContent, PopoverTrigger } from '../components/ui/popover';
9
+ export const DatePickerWithRange = ({ className, date, setDate, ...props }) => {
10
+ return (_jsx("div", { className: cn('grid gap-2', className), ...props, children: _jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { id: 'date', variant: 'outline', className: cn('w-[300px] justify-start text-left font-normal', !date && 'text-muted-foreground'), children: [_jsx(CalendarIcon, { className: 'mr-2 h-4 w-4' }), date?.from ? (date.to ? (_jsxs(_Fragment, { children: [format(date.from, 'LLL dd, y'), " - ", format(date.to, 'LLL dd, y')] })) : (format(date.from, 'LLL dd, y'))) : (_jsx("span", { children: "Pick a date" }))] }) }), _jsx(PopoverContent, { className: 'w-auto p-0', align: 'start', children: _jsx(Calendar, { initialFocus: true, mode: 'range', defaultMonth: date?.from, selected: date, onSelect: setDate, numberOfMonths: 2, locale: enGB }) })] }) }));
11
+ };
12
+ //# sourceMappingURL=DateRangePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateRangePicker.js","sourceRoot":"","sources":["../../src/components/DateRangePicker.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAOjF,MAAM,CAAC,MAAM,mBAAmB,GAAuC,CAAC,EACtE,SAAS,EACT,IAAI,EACJ,OAAO,EACP,GAAG,KAAK,EACT,EAAE,EAAE;IACH,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,KAAM,KAAK,YACpD,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,MAAC,MAAM,IACL,EAAE,EAAC,MAAM,EACT,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,EAAE,CACX,+CAA+C,EAC/C,CAAC,IAAI,IAAI,uBAAuB,CACjC,aAED,KAAC,YAAY,IAAC,SAAS,EAAC,cAAc,GAAG,EACxC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CACZ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CACR,8BACG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,SAAK,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,IAC/D,CACJ,CAAC,CAAC,CAAC,CACF,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAC/B,CACF,CAAC,CAAC,CAAC,CACF,yCAAwB,CACzB,IACM,GACM,EACjB,KAAC,cAAc,IAAC,SAAS,EAAC,YAAY,EAAC,KAAK,EAAC,OAAO,YAClD,KAAC,QAAQ,IACP,YAAY,QACZ,IAAI,EAAC,OAAO,EACZ,YAAY,EAAE,IAAI,EAAE,IAAI,EACxB,QAAQ,EAAE,IAAI,EACd,QAAQ,EAAE,OAAO,EACjB,cAAc,EAAE,CAAC,EACjB,MAAM,EAAE,IAAI,GACZ,GACa,IACT,GACN,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '../components/ui/alert-dialog';
3
+ import { AlertTriangle } from 'lucide-react';
4
+ export const DeleteConfirmation = ({ isOpen, setOpen, deleteMessage, customWarning, onClick, }) => {
5
+ const handleClick = (value) => {
6
+ setOpen(false);
7
+ onClick(value);
8
+ };
9
+ return (_jsx(AlertDialog, { open: isOpen, onOpenChange: setOpen, children: _jsxs(AlertDialogContent, { className: 'sm:max-w-[425px]', children: [_jsxs(AlertDialogHeader, { children: [_jsxs(AlertDialogTitle, { className: 'flex items-center gap-2 text-red-600', children: [_jsx(AlertTriangle, { className: 'h-5 w-5' }), "Confirm Deletion"] }), _jsx(AlertDialogDescription, { className: 'text-base', children: deleteMessage })] }), _jsx("div", { className: 'mt-4 rounded-md bg-muted p-4 text-sm text-muted-foreground', children: customWarning
10
+ ? customWarning
11
+ : 'This action cannot be undone and may result in data deletion.' }), _jsxs(AlertDialogFooter, { className: 'mt-6 flex-col-reverse sm:flex-row', children: [_jsx(AlertDialogCancel, { onClick: () => handleClick(false), className: 'mt-3 sm:mt-0', children: "Cancel" }), _jsx(AlertDialogAction, { onClick: () => handleClick(true), className: 'bg-red-600 hover:bg-red-700 text-white', children: "Delete" })] })] }) }));
12
+ };
13
+ //# sourceMappingURL=DeleteConfirmationDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeleteConfirmationDialog.js","sourceRoot":"","sources":["../../src/components/DeleteConfirmationDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAU5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,EACb,OAAO,GACiB,EAAE,EAAE;IAC5B,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,EAAE;QACrC,OAAO,CAAC,KAAK,CAAC,CAAA;QACd,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC,CAAA;IAED,OAAO,CACL,KAAC,WAAW,IAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,YAC9C,MAAC,kBAAkB,IAAC,SAAS,EAAC,kBAAkB,aAC9C,MAAC,iBAAiB,eAChB,MAAC,gBAAgB,IAAC,SAAS,EAAC,sCAAsC,aAChE,KAAC,aAAa,IAAC,SAAS,EAAC,SAAS,GAAG,wBAEpB,EACnB,KAAC,sBAAsB,IAAC,SAAS,EAAC,WAAW,YAAE,aAAa,GAA0B,IACpE,EACpB,cAAK,SAAS,EAAC,4DAA4D,YACxE,aAAa;wBACZ,CAAC,CAAC,aAAa;wBACf,CAAC,CAAC,+DAA+D,GAC/D,EACN,MAAC,iBAAiB,IAAC,SAAS,EAAC,mCAAmC,aAC9D,KAAC,iBAAiB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAC,cAAc,uBAE1D,EACpB,KAAC,iBAAiB,IAChB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAChC,SAAS,EAAC,wCAAwC,uBAGhC,IACF,IACD,GACT,CACf,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Button } from '../components/ui/button';
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../components/ui/card';
4
+ import { AlertCircle, LogOut, RefreshCw } from 'lucide-react';
5
+ export const ErrorPage = ({ title = 'Error', description = 'An error occurred', message = `We apologize for the inconvenience. This could be due to a network issue or a problem with our servers.
6
+ You can try to refresh or try again later.`, onRetry, onLogout, }) => {
7
+ return (_jsx("div", { className: 'flex items-center justify-center min-h-screen', children: _jsx("div", { className: 'container max-w-sm mx-auto p-4', children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: 'flex items-center text-destructive', children: [_jsx(AlertCircle, { className: 'mr-2 h-5 w-5' }), title] }), _jsx(CardDescription, { children: description })] }), _jsxs(CardContent, { children: [_jsx("p", { className: 'text-sm text-muted-foreground mb-4', children: message }), onRetry && (_jsx(_Fragment, { children: _jsxs(Button, { onClick: onRetry, className: 'w-full mb-2', children: [_jsx(RefreshCw, { className: 'mr-2 h-4 w-4' }), " Retry"] }) })), onLogout && (_jsxs(Button, { onClick: onLogout, variant: 'outline', className: 'w-full', children: [_jsx(LogOut, { className: 'mr-2 h-4 w-4' }), " Logout"] }))] })] }) }) }));
8
+ };
9
+ //# sourceMappingURL=ErrorPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorPage.js","sourceRoot":"","sources":["../../src/components/ErrorPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAU7D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EACxB,KAAK,GAAG,OAAO,EACf,WAAW,GAAG,mBAAmB,EACjC,OAAO,GAAG;6CACiC,EAC3C,OAAO,EACP,QAAQ,GACO,EAAE,EAAE;IACnB,OAAO,CACL,cAAK,SAAS,EAAC,+CAA+C,YAC5D,cAAK,SAAS,EAAC,gCAAgC,YAC7C,MAAC,IAAI,eACH,MAAC,UAAU,eACT,MAAC,SAAS,IAAC,SAAS,EAAC,oCAAoC,aACvD,KAAC,WAAW,IAAC,SAAS,EAAC,cAAc,GAAG,EACvC,KAAK,IACI,EACZ,KAAC,eAAe,cAAE,WAAW,GAAmB,IACrC,EACb,MAAC,WAAW,eACV,YAAG,SAAS,EAAC,oCAAoC,YAAE,OAAO,GAAK,EAC9D,OAAO,IAAI,CACV,4BACE,MAAC,MAAM,IAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,aAAa,aAC/C,KAAC,SAAS,IAAC,SAAS,EAAC,cAAc,GAAG,cAC/B,GACR,CACJ,EACA,QAAQ,IAAI,CACX,MAAC,MAAM,IAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,QAAQ,aAC7D,KAAC,MAAM,IAAC,SAAS,EAAC,cAAc,GAAG,eAC5B,CACV,IACW,IACT,GACH,GACF,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Loader2 } from 'lucide-react';
3
+ export const LoadingPage = () => {
4
+ return (_jsx("div", { className: 'flex h-screen w-screen items-center justify-center', children: _jsx(Loader2, { className: 'h-12 w-12 animate-spin text-primary' }) }));
5
+ };
6
+ //# sourceMappingURL=LoadingPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingPage.js","sourceRoot":"","sources":["../../src/components/LoadingPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,GAAgB,EAAE;IAC3C,OAAO,CACL,cAAK,SAAS,EAAC,oDAAoD,YACjE,KAAC,OAAO,IAAC,SAAS,EAAC,qCAAqC,GAAG,GACvD,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const ManagementPageHeader = ({ children }) => {
3
+ return _jsx("h1", { className: 'text-4xl font-bold mb-6', children: children });
4
+ };
5
+ //# sourceMappingURL=ManagementPageHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManagementPageHeader.js","sourceRoot":"","sources":["../../src/components/ManagementPageHeader.tsx"],"names":[],"mappings":";AAIA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EAAE,QAAQ,EAA6B,EAAe,EAAE;IAC3F,OAAO,aAAI,SAAS,EAAC,yBAAyB,YAAE,QAAQ,GAAM,CAAA;AAChE,CAAC,CAAA"}
@@ -0,0 +1,96 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ // src/components/multi-select.tsx
3
+ import * as React from 'react';
4
+ import { cva } from 'class-variance-authority';
5
+ import { CheckIcon, XCircle, ChevronDown, XIcon, WandSparkles } from 'lucide-react';
6
+ import { cn } from '../lib/utils';
7
+ import { Separator } from '../components/ui/separator';
8
+ import { Button } from '../components/ui/button';
9
+ import { Badge } from '../components/ui/badge';
10
+ import { Popover, PopoverContent, PopoverTrigger } from '../components/ui/popover';
11
+ import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, } from '../components/ui/command';
12
+ /**
13
+ * Variants for the multi-select component to handle different styles.
14
+ * Uses class-variance-authority (cva) to define different styles based on "variant" prop.
15
+ */
16
+ const multiSelectVariants = cva('m-1 transition ease-in-out delay-150 hover:-translate-y-1 hover:scale-110 duration-300', {
17
+ variants: {
18
+ variant: {
19
+ default: 'border-foreground/10 text-foreground bg-card hover:bg-card/80',
20
+ secondary: 'border-foreground/10 bg-secondary text-secondary-foreground hover:bg-secondary/80',
21
+ destructive: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',
22
+ inverted: 'inverted',
23
+ },
24
+ },
25
+ defaultVariants: {
26
+ variant: 'default',
27
+ },
28
+ });
29
+ export const MultiSelect = React.forwardRef(({ options, onValueChange, variant, defaultValue = [], placeholder = 'Select options', animation = 0, maxCount = 3, modalPopover = false, asChild = false, className, ...props }, ref) => {
30
+ const [selectedValues, setSelectedValues] = React.useState(defaultValue);
31
+ const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);
32
+ const [isAnimating, setIsAnimating] = React.useState(false);
33
+ const handleInputKeyDown = (event) => {
34
+ if (event.key === 'Enter') {
35
+ setIsPopoverOpen(true);
36
+ }
37
+ else if (event.key === 'Backspace' && !event.currentTarget.value) {
38
+ const newSelectedValues = [...selectedValues];
39
+ newSelectedValues.pop();
40
+ setSelectedValues(newSelectedValues);
41
+ onValueChange(newSelectedValues);
42
+ }
43
+ };
44
+ const toggleOption = (option) => {
45
+ const newSelectedValues = selectedValues.includes(option)
46
+ ? selectedValues.filter((value) => value !== option)
47
+ : [...selectedValues, option];
48
+ setSelectedValues(newSelectedValues);
49
+ onValueChange(newSelectedValues);
50
+ };
51
+ const handleClear = () => {
52
+ setSelectedValues([]);
53
+ onValueChange([]);
54
+ };
55
+ const handleTogglePopover = () => {
56
+ setIsPopoverOpen((prev) => !prev);
57
+ };
58
+ const clearExtraOptions = () => {
59
+ const newSelectedValues = selectedValues.slice(0, maxCount);
60
+ setSelectedValues(newSelectedValues);
61
+ onValueChange(newSelectedValues);
62
+ };
63
+ const toggleAll = () => {
64
+ if (selectedValues.length === options.length) {
65
+ handleClear();
66
+ }
67
+ else {
68
+ const allValues = options.map((option) => option.value);
69
+ setSelectedValues(allValues);
70
+ onValueChange(allValues);
71
+ }
72
+ };
73
+ return (_jsxs(Popover, { open: isPopoverOpen, onOpenChange: setIsPopoverOpen, modal: modalPopover, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { ref: ref, ...props, onClick: handleTogglePopover, className: cn('flex w-full p-1 rounded-md border min-h-10 h-auto items-center justify-between bg-inherit hover:bg-inherit [&_svg]:pointer-events-auto', className), children: selectedValues.length > 0 ? (_jsxs("div", { className: 'flex justify-between items-center w-full', children: [_jsxs("div", { className: 'flex flex-wrap items-center', children: [selectedValues.slice(0, maxCount).map((value) => {
74
+ const option = options.find((o) => o.value === value);
75
+ const IconComponent = option?.icon;
76
+ return (_jsxs(Badge, { className: cn(isAnimating ? 'animate-bounce' : '', multiSelectVariants({ variant })), style: { animationDuration: `${animation}s` }, children: [IconComponent && _jsx(IconComponent, { className: 'h-4 w-4 mr-2' }), option?.label, _jsx(XCircle, { className: 'ml-2 h-4 w-4 cursor-pointer', onClick: (event) => {
77
+ event.stopPropagation();
78
+ toggleOption(value);
79
+ } })] }, value));
80
+ }), selectedValues.length > maxCount && (_jsxs(Badge, { className: cn('bg-transparent text-foreground border-foreground/1 hover:bg-transparent', isAnimating ? 'animate-bounce' : '', multiSelectVariants({ variant })), style: { animationDuration: `${animation}s` }, children: [`+ ${selectedValues.length - maxCount} more`, _jsx(XCircle, { className: 'ml-2 h-4 w-4 cursor-pointer', onClick: (event) => {
81
+ event.stopPropagation();
82
+ clearExtraOptions();
83
+ } })] }))] }), _jsxs("div", { className: 'flex items-center justify-between', children: [_jsx(XIcon, { className: 'h-4 mx-2 cursor-pointer text-muted-foreground', onClick: (event) => {
84
+ event.stopPropagation();
85
+ handleClear();
86
+ } }), _jsx(Separator, { orientation: 'vertical', className: 'flex min-h-6 h-full' }), _jsx(ChevronDown, { className: 'h-4 mx-2 cursor-pointer text-muted-foreground' })] })] })) : (_jsxs("div", { className: 'flex items-center justify-between w-full mx-auto', children: [_jsx("span", { className: 'text-sm text-muted-foreground mx-3', children: placeholder }), _jsx(ChevronDown, { className: 'h-4 cursor-pointer text-muted-foreground mx-2' })] })) }) }), _jsx(PopoverContent, { className: 'w-auto p-0', align: 'start', onEscapeKeyDown: () => setIsPopoverOpen(false), children: _jsxs(Command, { children: [_jsx(CommandInput, { placeholder: 'Search...', onKeyDown: handleInputKeyDown }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: "No results found." }), _jsxs(CommandGroup, { children: [_jsxs(CommandItem, { onSelect: toggleAll, className: 'cursor-pointer', children: [_jsx("div", { className: cn('mr-2 flex h-4 w-4 items-center justify-center rounded-sm border border-primary', selectedValues.length === options.length
87
+ ? 'bg-primary text-primary-foreground'
88
+ : 'opacity-50 [&_svg]:invisible'), children: _jsx(CheckIcon, { className: 'h-4 w-4' }) }), _jsx("span", { children: "(Select All)" })] }, 'all'), options.map((option) => {
89
+ const isSelected = selectedValues.includes(option.value);
90
+ return (_jsxs(CommandItem, { onSelect: () => toggleOption(option.value), className: 'cursor-pointer', children: [_jsx("div", { className: cn('mr-2 flex h-4 w-4 items-center justify-center rounded-sm border border-primary', isSelected
91
+ ? 'bg-primary text-primary-foreground'
92
+ : 'opacity-50 [&_svg]:invisible'), children: _jsx(CheckIcon, { className: 'h-4 w-4' }) }), option.icon && (_jsx(option.icon, { className: 'mr-2 h-4 w-4 text-muted-foreground' })), _jsx("span", { children: option.label })] }, option.value));
93
+ })] }), _jsx(CommandSeparator, {}), _jsx(CommandGroup, { children: _jsxs("div", { className: 'flex items-center justify-between', children: [selectedValues.length > 0 && (_jsxs(_Fragment, { children: [_jsx(CommandItem, { onSelect: handleClear, className: 'flex-1 justify-center cursor-pointer', children: "Clear" }), _jsx(Separator, { orientation: 'vertical', className: 'flex min-h-6 h-full' })] })), _jsx(CommandItem, { onSelect: () => setIsPopoverOpen(false), className: 'flex-1 justify-center cursor-pointer max-w-full', children: "Close" })] }) })] })] }) }), animation > 0 && selectedValues.length > 0 && (_jsx(WandSparkles, { className: cn('cursor-pointer my-2 text-foreground bg-background w-3 h-3', isAnimating ? '' : 'text-muted-foreground'), onClick: () => setIsAnimating(!isAnimating) }))] }));
94
+ });
95
+ MultiSelect.displayName = 'MultiSelect';
96
+ //# sourceMappingURL=MultiSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiSelect.js","sourceRoot":"","sources":["../../src/components/MultiSelect.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AlertCircle } from 'lucide-react';
3
+ import { Button } from './ui/button';
4
+ import { useState } from 'react';
5
+ import { useSidebar } from './ui/sidebar';
6
+ export const SaveChangesAlert = ({ message, handleRevert, saveChanges, onClose, }) => {
7
+ const [isSaving, setIsSaving] = useState(false);
8
+ const [error, setError] = useState(null);
9
+ const { state } = useSidebar();
10
+ const handleSave = async () => {
11
+ setIsSaving(true);
12
+ setError(null);
13
+ try {
14
+ await saveChanges();
15
+ onClose?.();
16
+ }
17
+ catch (err) {
18
+ setError(err instanceof Error ? err.message : 'An error occurred while saving');
19
+ }
20
+ finally {
21
+ setIsSaving(false);
22
+ }
23
+ };
24
+ return (_jsxs("div", { className: 'fixed bottom-0 right-0 bg-background border-t border-border p-4 z-50 transition-all duration-300 ease-in-out', style: {
25
+ width: state === 'expanded'
26
+ ? 'calc(100% - var(--sidebar-width))'
27
+ : 'calc(100% - var(--sidebar-width-icon))',
28
+ left: state === 'expanded' ? 'var(--sidebar-width)' : 'var(--sidebar-width-icon)',
29
+ }, children: [_jsxs("div", { className: 'max-w-7xl mx-auto flex items-center justify-between', children: [_jsxs("div", { className: 'flex items-center space-x-2', children: [_jsx(AlertCircle, { className: 'h-4 w-4 text-yellow-500' }), _jsx("p", { className: 'text-sm font-medium', children: message })] }), _jsxs("div", { className: 'flex space-x-2', children: [_jsx(Button, { variant: 'outline', size: 'sm', onClick: handleRevert, disabled: isSaving, "aria-label": 'Revert changes', children: "Revert" }), _jsx(Button, { variant: 'default', size: 'sm', onClick: handleSave, disabled: isSaving, "aria-label": 'Save changes', children: isSaving ? 'Saving...' : 'Save' })] })] }), error && (_jsx("p", { className: 'mt-2 text-sm text-destructive text-center', role: 'alert', children: error }))] }));
30
+ };
31
+ //# sourceMappingURL=SaveChangesAlert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SaveChangesAlert.js","sourceRoot":"","sources":["../../src/components/SaveChangesAlert.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AASzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,OAAO,EACP,YAAY,EACZ,WAAW,EACX,OAAO,GACe,EAAe,EAAE;IACvC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACvD,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,CAAA;IAE9B,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,WAAW,CAAC,IAAI,CAAC,CAAA;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,IAAI,CAAC;YACH,MAAM,WAAW,EAAE,CAAA;YACnB,OAAO,EAAE,EAAE,CAAA;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAA;QACjF,CAAC;gBAAS,CAAC;YACT,WAAW,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,eACE,SAAS,EAAC,8GAA8G,EACxH,KAAK,EAAE;YACL,KAAK,EACH,KAAK,KAAK,UAAU;gBAClB,CAAC,CAAC,mCAAmC;gBACrC,CAAC,CAAC,wCAAwC;YAC9C,IAAI,EAAE,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,2BAA2B;SAClF,aAED,eAAK,SAAS,EAAC,qDAAqD,aAClE,eAAK,SAAS,EAAC,6BAA6B,aAC1C,KAAC,WAAW,IAAC,SAAS,EAAC,yBAAyB,GAAG,EACnD,YAAG,SAAS,EAAC,qBAAqB,YAAE,OAAO,GAAK,IAC5C,EACN,eAAK,SAAS,EAAC,gBAAgB,aAC7B,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,QAAQ,gBACP,gBAAgB,uBAGpB,EACT,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,QAAQ,gBACP,cAAc,YAExB,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,GACzB,IACL,IACF,EACL,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,2CAA2C,EAAC,IAAI,EAAC,OAAO,YAClE,KAAK,GACJ,CACL,IACG,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Alert, AlertDescription, AlertTitle } from '../components/ui/alert';
3
+ import { Button } from '../components/ui/button';
4
+ import { Card, CardContent, CardFooter, CardHeader, CardTitle } from '../components/ui/card';
5
+ import { AlertTriangle, ArrowLeft, LogOut } from 'lucide-react';
6
+ import { useNavigate } from 'react-router-dom';
7
+ export default function UnauthorizedPage({ onLogout, backUrl, customMessage, }) {
8
+ const navigate = useNavigate();
9
+ return (_jsx("div", { className: 'fixed inset-0 bg-background/80 backdrop-blur-sm z-50 flex items-center justify-center p-4', children: _jsxs(Card, { className: 'max-w-md w-full shadow-lg', children: [_jsx(CardHeader, { children: _jsx(CardTitle, { className: 'text-2xl font-bold text-center text-primary', children: "Access Denied" }) }), _jsx(CardContent, { className: 'space-y-4', children: _jsxs(Alert, { variant: 'destructive', className: 'border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive', children: [_jsx(AlertTriangle, { className: 'h-4 w-4' }), _jsx(AlertTitle, { children: "Unauthorized" }), _jsx(AlertDescription, { children: customMessage ? customMessage : 'You do not have permission to access this page.' })] }) }), _jsxs(CardFooter, { className: 'flex justify-center space-x-4', children: [backUrl && (_jsxs(Button, { variant: 'outline', onClick: () => {
10
+ navigate(backUrl);
11
+ }, className: 'w-full sm:w-auto', children: [_jsx(ArrowLeft, { className: 'mr-2 h-4 w-4' }), "Go Back"] })), onLogout && (_jsxs(Button, { variant: 'destructive', onClick: () => onLogout(), className: 'w-full sm:w-auto', children: [_jsx(LogOut, { className: 'mr-2 h-4 w-4' }), "Logout"] }))] })] }) }));
12
+ }
13
+ //# sourceMappingURL=UnauthorizedPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnauthorizedPage.js","sourceRoot":"","sources":["../../src/components/UnauthorizedPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAQ9C,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,QAAQ,EACR,OAAO,EACP,aAAa,GACS;IACtB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,OAAO,CACL,cAAK,SAAS,EAAC,2FAA2F,YACxG,MAAC,IAAI,IAAC,SAAS,EAAC,2BAA2B,aACzC,KAAC,UAAU,cACT,KAAC,SAAS,IAAC,SAAS,EAAC,6CAA6C,8BAEtD,GACD,EACb,KAAC,WAAW,IAAC,SAAS,EAAC,WAAW,YAChC,MAAC,KAAK,IACJ,OAAO,EAAC,aAAa,EACrB,SAAS,EAAC,yFAAyF,aAEnG,KAAC,aAAa,IAAC,SAAS,EAAC,SAAS,GAAG,EACrC,KAAC,UAAU,+BAA0B,EACrC,KAAC,gBAAgB,cACd,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,iDAAiD,GACjE,IACb,GACI,EACd,MAAC,UAAU,IAAC,SAAS,EAAC,+BAA+B,aAClD,OAAO,IAAI,CACV,MAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,GAAG,EAAE;gCACZ,QAAQ,CAAC,OAAO,CAAC,CAAA;4BACnB,CAAC,EACD,SAAS,EAAC,kBAAkB,aAE5B,KAAC,SAAS,IAAC,SAAS,EAAC,cAAc,GAAG,eAE/B,CACV,EACA,QAAQ,IAAI,CACX,MAAC,MAAM,IAAC,OAAO,EAAC,aAAa,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAC,kBAAkB,aACnF,KAAC,MAAM,IAAC,SAAS,EAAC,cAAc,GAAG,cAE5B,CACV,IACU,IACR,GACH,CACP,CAAA;AACH,CAAC"}
@@ -1,2 +1,11 @@
1
1
  export * from './ui';
2
+ export * from './minimal-tiptap';
3
+ export * from './DatePicker';
4
+ export * from './DeleteConfirmationDialog';
5
+ export * from './ErrorPage';
6
+ export * from './LoadingPage';
7
+ export * from './ManagementPageHeader';
8
+ export * from './SaveChangesAlert';
9
+ export * from './UnauthorizedPage';
10
+ export * from './MultiSelect';
2
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAA;AACpB,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /* eslint-disable @typescript-eslint/no-shadow */
3
+ import * as React from 'react';
4
+ import { BubbleMenu } from '@tiptap/react';
5
+ import { LinkEditBlock } from '../link/link-edit-block';
6
+ import { LinkPopoverBlock } from '../link/link-popover-block';
7
+ export const LinkBubbleMenu = ({ editor }) => {
8
+ const [showEdit, setShowEdit] = React.useState(false);
9
+ const [linkAttrs, setLinkAttrs] = React.useState({ href: '', target: '' });
10
+ const [selectedText, setSelectedText] = React.useState('');
11
+ const updateLinkState = React.useCallback(() => {
12
+ const { from, to } = editor.state.selection;
13
+ const { href, target } = editor.getAttributes('link');
14
+ const text = editor.state.doc.textBetween(from, to, ' ');
15
+ setLinkAttrs({ href, target });
16
+ setSelectedText(text);
17
+ }, [editor]);
18
+ const shouldShow = React.useCallback(({ editor, from, to }) => {
19
+ if (from === to) {
20
+ return false;
21
+ }
22
+ const { href } = editor.getAttributes('link');
23
+ if (href) {
24
+ updateLinkState();
25
+ return true;
26
+ }
27
+ return false;
28
+ }, [updateLinkState]);
29
+ const handleEdit = React.useCallback(() => {
30
+ setShowEdit(true);
31
+ }, []);
32
+ const onSetLink = React.useCallback((url, text, openInNewTab) => {
33
+ editor
34
+ .chain()
35
+ .focus()
36
+ .extendMarkRange('link')
37
+ .insertContent({
38
+ type: 'text',
39
+ text: text || url,
40
+ marks: [
41
+ {
42
+ type: 'link',
43
+ attrs: {
44
+ href: url,
45
+ target: openInNewTab ? '_blank' : '',
46
+ },
47
+ },
48
+ ],
49
+ })
50
+ .setLink({ href: url, target: openInNewTab ? '_blank' : '' })
51
+ .run();
52
+ setShowEdit(false);
53
+ updateLinkState();
54
+ }, [editor, updateLinkState]);
55
+ const onUnsetLink = React.useCallback(() => {
56
+ editor.chain().focus().extendMarkRange('link').unsetLink().run();
57
+ setShowEdit(false);
58
+ updateLinkState();
59
+ }, [editor, updateLinkState]);
60
+ return (_jsx(BubbleMenu, { editor: editor, shouldShow: shouldShow, tippyOptions: {
61
+ placement: 'bottom-start',
62
+ onHidden: () => setShowEdit(false),
63
+ }, children: showEdit ? (_jsx(LinkEditBlock, { defaultUrl: linkAttrs.href, defaultText: selectedText, defaultIsNewTab: linkAttrs.target === '_blank', onSave: onSetLink, className: 'w-full min-w-80 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none' })) : (_jsx(LinkPopoverBlock, { onClear: onUnsetLink, url: linkAttrs.href, onEdit: handleEdit })) }));
64
+ };
65
+ //# sourceMappingURL=link-bubble-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-bubble-menu.js","sourceRoot":"","sources":["../../../../../src/components/minimal-tiptap/components/bubble-menu/link-bubble-menu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Button } from '../../../../components/ui/button';
4
+ import { Label } from '../../../../components/ui/label';
5
+ import { Input } from '../../../../components/ui/input';
6
+ export const ImageEditBlock = ({ editor, close }) => {
7
+ const fileInputRef = React.useRef(null);
8
+ const [link, setLink] = React.useState('');
9
+ const handleClick = React.useCallback(() => {
10
+ fileInputRef.current?.click();
11
+ }, []);
12
+ const handleFile = React.useCallback(async (e) => {
13
+ const files = e.target.files;
14
+ if (!files?.length)
15
+ return;
16
+ const insertImages = async () => {
17
+ const contentBucket = []; // custom fix for typescript
18
+ const filesArray = Array.from(files);
19
+ for (const file of filesArray) {
20
+ contentBucket.push({ src: file });
21
+ }
22
+ editor.commands.setImages(contentBucket);
23
+ };
24
+ await insertImages();
25
+ close();
26
+ }, [editor, close]);
27
+ const handleSubmit = React.useCallback((e) => {
28
+ e.preventDefault();
29
+ e.stopPropagation();
30
+ if (link) {
31
+ editor.commands.setImages([{ src: link }]);
32
+ close();
33
+ }
34
+ }, [editor, link, close]);
35
+ return (_jsxs("form", { onSubmit: handleSubmit, className: 'space-y-6', children: [_jsxs("div", { className: 'space-y-1', children: [_jsx(Label, { htmlFor: 'image-link', children: "Attach an image link" }), _jsxs("div", { className: 'flex', children: [_jsx(Input, { id: 'image-link', type: 'url', required: true, placeholder: 'https://example.com', value: link, className: 'grow', onChange: (e) => setLink(e.target.value) }), _jsx(Button, { type: 'submit', className: 'ml-2', children: "Submit" })] })] }), _jsx(Button, { type: 'button', className: 'w-full', onClick: handleClick, children: "Upload from your computer" }), _jsx("input", { type: 'file', accept: 'image/*', ref: fileInputRef, multiple: true, className: 'hidden', onChange: handleFile })] }));
36
+ };
37
+ export default ImageEditBlock;
38
+ //# sourceMappingURL=image-edit-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-edit-block.js","sourceRoot":"","sources":["../../../../../src/components/minimal-tiptap/components/image/image-edit-block.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { ImageIcon } from 'lucide-react';
4
+ import { ToolbarButton } from '../toolbar-button';
5
+ import { Dialog, DialogContent, DialogHeader, DialogDescription, DialogTitle, DialogTrigger, } from '../../../../components/ui/dialog';
6
+ import { ImageEditBlock } from './image-edit-block';
7
+ const ImageEditDialog = ({ editor, size, variant }) => {
8
+ const [open, setOpen] = useState(false);
9
+ return (_jsxs(Dialog, { open: open, onOpenChange: setOpen, children: [_jsx(DialogTrigger, { asChild: true, children: _jsx(ToolbarButton, { isActive: editor.isActive('image'), tooltip: 'Image', "aria-label": 'Image', size: size, variant: variant, children: _jsx(ImageIcon, { className: 'size-5' }) }) }), _jsxs(DialogContent, { className: 'sm:max-w-lg', children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Select image" }), _jsx(DialogDescription, { className: 'sr-only', children: "Upload an image from your computer" })] }), _jsx(ImageEditBlock, { editor: editor, close: () => setOpen(false) })] })] }));
10
+ };
11
+ export { ImageEditDialog };
12
+ //# sourceMappingURL=image-edit-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-edit-dialog.js","sourceRoot":"","sources":["../../../../../src/components/minimal-tiptap/components/image/image-edit-dialog.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EACL,MAAM,EACN,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,aAAa,GACd,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAMnD,MAAM,eAAe,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAwB,EAAE,EAAE;IAC1E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEvC,OAAO,CACL,MAAC,MAAM,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACvC,KAAC,aAAa,IAAC,OAAO,kBACpB,KAAC,aAAa,IACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAClC,OAAO,EAAC,OAAO,gBACJ,OAAO,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,YAEhB,KAAC,SAAS,IAAC,SAAS,EAAC,QAAQ,GAAG,GAClB,GACF,EAChB,MAAC,aAAa,IAAC,SAAS,EAAC,aAAa,aACpC,MAAC,YAAY,eACX,KAAC,WAAW,+BAA2B,EACvC,KAAC,iBAAiB,IAAC,SAAS,EAAC,SAAS,mDAElB,IACP,EACf,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAI,IACjD,IACT,CACV,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAE,eAAe,EAAE,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Button } from '../../../../components/ui/button';
4
+ import { Label } from '../../../../components/ui/label';
5
+ import { Switch } from '../../../../components/ui/switch';
6
+ import { Input } from '../../../../components/ui/input';
7
+ import { cn } from '../../../../lib/utils';
8
+ export const LinkEditBlock = React.forwardRef(({ onSave, defaultIsNewTab, defaultUrl, defaultText, className }, ref) => {
9
+ const formRef = React.useRef(null);
10
+ const [url, setUrl] = React.useState(defaultUrl || '');
11
+ const [text, setText] = React.useState(defaultText || '');
12
+ const [isNewTab, setIsNewTab] = React.useState(defaultIsNewTab || false);
13
+ const handleSave = React.useCallback((e) => {
14
+ e.preventDefault();
15
+ if (formRef.current) {
16
+ const isValid = Array.from(formRef.current.querySelectorAll('input')).every((input) => input.checkValidity());
17
+ if (isValid) {
18
+ onSave(url, text, isNewTab);
19
+ }
20
+ else {
21
+ formRef.current.querySelectorAll('input').forEach((input) => {
22
+ if (!input.checkValidity()) {
23
+ input.reportValidity();
24
+ }
25
+ });
26
+ }
27
+ }
28
+ }, [onSave, url, text, isNewTab]);
29
+ React.useImperativeHandle(ref, () => formRef.current);
30
+ return (_jsx("div", { ref: formRef, children: _jsxs("div", { className: cn('space-y-4', className), children: [_jsxs("div", { className: 'space-y-1', children: [_jsx(Label, { children: "URL" }), _jsx(Input, { type: 'url', required: true, placeholder: 'Enter URL', value: url, onChange: (e) => setUrl(e.target.value) })] }), _jsxs("div", { className: 'space-y-1', children: [_jsx(Label, { children: "Display Text (optional)" }), _jsx(Input, { type: 'text', placeholder: 'Enter display text', value: text, onChange: (e) => setText(e.target.value) })] }), _jsxs("div", { className: 'flex items-center space-x-2', children: [_jsx(Label, { children: "Open in New Tab" }), _jsx(Switch, { checked: isNewTab, onCheckedChange: setIsNewTab })] }), _jsx("div", { className: 'flex justify-end space-x-2', children: _jsx(Button, { type: 'button', onClick: handleSave, children: "Save" }) })] }) }));
31
+ });
32
+ LinkEditBlock.displayName = 'LinkEditBlock';
33
+ export default LinkEditBlock;
34
+ //# sourceMappingURL=link-edit-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-edit-block.js","sourceRoot":"","sources":["../../../../../src/components/minimal-tiptap/components/link/link-edit-block.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Popover, PopoverContent, PopoverTrigger } from '../../../../components/ui/popover';
4
+ import { Link2Icon } from 'lucide-react';
5
+ import { ToolbarButton } from '../toolbar-button';
6
+ import { LinkEditBlock } from './link-edit-block';
7
+ const LinkEditPopover = ({ editor, size, variant }) => {
8
+ const [open, setOpen] = React.useState(false);
9
+ const { from, to } = editor.state.selection;
10
+ const text = editor.state.doc.textBetween(from, to, ' ');
11
+ const onSetLink = React.useCallback(
12
+ // eslint-disable-next-line @typescript-eslint/no-shadow
13
+ (url, text, openInNewTab) => {
14
+ editor
15
+ .chain()
16
+ .focus()
17
+ .extendMarkRange('link')
18
+ .insertContent({
19
+ type: 'text',
20
+ text: text || url,
21
+ marks: [
22
+ {
23
+ type: 'link',
24
+ attrs: {
25
+ href: url,
26
+ target: openInNewTab ? '_blank' : '',
27
+ },
28
+ },
29
+ ],
30
+ })
31
+ .setLink({ href: url })
32
+ .run();
33
+ editor.commands.enter();
34
+ }, [editor]);
35
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(ToolbarButton, { isActive: editor.isActive('link'), tooltip: 'Link', "aria-label": 'Insert link', disabled: editor.isActive('codeBlock'), size: size, variant: variant, children: _jsx(Link2Icon, { className: 'size-5' }) }) }), _jsx(PopoverContent, { className: 'w-full min-w-80', align: 'end', side: 'bottom', children: _jsx(LinkEditBlock, { onSave: onSetLink, defaultText: text }) })] }));
36
+ };
37
+ export { LinkEditPopover };
38
+ //# sourceMappingURL=link-edit-popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-edit-popover.js","sourceRoot":"","sources":["../../../../../src/components/minimal-tiptap/components/link/link-edit-popover.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAMjD,MAAM,eAAe,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAwB,EAAE,EAAE;IAC1E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7C,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAA;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IAExD,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW;IACjC,wDAAwD;IACxD,CAAC,GAAW,EAAE,IAAa,EAAE,YAAsB,EAAE,EAAE;QACrD,MAAM;aACH,KAAK,EAAE;aACP,KAAK,EAAE;aACP,eAAe,CAAC,MAAM,CAAC;aACvB,aAAa,CAAC;YACb,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,IAAI,GAAG;YACjB,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE;wBACL,IAAI,EAAE,GAAG;wBACT,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;qBACrC;iBACF;aACF;SACF,CAAC;aACD,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;aACtB,GAAG,EAAE,CAAA;QAER,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAA;IAED,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACxC,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,aAAa,IACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EACjC,OAAO,EAAC,MAAM,gBACH,aAAa,EACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EACtC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,YAEhB,KAAC,SAAS,IAAC,SAAS,EAAC,QAAQ,GAAG,GAClB,GACD,EACjB,KAAC,cAAc,IAAC,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,QAAQ,YACnE,KAAC,aAAa,IAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,GAAI,GACxC,IACT,CACX,CAAA;AACH,CAAC,CAAA;AAED,OAAO,EAAE,eAAe,EAAE,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Separator } from '../../../../components/ui/separator';
4
+ import { ToolbarButton } from '../toolbar-button';
5
+ import { CopyIcon, ExternalLinkIcon, Link2Off } from 'lucide-react';
6
+ export const LinkPopoverBlock = ({ url, onClear, onEdit }) => {
7
+ const [copyTitle, setCopyTitle] = React.useState('Copy');
8
+ const handleCopy = React.useCallback((e) => {
9
+ e.preventDefault();
10
+ navigator.clipboard
11
+ .writeText(url)
12
+ .then(() => {
13
+ setCopyTitle('Copied!');
14
+ setTimeout(() => setCopyTitle('Copy'), 1000);
15
+ })
16
+ .catch(console.error);
17
+ }, [url]);
18
+ const handleOpenLink = React.useCallback(() => {
19
+ window.open(url, '_blank', 'noopener,noreferrer');
20
+ }, [url]);
21
+ return (_jsx("div", { className: 'flex h-10 overflow-hidden rounded bg-background p-2 shadow-lg', children: _jsxs("div", { className: 'inline-flex items-center gap-1', children: [_jsx(ToolbarButton, { tooltip: 'Edit link', onClick: onEdit, className: 'w-auto px-2', children: "Edit link" }), _jsx(Separator, { orientation: 'vertical' }), _jsx(ToolbarButton, { tooltip: 'Open link in a new tab', onClick: handleOpenLink, children: _jsx(ExternalLinkIcon, { className: 'size-4' }) }), _jsx(Separator, { orientation: 'vertical' }), _jsx(ToolbarButton, { tooltip: 'Clear link', onClick: onClear, children: _jsx(Link2Off, { className: 'size-4' }) }), _jsx(Separator, { orientation: 'vertical' }), _jsx(ToolbarButton, { tooltip: copyTitle, onClick: handleCopy, tooltipOptions: {
22
+ onPointerDownOutside: (e) => {
23
+ if (e.target === e.currentTarget)
24
+ e.preventDefault();
25
+ },
26
+ }, children: _jsx(CopyIcon, { className: 'size-4' }) })] }) }));
27
+ };
28
+ //# sourceMappingURL=link-popover-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-popover-block.js","sourceRoot":"","sources":["../../../../../src/components/minimal-tiptap/components/link/link-popover-block.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAQnE,MAAM,CAAC,MAAM,gBAAgB,GAAoC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;IAC5F,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,MAAM,CAAC,CAAA;IAEhE,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAClC,CAAC,CAAsC,EAAE,EAAE;QACzC,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,SAAS,CAAC,SAAS;aAChB,SAAS,CAAC,GAAG,CAAC;aACd,IAAI,CAAC,GAAG,EAAE;YACT,YAAY,CAAC,SAAS,CAAC,CAAA;YACvB,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;QAC9C,CAAC,CAAC;aACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAA;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAA;IACnD,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAET,OAAO,CACL,cAAK,SAAS,EAAC,+DAA+D,YAC5E,eAAK,SAAS,EAAC,gCAAgC,aAC7C,KAAC,aAAa,IAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAC,aAAa,0BAE3D,EAChB,KAAC,SAAS,IAAC,WAAW,EAAC,UAAU,GAAG,EACpC,KAAC,aAAa,IAAC,OAAO,EAAC,wBAAwB,EAAC,OAAO,EAAE,cAAc,YACrE,KAAC,gBAAgB,IAAC,SAAS,EAAC,QAAQ,GAAG,GACzB,EAChB,KAAC,SAAS,IAAC,WAAW,EAAC,UAAU,GAAG,EACpC,KAAC,aAAa,IAAC,OAAO,EAAC,YAAY,EAAC,OAAO,EAAE,OAAO,YAClD,KAAC,QAAQ,IAAC,SAAS,EAAC,QAAQ,GAAG,GACjB,EAChB,KAAC,SAAS,IAAC,WAAW,EAAC,UAAU,GAAG,EACpC,KAAC,aAAa,IACZ,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE;wBACd,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE;4BAC1B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa;gCAAE,CAAC,CAAC,cAAc,EAAE,CAAA;wBACtD,CAAC;qBACF,YAED,KAAC,QAAQ,IAAC,SAAS,EAAC,QAAQ,GAAG,GACjB,IACZ,GACF,CACP,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /* eslint-disable react/prop-types */
3
+ import * as React from 'react';
4
+ import { useContainerSize } from '../hooks/use-container-size';
5
+ export const MeasuredContainer = React.forwardRef(({ as: Component, name, children, style = {}, ...props }, ref) => {
6
+ const innerRef = React.useRef(null);
7
+ const rect = useContainerSize(innerRef.current);
8
+ React.useImperativeHandle(ref, () => innerRef.current);
9
+ const customStyle = {
10
+ [`--${name}-width`]: `${rect.width}px`,
11
+ [`--${name}-height`]: `${rect.height}px`,
12
+ };
13
+ return (_jsx(Component, { ...props, ref: innerRef, style: { ...customStyle, ...style }, children: children }));
14
+ });
15
+ MeasuredContainer.displayName = 'MeasuredContainer';
16
+ //# sourceMappingURL=measured-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measured-container.js","sourceRoot":"","sources":["../../../../src/components/minimal-tiptap/components/measured-container.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AACrC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAQ9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAC/C,CACE,EACE,EAAE,EAAE,SAAS,EACb,IAAI,EACJ,QAAQ,EACR,KAAK,GAAG,EAAE,EACV,GAAG,KAAK,EAC4C,EACtD,GAA2B,EAC3B,EAAE;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAc,IAAI,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAE/C,KAAK,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAsB,CAAC,CAAA;IAErE,MAAM,WAAW,GAAG;QAClB,CAAC,KAAK,IAAI,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI;QACtC,CAAC,KAAK,IAAI,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI;KACzC,CAAA;IAED,OAAO,CACL,KAAC,SAAS,OAAK,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,KAAK,EAAE,YACrE,QAAQ,GACC,CACb,CAAA;AACH,CAAC,CACF,CAAA;AAED,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAA"}