@ayasofyazilim/ui 0.0.4 → 0.0.6

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 (253) hide show
  1. package/dist/components/accordion.js +1 -1
  2. package/dist/components/accordion.js.map +1 -1
  3. package/dist/components/alert-dialog.js +2 -2
  4. package/dist/components/alert-dialog.js.map +1 -1
  5. package/dist/components/alert.js +1 -1
  6. package/dist/components/alert.js.map +1 -1
  7. package/dist/components/avatar.js +1 -1
  8. package/dist/components/avatar.js.map +1 -1
  9. package/dist/components/badge.js +1 -1
  10. package/dist/components/badge.js.map +1 -1
  11. package/dist/components/breadcrumb.js +1 -1
  12. package/dist/components/breadcrumb.js.map +1 -1
  13. package/dist/components/button-group.js +2 -2
  14. package/dist/components/button-group.js.map +1 -1
  15. package/dist/components/button.js +1 -1
  16. package/dist/components/button.js.map +1 -1
  17. package/dist/components/calendar.js +2 -5
  18. package/dist/components/calendar.js.map +1 -1
  19. package/dist/components/card.js +1 -1
  20. package/dist/components/card.js.map +1 -1
  21. package/dist/components/carousel.js +2 -2
  22. package/dist/components/carousel.js.map +1 -1
  23. package/dist/components/chart.js +1 -1
  24. package/dist/components/chart.js.map +1 -1
  25. package/dist/components/checkbox.js +1 -1
  26. package/dist/components/checkbox.js.map +1 -1
  27. package/dist/components/command.js +2 -2
  28. package/dist/components/command.js.map +1 -1
  29. package/dist/components/context-menu.js +1 -1
  30. package/dist/components/context-menu.js.map +1 -1
  31. package/dist/components/dialog.js +1 -1
  32. package/dist/components/dialog.js.map +1 -1
  33. package/dist/components/drawer.js +1 -1
  34. package/dist/components/drawer.js.map +1 -1
  35. package/dist/components/dropdown-menu.js +1 -1
  36. package/dist/components/dropdown-menu.js.map +1 -1
  37. package/dist/components/field.js +3 -3
  38. package/dist/components/field.js.map +1 -1
  39. package/dist/components/form.js +2 -2
  40. package/dist/components/form.js.map +1 -1
  41. package/dist/components/hover-card.js +1 -1
  42. package/dist/components/hover-card.js.map +1 -1
  43. package/dist/components/input-group.js +4 -4
  44. package/dist/components/input-group.js.map +1 -1
  45. package/dist/components/input-otp.js +1 -1
  46. package/dist/components/input-otp.js.map +1 -1
  47. package/dist/components/input.js +1 -1
  48. package/dist/components/input.js.map +1 -1
  49. package/dist/components/item.js +2 -2
  50. package/dist/components/item.js.map +1 -1
  51. package/dist/components/kbd.js +1 -1
  52. package/dist/components/kbd.js.map +1 -1
  53. package/dist/components/label.js +1 -1
  54. package/dist/components/label.js.map +1 -1
  55. package/dist/components/menubar.js +1 -1
  56. package/dist/components/menubar.js.map +1 -1
  57. package/dist/components/navigation-menu.js +1 -1
  58. package/dist/components/navigation-menu.js.map +1 -1
  59. package/dist/components/pagination.js +2 -4
  60. package/dist/components/pagination.js.map +1 -1
  61. package/dist/components/progress.js +1 -1
  62. package/dist/components/progress.js.map +1 -1
  63. package/dist/components/radio-group.js +1 -1
  64. package/dist/components/radio-group.js.map +1 -1
  65. package/dist/components/resizable.js +1 -1
  66. package/dist/components/resizable.js.map +1 -1
  67. package/dist/components/scroll-area.js +1 -1
  68. package/dist/components/scroll-area.js.map +1 -1
  69. package/dist/components/select.js +1 -1
  70. package/dist/components/select.js.map +1 -1
  71. package/dist/components/separator.js +1 -1
  72. package/dist/components/separator.js.map +1 -1
  73. package/dist/components/sheet.js +1 -1
  74. package/dist/components/sheet.js.map +1 -1
  75. package/dist/components/skeleton.js +1 -1
  76. package/dist/components/skeleton.js.map +1 -1
  77. package/dist/components/slider.js +1 -1
  78. package/dist/components/slider.js.map +1 -1
  79. package/dist/components/spinner.js +1 -1
  80. package/dist/components/spinner.js.map +1 -1
  81. package/dist/components/stepper.js +1 -1
  82. package/dist/components/stepper.js.map +1 -1
  83. package/dist/components/switch.js +1 -1
  84. package/dist/components/switch.js.map +1 -1
  85. package/dist/components/table.js +1 -1
  86. package/dist/components/table.js.map +1 -1
  87. package/dist/components/tabs.js +1 -1
  88. package/dist/components/tabs.js.map +1 -1
  89. package/dist/components/textarea.js +1 -1
  90. package/dist/components/textarea.js.map +1 -1
  91. package/dist/components/toggle-group.js +2 -2
  92. package/dist/components/toggle-group.js.map +1 -1
  93. package/dist/components/toggle.js +1 -1
  94. package/dist/components/toggle.js.map +1 -1
  95. package/dist/components/tooltip.js +1 -1
  96. package/dist/components/tooltip.js.map +1 -1
  97. package/dist/custom/action-button.js +2 -4
  98. package/dist/custom/action-button.js.map +1 -1
  99. package/dist/custom/async-select.js +7 -7
  100. package/dist/custom/async-select.js.map +1 -1
  101. package/dist/custom/awesome-not-found.js +3 -3
  102. package/dist/custom/awesome-not-found.js.map +1 -1
  103. package/dist/custom/charts/area-chart.js +2 -2
  104. package/dist/custom/charts/area-chart.js.map +1 -1
  105. package/dist/custom/charts/bar-chart.js +2 -2
  106. package/dist/custom/charts/bar-chart.js.map +1 -1
  107. package/dist/custom/charts/chart-card.js +3 -3
  108. package/dist/custom/charts/chart-card.js.map +1 -1
  109. package/dist/custom/charts/pie-chart.js +2 -2
  110. package/dist/custom/charts/pie-chart.js.map +1 -1
  111. package/dist/custom/charts/radar-chart.js +2 -2
  112. package/dist/custom/charts/radar-chart.js.map +1 -1
  113. package/dist/custom/combobox.js +8 -8
  114. package/dist/custom/combobox.js.map +1 -1
  115. package/dist/custom/confirm-dialog.js +3 -3
  116. package/dist/custom/confirm-dialog.js.map +1 -1
  117. package/dist/custom/country-selector.js +6 -6
  118. package/dist/custom/country-selector.js.map +1 -1
  119. package/dist/custom/date-picker/calendar-rac.js +1 -1
  120. package/dist/custom/date-picker/calendar-rac.js.map +1 -1
  121. package/dist/custom/date-picker/datefield-rac.js +1 -1
  122. package/dist/custom/date-picker/datefield-rac.js.map +1 -1
  123. package/dist/custom/date-picker/index.js +3 -3
  124. package/dist/custom/date-picker/index.js.map +1 -1
  125. package/dist/custom/date-picker-old.js +4 -4
  126. package/dist/custom/date-picker-old.js.map +1 -1
  127. package/dist/custom/date-tooltip.js +1 -1
  128. package/dist/custom/date-tooltip.js.map +1 -1
  129. package/dist/custom/document-scanner/corner-adjustment/action-buttons.js +1 -1
  130. package/dist/custom/document-scanner/corner-adjustment/action-buttons.js.map +1 -1
  131. package/dist/custom/document-scanner/corner-adjustment/corner-handle.js +1 -1
  132. package/dist/custom/document-scanner/corner-adjustment/corner-handle.js.map +1 -1
  133. package/dist/custom/document-scanner/index.js +2 -2
  134. package/dist/custom/document-scanner/index.js.map +1 -1
  135. package/dist/custom/document-viewer/controllers.js +3 -3
  136. package/dist/custom/document-viewer/controllers.js.map +1 -1
  137. package/dist/custom/document-viewer/index.js +1 -1
  138. package/dist/custom/document-viewer/index.js.map +1 -1
  139. package/dist/custom/document-viewer/renderers/pdf.js +1 -1
  140. package/dist/custom/document-viewer/renderers/pdf.js.map +1 -1
  141. package/dist/custom/email-input/email.js +4 -4
  142. package/dist/custom/email-input/email.js.map +1 -1
  143. package/dist/custom/file-uploader.js +6 -6
  144. package/dist/custom/file-uploader.js.map +1 -1
  145. package/dist/custom/filter-component/fields/async-select.js +1 -1
  146. package/dist/custom/filter-component/fields/async-select.js.map +1 -1
  147. package/dist/custom/filter-component/fields/date.js +3 -3
  148. package/dist/custom/filter-component/fields/date.js.map +1 -1
  149. package/dist/custom/filter-component/fields/multi-select.js +1 -1
  150. package/dist/custom/filter-component/fields/multi-select.js.map +1 -1
  151. package/dist/custom/filter-component/index.js +4 -4
  152. package/dist/custom/filter-component/index.js.map +1 -1
  153. package/dist/custom/image-canvas.js +1 -1
  154. package/dist/custom/image-canvas.js.map +1 -1
  155. package/dist/custom/master-data-grid/components/filters/client-filter.js +2 -2
  156. package/dist/custom/master-data-grid/components/filters/client-filter.js.map +1 -1
  157. package/dist/custom/master-data-grid/components/filters/multi-filter-dialog.js +2 -2
  158. package/dist/custom/master-data-grid/components/filters/multi-filter-dialog.js.map +1 -1
  159. package/dist/custom/master-data-grid/components/filters/server-filter.js +5 -5
  160. package/dist/custom/master-data-grid/components/filters/server-filter.js.map +1 -1
  161. package/dist/custom/master-data-grid/components/table/cell-renderer.js +1 -1
  162. package/dist/custom/master-data-grid/components/table/cell-renderer.js.map +1 -1
  163. package/dist/custom/master-data-grid/hooks/use-columns.js +1 -1
  164. package/dist/custom/master-data-grid/hooks/use-columns.js.map +1 -1
  165. package/dist/custom/multi-select.js +6 -6
  166. package/dist/custom/multi-select.js.map +1 -1
  167. package/dist/custom/password-input.js +1 -1
  168. package/dist/custom/password-input.js.map +1 -1
  169. package/dist/custom/phone-input.js +2 -2
  170. package/dist/custom/phone-input.js.map +1 -1
  171. package/dist/custom/schema-form/custom/label.js +3 -3
  172. package/dist/custom/schema-form/custom/label.js.map +1 -1
  173. package/dist/custom/schema-form/fields/base-input-field.js +2 -2
  174. package/dist/custom/schema-form/fields/base-input-field.js.map +1 -1
  175. package/dist/custom/schema-form/fields/field.js +2 -2
  176. package/dist/custom/schema-form/fields/field.js.map +1 -1
  177. package/dist/custom/schema-form/fields/table-array/array-field-item.js +5 -5
  178. package/dist/custom/schema-form/fields/table-array/array-field-item.js.map +1 -1
  179. package/dist/custom/schema-form/fields/table-array/array-field-template.js +3 -3
  180. package/dist/custom/schema-form/fields/table-array/array-field-template.js.map +1 -1
  181. package/dist/custom/schema-form/index.js +1 -1
  182. package/dist/custom/schema-form/index.js.map +1 -1
  183. package/dist/custom/schema-form/templates/description.js +1 -1
  184. package/dist/custom/schema-form/templates/description.js.map +1 -1
  185. package/dist/custom/schema-form/templates/submit.js +2 -2
  186. package/dist/custom/schema-form/templates/submit.js.map +1 -1
  187. package/dist/custom/schema-form/utils/schemas.js +1 -1
  188. package/dist/custom/schema-form/utils/schemas.js.map +1 -1
  189. package/dist/custom/schema-form/widgets/boolean.js +4 -4
  190. package/dist/custom/schema-form/widgets/boolean.js.map +1 -1
  191. package/dist/custom/schema-form/widgets/combobox.js +7 -7
  192. package/dist/custom/schema-form/widgets/combobox.js.map +1 -1
  193. package/dist/custom/schema-form/widgets/date.js +1 -1
  194. package/dist/custom/schema-form/widgets/date.js.map +1 -1
  195. package/dist/custom/schema-form/widgets/email.js +2 -2
  196. package/dist/custom/schema-form/widgets/email.js.map +1 -1
  197. package/dist/custom/schema-form/widgets/password.js +1 -1
  198. package/dist/custom/schema-form/widgets/password.js.map +1 -1
  199. package/dist/custom/schema-form/widgets/phone.js +1 -1
  200. package/dist/custom/schema-form/widgets/phone.js.map +1 -1
  201. package/dist/custom/schema-form/widgets/select.js +3 -3
  202. package/dist/custom/schema-form/widgets/select.js.map +1 -1
  203. package/dist/custom/schema-form/widgets/selectable.js +1 -1
  204. package/dist/custom/schema-form/widgets/selectable.js.map +1 -1
  205. package/dist/custom/schema-form/widgets/string-array.js +3 -3
  206. package/dist/custom/schema-form/widgets/string-array.js.map +1 -1
  207. package/dist/custom/schema-form/widgets/url.js +2 -2
  208. package/dist/custom/schema-form/widgets/url.js.map +1 -1
  209. package/dist/custom/section-layout-v2.js +3 -3
  210. package/dist/custom/section-layout-v2.js.map +1 -1
  211. package/dist/custom/select-tabs.js +2 -2
  212. package/dist/custom/select-tabs.js.map +1 -1
  213. package/dist/custom/stepper.js +2 -2
  214. package/dist/custom/stepper.js.map +1 -1
  215. package/dist/custom/tab-layout.js +2 -2
  216. package/dist/custom/tab-layout.js.map +1 -1
  217. package/dist/custom/tanstack-table/fields/tanstack-table-column-header.js +3 -3
  218. package/dist/custom/tanstack-table/fields/tanstack-table-column-header.js.map +1 -1
  219. package/dist/custom/tanstack-table/fields/tanstack-table-filter-date.js +4 -4
  220. package/dist/custom/tanstack-table/fields/tanstack-table-filter-date.js.map +1 -1
  221. package/dist/custom/tanstack-table/fields/tanstack-table-filter-faceted.js +6 -6
  222. package/dist/custom/tanstack-table/fields/tanstack-table-filter-faceted.js.map +1 -1
  223. package/dist/custom/tanstack-table/fields/tanstack-table-filter-text.js +5 -8
  224. package/dist/custom/tanstack-table/fields/tanstack-table-filter-text.js.map +1 -1
  225. package/dist/custom/tanstack-table/fields/tanstack-table-pagination.js +2 -2
  226. package/dist/custom/tanstack-table/fields/tanstack-table-pagination.js.map +1 -1
  227. package/dist/custom/tanstack-table/fields/tanstack-table-plain-table.js +2 -2
  228. package/dist/custom/tanstack-table/fields/tanstack-table-plain-table.js.map +1 -1
  229. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-confirmation.js +2 -2
  230. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-confirmation.js.map +1 -1
  231. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-custom-dialog.js +2 -2
  232. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-custom-dialog.js.map +1 -1
  233. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions.js +3 -3
  234. package/dist/custom/tanstack-table/fields/tanstack-table-row-actions.js.map +1 -1
  235. package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-custom-dialog.js +3 -3
  236. package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-custom-dialog.js.map +1 -1
  237. package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-schemaform-dialog.js +2 -2
  238. package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-schemaform-dialog.js.map +1 -1
  239. package/dist/custom/tanstack-table/fields/tanstack-table-toolbar.js +1 -1
  240. package/dist/custom/tanstack-table/fields/tanstack-table-toolbar.js.map +1 -1
  241. package/dist/custom/tanstack-table/fields/tanstack-table-view-options.js +2 -2
  242. package/dist/custom/tanstack-table/fields/tanstack-table-view-options.js.map +1 -1
  243. package/dist/custom/tanstack-table/utils/columns-by-row-data.js +3 -3
  244. package/dist/custom/tanstack-table/utils/columns-by-row-data.js.map +1 -1
  245. package/dist/custom/tanstack-table/utils/editable-columns-by-row-data.js +5 -5
  246. package/dist/custom/tanstack-table/utils/editable-columns-by-row-data.js.map +1 -1
  247. package/dist/custom/timeline.js +1 -1
  248. package/dist/custom/timeline.js.map +1 -1
  249. package/dist/custom/tree.js +1 -1
  250. package/dist/custom/tree.js.map +1 -1
  251. package/dist/custom/webcam.js +2 -2
  252. package/dist/custom/webcam.js.map +1 -1
  253. package/package.json +13 -84
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/custom/timeline.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { Slot } from \"radix-ui\";\r\nimport { cn } from \"@repo/ayasofyazilim-ui/lib/utils\";\r\n\r\n// Types\r\ntype TimelineContextValue = {\r\n activeStep: number;\r\n setActiveStep: (step: number) => void;\r\n};\r\n\r\n// Context\r\nconst TimelineContext = React.createContext<TimelineContextValue | undefined>(\r\n undefined\r\n);\r\n\r\nconst useTimeline = () => {\r\n const context = React.useContext(TimelineContext);\r\n if (!context) {\r\n throw new Error(\"useTimeline must be used within a Timeline\");\r\n }\r\n return context;\r\n};\r\n\r\n// Components\r\ninterface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {\r\n defaultValue?: number;\r\n value?: number;\r\n onValueChange?: (value: number) => void;\r\n orientation?: \"horizontal\" | \"vertical\";\r\n}\r\n\r\nfunction Timeline({\r\n defaultValue = 1,\r\n value,\r\n onValueChange,\r\n orientation = \"vertical\",\r\n className,\r\n ...props\r\n}: TimelineProps) {\r\n const [activeStep, setInternalStep] = React.useState(defaultValue);\r\n\r\n const setActiveStep = React.useCallback(\r\n (step: number) => {\r\n if (value === undefined) {\r\n setInternalStep(step);\r\n }\r\n onValueChange?.(step);\r\n },\r\n [value, onValueChange]\r\n );\r\n\r\n const currentStep = value ?? activeStep;\r\n\r\n return (\r\n <TimelineContext.Provider\r\n value={{ activeStep: currentStep, setActiveStep }}\r\n >\r\n <div\r\n data-slot=\"timeline\"\r\n className={cn(\r\n \"group/timeline flex data-[orientation=horizontal]:w-full data-[orientation=horizontal]:flex-row data-[orientation=vertical]:flex-col\",\r\n className\r\n )}\r\n data-orientation={orientation}\r\n {...props}\r\n />\r\n </TimelineContext.Provider>\r\n );\r\n}\r\n\r\n// TimelineContent\r\nfunction TimelineContent({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div\r\n data-slot=\"timeline-content\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n// TimelineDate\r\ninterface TimelineDateProps extends React.HTMLAttributes<HTMLTimeElement> {\r\n asChild?: boolean;\r\n}\r\n\r\nfunction TimelineDate({\r\n asChild = false,\r\n className,\r\n ...props\r\n}: TimelineDateProps) {\r\n const Comp = asChild ? Slot.Root : \"time\";\r\n\r\n return (\r\n <Comp\r\n data-slot=\"timeline-date\"\r\n className={cn(\r\n \"mb-1 block text-xs font-medium text-muted-foreground group-data-[orientation=vertical]/timeline:max-sm:h-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n// TimelineHeader\r\nfunction TimelineHeader({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div data-slot=\"timeline-header\" className={cn(className)} {...props} />\r\n );\r\n}\r\n\r\n// TimelineIndicator\r\ninterface TimelineIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {\r\n asChild?: boolean;\r\n}\r\n\r\nfunction TimelineIndicator({\r\n className,\r\n children,\r\n ...props\r\n}: TimelineIndicatorProps) {\r\n return (\r\n <div\r\n data-slot=\"timeline-indicator\"\r\n className={cn(\r\n \"absolute size-4 rounded-full border-2 border-primary/20 group-data-completed/timeline-item:border-primary group-data-[orientation=horizontal]/timeline:-top-6 group-data-[orientation=horizontal]/timeline:left-0 group-data-[orientation=horizontal]/timeline:-translate-y-1/2 group-data-[orientation=vertical]/timeline:top-0 group-data-[orientation=vertical]/timeline:-left-6 group-data-[orientation=vertical]/timeline:-translate-x-1/2\",\r\n className\r\n )}\r\n aria-hidden=\"true\"\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n// TimelineItem\r\ninterface TimelineItemProps extends React.HTMLAttributes<HTMLDivElement> {\r\n step: number;\r\n}\r\n\r\nfunction TimelineItem({ step, className, ...props }: TimelineItemProps) {\r\n const { activeStep } = useTimeline();\r\n\r\n return (\r\n <div\r\n data-slot=\"timeline-item\"\r\n className={cn(\r\n \"group/timeline-item relative flex flex-1 flex-col gap-0.5 group-data-[orientation=horizontal]/timeline:mt-8 group-data-[orientation=horizontal]/timeline:not-last:pe-8 group-data-[orientation=vertical]/timeline:ms-8 group-data-[orientation=vertical]/timeline:not-last:pb-12 has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary\",\r\n className\r\n )}\r\n data-completed={step <= activeStep || undefined}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n// TimelineSeparator\r\nfunction TimelineSeparator({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div\r\n data-slot=\"timeline-separator\"\r\n className={cn(\r\n \"absolute self-start bg-primary/10 group-last/timeline-item:hidden group-data-[orientation=horizontal]/timeline:-top-6 group-data-[orientation=horizontal]/timeline:h-0.5 group-data-[orientation=horizontal]/timeline:w-[calc(100%-1rem-0.25rem)] group-data-[orientation=horizontal]/timeline:translate-x-4.5 group-data-[orientation=horizontal]/timeline:-translate-y-1/2 group-data-[orientation=vertical]/timeline:-left-6 group-data-[orientation=vertical]/timeline:h-[calc(100%-1rem-0.25rem)] group-data-[orientation=vertical]/timeline:w-0.5 group-data-[orientation=vertical]/timeline:-translate-x-1/2 group-data-[orientation=vertical]/timeline:translate-y-4.5\",\r\n className\r\n )}\r\n aria-hidden=\"true\"\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n// TimelineTitle\r\nfunction TimelineTitle({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <h3\r\n data-slot=\"timeline-title\"\r\n className={cn(\"text-sm font-medium\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Timeline,\r\n TimelineContent,\r\n TimelineDate,\r\n TimelineHeader,\r\n TimelineIndicator,\r\n TimelineItem,\r\n TimelineSeparator,\r\n TimelineTitle,\r\n};\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/custom/timeline.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { Slot } from \"radix-ui\";\r\nimport { cn } from \"@ayasofyazilim/ui/lib/utils\";\r\n\r\n// Types\r\ntype TimelineContextValue = {\r\n activeStep: number;\r\n setActiveStep: (step: number) => void;\r\n};\r\n\r\n// Context\r\nconst TimelineContext = React.createContext<TimelineContextValue | undefined>(\r\n undefined,\r\n);\r\n\r\nconst useTimeline = () => {\r\n const context = React.useContext(TimelineContext);\r\n if (!context) {\r\n throw new Error(\"useTimeline must be used within a Timeline\");\r\n }\r\n return context;\r\n};\r\n\r\n// Components\r\ninterface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {\r\n defaultValue?: number;\r\n value?: number;\r\n onValueChange?: (value: number) => void;\r\n orientation?: \"horizontal\" | \"vertical\";\r\n}\r\n\r\nfunction Timeline({\r\n defaultValue = 1,\r\n value,\r\n onValueChange,\r\n orientation = \"vertical\",\r\n className,\r\n ...props\r\n}: TimelineProps) {\r\n const [activeStep, setInternalStep] = React.useState(defaultValue);\r\n\r\n const setActiveStep = React.useCallback(\r\n (step: number) => {\r\n if (value === undefined) {\r\n setInternalStep(step);\r\n }\r\n onValueChange?.(step);\r\n },\r\n [value, onValueChange],\r\n );\r\n\r\n const currentStep = value ?? activeStep;\r\n\r\n return (\r\n <TimelineContext.Provider\r\n value={{ activeStep: currentStep, setActiveStep }}\r\n >\r\n <div\r\n data-slot=\"timeline\"\r\n className={cn(\r\n \"group/timeline flex data-[orientation=horizontal]:w-full data-[orientation=horizontal]:flex-row data-[orientation=vertical]:flex-col\",\r\n className,\r\n )}\r\n data-orientation={orientation}\r\n {...props}\r\n />\r\n </TimelineContext.Provider>\r\n );\r\n}\r\n\r\n// TimelineContent\r\nfunction TimelineContent({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div\r\n data-slot=\"timeline-content\"\r\n className={cn(\"text-sm text-muted-foreground\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n// TimelineDate\r\ninterface TimelineDateProps extends React.HTMLAttributes<HTMLTimeElement> {\r\n asChild?: boolean;\r\n}\r\n\r\nfunction TimelineDate({\r\n asChild = false,\r\n className,\r\n ...props\r\n}: TimelineDateProps) {\r\n const Comp = asChild ? Slot.Root : \"time\";\r\n\r\n return (\r\n <Comp\r\n data-slot=\"timeline-date\"\r\n className={cn(\r\n \"mb-1 block text-xs font-medium text-muted-foreground group-data-[orientation=vertical]/timeline:max-sm:h-4\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n// TimelineHeader\r\nfunction TimelineHeader({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div data-slot=\"timeline-header\" className={cn(className)} {...props} />\r\n );\r\n}\r\n\r\n// TimelineIndicator\r\ninterface TimelineIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {\r\n asChild?: boolean;\r\n}\r\n\r\nfunction TimelineIndicator({\r\n className,\r\n children,\r\n ...props\r\n}: TimelineIndicatorProps) {\r\n return (\r\n <div\r\n data-slot=\"timeline-indicator\"\r\n className={cn(\r\n \"absolute size-4 rounded-full border-2 border-primary/20 group-data-completed/timeline-item:border-primary group-data-[orientation=horizontal]/timeline:-top-6 group-data-[orientation=horizontal]/timeline:left-0 group-data-[orientation=horizontal]/timeline:-translate-y-1/2 group-data-[orientation=vertical]/timeline:top-0 group-data-[orientation=vertical]/timeline:-left-6 group-data-[orientation=vertical]/timeline:-translate-x-1/2\",\r\n className,\r\n )}\r\n aria-hidden=\"true\"\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\n// TimelineItem\r\ninterface TimelineItemProps extends React.HTMLAttributes<HTMLDivElement> {\r\n step: number;\r\n}\r\n\r\nfunction TimelineItem({ step, className, ...props }: TimelineItemProps) {\r\n const { activeStep } = useTimeline();\r\n\r\n return (\r\n <div\r\n data-slot=\"timeline-item\"\r\n className={cn(\r\n \"group/timeline-item relative flex flex-1 flex-col gap-0.5 group-data-[orientation=horizontal]/timeline:mt-8 group-data-[orientation=horizontal]/timeline:not-last:pe-8 group-data-[orientation=vertical]/timeline:ms-8 group-data-[orientation=vertical]/timeline:not-last:pb-12 has-[+[data-completed]]:**:data-[slot=timeline-separator]:bg-primary\",\r\n className,\r\n )}\r\n data-completed={step <= activeStep || undefined}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n// TimelineSeparator\r\nfunction TimelineSeparator({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) {\r\n return (\r\n <div\r\n data-slot=\"timeline-separator\"\r\n className={cn(\r\n \"absolute self-start bg-primary/10 group-last/timeline-item:hidden group-data-[orientation=horizontal]/timeline:-top-6 group-data-[orientation=horizontal]/timeline:h-0.5 group-data-[orientation=horizontal]/timeline:w-[calc(100%-1rem-0.25rem)] group-data-[orientation=horizontal]/timeline:translate-x-4.5 group-data-[orientation=horizontal]/timeline:-translate-y-1/2 group-data-[orientation=vertical]/timeline:-left-6 group-data-[orientation=vertical]/timeline:h-[calc(100%-1rem-0.25rem)] group-data-[orientation=vertical]/timeline:w-0.5 group-data-[orientation=vertical]/timeline:-translate-x-1/2 group-data-[orientation=vertical]/timeline:translate-y-4.5\",\r\n className,\r\n )}\r\n aria-hidden=\"true\"\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n// TimelineTitle\r\nfunction TimelineTitle({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLHeadingElement>) {\r\n return (\r\n <h3\r\n data-slot=\"timeline-title\"\r\n className={cn(\"text-sm font-medium\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Timeline,\r\n TimelineContent,\r\n TimelineDate,\r\n TimelineHeader,\r\n TimelineIndicator,\r\n TimelineItem,\r\n TimelineSeparator,\r\n TimelineTitle,\r\n};\r\n"],"mappings":"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","names":[]}
@@ -6,7 +6,7 @@ import { ChevronDownIcon } from "lucide-react";
6
6
  import { Slot } from "radix-ui";
7
7
  export * from "@headless-tree/core";
8
8
  export * from "@headless-tree/react";
9
- import { cn } from "@repo/ayasofyazilim-ui/lib/utils";
9
+ import { cn } from "@ayasofyazilim/ui/lib/utils";
10
10
  const TreeContext = React.createContext({
11
11
  indent: 20,
12
12
  currentItem: void 0,
@@ -1 +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":[]}
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 \"@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<\r\n 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<\r\n 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":[]}
@@ -3,8 +3,8 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { Camera, Pause, Play, RefreshCw, Square, Video } from "lucide-react";
4
4
  import { useCallback, useEffect, useRef, useState, useTransition } from "react";
5
5
  import WebcamCore from "react-webcam";
6
- import { cn } from "@repo/ayasofyazilim-ui/lib/utils";
7
- import { Button } from "@repo/ayasofyazilim-ui/components/button";
6
+ import { cn } from "@ayasofyazilim/ui/lib/utils";
7
+ import { Button } from "@ayasofyazilim/ui/components/button";
8
8
  function Webcam(props) {
9
9
  const {
10
10
  videoRecording,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/custom/webcam.tsx"],"sourcesContent":["/**\r\n * Webcam Component - Core Features\r\n *\r\n * Three main functionalities:\r\n * 1) Record Video - with interface controls, auto-start, max duration\r\n * 2) Capture Photo - with interface controls, quality settings\r\n * 3) Auto-capture Photo - with interface controls, intervals, quality\r\n *\r\n * Features:\r\n * - Customizable placeholder overlay\r\n * - Comprehensive feedback functions\r\n * - Camera switching support\r\n * - Internationalization support\r\n */\r\n\r\n\"use client\";\r\n\r\nimport { Camera, Pause, Play, RefreshCw, Square, Video } from \"lucide-react\";\r\nimport * as React from \"react\";\r\nimport { useCallback, useEffect, useRef, useState, useTransition } from \"react\";\r\nimport WebcamCore from \"react-webcam\";\r\nimport { cn } from \"@repo/ayasofyazilim-ui/lib/utils\";\r\nimport { Button } from \"@repo/ayasofyazilim-ui/components/button\";\r\n\r\n// Types\r\nexport interface VideoDimensions {\r\n width: number;\r\n height: number;\r\n}\r\n\r\n// Core Feature Interfaces\r\nexport interface VideoRecordingConfig {\r\n hasInterface: boolean; // Show video recording UI controls\r\n autoStart?: boolean; // Auto-start recording when camera ready\r\n maxVideoDuration?: number; // Max duration in seconds (default: 60)\r\n quality?: \"low\" | \"medium\" | \"high\"; // Video quality\r\n mimeType?: string; // Video MIME type (default: 'video/webm')\r\n}\r\n\r\nexport interface PhotoCaptureConfig {\r\n hasInterface: boolean; // Show photo capture UI controls\r\n quality?: number; // JPEG quality 0-1 (default: 0.95)\r\n}\r\n\r\nexport interface AutoCaptureConfig {\r\n hasInterface: boolean; // Show auto-capture UI controls\r\n captureInterval: number; // Interval in seconds\r\n startOnReady?: boolean; // Auto-start when camera ready (only on initial load)\r\n quality?: number; // JPEG quality 0-1 (default: 0.95)\r\n stopOnCapture?: boolean; // Stop auto capture after first successful capture\r\n}\r\n\r\n// Feedback Functions\r\nexport interface WebcamCallbacks {\r\n onWebcamReady?: (dimensions: VideoDimensions) => void;\r\n onVideoStart?: () => void;\r\n onVideoEnd?: (videoBlob: Blob, duration: number) => void;\r\n onPhotoCaptured?: (imageData: string) => void;\r\n onAutoPhotoCaptured?: (imageData: string) => void;\r\n onAutoCaptureStart?: () => void;\r\n beforeStartAutoCapture?: () => void;\r\n onAutoCaptureStop?: () => void;\r\n onError?: (error: string) => void;\r\n}\r\n\r\n// Main Props Interface\r\nexport interface WebcamProps {\r\n // Core Features (at least one must be enabled)\r\n videoRecording?: VideoRecordingConfig;\r\n photoCapture?: PhotoCaptureConfig;\r\n autoCapture?: AutoCaptureConfig;\r\n\r\n // Camera Settings\r\n defaultCamera?: \"front\" | \"back\"; // Default camera (front='user', back='environment')\r\n allowCameraSwitch?: boolean; // Allow camera switching\r\n\r\n // UI Customization\r\n placeholder?: React.ReactElement; // Overlay that covers camera area\r\n showCapturedImage?: boolean; // Show last captured image preview\r\n capturedImage?: string | null; // Current captured image for preview\r\n forceHideInterface?: boolean; // Force hide interface controls (useful for manual capture mode)\r\n // Feedback Functions\r\n callbacks?: WebcamCallbacks;\r\n\r\n // Labels for Translation\r\n labels?: {\r\n // Video Recording\r\n startRecording?: string;\r\n stopRecording?: string;\r\n recording?: string;\r\n\r\n // Photo Capture\r\n capturePhoto?: string;\r\n\r\n // Auto Capture\r\n startAutoCapture?: string;\r\n stopAutoCapture?: string;\r\n autoCapturing?: string;\r\n\r\n // General\r\n switchCamera?: string;\r\n cameraReady?: string;\r\n cameraError?: string;\r\n };\r\n\r\n // Styling\r\n classNames?: {\r\n container?: string;\r\n webcam?: string;\r\n placeholder?: string;\r\n controls?: string;\r\n previewImage?: string;\r\n };\r\n\r\n // Technical Settings\r\n webcamRef?: React.RefObject<WebcamCore>;\r\n videoCheckInterval?: number; // default: 500ms\r\n maxRetryCount?: number; // default: 10\r\n interfaceLocation?: \"static\" | \"absolute\"; // Location of controls (default: 'bottom')\r\n showBorder?: boolean; // Show border around webcam area (default: true)\r\n}\r\n\r\nexport type WebcamCaptureProps = WebcamProps;\r\n\r\n// Legacy aliases for backward compatibility\r\nexport type WebcamAutoCapture = WebcamProps;\r\nexport type WebcamManualCapture = WebcamProps;\r\n\r\nexport function Webcam(props: WebcamProps) {\r\n const {\r\n videoRecording,\r\n photoCapture,\r\n autoCapture,\r\n defaultCamera = \"front\",\r\n allowCameraSwitch = false,\r\n placeholder,\r\n showCapturedImage = false,\r\n capturedImage,\r\n callbacks,\r\n labels = {},\r\n classNames,\r\n webcamRef: externalWebcamRef,\r\n videoCheckInterval = 500,\r\n maxRetryCount = 10,\r\n showBorder = false,\r\n forceHideInterface = false,\r\n interfaceLocation = \"static\",\r\n } = props;\r\n\r\n // Validation: At least one feature must be enabled\r\n if (!videoRecording && !photoCapture && !autoCapture) {\r\n throw new Error(\r\n \"WebcamComponent: At least one core feature (videoRecording, photoCapture, or autoCapture) must be enabled\"\r\n );\r\n }\r\n\r\n // Default labels\r\n const defaultLabels = {\r\n startRecording: \"Start Recording\",\r\n stopRecording: \"Stop Recording\",\r\n recording: \"Recording...\",\r\n capturePhoto: \"Capture Photo\",\r\n startAutoCapture: \"Start Auto Capture\",\r\n stopAutoCapture: \"Stop Auto Capture\",\r\n autoCapturing: \"Auto Capturing...\",\r\n switchCamera: \"Switch Camera\",\r\n cameraReady: \"Camera Ready\",\r\n cameraError: \"Camera Error\",\r\n ...labels,\r\n };\r\n\r\n // State\r\n const [isPending, startTransition] = useTransition();\r\n const [facingMode, setFacingMode] = useState<\"user\" | \"environment\">(\r\n defaultCamera === \"front\" ? \"user\" : \"environment\"\r\n );\r\n const [isWebcamReady, setIsWebcamReady] = useState(false);\r\n // Video Recording State\r\n const [isRecording, setIsRecording] = useState(false);\r\n const [recordingDuration, setRecordingDuration] = useState(0);\r\n\r\n // Auto Capture State\r\n const [isAutoCapturing, setIsAutoCapturing] = useState(false);\r\n\r\n // Auto capture state to track if it has been initially started\r\n const [hasAutoStarted, setHasAutoStarted] = useState(false);\r\n\r\n // Refs\r\n const internalWebcamRef = useRef<WebcamCore>(null);\r\n const webcamRef = externalWebcamRef || internalWebcamRef;\r\n const videoCheckIntervalRef = useRef<NodeJS.Timeout | null>(null);\r\n const autoCapturIntervalRef = useRef<NodeJS.Timeout | null>(null);\r\n const recordingIntervalRef = useRef<NodeJS.Timeout | null>(null);\r\n const retryCountRef = useRef(0);\r\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\r\n const recordedChunksRef = useRef<Blob[]>([]);\r\n\r\n // Cleanup utilities\r\n const clearVideoCheckInterval = useCallback(() => {\r\n if (videoCheckIntervalRef.current) {\r\n clearInterval(videoCheckIntervalRef.current);\r\n videoCheckIntervalRef.current = null;\r\n }\r\n }, []);\r\n\r\n const clearAutoCapture = useCallback(() => {\r\n if (autoCapturIntervalRef.current) {\r\n clearInterval(autoCapturIntervalRef.current);\r\n autoCapturIntervalRef.current = null;\r\n }\r\n }, []);\r\n\r\n const clearRecordingInterval = useCallback(() => {\r\n if (recordingIntervalRef.current) {\r\n clearInterval(recordingIntervalRef.current);\r\n recordingIntervalRef.current = null;\r\n }\r\n }, []);\r\n\r\n // Video Recording Functions\r\n const startVideoRecording = useCallback(() => {\r\n if (!webcamRef.current?.stream || isRecording || !videoRecording) return;\r\n\r\n try {\r\n const { stream } = webcamRef.current;\r\n const mimeType = videoRecording.mimeType || \"video/webm\";\r\n\r\n const mediaRecorder = new MediaRecorder(stream, { mimeType });\r\n recordedChunksRef.current = [];\r\n\r\n mediaRecorder.ondataavailable = (event) => {\r\n if (event.data.size > 0) {\r\n recordedChunksRef.current.push(event.data);\r\n }\r\n };\r\n\r\n mediaRecorder.onstop = () => {\r\n const blob = new Blob(recordedChunksRef.current, { type: mimeType });\r\n const duration = recordingDuration;\r\n\r\n callbacks?.onVideoEnd?.(blob, duration);\r\n setIsRecording(false);\r\n setRecordingDuration(0);\r\n clearRecordingInterval();\r\n };\r\n\r\n mediaRecorderRef.current = mediaRecorder;\r\n mediaRecorder.start();\r\n\r\n const startTime = Date.now();\r\n setIsRecording(true);\r\n setRecordingDuration(0);\r\n\r\n // Start duration tracking\r\n recordingIntervalRef.current = setInterval(() => {\r\n const elapsed = Math.floor((Date.now() - startTime) / 1000);\r\n setRecordingDuration(elapsed);\r\n\r\n // Auto-stop if max duration reached\r\n if (\r\n videoRecording.maxVideoDuration &&\r\n elapsed >= videoRecording.maxVideoDuration\r\n ) {\r\n stopVideoRecording();\r\n }\r\n }, 1000);\r\n\r\n callbacks?.onVideoStart?.();\r\n } catch (error) {\r\n callbacks?.onError?.(`Failed to start video recording: ${error}`);\r\n }\r\n }, [\r\n webcamRef,\r\n isRecording,\r\n videoRecording,\r\n callbacks,\r\n recordingDuration,\r\n clearRecordingInterval,\r\n ]);\r\n\r\n const stopVideoRecording = useCallback(() => {\r\n if (mediaRecorderRef.current && isRecording) {\r\n mediaRecorderRef.current.stop();\r\n mediaRecorderRef.current = null;\r\n }\r\n }, [isRecording]);\r\n\r\n // Photo Capture Functions\r\n const captureHighQualityPhoto = useCallback((): string | null => {\r\n const video = webcamRef.current?.video;\r\n if (!video) return null;\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return null;\r\n\r\n canvas.width = video.videoWidth;\r\n canvas.height = video.videoHeight;\r\n\r\n ctx.imageSmoothingEnabled = true;\r\n ctx.imageSmoothingQuality = \"high\";\r\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n\r\n const quality = photoCapture?.quality || 0.95;\r\n return canvas.toDataURL(\"image/jpeg\", quality);\r\n }, [webcamRef, photoCapture]);\r\n\r\n const capturePhoto = useCallback(() => {\r\n if (!photoCapture) return;\r\n\r\n const imageData = captureHighQualityPhoto();\r\n if (imageData) {\r\n callbacks?.onPhotoCaptured?.(imageData);\r\n }\r\n }, [photoCapture, captureHighQualityPhoto, callbacks]);\r\n\r\n const stopAutoCapture = useCallback(() => {\r\n setIsAutoCapturing(false);\r\n callbacks?.onAutoCaptureStop?.();\r\n clearAutoCapture();\r\n }, [clearAutoCapture, callbacks]);\r\n\r\n // Auto Capture Functions\r\n const captureAutoPhoto = useCallback(() => {\r\n if (!autoCapture) return;\r\n\r\n const video = webcamRef.current?.video;\r\n if (!video) return;\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n canvas.width = video.videoWidth;\r\n canvas.height = video.videoHeight;\r\n\r\n ctx.imageSmoothingEnabled = true;\r\n ctx.imageSmoothingQuality = \"high\";\r\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n\r\n const quality = autoCapture.quality || 0.95;\r\n const imageData = canvas.toDataURL(\"image/jpeg\", quality);\r\n\r\n if (imageData) {\r\n callbacks?.onAutoPhotoCaptured?.(imageData);\r\n\r\n // Stop auto capture if stopOnCapture is enabled\r\n if (autoCapture.stopOnCapture) {\r\n stopAutoCapture();\r\n }\r\n }\r\n }, [webcamRef, autoCapture, callbacks, stopAutoCapture]);\r\n\r\n const startAutoCapture = useCallback(\r\n (isManual = false) => {\r\n if (!autoCapture || !isWebcamReady || isAutoCapturing) return;\r\n\r\n // If it's automatic start (startOnReady) and already started, don't start again\r\n if (!isManual && autoCapture.startOnReady && hasAutoStarted) return;\r\n\r\n setIsAutoCapturing(true);\r\n callbacks?.onAutoCaptureStart?.();\r\n\r\n // Set hasAutoStarted flag only for automatic starts\r\n if (!isManual && autoCapture.startOnReady) {\r\n setHasAutoStarted(true);\r\n }\r\n\r\n autoCapturIntervalRef.current = setInterval(() => {\r\n if (webcamRef.current && isWebcamReady) {\r\n captureAutoPhoto();\r\n }\r\n }, autoCapture.captureInterval * 1000);\r\n },\r\n [\r\n autoCapture,\r\n isWebcamReady,\r\n isAutoCapturing,\r\n captureAutoPhoto,\r\n webcamRef,\r\n callbacks,\r\n hasAutoStarted,\r\n ]\r\n );\r\n\r\n // Camera Management\r\n const switchCamera = useCallback(() => {\r\n const newFacingMode = facingMode === \"user\" ? \"environment\" : \"user\";\r\n setFacingMode(newFacingMode);\r\n setIsWebcamReady(false);\r\n setHasAutoStarted(false); // Reset auto-start flag for new camera\r\n stopAutoCapture();\r\n }, [facingMode, stopAutoCapture]);\r\n\r\n // Add device detection for better browser compatibility\r\n const [isMobile, setIsMobile] = useState(false);\r\n\r\n // Detect mobile device on component mount\r\n useEffect(() => {\r\n const checkIsMobile = () =>\r\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\r\n navigator.userAgent\r\n );\r\n setIsMobile(checkIsMobile());\r\n }, []);\r\n\r\n // Video Readiness Check\r\n const checkVideoReady = useCallback(() => {\r\n const video = webcamRef.current?.video;\r\n if (!video) return false;\r\n\r\n const isReady =\r\n video.readyState >= 2 && video.videoWidth > 0 && video.videoHeight > 0;\r\n\r\n if (isReady) {\r\n const newDimensions: VideoDimensions = {\r\n width: video.videoWidth,\r\n height: video.videoHeight,\r\n };\r\n callbacks?.onWebcamReady?.(newDimensions);\r\n }\r\n\r\n return isReady;\r\n }, [webcamRef, callbacks]);\r\n\r\n // Video Initialization\r\n const handleUserMedia = useCallback(() => {\r\n clearVideoCheckInterval();\r\n retryCountRef.current = 0;\r\n\r\n videoCheckIntervalRef.current = setInterval(() => {\r\n if (checkVideoReady()) {\r\n setIsWebcamReady(true);\r\n clearVideoCheckInterval();\r\n\r\n // Auto-start features if enabled\r\n if (videoRecording?.autoStart) {\r\n startVideoRecording();\r\n }\r\n\r\n if (autoCapture?.startOnReady && !hasAutoStarted) {\r\n setTimeout(() => {\r\n startAutoCapture(false); // Automatic start\r\n }, 100);\r\n }\r\n } else {\r\n retryCountRef.current++;\r\n\r\n if (retryCountRef.current > maxRetryCount) {\r\n clearVideoCheckInterval();\r\n callbacks?.onError?.(\r\n \"Failed to initialize camera after maximum retries\"\r\n );\r\n\r\n // Try with default constraints as a fallback\r\n const currentFacingMode = facingMode;\r\n setFacingMode(\"user\");\r\n setTimeout(() => setFacingMode(currentFacingMode), 100);\r\n }\r\n }\r\n }, videoCheckInterval);\r\n\r\n return clearVideoCheckInterval;\r\n }, [\r\n clearVideoCheckInterval,\r\n checkVideoReady,\r\n videoRecording,\r\n autoCapture,\r\n startVideoRecording,\r\n startAutoCapture,\r\n maxRetryCount,\r\n videoCheckInterval,\r\n facingMode,\r\n callbacks,\r\n ]);\r\n\r\n // Handle camera initialization errors\r\n const handleUserMediaError = useCallback(\r\n (error: string | DOMException) => {\r\n callbacks?.onError?.(\r\n typeof error === \"string\" ? error : `Camera error: ${error.message}`\r\n );\r\n setIsWebcamReady(false);\r\n },\r\n [callbacks]\r\n );\r\n\r\n // Manual capture function\r\n const handleCapturePhoto = useCallback(() => {\r\n startTransition(() => {\r\n capturePhoto();\r\n });\r\n }, [capturePhoto, startTransition]);\r\n\r\n // Manual auto capture start function for button\r\n const handleStartAutoCapture = useCallback(() => {\r\n if (callbacks?.beforeStartAutoCapture) callbacks.beforeStartAutoCapture();\r\n startAutoCapture(true); // Manual start\r\n }, [startAutoCapture, callbacks]);\r\n\r\n // Effects\r\n useEffect(\r\n () => () => {\r\n clearVideoCheckInterval();\r\n stopAutoCapture();\r\n clearAutoCapture();\r\n clearRecordingInterval();\r\n },\r\n [\r\n clearVideoCheckInterval,\r\n stopAutoCapture,\r\n clearAutoCapture,\r\n clearRecordingInterval,\r\n ]\r\n );\r\n\r\n useEffect(() => {\r\n if (\r\n autoCapture?.startOnReady &&\r\n isWebcamReady &&\r\n !isAutoCapturing &&\r\n !hasAutoStarted\r\n ) {\r\n startAutoCapture(false); // Automatic start\r\n }\r\n }, [\r\n autoCapture,\r\n isWebcamReady,\r\n isAutoCapturing,\r\n hasAutoStarted,\r\n startAutoCapture,\r\n ]);\r\n\r\n // Render functions\r\n const renderVideoRecordingControls = () => {\r\n if (!videoRecording?.hasInterface || forceHideInterface) return null;\r\n\r\n return (\r\n <div\r\n className=\"flex flex-col items-center space-y-2\"\r\n key=\"video-recording-controls\"\r\n >\r\n {isRecording ? (\r\n <>\r\n <Button\r\n className=\"size-12 rounded-full border-2 border-red-500 bg-red-500 p-0 text-white\"\r\n onClick={stopVideoRecording}\r\n >\r\n <Square className=\"size-4\" />\r\n </Button>\r\n <div className=\"flex items-center space-x-2 text-white\">\r\n <div className=\"h-2 w-2 animate-pulse rounded-full bg-red-500\" />\r\n <span className=\"text-xs\">\r\n {defaultLabels.recording} {Math.floor(recordingDuration / 60)}:\r\n {String(recordingDuration % 60).padStart(2, \"0\")}\r\n </span>\r\n </div>\r\n </>\r\n ) : (\r\n <Button\r\n className=\"size-12 rounded-full border-2 border-white bg-white/10 p-0 text-white\"\r\n disabled={!isWebcamReady}\r\n onClick={startVideoRecording}\r\n >\r\n <Video className=\"size-4\" />\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const renderPhotoCaptureControls = () => {\r\n if (!photoCapture?.hasInterface || forceHideInterface) return null;\r\n\r\n return (\r\n <Button\r\n key=\"photo-capture-controls\"\r\n className=\"size-12 rounded-full border-2 border-white bg-white/10 p-0 text-white transition-all hover:bg-white hover:ring-4\"\r\n disabled={isPending || !isWebcamReady}\r\n onClick={handleCapturePhoto}\r\n >\r\n <Camera className=\"size-4\" />\r\n <span className=\"sr-only\">{defaultLabels.capturePhoto}</span>\r\n </Button>\r\n );\r\n };\r\n\r\n const renderAutoCaptureControls = () => {\r\n if (!autoCapture?.hasInterface || forceHideInterface) return null;\r\n\r\n return (\r\n <div\r\n className=\"flex flex-col items-center space-y-2\"\r\n key=\"auto-capture-controls\"\r\n >\r\n {isAutoCapturing ? (\r\n <>\r\n <Button\r\n className=\"size-12 rounded-full border-2 p-0 text-white\"\r\n variant=\"ghost\"\r\n onClick={stopAutoCapture}\r\n >\r\n <Pause className=\"size-4\" />\r\n </Button>\r\n <div className=\"flex items-center space-x-2 text-white\">\r\n <div className=\"h-2 w-2 animate-pulse rounded-full bg-green-500\" />\r\n <span className=\"text-xs\">{defaultLabels.autoCapturing}</span>\r\n </div>\r\n </>\r\n ) : (\r\n <Button\r\n className=\"size-12 rounded-full border-2 p-0 text-white\"\r\n variant=\"ghost\"\r\n disabled={!isWebcamReady}\r\n onClick={handleStartAutoCapture}\r\n >\r\n <Play className=\"size-4\" />\r\n <span className=\"sr-only\">{defaultLabels.startAutoCapture}</span>\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const renderCameraSwitchButton = () => {\r\n if (!allowCameraSwitch || forceHideInterface) return null;\r\n\r\n return (\r\n <Button\r\n key=\"camera-switch-button\"\r\n className=\"size-8 rounded-full bg-white/10 p-0 text-white\"\r\n onClick={switchCamera}\r\n variant=\"ghost\"\r\n >\r\n <RefreshCw className=\"size-4\" />\r\n <span className=\"sr-only\">{defaultLabels.switchCamera}</span>\r\n </Button>\r\n );\r\n };\r\n\r\n const renderCapturedImagePreview = () => {\r\n if (!showCapturedImage || !capturedImage) return null;\r\n\r\n return (\r\n <div className={cn(\"captured size-10\", classNames?.previewImage)}>\r\n <img\r\n src={capturedImage}\r\n alt=\"Captured\"\r\n className=\"size-10 rounded-md object-cover\"\r\n />\r\n </div>\r\n );\r\n };\r\n\r\n const renderControls = () => {\r\n const controls = [];\r\n\r\n if (videoRecording?.hasInterface || forceHideInterface) {\r\n controls.push(renderVideoRecordingControls());\r\n }\r\n\r\n if (photoCapture?.hasInterface || forceHideInterface) {\r\n controls.push(renderPhotoCaptureControls());\r\n }\r\n\r\n if (autoCapture?.hasInterface || forceHideInterface) {\r\n controls.push(renderAutoCaptureControls());\r\n }\r\n\r\n return controls.filter(Boolean);\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"webcam-container overflow-hidden rounded-md bg-black relative\",\r\n classNames?.container\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"webcam relative\",\r\n showBorder && \"p-2\",\r\n classNames?.webcam\r\n )}\r\n >\r\n <div className=\"relative\">\r\n <WebcamCore\r\n audio={false}\r\n className=\"background-transparent h-auto w-full rounded-md\"\r\n mirrored={facingMode === \"user\"}\r\n onUserMedia={handleUserMedia}\r\n onUserMediaError={handleUserMediaError}\r\n ref={webcamRef}\r\n screenshotFormat=\"image/jpeg\"\r\n screenshotQuality={1}\r\n videoConstraints={{\r\n facingMode,\r\n width: { ideal: 1920, min: 640 },\r\n height: { ideal: 1920, min: 640 },\r\n frameRate: { ideal: 30, min: 15 },\r\n aspectRatio: isMobile ? 1.0 : 4 / 3,\r\n }}\r\n />\r\n\r\n {placeholder && isWebcamReady && (\r\n <div\r\n className={cn(\r\n \"absolute w-full h-full inset-0 z-3\",\r\n classNames?.placeholder\r\n )}\r\n >\r\n {placeholder}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div\r\n className={cn(\r\n \"actions flex items-center justify-between p-2 pt-0\",\r\n classNames?.controls,\r\n interfaceLocation === \"absolute\"\r\n ? \"absolute bottom-0 left-0 p-4 z-10\"\r\n : \"\"\r\n )}\r\n >\r\n {renderCapturedImagePreview()}\r\n\r\n <div className=\"flex items-center space-x-4\">\r\n {renderControls()}\r\n {renderCameraSwitchButton()}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/custom/webcam.tsx"],"sourcesContent":["/**\r\n * Webcam Component - Core Features\r\n *\r\n * Three main functionalities:\r\n * 1) Record Video - with interface controls, auto-start, max duration\r\n * 2) Capture Photo - with interface controls, quality settings\r\n * 3) Auto-capture Photo - with interface controls, intervals, quality\r\n *\r\n * Features:\r\n * - Customizable placeholder overlay\r\n * - Comprehensive feedback functions\r\n * - Camera switching support\r\n * - Internationalization support\r\n */\r\n\r\n\"use client\";\r\n\r\nimport { Camera, Pause, Play, RefreshCw, Square, Video } from \"lucide-react\";\r\nimport * as React from \"react\";\r\nimport { useCallback, useEffect, useRef, useState, useTransition } from \"react\";\r\nimport WebcamCore from \"react-webcam\";\r\nimport { cn } from \"@ayasofyazilim/ui/lib/utils\";\r\nimport { Button } from \"@ayasofyazilim/ui/components/button\";\r\n\r\n// Types\r\nexport interface VideoDimensions {\r\n width: number;\r\n height: number;\r\n}\r\n\r\n// Core Feature Interfaces\r\nexport interface VideoRecordingConfig {\r\n hasInterface: boolean; // Show video recording UI controls\r\n autoStart?: boolean; // Auto-start recording when camera ready\r\n maxVideoDuration?: number; // Max duration in seconds (default: 60)\r\n quality?: \"low\" | \"medium\" | \"high\"; // Video quality\r\n mimeType?: string; // Video MIME type (default: 'video/webm')\r\n}\r\n\r\nexport interface PhotoCaptureConfig {\r\n hasInterface: boolean; // Show photo capture UI controls\r\n quality?: number; // JPEG quality 0-1 (default: 0.95)\r\n}\r\n\r\nexport interface AutoCaptureConfig {\r\n hasInterface: boolean; // Show auto-capture UI controls\r\n captureInterval: number; // Interval in seconds\r\n startOnReady?: boolean; // Auto-start when camera ready (only on initial load)\r\n quality?: number; // JPEG quality 0-1 (default: 0.95)\r\n stopOnCapture?: boolean; // Stop auto capture after first successful capture\r\n}\r\n\r\n// Feedback Functions\r\nexport interface WebcamCallbacks {\r\n onWebcamReady?: (dimensions: VideoDimensions) => void;\r\n onVideoStart?: () => void;\r\n onVideoEnd?: (videoBlob: Blob, duration: number) => void;\r\n onPhotoCaptured?: (imageData: string) => void;\r\n onAutoPhotoCaptured?: (imageData: string) => void;\r\n onAutoCaptureStart?: () => void;\r\n beforeStartAutoCapture?: () => void;\r\n onAutoCaptureStop?: () => void;\r\n onError?: (error: string) => void;\r\n}\r\n\r\n// Main Props Interface\r\nexport interface WebcamProps {\r\n // Core Features (at least one must be enabled)\r\n videoRecording?: VideoRecordingConfig;\r\n photoCapture?: PhotoCaptureConfig;\r\n autoCapture?: AutoCaptureConfig;\r\n\r\n // Camera Settings\r\n defaultCamera?: \"front\" | \"back\"; // Default camera (front='user', back='environment')\r\n allowCameraSwitch?: boolean; // Allow camera switching\r\n\r\n // UI Customization\r\n placeholder?: React.ReactElement; // Overlay that covers camera area\r\n showCapturedImage?: boolean; // Show last captured image preview\r\n capturedImage?: string | null; // Current captured image for preview\r\n forceHideInterface?: boolean; // Force hide interface controls (useful for manual capture mode)\r\n // Feedback Functions\r\n callbacks?: WebcamCallbacks;\r\n\r\n // Labels for Translation\r\n labels?: {\r\n // Video Recording\r\n startRecording?: string;\r\n stopRecording?: string;\r\n recording?: string;\r\n\r\n // Photo Capture\r\n capturePhoto?: string;\r\n\r\n // Auto Capture\r\n startAutoCapture?: string;\r\n stopAutoCapture?: string;\r\n autoCapturing?: string;\r\n\r\n // General\r\n switchCamera?: string;\r\n cameraReady?: string;\r\n cameraError?: string;\r\n };\r\n\r\n // Styling\r\n classNames?: {\r\n container?: string;\r\n webcam?: string;\r\n placeholder?: string;\r\n controls?: string;\r\n previewImage?: string;\r\n };\r\n\r\n // Technical Settings\r\n webcamRef?: React.RefObject<WebcamCore>;\r\n videoCheckInterval?: number; // default: 500ms\r\n maxRetryCount?: number; // default: 10\r\n interfaceLocation?: \"static\" | \"absolute\"; // Location of controls (default: 'bottom')\r\n showBorder?: boolean; // Show border around webcam area (default: true)\r\n}\r\n\r\nexport type WebcamCaptureProps = WebcamProps;\r\n\r\n// Legacy aliases for backward compatibility\r\nexport type WebcamAutoCapture = WebcamProps;\r\nexport type WebcamManualCapture = WebcamProps;\r\n\r\nexport function Webcam(props: WebcamProps) {\r\n const {\r\n videoRecording,\r\n photoCapture,\r\n autoCapture,\r\n defaultCamera = \"front\",\r\n allowCameraSwitch = false,\r\n placeholder,\r\n showCapturedImage = false,\r\n capturedImage,\r\n callbacks,\r\n labels = {},\r\n classNames,\r\n webcamRef: externalWebcamRef,\r\n videoCheckInterval = 500,\r\n maxRetryCount = 10,\r\n showBorder = false,\r\n forceHideInterface = false,\r\n interfaceLocation = \"static\",\r\n } = props;\r\n\r\n // Validation: At least one feature must be enabled\r\n if (!videoRecording && !photoCapture && !autoCapture) {\r\n throw new Error(\r\n \"WebcamComponent: At least one core feature (videoRecording, photoCapture, or autoCapture) must be enabled\",\r\n );\r\n }\r\n\r\n // Default labels\r\n const defaultLabels = {\r\n startRecording: \"Start Recording\",\r\n stopRecording: \"Stop Recording\",\r\n recording: \"Recording...\",\r\n capturePhoto: \"Capture Photo\",\r\n startAutoCapture: \"Start Auto Capture\",\r\n stopAutoCapture: \"Stop Auto Capture\",\r\n autoCapturing: \"Auto Capturing...\",\r\n switchCamera: \"Switch Camera\",\r\n cameraReady: \"Camera Ready\",\r\n cameraError: \"Camera Error\",\r\n ...labels,\r\n };\r\n\r\n // State\r\n const [isPending, startTransition] = useTransition();\r\n const [facingMode, setFacingMode] = useState<\"user\" | \"environment\">(\r\n defaultCamera === \"front\" ? \"user\" : \"environment\",\r\n );\r\n const [isWebcamReady, setIsWebcamReady] = useState(false);\r\n // Video Recording State\r\n const [isRecording, setIsRecording] = useState(false);\r\n const [recordingDuration, setRecordingDuration] = useState(0);\r\n\r\n // Auto Capture State\r\n const [isAutoCapturing, setIsAutoCapturing] = useState(false);\r\n\r\n // Auto capture state to track if it has been initially started\r\n const [hasAutoStarted, setHasAutoStarted] = useState(false);\r\n\r\n // Refs\r\n const internalWebcamRef = useRef<WebcamCore>(null);\r\n const webcamRef = externalWebcamRef || internalWebcamRef;\r\n const videoCheckIntervalRef = useRef<NodeJS.Timeout | null>(null);\r\n const autoCapturIntervalRef = useRef<NodeJS.Timeout | null>(null);\r\n const recordingIntervalRef = useRef<NodeJS.Timeout | null>(null);\r\n const retryCountRef = useRef(0);\r\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\r\n const recordedChunksRef = useRef<Blob[]>([]);\r\n\r\n // Cleanup utilities\r\n const clearVideoCheckInterval = useCallback(() => {\r\n if (videoCheckIntervalRef.current) {\r\n clearInterval(videoCheckIntervalRef.current);\r\n videoCheckIntervalRef.current = null;\r\n }\r\n }, []);\r\n\r\n const clearAutoCapture = useCallback(() => {\r\n if (autoCapturIntervalRef.current) {\r\n clearInterval(autoCapturIntervalRef.current);\r\n autoCapturIntervalRef.current = null;\r\n }\r\n }, []);\r\n\r\n const clearRecordingInterval = useCallback(() => {\r\n if (recordingIntervalRef.current) {\r\n clearInterval(recordingIntervalRef.current);\r\n recordingIntervalRef.current = null;\r\n }\r\n }, []);\r\n\r\n // Video Recording Functions\r\n const startVideoRecording = useCallback(() => {\r\n if (!webcamRef.current?.stream || isRecording || !videoRecording) return;\r\n\r\n try {\r\n const { stream } = webcamRef.current;\r\n const mimeType = videoRecording.mimeType || \"video/webm\";\r\n\r\n const mediaRecorder = new MediaRecorder(stream, { mimeType });\r\n recordedChunksRef.current = [];\r\n\r\n mediaRecorder.ondataavailable = (event) => {\r\n if (event.data.size > 0) {\r\n recordedChunksRef.current.push(event.data);\r\n }\r\n };\r\n\r\n mediaRecorder.onstop = () => {\r\n const blob = new Blob(recordedChunksRef.current, { type: mimeType });\r\n const duration = recordingDuration;\r\n\r\n callbacks?.onVideoEnd?.(blob, duration);\r\n setIsRecording(false);\r\n setRecordingDuration(0);\r\n clearRecordingInterval();\r\n };\r\n\r\n mediaRecorderRef.current = mediaRecorder;\r\n mediaRecorder.start();\r\n\r\n const startTime = Date.now();\r\n setIsRecording(true);\r\n setRecordingDuration(0);\r\n\r\n // Start duration tracking\r\n recordingIntervalRef.current = setInterval(() => {\r\n const elapsed = Math.floor((Date.now() - startTime) / 1000);\r\n setRecordingDuration(elapsed);\r\n\r\n // Auto-stop if max duration reached\r\n if (\r\n videoRecording.maxVideoDuration &&\r\n elapsed >= videoRecording.maxVideoDuration\r\n ) {\r\n stopVideoRecording();\r\n }\r\n }, 1000);\r\n\r\n callbacks?.onVideoStart?.();\r\n } catch (error) {\r\n callbacks?.onError?.(`Failed to start video recording: ${error}`);\r\n }\r\n }, [\r\n webcamRef,\r\n isRecording,\r\n videoRecording,\r\n callbacks,\r\n recordingDuration,\r\n clearRecordingInterval,\r\n ]);\r\n\r\n const stopVideoRecording = useCallback(() => {\r\n if (mediaRecorderRef.current && isRecording) {\r\n mediaRecorderRef.current.stop();\r\n mediaRecorderRef.current = null;\r\n }\r\n }, [isRecording]);\r\n\r\n // Photo Capture Functions\r\n const captureHighQualityPhoto = useCallback((): string | null => {\r\n const video = webcamRef.current?.video;\r\n if (!video) return null;\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return null;\r\n\r\n canvas.width = video.videoWidth;\r\n canvas.height = video.videoHeight;\r\n\r\n ctx.imageSmoothingEnabled = true;\r\n ctx.imageSmoothingQuality = \"high\";\r\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n\r\n const quality = photoCapture?.quality || 0.95;\r\n return canvas.toDataURL(\"image/jpeg\", quality);\r\n }, [webcamRef, photoCapture]);\r\n\r\n const capturePhoto = useCallback(() => {\r\n if (!photoCapture) return;\r\n\r\n const imageData = captureHighQualityPhoto();\r\n if (imageData) {\r\n callbacks?.onPhotoCaptured?.(imageData);\r\n }\r\n }, [photoCapture, captureHighQualityPhoto, callbacks]);\r\n\r\n const stopAutoCapture = useCallback(() => {\r\n setIsAutoCapturing(false);\r\n callbacks?.onAutoCaptureStop?.();\r\n clearAutoCapture();\r\n }, [clearAutoCapture, callbacks]);\r\n\r\n // Auto Capture Functions\r\n const captureAutoPhoto = useCallback(() => {\r\n if (!autoCapture) return;\r\n\r\n const video = webcamRef.current?.video;\r\n if (!video) return;\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n canvas.width = video.videoWidth;\r\n canvas.height = video.videoHeight;\r\n\r\n ctx.imageSmoothingEnabled = true;\r\n ctx.imageSmoothingQuality = \"high\";\r\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n\r\n const quality = autoCapture.quality || 0.95;\r\n const imageData = canvas.toDataURL(\"image/jpeg\", quality);\r\n\r\n if (imageData) {\r\n callbacks?.onAutoPhotoCaptured?.(imageData);\r\n\r\n // Stop auto capture if stopOnCapture is enabled\r\n if (autoCapture.stopOnCapture) {\r\n stopAutoCapture();\r\n }\r\n }\r\n }, [webcamRef, autoCapture, callbacks, stopAutoCapture]);\r\n\r\n const startAutoCapture = useCallback(\r\n (isManual = false) => {\r\n if (!autoCapture || !isWebcamReady || isAutoCapturing) return;\r\n\r\n // If it's automatic start (startOnReady) and already started, don't start again\r\n if (!isManual && autoCapture.startOnReady && hasAutoStarted) return;\r\n\r\n setIsAutoCapturing(true);\r\n callbacks?.onAutoCaptureStart?.();\r\n\r\n // Set hasAutoStarted flag only for automatic starts\r\n if (!isManual && autoCapture.startOnReady) {\r\n setHasAutoStarted(true);\r\n }\r\n\r\n autoCapturIntervalRef.current = setInterval(() => {\r\n if (webcamRef.current && isWebcamReady) {\r\n captureAutoPhoto();\r\n }\r\n }, autoCapture.captureInterval * 1000);\r\n },\r\n [\r\n autoCapture,\r\n isWebcamReady,\r\n isAutoCapturing,\r\n captureAutoPhoto,\r\n webcamRef,\r\n callbacks,\r\n hasAutoStarted,\r\n ],\r\n );\r\n\r\n // Camera Management\r\n const switchCamera = useCallback(() => {\r\n const newFacingMode = facingMode === \"user\" ? \"environment\" : \"user\";\r\n setFacingMode(newFacingMode);\r\n setIsWebcamReady(false);\r\n setHasAutoStarted(false); // Reset auto-start flag for new camera\r\n stopAutoCapture();\r\n }, [facingMode, stopAutoCapture]);\r\n\r\n // Add device detection for better browser compatibility\r\n const [isMobile, setIsMobile] = useState(false);\r\n\r\n // Detect mobile device on component mount\r\n useEffect(() => {\r\n const checkIsMobile = () =>\r\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\r\n navigator.userAgent,\r\n );\r\n setIsMobile(checkIsMobile());\r\n }, []);\r\n\r\n // Video Readiness Check\r\n const checkVideoReady = useCallback(() => {\r\n const video = webcamRef.current?.video;\r\n if (!video) return false;\r\n\r\n const isReady =\r\n video.readyState >= 2 && video.videoWidth > 0 && video.videoHeight > 0;\r\n\r\n if (isReady) {\r\n const newDimensions: VideoDimensions = {\r\n width: video.videoWidth,\r\n height: video.videoHeight,\r\n };\r\n callbacks?.onWebcamReady?.(newDimensions);\r\n }\r\n\r\n return isReady;\r\n }, [webcamRef, callbacks]);\r\n\r\n // Video Initialization\r\n const handleUserMedia = useCallback(() => {\r\n clearVideoCheckInterval();\r\n retryCountRef.current = 0;\r\n\r\n videoCheckIntervalRef.current = setInterval(() => {\r\n if (checkVideoReady()) {\r\n setIsWebcamReady(true);\r\n clearVideoCheckInterval();\r\n\r\n // Auto-start features if enabled\r\n if (videoRecording?.autoStart) {\r\n startVideoRecording();\r\n }\r\n\r\n if (autoCapture?.startOnReady && !hasAutoStarted) {\r\n setTimeout(() => {\r\n startAutoCapture(false); // Automatic start\r\n }, 100);\r\n }\r\n } else {\r\n retryCountRef.current++;\r\n\r\n if (retryCountRef.current > maxRetryCount) {\r\n clearVideoCheckInterval();\r\n callbacks?.onError?.(\r\n \"Failed to initialize camera after maximum retries\",\r\n );\r\n\r\n // Try with default constraints as a fallback\r\n const currentFacingMode = facingMode;\r\n setFacingMode(\"user\");\r\n setTimeout(() => setFacingMode(currentFacingMode), 100);\r\n }\r\n }\r\n }, videoCheckInterval);\r\n\r\n return clearVideoCheckInterval;\r\n }, [\r\n clearVideoCheckInterval,\r\n checkVideoReady,\r\n videoRecording,\r\n autoCapture,\r\n startVideoRecording,\r\n startAutoCapture,\r\n maxRetryCount,\r\n videoCheckInterval,\r\n facingMode,\r\n callbacks,\r\n ]);\r\n\r\n // Handle camera initialization errors\r\n const handleUserMediaError = useCallback(\r\n (error: string | DOMException) => {\r\n callbacks?.onError?.(\r\n typeof error === \"string\" ? error : `Camera error: ${error.message}`,\r\n );\r\n setIsWebcamReady(false);\r\n },\r\n [callbacks],\r\n );\r\n\r\n // Manual capture function\r\n const handleCapturePhoto = useCallback(() => {\r\n startTransition(() => {\r\n capturePhoto();\r\n });\r\n }, [capturePhoto, startTransition]);\r\n\r\n // Manual auto capture start function for button\r\n const handleStartAutoCapture = useCallback(() => {\r\n if (callbacks?.beforeStartAutoCapture) callbacks.beforeStartAutoCapture();\r\n startAutoCapture(true); // Manual start\r\n }, [startAutoCapture, callbacks]);\r\n\r\n // Effects\r\n useEffect(\r\n () => () => {\r\n clearVideoCheckInterval();\r\n stopAutoCapture();\r\n clearAutoCapture();\r\n clearRecordingInterval();\r\n },\r\n [\r\n clearVideoCheckInterval,\r\n stopAutoCapture,\r\n clearAutoCapture,\r\n clearRecordingInterval,\r\n ],\r\n );\r\n\r\n useEffect(() => {\r\n if (\r\n autoCapture?.startOnReady &&\r\n isWebcamReady &&\r\n !isAutoCapturing &&\r\n !hasAutoStarted\r\n ) {\r\n startAutoCapture(false); // Automatic start\r\n }\r\n }, [\r\n autoCapture,\r\n isWebcamReady,\r\n isAutoCapturing,\r\n hasAutoStarted,\r\n startAutoCapture,\r\n ]);\r\n\r\n // Render functions\r\n const renderVideoRecordingControls = () => {\r\n if (!videoRecording?.hasInterface || forceHideInterface) return null;\r\n\r\n return (\r\n <div\r\n className=\"flex flex-col items-center space-y-2\"\r\n key=\"video-recording-controls\"\r\n >\r\n {isRecording ? (\r\n <>\r\n <Button\r\n className=\"size-12 rounded-full border-2 border-red-500 bg-red-500 p-0 text-white\"\r\n onClick={stopVideoRecording}\r\n >\r\n <Square className=\"size-4\" />\r\n </Button>\r\n <div className=\"flex items-center space-x-2 text-white\">\r\n <div className=\"h-2 w-2 animate-pulse rounded-full bg-red-500\" />\r\n <span className=\"text-xs\">\r\n {defaultLabels.recording} {Math.floor(recordingDuration / 60)}:\r\n {String(recordingDuration % 60).padStart(2, \"0\")}\r\n </span>\r\n </div>\r\n </>\r\n ) : (\r\n <Button\r\n className=\"size-12 rounded-full border-2 border-white bg-white/10 p-0 text-white\"\r\n disabled={!isWebcamReady}\r\n onClick={startVideoRecording}\r\n >\r\n <Video className=\"size-4\" />\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const renderPhotoCaptureControls = () => {\r\n if (!photoCapture?.hasInterface || forceHideInterface) return null;\r\n\r\n return (\r\n <Button\r\n key=\"photo-capture-controls\"\r\n className=\"size-12 rounded-full border-2 border-white bg-white/10 p-0 text-white transition-all hover:bg-white hover:ring-4\"\r\n disabled={isPending || !isWebcamReady}\r\n onClick={handleCapturePhoto}\r\n >\r\n <Camera className=\"size-4\" />\r\n <span className=\"sr-only\">{defaultLabels.capturePhoto}</span>\r\n </Button>\r\n );\r\n };\r\n\r\n const renderAutoCaptureControls = () => {\r\n if (!autoCapture?.hasInterface || forceHideInterface) return null;\r\n\r\n return (\r\n <div\r\n className=\"flex flex-col items-center space-y-2\"\r\n key=\"auto-capture-controls\"\r\n >\r\n {isAutoCapturing ? (\r\n <>\r\n <Button\r\n className=\"size-12 rounded-full border-2 p-0 text-white\"\r\n variant=\"ghost\"\r\n onClick={stopAutoCapture}\r\n >\r\n <Pause className=\"size-4\" />\r\n </Button>\r\n <div className=\"flex items-center space-x-2 text-white\">\r\n <div className=\"h-2 w-2 animate-pulse rounded-full bg-green-500\" />\r\n <span className=\"text-xs\">{defaultLabels.autoCapturing}</span>\r\n </div>\r\n </>\r\n ) : (\r\n <Button\r\n className=\"size-12 rounded-full border-2 p-0 text-white\"\r\n variant=\"ghost\"\r\n disabled={!isWebcamReady}\r\n onClick={handleStartAutoCapture}\r\n >\r\n <Play className=\"size-4\" />\r\n <span className=\"sr-only\">{defaultLabels.startAutoCapture}</span>\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const renderCameraSwitchButton = () => {\r\n if (!allowCameraSwitch || forceHideInterface) return null;\r\n\r\n return (\r\n <Button\r\n key=\"camera-switch-button\"\r\n className=\"size-8 rounded-full bg-white/10 p-0 text-white\"\r\n onClick={switchCamera}\r\n variant=\"ghost\"\r\n >\r\n <RefreshCw className=\"size-4\" />\r\n <span className=\"sr-only\">{defaultLabels.switchCamera}</span>\r\n </Button>\r\n );\r\n };\r\n\r\n const renderCapturedImagePreview = () => {\r\n if (!showCapturedImage || !capturedImage) return null;\r\n\r\n return (\r\n <div className={cn(\"captured size-10\", classNames?.previewImage)}>\r\n <img\r\n src={capturedImage}\r\n alt=\"Captured\"\r\n className=\"size-10 rounded-md object-cover\"\r\n />\r\n </div>\r\n );\r\n };\r\n\r\n const renderControls = () => {\r\n const controls = [];\r\n\r\n if (videoRecording?.hasInterface || forceHideInterface) {\r\n controls.push(renderVideoRecordingControls());\r\n }\r\n\r\n if (photoCapture?.hasInterface || forceHideInterface) {\r\n controls.push(renderPhotoCaptureControls());\r\n }\r\n\r\n if (autoCapture?.hasInterface || forceHideInterface) {\r\n controls.push(renderAutoCaptureControls());\r\n }\r\n\r\n return controls.filter(Boolean);\r\n };\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"webcam-container overflow-hidden rounded-md bg-black relative\",\r\n classNames?.container,\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n \"webcam relative\",\r\n showBorder && \"p-2\",\r\n classNames?.webcam,\r\n )}\r\n >\r\n <div className=\"relative\">\r\n <WebcamCore\r\n audio={false}\r\n className=\"background-transparent h-auto w-full rounded-md\"\r\n mirrored={facingMode === \"user\"}\r\n onUserMedia={handleUserMedia}\r\n onUserMediaError={handleUserMediaError}\r\n ref={webcamRef}\r\n screenshotFormat=\"image/jpeg\"\r\n screenshotQuality={1}\r\n videoConstraints={{\r\n facingMode,\r\n width: { ideal: 1920, min: 640 },\r\n height: { ideal: 1920, min: 640 },\r\n frameRate: { ideal: 30, min: 15 },\r\n aspectRatio: isMobile ? 1.0 : 4 / 3,\r\n }}\r\n />\r\n\r\n {placeholder && isWebcamReady && (\r\n <div\r\n className={cn(\r\n \"absolute w-full h-full inset-0 z-3\",\r\n classNames?.placeholder,\r\n )}\r\n >\r\n {placeholder}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div\r\n className={cn(\r\n \"actions flex items-center justify-between p-2 pt-0\",\r\n classNames?.controls,\r\n interfaceLocation === \"absolute\"\r\n ? \"absolute bottom-0 left-0 p-4 z-10\"\r\n : \"\",\r\n )}\r\n >\r\n {renderCapturedImagePreview()}\r\n\r\n <div className=\"flex items-center space-x-4\">\r\n {renderControls()}\r\n {renderCameraSwitchButton()}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ayasofyazilim/ui",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -143,81 +143,20 @@
143
143
  "./src/aria/*.tsx"
144
144
  ]
145
145
  },
146
- "./custom/schema-form": {
147
- "types": "./src/custom/schema-form/index.tsx",
148
- "default": [
149
- "./dist/custom/schema-form/index.js",
150
- "./src/custom/schema-form/index.tsx"
151
- ]
152
- },
153
- "./custom/master-data-grid": {
154
- "types": "./src/custom/master-data-grid/index.ts",
155
- "default": [
156
- "./dist/custom/master-data-grid/index.js",
157
- "./src/custom/master-data-grid/index.ts"
158
- ]
159
- },
160
- "./custom/filter-component": {
161
- "types": "./src/custom/filter-component/index.tsx",
162
- "default": [
163
- "./dist/custom/filter-component/index.js",
164
- "./src/custom/filter-component/index.tsx"
165
- ]
166
- },
167
- "./custom/tanstack-table": {
168
- "types": "./src/custom/tanstack-table/index.tsx",
169
- "default": [
170
- "./dist/custom/tanstack-table/index.js",
171
- "./src/custom/tanstack-table/index.tsx"
172
- ]
173
- },
174
- "./custom/tscanify": {
175
- "types": "./src/custom/tscanify/index.ts",
176
- "default": [
177
- "./dist/custom/tscanify/index.js",
178
- "./src/custom/tscanify/index.ts"
179
- ]
180
- },
181
- "./custom/email-input": {
182
- "types": "./src/custom/email-input/index.tsx",
183
- "default": [
184
- "./dist/custom/email-input/index.js",
185
- "./src/custom/email-input/index.tsx"
186
- ]
187
- },
188
- "./custom/document-viewer": {
189
- "types": "./src/custom/document-viewer/index.tsx",
190
- "default": [
191
- "./dist/custom/document-viewer/index.js",
192
- "./src/custom/document-viewer/index.tsx"
193
- ]
194
- },
195
- "./custom/document-scanner": {
196
- "types": "./src/custom/document-scanner/index.tsx",
197
- "default": [
198
- "./dist/custom/document-scanner/index.js",
199
- "./src/custom/document-scanner/index.tsx"
200
- ]
201
- },
202
- "./custom/charts": {
203
- "types": "./src/custom/charts/index.tsx",
204
- "default": [
205
- "./dist/custom/charts/index.js",
206
- "./src/custom/charts/index.tsx"
207
- ]
208
- },
209
- "./custom/date-picker": {
210
- "types": "./src/custom/date-picker/index.tsx",
211
- "default": [
212
- "./dist/custom/date-picker/index.js",
213
- "./src/custom/date-picker/index.tsx"
214
- ]
215
- },
216
146
  "./custom/*": {
217
- "types": "./src/custom/*.tsx",
147
+ "types": [
148
+ "./src/custom/*.tsx",
149
+ "./src/custom/*/index.tsx",
150
+ "./src/custom/*.ts",
151
+ "./src/custom/*/index.ts"
152
+ ],
218
153
  "default": [
219
154
  "./dist/custom/*.js",
220
- "./src/custom/*.tsx"
155
+ "./dist/custom/*/index.js",
156
+ "./src/custom/*.tsx",
157
+ "./src/custom/*/index.tsx",
158
+ "./src/custom/*.ts",
159
+ "./src/custom/*/index.ts"
221
160
  ]
222
161
  },
223
162
  "./hooks/*": {
@@ -233,17 +172,7 @@
233
172
  "lib/*": ["./src/lib/*"],
234
173
  "components/*": ["./src/components/*"],
235
174
  "aria/*": ["./src/aria/*"],
236
- "custom/schema-form": ["./src/custom/schema-form/index"],
237
- "custom/master-data-grid": ["./src/custom/master-data-grid/index"],
238
- "custom/filter-component": ["./src/custom/filter-component/index"],
239
- "custom/tanstack-table": ["./src/custom/tanstack-table/index"],
240
- "custom/tscanify": ["./src/custom/tscanify/index"],
241
- "custom/email-input": ["./src/custom/email-input/index"],
242
- "custom/document-viewer": ["./src/custom/document-viewer/index"],
243
- "custom/document-scanner": ["./src/custom/document-scanner/index"],
244
- "custom/charts": ["./src/custom/charts/index"],
245
- "custom/date-picker": ["./src/custom/date-picker/index"],
246
- "custom/*": ["./src/custom/*"],
175
+ "custom/*": ["./src/custom/*", "./src/custom/*/index"],
247
176
  "hooks/*": ["./src/hooks/*"]
248
177
  }
249
178
  }