@ayasofyazilim/ui 0.0.0 → 0.0.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 (667) hide show
  1. package/dist/aria/index.js +2 -0
  2. package/dist/aria/index.js.map +1 -0
  3. package/dist/aria/number-field.js +46 -0
  4. package/dist/aria/number-field.js.map +1 -0
  5. package/dist/components/accordion.js +66 -0
  6. package/dist/components/accordion.js.map +1 -0
  7. package/dist/components/alert-dialog.js +148 -0
  8. package/dist/components/alert-dialog.js.map +1 -0
  9. package/dist/components/alert.js +69 -0
  10. package/dist/components/alert.js.map +1 -0
  11. package/dist/components/aspect-ratio.js +12 -0
  12. package/dist/components/aspect-ratio.js.map +1 -0
  13. package/dist/components/avatar.js +55 -0
  14. package/dist/components/avatar.js.map +1 -0
  15. package/dist/components/badge.js +62 -0
  16. package/dist/components/badge.js.map +1 -0
  17. package/dist/components/breadcrumb.js +104 -0
  18. package/dist/components/breadcrumb.js.map +1 -0
  19. package/dist/components/button-group.js +77 -0
  20. package/dist/components/button-group.js.map +1 -0
  21. package/dist/components/button.js +56 -0
  22. package/dist/components/button.js.map +1 -0
  23. package/dist/components/calendar.js +196 -0
  24. package/dist/components/calendar.js.map +1 -0
  25. package/dist/components/card.js +91 -0
  26. package/dist/components/card.js.map +1 -0
  27. package/dist/components/carousel.js +200 -0
  28. package/dist/components/carousel.js.map +1 -0
  29. package/dist/components/chart.js +250 -0
  30. package/dist/components/chart.js.map +1 -0
  31. package/dist/components/checkbox.js +33 -0
  32. package/dist/components/checkbox.js.map +1 -0
  33. package/dist/components/collapsible.js +36 -0
  34. package/dist/components/collapsible.js.map +1 -0
  35. package/dist/components/command.js +178 -0
  36. package/dist/components/command.js.map +1 -0
  37. package/dist/components/context-menu.js +225 -0
  38. package/dist/components/context-menu.js.map +1 -0
  39. package/dist/components/dialog.js +139 -0
  40. package/dist/components/dialog.js.map +1 -0
  41. package/dist/components/drawer.js +130 -0
  42. package/dist/components/drawer.js.map +1 -0
  43. package/dist/components/dropdown-menu.js +234 -0
  44. package/dist/components/dropdown-menu.js.map +1 -0
  45. package/dist/components/empty.js +100 -0
  46. package/dist/components/empty.js.map +1 -0
  47. package/dist/components/field.js +231 -0
  48. package/dist/components/field.js.map +1 -0
  49. package/dist/components/form.js +124 -0
  50. package/dist/components/form.js.map +1 -0
  51. package/dist/components/hover-card.js +40 -0
  52. package/dist/components/hover-card.js.map +1 -0
  53. package/dist/components/input-group.js +156 -0
  54. package/dist/components/input-group.js.map +1 -0
  55. package/dist/components/input-otp.js +68 -0
  56. package/dist/components/input-otp.js.map +1 -0
  57. package/dist/components/input.js +22 -0
  58. package/dist/components/input.js.map +1 -0
  59. package/dist/components/item.js +188 -0
  60. package/dist/components/item.js.map +1 -0
  61. package/dist/components/kbd.js +32 -0
  62. package/dist/components/kbd.js.map +1 -0
  63. package/dist/components/label.js +24 -0
  64. package/dist/components/label.js.map +1 -0
  65. package/dist/components/menubar.js +253 -0
  66. package/dist/components/menubar.js.map +1 -0
  67. package/dist/components/navigation-menu.js +171 -0
  68. package/dist/components/navigation-menu.js.map +1 -0
  69. package/dist/components/pagination.js +125 -0
  70. package/dist/components/pagination.js.map +1 -0
  71. package/dist/components/popover.js +82 -0
  72. package/dist/components/popover.js.map +1 -0
  73. package/dist/components/progress.js +33 -0
  74. package/dist/components/progress.js.map +1 -0
  75. package/dist/components/radio-group.js +47 -0
  76. package/dist/components/radio-group.js.map +1 -0
  77. package/dist/components/resizable.js +50 -0
  78. package/dist/components/resizable.js.map +1 -0
  79. package/dist/components/scroll-area.js +62 -0
  80. package/dist/components/scroll-area.js.map +1 -0
  81. package/dist/components/select.js +173 -0
  82. package/dist/components/select.js.map +1 -0
  83. package/dist/components/separator.js +28 -0
  84. package/dist/components/separator.js.map +1 -0
  85. package/dist/components/sheet.js +129 -0
  86. package/dist/components/sheet.js.map +1 -0
  87. package/dist/components/sidebar.js +759 -0
  88. package/dist/components/sidebar.js.map +1 -0
  89. package/dist/components/skeleton.js +16 -0
  90. package/dist/components/skeleton.js.map +1 -0
  91. package/dist/components/slider.js +65 -0
  92. package/dist/components/slider.js.map +1 -0
  93. package/dist/components/sonner.js +40 -0
  94. package/dist/components/sonner.js.map +1 -0
  95. package/dist/components/spinner.js +18 -0
  96. package/dist/components/spinner.js.map +1 -0
  97. package/dist/components/stepper.js +220 -0
  98. package/dist/components/stepper.js.map +1 -0
  99. package/dist/components/switch.js +33 -0
  100. package/dist/components/switch.js.map +1 -0
  101. package/dist/components/table.js +131 -0
  102. package/dist/components/table.js.map +1 -0
  103. package/dist/components/tabs.js +69 -0
  104. package/dist/components/tabs.js.map +1 -0
  105. package/dist/components/textarea.js +19 -0
  106. package/dist/components/textarea.js.map +1 -0
  107. package/dist/components/toggle-group.js +70 -0
  108. package/dist/components/toggle-group.js.map +1 -0
  109. package/dist/components/toggle.js +45 -0
  110. package/dist/components/toggle.js.map +1 -0
  111. package/dist/components/tooltip.js +65 -0
  112. package/dist/components/tooltip.js.map +1 -0
  113. package/dist/custom/action-button.js +38 -0
  114. package/dist/custom/action-button.js.map +1 -0
  115. package/dist/custom/async-select.js +249 -0
  116. package/dist/custom/async-select.js.map +1 -0
  117. package/dist/custom/awesome-not-found.js +113 -0
  118. package/dist/custom/awesome-not-found.js.map +1 -0
  119. package/dist/custom/charts/area-chart.js +125 -0
  120. package/dist/custom/charts/area-chart.js.map +1 -0
  121. package/dist/custom/charts/bar-chart.js +232 -0
  122. package/dist/custom/charts/bar-chart.js.map +1 -0
  123. package/dist/custom/charts/chart-card.js +71 -0
  124. package/dist/custom/charts/chart-card.js.map +1 -0
  125. package/dist/custom/charts/index.js +5 -0
  126. package/dist/custom/charts/index.js.map +1 -0
  127. package/dist/custom/charts/pie-chart.js +153 -0
  128. package/dist/custom/charts/pie-chart.js.map +1 -0
  129. package/dist/custom/charts/radar-chart.js +112 -0
  130. package/dist/custom/charts/radar-chart.js.map +1 -0
  131. package/dist/custom/checkbox-tree.js +70 -0
  132. package/dist/custom/checkbox-tree.js.map +1 -0
  133. package/dist/custom/combobox.js +233 -0
  134. package/dist/custom/combobox.js.map +1 -0
  135. package/dist/custom/confirm-dialog.js +90 -0
  136. package/dist/custom/confirm-dialog.js.map +1 -0
  137. package/dist/custom/country-selector.js +151 -0
  138. package/dist/custom/country-selector.js.map +1 -0
  139. package/dist/custom/date-picker/calendar-rac.js +91 -0
  140. package/dist/custom/date-picker/calendar-rac.js.map +1 -0
  141. package/dist/custom/date-picker/datefield-rac.js +77 -0
  142. package/dist/custom/date-picker/datefield-rac.js.map +1 -0
  143. package/dist/custom/date-picker/index.js +251 -0
  144. package/dist/custom/date-picker/index.js.map +1 -0
  145. package/dist/custom/date-picker/types/index.js +1 -0
  146. package/dist/custom/date-picker/types/index.js.map +1 -0
  147. package/dist/custom/date-picker/utils/index.js +30 -0
  148. package/dist/custom/date-picker/utils/index.js.map +1 -0
  149. package/dist/custom/date-picker-old.js +46 -0
  150. package/dist/custom/date-picker-old.js.map +1 -0
  151. package/dist/custom/date-tooltip.js +89 -0
  152. package/dist/custom/date-tooltip.js.map +1 -0
  153. package/dist/custom/document-scanner/consts.js +13 -0
  154. package/dist/custom/document-scanner/consts.js.map +1 -0
  155. package/dist/custom/document-scanner/corner-adjustment/action-buttons.js +24 -0
  156. package/dist/custom/document-scanner/corner-adjustment/action-buttons.js.map +1 -0
  157. package/dist/custom/document-scanner/corner-adjustment/corner-handle.js +44 -0
  158. package/dist/custom/document-scanner/corner-adjustment/corner-handle.js.map +1 -0
  159. package/dist/custom/document-scanner/corner-adjustment/hooks/use-corner-drag.js +60 -0
  160. package/dist/custom/document-scanner/corner-adjustment/hooks/use-corner-drag.js.map +1 -0
  161. package/dist/custom/document-scanner/corner-adjustment/index.js +124 -0
  162. package/dist/custom/document-scanner/corner-adjustment/index.js.map +1 -0
  163. package/dist/custom/document-scanner/corner-adjustment/types.js +1 -0
  164. package/dist/custom/document-scanner/corner-adjustment/types.js.map +1 -0
  165. package/dist/custom/document-scanner/corner-adjustment/utils/clip-path.js +16 -0
  166. package/dist/custom/document-scanner/corner-adjustment/utils/clip-path.js.map +1 -0
  167. package/dist/custom/document-scanner/corner-adjustment/zoom-magnifier.js +85 -0
  168. package/dist/custom/document-scanner/corner-adjustment/zoom-magnifier.js.map +1 -0
  169. package/dist/custom/document-scanner/hooks/use-document-capture.js +61 -0
  170. package/dist/custom/document-scanner/hooks/use-document-capture.js.map +1 -0
  171. package/dist/custom/document-scanner/hooks/use-document-scanner.js +59 -0
  172. package/dist/custom/document-scanner/hooks/use-document-scanner.js.map +1 -0
  173. package/dist/custom/document-scanner/hooks/use-perspective-crop.js +31 -0
  174. package/dist/custom/document-scanner/hooks/use-perspective-crop.js.map +1 -0
  175. package/dist/custom/document-scanner/index.js +229 -0
  176. package/dist/custom/document-scanner/index.js.map +1 -0
  177. package/dist/custom/document-scanner/lib.js +289 -0
  178. package/dist/custom/document-scanner/lib.js.map +1 -0
  179. package/dist/custom/document-scanner/types.js +1 -0
  180. package/dist/custom/document-scanner/types.js.map +1 -0
  181. package/dist/custom/document-scanner/utils/perspective-correction.js +100 -0
  182. package/dist/custom/document-scanner/utils/perspective-correction.js.map +1 -0
  183. package/dist/custom/document-viewer/controllers.js +76 -0
  184. package/dist/custom/document-viewer/controllers.js.map +1 -0
  185. package/dist/custom/document-viewer/index.js +36 -0
  186. package/dist/custom/document-viewer/index.js.map +1 -0
  187. package/dist/custom/document-viewer/renderers/image.js +40 -0
  188. package/dist/custom/document-viewer/renderers/image.js.map +1 -0
  189. package/dist/custom/document-viewer/renderers/index.js +3 -0
  190. package/dist/custom/document-viewer/renderers/index.js.map +1 -0
  191. package/dist/custom/document-viewer/renderers/pdf.js +95 -0
  192. package/dist/custom/document-viewer/renderers/pdf.js.map +1 -0
  193. package/dist/custom/email-input/email.js +184 -0
  194. package/dist/custom/email-input/email.js.map +1 -0
  195. package/dist/custom/email-input/index.js +8 -0
  196. package/dist/custom/email-input/index.js.map +1 -0
  197. package/dist/custom/email-input/types.js +13 -0
  198. package/dist/custom/email-input/types.js.map +1 -0
  199. package/dist/custom/file-uploader.js +389 -0
  200. package/dist/custom/file-uploader.js.map +1 -0
  201. package/dist/custom/filter-component/fields/async-select.js +31 -0
  202. package/dist/custom/filter-component/fields/async-select.js.map +1 -0
  203. package/dist/custom/filter-component/fields/date.js +56 -0
  204. package/dist/custom/filter-component/fields/date.js.map +1 -0
  205. package/dist/custom/filter-component/fields/multi-select.js +28 -0
  206. package/dist/custom/filter-component/fields/multi-select.js.map +1 -0
  207. package/dist/custom/filter-component/index.js +149 -0
  208. package/dist/custom/filter-component/index.js.map +1 -0
  209. package/dist/custom/image-canvas.js +193 -0
  210. package/dist/custom/image-canvas.js.map +1 -0
  211. package/dist/custom/json-editor.js +30 -0
  212. package/dist/custom/json-editor.js.map +1 -0
  213. package/dist/custom/master-data-grid/components/dialogs/column-settings-dialog.js +84 -0
  214. package/dist/custom/master-data-grid/components/dialogs/column-settings-dialog.js.map +1 -0
  215. package/dist/custom/master-data-grid/components/dialogs/index.js +5 -0
  216. package/dist/custom/master-data-grid/components/dialogs/index.js.map +1 -0
  217. package/dist/custom/master-data-grid/components/filters/client-filter.js +310 -0
  218. package/dist/custom/master-data-grid/components/filters/client-filter.js.map +1 -0
  219. package/dist/custom/master-data-grid/components/filters/filter-input.js +209 -0
  220. package/dist/custom/master-data-grid/components/filters/filter-input.js.map +1 -0
  221. package/dist/custom/master-data-grid/components/filters/index.js +9 -0
  222. package/dist/custom/master-data-grid/components/filters/index.js.map +1 -0
  223. package/dist/custom/master-data-grid/components/filters/inline-column-filter.js +188 -0
  224. package/dist/custom/master-data-grid/components/filters/inline-column-filter.js.map +1 -0
  225. package/dist/custom/master-data-grid/components/filters/multi-filter-dialog.js +65 -0
  226. package/dist/custom/master-data-grid/components/filters/multi-filter-dialog.js.map +1 -0
  227. package/dist/custom/master-data-grid/components/filters/server-filter.js +213 -0
  228. package/dist/custom/master-data-grid/components/filters/server-filter.js.map +1 -0
  229. package/dist/custom/master-data-grid/components/master-data-grid.js +421 -0
  230. package/dist/custom/master-data-grid/components/master-data-grid.js.map +1 -0
  231. package/dist/custom/master-data-grid/components/pagination/index.js +5 -0
  232. package/dist/custom/master-data-grid/components/pagination/index.js.map +1 -0
  233. package/dist/custom/master-data-grid/components/pagination/pagination.js +159 -0
  234. package/dist/custom/master-data-grid/components/pagination/pagination.js.map +1 -0
  235. package/dist/custom/master-data-grid/components/table/cell-renderer.js +442 -0
  236. package/dist/custom/master-data-grid/components/table/cell-renderer.js.map +1 -0
  237. package/dist/custom/master-data-grid/components/table/header-cell.js +116 -0
  238. package/dist/custom/master-data-grid/components/table/header-cell.js.map +1 -0
  239. package/dist/custom/master-data-grid/components/table/index.js +5 -0
  240. package/dist/custom/master-data-grid/components/table/index.js.map +1 -0
  241. package/dist/custom/master-data-grid/components/table/table-body-renderer.js +79 -0
  242. package/dist/custom/master-data-grid/components/table/table-body-renderer.js.map +1 -0
  243. package/dist/custom/master-data-grid/components/table/virtual-body.js +86 -0
  244. package/dist/custom/master-data-grid/components/table/virtual-body.js.map +1 -0
  245. package/dist/custom/master-data-grid/components/toolbar/index.js +5 -0
  246. package/dist/custom/master-data-grid/components/toolbar/index.js.map +1 -0
  247. package/dist/custom/master-data-grid/components/toolbar/toolbar.js +238 -0
  248. package/dist/custom/master-data-grid/components/toolbar/toolbar.js.map +1 -0
  249. package/dist/custom/master-data-grid/hooks/index.js +7 -0
  250. package/dist/custom/master-data-grid/hooks/index.js.map +1 -0
  251. package/dist/custom/master-data-grid/hooks/use-columns.js +278 -0
  252. package/dist/custom/master-data-grid/hooks/use-columns.js.map +1 -0
  253. package/dist/custom/master-data-grid/hooks/use-editing.js +75 -0
  254. package/dist/custom/master-data-grid/hooks/use-editing.js.map +1 -0
  255. package/dist/custom/master-data-grid/hooks/use-table-state-reducer.js +96 -0
  256. package/dist/custom/master-data-grid/hooks/use-table-state-reducer.js.map +1 -0
  257. package/dist/custom/master-data-grid/hooks/use-table-state.js +25 -0
  258. package/dist/custom/master-data-grid/hooks/use-table-state.js.map +1 -0
  259. package/dist/custom/master-data-grid/index.js +5 -0
  260. package/dist/custom/master-data-grid/index.js.map +1 -0
  261. package/dist/custom/master-data-grid/types.js +1 -0
  262. package/dist/custom/master-data-grid/types.js.map +1 -0
  263. package/dist/custom/master-data-grid/utils/column-generator.js +203 -0
  264. package/dist/custom/master-data-grid/utils/column-generator.js.map +1 -0
  265. package/dist/custom/master-data-grid/utils/export-utils.js +46 -0
  266. package/dist/custom/master-data-grid/utils/export-utils.js.map +1 -0
  267. package/dist/custom/master-data-grid/utils/filter-fns.js +218 -0
  268. package/dist/custom/master-data-grid/utils/filter-fns.js.map +1 -0
  269. package/dist/custom/master-data-grid/utils/index.js +16 -0
  270. package/dist/custom/master-data-grid/utils/index.js.map +1 -0
  271. package/dist/custom/master-data-grid/utils/pinning-utils.js +70 -0
  272. package/dist/custom/master-data-grid/utils/pinning-utils.js.map +1 -0
  273. package/dist/custom/master-data-grid/utils/translation-utils.js +33 -0
  274. package/dist/custom/master-data-grid/utils/translation-utils.js.map +1 -0
  275. package/dist/custom/multi-select.js +339 -0
  276. package/dist/custom/multi-select.js.map +1 -0
  277. package/dist/custom/password-input.js +158 -0
  278. package/dist/custom/password-input.js.map +1 -0
  279. package/dist/custom/phone-input.js +127 -0
  280. package/dist/custom/phone-input.js.map +1 -0
  281. package/dist/custom/schema-form/custom/index.js +2 -0
  282. package/dist/custom/schema-form/custom/index.js.map +1 -0
  283. package/dist/custom/schema-form/custom/label.js +39 -0
  284. package/dist/custom/schema-form/custom/label.js.map +1 -0
  285. package/dist/custom/schema-form/fields/base-input-field.js +73 -0
  286. package/dist/custom/schema-form/fields/base-input-field.js.map +1 -0
  287. package/dist/custom/schema-form/fields/field.js +72 -0
  288. package/dist/custom/schema-form/fields/field.js.map +1 -0
  289. package/dist/custom/schema-form/fields/index.js +6 -0
  290. package/dist/custom/schema-form/fields/index.js.map +1 -0
  291. package/dist/custom/schema-form/fields/object.js +9 -0
  292. package/dist/custom/schema-form/fields/object.js.map +1 -0
  293. package/dist/custom/schema-form/fields/table-array/array-field-item.js +58 -0
  294. package/dist/custom/schema-form/fields/table-array/array-field-item.js.map +1 -0
  295. package/dist/custom/schema-form/fields/table-array/array-field-template.js +104 -0
  296. package/dist/custom/schema-form/fields/table-array/array-field-template.js.map +1 -0
  297. package/dist/custom/schema-form/index.js +219 -0
  298. package/dist/custom/schema-form/index.js.map +1 -0
  299. package/dist/custom/schema-form/templates/description.js +19 -0
  300. package/dist/custom/schema-form/templates/description.js.map +1 -0
  301. package/dist/custom/schema-form/templates/index.js +3 -0
  302. package/dist/custom/schema-form/templates/index.js.map +1 -0
  303. package/dist/custom/schema-form/templates/submit.js +31 -0
  304. package/dist/custom/schema-form/templates/submit.js.map +1 -0
  305. package/dist/custom/schema-form/types.js +1 -0
  306. package/dist/custom/schema-form/types.js.map +1 -0
  307. package/dist/custom/schema-form/utils/index.js +10 -0
  308. package/dist/custom/schema-form/utils/index.js.map +1 -0
  309. package/dist/custom/schema-form/utils/schema-dependency.js +349 -0
  310. package/dist/custom/schema-form/utils/schema-dependency.js.map +1 -0
  311. package/dist/custom/schema-form/utils/schemas.js +190 -0
  312. package/dist/custom/schema-form/utils/schemas.js.map +1 -0
  313. package/dist/custom/schema-form/utils/validation.js +19 -0
  314. package/dist/custom/schema-form/utils/validation.js.map +1 -0
  315. package/dist/custom/schema-form/widgets/boolean.js +73 -0
  316. package/dist/custom/schema-form/widgets/boolean.js.map +1 -0
  317. package/dist/custom/schema-form/widgets/combobox.js +222 -0
  318. package/dist/custom/schema-form/widgets/combobox.js.map +1 -0
  319. package/dist/custom/schema-form/widgets/date.js +56 -0
  320. package/dist/custom/schema-form/widgets/date.js.map +1 -0
  321. package/dist/custom/schema-form/widgets/email.js +37 -0
  322. package/dist/custom/schema-form/widgets/email.js.map +1 -0
  323. package/dist/custom/schema-form/widgets/index.js +11 -0
  324. package/dist/custom/schema-form/widgets/index.js.map +1 -0
  325. package/dist/custom/schema-form/widgets/password.js +42 -0
  326. package/dist/custom/schema-form/widgets/password.js.map +1 -0
  327. package/dist/custom/schema-form/widgets/phone.js +39 -0
  328. package/dist/custom/schema-form/widgets/phone.js.map +1 -0
  329. package/dist/custom/schema-form/widgets/select.js +78 -0
  330. package/dist/custom/schema-form/widgets/select.js.map +1 -0
  331. package/dist/custom/schema-form/widgets/selectable.js +25 -0
  332. package/dist/custom/schema-form/widgets/selectable.js.map +1 -0
  333. package/dist/custom/schema-form/widgets/string-array.js +237 -0
  334. package/dist/custom/schema-form/widgets/string-array.js.map +1 -0
  335. package/dist/custom/schema-form/widgets/url.js +53 -0
  336. package/dist/custom/schema-form/widgets/url.js.map +1 -0
  337. package/dist/custom/section-layout-v2.js +150 -0
  338. package/dist/custom/section-layout-v2.js.map +1 -0
  339. package/dist/custom/select-tabs.js +66 -0
  340. package/dist/custom/select-tabs.js.map +1 -0
  341. package/dist/custom/selectable.js +231 -0
  342. package/dist/custom/selectable.js.map +1 -0
  343. package/dist/custom/stepper.js +166 -0
  344. package/dist/custom/stepper.js.map +1 -0
  345. package/dist/custom/tab-layout.js +182 -0
  346. package/dist/custom/tab-layout.js.map +1 -0
  347. package/dist/custom/tanstack-table/fields/index.js +13 -0
  348. package/dist/custom/tanstack-table/fields/index.js.map +1 -0
  349. package/dist/custom/tanstack-table/fields/tanstack-table-action-dialogs.js +76 -0
  350. package/dist/custom/tanstack-table/fields/tanstack-table-action-dialogs.js.map +1 -0
  351. package/dist/custom/tanstack-table/fields/tanstack-table-column-header.js +47 -0
  352. package/dist/custom/tanstack-table/fields/tanstack-table-column-header.js.map +1 -0
  353. package/dist/custom/tanstack-table/fields/tanstack-table-filter-date.js +132 -0
  354. package/dist/custom/tanstack-table/fields/tanstack-table-filter-date.js.map +1 -0
  355. package/dist/custom/tanstack-table/fields/tanstack-table-filter-faceted.js +131 -0
  356. package/dist/custom/tanstack-table/fields/tanstack-table-filter-faceted.js.map +1 -0
  357. package/dist/custom/tanstack-table/fields/tanstack-table-filter-text.js +64 -0
  358. package/dist/custom/tanstack-table/fields/tanstack-table-filter-text.js.map +1 -0
  359. package/dist/custom/tanstack-table/fields/tanstack-table-pagination.js +135 -0
  360. package/dist/custom/tanstack-table/fields/tanstack-table-pagination.js.map +1 -0
  361. package/dist/custom/tanstack-table/fields/tanstack-table-plain-table.js +111 -0
  362. package/dist/custom/tanstack-table/fields/tanstack-table-plain-table.js.map +1 -0
  363. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-confirmation.js +65 -0
  364. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-confirmation.js.map +1 -0
  365. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-custom-dialog.js +69 -0
  366. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-custom-dialog.js.map +1 -0
  367. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions.js +119 -0
  368. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions.js.map +1 -0
  369. package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-custom-dialog.js +75 -0
  370. package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-custom-dialog.js.map +1 -0
  371. package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-schemaform-dialog.js +41 -0
  372. package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-schemaform-dialog.js.map +1 -0
  373. package/dist/custom/tanstack-table/fields/tanstack-table-toolbar.js +106 -0
  374. package/dist/custom/tanstack-table/fields/tanstack-table-toolbar.js.map +1 -0
  375. package/dist/custom/tanstack-table/fields/tanstack-table-view-options.js +132 -0
  376. package/dist/custom/tanstack-table/fields/tanstack-table-view-options.js.map +1 -0
  377. package/dist/custom/tanstack-table/index.js +217 -0
  378. package/dist/custom/tanstack-table/index.js.map +1 -0
  379. package/dist/custom/tanstack-table/types/index.js +1 -0
  380. package/dist/custom/tanstack-table/types/index.js.map +1 -0
  381. package/dist/custom/tanstack-table/utils/cell-with-actions.js +16 -0
  382. package/dist/custom/tanstack-table/utils/cell-with-actions.js.map +1 -0
  383. package/dist/custom/tanstack-table/utils/column-names.js +15 -0
  384. package/dist/custom/tanstack-table/utils/column-names.js.map +1 -0
  385. package/dist/custom/tanstack-table/utils/columns-by-row-data.js +246 -0
  386. package/dist/custom/tanstack-table/utils/columns-by-row-data.js.map +1 -0
  387. package/dist/custom/tanstack-table/utils/editable-columns-by-row-data.js +187 -0
  388. package/dist/custom/tanstack-table/utils/editable-columns-by-row-data.js.map +1 -0
  389. package/dist/custom/tanstack-table/utils/faceted-boolean-options.js +25 -0
  390. package/dist/custom/tanstack-table/utils/faceted-boolean-options.js.map +1 -0
  391. package/dist/custom/tanstack-table/utils/index.js +10 -0
  392. package/dist/custom/tanstack-table/utils/index.js.map +1 -0
  393. package/dist/custom/tanstack-table/utils/pinning-styles.js +38 -0
  394. package/dist/custom/tanstack-table/utils/pinning-styles.js.map +1 -0
  395. package/dist/custom/tanstack-table/utils/table.js +66 -0
  396. package/dist/custom/tanstack-table/utils/table.js.map +1 -0
  397. package/dist/custom/tanstack-table/utils/test-conditions.js +10 -0
  398. package/dist/custom/tanstack-table/utils/test-conditions.js.map +1 -0
  399. package/dist/custom/timeline.js +165 -0
  400. package/dist/custom/timeline.js.map +1 -0
  401. package/dist/custom/tree.js +130 -0
  402. package/dist/custom/tree.js.map +1 -0
  403. package/dist/custom/tscanify/browser.js +36 -0
  404. package/dist/custom/tscanify/browser.js.map +1 -0
  405. package/dist/custom/tscanify/index.js +34 -0
  406. package/dist/custom/tscanify/index.js.map +1 -0
  407. package/dist/custom/tscanify/tscanify-browser.js +363 -0
  408. package/dist/custom/tscanify/tscanify-browser.js.map +1 -0
  409. package/dist/custom/tscanify/tscanify.js +197 -0
  410. package/dist/custom/tscanify/tscanify.js.map +1 -0
  411. package/dist/custom/tscanify/types.js +1 -0
  412. package/dist/custom/tscanify/types.js.map +1 -0
  413. package/dist/custom/webcam.js +519 -0
  414. package/dist/custom/webcam.js.map +1 -0
  415. package/dist/hooks/use-callback-ref.js +15 -0
  416. package/dist/hooks/use-callback-ref.js.map +1 -0
  417. package/dist/hooks/use-controllable-state.js +49 -0
  418. package/dist/hooks/use-controllable-state.js.map +1 -0
  419. package/dist/hooks/use-debounce.js +18 -0
  420. package/dist/hooks/use-debounce.js.map +1 -0
  421. package/dist/hooks/use-is-visible.js +22 -0
  422. package/dist/hooks/use-is-visible.js.map +1 -0
  423. package/dist/hooks/use-media-query.js +19 -0
  424. package/dist/hooks/use-media-query.js.map +1 -0
  425. package/dist/hooks/use-mobile.js +21 -0
  426. package/dist/hooks/use-mobile.js.map +1 -0
  427. package/dist/hooks/use-on-window-resize.js +15 -0
  428. package/dist/hooks/use-on-window-resize.js.map +1 -0
  429. package/dist/hooks/use-scroll.js +20 -0
  430. package/dist/hooks/use-scroll.js.map +1 -0
  431. package/dist/lib/utils.js +48 -0
  432. package/dist/lib/utils.js.map +1 -0
  433. package/dist/lib/zod.js +7 -0
  434. package/dist/lib/zod.js.map +1 -0
  435. package/package.json +34 -8
  436. package/src/aria/index.tsx +1 -1
  437. package/src/aria/number-field.tsx +41 -41
  438. package/src/components/accordion.tsx +66 -66
  439. package/src/components/alert-dialog.tsx +157 -157
  440. package/src/components/alert.tsx +70 -70
  441. package/src/components/aspect-ratio.tsx +11 -11
  442. package/src/components/avatar.tsx +53 -53
  443. package/src/components/badge.tsx +74 -67
  444. package/src/components/breadcrumb.tsx +109 -109
  445. package/src/components/button-group.tsx +83 -83
  446. package/src/components/button.tsx +69 -68
  447. package/src/components/calendar.tsx +216 -219
  448. package/src/components/card.tsx +92 -92
  449. package/src/components/carousel.tsx +241 -241
  450. package/src/components/chart.tsx +363 -363
  451. package/src/components/checkbox.tsx +32 -32
  452. package/src/components/collapsible.tsx +33 -33
  453. package/src/components/command.tsx +184 -184
  454. package/src/components/context-menu.tsx +252 -252
  455. package/src/components/dialog.tsx +144 -144
  456. package/src/components/drawer.tsx +135 -135
  457. package/src/components/dropdown-menu.tsx +258 -258
  458. package/src/components/empty.tsx +100 -100
  459. package/src/components/field.tsx +248 -248
  460. package/src/components/form.tsx +169 -169
  461. package/src/components/hover-card.tsx +44 -44
  462. package/src/components/input-group.tsx +170 -170
  463. package/src/components/input-otp.tsx +77 -77
  464. package/src/components/input.tsx +21 -21
  465. package/src/components/item.tsx +193 -193
  466. package/src/components/kbd.tsx +28 -28
  467. package/src/components/label.tsx +24 -24
  468. package/src/components/menubar.tsx +276 -276
  469. package/src/components/navigation-menu.tsx +168 -168
  470. package/src/components/pagination.tsx +127 -130
  471. package/src/components/popover.tsx +88 -88
  472. package/src/components/progress.tsx +31 -31
  473. package/src/components/radio-group.tsx +45 -45
  474. package/src/components/resizable.tsx +56 -56
  475. package/src/components/scroll-area.tsx +58 -58
  476. package/src/components/select.tsx +189 -189
  477. package/src/components/separator.tsx +28 -28
  478. package/src/components/sheet.tsx +140 -140
  479. package/src/components/sidebar.tsx +862 -862
  480. package/src/components/skeleton.tsx +13 -13
  481. package/src/components/slider.tsx +63 -63
  482. package/src/components/sonner.tsx +40 -40
  483. package/src/components/spinner.tsx +16 -16
  484. package/src/components/stepper.tsx +290 -291
  485. package/src/components/switch.tsx +31 -31
  486. package/src/components/table.tsx +133 -133
  487. package/src/components/tabs.tsx +66 -66
  488. package/src/components/textarea.tsx +18 -18
  489. package/src/components/toggle-group.tsx +83 -83
  490. package/src/components/toggle.tsx +47 -47
  491. package/src/components/tooltip.tsx +66 -66
  492. package/src/custom/action-button.tsx +45 -48
  493. package/src/custom/async-select.tsx +287 -287
  494. package/src/custom/awesome-not-found.tsx +116 -116
  495. package/src/custom/charts/area-chart.tsx +147 -147
  496. package/src/custom/charts/bar-chart.tsx +233 -233
  497. package/src/custom/charts/chart-card.tsx +103 -103
  498. package/src/custom/charts/index.tsx +16 -16
  499. package/src/custom/charts/pie-chart.tsx +168 -168
  500. package/src/custom/charts/radar-chart.tsx +126 -126
  501. package/src/custom/checkbox-tree.tsx +100 -100
  502. package/src/custom/combobox.tsx +296 -296
  503. package/src/custom/confirm-dialog.tsx +114 -102
  504. package/src/custom/country-selector.tsx +204 -204
  505. package/src/custom/date-picker/calendar-rac.tsx +109 -109
  506. package/src/custom/date-picker/datefield-rac.tsx +84 -84
  507. package/src/custom/date-picker/index.tsx +273 -273
  508. package/src/custom/date-picker/types/index.ts +4 -4
  509. package/src/custom/date-picker/utils/index.ts +42 -42
  510. package/src/custom/date-picker-old.tsx +50 -50
  511. package/src/custom/date-tooltip.tsx +98 -98
  512. package/src/custom/document-scanner/consts.ts +5 -5
  513. package/src/custom/document-scanner/corner-adjustment/action-buttons.tsx +33 -33
  514. package/src/custom/document-scanner/corner-adjustment/corner-handle.tsx +43 -43
  515. package/src/custom/document-scanner/corner-adjustment/hooks/use-corner-drag.ts +85 -85
  516. package/src/custom/document-scanner/corner-adjustment/index.tsx +125 -125
  517. package/src/custom/document-scanner/corner-adjustment/types.ts +53 -53
  518. package/src/custom/document-scanner/corner-adjustment/utils/clip-path.ts +22 -22
  519. package/src/custom/document-scanner/corner-adjustment/zoom-magnifier.tsx +115 -115
  520. package/src/custom/document-scanner/hooks/use-document-capture.ts +81 -81
  521. package/src/custom/document-scanner/hooks/use-document-scanner.ts +80 -80
  522. package/src/custom/document-scanner/hooks/use-perspective-crop.ts +38 -38
  523. package/src/custom/document-scanner/index.tsx +255 -255
  524. package/src/custom/document-scanner/lib.ts +407 -407
  525. package/src/custom/document-scanner/types.ts +205 -205
  526. package/src/custom/document-scanner/utils/perspective-correction.ts +139 -139
  527. package/src/custom/document-viewer/controllers.tsx +98 -98
  528. package/src/custom/document-viewer/index.tsx +43 -43
  529. package/src/custom/document-viewer/renderers/image.tsx +37 -37
  530. package/src/custom/document-viewer/renderers/index.tsx +2 -2
  531. package/src/custom/document-viewer/renderers/pdf.tsx +105 -105
  532. package/src/custom/email-input/domains.json +159 -159
  533. package/src/custom/email-input/email.tsx +231 -229
  534. package/src/custom/email-input/index.tsx +4 -4
  535. package/src/custom/email-input/types.ts +104 -104
  536. package/src/custom/file-uploader.tsx +541 -541
  537. package/src/custom/filter-component/fields/async-select.tsx +33 -33
  538. package/src/custom/filter-component/fields/date.tsx +60 -60
  539. package/src/custom/filter-component/fields/multi-select.tsx +30 -30
  540. package/src/custom/filter-component/index.tsx +217 -217
  541. package/src/custom/image-canvas.tsx +260 -260
  542. package/src/custom/json-editor.tsx +22 -22
  543. package/src/custom/master-data-grid/components/dialogs/column-settings-dialog.tsx +100 -100
  544. package/src/custom/master-data-grid/components/dialogs/index.ts +1 -1
  545. package/src/custom/master-data-grid/components/filters/client-filter.tsx +369 -368
  546. package/src/custom/master-data-grid/components/filters/filter-input.tsx +256 -256
  547. package/src/custom/master-data-grid/components/filters/index.ts +3 -3
  548. package/src/custom/master-data-grid/components/filters/inline-column-filter.tsx +233 -233
  549. package/src/custom/master-data-grid/components/filters/multi-filter-dialog.tsx +91 -90
  550. package/src/custom/master-data-grid/components/filters/server-filter.tsx +265 -255
  551. package/src/custom/master-data-grid/components/master-data-grid.tsx +472 -472
  552. package/src/custom/master-data-grid/components/pagination/index.ts +1 -1
  553. package/src/custom/master-data-grid/components/pagination/pagination.tsx +178 -178
  554. package/src/custom/master-data-grid/components/table/cell-renderer.tsx +621 -634
  555. package/src/custom/master-data-grid/components/table/header-cell.tsx +162 -162
  556. package/src/custom/master-data-grid/components/table/index.ts +4 -4
  557. package/src/custom/master-data-grid/components/table/table-body-renderer.tsx +113 -113
  558. package/src/custom/master-data-grid/components/table/virtual-body.tsx +138 -138
  559. package/src/custom/master-data-grid/components/toolbar/index.ts +1 -1
  560. package/src/custom/master-data-grid/components/toolbar/toolbar.tsx +314 -314
  561. package/src/custom/master-data-grid/hooks/index.ts +3 -3
  562. package/src/custom/master-data-grid/hooks/use-columns.tsx +353 -332
  563. package/src/custom/master-data-grid/hooks/use-editing.ts +106 -106
  564. package/src/custom/master-data-grid/hooks/use-table-state-reducer.ts +157 -157
  565. package/src/custom/master-data-grid/hooks/use-table-state.ts +31 -31
  566. package/src/custom/master-data-grid/index.ts +16 -16
  567. package/src/custom/master-data-grid/types.ts +487 -466
  568. package/src/custom/master-data-grid/utils/column-generator.tsx +324 -306
  569. package/src/custom/master-data-grid/utils/export-utils.ts +67 -67
  570. package/src/custom/master-data-grid/utils/filter-fns.ts +310 -290
  571. package/src/custom/master-data-grid/utils/index.ts +8 -8
  572. package/src/custom/master-data-grid/utils/pinning-utils.ts +88 -88
  573. package/src/custom/master-data-grid/utils/translation-utils.ts +42 -42
  574. package/src/custom/multi-select.tsx +434 -432
  575. package/src/custom/password-input.tsx +194 -194
  576. package/src/custom/phone-input.tsx +172 -172
  577. package/src/custom/schema-form/custom/index.tsx +1 -1
  578. package/src/custom/schema-form/custom/label.tsx +53 -53
  579. package/src/custom/schema-form/fields/base-input-field.tsx +82 -82
  580. package/src/custom/schema-form/fields/field.tsx +67 -67
  581. package/src/custom/schema-form/fields/index.tsx +5 -5
  582. package/src/custom/schema-form/fields/object.tsx +12 -12
  583. package/src/custom/schema-form/fields/table-array/array-field-item.tsx +90 -90
  584. package/src/custom/schema-form/fields/table-array/array-field-template.tsx +115 -115
  585. package/src/custom/schema-form/index.tsx +259 -259
  586. package/src/custom/schema-form/templates/description.tsx +20 -20
  587. package/src/custom/schema-form/templates/index.tsx +2 -2
  588. package/src/custom/schema-form/templates/submit.tsx +32 -32
  589. package/src/custom/schema-form/types.ts +64 -64
  590. package/src/custom/schema-form/utils/index.ts +4 -4
  591. package/src/custom/schema-form/utils/schema-dependency.ts +655 -655
  592. package/src/custom/schema-form/utils/schemas.ts +289 -289
  593. package/src/custom/schema-form/utils/validation.ts +23 -23
  594. package/src/custom/schema-form/widgets/boolean.tsx +77 -77
  595. package/src/custom/schema-form/widgets/combobox.tsx +274 -274
  596. package/src/custom/schema-form/widgets/date.tsx +59 -59
  597. package/src/custom/schema-form/widgets/email.tsx +34 -34
  598. package/src/custom/schema-form/widgets/index.tsx +10 -10
  599. package/src/custom/schema-form/widgets/password.tsx +40 -40
  600. package/src/custom/schema-form/widgets/phone.tsx +40 -40
  601. package/src/custom/schema-form/widgets/select.tsx +105 -105
  602. package/src/custom/schema-form/widgets/selectable.tsx +25 -25
  603. package/src/custom/schema-form/widgets/string-array.tsx +296 -296
  604. package/src/custom/schema-form/widgets/url.tsx +56 -56
  605. package/src/custom/section-layout-v2.tsx +212 -212
  606. package/src/custom/select-tabs.tsx +109 -109
  607. package/src/custom/selectable.tsx +316 -316
  608. package/src/custom/stepper.tsx +236 -236
  609. package/src/custom/tab-layout.tsx +213 -213
  610. package/src/custom/tanstack-table/fields/index.tsx +12 -12
  611. package/src/custom/tanstack-table/fields/tanstack-table-action-dialogs.tsx +89 -89
  612. package/src/custom/tanstack-table/fields/tanstack-table-column-header.tsx +68 -66
  613. package/src/custom/tanstack-table/fields/tanstack-table-filter-date.tsx +180 -180
  614. package/src/custom/tanstack-table/fields/tanstack-table-filter-faceted.tsx +158 -158
  615. package/src/custom/tanstack-table/fields/tanstack-table-filter-text.tsx +73 -76
  616. package/src/custom/tanstack-table/fields/tanstack-table-pagination.tsx +136 -136
  617. package/src/custom/tanstack-table/fields/tanstack-table-plain-table.tsx +142 -142
  618. package/src/custom/tanstack-table/fields/tanstack-table-row-actions-confirmation.tsx +77 -77
  619. package/src/custom/tanstack-table/fields/tanstack-table-row-actions-custom-dialog.tsx +87 -87
  620. package/src/custom/tanstack-table/fields/tanstack-table-row-actions.tsx +151 -151
  621. package/src/custom/tanstack-table/fields/tanstack-table-table-actions-custom-dialog.tsx +88 -88
  622. package/src/custom/tanstack-table/fields/tanstack-table-table-actions-schemaform-dialog.tsx +47 -47
  623. package/src/custom/tanstack-table/fields/tanstack-table-toolbar.tsx +143 -143
  624. package/src/custom/tanstack-table/fields/tanstack-table-view-options.tsx +171 -171
  625. package/src/custom/tanstack-table/index.tsx +244 -244
  626. package/src/custom/tanstack-table/types/index.ts +328 -328
  627. package/src/custom/tanstack-table/utils/cell-with-actions.tsx +21 -21
  628. package/src/custom/tanstack-table/utils/column-names.ts +26 -26
  629. package/src/custom/tanstack-table/utils/columns-by-row-data.tsx +312 -312
  630. package/src/custom/tanstack-table/utils/editable-columns-by-row-data.tsx +219 -219
  631. package/src/custom/tanstack-table/utils/faceted-boolean-options.tsx +22 -22
  632. package/src/custom/tanstack-table/utils/index.tsx +10 -10
  633. package/src/custom/tanstack-table/utils/pinning-styles.ts +57 -57
  634. package/src/custom/tanstack-table/utils/table.tsx +83 -83
  635. package/src/custom/tanstack-table/utils/test-conditions.ts +17 -17
  636. package/src/custom/timeline.tsx +208 -208
  637. package/src/custom/tree.tsx +202 -200
  638. package/src/custom/tscanify/browser.ts +66 -66
  639. package/src/custom/tscanify/index.ts +51 -51
  640. package/src/custom/tscanify/tscanify-browser.ts +522 -522
  641. package/src/custom/tscanify/tscanify.ts +262 -262
  642. package/src/custom/tscanify/types.ts +22 -22
  643. package/src/custom/webcam.tsx +737 -737
  644. package/src/hooks/use-callback-ref.ts +27 -27
  645. package/src/hooks/use-controllable-state.ts +67 -67
  646. package/src/hooks/use-debounce.ts +19 -19
  647. package/src/hooks/use-is-visible.ts +23 -23
  648. package/src/hooks/use-media-query.ts +21 -21
  649. package/src/hooks/use-mobile.ts +21 -21
  650. package/src/hooks/use-on-window-resize.ts +15 -15
  651. package/src/hooks/use-scroll.tsx +22 -22
  652. package/src/lib/utils.ts +61 -61
  653. package/src/lib/zod.ts +2 -2
  654. package/src/styles/core.css +57 -57
  655. package/src/test/email-input.test.tsx +217 -217
  656. package/src/test/password-input.test.tsx +92 -92
  657. package/src/test/select-tabs.test.tsx +302 -302
  658. package/src/test/selectable.test.tsx +1093 -1093
  659. package/__mocks__/canvas.ts +0 -8
  660. package/components.json +0 -21
  661. package/eslint.config.js +0 -4
  662. package/jest-environment.js +0 -37
  663. package/jest.config.ts +0 -47
  664. package/jest.setup.ts +0 -69
  665. package/postcss.config.mjs +0 -6
  666. package/tsconfig.json +0 -13
  667. package/tsconfig.lint.json +0 -8
@@ -0,0 +1,130 @@
1
+ "use client";
2
+ "use no memo";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import * as React from "react";
5
+ import { ChevronDownIcon } from "lucide-react";
6
+ import { Slot } from "radix-ui";
7
+ export * from "@headless-tree/core";
8
+ export * from "@headless-tree/react";
9
+ import { cn } from "@repo/ayasofyazilim-ui/lib/utils";
10
+ const TreeContext = React.createContext({
11
+ indent: 20,
12
+ currentItem: void 0,
13
+ tree: void 0
14
+ });
15
+ function useTreeContext() {
16
+ return React.useContext(TreeContext);
17
+ }
18
+ function Tree({ indent = 20, tree, className, ...props }) {
19
+ const containerProps = tree && typeof tree.getContainerProps === "function" ? tree.getContainerProps() : {};
20
+ const mergedProps = { ...props, ...containerProps };
21
+ const { style: propStyle, ...otherProps } = mergedProps;
22
+ const mergedStyle = {
23
+ ...propStyle,
24
+ "--tree-indent": `${indent}px`
25
+ };
26
+ return /* @__PURE__ */ jsx(TreeContext.Provider, { value: { indent, tree }, children: /* @__PURE__ */ jsx(
27
+ "div",
28
+ {
29
+ "data-slot": "tree",
30
+ style: mergedStyle,
31
+ className: cn("flex flex-col", className),
32
+ ...otherProps
33
+ }
34
+ ) });
35
+ }
36
+ function TreeItem({
37
+ item,
38
+ className,
39
+ asChild,
40
+ children,
41
+ ...props
42
+ }) {
43
+ const { indent } = useTreeContext();
44
+ const itemProps = typeof item.getProps === "function" ? item.getProps() : {};
45
+ const mergedProps = { ...props, ...itemProps };
46
+ const { style: propStyle, ...otherProps } = mergedProps;
47
+ const mergedStyle = {
48
+ ...propStyle,
49
+ "--tree-padding": `${item.getItemMeta().level * indent}px`
50
+ };
51
+ const Comp = asChild ? Slot.Root : "button";
52
+ return /* @__PURE__ */ jsx(TreeContext.Provider, { value: { indent, currentItem: item }, children: /* @__PURE__ */ jsx(
53
+ Comp,
54
+ {
55
+ "data-slot": "tree-item",
56
+ style: mergedStyle,
57
+ className: cn(
58
+ "z-10 ps-(--tree-padding) outline-hidden select-none not-last:pb-0.5 focus:z-20 data-disabled:pointer-events-none data-disabled:opacity-50",
59
+ className
60
+ ),
61
+ "data-focus": typeof item.isFocused === "function" ? item.isFocused() || false : void 0,
62
+ "data-folder": typeof item.isFolder === "function" ? item.isFolder() || false : void 0,
63
+ "data-selected": typeof item.isSelected === "function" ? item.isSelected() || false : void 0,
64
+ "data-drag-target": typeof item.isDragTarget === "function" ? item.isDragTarget() || false : void 0,
65
+ "data-search-match": typeof item.isMatchingSearch === "function" ? item.isMatchingSearch() || false : void 0,
66
+ "aria-expanded": item.isExpanded(),
67
+ ...otherProps,
68
+ children
69
+ }
70
+ ) });
71
+ }
72
+ function TreeItemLabel({
73
+ item: propItem,
74
+ children,
75
+ className,
76
+ ...props
77
+ }) {
78
+ const { currentItem } = useTreeContext();
79
+ const item = propItem || currentItem;
80
+ if (!item) {
81
+ console.warn("TreeItemLabel: No item provided via props or context");
82
+ return null;
83
+ }
84
+ return /* @__PURE__ */ jsxs(
85
+ "span",
86
+ {
87
+ "data-slot": "tree-item-label",
88
+ className: cn(
89
+ "flex items-center gap-1 rounded-sm bg-background px-2 py-1.5 text-sm transition-colors not-in-data-[folder=true]:ps-7 hover:bg-accent in-focus-visible:ring-[3px] in-focus-visible:ring-ring/50 in-data-[drag-target=true]:bg-accent in-data-[search-match=true]:bg-blue-400/20! in-data-[selected=true]:bg-accent in-data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0",
90
+ className
91
+ ),
92
+ ...props,
93
+ children: [
94
+ item.isFolder() && /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4 text-muted-foreground in-aria-[expanded=false]:-rotate-90" }),
95
+ children || (typeof item.getItemName === "function" ? item.getItemName() : null)
96
+ ]
97
+ }
98
+ );
99
+ }
100
+ function TreeDragLine({
101
+ className,
102
+ ...props
103
+ }) {
104
+ const { tree } = useTreeContext();
105
+ if (!tree || typeof tree.getDragLineStyle !== "function") {
106
+ console.warn(
107
+ "TreeDragLine: No tree provided via context or tree does not have getDragLineStyle method"
108
+ );
109
+ return null;
110
+ }
111
+ const dragLine = tree.getDragLineStyle();
112
+ return /* @__PURE__ */ jsx(
113
+ "div",
114
+ {
115
+ style: dragLine,
116
+ className: cn(
117
+ "absolute z-30 -mt-px h-0.5 w-[unset] bg-primary before:absolute before:-top-[3px] before:left-0 before:size-2 before:rounded-full before:border-2 before:border-primary before:bg-background",
118
+ className
119
+ ),
120
+ ...props
121
+ }
122
+ );
123
+ }
124
+ export {
125
+ Tree,
126
+ TreeDragLine,
127
+ TreeItem,
128
+ TreeItemLabel
129
+ };
130
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/custom/tree.tsx"],"sourcesContent":["\"use client\";\r\n\"use no memo\";\r\n\r\nimport * as React from \"react\";\r\nimport { ItemInstance } from \"@headless-tree/core\";\r\nimport { ChevronDownIcon } from \"lucide-react\";\r\nimport { Slot } from \"radix-ui\";\r\nexport * from \"@headless-tree/core\";\r\nexport * from \"@headless-tree/react\";\r\nimport { cn } from \"@repo/ayasofyazilim-ui/lib/utils\";\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ninterface TreeContextValue<T = any> {\r\n indent: number;\r\n currentItem?: ItemInstance<T>;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tree?: any;\r\n}\r\n\r\nconst TreeContext = React.createContext<TreeContextValue>({\r\n indent: 20,\r\n currentItem: undefined,\r\n tree: undefined,\r\n});\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction useTreeContext<T = any>() {\r\n return React.useContext(TreeContext) as TreeContextValue<T>;\r\n}\r\n\r\ninterface TreeProps extends React.HTMLAttributes<HTMLDivElement> {\r\n indent?: number;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tree?: any;\r\n}\r\n\r\nfunction Tree({ indent = 20, tree, className, ...props }: TreeProps) {\r\n const containerProps =\r\n tree && typeof tree.getContainerProps === \"function\"\r\n ? tree.getContainerProps()\r\n : {};\r\n const mergedProps = { ...props, ...containerProps };\r\n\r\n // Extract style from mergedProps to merge with our custom styles\r\n const { style: propStyle, ...otherProps } = mergedProps;\r\n\r\n // Merge styles\r\n const mergedStyle = {\r\n ...propStyle,\r\n \"--tree-indent\": `${indent}px`,\r\n } as React.CSSProperties;\r\n\r\n return (\r\n <TreeContext.Provider value={{ indent, tree }}>\r\n <div\r\n data-slot=\"tree\"\r\n style={mergedStyle}\r\n className={cn(\"flex flex-col\", className)}\r\n {...otherProps}\r\n />\r\n </TreeContext.Provider>\r\n );\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ninterface TreeItemProps<T = any>\r\n extends React.HTMLAttributes<HTMLButtonElement> {\r\n item: ItemInstance<T>;\r\n indent?: number;\r\n asChild?: boolean;\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction TreeItem<T = any>({\r\n item,\r\n className,\r\n asChild,\r\n children,\r\n ...props\r\n}: Omit<TreeItemProps<T>, \"indent\">) {\r\n const { indent } = useTreeContext<T>();\r\n\r\n const itemProps = typeof item.getProps === \"function\" ? item.getProps() : {};\r\n const mergedProps = { ...props, ...itemProps };\r\n\r\n // Extract style from mergedProps to merge with our custom styles\r\n const { style: propStyle, ...otherProps } = mergedProps;\r\n\r\n // Merge styles\r\n const mergedStyle = {\r\n ...propStyle,\r\n \"--tree-padding\": `${item.getItemMeta().level * indent}px`,\r\n } as React.CSSProperties;\r\n\r\n const Comp = asChild ? Slot.Root : \"button\";\r\n\r\n return (\r\n <TreeContext.Provider value={{ indent, currentItem: item }}>\r\n <Comp\r\n data-slot=\"tree-item\"\r\n style={mergedStyle}\r\n className={cn(\r\n \"z-10 ps-(--tree-padding) outline-hidden select-none not-last:pb-0.5 focus:z-20 data-disabled:pointer-events-none data-disabled:opacity-50\",\r\n className\r\n )}\r\n data-focus={\r\n typeof item.isFocused === \"function\"\r\n ? item.isFocused() || false\r\n : undefined\r\n }\r\n data-folder={\r\n typeof item.isFolder === \"function\"\r\n ? item.isFolder() || false\r\n : undefined\r\n }\r\n data-selected={\r\n typeof item.isSelected === \"function\"\r\n ? item.isSelected() || false\r\n : undefined\r\n }\r\n data-drag-target={\r\n typeof item.isDragTarget === \"function\"\r\n ? item.isDragTarget() || false\r\n : undefined\r\n }\r\n data-search-match={\r\n typeof item.isMatchingSearch === \"function\"\r\n ? item.isMatchingSearch() || false\r\n : undefined\r\n }\r\n aria-expanded={item.isExpanded()}\r\n {...otherProps}\r\n >\r\n {children}\r\n </Comp>\r\n </TreeContext.Provider>\r\n );\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ninterface TreeItemLabelProps<T = any>\r\n extends React.HTMLAttributes<HTMLSpanElement> {\r\n item?: ItemInstance<T>;\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction TreeItemLabel<T = any>({\r\n item: propItem,\r\n children,\r\n className,\r\n ...props\r\n}: TreeItemLabelProps<T>) {\r\n const { currentItem } = useTreeContext<T>();\r\n const item = propItem || currentItem;\r\n\r\n if (!item) {\r\n console.warn(\"TreeItemLabel: No item provided via props or context\");\r\n return null;\r\n }\r\n\r\n return (\r\n <span\r\n data-slot=\"tree-item-label\"\r\n className={cn(\r\n \"flex items-center gap-1 rounded-sm bg-background px-2 py-1.5 text-sm transition-colors not-in-data-[folder=true]:ps-7 hover:bg-accent in-focus-visible:ring-[3px] in-focus-visible:ring-ring/50 in-data-[drag-target=true]:bg-accent in-data-[search-match=true]:bg-blue-400/20! in-data-[selected=true]:bg-accent in-data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {item.isFolder() && (\r\n <ChevronDownIcon className=\"size-4 text-muted-foreground in-aria-[expanded=false]:-rotate-90\" />\r\n )}\r\n {children ||\r\n (typeof item.getItemName === \"function\" ? item.getItemName() : null)}\r\n </span>\r\n );\r\n}\r\n\r\nfunction TreeDragLine({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) {\r\n const { tree } = useTreeContext();\r\n\r\n if (!tree || typeof tree.getDragLineStyle !== \"function\") {\r\n console.warn(\r\n \"TreeDragLine: No tree provided via context or tree does not have getDragLineStyle method\"\r\n );\r\n return null;\r\n }\r\n\r\n const dragLine = tree.getDragLineStyle();\r\n return (\r\n <div\r\n style={dragLine}\r\n className={cn(\r\n \"absolute z-30 -mt-px h-0.5 w-[unset] bg-primary before:absolute before:-top-[3px] before:left-0 before:size-2 before:rounded-full before:border-2 before:border-primary before:bg-background\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport { Tree, TreeItem, TreeItemLabel, TreeDragLine };\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,36 @@
1
+ /*! tscanify browser entry point v1.0.0 | MIT License */
2
+ import { TScanifyBrowser } from "./tscanify-browser";
3
+ export * from "./types";
4
+ import cv from "opencv-ts";
5
+ if (typeof window !== "undefined") {
6
+ if (!window.cv || !window.cv.Mat) {
7
+ window.cv = cv;
8
+ }
9
+ }
10
+ import { TScanifyBrowser as TScanifyBrowser2 } from "./tscanify-browser";
11
+ var browser_default = TScanifyBrowser2;
12
+ function createScanner() {
13
+ const scanner = new TScanifyBrowser2();
14
+ if (typeof window !== "undefined") {
15
+ if (!window.cv || !window.cv.Mat) {
16
+ if (cv && cv.Mat) {
17
+ window.cv = cv;
18
+ }
19
+ }
20
+ }
21
+ return scanner;
22
+ }
23
+ function isOpenCVReady() {
24
+ if (typeof window !== "undefined") {
25
+ return !!window.cv && !!window.cv.Mat;
26
+ }
27
+ return !!cv && !!cv.Mat;
28
+ }
29
+ export {
30
+ TScanifyBrowser,
31
+ createScanner,
32
+ cv,
33
+ browser_default as default,
34
+ isOpenCVReady
35
+ };
36
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/custom/tscanify/browser.ts"],"sourcesContent":["/*! tscanify browser entry point v1.0.0 | MIT License */\r\n\r\n/**\r\n * This file is a specific entry point for browser environments.\r\n * It only exports the browser-compatible implementation and avoids importing\r\n * any Node.js-specific modules like 'canvas' or 'jsdom'.\r\n */\r\n\r\n// Export the browser-specific implementation\r\nexport { TScanifyBrowser } from \"./tscanify-browser\";\r\n\r\n// Re-export types\r\nexport * from \"./types\";\r\n\r\n// Re-export opencv-ts for convenience\r\nimport cv from \"opencv-ts\";\r\nimport type { Mat, MatVector, Size, Rect } from \"opencv-ts\";\r\nexport { cv };\r\nexport type { Mat, MatVector, Size, Rect };\r\n\r\n// Initialize OpenCV if needed (browser environment only)\r\nif (typeof window !== \"undefined\") {\r\n // Check if OpenCV is already available globally\r\n if (\r\n !(window as unknown as WindowWithCV).cv ||\r\n !(window as unknown as WindowWithCV).cv.Mat\r\n ) {\r\n (window as unknown as WindowWithCV).cv = cv;\r\n }\r\n}\r\n\r\n// Export the browser implementation as the default for convenience\r\nimport { TScanifyBrowser } from \"./tscanify-browser\";\r\nimport { WindowWithCV } from \"./types\";\r\nexport default TScanifyBrowser;\r\n\r\n// Helper function to create a new instance and ensure OpenCV is ready\r\nexport function createScanner(): TScanifyBrowser {\r\n const scanner = new TScanifyBrowser();\r\n\r\n // If in browser, ensure OpenCV is available\r\n if (typeof window !== \"undefined\") {\r\n // Try to make cv from opencv-ts available globally if not already\r\n if (\r\n !(window as unknown as WindowWithCV).cv ||\r\n !(window as unknown as WindowWithCV).cv.Mat\r\n ) {\r\n if (cv && (cv as typeof cv).Mat) {\r\n (window as unknown as WindowWithCV).cv = cv;\r\n }\r\n }\r\n }\r\n\r\n return scanner;\r\n}\r\n\r\n// Helper function to check if OpenCV is loaded\r\nexport function isOpenCVReady(): boolean {\r\n if (typeof window !== \"undefined\") {\r\n return (\r\n !!(window as unknown as WindowWithCV).cv &&\r\n !!(window as unknown as WindowWithCV).cv.Mat\r\n );\r\n }\r\n return !!cv && !!(cv as typeof cv).Mat;\r\n}\r\n"],"mappings":"AAAA;AASA,SAAS,uBAAuB;AAGhC,cAAc;AAGd,OAAO,QAAQ;AAMf,IAAI,OAAO,WAAW,aAAa;AAEjC,MACE,CAAE,OAAmC,MACrC,CAAE,OAAmC,GAAG,KACxC;AACA,IAAC,OAAmC,KAAK;AAAA,EAC3C;AACF;AAGA,SAAS,mBAAAA,wBAAuB;AAEhC,IAAO,kBAAQA;AAGR,SAAS,gBAAiC;AAC/C,QAAM,UAAU,IAAIA,iBAAgB;AAGpC,MAAI,OAAO,WAAW,aAAa;AAEjC,QACE,CAAE,OAAmC,MACrC,CAAE,OAAmC,GAAG,KACxC;AACA,UAAI,MAAO,GAAiB,KAAK;AAC/B,QAAC,OAAmC,KAAK;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAGO,SAAS,gBAAyB;AACvC,MAAI,OAAO,WAAW,aAAa;AACjC,WACE,CAAC,CAAE,OAAmC,MACtC,CAAC,CAAE,OAAmC,GAAG;AAAA,EAE7C;AACA,SAAO,CAAC,CAAC,MAAM,CAAC,CAAE,GAAiB;AACrC;","names":["TScanifyBrowser"]}
@@ -0,0 +1,34 @@
1
+ /*! tscanify index v1.0.0 | MIT License */
2
+ export * from "./types";
3
+ let TScanify;
4
+ let TScanifyNode;
5
+ let TScanifyBrowser;
6
+ const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined";
7
+ if (isBrowser) {
8
+ import("./tscanify-browser").then((module) => {
9
+ TScanifyBrowser = module.TScanifyBrowser;
10
+ TScanify = TScanifyBrowser;
11
+ });
12
+ } else {
13
+ import("./tscanify").then((module) => {
14
+ TScanify = module.TScanify;
15
+ });
16
+ }
17
+ async function createTScanify() {
18
+ if (isBrowser) {
19
+ const { TScanifyBrowser: TScanifyBrowser2 } = await import("./tscanify-browser");
20
+ return new TScanifyBrowser2();
21
+ } else {
22
+ const { TScanify: TScanify2 } = await import("./tscanify");
23
+ return new TScanify2();
24
+ }
25
+ }
26
+ var tscanify_default = TScanify;
27
+ export {
28
+ TScanify,
29
+ TScanifyBrowser,
30
+ TScanifyNode,
31
+ createTScanify,
32
+ tscanify_default as default
33
+ };
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/custom/tscanify/index.ts"],"sourcesContent":["/*! tscanify index v1.0.0 | MIT License */\r\n\r\n// Export types\r\nexport * from \"./types\";\r\n\r\n// Re-export opencv-ts for convenience\r\nimport type { Mat, MatVector, Size, Rect } from \"opencv-ts\";\r\nexport type { Mat, MatVector, Size, Rect };\r\n\r\n// Dynamic imports based on environment\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nlet TScanify: any;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nlet TScanifyNode: any;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nlet TScanifyBrowser: any;\r\n\r\n// Detect browser environment\r\nconst isBrowser =\r\n typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\r\n\r\n// Use dynamic imports to avoid loading Node.js modules in the browser\r\nif (isBrowser) {\r\n // In browser environments, only import the browser version\r\n import(\"./tscanify-browser\").then((module) => {\r\n TScanifyBrowser = module.TScanifyBrowser;\r\n TScanify = TScanifyBrowser;\r\n });\r\n} else {\r\n // In Node.js environments, we can safely import the Node versions\r\n import(\"./tscanify\").then((module) => {\r\n TScanify = module.TScanify;\r\n });\r\n}\r\n\r\n// Use dynamic import approach in function form for better browser bundling\r\nexport async function createTScanify() {\r\n if (isBrowser) {\r\n const { TScanifyBrowser } = await import(\"./tscanify-browser\");\r\n return new TScanifyBrowser();\r\n } else {\r\n const { TScanify } = await import(\"./tscanify\");\r\n return new TScanify();\r\n }\r\n}\r\n\r\n// Export for backward compatibility\r\nexport { TScanify, TScanifyBrowser, TScanifyNode };\r\n\r\n// Default export for backward compatibility\r\nexport default TScanify;\r\n"],"mappings":"AAAA;AAGA,cAAc;AAQd,IAAI;AAEJ,IAAI;AAEJ,IAAI;AAGJ,MAAM,YACJ,OAAO,WAAW,eAAe,OAAO,OAAO,aAAa;AAG9D,IAAI,WAAW;AAEb,SAAO,oBAAoB,EAAE,KAAK,CAAC,WAAW;AAC5C,sBAAkB,OAAO;AACzB,eAAW;AAAA,EACb,CAAC;AACH,OAAO;AAEL,SAAO,YAAY,EAAE,KAAK,CAAC,WAAW;AACpC,eAAW,OAAO;AAAA,EACpB,CAAC;AACH;AAGA,eAAsB,iBAAiB;AACrC,MAAI,WAAW;AACb,UAAM,EAAE,iBAAAA,iBAAgB,IAAI,MAAM,OAAO,oBAAoB;AAC7D,WAAO,IAAIA,iBAAgB;AAAA,EAC7B,OAAO;AACL,UAAM,EAAE,UAAAC,UAAS,IAAI,MAAM,OAAO,YAAY;AAC9C,WAAO,IAAIA,UAAS;AAAA,EACtB;AACF;AAMA,IAAO,mBAAQ;","names":["TScanifyBrowser","TScanify"]}
@@ -0,0 +1,363 @@
1
+ /*! tscanify-browser v1.0.0 | Based on jscanify v1.4.0 | (c) ColonelParrot and other contributors | MIT License */
2
+ import cv from "opencv-ts";
3
+ function distance(p1, p2) {
4
+ return Math.hypot(p1.x - p2.x, p1.y - p2.y);
5
+ }
6
+ class TScanifyBrowser {
7
+ constructor() {
8
+ }
9
+ /**
10
+ * Loads OpenCV module
11
+ * @param callback Function to call when OpenCV is initialized
12
+ */
13
+ loadOpenCV(callback) {
14
+ if (window.cv && window.cv.Mat) {
15
+ callback(window.cv);
16
+ return;
17
+ }
18
+ if (cv && cv.Mat) {
19
+ callback(cv);
20
+ return;
21
+ }
22
+ const checkInterval = setInterval(() => {
23
+ if (window.cv && window.cv.Mat) {
24
+ clearInterval(checkInterval);
25
+ callback(window.cv);
26
+ return;
27
+ }
28
+ if (cv && cv.Mat) {
29
+ clearInterval(checkInterval);
30
+ callback(cv);
31
+ return;
32
+ }
33
+ }, 200);
34
+ setTimeout(() => {
35
+ clearInterval(checkInterval);
36
+ this.loadOpenCVDynamically().then((loadedCv) => {
37
+ callback(loadedCv);
38
+ });
39
+ }, 8e3);
40
+ }
41
+ /**
42
+ * Dynamically loads OpenCV.js as a last resort
43
+ * @returns Promise that resolves with the OpenCV object
44
+ */
45
+ loadOpenCVDynamically() {
46
+ return new Promise((resolve, reject) => {
47
+ if (window.cv && window.cv.Mat) {
48
+ resolve(window.cv);
49
+ return;
50
+ }
51
+ const script = document.createElement("script");
52
+ script.setAttribute("async", "true");
53
+ script.setAttribute("type", "text/javascript");
54
+ script.setAttribute("src", "https://docs.opencv.org/4.5.5/opencv.js");
55
+ script.onload = () => {
56
+ const checkInterval = setInterval(() => {
57
+ if (window.cv && window.cv.Mat) {
58
+ clearInterval(checkInterval);
59
+ resolve(window.cv);
60
+ }
61
+ }, 100);
62
+ setTimeout(() => {
63
+ clearInterval(checkInterval);
64
+ reject(new Error("OpenCV dynamic load timed out"));
65
+ }, 5e3);
66
+ };
67
+ script.onerror = () => {
68
+ reject(new Error("Failed to load OpenCV.js dynamically"));
69
+ };
70
+ document.body.appendChild(script);
71
+ });
72
+ }
73
+ /**
74
+ * Creates a new canvas of the given width and height
75
+ * @param width Canvas width
76
+ * @param height Canvas height
77
+ * @returns Canvas object
78
+ */
79
+ createCanvas(width, height) {
80
+ const canvas = document.createElement("canvas");
81
+ canvas.width = width;
82
+ canvas.height = height;
83
+ return canvas;
84
+ }
85
+ /**
86
+ * Gets a Mat from an image or canvas
87
+ * @param image Image or Canvas element
88
+ * @returns OpenCV Mat
89
+ */
90
+ imageToMat(image) {
91
+ const canvas = document.createElement("canvas");
92
+ const ctx = canvas.getContext("2d");
93
+ canvas.width = image.width;
94
+ canvas.height = image.height;
95
+ ctx.drawImage(image, 0, 0, image.width, image.height);
96
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
97
+ return cv.matFromImageData(imageData);
98
+ }
99
+ /**
100
+ * Resizes an image to fit within the given maximum width and height
101
+ * @param image Image to resize
102
+ * @param maxWidth Maximum width
103
+ * @param maxHeight Maximum height
104
+ * @returns Resized image as Canvas
105
+ */
106
+ resizeImage(image, maxWidth = 500, maxHeight = 500) {
107
+ const canvas = this.createCanvas(1, 1);
108
+ const ctx = canvas.getContext("2d");
109
+ const originalWidth = image.width;
110
+ const originalHeight = image.height;
111
+ let newWidth = originalWidth;
112
+ let newHeight = originalHeight;
113
+ if (originalWidth > maxWidth) {
114
+ newWidth = maxWidth;
115
+ newHeight = originalHeight * maxWidth / originalWidth;
116
+ }
117
+ if (newHeight > maxHeight) {
118
+ newHeight = maxHeight;
119
+ newWidth = newWidth * maxHeight / newHeight;
120
+ }
121
+ canvas.width = newWidth;
122
+ canvas.height = newHeight;
123
+ ctx.drawImage(image, 0, 0, newWidth, newHeight);
124
+ return canvas;
125
+ }
126
+ /**
127
+ * Finds the corners of a document in an image
128
+ * @param src Input image as Mat
129
+ * @returns Four corner points of the document
130
+ */
131
+ findDocumentCorners(src) {
132
+ try {
133
+ const gray = new cv.Mat();
134
+ cv.cvtColor(src, gray, cv.COLOR_RGBA2GRAY);
135
+ const blur = new cv.Mat();
136
+ const ksize = new cv.Size(5, 5);
137
+ cv.GaussianBlur(gray, blur, ksize, 0, 0, cv.BORDER_DEFAULT);
138
+ const edges = new cv.Mat();
139
+ cv.Canny(blur, edges, 75, 200);
140
+ const contours = new cv.MatVector();
141
+ const hierarchy = new cv.Mat();
142
+ cv.findContours(
143
+ edges,
144
+ contours,
145
+ hierarchy,
146
+ cv.RETR_EXTERNAL,
147
+ cv.CHAIN_APPROX_SIMPLE
148
+ );
149
+ let maxArea = 0;
150
+ let largestContourIndex = -1;
151
+ for (let i = 0; i < contours.size(); i++) {
152
+ const contour = contours.get(i);
153
+ const area = cv.contourArea(contour);
154
+ if (area > maxArea) {
155
+ maxArea = area;
156
+ largestContourIndex = i;
157
+ }
158
+ contour.delete();
159
+ }
160
+ if (largestContourIndex === -1) {
161
+ gray.delete();
162
+ blur.delete();
163
+ edges.delete();
164
+ contours.delete();
165
+ hierarchy.delete();
166
+ return null;
167
+ }
168
+ const largestContour = contours.get(largestContourIndex);
169
+ const epsilon = 0.02 * cv.arcLength(largestContour, true);
170
+ const approx = new cv.Mat();
171
+ cv.approxPolyDP(largestContour, approx, epsilon, true);
172
+ let corners = null;
173
+ if (approx.rows === 4) {
174
+ const points = [];
175
+ for (let i = 0; i < 4; i++) {
176
+ points.push({
177
+ x: approx.data32S[i * 2],
178
+ y: approx.data32S[i * 2 + 1]
179
+ });
180
+ }
181
+ points.sort((a, b) => a.y - b.y);
182
+ const topPoints = points.slice(0, 2).sort((a, b) => a.x - b.x);
183
+ const topLeftCorner = topPoints[0];
184
+ const topRightCorner = topPoints[1];
185
+ const bottomPoints = points.slice(2).sort((a, b) => a.x - b.x);
186
+ const bottomLeftCorner = bottomPoints[0];
187
+ const bottomRightCorner = bottomPoints[1];
188
+ corners = {
189
+ topLeftCorner,
190
+ topRightCorner,
191
+ bottomRightCorner,
192
+ bottomLeftCorner
193
+ };
194
+ }
195
+ gray.delete();
196
+ blur.delete();
197
+ edges.delete();
198
+ contours.delete();
199
+ hierarchy.delete();
200
+ approx.delete();
201
+ largestContour.delete();
202
+ return corners;
203
+ } catch {
204
+ return null;
205
+ }
206
+ }
207
+ /**
208
+ * Performs perspective transform on an image based on corner points
209
+ * @param src Source image as Mat
210
+ * @param corners Corner points of document
211
+ * @param width Output width
212
+ * @param height Output height
213
+ * @returns Transformed Mat
214
+ */
215
+ warpPerspective(src, corners, width, height) {
216
+ const srcPoints = cv.matFromArray(4, 1, cv.CV_32FC2, [
217
+ corners.topLeftCorner.x,
218
+ corners.topLeftCorner.y,
219
+ corners.topRightCorner.x,
220
+ corners.topRightCorner.y,
221
+ corners.bottomRightCorner.x,
222
+ corners.bottomRightCorner.y,
223
+ corners.bottomLeftCorner.x,
224
+ corners.bottomLeftCorner.y
225
+ ]);
226
+ const dstPoints = cv.matFromArray(4, 1, cv.CV_32FC2, [
227
+ 0,
228
+ 0,
229
+ width,
230
+ 0,
231
+ width,
232
+ height,
233
+ 0,
234
+ height
235
+ ]);
236
+ const M = cv.getPerspectiveTransform(srcPoints, dstPoints);
237
+ const dst = new cv.Mat();
238
+ cv.warpPerspective(
239
+ src,
240
+ dst,
241
+ M,
242
+ new cv.Size(width, height),
243
+ cv.INTER_LINEAR,
244
+ cv.BORDER_CONSTANT,
245
+ new cv.Scalar()
246
+ );
247
+ srcPoints.delete();
248
+ dstPoints.delete();
249
+ M.delete();
250
+ return dst;
251
+ }
252
+ /**
253
+ * Highlights corners of a detected document in an image
254
+ * @param image Source image
255
+ * @param corners Corner points to highlight
256
+ * @param options Highlight options
257
+ * @returns Canvas with highlighted corners
258
+ */
259
+ highlightCorners(image, corners, options = {}) {
260
+ const thickness = options.thickness || 2;
261
+ const color = options.color || "#3cba54";
262
+ const pointRadius = 3;
263
+ const pointColor = "#db3236";
264
+ const canvas = this.createCanvas(
265
+ image.width,
266
+ image.height
267
+ );
268
+ const ctx = canvas.getContext("2d");
269
+ ctx.drawImage(image, 0, 0);
270
+ ctx.strokeStyle = color;
271
+ ctx.lineWidth = thickness;
272
+ ctx.beginPath();
273
+ ctx.moveTo(corners.topLeftCorner.x, corners.topLeftCorner.y);
274
+ ctx.lineTo(corners.topRightCorner.x, corners.topRightCorner.y);
275
+ ctx.lineTo(corners.bottomRightCorner.x, corners.bottomRightCorner.y);
276
+ ctx.lineTo(corners.bottomLeftCorner.x, corners.bottomLeftCorner.y);
277
+ ctx.lineTo(corners.topLeftCorner.x, corners.topLeftCorner.y);
278
+ ctx.stroke();
279
+ const cornerPoints = [
280
+ corners.topLeftCorner,
281
+ corners.topRightCorner,
282
+ corners.bottomRightCorner,
283
+ corners.bottomLeftCorner
284
+ ];
285
+ ctx.fillStyle = pointColor;
286
+ cornerPoints.forEach((point) => {
287
+ ctx.beginPath();
288
+ ctx.arc(point.x, point.y, pointRadius, 0, Math.PI * 2);
289
+ ctx.fill();
290
+ });
291
+ return canvas;
292
+ }
293
+ /**
294
+ * Processes an image to detect and extract a document
295
+ * @param image Input image
296
+ * @returns Object containing original, highlighted and processed images as canvases
297
+ */
298
+ async processImage(image) {
299
+ const resized = this.resizeImage(image);
300
+ const src = this.imageToMat(resized);
301
+ const corners = this.findDocumentCorners(src);
302
+ if (!corners) {
303
+ src.delete();
304
+ return {
305
+ original: resized,
306
+ highlighted: null,
307
+ processed: null
308
+ };
309
+ }
310
+ const highlighted = this.highlightCorners(resized, corners);
311
+ const width = Math.max(
312
+ distance(corners.topRightCorner, corners.topLeftCorner),
313
+ distance(corners.bottomRightCorner, corners.bottomLeftCorner)
314
+ );
315
+ const height = Math.max(
316
+ distance(corners.topLeftCorner, corners.bottomLeftCorner),
317
+ distance(corners.topRightCorner, corners.bottomRightCorner)
318
+ );
319
+ const warped = this.warpPerspective(src, corners, width, height);
320
+ const processed = this.createCanvas(width, height);
321
+ const ctx = processed.getContext("2d");
322
+ const imgData = new ImageData(
323
+ new Uint8ClampedArray(warped.data),
324
+ warped.cols,
325
+ warped.rows
326
+ );
327
+ ctx.putImageData(imgData, 0, 0);
328
+ src.delete();
329
+ warped.delete();
330
+ return {
331
+ original: resized,
332
+ highlighted,
333
+ processed
334
+ };
335
+ }
336
+ /**
337
+ * Converts a canvas to a data URL
338
+ * @param canvas Canvas to convert
339
+ * @param type Image type (default: 'image/png')
340
+ * @param quality Image quality for JPEG (0-1)
341
+ * @returns Data URL string
342
+ */
343
+ canvasToDataURL(canvas, type = "image/png", quality = 0.9) {
344
+ return canvas.toDataURL(type, quality);
345
+ }
346
+ /**
347
+ * Creates an image element from a data URL
348
+ * @param dataURL Data URL string
349
+ * @returns Promise resolving to an Image element
350
+ */
351
+ dataURLToImage(dataURL) {
352
+ return new Promise((resolve, reject) => {
353
+ const img = new Image();
354
+ img.onload = () => resolve(img);
355
+ img.onerror = () => reject(new Error("Failed to load image from data URL"));
356
+ img.src = dataURL;
357
+ });
358
+ }
359
+ }
360
+ export {
361
+ TScanifyBrowser
362
+ };
363
+ //# sourceMappingURL=tscanify-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/custom/tscanify/tscanify-browser.ts"],"sourcesContent":["/*! tscanify-browser v1.0.0 | Based on jscanify v1.4.0 | (c) ColonelParrot and other contributors | MIT License */\r\n\r\nimport cv, { Mat } from \"opencv-ts\";\r\nimport { CornerPoints, HighlightOptions, Point, WindowWithCV } from \"./types\";\r\n\r\n/**\r\n * Calculates distance between two points.\r\n * @param p1 point 1\r\n * @param p2 point 2\r\n * @returns distance between two points\r\n */\r\nfunction distance(p1: Point, p2: Point): number {\r\n return Math.hypot(p1.x - p2.x, p1.y - p2.y);\r\n}\r\n\r\nexport class TScanifyBrowser {\r\n constructor() {}\r\n\r\n /**\r\n * Loads OpenCV module\r\n * @param callback Function to call when OpenCV is initialized\r\n */\r\n loadOpenCV(callback: (opencv: typeof cv) => void): void {\r\n // First check if global cv is available (browser-loaded version)\r\n if (\r\n (window as unknown as WindowWithCV).cv &&\r\n (window as unknown as WindowWithCV).cv.Mat\r\n ) {\r\n callback((window as unknown as WindowWithCV).cv);\r\n return;\r\n }\r\n\r\n // Next, check if the imported cv is available\r\n if (cv && (cv as typeof cv).Mat) {\r\n callback(cv);\r\n return;\r\n }\r\n\r\n // Wait for opencv to be ready (check both global and imported)\r\n const checkInterval = setInterval(() => {\r\n // First priority: global cv\r\n if (\r\n (window as unknown as WindowWithCV).cv &&\r\n (window as unknown as WindowWithCV).cv.Mat\r\n ) {\r\n clearInterval(checkInterval);\r\n callback((window as unknown as WindowWithCV).cv);\r\n return;\r\n }\r\n\r\n // Second priority: imported cv\r\n if (cv && (cv as typeof cv).Mat) {\r\n clearInterval(checkInterval);\r\n callback(cv);\r\n return;\r\n }\r\n }, 200);\r\n\r\n // Set timeout to avoid infinite waiting\r\n setTimeout(() => {\r\n clearInterval(checkInterval);\r\n // Try to load it dynamically as a last resort\r\n this.loadOpenCVDynamically().then((loadedCv) => {\r\n callback(loadedCv);\r\n });\r\n }, 8000); // 8 seconds timeout\r\n }\r\n\r\n /**\r\n * Dynamically loads OpenCV.js as a last resort\r\n * @returns Promise that resolves with the OpenCV object\r\n */\r\n private loadOpenCVDynamically(): Promise<typeof cv> {\r\n return new Promise((resolve, reject) => {\r\n if (\r\n (window as unknown as WindowWithCV).cv &&\r\n (window as unknown as WindowWithCV).cv.Mat\r\n ) {\r\n resolve((window as unknown as WindowWithCV).cv);\r\n return;\r\n }\r\n\r\n // Try to load OpenCV.js dynamically\r\n const script = document.createElement(\"script\");\r\n script.setAttribute(\"async\", \"true\");\r\n script.setAttribute(\"type\", \"text/javascript\");\r\n script.setAttribute(\"src\", \"https://docs.opencv.org/4.5.5/opencv.js\");\r\n\r\n script.onload = () => {\r\n // Check if OpenCV is available\r\n const checkInterval = setInterval(() => {\r\n if (\r\n (window as unknown as WindowWithCV).cv &&\r\n (window as unknown as WindowWithCV).cv.Mat\r\n ) {\r\n clearInterval(checkInterval);\r\n resolve((window as unknown as WindowWithCV).cv);\r\n }\r\n }, 100);\r\n\r\n // Timeout after 5 seconds\r\n setTimeout(() => {\r\n clearInterval(checkInterval);\r\n reject(new Error(\"OpenCV dynamic load timed out\"));\r\n }, 5000);\r\n };\r\n\r\n script.onerror = () => {\r\n reject(new Error(\"Failed to load OpenCV.js dynamically\"));\r\n };\r\n\r\n document.body.appendChild(script);\r\n });\r\n }\r\n\r\n /**\r\n * Creates a new canvas of the given width and height\r\n * @param width Canvas width\r\n * @param height Canvas height\r\n * @returns Canvas object\r\n */\r\n createCanvas(width: number, height: number): HTMLCanvasElement {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = width;\r\n canvas.height = height;\r\n return canvas;\r\n }\r\n\r\n /**\r\n * Gets a Mat from an image or canvas\r\n * @param image Image or Canvas element\r\n * @returns OpenCV Mat\r\n */\r\n imageToMat(image: HTMLImageElement | HTMLCanvasElement): Mat {\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\")!;\r\n\r\n // Set canvas dimensions to match input\r\n canvas.width = image.width as number;\r\n canvas.height = image.height as number;\r\n\r\n // Draw the image to the canvas\r\n ctx.drawImage(image, 0, 0, image.width as number, image.height as number);\r\n\r\n // Get the image data from the canvas\r\n const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n\r\n // Convert to Mat\r\n return cv.matFromImageData(imageData);\r\n }\r\n\r\n /**\r\n * Resizes an image to fit within the given maximum width and height\r\n * @param image Image to resize\r\n * @param maxWidth Maximum width\r\n * @param maxHeight Maximum height\r\n * @returns Resized image as Canvas\r\n */\r\n resizeImage(\r\n image: HTMLImageElement | HTMLCanvasElement,\r\n maxWidth = 500,\r\n maxHeight = 500\r\n ): HTMLCanvasElement {\r\n const canvas = this.createCanvas(1, 1);\r\n const ctx = canvas.getContext(\"2d\")!;\r\n\r\n const originalWidth = image.width as number;\r\n const originalHeight = image.height as number;\r\n\r\n // Calculate new dimensions\r\n let newWidth = originalWidth;\r\n let newHeight = originalHeight;\r\n\r\n if (originalWidth > maxWidth) {\r\n newWidth = maxWidth;\r\n newHeight = (originalHeight * maxWidth) / originalWidth;\r\n }\r\n\r\n if (newHeight > maxHeight) {\r\n newHeight = maxHeight;\r\n newWidth = (newWidth * maxHeight) / newHeight;\r\n }\r\n\r\n // Set canvas to new dimensions\r\n canvas.width = newWidth;\r\n canvas.height = newHeight;\r\n\r\n // Draw the image at the new size\r\n ctx.drawImage(image, 0, 0, newWidth, newHeight);\r\n return canvas;\r\n }\r\n\r\n /**\r\n * Finds the corners of a document in an image\r\n * @param src Input image as Mat\r\n * @returns Four corner points of the document\r\n */\r\n findDocumentCorners(src: Mat): CornerPoints | null {\r\n try {\r\n // Convert to grayscale\r\n const gray = new cv.Mat();\r\n cv.cvtColor(src, gray, cv.COLOR_RGBA2GRAY);\r\n\r\n // Apply Gaussian blur\r\n const blur = new cv.Mat();\r\n const ksize = new cv.Size(5, 5);\r\n cv.GaussianBlur(gray, blur, ksize, 0, 0, cv.BORDER_DEFAULT);\r\n\r\n // Apply Canny edge detection\r\n const edges = new cv.Mat();\r\n cv.Canny(blur, edges, 75, 200);\r\n\r\n // Find contours\r\n const contours = new cv.MatVector();\r\n const hierarchy = new cv.Mat();\r\n cv.findContours(\r\n edges,\r\n contours,\r\n hierarchy,\r\n cv.RETR_EXTERNAL,\r\n cv.CHAIN_APPROX_SIMPLE\r\n );\r\n\r\n // Find largest contour\r\n let maxArea = 0;\r\n let largestContourIndex = -1;\r\n\r\n for (let i = 0; i < contours.size(); i++) {\r\n const contour = contours.get(i);\r\n const area = cv.contourArea(contour);\r\n\r\n if (area > maxArea) {\r\n maxArea = area;\r\n largestContourIndex = i;\r\n }\r\n\r\n contour.delete();\r\n }\r\n\r\n // If no contour found, return null\r\n if (largestContourIndex === -1) {\r\n // Clean up\r\n gray.delete();\r\n blur.delete();\r\n edges.delete();\r\n contours.delete();\r\n hierarchy.delete();\r\n return null;\r\n }\r\n\r\n // Get largest contour\r\n const largestContour = contours.get(largestContourIndex);\r\n\r\n // Approximate the contour with a polygon\r\n const epsilon = 0.02 * cv.arcLength(largestContour, true);\r\n const approx = new cv.Mat();\r\n cv.approxPolyDP(largestContour, approx, epsilon, true);\r\n\r\n // If the approximation has 4 points, we assume it's a quadrilateral\r\n let corners: CornerPoints | null = null;\r\n\r\n if (approx.rows === 4) {\r\n const points: Point[] = [];\r\n\r\n for (let i = 0; i < 4; i++) {\r\n points.push({\r\n x: approx.data32S[i * 2] as number,\r\n y: approx.data32S[i * 2 + 1] as number,\r\n });\r\n }\r\n\r\n // Order the points: top-left, top-right, bottom-right, bottom-left\r\n points.sort((a, b) => a.y - b.y);\r\n\r\n // Top points (sorted by y)\r\n const topPoints = points.slice(0, 2).sort((a, b) => a.x - b.x);\r\n const topLeftCorner = topPoints[0]!;\r\n const topRightCorner = topPoints[1]!;\r\n\r\n // Bottom points (sorted by y)\r\n const bottomPoints = points.slice(2).sort((a, b) => a.x - b.x);\r\n const bottomLeftCorner = bottomPoints[0]!;\r\n const bottomRightCorner = bottomPoints[1]!;\r\n\r\n corners = {\r\n topLeftCorner,\r\n topRightCorner,\r\n bottomRightCorner,\r\n bottomLeftCorner,\r\n };\r\n }\r\n\r\n // Clean up\r\n gray.delete();\r\n blur.delete();\r\n edges.delete();\r\n contours.delete();\r\n hierarchy.delete();\r\n approx.delete();\r\n largestContour.delete();\r\n\r\n return corners;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Performs perspective transform on an image based on corner points\r\n * @param src Source image as Mat\r\n * @param corners Corner points of document\r\n * @param width Output width\r\n * @param height Output height\r\n * @returns Transformed Mat\r\n */\r\n warpPerspective(\r\n src: Mat,\r\n corners: CornerPoints,\r\n width: number,\r\n height: number\r\n ): Mat {\r\n // Create matrices for source and destination points\r\n const srcPoints = cv.matFromArray(4, 1, cv.CV_32FC2, [\r\n corners.topLeftCorner.x,\r\n corners.topLeftCorner.y,\r\n corners.topRightCorner.x,\r\n corners.topRightCorner.y,\r\n corners.bottomRightCorner.x,\r\n corners.bottomRightCorner.y,\r\n corners.bottomLeftCorner.x,\r\n corners.bottomLeftCorner.y,\r\n ]);\r\n\r\n const dstPoints = cv.matFromArray(4, 1, cv.CV_32FC2, [\r\n 0,\r\n 0,\r\n width,\r\n 0,\r\n width,\r\n height,\r\n 0,\r\n height,\r\n ]);\r\n\r\n // Get perspective transform matrix\r\n const M = cv.getPerspectiveTransform(srcPoints, dstPoints);\r\n\r\n // Apply perspective transform\r\n const dst = new cv.Mat();\r\n cv.warpPerspective(\r\n src,\r\n dst,\r\n M,\r\n new cv.Size(width, height),\r\n cv.INTER_LINEAR,\r\n cv.BORDER_CONSTANT,\r\n new cv.Scalar()\r\n );\r\n\r\n // Clean up\r\n srcPoints.delete();\r\n dstPoints.delete();\r\n M.delete();\r\n\r\n return dst;\r\n }\r\n\r\n /**\r\n * Highlights corners of a detected document in an image\r\n * @param image Source image\r\n * @param corners Corner points to highlight\r\n * @param options Highlight options\r\n * @returns Canvas with highlighted corners\r\n */\r\n highlightCorners(\r\n image: HTMLImageElement | HTMLCanvasElement,\r\n corners: CornerPoints,\r\n options: HighlightOptions = {}\r\n ): HTMLCanvasElement {\r\n // Use our own default options since the HighlightOptions interface only has color and thickness\r\n const thickness = options.thickness || 2;\r\n const color = options.color || \"#3cba54\";\r\n const pointRadius = 3;\r\n const pointColor = \"#db3236\";\r\n\r\n const canvas = this.createCanvas(\r\n image.width as number,\r\n image.height as number\r\n );\r\n const ctx = canvas.getContext(\"2d\")!;\r\n\r\n // Draw the original image\r\n ctx.drawImage(image, 0, 0);\r\n\r\n // Draw lines connecting the corners\r\n ctx.strokeStyle = color;\r\n ctx.lineWidth = thickness;\r\n ctx.beginPath();\r\n ctx.moveTo(corners.topLeftCorner.x, corners.topLeftCorner.y);\r\n ctx.lineTo(corners.topRightCorner.x, corners.topRightCorner.y);\r\n ctx.lineTo(corners.bottomRightCorner.x, corners.bottomRightCorner.y);\r\n ctx.lineTo(corners.bottomLeftCorner.x, corners.bottomLeftCorner.y);\r\n ctx.lineTo(corners.topLeftCorner.x, corners.topLeftCorner.y);\r\n ctx.stroke();\r\n\r\n // Draw dots at the corners\r\n const cornerPoints = [\r\n corners.topLeftCorner,\r\n corners.topRightCorner,\r\n corners.bottomRightCorner,\r\n corners.bottomLeftCorner,\r\n ];\r\n\r\n ctx.fillStyle = pointColor;\r\n cornerPoints.forEach((point) => {\r\n ctx.beginPath();\r\n ctx.arc(point.x, point.y, pointRadius, 0, Math.PI * 2);\r\n ctx.fill();\r\n });\r\n\r\n return canvas;\r\n }\r\n\r\n /**\r\n * Processes an image to detect and extract a document\r\n * @param image Input image\r\n * @returns Object containing original, highlighted and processed images as canvases\r\n */\r\n async processImage(image: HTMLImageElement): Promise<{\r\n original: HTMLCanvasElement;\r\n highlighted: HTMLCanvasElement | null;\r\n processed: HTMLCanvasElement | null;\r\n }> {\r\n // Resize the image for processing\r\n const resized = this.resizeImage(image);\r\n\r\n // Convert to Mat\r\n const src = this.imageToMat(resized);\r\n\r\n // Find document corners\r\n const corners = this.findDocumentCorners(src);\r\n\r\n if (!corners) {\r\n // No document found\r\n src.delete();\r\n return {\r\n original: resized,\r\n highlighted: null,\r\n processed: null,\r\n };\r\n }\r\n\r\n // Highlight corners\r\n const highlighted = this.highlightCorners(resized, corners);\r\n\r\n // Calculate output dimensions\r\n const width = Math.max(\r\n distance(corners.topRightCorner, corners.topLeftCorner),\r\n distance(corners.bottomRightCorner, corners.bottomLeftCorner)\r\n );\r\n\r\n const height = Math.max(\r\n distance(corners.topLeftCorner, corners.bottomLeftCorner),\r\n distance(corners.topRightCorner, corners.bottomRightCorner)\r\n );\r\n\r\n // Apply perspective transform\r\n const warped = this.warpPerspective(src, corners, width, height);\r\n\r\n // Convert Mat to Canvas\r\n const processed = this.createCanvas(width, height);\r\n const ctx = processed.getContext(\"2d\")!;\r\n\r\n const imgData = new ImageData(\r\n new Uint8ClampedArray(warped.data),\r\n warped.cols,\r\n warped.rows\r\n );\r\n\r\n ctx.putImageData(imgData, 0, 0);\r\n\r\n // Clean up\r\n src.delete();\r\n warped.delete();\r\n\r\n return {\r\n original: resized,\r\n highlighted,\r\n processed,\r\n };\r\n }\r\n\r\n /**\r\n * Converts a canvas to a data URL\r\n * @param canvas Canvas to convert\r\n * @param type Image type (default: 'image/png')\r\n * @param quality Image quality for JPEG (0-1)\r\n * @returns Data URL string\r\n */\r\n canvasToDataURL(\r\n canvas: HTMLCanvasElement,\r\n type = \"image/png\",\r\n quality = 0.9\r\n ): string {\r\n return canvas.toDataURL(type, quality);\r\n }\r\n\r\n /**\r\n * Creates an image element from a data URL\r\n * @param dataURL Data URL string\r\n * @returns Promise resolving to an Image element\r\n */\r\n dataURLToImage(dataURL: string): Promise<HTMLImageElement> {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.onload = () => resolve(img);\r\n img.onerror = () =>\r\n reject(new Error(\"Failed to load image from data URL\"));\r\n img.src = dataURL;\r\n });\r\n }\r\n}\r\n"],"mappings":"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","names":[]}