@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.
- package/dist/aria/index.js +2 -0
- package/dist/aria/index.js.map +1 -0
- package/dist/aria/number-field.js +46 -0
- package/dist/aria/number-field.js.map +1 -0
- package/dist/components/accordion.js +66 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.js +148 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.js +69 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/aspect-ratio.js +12 -0
- package/dist/components/aspect-ratio.js.map +1 -0
- package/dist/components/avatar.js +55 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.js +62 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/breadcrumb.js +104 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/button-group.js +77 -0
- package/dist/components/button-group.js.map +1 -0
- package/dist/components/button.js +56 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.js +196 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.js +91 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.js +200 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/chart.js +250 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/checkbox.js +33 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/collapsible.js +36 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/command.js +178 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/context-menu.js +225 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/dialog.js +139 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/drawer.js +130 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown-menu.js +234 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/empty.js +100 -0
- package/dist/components/empty.js.map +1 -0
- package/dist/components/field.js +231 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/form.js +124 -0
- package/dist/components/form.js.map +1 -0
- package/dist/components/hover-card.js +40 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/input-group.js +156 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input-otp.js +68 -0
- package/dist/components/input-otp.js.map +1 -0
- package/dist/components/input.js +22 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/item.js +188 -0
- package/dist/components/item.js.map +1 -0
- package/dist/components/kbd.js +32 -0
- package/dist/components/kbd.js.map +1 -0
- package/dist/components/label.js +24 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/menubar.js +253 -0
- package/dist/components/menubar.js.map +1 -0
- package/dist/components/navigation-menu.js +171 -0
- package/dist/components/navigation-menu.js.map +1 -0
- package/dist/components/pagination.js +125 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.js +82 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.js +33 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.js +47 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/resizable.js +50 -0
- package/dist/components/resizable.js.map +1 -0
- package/dist/components/scroll-area.js +62 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/select.js +173 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.js +28 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.js +129 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/sidebar.js +759 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/skeleton.js +16 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.js +65 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/sonner.js +40 -0
- package/dist/components/sonner.js.map +1 -0
- package/dist/components/spinner.js +18 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/stepper.js +220 -0
- package/dist/components/stepper.js.map +1 -0
- package/dist/components/switch.js +33 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.js +131 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.js +69 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/textarea.js +19 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/toggle-group.js +70 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle.js +45 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/tooltip.js +65 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/custom/action-button.js +38 -0
- package/dist/custom/action-button.js.map +1 -0
- package/dist/custom/async-select.js +249 -0
- package/dist/custom/async-select.js.map +1 -0
- package/dist/custom/awesome-not-found.js +113 -0
- package/dist/custom/awesome-not-found.js.map +1 -0
- package/dist/custom/charts/area-chart.js +125 -0
- package/dist/custom/charts/area-chart.js.map +1 -0
- package/dist/custom/charts/bar-chart.js +232 -0
- package/dist/custom/charts/bar-chart.js.map +1 -0
- package/dist/custom/charts/chart-card.js +71 -0
- package/dist/custom/charts/chart-card.js.map +1 -0
- package/dist/custom/charts/index.js +5 -0
- package/dist/custom/charts/index.js.map +1 -0
- package/dist/custom/charts/pie-chart.js +153 -0
- package/dist/custom/charts/pie-chart.js.map +1 -0
- package/dist/custom/charts/radar-chart.js +112 -0
- package/dist/custom/charts/radar-chart.js.map +1 -0
- package/dist/custom/checkbox-tree.js +70 -0
- package/dist/custom/checkbox-tree.js.map +1 -0
- package/dist/custom/combobox.js +233 -0
- package/dist/custom/combobox.js.map +1 -0
- package/dist/custom/confirm-dialog.js +90 -0
- package/dist/custom/confirm-dialog.js.map +1 -0
- package/dist/custom/country-selector.js +151 -0
- package/dist/custom/country-selector.js.map +1 -0
- package/dist/custom/date-picker/calendar-rac.js +91 -0
- package/dist/custom/date-picker/calendar-rac.js.map +1 -0
- package/dist/custom/date-picker/datefield-rac.js +77 -0
- package/dist/custom/date-picker/datefield-rac.js.map +1 -0
- package/dist/custom/date-picker/index.js +251 -0
- package/dist/custom/date-picker/index.js.map +1 -0
- package/dist/custom/date-picker/types/index.js +1 -0
- package/dist/custom/date-picker/types/index.js.map +1 -0
- package/dist/custom/date-picker/utils/index.js +30 -0
- package/dist/custom/date-picker/utils/index.js.map +1 -0
- package/dist/custom/date-picker-old.js +46 -0
- package/dist/custom/date-picker-old.js.map +1 -0
- package/dist/custom/date-tooltip.js +89 -0
- package/dist/custom/date-tooltip.js.map +1 -0
- package/dist/custom/document-scanner/consts.js +13 -0
- package/dist/custom/document-scanner/consts.js.map +1 -0
- package/dist/custom/document-scanner/corner-adjustment/action-buttons.js +24 -0
- package/dist/custom/document-scanner/corner-adjustment/action-buttons.js.map +1 -0
- package/dist/custom/document-scanner/corner-adjustment/corner-handle.js +44 -0
- package/dist/custom/document-scanner/corner-adjustment/corner-handle.js.map +1 -0
- package/dist/custom/document-scanner/corner-adjustment/hooks/use-corner-drag.js +60 -0
- package/dist/custom/document-scanner/corner-adjustment/hooks/use-corner-drag.js.map +1 -0
- package/dist/custom/document-scanner/corner-adjustment/index.js +124 -0
- package/dist/custom/document-scanner/corner-adjustment/index.js.map +1 -0
- package/dist/custom/document-scanner/corner-adjustment/types.js +1 -0
- package/dist/custom/document-scanner/corner-adjustment/types.js.map +1 -0
- package/dist/custom/document-scanner/corner-adjustment/utils/clip-path.js +16 -0
- package/dist/custom/document-scanner/corner-adjustment/utils/clip-path.js.map +1 -0
- package/dist/custom/document-scanner/corner-adjustment/zoom-magnifier.js +85 -0
- package/dist/custom/document-scanner/corner-adjustment/zoom-magnifier.js.map +1 -0
- package/dist/custom/document-scanner/hooks/use-document-capture.js +61 -0
- package/dist/custom/document-scanner/hooks/use-document-capture.js.map +1 -0
- package/dist/custom/document-scanner/hooks/use-document-scanner.js +59 -0
- package/dist/custom/document-scanner/hooks/use-document-scanner.js.map +1 -0
- package/dist/custom/document-scanner/hooks/use-perspective-crop.js +31 -0
- package/dist/custom/document-scanner/hooks/use-perspective-crop.js.map +1 -0
- package/dist/custom/document-scanner/index.js +229 -0
- package/dist/custom/document-scanner/index.js.map +1 -0
- package/dist/custom/document-scanner/lib.js +289 -0
- package/dist/custom/document-scanner/lib.js.map +1 -0
- package/dist/custom/document-scanner/types.js +1 -0
- package/dist/custom/document-scanner/types.js.map +1 -0
- package/dist/custom/document-scanner/utils/perspective-correction.js +100 -0
- package/dist/custom/document-scanner/utils/perspective-correction.js.map +1 -0
- package/dist/custom/document-viewer/controllers.js +76 -0
- package/dist/custom/document-viewer/controllers.js.map +1 -0
- package/dist/custom/document-viewer/index.js +36 -0
- package/dist/custom/document-viewer/index.js.map +1 -0
- package/dist/custom/document-viewer/renderers/image.js +40 -0
- package/dist/custom/document-viewer/renderers/image.js.map +1 -0
- package/dist/custom/document-viewer/renderers/index.js +3 -0
- package/dist/custom/document-viewer/renderers/index.js.map +1 -0
- package/dist/custom/document-viewer/renderers/pdf.js +95 -0
- package/dist/custom/document-viewer/renderers/pdf.js.map +1 -0
- package/dist/custom/email-input/email.js +184 -0
- package/dist/custom/email-input/email.js.map +1 -0
- package/dist/custom/email-input/index.js +8 -0
- package/dist/custom/email-input/index.js.map +1 -0
- package/dist/custom/email-input/types.js +13 -0
- package/dist/custom/email-input/types.js.map +1 -0
- package/dist/custom/file-uploader.js +389 -0
- package/dist/custom/file-uploader.js.map +1 -0
- package/dist/custom/filter-component/fields/async-select.js +31 -0
- package/dist/custom/filter-component/fields/async-select.js.map +1 -0
- package/dist/custom/filter-component/fields/date.js +56 -0
- package/dist/custom/filter-component/fields/date.js.map +1 -0
- package/dist/custom/filter-component/fields/multi-select.js +28 -0
- package/dist/custom/filter-component/fields/multi-select.js.map +1 -0
- package/dist/custom/filter-component/index.js +149 -0
- package/dist/custom/filter-component/index.js.map +1 -0
- package/dist/custom/image-canvas.js +193 -0
- package/dist/custom/image-canvas.js.map +1 -0
- package/dist/custom/json-editor.js +30 -0
- package/dist/custom/json-editor.js.map +1 -0
- package/dist/custom/master-data-grid/components/dialogs/column-settings-dialog.js +84 -0
- package/dist/custom/master-data-grid/components/dialogs/column-settings-dialog.js.map +1 -0
- package/dist/custom/master-data-grid/components/dialogs/index.js +5 -0
- package/dist/custom/master-data-grid/components/dialogs/index.js.map +1 -0
- package/dist/custom/master-data-grid/components/filters/client-filter.js +310 -0
- package/dist/custom/master-data-grid/components/filters/client-filter.js.map +1 -0
- package/dist/custom/master-data-grid/components/filters/filter-input.js +209 -0
- package/dist/custom/master-data-grid/components/filters/filter-input.js.map +1 -0
- package/dist/custom/master-data-grid/components/filters/index.js +9 -0
- package/dist/custom/master-data-grid/components/filters/index.js.map +1 -0
- package/dist/custom/master-data-grid/components/filters/inline-column-filter.js +188 -0
- package/dist/custom/master-data-grid/components/filters/inline-column-filter.js.map +1 -0
- package/dist/custom/master-data-grid/components/filters/multi-filter-dialog.js +65 -0
- package/dist/custom/master-data-grid/components/filters/multi-filter-dialog.js.map +1 -0
- package/dist/custom/master-data-grid/components/filters/server-filter.js +213 -0
- package/dist/custom/master-data-grid/components/filters/server-filter.js.map +1 -0
- package/dist/custom/master-data-grid/components/master-data-grid.js +421 -0
- package/dist/custom/master-data-grid/components/master-data-grid.js.map +1 -0
- package/dist/custom/master-data-grid/components/pagination/index.js +5 -0
- package/dist/custom/master-data-grid/components/pagination/index.js.map +1 -0
- package/dist/custom/master-data-grid/components/pagination/pagination.js +159 -0
- package/dist/custom/master-data-grid/components/pagination/pagination.js.map +1 -0
- package/dist/custom/master-data-grid/components/table/cell-renderer.js +442 -0
- package/dist/custom/master-data-grid/components/table/cell-renderer.js.map +1 -0
- package/dist/custom/master-data-grid/components/table/header-cell.js +116 -0
- package/dist/custom/master-data-grid/components/table/header-cell.js.map +1 -0
- package/dist/custom/master-data-grid/components/table/index.js +5 -0
- package/dist/custom/master-data-grid/components/table/index.js.map +1 -0
- package/dist/custom/master-data-grid/components/table/table-body-renderer.js +79 -0
- package/dist/custom/master-data-grid/components/table/table-body-renderer.js.map +1 -0
- package/dist/custom/master-data-grid/components/table/virtual-body.js +86 -0
- package/dist/custom/master-data-grid/components/table/virtual-body.js.map +1 -0
- package/dist/custom/master-data-grid/components/toolbar/index.js +5 -0
- package/dist/custom/master-data-grid/components/toolbar/index.js.map +1 -0
- package/dist/custom/master-data-grid/components/toolbar/toolbar.js +238 -0
- package/dist/custom/master-data-grid/components/toolbar/toolbar.js.map +1 -0
- package/dist/custom/master-data-grid/hooks/index.js +7 -0
- package/dist/custom/master-data-grid/hooks/index.js.map +1 -0
- package/dist/custom/master-data-grid/hooks/use-columns.js +278 -0
- package/dist/custom/master-data-grid/hooks/use-columns.js.map +1 -0
- package/dist/custom/master-data-grid/hooks/use-editing.js +75 -0
- package/dist/custom/master-data-grid/hooks/use-editing.js.map +1 -0
- package/dist/custom/master-data-grid/hooks/use-table-state-reducer.js +96 -0
- package/dist/custom/master-data-grid/hooks/use-table-state-reducer.js.map +1 -0
- package/dist/custom/master-data-grid/hooks/use-table-state.js +25 -0
- package/dist/custom/master-data-grid/hooks/use-table-state.js.map +1 -0
- package/dist/custom/master-data-grid/index.js +5 -0
- package/dist/custom/master-data-grid/index.js.map +1 -0
- package/dist/custom/master-data-grid/types.js +1 -0
- package/dist/custom/master-data-grid/types.js.map +1 -0
- package/dist/custom/master-data-grid/utils/column-generator.js +203 -0
- package/dist/custom/master-data-grid/utils/column-generator.js.map +1 -0
- package/dist/custom/master-data-grid/utils/export-utils.js +46 -0
- package/dist/custom/master-data-grid/utils/export-utils.js.map +1 -0
- package/dist/custom/master-data-grid/utils/filter-fns.js +218 -0
- package/dist/custom/master-data-grid/utils/filter-fns.js.map +1 -0
- package/dist/custom/master-data-grid/utils/index.js +16 -0
- package/dist/custom/master-data-grid/utils/index.js.map +1 -0
- package/dist/custom/master-data-grid/utils/pinning-utils.js +70 -0
- package/dist/custom/master-data-grid/utils/pinning-utils.js.map +1 -0
- package/dist/custom/master-data-grid/utils/translation-utils.js +33 -0
- package/dist/custom/master-data-grid/utils/translation-utils.js.map +1 -0
- package/dist/custom/multi-select.js +339 -0
- package/dist/custom/multi-select.js.map +1 -0
- package/dist/custom/password-input.js +158 -0
- package/dist/custom/password-input.js.map +1 -0
- package/dist/custom/phone-input.js +127 -0
- package/dist/custom/phone-input.js.map +1 -0
- package/dist/custom/schema-form/custom/index.js +2 -0
- package/dist/custom/schema-form/custom/index.js.map +1 -0
- package/dist/custom/schema-form/custom/label.js +39 -0
- package/dist/custom/schema-form/custom/label.js.map +1 -0
- package/dist/custom/schema-form/fields/base-input-field.js +73 -0
- package/dist/custom/schema-form/fields/base-input-field.js.map +1 -0
- package/dist/custom/schema-form/fields/field.js +72 -0
- package/dist/custom/schema-form/fields/field.js.map +1 -0
- package/dist/custom/schema-form/fields/index.js +6 -0
- package/dist/custom/schema-form/fields/index.js.map +1 -0
- package/dist/custom/schema-form/fields/object.js +9 -0
- package/dist/custom/schema-form/fields/object.js.map +1 -0
- package/dist/custom/schema-form/fields/table-array/array-field-item.js +58 -0
- package/dist/custom/schema-form/fields/table-array/array-field-item.js.map +1 -0
- package/dist/custom/schema-form/fields/table-array/array-field-template.js +104 -0
- package/dist/custom/schema-form/fields/table-array/array-field-template.js.map +1 -0
- package/dist/custom/schema-form/index.js +219 -0
- package/dist/custom/schema-form/index.js.map +1 -0
- package/dist/custom/schema-form/templates/description.js +19 -0
- package/dist/custom/schema-form/templates/description.js.map +1 -0
- package/dist/custom/schema-form/templates/index.js +3 -0
- package/dist/custom/schema-form/templates/index.js.map +1 -0
- package/dist/custom/schema-form/templates/submit.js +31 -0
- package/dist/custom/schema-form/templates/submit.js.map +1 -0
- package/dist/custom/schema-form/types.js +1 -0
- package/dist/custom/schema-form/types.js.map +1 -0
- package/dist/custom/schema-form/utils/index.js +10 -0
- package/dist/custom/schema-form/utils/index.js.map +1 -0
- package/dist/custom/schema-form/utils/schema-dependency.js +349 -0
- package/dist/custom/schema-form/utils/schema-dependency.js.map +1 -0
- package/dist/custom/schema-form/utils/schemas.js +190 -0
- package/dist/custom/schema-form/utils/schemas.js.map +1 -0
- package/dist/custom/schema-form/utils/validation.js +19 -0
- package/dist/custom/schema-form/utils/validation.js.map +1 -0
- package/dist/custom/schema-form/widgets/boolean.js +73 -0
- package/dist/custom/schema-form/widgets/boolean.js.map +1 -0
- package/dist/custom/schema-form/widgets/combobox.js +222 -0
- package/dist/custom/schema-form/widgets/combobox.js.map +1 -0
- package/dist/custom/schema-form/widgets/date.js +56 -0
- package/dist/custom/schema-form/widgets/date.js.map +1 -0
- package/dist/custom/schema-form/widgets/email.js +37 -0
- package/dist/custom/schema-form/widgets/email.js.map +1 -0
- package/dist/custom/schema-form/widgets/index.js +11 -0
- package/dist/custom/schema-form/widgets/index.js.map +1 -0
- package/dist/custom/schema-form/widgets/password.js +42 -0
- package/dist/custom/schema-form/widgets/password.js.map +1 -0
- package/dist/custom/schema-form/widgets/phone.js +39 -0
- package/dist/custom/schema-form/widgets/phone.js.map +1 -0
- package/dist/custom/schema-form/widgets/select.js +78 -0
- package/dist/custom/schema-form/widgets/select.js.map +1 -0
- package/dist/custom/schema-form/widgets/selectable.js +25 -0
- package/dist/custom/schema-form/widgets/selectable.js.map +1 -0
- package/dist/custom/schema-form/widgets/string-array.js +237 -0
- package/dist/custom/schema-form/widgets/string-array.js.map +1 -0
- package/dist/custom/schema-form/widgets/url.js +53 -0
- package/dist/custom/schema-form/widgets/url.js.map +1 -0
- package/dist/custom/section-layout-v2.js +150 -0
- package/dist/custom/section-layout-v2.js.map +1 -0
- package/dist/custom/select-tabs.js +66 -0
- package/dist/custom/select-tabs.js.map +1 -0
- package/dist/custom/selectable.js +231 -0
- package/dist/custom/selectable.js.map +1 -0
- package/dist/custom/stepper.js +166 -0
- package/dist/custom/stepper.js.map +1 -0
- package/dist/custom/tab-layout.js +182 -0
- package/dist/custom/tab-layout.js.map +1 -0
- package/dist/custom/tanstack-table/fields/index.js +13 -0
- package/dist/custom/tanstack-table/fields/index.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-action-dialogs.js +76 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-action-dialogs.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-column-header.js +47 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-column-header.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-date.js +132 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-date.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-faceted.js +131 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-faceted.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-text.js +64 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-filter-text.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-pagination.js +135 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-pagination.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-plain-table.js +111 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-plain-table.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-confirmation.js +65 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-confirmation.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-custom-dialog.js +69 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions-custom-dialog.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions.js +119 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-row-actions.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-custom-dialog.js +75 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-custom-dialog.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-schemaform-dialog.js +41 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-table-actions-schemaform-dialog.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-toolbar.js +106 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-toolbar.js.map +1 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-view-options.js +132 -0
- package/dist/custom/tanstack-table/fields/tanstack-table-view-options.js.map +1 -0
- package/dist/custom/tanstack-table/index.js +217 -0
- package/dist/custom/tanstack-table/index.js.map +1 -0
- package/dist/custom/tanstack-table/types/index.js +1 -0
- package/dist/custom/tanstack-table/types/index.js.map +1 -0
- package/dist/custom/tanstack-table/utils/cell-with-actions.js +16 -0
- package/dist/custom/tanstack-table/utils/cell-with-actions.js.map +1 -0
- package/dist/custom/tanstack-table/utils/column-names.js +15 -0
- package/dist/custom/tanstack-table/utils/column-names.js.map +1 -0
- package/dist/custom/tanstack-table/utils/columns-by-row-data.js +246 -0
- package/dist/custom/tanstack-table/utils/columns-by-row-data.js.map +1 -0
- package/dist/custom/tanstack-table/utils/editable-columns-by-row-data.js +187 -0
- package/dist/custom/tanstack-table/utils/editable-columns-by-row-data.js.map +1 -0
- package/dist/custom/tanstack-table/utils/faceted-boolean-options.js +25 -0
- package/dist/custom/tanstack-table/utils/faceted-boolean-options.js.map +1 -0
- package/dist/custom/tanstack-table/utils/index.js +10 -0
- package/dist/custom/tanstack-table/utils/index.js.map +1 -0
- package/dist/custom/tanstack-table/utils/pinning-styles.js +38 -0
- package/dist/custom/tanstack-table/utils/pinning-styles.js.map +1 -0
- package/dist/custom/tanstack-table/utils/table.js +66 -0
- package/dist/custom/tanstack-table/utils/table.js.map +1 -0
- package/dist/custom/tanstack-table/utils/test-conditions.js +10 -0
- package/dist/custom/tanstack-table/utils/test-conditions.js.map +1 -0
- package/dist/custom/timeline.js +165 -0
- package/dist/custom/timeline.js.map +1 -0
- package/dist/custom/tree.js +130 -0
- package/dist/custom/tree.js.map +1 -0
- package/dist/custom/tscanify/browser.js +36 -0
- package/dist/custom/tscanify/browser.js.map +1 -0
- package/dist/custom/tscanify/index.js +34 -0
- package/dist/custom/tscanify/index.js.map +1 -0
- package/dist/custom/tscanify/tscanify-browser.js +363 -0
- package/dist/custom/tscanify/tscanify-browser.js.map +1 -0
- package/dist/custom/tscanify/tscanify.js +197 -0
- package/dist/custom/tscanify/tscanify.js.map +1 -0
- package/dist/custom/tscanify/types.js +1 -0
- package/dist/custom/tscanify/types.js.map +1 -0
- package/dist/custom/webcam.js +519 -0
- package/dist/custom/webcam.js.map +1 -0
- package/dist/hooks/use-callback-ref.js +15 -0
- package/dist/hooks/use-callback-ref.js.map +1 -0
- package/dist/hooks/use-controllable-state.js +49 -0
- package/dist/hooks/use-controllable-state.js.map +1 -0
- package/dist/hooks/use-debounce.js +18 -0
- package/dist/hooks/use-debounce.js.map +1 -0
- package/dist/hooks/use-is-visible.js +22 -0
- package/dist/hooks/use-is-visible.js.map +1 -0
- package/dist/hooks/use-media-query.js +19 -0
- package/dist/hooks/use-media-query.js.map +1 -0
- package/dist/hooks/use-mobile.js +21 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-on-window-resize.js +15 -0
- package/dist/hooks/use-on-window-resize.js.map +1 -0
- package/dist/hooks/use-scroll.js +20 -0
- package/dist/hooks/use-scroll.js.map +1 -0
- package/dist/lib/utils.js +48 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/zod.js +7 -0
- package/dist/lib/zod.js.map +1 -0
- package/package.json +34 -8
- package/src/aria/index.tsx +1 -1
- package/src/aria/number-field.tsx +41 -41
- package/src/components/accordion.tsx +66 -66
- package/src/components/alert-dialog.tsx +157 -157
- package/src/components/alert.tsx +70 -70
- package/src/components/aspect-ratio.tsx +11 -11
- package/src/components/avatar.tsx +53 -53
- package/src/components/badge.tsx +74 -67
- package/src/components/breadcrumb.tsx +109 -109
- package/src/components/button-group.tsx +83 -83
- package/src/components/button.tsx +69 -68
- package/src/components/calendar.tsx +216 -219
- package/src/components/card.tsx +92 -92
- package/src/components/carousel.tsx +241 -241
- package/src/components/chart.tsx +363 -363
- package/src/components/checkbox.tsx +32 -32
- package/src/components/collapsible.tsx +33 -33
- package/src/components/command.tsx +184 -184
- package/src/components/context-menu.tsx +252 -252
- package/src/components/dialog.tsx +144 -144
- package/src/components/drawer.tsx +135 -135
- package/src/components/dropdown-menu.tsx +258 -258
- package/src/components/empty.tsx +100 -100
- package/src/components/field.tsx +248 -248
- package/src/components/form.tsx +169 -169
- package/src/components/hover-card.tsx +44 -44
- package/src/components/input-group.tsx +170 -170
- package/src/components/input-otp.tsx +77 -77
- package/src/components/input.tsx +21 -21
- package/src/components/item.tsx +193 -193
- package/src/components/kbd.tsx +28 -28
- package/src/components/label.tsx +24 -24
- package/src/components/menubar.tsx +276 -276
- package/src/components/navigation-menu.tsx +168 -168
- package/src/components/pagination.tsx +127 -130
- package/src/components/popover.tsx +88 -88
- package/src/components/progress.tsx +31 -31
- package/src/components/radio-group.tsx +45 -45
- package/src/components/resizable.tsx +56 -56
- package/src/components/scroll-area.tsx +58 -58
- package/src/components/select.tsx +189 -189
- package/src/components/separator.tsx +28 -28
- package/src/components/sheet.tsx +140 -140
- package/src/components/sidebar.tsx +862 -862
- package/src/components/skeleton.tsx +13 -13
- package/src/components/slider.tsx +63 -63
- package/src/components/sonner.tsx +40 -40
- package/src/components/spinner.tsx +16 -16
- package/src/components/stepper.tsx +290 -291
- package/src/components/switch.tsx +31 -31
- package/src/components/table.tsx +133 -133
- package/src/components/tabs.tsx +66 -66
- package/src/components/textarea.tsx +18 -18
- package/src/components/toggle-group.tsx +83 -83
- package/src/components/toggle.tsx +47 -47
- package/src/components/tooltip.tsx +66 -66
- package/src/custom/action-button.tsx +45 -48
- package/src/custom/async-select.tsx +287 -287
- package/src/custom/awesome-not-found.tsx +116 -116
- package/src/custom/charts/area-chart.tsx +147 -147
- package/src/custom/charts/bar-chart.tsx +233 -233
- package/src/custom/charts/chart-card.tsx +103 -103
- package/src/custom/charts/index.tsx +16 -16
- package/src/custom/charts/pie-chart.tsx +168 -168
- package/src/custom/charts/radar-chart.tsx +126 -126
- package/src/custom/checkbox-tree.tsx +100 -100
- package/src/custom/combobox.tsx +296 -296
- package/src/custom/confirm-dialog.tsx +114 -102
- package/src/custom/country-selector.tsx +204 -204
- package/src/custom/date-picker/calendar-rac.tsx +109 -109
- package/src/custom/date-picker/datefield-rac.tsx +84 -84
- package/src/custom/date-picker/index.tsx +273 -273
- package/src/custom/date-picker/types/index.ts +4 -4
- package/src/custom/date-picker/utils/index.ts +42 -42
- package/src/custom/date-picker-old.tsx +50 -50
- package/src/custom/date-tooltip.tsx +98 -98
- package/src/custom/document-scanner/consts.ts +5 -5
- package/src/custom/document-scanner/corner-adjustment/action-buttons.tsx +33 -33
- package/src/custom/document-scanner/corner-adjustment/corner-handle.tsx +43 -43
- package/src/custom/document-scanner/corner-adjustment/hooks/use-corner-drag.ts +85 -85
- package/src/custom/document-scanner/corner-adjustment/index.tsx +125 -125
- package/src/custom/document-scanner/corner-adjustment/types.ts +53 -53
- package/src/custom/document-scanner/corner-adjustment/utils/clip-path.ts +22 -22
- package/src/custom/document-scanner/corner-adjustment/zoom-magnifier.tsx +115 -115
- package/src/custom/document-scanner/hooks/use-document-capture.ts +81 -81
- package/src/custom/document-scanner/hooks/use-document-scanner.ts +80 -80
- package/src/custom/document-scanner/hooks/use-perspective-crop.ts +38 -38
- package/src/custom/document-scanner/index.tsx +255 -255
- package/src/custom/document-scanner/lib.ts +407 -407
- package/src/custom/document-scanner/types.ts +205 -205
- package/src/custom/document-scanner/utils/perspective-correction.ts +139 -139
- package/src/custom/document-viewer/controllers.tsx +98 -98
- package/src/custom/document-viewer/index.tsx +43 -43
- package/src/custom/document-viewer/renderers/image.tsx +37 -37
- package/src/custom/document-viewer/renderers/index.tsx +2 -2
- package/src/custom/document-viewer/renderers/pdf.tsx +105 -105
- package/src/custom/email-input/domains.json +159 -159
- package/src/custom/email-input/email.tsx +231 -229
- package/src/custom/email-input/index.tsx +4 -4
- package/src/custom/email-input/types.ts +104 -104
- package/src/custom/file-uploader.tsx +541 -541
- package/src/custom/filter-component/fields/async-select.tsx +33 -33
- package/src/custom/filter-component/fields/date.tsx +60 -60
- package/src/custom/filter-component/fields/multi-select.tsx +30 -30
- package/src/custom/filter-component/index.tsx +217 -217
- package/src/custom/image-canvas.tsx +260 -260
- package/src/custom/json-editor.tsx +22 -22
- package/src/custom/master-data-grid/components/dialogs/column-settings-dialog.tsx +100 -100
- package/src/custom/master-data-grid/components/dialogs/index.ts +1 -1
- package/src/custom/master-data-grid/components/filters/client-filter.tsx +369 -368
- package/src/custom/master-data-grid/components/filters/filter-input.tsx +256 -256
- package/src/custom/master-data-grid/components/filters/index.ts +3 -3
- package/src/custom/master-data-grid/components/filters/inline-column-filter.tsx +233 -233
- package/src/custom/master-data-grid/components/filters/multi-filter-dialog.tsx +91 -90
- package/src/custom/master-data-grid/components/filters/server-filter.tsx +265 -255
- package/src/custom/master-data-grid/components/master-data-grid.tsx +472 -472
- package/src/custom/master-data-grid/components/pagination/index.ts +1 -1
- package/src/custom/master-data-grid/components/pagination/pagination.tsx +178 -178
- package/src/custom/master-data-grid/components/table/cell-renderer.tsx +621 -634
- package/src/custom/master-data-grid/components/table/header-cell.tsx +162 -162
- package/src/custom/master-data-grid/components/table/index.ts +4 -4
- package/src/custom/master-data-grid/components/table/table-body-renderer.tsx +113 -113
- package/src/custom/master-data-grid/components/table/virtual-body.tsx +138 -138
- package/src/custom/master-data-grid/components/toolbar/index.ts +1 -1
- package/src/custom/master-data-grid/components/toolbar/toolbar.tsx +314 -314
- package/src/custom/master-data-grid/hooks/index.ts +3 -3
- package/src/custom/master-data-grid/hooks/use-columns.tsx +353 -332
- package/src/custom/master-data-grid/hooks/use-editing.ts +106 -106
- package/src/custom/master-data-grid/hooks/use-table-state-reducer.ts +157 -157
- package/src/custom/master-data-grid/hooks/use-table-state.ts +31 -31
- package/src/custom/master-data-grid/index.ts +16 -16
- package/src/custom/master-data-grid/types.ts +487 -466
- package/src/custom/master-data-grid/utils/column-generator.tsx +324 -306
- package/src/custom/master-data-grid/utils/export-utils.ts +67 -67
- package/src/custom/master-data-grid/utils/filter-fns.ts +310 -290
- package/src/custom/master-data-grid/utils/index.ts +8 -8
- package/src/custom/master-data-grid/utils/pinning-utils.ts +88 -88
- package/src/custom/master-data-grid/utils/translation-utils.ts +42 -42
- package/src/custom/multi-select.tsx +434 -432
- package/src/custom/password-input.tsx +194 -194
- package/src/custom/phone-input.tsx +172 -172
- package/src/custom/schema-form/custom/index.tsx +1 -1
- package/src/custom/schema-form/custom/label.tsx +53 -53
- package/src/custom/schema-form/fields/base-input-field.tsx +82 -82
- package/src/custom/schema-form/fields/field.tsx +67 -67
- package/src/custom/schema-form/fields/index.tsx +5 -5
- package/src/custom/schema-form/fields/object.tsx +12 -12
- package/src/custom/schema-form/fields/table-array/array-field-item.tsx +90 -90
- package/src/custom/schema-form/fields/table-array/array-field-template.tsx +115 -115
- package/src/custom/schema-form/index.tsx +259 -259
- package/src/custom/schema-form/templates/description.tsx +20 -20
- package/src/custom/schema-form/templates/index.tsx +2 -2
- package/src/custom/schema-form/templates/submit.tsx +32 -32
- package/src/custom/schema-form/types.ts +64 -64
- package/src/custom/schema-form/utils/index.ts +4 -4
- package/src/custom/schema-form/utils/schema-dependency.ts +655 -655
- package/src/custom/schema-form/utils/schemas.ts +289 -289
- package/src/custom/schema-form/utils/validation.ts +23 -23
- package/src/custom/schema-form/widgets/boolean.tsx +77 -77
- package/src/custom/schema-form/widgets/combobox.tsx +274 -274
- package/src/custom/schema-form/widgets/date.tsx +59 -59
- package/src/custom/schema-form/widgets/email.tsx +34 -34
- package/src/custom/schema-form/widgets/index.tsx +10 -10
- package/src/custom/schema-form/widgets/password.tsx +40 -40
- package/src/custom/schema-form/widgets/phone.tsx +40 -40
- package/src/custom/schema-form/widgets/select.tsx +105 -105
- package/src/custom/schema-form/widgets/selectable.tsx +25 -25
- package/src/custom/schema-form/widgets/string-array.tsx +296 -296
- package/src/custom/schema-form/widgets/url.tsx +56 -56
- package/src/custom/section-layout-v2.tsx +212 -212
- package/src/custom/select-tabs.tsx +109 -109
- package/src/custom/selectable.tsx +316 -316
- package/src/custom/stepper.tsx +236 -236
- package/src/custom/tab-layout.tsx +213 -213
- package/src/custom/tanstack-table/fields/index.tsx +12 -12
- package/src/custom/tanstack-table/fields/tanstack-table-action-dialogs.tsx +89 -89
- package/src/custom/tanstack-table/fields/tanstack-table-column-header.tsx +68 -66
- package/src/custom/tanstack-table/fields/tanstack-table-filter-date.tsx +180 -180
- package/src/custom/tanstack-table/fields/tanstack-table-filter-faceted.tsx +158 -158
- package/src/custom/tanstack-table/fields/tanstack-table-filter-text.tsx +73 -76
- package/src/custom/tanstack-table/fields/tanstack-table-pagination.tsx +136 -136
- package/src/custom/tanstack-table/fields/tanstack-table-plain-table.tsx +142 -142
- package/src/custom/tanstack-table/fields/tanstack-table-row-actions-confirmation.tsx +77 -77
- package/src/custom/tanstack-table/fields/tanstack-table-row-actions-custom-dialog.tsx +87 -87
- package/src/custom/tanstack-table/fields/tanstack-table-row-actions.tsx +151 -151
- package/src/custom/tanstack-table/fields/tanstack-table-table-actions-custom-dialog.tsx +88 -88
- package/src/custom/tanstack-table/fields/tanstack-table-table-actions-schemaform-dialog.tsx +47 -47
- package/src/custom/tanstack-table/fields/tanstack-table-toolbar.tsx +143 -143
- package/src/custom/tanstack-table/fields/tanstack-table-view-options.tsx +171 -171
- package/src/custom/tanstack-table/index.tsx +244 -244
- package/src/custom/tanstack-table/types/index.ts +328 -328
- package/src/custom/tanstack-table/utils/cell-with-actions.tsx +21 -21
- package/src/custom/tanstack-table/utils/column-names.ts +26 -26
- package/src/custom/tanstack-table/utils/columns-by-row-data.tsx +312 -312
- package/src/custom/tanstack-table/utils/editable-columns-by-row-data.tsx +219 -219
- package/src/custom/tanstack-table/utils/faceted-boolean-options.tsx +22 -22
- package/src/custom/tanstack-table/utils/index.tsx +10 -10
- package/src/custom/tanstack-table/utils/pinning-styles.ts +57 -57
- package/src/custom/tanstack-table/utils/table.tsx +83 -83
- package/src/custom/tanstack-table/utils/test-conditions.ts +17 -17
- package/src/custom/timeline.tsx +208 -208
- package/src/custom/tree.tsx +202 -200
- package/src/custom/tscanify/browser.ts +66 -66
- package/src/custom/tscanify/index.ts +51 -51
- package/src/custom/tscanify/tscanify-browser.ts +522 -522
- package/src/custom/tscanify/tscanify.ts +262 -262
- package/src/custom/tscanify/types.ts +22 -22
- package/src/custom/webcam.tsx +737 -737
- package/src/hooks/use-callback-ref.ts +27 -27
- package/src/hooks/use-controllable-state.ts +67 -67
- package/src/hooks/use-debounce.ts +19 -19
- package/src/hooks/use-is-visible.ts +23 -23
- package/src/hooks/use-media-query.ts +21 -21
- package/src/hooks/use-mobile.ts +21 -21
- package/src/hooks/use-on-window-resize.ts +15 -15
- package/src/hooks/use-scroll.tsx +22 -22
- package/src/lib/utils.ts +61 -61
- package/src/lib/zod.ts +2 -2
- package/src/styles/core.css +57 -57
- package/src/test/email-input.test.tsx +217 -217
- package/src/test/password-input.test.tsx +92 -92
- package/src/test/select-tabs.test.tsx +302 -302
- package/src/test/selectable.test.tsx +1093 -1093
- package/__mocks__/canvas.ts +0 -8
- package/components.json +0 -21
- package/eslint.config.js +0 -4
- package/jest-environment.js +0 -37
- package/jest.config.ts +0 -47
- package/jest.setup.ts +0 -69
- package/postcss.config.mjs +0 -6
- package/tsconfig.json +0 -13
- package/tsconfig.lint.json +0 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/utils/schema-dependency.ts"],"sourcesContent":["import {\r\n FormValidation,\r\n GenericObjectType,\r\n RJSFValidationError,\r\n} from \"@rjsf/utils\";\r\n\r\ninterface JSONSchema {\r\n type?: string;\r\n properties?: Record<string, JSONSchema>;\r\n required?: string[];\r\n dependencies?: Record<string, JSONSchemaDependency>;\r\n items?: JSONSchema | JSONSchema[];\r\n additionalItems?: JSONSchema;\r\n definitions?: Record<string, JSONSchema>;\r\n $ref?: string;\r\n title?: string;\r\n description?: string;\r\n enum?: unknown[];\r\n default?: unknown;\r\n oneOf?: JSONSchema[];\r\n nullable?: boolean;\r\n format?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\ninterface JSONSchemaDependency {\r\n properties?: Record<string, JSONSchema>;\r\n required?: string[];\r\n oneOf?: JSONSchema[];\r\n}\r\n\r\ninterface FieldDependencyRule {\r\n when: (value: unknown) => boolean;\r\n targets: string[];\r\n fieldCondition?: JSONSchema;\r\n}\r\n\r\ninterface FieldDependencies {\r\n HIDES?: FieldDependencyRule[];\r\n REQUIRES?: FieldDependencyRule[];\r\n}\r\n\r\ntype DependencyConfig = Record<string, FieldDependencies>;\r\n\r\n/**\r\n * Helper to safely get a nested property in a JSON Schema using dot notation path.\r\n */\r\nfunction getNestedProperty(\r\n obj: JSONSchema,\r\n path: string\r\n): JSONSchema | undefined {\r\n const parts = path.split(\".\");\r\n let current: JSONSchema | undefined = obj;\r\n\r\n for (const part of parts) {\r\n if (!current?.properties?.[part]) return undefined;\r\n current = current.properties[part];\r\n }\r\n return current;\r\n}\r\n\r\n/**\r\n * Get all possible values for a controlling field to create conditional branches.\r\n */\r\nfunction getFieldValues(schema: JSONSchema, fieldPath: string): unknown[] {\r\n const field = getNestedProperty(schema, fieldPath);\r\n if (!field) return [];\r\n if (field.enum) return field.enum;\r\n if (field.type === \"boolean\") return [true, false];\r\n if (field.type === \"integer\" || field.type === \"number\")\r\n return [\"__NUMERIC_RANGE__\"];\r\n return [];\r\n}\r\n\r\n/**\r\n * Main function to apply HIDES and REQUIRES field dependencies on a JSON Schema.\r\n */\r\nfunction applyFieldDependencies(\r\n originalSchema: GenericObjectType,\r\n dependencies: DependencyConfig\r\n): JSONSchema {\r\n const schema: JSONSchema = JSON.parse(JSON.stringify(originalSchema));\r\n if (!schema.properties) return schema;\r\n\r\n for (const [fieldPath, fieldDeps] of Object.entries(dependencies)) {\r\n const fieldValues = getFieldValues(schema, fieldPath);\r\n if (fieldValues.length > 0) {\r\n const parentPath = fieldPath.split(\".\").slice(0, -1).join(\".\");\r\n const parentSchema = parentPath\r\n ? getNestedProperty(schema, parentPath)\r\n : schema;\r\n const fieldName = fieldPath.split(\".\").pop()!;\r\n\r\n if (parentSchema) {\r\n // Collect all HIDES targets globally, to remove from root properties\r\n const allHidesTargets = new Set<string>();\r\n if (fieldDeps.HIDES) {\r\n for (const rule of fieldDeps.HIDES) {\r\n rule.targets.forEach((t) => allHidesTargets.add(t));\r\n }\r\n }\r\n\r\n // Remove all HIDES targets from root properties immediately\r\n for (const hiddenTarget of Array.from(allHidesTargets)) {\r\n if (schema.properties[hiddenTarget]) {\r\n delete schema.properties[hiddenTarget];\r\n if (schema.required?.includes(hiddenTarget)) {\r\n schema.required = schema.required.filter(\r\n (r) => r !== hiddenTarget\r\n );\r\n }\r\n }\r\n }\r\n\r\n const conditionalSchemas: JSONSchema[] = [];\r\n\r\n for (const value of fieldValues) {\r\n const requiredFields: string[] = [];\r\n const visibleFields: string[] = [];\r\n\r\n if (fieldDeps.REQUIRES) {\r\n for (const rule of fieldDeps.REQUIRES) {\r\n if (rule.when(value)) {\r\n requiredFields.push(...rule.targets);\r\n visibleFields.push(...rule.targets);\r\n }\r\n }\r\n }\r\n\r\n if (fieldDeps.HIDES) {\r\n for (const rule of fieldDeps.HIDES) {\r\n if (rule.when(value)) {\r\n // Hidden fields: do NOT add to visibleFields\r\n // But fields not hidden should be visible\r\n // So we skip these targets here\r\n } else {\r\n // For other values where fields are not hidden, add them visible\r\n visibleFields.push(...rule.targets);\r\n }\r\n }\r\n }\r\n\r\n // Also add controlling field itself visible\r\n visibleFields.push(fieldName);\r\n\r\n // Deduplicate visibleFields\r\n const visibleFieldsUnique = Array.from(new Set(visibleFields));\r\n\r\n // Build properties for conditional schema\r\n const conditionalProperties: Record<string, JSONSchema> = {};\r\n\r\n visibleFieldsUnique.forEach((targetField) => {\r\n // If targetField === fieldName, add enum with current value\r\n if (targetField === fieldName) {\r\n conditionalProperties[targetField] = {\r\n enum: [value],\r\n };\r\n } else {\r\n // Else get original schema for that target field\r\n const originalFieldSchema = getNestedProperty(\r\n originalSchema,\r\n targetField\r\n );\r\n if (originalFieldSchema) {\r\n conditionalProperties[targetField] = { ...originalFieldSchema };\r\n }\r\n }\r\n });\r\n\r\n const conditionalSchema: JSONSchema = {\r\n properties: conditionalProperties,\r\n };\r\n\r\n if (requiredFields.length > 0) {\r\n conditionalSchema.required = requiredFields.filter((r) =>\r\n visibleFieldsUnique.includes(r)\r\n );\r\n }\r\n\r\n conditionalSchemas.push(conditionalSchema);\r\n }\r\n\r\n if (!parentSchema.dependencies) parentSchema.dependencies = {};\r\n parentSchema.dependencies[fieldName] = { oneOf: conditionalSchemas };\r\n }\r\n }\r\n }\r\n\r\n return schema;\r\n}\r\n\r\nfunction getFormDataValue(\r\n formData: Record<string, unknown>,\r\n path: string\r\n): unknown {\r\n const parts = path.split(\".\");\r\n let current: unknown = formData;\r\n for (const part of parts) {\r\n if (current === null || current === undefined) return undefined;\r\n current = (current as Record<string, unknown>)[part];\r\n }\r\n return current;\r\n}\r\n\r\nfunction deleteFormDataProperty(\r\n formData: Record<string, unknown>,\r\n path: string\r\n): void {\r\n const parts = path.split(\".\");\r\n if (parts.length === 1) {\r\n delete formData[path];\r\n return;\r\n }\r\n const parentPath = parts.slice(0, -1);\r\n const fieldName = parts.at(-1);\r\n if (!fieldName) return;\r\n let current: unknown = formData;\r\n for (const part of parentPath) {\r\n if (current === null || current === undefined) return;\r\n current = (current as Record<string, unknown>)[part];\r\n }\r\n if (current && typeof current === \"object\") {\r\n delete (current as Record<string, unknown>)[fieldName];\r\n }\r\n}\r\n\r\nfunction cleanHiddenFieldsFromFormData<T extends Record<string, unknown>>(\r\n formData: T,\r\n dependencies: DependencyConfig\r\n): T {\r\n const cleanedData = JSON.parse(JSON.stringify(formData)) as T;\r\n\r\n for (const [fieldPath, fieldDeps] of Object.entries(dependencies)) {\r\n if (!fieldDeps.HIDES) continue;\r\n\r\n const controllingValue = getFormDataValue(cleanedData, fieldPath);\r\n\r\n for (const rule of fieldDeps.HIDES) {\r\n if (rule.when(controllingValue)) {\r\n for (const target of rule.targets) {\r\n deleteFormDataProperty(cleanedData, target);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return cleanedData;\r\n}\r\n\r\nexport { applyFieldDependencies, cleanHiddenFieldsFromFormData };\r\nexport type {\r\n JSONSchema,\r\n DependencyConfig,\r\n FieldDependencies,\r\n FieldDependencyRule,\r\n};\r\n\r\n// ============================================================================\r\n// RUNTIME CONDITIONAL REQUIREMENTS\r\n// ============================================================================\r\n// For fields that need runtime validation (e.g., UUID comparisons, complex conditions)\r\n// Use this when JSON Schema dependencies can't express the condition.\r\n\r\nconst EMPTY_GUID = \"00000000-0000-0000-0000-000000000000\";\r\n\r\ntype EmptyCheckFn = (value: unknown) => boolean;\r\n\r\ninterface ConditionalFieldConfig {\r\n /** Fields that trigger the requirement check when filled */\r\n triggerFields: string[];\r\n /** Fields that become required when trigger condition is met */\r\n requiredFields: string[];\r\n /** Optional custom empty check per field (default: checks empty string, null, undefined, EMPTY_GUID) */\r\n emptyChecks?: Record<string, EmptyCheckFn>;\r\n /** Error message for required fields (default: \"Required\") */\r\n errorMessage?: string;\r\n /** Minimum number of trigger fields that must be filled to activate requirements (default: 2) */\r\n minFilledCount?: number;\r\n /** If true, remove this object from form data on submit when requirements are not triggered */\r\n removeFromSubmit?: boolean;\r\n}\r\n\r\ninterface RuntimeDependencyConfig {\r\n /** Path to the nested object (e.g., \"address\", \"telephone\") */\r\n [objectPath: string]: ConditionalFieldConfig;\r\n}\r\n\r\n/**\r\n * Default check for whether a value is considered \"empty\"\r\n */\r\nfunction isValueEmpty(value: unknown): boolean {\r\n if (value === null || value === undefined) return true;\r\n if (typeof value === \"string\") {\r\n return value.trim() === \"\" || value === EMPTY_GUID;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Get a nested value from an object using dot notation path\r\n */\r\nfunction getNestedValue(obj: GenericObjectType, path: string): unknown {\r\n const parts = path.split(\".\");\r\n let current: unknown = obj;\r\n for (const part of parts) {\r\n if (current === null || current === undefined) return undefined;\r\n current = (current as GenericObjectType)[part];\r\n }\r\n return current;\r\n}\r\n\r\n/**\r\n * Creates a modified schema where specified nested object fields are not required.\r\n * The required fields will be validated at runtime instead.\r\n */\r\nfunction applyRuntimeDependencies<T extends GenericObjectType>(\r\n originalSchema: T,\r\n config: RuntimeDependencyConfig\r\n): T {\r\n const schema = JSON.parse(JSON.stringify(originalSchema)) as T;\r\n const schemaAsJson = schema as unknown as JSONSchema;\r\n\r\n for (const [objectPath, fieldConfig] of Object.entries(config)) {\r\n const nestedSchema = getNestedProperty(schemaAsJson, objectPath);\r\n if (nestedSchema) {\r\n // Remove all conditionally required fields from the nested object's required array\r\n const fieldsToMakeOptional = [\r\n ...fieldConfig.triggerFields,\r\n ...fieldConfig.requiredFields,\r\n ];\r\n if (nestedSchema.required) {\r\n nestedSchema.required = nestedSchema.required.filter(\r\n (field) => !fieldsToMakeOptional.includes(field)\r\n );\r\n }\r\n }\r\n }\r\n\r\n // Also remove the nested object itself from root required if all its fields are optional\r\n if (schemaAsJson.required) {\r\n for (const objectPath of Object.keys(config)) {\r\n const topLevelField = objectPath.split(\".\")[0];\r\n if (topLevelField && schemaAsJson.required.includes(topLevelField)) {\r\n schemaAsJson.required = schemaAsJson.required.filter(\r\n (field: string) => field !== topLevelField\r\n );\r\n }\r\n }\r\n }\r\n\r\n return schema;\r\n}\r\n\r\n/**\r\n * Creates a customValidate function for runtime conditional requirements.\r\n *\r\n * Logic: If ANY trigger field is filled, ALL required fields become required.\r\n *\r\n * @example\r\n * // Address validation: if countryId filled AND any other field filled, all required\r\n * const validateAddress = createRuntimeValidator({\r\n * address: {\r\n * triggerFields: [\"countryId\", \"adminAreaLevel1Id\", \"adminAreaLevel2Id\", \"addressLine\"],\r\n * requiredFields: [\"countryId\", \"adminAreaLevel1Id\", \"adminAreaLevel2Id\", \"addressLine\", \"type\"],\r\n * }\r\n * });\r\n */\r\nfunction createRuntimeValidator<TData extends GenericObjectType>(\r\n config: RuntimeDependencyConfig\r\n) {\r\n return function validate(\r\n formData: TData | undefined,\r\n errors: FormValidation<TData>\r\n ): FormValidation<TData> {\r\n if (!formData) return errors;\r\n\r\n for (const [objectPath, fieldConfig] of Object.entries(config)) {\r\n const nestedObject = getNestedValue(formData, objectPath) as\r\n | GenericObjectType\r\n | undefined;\r\n if (!nestedObject) continue;\r\n\r\n const errorMessage = fieldConfig.errorMessage || \"Required\";\r\n\r\n // Check if any trigger field is filled\r\n const filledTriggerFields = fieldConfig.triggerFields.filter((field) => {\r\n const value = nestedObject[field];\r\n const emptyCheck = fieldConfig.emptyChecks?.[field] || isValueEmpty;\r\n return !emptyCheck(value);\r\n });\r\n\r\n // If at least 2 trigger fields are filled (not just one), all required fields become required\r\n // This handles the \"only countryId filled = optional\" case\r\n if (filledTriggerFields.length >= 2) {\r\n const nestedErrors = getNestedValue(\r\n errors as unknown as GenericObjectType,\r\n objectPath\r\n ) as GenericObjectType | undefined;\r\n\r\n for (const requiredField of fieldConfig.requiredFields) {\r\n const value = nestedObject[requiredField];\r\n const emptyCheck =\r\n fieldConfig.emptyChecks?.[requiredField] || isValueEmpty;\r\n\r\n if (emptyCheck(value)) {\r\n const fieldError = nestedErrors?.[requiredField] as\r\n | { addError?: (msg: string) => void }\r\n | undefined;\r\n fieldError?.addError?.(errorMessage);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return errors;\r\n };\r\n}\r\n\r\n/**\r\n * Convenience function that applies both schema modifications and returns a validator.\r\n * Use this for the complete solution.\r\n *\r\n * @typeParam TSchema - The schema object type\r\n * @typeParam TData - The form data type (optional, defaults to GenericObjectType)\r\n */\r\nfunction createConditionalRequirements<\r\n TSchema extends GenericObjectType,\r\n TData extends GenericObjectType = GenericObjectType,\r\n>(\r\n originalSchema: TSchema,\r\n config: RuntimeDependencyConfig\r\n): {\r\n schema: TSchema;\r\n validate: (\r\n formData: TData | undefined,\r\n errors: FormValidation<TData>\r\n ) => FormValidation<TData>;\r\n} {\r\n return {\r\n schema: applyRuntimeDependencies(originalSchema, config),\r\n validate: createRuntimeValidator<TData>(config),\r\n };\r\n}\r\n\r\n/**\r\n * Checks if requirements should be active for a given object path.\r\n * Returns true if 2+ trigger fields are filled.\r\n */\r\nfunction shouldRequireFields<TData extends GenericObjectType>(\r\n formData: TData | undefined,\r\n objectPath: string,\r\n fieldConfig: ConditionalFieldConfig\r\n): boolean {\r\n if (!formData) return false;\r\n\r\n const nestedObject = getNestedValue(formData, objectPath) as\r\n | GenericObjectType\r\n | undefined;\r\n if (!nestedObject) return false;\r\n\r\n const filledTriggerFields = fieldConfig.triggerFields.filter((field) => {\r\n const value = nestedObject[field];\r\n const emptyCheck = fieldConfig.emptyChecks?.[field] || isValueEmpty;\r\n return !emptyCheck(value);\r\n });\r\n\r\n const minCount = fieldConfig.minFilledCount ?? 2;\r\n return filledTriggerFields.length >= minCount;\r\n}\r\n\r\n/**\r\n * Creates a schema with required fields dynamically based on current form state.\r\n * Use this in useMemo to recompute schema when form data changes.\r\n *\r\n * @param originalSchema - The original schema\r\n * @param config - The runtime dependency configuration\r\n * @param formData - Current form data to determine required state\r\n * @returns Schema with correct required fields based on form state\r\n */\r\nfunction createDynamicSchema<\r\n TSchema extends GenericObjectType,\r\n TData extends GenericObjectType = GenericObjectType,\r\n>(\r\n originalSchema: TSchema,\r\n config: RuntimeDependencyConfig,\r\n formData: TData | undefined\r\n): TSchema {\r\n const schema = JSON.parse(JSON.stringify(originalSchema)) as TSchema;\r\n const schemaAsJson = schema as unknown as JSONSchema;\r\n\r\n for (const [objectPath, fieldConfig] of Object.entries(config)) {\r\n const nestedSchema = getNestedProperty(schemaAsJson, objectPath);\r\n if (!nestedSchema) continue;\r\n\r\n const requirementsActive = shouldRequireFields(\r\n formData,\r\n objectPath,\r\n fieldConfig\r\n );\r\n\r\n if (requirementsActive) {\r\n // Add required fields to the nested object's required array\r\n const currentRequired = nestedSchema.required || [];\r\n const newRequired = new Set([\r\n ...currentRequired,\r\n ...fieldConfig.requiredFields,\r\n ]);\r\n nestedSchema.required = Array.from(newRequired);\r\n } else {\r\n // Remove conditionally required fields from required array\r\n const fieldsToMakeOptional = [\r\n ...fieldConfig.triggerFields,\r\n ...fieldConfig.requiredFields,\r\n ];\r\n if (nestedSchema.required) {\r\n nestedSchema.required = nestedSchema.required.filter(\r\n (field) => !fieldsToMakeOptional.includes(field)\r\n );\r\n }\r\n }\r\n }\r\n\r\n // Handle top-level required for nested objects\r\n if (schemaAsJson.required) {\r\n for (const [objectPath, fieldConfig] of Object.entries(config)) {\r\n const topLevelField = objectPath.split(\".\")[0];\r\n if (!topLevelField) continue;\r\n\r\n const requirementsActive = shouldRequireFields(\r\n formData,\r\n objectPath,\r\n fieldConfig\r\n );\r\n\r\n if (requirementsActive) {\r\n // Add to required if not already present\r\n if (!schemaAsJson.required.includes(topLevelField)) {\r\n schemaAsJson.required.push(topLevelField);\r\n }\r\n } else {\r\n // Remove from required\r\n schemaAsJson.required = schemaAsJson.required.filter(\r\n (field: string) => field !== topLevelField\r\n );\r\n }\r\n }\r\n }\r\n\r\n return schema;\r\n}\r\n\r\n/**\r\n * Creates a transformErrors function that filters out format validation errors\r\n * when the field value is empty. This prevents errors like \"must match email format\"\r\n * when an optional email field is empty.\r\n *\r\n * @param formData - Current form data to check for empty values\r\n * @returns TransformErrors function for SchemaForm\r\n */\r\nfunction createEmptyValueTransformErrors<TData extends GenericObjectType>(\r\n formData: TData | undefined\r\n) {\r\n return function transformErrors(\r\n errors: RJSFValidationError[]\r\n ): RJSFValidationError[] {\r\n return errors.filter((error) => {\r\n // Only filter format errors\r\n if (error.name !== \"format\") return true;\r\n\r\n // Get the field path from the property (e.g., \".email.emailAddress\" -> [\"email\", \"emailAddress\"])\r\n const path = (error.property || \"\")\r\n .replace(/^\\./, \"\")\r\n .split(\".\")\r\n .filter(Boolean);\r\n\r\n if (path.length === 0 || !formData) return true;\r\n\r\n // Navigate to get the value\r\n let value: unknown = formData;\r\n for (const key of path) {\r\n if (value && typeof value === \"object\" && key in value) {\r\n value = (value as Record<string, unknown>)[key];\r\n } else {\r\n return true; // Path doesn't exist, keep the error\r\n }\r\n }\r\n\r\n // If value is empty, filter out the format error\r\n return !isValueEmpty(value);\r\n });\r\n };\r\n}\r\n\r\n/**\r\n * Cleans form data for submission by removing objects where requirements are not triggered\r\n * and removeFromSubmit is true.\r\n *\r\n * @param formData - The form data to clean\r\n * @param config - The runtime dependency configuration\r\n * @returns Cleaned form data ready for submission\r\n */\r\nfunction cleanFormDataForSubmit<TData extends GenericObjectType>(\r\n formData: TData,\r\n config: RuntimeDependencyConfig\r\n): Partial<TData> {\r\n const result = { ...formData } as Record<string, unknown>;\r\n\r\n for (const [objectPath, fieldConfig] of Object.entries(config)) {\r\n if (!fieldConfig.removeFromSubmit) continue;\r\n\r\n // Check if requirements are triggered\r\n const requirementsActive = shouldRequireFields(\r\n formData,\r\n objectPath,\r\n fieldConfig\r\n );\r\n\r\n // If requirements are NOT active and removeFromSubmit is true, remove the object\r\n if (!requirementsActive) {\r\n // Handle nested paths (e.g., \"contact.address\")\r\n const pathParts = objectPath.split(\".\");\r\n if (pathParts.length === 1) {\r\n delete result[objectPath];\r\n } else {\r\n // Navigate to parent and delete the leaf\r\n let current: Record<string, unknown> = result;\r\n for (let i = 0; i < pathParts.length - 1; i++) {\r\n const part = pathParts[i] as string;\r\n if (current[part] && typeof current[part] === \"object\") {\r\n current = current[part] as Record<string, unknown>;\r\n } else {\r\n break;\r\n }\r\n }\r\n const leafKey = pathParts[pathParts.length - 1] as string;\r\n delete current[leafKey];\r\n }\r\n }\r\n }\r\n\r\n return result as Partial<TData>;\r\n}\r\n\r\nexport {\r\n applyRuntimeDependencies,\r\n createRuntimeValidator,\r\n createConditionalRequirements,\r\n createDynamicSchema,\r\n createEmptyValueTransformErrors,\r\n cleanFormDataForSubmit,\r\n shouldRequireFields,\r\n isValueEmpty,\r\n EMPTY_GUID,\r\n};\r\nexport type { RuntimeDependencyConfig, ConditionalFieldConfig };\r\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { lodash } from "@repo/ayasofyazilim-ui/lib/utils";
|
|
2
|
+
function bulkCreateUiSchema({
|
|
3
|
+
elements,
|
|
4
|
+
config
|
|
5
|
+
}) {
|
|
6
|
+
const uiSchema = {};
|
|
7
|
+
for (const element of elements) {
|
|
8
|
+
Object.assign(uiSchema, { [element]: config });
|
|
9
|
+
}
|
|
10
|
+
return filterUndefinedAndEmpty(uiSchema);
|
|
11
|
+
}
|
|
12
|
+
function createUiSchemaWithResource({
|
|
13
|
+
resources,
|
|
14
|
+
schema,
|
|
15
|
+
extend,
|
|
16
|
+
name = "Form"
|
|
17
|
+
}) {
|
|
18
|
+
const baseUiSchema = uiSchemaFromSchema({
|
|
19
|
+
object: schema,
|
|
20
|
+
resources,
|
|
21
|
+
name,
|
|
22
|
+
constantKey: name
|
|
23
|
+
});
|
|
24
|
+
const targetSchema = lodash.get(baseUiSchema, name, {});
|
|
25
|
+
if (extend) {
|
|
26
|
+
return lodash.merge({}, targetSchema, extend);
|
|
27
|
+
}
|
|
28
|
+
return targetSchema;
|
|
29
|
+
}
|
|
30
|
+
function createSchemaWithFilters({
|
|
31
|
+
schema,
|
|
32
|
+
filter
|
|
33
|
+
}) {
|
|
34
|
+
const { keys, type } = filter;
|
|
35
|
+
const modifiedSchema = lodash.cloneDeep(schema);
|
|
36
|
+
const isWildCard = (key) => lodash.some(keys, (k) => k === `*${key}`);
|
|
37
|
+
const hasKey = (key) => lodash.includes(keys, key);
|
|
38
|
+
const filterRecursive = (currentObj, parentPath = "") => {
|
|
39
|
+
if (!currentObj.properties && !currentObj.items) return;
|
|
40
|
+
if (currentObj.properties) {
|
|
41
|
+
const keptKeys = [];
|
|
42
|
+
currentObj.properties = lodash.transform(
|
|
43
|
+
currentObj.properties,
|
|
44
|
+
(result, property, key) => {
|
|
45
|
+
const propertyKey = String(key);
|
|
46
|
+
const currentPath = parentPath ? `${parentPath}.${propertyKey}` : propertyKey;
|
|
47
|
+
let shouldKeep = false;
|
|
48
|
+
switch (type) {
|
|
49
|
+
case "include":
|
|
50
|
+
shouldKeep = hasKey(currentPath) || isWildCard(currentPath);
|
|
51
|
+
break;
|
|
52
|
+
case "exclude":
|
|
53
|
+
case "fullExclude":
|
|
54
|
+
shouldKeep = !hasKey(currentPath);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
if (shouldKeep) {
|
|
58
|
+
result[propertyKey] = property;
|
|
59
|
+
keptKeys.push(propertyKey);
|
|
60
|
+
if (property.type === "object") {
|
|
61
|
+
filterRecursive(property, currentPath);
|
|
62
|
+
} else if (property.type === "array" && property.items) {
|
|
63
|
+
filterRecursive(property.items, currentPath);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{}
|
|
68
|
+
);
|
|
69
|
+
if (currentObj.required) {
|
|
70
|
+
currentObj.required = lodash.intersection(
|
|
71
|
+
currentObj.required,
|
|
72
|
+
keptKeys
|
|
73
|
+
);
|
|
74
|
+
if (lodash.isEmpty(currentObj.required)) {
|
|
75
|
+
delete currentObj.required;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
filterRecursive(modifiedSchema);
|
|
81
|
+
return modifiedSchema;
|
|
82
|
+
}
|
|
83
|
+
function removeFieldsfromGenericSchema(obj, keysToRemove) {
|
|
84
|
+
const keysArray = lodash.castArray(keysToRemove);
|
|
85
|
+
const transform = (value) => {
|
|
86
|
+
if (lodash.isArray(value)) {
|
|
87
|
+
return lodash.map(value, transform);
|
|
88
|
+
}
|
|
89
|
+
if (lodash.isPlainObject(value)) {
|
|
90
|
+
return lodash.transform(
|
|
91
|
+
value,
|
|
92
|
+
(result, val, key) => {
|
|
93
|
+
if (!keysArray.includes(key)) {
|
|
94
|
+
result[key] = transform(val);
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
{}
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
return value;
|
|
101
|
+
};
|
|
102
|
+
return transform(obj);
|
|
103
|
+
}
|
|
104
|
+
function mergeUISchemaObjects(source, target) {
|
|
105
|
+
return lodash.merge({}, source, target);
|
|
106
|
+
}
|
|
107
|
+
function uiSchemaFromSchema({
|
|
108
|
+
name,
|
|
109
|
+
object,
|
|
110
|
+
resources,
|
|
111
|
+
constantKey
|
|
112
|
+
}) {
|
|
113
|
+
const uiSchema = { [name]: {} };
|
|
114
|
+
if (object?.type === "object" && object.properties) {
|
|
115
|
+
lodash.forEach(object.properties, (propValue, propKey) => {
|
|
116
|
+
const nestedSchema = uiSchemaFromSchema({
|
|
117
|
+
name: propKey,
|
|
118
|
+
object: propValue,
|
|
119
|
+
resources,
|
|
120
|
+
constantKey: `${constantKey}.${propKey}`
|
|
121
|
+
});
|
|
122
|
+
Object.assign(uiSchema[name], {
|
|
123
|
+
"ui:title": resources[constantKey],
|
|
124
|
+
...nestedSchema
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
} else if (object?.type === "array" && object.items?.properties) {
|
|
128
|
+
const items = lodash.reduce(
|
|
129
|
+
object.items.properties,
|
|
130
|
+
(acc, propValue, propKey) => {
|
|
131
|
+
const nested = uiSchemaFromSchema({
|
|
132
|
+
name: propKey,
|
|
133
|
+
object: propValue,
|
|
134
|
+
resources,
|
|
135
|
+
constantKey: `${constantKey}.${propKey}`
|
|
136
|
+
});
|
|
137
|
+
return lodash.merge(acc, nested);
|
|
138
|
+
},
|
|
139
|
+
{}
|
|
140
|
+
);
|
|
141
|
+
Object.assign(uiSchema[name], {
|
|
142
|
+
"ui:title": resources[constantKey] || lodash.startCase(name),
|
|
143
|
+
items
|
|
144
|
+
});
|
|
145
|
+
} else if (object) {
|
|
146
|
+
const getResource = (suffix) => resources[suffix ? `${constantKey}.${suffix}` : constantKey];
|
|
147
|
+
const uiSchemaItem = {
|
|
148
|
+
"ui:title": getResource() || lodash.startCase(name),
|
|
149
|
+
"ui:placeholder": getResource("ui:placeholder")
|
|
150
|
+
};
|
|
151
|
+
if (object.enum) {
|
|
152
|
+
uiSchemaItem["ui:enumNames"] = object.enum.map(
|
|
153
|
+
(key) => resources[`${constantKey}.${key}`] || key
|
|
154
|
+
);
|
|
155
|
+
uiSchemaItem["ui:options"] = {
|
|
156
|
+
label: true,
|
|
157
|
+
emptyValue: getResource("emptyValue"),
|
|
158
|
+
searchPlaceholder: getResource("searchPlaceholder"),
|
|
159
|
+
searchResultLabel: getResource("searchResultLabel")
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
Object.assign(uiSchema[name], uiSchemaItem);
|
|
163
|
+
}
|
|
164
|
+
return filterUndefinedAndEmpty(uiSchema);
|
|
165
|
+
}
|
|
166
|
+
function filterUndefinedAndEmpty(obj) {
|
|
167
|
+
if (!lodash.isObject(obj)) {
|
|
168
|
+
return obj;
|
|
169
|
+
}
|
|
170
|
+
const result = lodash.transform(
|
|
171
|
+
obj,
|
|
172
|
+
(acc, value, key) => {
|
|
173
|
+
const filteredValue = filterUndefinedAndEmpty(value);
|
|
174
|
+
const isValid = filteredValue !== void 0 && !(lodash.isPlainObject(filteredValue) && lodash.isEmpty(filteredValue));
|
|
175
|
+
if (isValid) {
|
|
176
|
+
acc[key] = filteredValue;
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
{}
|
|
180
|
+
);
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
export {
|
|
184
|
+
bulkCreateUiSchema,
|
|
185
|
+
createSchemaWithFilters,
|
|
186
|
+
createUiSchemaWithResource,
|
|
187
|
+
mergeUISchemaObjects,
|
|
188
|
+
removeFieldsfromGenericSchema
|
|
189
|
+
};
|
|
190
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/utils/schemas.ts"],"sourcesContent":["import { GenericObjectType } from \"@rjsf/utils\";\r\nimport {\r\n CreateFieldConfigWithResourceProps,\r\n FilteredObject,\r\n FilterType,\r\n UiSchema,\r\n} from \"../types\";\r\nimport { lodash } from \"@repo/ayasofyazilim-ui/lib/utils\";\r\n\r\n/**\r\n *\r\n */\r\nexport function bulkCreateUiSchema<T>({\r\n elements,\r\n config,\r\n}: {\r\n config: UiSchema<T>;\r\n elements: Array<keyof T>;\r\n}): UiSchema<T> {\r\n const uiSchema = {};\r\n for (const element of elements) {\r\n Object.assign(uiSchema, { [element]: config });\r\n }\r\n return filterUndefinedAndEmpty(uiSchema);\r\n}\r\n\r\n/**\r\n * Creates a UiSchema with internationalization resources and optional overrides.\r\n */\r\nexport function createUiSchemaWithResource<T = unknown>({\r\n resources,\r\n schema,\r\n extend,\r\n name = \"Form\",\r\n}: CreateFieldConfigWithResourceProps): UiSchema<T> {\r\n const baseUiSchema = uiSchemaFromSchema({\r\n object: schema,\r\n resources,\r\n name,\r\n constantKey: name,\r\n });\r\n\r\n const targetSchema = lodash.get(baseUiSchema, name, {});\r\n\r\n if (extend) {\r\n // Lodash merge handles deep merging recursively and safely\r\n return lodash.merge({}, targetSchema, extend);\r\n }\r\n\r\n return targetSchema;\r\n}\r\n\r\n/**\r\n * Filters a JSON Schema based on include/exclude/fullExclude rules.\r\n */\r\nexport function createSchemaWithFilters<T = string>({\r\n schema,\r\n filter,\r\n}: {\r\n filter: FilterType<T>;\r\n schema: GenericObjectType;\r\n}): GenericObjectType {\r\n const { keys, type } = filter;\r\n // Deep clone first to avoid mutating the original schema reference\r\n const modifiedSchema = lodash.cloneDeep(schema);\r\n\r\n const isWildCard = (key: string) => lodash.some(keys, (k) => k === `*${key}`);\r\n const hasKey = (key: string) => lodash.includes(keys, key);\r\n\r\n const filterRecursive = (\r\n currentObj: GenericObjectType,\r\n parentPath: string = \"\"\r\n ): void => {\r\n if (!currentObj.properties && !currentObj.items) return;\r\n\r\n // Handle Properties\r\n if (currentObj.properties) {\r\n const keptKeys: string[] = [];\r\n\r\n currentObj.properties = lodash.transform(\r\n currentObj.properties,\r\n (result, property, key) => {\r\n const propertyKey = String(key);\r\n const currentPath = parentPath\r\n ? `${parentPath}.${propertyKey}`\r\n : propertyKey;\r\n\r\n let shouldKeep = false;\r\n\r\n switch (type) {\r\n case \"include\":\r\n // Keep if explicitly included or if it's a wildcard match\r\n shouldKeep = hasKey(currentPath) || isWildCard(currentPath);\r\n break;\r\n case \"exclude\":\r\n case \"fullExclude\":\r\n // Keep if NOT in the exclude list\r\n shouldKeep = !hasKey(currentPath);\r\n break;\r\n }\r\n\r\n if (shouldKeep) {\r\n result[propertyKey] = property;\r\n keptKeys.push(propertyKey);\r\n\r\n // Recursive step for Objects and Arrays\r\n if (property.type === \"object\") {\r\n filterRecursive(property, currentPath);\r\n } else if (property.type === \"array\" && property.items) {\r\n filterRecursive(property.items, currentPath);\r\n }\r\n }\r\n },\r\n {} as GenericObjectType[\"properties\"]\r\n );\r\n\r\n // Update or Remove 'required' array based on kept keys\r\n if (currentObj.required) {\r\n currentObj.required = lodash.intersection(\r\n currentObj.required,\r\n keptKeys\r\n );\r\n if (lodash.isEmpty(currentObj.required)) {\r\n delete currentObj.required;\r\n }\r\n }\r\n }\r\n };\r\n\r\n filterRecursive(modifiedSchema);\r\n return modifiedSchema;\r\n}\r\n\r\n/**\r\n * Recursively removes specific keys from any object or array.\r\n */\r\nexport function removeFieldsfromGenericSchema<T>(\r\n obj: T,\r\n keysToRemove: string | string[]\r\n): T {\r\n const keysArray = lodash.castArray(keysToRemove);\r\n\r\n const transform = (value: unknown): unknown => {\r\n if (lodash.isArray(value)) {\r\n return lodash.map(value, transform);\r\n }\r\n\r\n if (lodash.isPlainObject(value)) {\r\n return lodash.transform(\r\n value as Record<string, unknown>,\r\n (result, val, key) => {\r\n if (!keysArray.includes(key)) {\r\n result[key] = transform(val);\r\n }\r\n },\r\n {} as Record<string, unknown>\r\n );\r\n }\r\n\r\n return value;\r\n };\r\n\r\n return transform(obj) as T;\r\n}\r\n\r\n/**\r\n * Merges two UISchema objects recursively.\r\n */\r\n\r\nexport function mergeUISchemaObjects<\r\n T extends UiSchema<T> | UiSchema,\r\n U extends UiSchema<T> | UiSchema,\r\n>(source: T, target: U): T & U {\r\n // We pass {} as the first argument to ensure we create a new object\r\n // rather than mutating 'source'.\r\n return lodash.merge({}, source, target) as T & U;\r\n}\r\n\r\n/**\r\n * Helper: Generates UiSchema structure from JSON Schema + Resources\r\n */\r\nfunction uiSchemaFromSchema({\r\n name,\r\n object,\r\n resources,\r\n constantKey,\r\n}: {\r\n constantKey: string;\r\n name: string;\r\n object: GenericObjectType;\r\n resources: Record<string, string>;\r\n}) {\r\n const uiSchema: Record<string, any> = { [name]: {} };\r\n\r\n // 1. Handle Objects\r\n if (object?.type === \"object\" && object.properties) {\r\n lodash.forEach(object.properties, (propValue, propKey) => {\r\n const nestedSchema = uiSchemaFromSchema({\r\n name: propKey,\r\n object: propValue,\r\n resources,\r\n constantKey: `${constantKey}.${propKey}`,\r\n });\r\n\r\n // Merge nested results into the current name scope\r\n Object.assign(uiSchema[name], {\r\n \"ui:title\": resources[constantKey],\r\n ...nestedSchema,\r\n });\r\n });\r\n }\r\n\r\n // 2. Handle Arrays\r\n else if (object?.type === \"array\" && object.items?.properties) {\r\n const items = lodash.reduce(\r\n object.items.properties,\r\n (acc, propValue, propKey) => {\r\n const nested = uiSchemaFromSchema({\r\n name: propKey,\r\n object: propValue,\r\n resources,\r\n constantKey: `${constantKey}.${propKey}`,\r\n });\r\n return lodash.merge(acc, nested);\r\n },\r\n {}\r\n );\r\n\r\n Object.assign(uiSchema[name], {\r\n \"ui:title\": resources[constantKey] || lodash.startCase(name),\r\n items,\r\n });\r\n }\r\n\r\n // 3. Handle Primitives (Plain fields)\r\n else if (object) {\r\n const getResource = (suffix?: string) =>\r\n resources[suffix ? `${constantKey}.${suffix}` : constantKey];\r\n\r\n const uiSchemaItem: Record<string, any> = {\r\n \"ui:title\": getResource() || lodash.startCase(name),\r\n \"ui:placeholder\": getResource(\"ui:placeholder\"),\r\n };\r\n\r\n if (object.enum) {\r\n uiSchemaItem[\"ui:enumNames\"] = object.enum.map(\r\n (key: string) => resources[`${constantKey}.${key}`] || key\r\n );\r\n uiSchemaItem[\"ui:options\"] = {\r\n label: true,\r\n emptyValue: getResource(\"emptyValue\"),\r\n searchPlaceholder: getResource(\"searchPlaceholder\"),\r\n searchResultLabel: getResource(\"searchResultLabel\"),\r\n };\r\n }\r\n\r\n Object.assign(uiSchema[name], uiSchemaItem);\r\n }\r\n\r\n return filterUndefinedAndEmpty(uiSchema);\r\n}\r\n\r\n/**\r\n * Recursively filters out undefined values and empty objects/arrays\r\n */\r\nfunction filterUndefinedAndEmpty<T>(obj: T): FilteredObject<T> {\r\n if (!lodash.isObject(obj)) {\r\n return obj as FilteredObject<T>;\r\n }\r\n\r\n // Use omitBy to filter undefined, then mapValues to recurse\r\n const result = lodash.transform(\r\n obj as unknown as object,\r\n (acc: any, value, key) => {\r\n const filteredValue = filterUndefinedAndEmpty(value);\r\n\r\n const isValid =\r\n filteredValue !== undefined &&\r\n !(lodash.isPlainObject(filteredValue) && lodash.isEmpty(filteredValue));\r\n\r\n if (isValid) {\r\n acc[key] = filteredValue;\r\n }\r\n },\r\n {}\r\n );\r\n\r\n return result as FilteredObject<T>;\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function customPasswordValidate({
|
|
2
|
+
formData,
|
|
3
|
+
keyOne,
|
|
4
|
+
keyTwo,
|
|
5
|
+
errorMessage,
|
|
6
|
+
errors
|
|
7
|
+
}) {
|
|
8
|
+
if (!formData) {
|
|
9
|
+
return errors;
|
|
10
|
+
}
|
|
11
|
+
if (formData[keyOne] !== formData[keyTwo]) {
|
|
12
|
+
errors[keyTwo]?.addError(errorMessage);
|
|
13
|
+
}
|
|
14
|
+
return errors;
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
customPasswordValidate
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/utils/validation.ts"],"sourcesContent":["import { FormValidation } from \"@rjsf/utils\";\r\n\r\nexport function customPasswordValidate<T>({\r\n formData,\r\n keyOne,\r\n keyTwo,\r\n errorMessage,\r\n errors,\r\n}: {\r\n formData: T | undefined;\r\n keyOne: keyof T;\r\n keyTwo: keyof T;\r\n errorMessage: string;\r\n errors: FormValidation<T>;\r\n}): FormValidation<T> {\r\n if (!formData) {\r\n return errors;\r\n }\r\n if (formData[keyOne] !== formData[keyTwo]) {\r\n errors[keyTwo]?.addError(errorMessage);\r\n }\r\n return errors;\r\n}\r\n"],"mappings":"AAEO,SAAS,uBAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMsB;AACpB,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AACA,MAAI,SAAS,MAAM,MAAM,SAAS,MAAM,GAAG;AACzC,WAAO,MAAM,GAAG,SAAS,YAAY;AAAA,EACvC;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Checkbox } from "@repo/ayasofyazilim-ui/components/checkbox";
|
|
3
|
+
import { Label } from "@repo/ayasofyazilim-ui/components/label";
|
|
4
|
+
import { Switch } from "@repo/ayasofyazilim-ui/components/switch";
|
|
5
|
+
import { cn } from "@repo/ayasofyazilim-ui/lib/utils";
|
|
6
|
+
const SwitchWidget = (props) => {
|
|
7
|
+
const { id, name, onChange, value, defaultValue, disabled, uiSchema } = props;
|
|
8
|
+
const required = uiSchema?.["ui:required"] || props.required;
|
|
9
|
+
return /* @__PURE__ */ jsx(BooleanWrapper, { widgetProps: props, children: /* @__PURE__ */ jsx(
|
|
10
|
+
Switch,
|
|
11
|
+
{
|
|
12
|
+
id,
|
|
13
|
+
"data-testid": id,
|
|
14
|
+
onCheckedChange: () => {
|
|
15
|
+
onChange(!value);
|
|
16
|
+
},
|
|
17
|
+
checked: value,
|
|
18
|
+
defaultValue: value || defaultValue,
|
|
19
|
+
name,
|
|
20
|
+
disabled,
|
|
21
|
+
required
|
|
22
|
+
}
|
|
23
|
+
) });
|
|
24
|
+
};
|
|
25
|
+
const CheckboxWidget = (props) => {
|
|
26
|
+
const { id, name, onChange, value, defaultValue, disabled, uiSchema } = props;
|
|
27
|
+
const required = uiSchema?.["ui:required"] || props.required;
|
|
28
|
+
return /* @__PURE__ */ jsx(BooleanWrapper, { widgetProps: props, children: /* @__PURE__ */ jsx(
|
|
29
|
+
Checkbox,
|
|
30
|
+
{
|
|
31
|
+
id,
|
|
32
|
+
"data-testid": id,
|
|
33
|
+
onCheckedChange: () => {
|
|
34
|
+
onChange(!value);
|
|
35
|
+
},
|
|
36
|
+
checked: value,
|
|
37
|
+
defaultValue: value || defaultValue,
|
|
38
|
+
name,
|
|
39
|
+
disabled,
|
|
40
|
+
required
|
|
41
|
+
}
|
|
42
|
+
) });
|
|
43
|
+
};
|
|
44
|
+
function BooleanWrapper({
|
|
45
|
+
children,
|
|
46
|
+
widgetProps
|
|
47
|
+
}) {
|
|
48
|
+
const { id, className, label, uiSchema } = widgetProps;
|
|
49
|
+
const required = uiSchema?.["ui:required"] || widgetProps.required;
|
|
50
|
+
const displayLabel = uiSchema?.displayLabel;
|
|
51
|
+
return /* @__PURE__ */ jsxs(
|
|
52
|
+
"div",
|
|
53
|
+
{
|
|
54
|
+
"data-wrapper": "boolean",
|
|
55
|
+
className: cn(
|
|
56
|
+
"flex items-center gap-2 h-9 px-2 border rounded-md shadow-xs",
|
|
57
|
+
className
|
|
58
|
+
),
|
|
59
|
+
children: [
|
|
60
|
+
children,
|
|
61
|
+
displayLabel !== false && /* @__PURE__ */ jsxs(Label, { id, htmlFor: id, className: "w-full", children: [
|
|
62
|
+
label,
|
|
63
|
+
required && "*"
|
|
64
|
+
] })
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
export {
|
|
70
|
+
CheckboxWidget,
|
|
71
|
+
SwitchWidget
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=boolean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/boolean.tsx"],"sourcesContent":["import { Checkbox } from \"@repo/ayasofyazilim-ui/components/checkbox\";\r\nimport { Label } from \"@repo/ayasofyazilim-ui/components/label\";\r\nimport { Switch } from \"@repo/ayasofyazilim-ui/components/switch\";\r\nimport { cn } from \"@repo/ayasofyazilim-ui/lib/utils\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { ReactNode } from \"react\";\r\n\r\nexport const SwitchWidget = (props: WidgetProps) => {\r\n const { id, name, onChange, value, defaultValue, disabled, uiSchema } = props;\r\n const required = uiSchema?.[\"ui:required\"] || props.required;\r\n return (\r\n <BooleanWrapper widgetProps={props}>\r\n <Switch\r\n id={id}\r\n data-testid={id}\r\n onCheckedChange={() => {\r\n onChange(!value);\r\n }}\r\n checked={value}\r\n defaultValue={value || defaultValue}\r\n name={name}\r\n disabled={disabled}\r\n required={required}\r\n />\r\n </BooleanWrapper>\r\n );\r\n};\r\n\r\nexport const CheckboxWidget = (props: WidgetProps) => {\r\n const { id, name, onChange, value, defaultValue, disabled, uiSchema } = props;\r\n const required = uiSchema?.[\"ui:required\"] || props.required;\r\n return (\r\n <BooleanWrapper widgetProps={props}>\r\n <Checkbox\r\n id={id}\r\n data-testid={id}\r\n onCheckedChange={() => {\r\n onChange(!value);\r\n }}\r\n checked={value}\r\n defaultValue={value || defaultValue}\r\n name={name}\r\n disabled={disabled}\r\n required={required}\r\n />\r\n </BooleanWrapper>\r\n );\r\n};\r\n\r\nfunction BooleanWrapper({\r\n children,\r\n widgetProps,\r\n}: {\r\n children: ReactNode;\r\n widgetProps: WidgetProps;\r\n}) {\r\n const { id, className, label, uiSchema } = widgetProps;\r\n const required = uiSchema?.[\"ui:required\"] || widgetProps.required;\r\n const displayLabel = uiSchema?.displayLabel;\r\n return (\r\n <div\r\n data-wrapper=\"boolean\"\r\n className={cn(\r\n \"flex items-center gap-2 h-9 px-2 border rounded-md shadow-xs\",\r\n className\r\n )}\r\n >\r\n {children}\r\n {displayLabel !== false && (\r\n <Label id={id} htmlFor={id} className=\"w-full\">\r\n {label}\r\n {required && \"*\"}\r\n </Label>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"mappings":"AAYM,cAyDE,YAzDF;AAZN,SAAS,gBAAgB;AACzB,SAAS,aAAa;AACtB,SAAS,cAAc;AACvB,SAAS,UAAU;AAIZ,MAAM,eAAe,CAAC,UAAuB;AAClD,QAAM,EAAE,IAAI,MAAM,UAAU,OAAO,cAAc,UAAU,SAAS,IAAI;AACxE,QAAM,WAAW,WAAW,aAAa,KAAK,MAAM;AACpD,SACE,oBAAC,kBAAe,aAAa,OAC3B;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MACb,iBAAiB,MAAM;AACrB,iBAAS,CAAC,KAAK;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,MACT,cAAc,SAAS;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,GACF;AAEJ;AAEO,MAAM,iBAAiB,CAAC,UAAuB;AACpD,QAAM,EAAE,IAAI,MAAM,UAAU,OAAO,cAAc,UAAU,SAAS,IAAI;AACxE,QAAM,WAAW,WAAW,aAAa,KAAK,MAAM;AACpD,SACE,oBAAC,kBAAe,aAAa,OAC3B;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MACb,iBAAiB,MAAM;AACrB,iBAAS,CAAC,KAAK;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,MACT,cAAc,SAAS;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AACF,GAGG;AACD,QAAM,EAAE,IAAI,WAAW,OAAO,SAAS,IAAI;AAC3C,QAAM,WAAW,WAAW,aAAa,KAAK,YAAY;AAC1D,QAAM,eAAe,UAAU;AAC/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,QACA,iBAAiB,SAChB,qBAAC,SAAM,IAAQ,SAAS,IAAI,WAAU,UACnC;AAAA;AAAA,UACA,YAAY;AAAA,WACf;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronsUpDown } from "lucide-react";
|
|
3
|
+
import { CheckIcon } from "lucide-react";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { Badge } from "@repo/ayasofyazilim-ui/components/badge";
|
|
6
|
+
import { Button } from "@repo/ayasofyazilim-ui/components/button";
|
|
7
|
+
import {
|
|
8
|
+
Command,
|
|
9
|
+
CommandEmpty,
|
|
10
|
+
CommandGroup,
|
|
11
|
+
CommandInput,
|
|
12
|
+
CommandItem,
|
|
13
|
+
CommandList
|
|
14
|
+
} from "@repo/ayasofyazilim-ui/components/command";
|
|
15
|
+
import {
|
|
16
|
+
Drawer,
|
|
17
|
+
DrawerContent,
|
|
18
|
+
DrawerTrigger
|
|
19
|
+
} from "@repo/ayasofyazilim-ui/components/drawer";
|
|
20
|
+
import {
|
|
21
|
+
Popover,
|
|
22
|
+
PopoverContent,
|
|
23
|
+
PopoverTrigger
|
|
24
|
+
} from "@repo/ayasofyazilim-ui/components/popover";
|
|
25
|
+
import { useMediaQuery } from "@repo/ayasofyazilim-ui/hooks/use-media-query";
|
|
26
|
+
import { cn } from "@repo/ayasofyazilim-ui/lib/utils";
|
|
27
|
+
function CustomCombobox(props) {
|
|
28
|
+
const {
|
|
29
|
+
value,
|
|
30
|
+
defaultValue,
|
|
31
|
+
list,
|
|
32
|
+
selectIdentifier,
|
|
33
|
+
selectLabel,
|
|
34
|
+
disabled,
|
|
35
|
+
emptyValue = "Please select"
|
|
36
|
+
} = props;
|
|
37
|
+
const isDesktop = useMediaQuery("(min-width: 768px)");
|
|
38
|
+
const [open, setOpen] = useState(false);
|
|
39
|
+
const fieldValue = value || defaultValue;
|
|
40
|
+
const fieldValueDisplayName = list?.find(
|
|
41
|
+
(x) => x[selectIdentifier] === fieldValue
|
|
42
|
+
)?.[selectLabel];
|
|
43
|
+
const DesktopContent = /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, modal: true, children: [
|
|
44
|
+
/* @__PURE__ */ jsx(
|
|
45
|
+
PopoverTrigger,
|
|
46
|
+
{
|
|
47
|
+
asChild: true,
|
|
48
|
+
disabled,
|
|
49
|
+
className: cn(disabled && "cursor-not-allowed"),
|
|
50
|
+
children: /* @__PURE__ */ jsxs(
|
|
51
|
+
Button,
|
|
52
|
+
{
|
|
53
|
+
id: props.id,
|
|
54
|
+
"data-testid": props.id,
|
|
55
|
+
type: "button",
|
|
56
|
+
variant: "outline",
|
|
57
|
+
role: "combobox",
|
|
58
|
+
className: cn(
|
|
59
|
+
"text-muted-foreground w-full justify-between font-normal shadow-xs hover:bg-white overflow-hidden",
|
|
60
|
+
fieldValueDisplayName && "text-foreground",
|
|
61
|
+
disabled && "disabled:pointer-events-auto hover:bg-background hover:text-muted-foreground"
|
|
62
|
+
),
|
|
63
|
+
children: [
|
|
64
|
+
/* @__PURE__ */ jsx("span", { className: "truncate has-[role=dialog]:max-w-xs", children: typeof fieldValueDisplayName !== "undefined" && fieldValueDisplayName !== null ? fieldValueDisplayName.toString() : emptyValue }),
|
|
65
|
+
/* @__PURE__ */ jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
}
|
|
70
|
+
),
|
|
71
|
+
/* @__PURE__ */ jsx(PopoverContent, { className: "p-0", children: /* @__PURE__ */ jsx(List, { ...props, setOpen }) })
|
|
72
|
+
] });
|
|
73
|
+
const MobileContent = /* @__PURE__ */ jsxs(Drawer, { open, onOpenChange: setOpen, children: [
|
|
74
|
+
/* @__PURE__ */ jsx(DrawerTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
75
|
+
Button,
|
|
76
|
+
{
|
|
77
|
+
"data-testid": props.id,
|
|
78
|
+
type: "button",
|
|
79
|
+
disabled,
|
|
80
|
+
variant: "outline",
|
|
81
|
+
className: cn(
|
|
82
|
+
"text-muted-foreground w-full justify-between font-normal shadow-xs hover:bg-white",
|
|
83
|
+
fieldValueDisplayName && "text-black"
|
|
84
|
+
),
|
|
85
|
+
children: [
|
|
86
|
+
fieldValueDisplayName ? fieldValueDisplayName.toString() : emptyValue,
|
|
87
|
+
/* @__PURE__ */ jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
) }),
|
|
91
|
+
/* @__PURE__ */ jsx(DrawerContent, { children: /* @__PURE__ */ jsx("div", { className: "mt-4 border-t", children: /* @__PURE__ */ jsx(List, { ...props, setOpen }) }) })
|
|
92
|
+
] });
|
|
93
|
+
return isDesktop ? DesktopContent : MobileContent;
|
|
94
|
+
}
|
|
95
|
+
function List({
|
|
96
|
+
setOpen,
|
|
97
|
+
...props
|
|
98
|
+
}) {
|
|
99
|
+
const {
|
|
100
|
+
uiSchema,
|
|
101
|
+
onChange,
|
|
102
|
+
value,
|
|
103
|
+
list,
|
|
104
|
+
selectIdentifier,
|
|
105
|
+
selectLabel,
|
|
106
|
+
searchPlaceholder,
|
|
107
|
+
searchResultLabel,
|
|
108
|
+
onValueChange,
|
|
109
|
+
badges,
|
|
110
|
+
customItemRenderer
|
|
111
|
+
} = props;
|
|
112
|
+
const uiOptions = uiSchema?.["ui:options"];
|
|
113
|
+
return /* @__PURE__ */ jsxs(
|
|
114
|
+
Command,
|
|
115
|
+
{
|
|
116
|
+
filter: (value2, search) => {
|
|
117
|
+
const filterResult = list?.find(
|
|
118
|
+
(i) => i[selectIdentifier].toString()?.toLocaleLowerCase() === value2.toLocaleLowerCase()
|
|
119
|
+
)?.[selectLabel];
|
|
120
|
+
if (value2.includes(search) || filterResult?.toLocaleLowerCase().includes(search.toLocaleLowerCase()))
|
|
121
|
+
return 1;
|
|
122
|
+
return 0;
|
|
123
|
+
},
|
|
124
|
+
children: [
|
|
125
|
+
/* @__PURE__ */ jsx(
|
|
126
|
+
CommandInput,
|
|
127
|
+
{
|
|
128
|
+
"data-testid": `${props.id}_search`,
|
|
129
|
+
placeholder: searchPlaceholder || "Search...",
|
|
130
|
+
className: "h-9"
|
|
131
|
+
}
|
|
132
|
+
),
|
|
133
|
+
/* @__PURE__ */ jsxs(CommandList, { className: "w-full min-w-full max-w-full", children: [
|
|
134
|
+
/* @__PURE__ */ jsx(CommandEmpty, { children: searchResultLabel || "0 search result." }),
|
|
135
|
+
/* @__PURE__ */ jsx(CommandGroup, { children: list?.map((item, index) => /* @__PURE__ */ jsxs(
|
|
136
|
+
CommandItem,
|
|
137
|
+
{
|
|
138
|
+
"data-testid": `${props.id}_${index}`,
|
|
139
|
+
disabled: props.disabledItems?.includes(item[selectIdentifier]),
|
|
140
|
+
onSelect: () => {
|
|
141
|
+
onChange(
|
|
142
|
+
uiOptions?.allowEmpty !== false ? item[selectIdentifier] === value ? void 0 : item[selectIdentifier] : item[selectIdentifier]
|
|
143
|
+
);
|
|
144
|
+
if (onValueChange)
|
|
145
|
+
onValueChange(
|
|
146
|
+
list.find((i) => i[selectIdentifier] === value)
|
|
147
|
+
);
|
|
148
|
+
setOpen(false);
|
|
149
|
+
},
|
|
150
|
+
value: item[selectIdentifier],
|
|
151
|
+
children: [
|
|
152
|
+
item[selectIdentifier] === value && /* @__PURE__ */ jsx(CheckIcon, { className: cn("mr-2 h-4 w-4") }),
|
|
153
|
+
customItemRenderer ? customItemRenderer(item) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
154
|
+
item[selectLabel],
|
|
155
|
+
badges && /* @__PURE__ */ jsx("div", { className: "ml-auto", children: Object.keys(badges).map((badgeKey) => {
|
|
156
|
+
const badgeOptions = badges[badgeKey];
|
|
157
|
+
if (!badgeOptions) return null;
|
|
158
|
+
return /* @__PURE__ */ jsxs(
|
|
159
|
+
Badge,
|
|
160
|
+
{
|
|
161
|
+
variant: "outline",
|
|
162
|
+
className: cn("ml-2", badgeOptions.className),
|
|
163
|
+
children: [
|
|
164
|
+
badgeOptions.showValue !== false && item[badgeKey],
|
|
165
|
+
badgeOptions.label && badgeOptions.label
|
|
166
|
+
]
|
|
167
|
+
},
|
|
168
|
+
badgeKey
|
|
169
|
+
);
|
|
170
|
+
}) })
|
|
171
|
+
] })
|
|
172
|
+
]
|
|
173
|
+
},
|
|
174
|
+
JSON.stringify(item[selectIdentifier])
|
|
175
|
+
)) })
|
|
176
|
+
] })
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
function CustomComboboxWidget({
|
|
182
|
+
languageData,
|
|
183
|
+
selectLabel,
|
|
184
|
+
selectIdentifier,
|
|
185
|
+
list,
|
|
186
|
+
onChange,
|
|
187
|
+
disabledItems,
|
|
188
|
+
badges,
|
|
189
|
+
customItemRenderer
|
|
190
|
+
}) {
|
|
191
|
+
function Widget(props) {
|
|
192
|
+
const { uiSchema } = props;
|
|
193
|
+
const uiList = uiSchema?.["ui:optionList"];
|
|
194
|
+
return /* @__PURE__ */ jsx(
|
|
195
|
+
CustomCombobox,
|
|
196
|
+
{
|
|
197
|
+
...props,
|
|
198
|
+
list: uiList || list,
|
|
199
|
+
onChange: (value) => {
|
|
200
|
+
props.onChange(value);
|
|
201
|
+
if (onChange) {
|
|
202
|
+
onChange(list.find((i) => i[selectIdentifier] === value));
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
customItemRenderer,
|
|
206
|
+
searchPlaceholder: languageData["Select.Placeholder"],
|
|
207
|
+
searchResultLabel: languageData["Select.ResultLabel"],
|
|
208
|
+
emptyValue: languageData["Select.EmptyValue"],
|
|
209
|
+
selectIdentifier,
|
|
210
|
+
selectLabel,
|
|
211
|
+
disabledItems,
|
|
212
|
+
badges
|
|
213
|
+
}
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
return Widget;
|
|
217
|
+
}
|
|
218
|
+
export {
|
|
219
|
+
CustomCombobox,
|
|
220
|
+
CustomComboboxWidget
|
|
221
|
+
};
|
|
222
|
+
//# sourceMappingURL=combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/custom/schema-form/widgets/combobox.tsx"],"sourcesContent":["import { ChevronsUpDown } from \"lucide-react\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { CheckIcon } from \"lucide-react\";\r\nimport { Dispatch, ReactNode, SetStateAction, useState } from \"react\";\r\nimport { Badge } from \"@repo/ayasofyazilim-ui/components/badge\";\r\nimport { Button } from \"@repo/ayasofyazilim-ui/components/button\";\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from \"@repo/ayasofyazilim-ui/components/command\";\r\nimport {\r\n Drawer,\r\n DrawerContent,\r\n DrawerTrigger,\r\n} from \"@repo/ayasofyazilim-ui/components/drawer\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@repo/ayasofyazilim-ui/components/popover\";\r\nimport { useMediaQuery } from \"@repo/ayasofyazilim-ui/hooks/use-media-query\";\r\nimport { cn } from \"@repo/ayasofyazilim-ui/lib/utils\";\r\n\r\ntype BadgeOptions = { className?: string; showValue?: boolean; label?: string };\r\n\r\ntype CustomComboboxProps<T> = {\r\n emptyValue?: string;\r\n list: Array<T> | null | undefined;\r\n onValueChange?: Dispatch<SetStateAction<T | null | undefined>>;\r\n searchPlaceholder?: string;\r\n searchResultLabel?: string;\r\n selectIdentifier: keyof T;\r\n selectLabel: keyof T;\r\n disabledItems?: T[keyof T][];\r\n badges?: Partial<Record<keyof T, BadgeOptions>>;\r\n customItemRenderer?: (values: T) => ReactNode | undefined | string;\r\n} & WidgetProps;\r\n\r\nexport function CustomCombobox<T>(props: CustomComboboxProps<T>) {\r\n const {\r\n value,\r\n defaultValue,\r\n list,\r\n selectIdentifier,\r\n selectLabel,\r\n disabled,\r\n emptyValue = \"Please select\",\r\n } = props;\r\n const isDesktop = useMediaQuery(\"(min-width: 768px)\");\r\n const [open, setOpen] = useState(false);\r\n const fieldValue = value || defaultValue;\r\n const fieldValueDisplayName = list?.find(\r\n (x) => x[selectIdentifier] === fieldValue\r\n )?.[selectLabel];\r\n const DesktopContent = (\r\n <Popover open={open} onOpenChange={setOpen} modal>\r\n <PopoverTrigger\r\n asChild\r\n disabled={disabled}\r\n className={cn(disabled && \"cursor-not-allowed\")}\r\n >\r\n <Button\r\n id={props.id}\r\n data-testid={props.id}\r\n type=\"button\"\r\n variant=\"outline\"\r\n role=\"combobox\"\r\n className={cn(\r\n \"text-muted-foreground w-full justify-between font-normal shadow-xs hover:bg-white overflow-hidden\",\r\n fieldValueDisplayName && \"text-foreground\",\r\n disabled &&\r\n \"disabled:pointer-events-auto hover:bg-background hover:text-muted-foreground\"\r\n )}\r\n >\r\n <span className=\"truncate has-[role=dialog]:max-w-xs\">\r\n {typeof fieldValueDisplayName !== \"undefined\" &&\r\n fieldValueDisplayName !== null\r\n ? fieldValueDisplayName.toString()\r\n : emptyValue}\r\n </span>\r\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"p-0\">\r\n <List {...props} setOpen={setOpen} />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n\r\n const MobileContent = (\r\n <Drawer open={open} onOpenChange={setOpen}>\r\n <DrawerTrigger asChild>\r\n <Button\r\n data-testid={props.id}\r\n type=\"button\"\r\n disabled={disabled}\r\n variant=\"outline\"\r\n className={cn(\r\n \"text-muted-foreground w-full justify-between font-normal shadow-xs hover:bg-white\",\r\n fieldValueDisplayName && \"text-black\"\r\n )}\r\n >\r\n {fieldValueDisplayName\r\n ? fieldValueDisplayName.toString()\r\n : emptyValue}\r\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\r\n </Button>\r\n </DrawerTrigger>\r\n <DrawerContent>\r\n <div className=\"mt-4 border-t\">\r\n <List {...props} setOpen={setOpen} />\r\n </div>\r\n </DrawerContent>\r\n </Drawer>\r\n );\r\n\r\n return isDesktop ? DesktopContent : MobileContent;\r\n}\r\n\r\nfunction List<T>({\r\n setOpen,\r\n ...props\r\n}: CustomComboboxProps<T> & {\r\n setOpen: (open: boolean) => void;\r\n}) {\r\n const {\r\n uiSchema,\r\n onChange,\r\n value,\r\n list,\r\n selectIdentifier,\r\n selectLabel,\r\n searchPlaceholder,\r\n searchResultLabel,\r\n onValueChange,\r\n badges,\r\n customItemRenderer,\r\n } = props;\r\n const uiOptions = uiSchema?.[\"ui:options\"];\r\n return (\r\n <Command\r\n filter={(value, search) => {\r\n const filterResult = list?.find(\r\n (i) =>\r\n (i[selectIdentifier] as string).toString()?.toLocaleLowerCase() ===\r\n value.toLocaleLowerCase()\r\n )?.[selectLabel] as string;\r\n if (\r\n value.includes(search) ||\r\n filterResult?.toLocaleLowerCase().includes(search.toLocaleLowerCase())\r\n )\r\n return 1;\r\n return 0;\r\n }}\r\n >\r\n <CommandInput\r\n data-testid={`${props.id}_search`}\r\n placeholder={searchPlaceholder || \"Search...\"}\r\n className=\"h-9\"\r\n />\r\n <CommandList className=\"w-full min-w-full max-w-full\">\r\n <CommandEmpty>{searchResultLabel || \"0 search result.\"}</CommandEmpty>\r\n <CommandGroup>\r\n {list?.map((item: T, index) => (\r\n <CommandItem\r\n data-testid={`${props.id}_${index}`}\r\n disabled={props.disabledItems?.includes(item[selectIdentifier])}\r\n onSelect={() => {\r\n onChange(\r\n uiOptions?.allowEmpty !== false\r\n ? item[selectIdentifier] === value\r\n ? undefined\r\n : item[selectIdentifier]\r\n : item[selectIdentifier]\r\n );\r\n if (onValueChange)\r\n onValueChange(\r\n list.find((i) => i[selectIdentifier] === value)\r\n );\r\n setOpen(false);\r\n }}\r\n key={JSON.stringify(item[selectIdentifier])}\r\n value={item[selectIdentifier] as string}\r\n >\r\n {item[selectIdentifier] === value && (\r\n <CheckIcon className={cn(\"mr-2 h-4 w-4\")} />\r\n )}\r\n {customItemRenderer ? (\r\n customItemRenderer(item)\r\n ) : (\r\n <>\r\n {item[selectLabel] as string}\r\n {badges && (\r\n <div className=\"ml-auto\">\r\n {Object.keys(badges).map((badgeKey) => {\r\n const badgeOptions = badges[badgeKey as keyof T];\r\n if (!badgeOptions) return null;\r\n return (\r\n <Badge\r\n key={badgeKey}\r\n variant=\"outline\"\r\n className={cn(\"ml-2\", badgeOptions.className)}\r\n >\r\n {badgeOptions.showValue !== false &&\r\n (item[badgeKey as keyof T] as string)}\r\n {badgeOptions.label && badgeOptions.label}\r\n </Badge>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </CommandItem>\r\n ))}\r\n </CommandGroup>\r\n </CommandList>\r\n </Command>\r\n );\r\n}\r\n\r\nexport function CustomComboboxWidget<T>({\r\n languageData,\r\n selectLabel,\r\n selectIdentifier,\r\n list,\r\n onChange,\r\n disabledItems,\r\n badges,\r\n customItemRenderer,\r\n}: {\r\n languageData: {\r\n \"Select.Placeholder\": string;\r\n \"Select.ResultLabel\": string;\r\n \"Select.EmptyValue\": string;\r\n };\r\n selectIdentifier: keyof T;\r\n selectLabel: keyof T;\r\n list: T[];\r\n onChange?: (value: T | null | undefined) => void;\r\n disabledItems?: T[keyof T][];\r\n badges?: CustomComboboxProps<T>[\"badges\"];\r\n customItemRenderer?: CustomComboboxProps<T>[\"customItemRenderer\"];\r\n}) {\r\n function Widget(props: WidgetProps) {\r\n const { uiSchema } = props;\r\n const uiList = uiSchema?.[\"ui:optionList\"];\r\n return (\r\n <CustomCombobox<T>\r\n {...props}\r\n list={uiList || list}\r\n onChange={(value) => {\r\n props.onChange(value);\r\n if (onChange) {\r\n onChange(list.find((i) => i[selectIdentifier] === value));\r\n }\r\n }}\r\n customItemRenderer={customItemRenderer}\r\n searchPlaceholder={languageData[\"Select.Placeholder\"]}\r\n searchResultLabel={languageData[\"Select.ResultLabel\"]}\r\n emptyValue={languageData[\"Select.EmptyValue\"]}\r\n selectIdentifier={selectIdentifier}\r\n selectLabel={selectLabel}\r\n disabledItems={disabledItems}\r\n badges={badges}\r\n />\r\n );\r\n }\r\n return Widget;\r\n}\r\n"],"mappings":"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","names":["value"]}
|