From 8595a9f4e51645b989830523d0b1b3363a94b13a Mon Sep 17 00:00:00 2001 From: Stefan Pejcic Date: Wed, 8 May 2024 19:58:53 +0200 Subject: [PATCH] back --- packages/ably/.npmignore | 11 + packages/ably/CHANGELOG.md | 93 + packages/ably/LICENSE | 21 + packages/ably/README.md | 74 + packages/ably/jest.config.js | 6 + packages/ably/package.json | 50 + packages/ably/src/index.ts | 57 + packages/ably/tsconfig.declarations.json | 21 + packages/ably/tsconfig.json | 11 + packages/ably/tsup.config.ts | 24 + packages/airtable/.npmignore | 11 + packages/airtable/CHANGELOG.md | 357 + packages/airtable/LICENSE | 21 + packages/airtable/README.md | 70 + packages/airtable/jest.config.js | 7 + packages/airtable/package.json | 54 + packages/airtable/refine.config.js | 80 + packages/airtable/src/dataProvider.ts | 161 + packages/airtable/src/index.ts | 5 + packages/airtable/src/utils/generateFilter.ts | 12 + .../src/utils/generateFilterFormula.ts | 17 + .../src/utils/generateLogicalFilterFormula.ts | 50 + packages/airtable/src/utils/generateSort.ts | 8 + packages/airtable/src/utils/index.ts | 6 + .../airtable/src/utils/isContainsOperator.ts | 9 + .../airtable/src/utils/isSimpleOperator.ts | 14 + packages/airtable/test/create/index.mock.ts | 48 + packages/airtable/test/create/index.spec.ts | 26 + packages/airtable/test/custom/index.spec.ts | 14 + .../airtable/test/deleteMany/index.mock.ts | 41 + .../airtable/test/deleteMany/index.spec.ts | 15 + .../airtable/test/deleteOne/index.mock.ts | 41 + .../airtable/test/deleteOne/index.spec.ts | 15 + packages/airtable/test/getList/index.mock.ts | 150 + packages/airtable/test/getList/index.spec.ts | 444 + packages/airtable/test/getMany/index.mock.ts | 43 + packages/airtable/test/getMany/index.spec.ts | 20 + packages/airtable/test/getOne/index.mock.ts | 43 + packages/airtable/test/getOne/index.spec.ts | 17 + packages/airtable/test/jest.setup.js | 11 + packages/airtable/test/update/index.mock.ts | 43 + packages/airtable/test/update/index.spec.ts | 21 + .../airtable/test/updateMany/index.mock.ts | 46 + .../airtable/test/updateMany/index.spec.ts | 22 + .../test/utils/generateFilter.spec.ts | 33 + .../test/utils/generateFilterFormula.spec.ts | 44 + .../generateLogicalFilterFormula.spec.ts | 58 + .../airtable/test/utils/generateSort.spec.ts | 22 + .../test/utils/isContainsOperator.spec.ts | 31 + .../test/utils/isSimpleOperator.spec.ts | 30 + packages/airtable/tsconfig.declarations.json | 21 + packages/airtable/tsconfig.json | 8 + packages/airtable/tsup.config.ts | 24 + packages/antd/.npmignore | 11 + packages/antd/.npmrc | 1 + packages/antd/CHANGELOG.md | 3380 ++ packages/antd/README.md | 71 + packages/antd/jest.config.js | 31 + packages/antd/package.json | 75 + packages/antd/refine.config.js | 629 + packages/antd/src/assets/styles/reset.css | 254 + .../autoSaveIndicator/index.spec.tsx | 7 + .../components/autoSaveIndicator/index.tsx | 86 + .../src/components/breadcrumb/index.spec.tsx | 53 + .../antd/src/components/breadcrumb/index.tsx | 87 + .../components/buttons/clone/index.spec.tsx | 7 + .../src/components/buttons/clone/index.tsx | 117 + .../components/buttons/create/index.spec.tsx | 7 + .../src/components/buttons/create/index.tsx | 117 + .../components/buttons/delete/index.spec.tsx | 6 + .../src/components/buttons/delete/index.tsx | 150 + .../components/buttons/edit/index.spec.tsx | 6 + .../src/components/buttons/edit/index.tsx | 118 + .../components/buttons/export/index.spec.tsx | 6 + .../src/components/buttons/export/index.tsx | 36 + .../components/buttons/import/index.spec.tsx | 7 + .../src/components/buttons/import/index.tsx | 40 + packages/antd/src/components/buttons/index.ts | 11 + .../components/buttons/list/index.spec.tsx | 6 + .../src/components/buttons/list/index.tsx | 136 + .../components/buttons/refresh/index.spec.tsx | 6 + .../src/components/buttons/refresh/index.tsx | 76 + .../components/buttons/save/index.spec.tsx | 6 + .../src/components/buttons/save/index.tsx | 36 + .../components/buttons/show/index.spec.tsx | 6 + .../src/components/buttons/show/index.tsx | 117 + packages/antd/src/components/buttons/types.ts | 44 + .../src/components/crud/create/index.spec.tsx | 45 + .../antd/src/components/crud/create/index.tsx | 144 + .../src/components/crud/edit/index.spec.tsx | 521 + .../antd/src/components/crud/edit/index.tsx | 231 + packages/antd/src/components/crud/index.ts | 6 + .../src/components/crud/list/index.spec.tsx | 45 + .../antd/src/components/crud/list/index.tsx | 115 + .../src/components/crud/show/index.spec.tsx | 459 + .../antd/src/components/crud/show/index.tsx | 216 + packages/antd/src/components/crud/types.ts | 74 + .../components/fields/boolean/index.spec.tsx | 54 + .../src/components/fields/boolean/index.tsx | 26 + .../src/components/fields/date/index.spec.tsx | 7 + .../antd/src/components/fields/date/index.tsx | 33 + .../components/fields/email/index.spec.tsx | 7 + .../src/components/fields/email/index.tsx | 20 + .../src/components/fields/file/index.spec.tsx | 7 + .../antd/src/components/fields/file/index.tsx | 21 + .../components/fields/image/index.spec.tsx | 19 + .../src/components/fields/image/index.tsx | 17 + packages/antd/src/components/fields/index.ts | 11 + .../components/fields/markdown/index.spec.tsx | 7 + .../src/components/fields/markdown/index.tsx | 23 + .../components/fields/number/index.spec.tsx | 7 + .../src/components/fields/number/index.tsx | 36 + .../src/components/fields/tag/index.spec.tsx | 7 + .../antd/src/components/fields/tag/index.tsx | 13 + .../src/components/fields/text/index.spec.tsx | 7 + .../antd/src/components/fields/text/index.tsx | 15 + packages/antd/src/components/fields/types.ts | 49 + .../src/components/fields/url/index.spec.tsx | 7 + .../antd/src/components/fields/url/index.tsx | 24 + packages/antd/src/components/index.ts | 27 + .../components/layout/header/index.spec.tsx | 7 + .../src/components/layout/header/index.tsx | 35 + .../antd/src/components/layout/index.spec.tsx | 6 + packages/antd/src/components/layout/index.tsx | 45 + .../src/components/layout/sider/index.tsx | 281 + .../src/components/layout/sider/styles.ts | 9 + .../src/components/layout/title/index.tsx | 48 + packages/antd/src/components/layout/types.ts | 11 + .../antd/src/components/pageHeader/index.tsx | 58 + .../components/forgotPassword/index.spec.ts | 6 + .../auth/components/forgotPassword/index.tsx | 215 + .../pages/auth/components/index.tsx | 4 + .../pages/auth/components/login/index.spec.ts | 6 + .../pages/auth/components/login/index.tsx | 309 + .../auth/components/register/index.spec.ts | 6 + .../pages/auth/components/register/index.tsx | 299 + .../pages/auth/components/styles.ts | 30 + .../components/updatePassword/index.spec.ts | 6 + .../auth/components/updatePassword/index.tsx | 204 + .../src/components/pages/auth/index.spec.tsx | 6 + .../antd/src/components/pages/auth/index.tsx | 41 + .../src/components/pages/error/index.spec.tsx | 26 + .../antd/src/components/pages/error/index.tsx | 77 + packages/antd/src/components/pages/index.tsx | 6 + .../antd/src/components/pages/login/index.tsx | 172 + .../antd/src/components/pages/login/styles.ts | 25 + .../src/components/pages/ready/index.spec.tsx | 37 + .../antd/src/components/pages/ready/index.tsx | 95 + .../components/pages/welcome/index.spec.tsx | 37 + .../src/components/pages/welcome/index.tsx | 10 + .../components/filterDropdown/index.spec.tsx | 205 + .../table/components/filterDropdown/index.tsx | 112 + .../src/components/table/components/index.ts | 1 + packages/antd/src/components/table/index.ts | 1 + .../themedLayout/header/index.spec.tsx | 7 + .../components/themedLayout/header/index.tsx | 47 + .../components/themedLayout/index.spec.tsx | 6 + .../src/components/themedLayout/index.tsx | 44 + .../components/themedLayout/sider/index.tsx | 320 + .../components/themedLayout/sider/styles.ts | 9 + .../themedLayout/title/index.spec.tsx | 37 + .../components/themedLayout/title/index.tsx | 88 + .../antd/src/components/themedLayout/types.ts | 13 + .../themedLayoutV2/header/index.spec.tsx | 7 + .../themedLayoutV2/header/index.tsx | 57 + .../components/themedLayoutV2/index.spec.tsx | 6 + .../src/components/themedLayoutV2/index.tsx | 48 + .../themedLayoutV2/sider/index.spec.tsx | 51 + .../components/themedLayoutV2/sider/index.tsx | 353 + .../components/themedLayoutV2/sider/styles.ts | 9 + .../themedLayoutV2/title/index.spec.tsx | 37 + .../components/themedLayoutV2/title/index.tsx | 85 + .../src/components/themedLayoutV2/types.ts | 17 + .../undoableNotification/index.spec.tsx | 47 + .../components/undoableNotification/index.tsx | 42 + packages/antd/src/contexts/index.ts | 4 + .../IThemedLayoutContext.ts | 6 + .../contexts/themedLayoutContext/index.tsx | 33 + packages/antd/src/definitions/index.ts | 3 + .../antd/src/definitions/table/index.spec.ts | 297 + packages/antd/src/definitions/table/index.ts | 113 + packages/antd/src/definitions/themes/index.ts | 50 + .../antd/src/definitions/upload/index.spec.ts | 32 + packages/antd/src/definitions/upload/index.ts | 29 + packages/antd/src/hooks/fields/index.ts | 3 + .../fields/useCheckboxGroup/index.spec.ts | 103 + .../hooks/fields/useCheckboxGroup/index.ts | 106 + .../hooks/fields/useRadioGroup/index.spec.ts | 102 + .../src/hooks/fields/useRadioGroup/index.ts | 106 + .../src/hooks/fields/useSelect/index.spec.ts | 313 + .../antd/src/hooks/fields/useSelect/index.ts | 56 + packages/antd/src/hooks/form/index.ts | 17 + .../hooks/form/useDrawerForm/index.spec.tsx | 309 + .../src/hooks/form/useDrawerForm/index.ts | 6 + .../hooks/form/useDrawerForm/useDrawerForm.ts | 329 + packages/antd/src/hooks/form/useForm.spec.tsx | 251 + packages/antd/src/hooks/form/useForm.ts | 314 + .../hooks/form/useModalForm/index.spec.tsx | 303 + .../antd/src/hooks/form/useModalForm/index.ts | 5 + .../hooks/form/useModalForm/useModalForm.ts | 365 + .../antd/src/hooks/form/useStepsForm/index.ts | 5 + .../form/useStepsForm/useStepsForm.spec.tsx | 278 + .../hooks/form/useStepsForm/useStepsForm.ts | 145 + packages/antd/src/hooks/import/index.spec.ts | 77 + packages/antd/src/hooks/import/index.tsx | 134 + packages/antd/src/hooks/index.ts | 9 + packages/antd/src/hooks/list/index.ts | 1 + .../src/hooks/list/useSimpleList/index.ts | 1 + .../list/useSimpleList/useSimpleList.spec.ts | 175 + .../hooks/list/useSimpleList/useSimpleList.ts | 232 + packages/antd/src/hooks/modal/index.ts | 1 + .../src/hooks/modal/useModal/index.spec.ts | 134 + .../antd/src/hooks/modal/useModal/index.tsx | 43 + packages/antd/src/hooks/table/index.ts | 2 + .../src/hooks/table/useEditableTable/index.ts | 1 + .../useEditableTable.spec.tsx | 147 + .../useEditableTable/useEditableTable.ts | 127 + .../antd/src/hooks/table/useTable/index.ts | 1 + .../hooks/table/useTable/paginationLink.tsx | 27 + .../src/hooks/table/useTable/useTable.spec.ts | 293 + .../antd/src/hooks/table/useTable/useTable.ts | 270 + .../hooks/useFileUploadState/index.spec.ts | 47 + .../src/hooks/useFileUploadState/index.ts | 34 + .../antd/src/hooks/useSiderVisible/index.ts | 29 + .../src/hooks/useThemedLayoutContext/index.ts | 22 + packages/antd/src/index.tsx | 14 + packages/antd/src/interfaces/field.ts | 3 + packages/antd/src/interfaces/index.ts | 23 + packages/antd/src/interfaces/upload.ts | 9 + packages/antd/src/providers/index.ts | 1 + .../notificationProvider/index.spec.tsx | 309 + .../providers/notificationProvider/index.tsx | 98 + packages/antd/src/types/index.d.ts | 4 + packages/antd/src/types/sunflower.d.ts | 78 + packages/antd/test/dataMocks.ts | 141 + packages/antd/test/index.tsx | 110 + packages/antd/test/jest.setup.ts | 23 + packages/antd/test/svgTransform.ts | 8 + packages/antd/tsconfig.declarations.json | 37 + packages/antd/tsconfig.json | 28 + packages/antd/tsconfig.test.json | 16 + packages/antd/tsup.config.ts | 110 + packages/appwrite/.npmignore | 11 + packages/appwrite/CHANGELOG.md | 408 + packages/appwrite/LICENSE | 21 + packages/appwrite/README.md | 84 + packages/appwrite/jest.config.js | 7 + packages/appwrite/package.json | 51 + packages/appwrite/refine.config.js | 73 + packages/appwrite/src/dataProvider.ts | 213 + packages/appwrite/src/index.ts | 27 + packages/appwrite/src/liveProvider.ts | 46 + packages/appwrite/src/utils/generateFilter.ts | 23 + .../appwrite/src/utils/getAppwriteFilters.ts | 29 + .../src/utils/getAppwritePagination.ts | 5 + .../appwrite/src/utils/getAppwriteSorting.ts | 23 + packages/appwrite/src/utils/getRefineEvent.ts | 14 + packages/appwrite/src/utils/index.ts | 5 + packages/appwrite/test/appwriteClient.ts | 11 + packages/appwrite/test/create/index.mock.ts | 104 + packages/appwrite/test/create/index.spec.ts | 19 + .../appwrite/test/createMany/index.mock.ts | 156 + .../appwrite/test/createMany/index.spec.ts | 26 + packages/appwrite/test/custom/index.spec.ts | 21 + .../appwrite/test/deleteMany/index.mock.ts | 128 + .../appwrite/test/deleteMany/index.spec.ts | 17 + .../appwrite/test/deleteOne/index.mock.ts | 90 + .../appwrite/test/deleteOne/index.spec.ts | 16 + .../appwrite/test/getApiUrl/index.spec.ts | 18 + packages/appwrite/test/getList/index.mock.ts | 237 + packages/appwrite/test/getList/index.spec.ts | 109 + packages/appwrite/test/getMany/index.mock.ts | 134 + packages/appwrite/test/getMany/index.spec.ts | 20 + packages/appwrite/test/getOne/index.mock.ts | 93 + packages/appwrite/test/getOne/index.spec.ts | 16 + packages/appwrite/test/jest.setup.ts | 64 + .../appwrite/test/liveProvider/index.spec.ts | 108 + packages/appwrite/test/update/index.mock.ts | 103 + packages/appwrite/test/update/index.spec.ts | 20 + .../appwrite/test/updateMany/index.mock.ts | 154 + .../appwrite/test/updateMany/index.spec.ts | 23 + .../test/utils/generateFilter.spec.ts | 54 + .../test/utils/gerRefineEvent.spec.ts | 25 + .../test/utils/getAppwriteFilters.spec.ts | 66 + .../test/utils/getAppwritePagination.spec.ts | 38 + .../appwrite/test/utils/getAppwriteSorting.ts | 33 + packages/appwrite/tsconfig.declarations.json | 21 + packages/appwrite/tsconfig.json | 11 + packages/appwrite/tsup.config.ts | 24 + packages/chakra-ui/.npmignore | 11 + packages/chakra-ui/CHANGELOG.md | 1546 + packages/chakra-ui/README.md | 73 + packages/chakra-ui/jest.config.js | 27 + packages/chakra-ui/package.json | 68 + packages/chakra-ui/refine.config.js | 649 + .../autoSaveIndicator/index.spec.tsx | 7 + .../components/autoSaveIndicator/index.tsx | 85 + .../src/components/breadcrumb/index.spec.tsx | 64 + .../src/components/breadcrumb/index.tsx | 76 + .../components/buttons/clone/index.spec.tsx | 7 + .../src/components/buttons/clone/index.tsx | 129 + .../components/buttons/create/index.spec.tsx | 7 + .../src/components/buttons/create/index.tsx | 121 + .../components/buttons/delete/index.spec.tsx | 6 + .../src/components/buttons/delete/index.tsx | 193 + .../components/buttons/edit/index.spec.tsx | 6 + .../src/components/buttons/edit/index.tsx | 130 + .../components/buttons/export/index.spec.tsx | 6 + .../src/components/buttons/export/index.tsx | 50 + .../components/buttons/import/index.spec.tsx | 7 + .../src/components/buttons/import/index.tsx | 58 + .../src/components/buttons/index.tsx | 11 + .../components/buttons/list/index.spec.tsx | 6 + .../src/components/buttons/list/index.tsx | 155 + .../components/buttons/refresh/index.spec.tsx | 6 + .../src/components/buttons/refresh/index.tsx | 93 + .../components/buttons/save/index.spec.tsx | 6 + .../src/components/buttons/save/index.tsx | 47 + .../components/buttons/show/index.spec.tsx | 6 + .../src/components/buttons/show/index.tsx | 128 + .../chakra-ui/src/components/buttons/types.ts | 104 + .../src/components/crud/create/index.spec.tsx | 82 + .../src/components/crud/create/index.tsx | 199 + .../src/components/crud/edit/index.spec.tsx | 504 + .../src/components/crud/edit/index.tsx | 292 + .../chakra-ui/src/components/crud/index.ts | 5 + .../src/components/crud/list/index.spec.tsx | 54 + .../src/components/crud/list/index.tsx | 148 + .../src/components/crud/show/index.spec.tsx | 500 + .../src/components/crud/show/index.tsx | 276 + .../chakra-ui/src/components/crud/types.ts | 58 + .../components/fields/boolean/index.spec.tsx | 49 + .../src/components/fields/boolean/index.tsx | 30 + .../src/components/fields/date/index.spec.tsx | 7 + .../src/components/fields/date/index.tsx | 33 + .../components/fields/email/index.spec.tsx | 7 + .../src/components/fields/email/index.tsx | 18 + .../src/components/fields/file/index.spec.tsx | 7 + .../src/components/fields/file/index.tsx | 17 + .../chakra-ui/src/components/fields/index.ts | 10 + .../components/fields/markdown/index.spec.tsx | 7 + .../src/components/fields/markdown/index.tsx | 21 + .../components/fields/number/index.spec.tsx | 7 + .../src/components/fields/number/index.tsx | 33 + .../src/components/fields/tag/index.spec.tsx | 7 + .../src/components/fields/tag/index.tsx | 13 + .../src/components/fields/text/index.spec.tsx | 7 + .../src/components/fields/text/index.tsx | 13 + .../chakra-ui/src/components/fields/types.ts | 43 + .../src/components/fields/url/index.spec.tsx | 7 + .../src/components/fields/url/index.tsx | 23 + packages/chakra-ui/src/components/index.ts | 26 + .../components/layout/header/index.spec.tsx | 59 + .../src/components/layout/header/index.tsx | 32 + .../chakra-ui/src/components/layout/index.tsx | 42 + .../src/components/layout/sider/index.tsx | 350 + .../src/components/layout/title/index.spec.ts | 6 + .../src/components/layout/title/index.tsx | 35 + .../chakra-ui/src/components/layout/types.ts | 11 + .../components/forgotPassword/index.spec.tsx | 41 + .../auth/components/forgotPassword/index.tsx | 176 + .../components/pages/auth/components/index.ts | 4 + .../auth/components/login/index.spec.tsx | 49 + .../pages/auth/components/login/index.tsx | 297 + .../auth/components/register/index.spec.tsx | 46 + .../pages/auth/components/register/index.tsx | 265 + .../pages/auth/components/styles.ts | 23 + .../components/updatePassword/index.spec.tsx | 46 + .../auth/components/updatePassword/index.tsx | 167 + .../src/components/pages/auth/index.spec.tsx | 6 + .../src/components/pages/auth/index.tsx | 39 + .../src/components/pages/error/index.spec.tsx | 81 + .../src/components/pages/error/index.tsx | 97 + .../chakra-ui/src/components/pages/index.ts | 4 + .../src/components/pages/ready/index.spec.tsx | 37 + .../src/components/pages/ready/index.tsx | 85 + .../components/pages/welcome/index.spec.tsx | 34 + .../src/components/pages/welcome/index.tsx | 10 + .../themedLayout/header/index.spec.tsx | 59 + .../components/themedLayout/header/index.tsx | 94 + .../src/components/themedLayout/index.tsx | 46 + .../components/themedLayout/sider/index.tsx | 379 + .../themedLayout/title/index.spec.ts | 6 + .../components/themedLayout/title/index.tsx | 76 + .../src/components/themedLayout/types.ts | 13 + .../themedLayoutV2/hamburgerMenu/index.tsx | 45 + .../themedLayoutV2/header/index.spec.tsx | 138 + .../themedLayoutV2/header/index.tsx | 82 + .../components/themedLayoutV2/index.spec.tsx | 6 + .../src/components/themedLayoutV2/index.tsx | 42 + .../themedLayoutV2/sider/index.spec.tsx | 7 + .../components/themedLayoutV2/sider/index.tsx | 398 + .../themedLayoutV2/title/index.spec.ts | 6 + .../components/themedLayoutV2/title/index.tsx | 73 + .../src/components/themedLayoutV2/types.ts | 13 + .../components/undoableNotification/index.tsx | 55 + packages/chakra-ui/src/contexts/index.ts | 4 + .../IThemedLayoutContext.ts | 6 + .../contexts/themedLayoutContext/index.tsx | 33 + packages/chakra-ui/src/hooks/index.ts | 3 + .../src/hooks/usePagination/index.ts | 33 + .../src/hooks/useSiderVisible/index.ts | 29 + .../src/hooks/useThemedLayoutContext/index.ts | 22 + packages/chakra-ui/src/index.tsx | 5 + packages/chakra-ui/src/providers/index.ts | 1 + .../src/providers/notificationProvider.tsx | 66 + packages/chakra-ui/src/theme/index.ts | 124 + packages/chakra-ui/src/types/index.d.ts | 4 + packages/chakra-ui/test/dataMocks.ts | 88 + packages/chakra-ui/test/index.tsx | 101 + packages/chakra-ui/test/jest.setup.ts | 39 + packages/chakra-ui/test/svgTransform.ts | 8 + packages/chakra-ui/tsconfig.declarations.json | 29 + packages/chakra-ui/tsconfig.json | 24 + packages/chakra-ui/tsconfig.test.json | 16 + packages/chakra-ui/tsup.config.ts | 20 + packages/cli/.npmignore | 11 + packages/cli/.npmrc | 1 + packages/cli/ANNOUNCEMENTS.md | 16 + packages/cli/CHANGELOG.md | 795 + packages/cli/README.md | 31 + packages/cli/jest.config.js | 13 + packages/cli/package.json | 82 + packages/cli/src/cli.ts | 73 + .../cli/src/commands/add/create-provider.ts | 97 + .../cli/src/commands/add/create-resource.ts | 165 + packages/cli/src/commands/add/index.spec.ts | 70 + packages/cli/src/commands/add/index.ts | 98 + .../src/commands/check-updates/index.test.tsx | 66 + .../cli/src/commands/check-updates/index.tsx | 95 + .../cli/src/commands/create-resource/index.ts | 36 + packages/cli/src/commands/devtools/index.ts | 225 + packages/cli/src/commands/proxy/index.ts | 151 + .../cli/src/commands/runner/build/index.ts | 47 + packages/cli/src/commands/runner/dev/index.ts | 58 + packages/cli/src/commands/runner/index.ts | 6 + .../commands/runner/projectScripts.test.ts | 366 + .../cli/src/commands/runner/projectScripts.ts | 75 + packages/cli/src/commands/runner/run/index.ts | 47 + packages/cli/src/commands/runner/runScript.ts | 30 + .../cli/src/commands/runner/start/index.ts | 42 + .../cli/src/commands/runner/utils/index.ts | 34 + packages/cli/src/commands/swizzle/index.tsx | 282 + .../install-required-packages/index.spec.ts | 110 + .../install-required-packages/index.ts | 49 + packages/cli/src/commands/update/index.ts | 103 + .../update/interactive/index.test.tsx | 117 + .../src/commands/update/interactive/index.ts | 199 + packages/cli/src/commands/whoami/index.ts | 37 + .../src/components/swizzle-message/index.tsx | 131 + .../components/update-warning-table/index.tsx | 1 + .../update-warning-table/table.test.ts | 52 + .../components/update-warning-table/table.ts | 168 + packages/cli/src/definitions/announcement.ts | 4 + packages/cli/src/definitions/cardinal.d.ts | 6 + packages/cli/src/definitions/index.ts | 5 + packages/cli/src/definitions/node.ts | 8 + packages/cli/src/definitions/package.ts | 23 + packages/cli/src/definitions/projectTypes.ts | 9 + packages/cli/src/definitions/refineConfig.ts | 46 + packages/cli/src/definitions/uiFrameworks.ts | 6 + packages/cli/src/index.ts | 5 + packages/cli/src/telemetry/index.ts | 51 + .../transformers/add-devtools-component.ts | 111 + packages/cli/src/transformers/resource.ts | 121 + .../cli/src/update-notifier/index.test.ts | 114 + packages/cli/src/update-notifier/index.tsx | 144 + packages/cli/src/utils/announcement/index.tsx | 81 + packages/cli/src/utils/array/index.test.ts | 24 + packages/cli/src/utils/array/index.ts | 5 + packages/cli/src/utils/compile/index.ts | 61 + packages/cli/src/utils/encode/index.ts | 14 + packages/cli/src/utils/env/index.test.tsx | 55 + packages/cli/src/utils/env/index.ts | 47 + .../utils/marked-terminal-renderer/index.ts | 9 + packages/cli/src/utils/os/index.ts | 25 + packages/cli/src/utils/package/index.test.tsx | 46 + packages/cli/src/utils/package/index.ts | 248 + packages/cli/src/utils/project/index.ts | 79 + packages/cli/src/utils/refine/index.test.tsx | 67 + packages/cli/src/utils/refine/index.ts | 22 + packages/cli/src/utils/resource/index.spec.ts | 39 + packages/cli/src/utils/resource/index.ts | 62 + packages/cli/src/utils/spinner/index.ts | 13 + .../utils/swizzle/appendAfterImports.test.ts | 23 + .../src/utils/swizzle/appendAfterImports.ts | 18 + packages/cli/src/utils/swizzle/codes.ts | 8 + .../cli/src/utils/swizzle/getFileContent.ts | 16 + .../cli/src/utils/swizzle/getPathPrefix.ts | 17 + packages/cli/src/utils/swizzle/import.test.ts | 205 + packages/cli/src/utils/swizzle/import.ts | 264 + packages/cli/src/utils/swizzle/index.ts | 22 + .../utils/swizzle/parseSwizzleBlocks.test.ts | 25 + .../src/utils/swizzle/parseSwizzleBlocks.ts | 6 + .../cli/src/utils/swizzle/prettierFormat.ts | 14 + .../src/utils/swizzle/provideCliHelpers.ts | 33 + .../src/utils/swizzle/renderCodeMarkdown.ts | 46 + packages/cli/src/utils/text/index.test.tsx | 29 + packages/cli/src/utils/text/index.ts | 10 + .../provider/demo-access-control-provider.tsx | 25 + .../provider/demo-audit-log-provider.tsx | 62 + .../templates/provider/demo-auth-provider.tsx | 101 + .../templates/provider/demo-data-provider.tsx | 137 + .../templates/provider/demo-i18n-provider.tsx | 37 + .../templates/provider/demo-live-provider.tsx | 31 + .../provider/demo-notification-provider.tsx | 32 + .../cli/templates/resource/create.tsx.hbs | 14 + packages/cli/templates/resource/edit.tsx.hbs | 14 + packages/cli/templates/resource/index.ts.hbs | 10 + packages/cli/templates/resource/list.tsx.hbs | 14 + packages/cli/templates/resource/show.tsx.hbs | 14 + packages/cli/test/jest.setup.ts | 0 packages/cli/tsconfig.declarations.json | 21 + packages/cli/tsconfig.json | 27 + packages/cli/tsconfig.test.json | 16 + packages/cli/tsup.config.ts | 102 + packages/codemod/CHANGELOG.md | 152 + packages/codemod/LICENSE | 10 + packages/codemod/README.md | 41 + packages/codemod/jest.config.js | 6 + packages/codemod/package.json | 53 + .../src/definitions/separated-imports/antd.ts | 176 + .../definitions/separated-imports/chakra.ts | 782 + .../definitions/separated-imports/mantine.ts | 536 + .../src/definitions/separated-imports/mui.ts | 1207 + .../separated-imports/react-hook-form.ts | 138 + .../separated-imports/react-query.ts | 73 + .../separated-imports/react-router-v6.ts | 69 + .../separated-imports/react-table.ts | 197 + .../src/helpers/check-antd-version-is-3x.ts | 24 + .../codemod/src/helpers/check-package-lock.ts | 16 + packages/codemod/src/helpers/index.ts | 4 + packages/codemod/src/helpers/install.ts | 186 + .../codemod/src/helpers/separate-imports.ts | 167 + .../src/helpers/temp-codemod-config.ts | 76 + packages/codemod/src/index.ts | 263 + .../src/transformations/antd4-to-antd5.ts | 62 + .../src/transformations/refine1-to-refine2.ts | 306 + .../src/transformations/refine2-to-refine3.ts | 691 + .../src/transformations/refine3-to-refine4.ts | 127 + .../transformations/use-data-grid-columns.ts | 104 + ...thProviderCompatible-true-to-auth-hooks.ts | 79 + .../v4/authProvider-to-legacyAuthProvider.ts | 43 + .../transformations/v4/fix-v4-deprecations.ts | 978 + .../transformations/v4/metadata-to-meta.ts | 53 + .../v4/move-deprecated-access-control.ts | 41 + .../replace-pankod-imports-with-refinedev.ts | 110 + .../v4/resourceName-to-resource.ts | 48 + .../v4/router-to-legacy-router.ts | 86 + .../v4/separate-imports-antd.ts | 121 + .../v4/separate-imports-chakra.ts | 29 + .../v4/separate-imports-mantine.ts | 37 + .../v4/separate-imports-mui.ts | 35 + .../v4/separate-imports-react-hook-form.ts | 39 + .../v4/separate-imports-react-query.ts | 39 + .../v4/separate-imports-react-router-v6.ts | 32 + .../v4/separate-imports-react-table.ts | 32 + .../transformations/v4/use-menu-to-core.ts | 94 + packages/codemod/test/list.tsx | 63 + packages/codemod/tsconfig.json | 14 + packages/core/.npmignore | 11 + packages/core/.npmrc | 1 + packages/core/CHANGELOG.md | 4957 ++ packages/core/README.md | 271 + packages/core/jest.config.js | 38 + packages/core/package.json | 69 + packages/core/refine.config.js | 130 + .../components/authenticated/index.spec.tsx | 522 + .../src/components/authenticated/index.tsx | 222 + .../autoSaveIndicator/index.spec.tsx | 41 + .../components/autoSaveIndicator/index.tsx | 40 + .../src/components/canAccess/index.spec.tsx | 459 + .../core/src/components/canAccess/index.tsx | 120 + .../core/src/components/containers/index.ts | 1 + .../containers/refine/index.spec.tsx | 112 + .../components/containers/refine/index.tsx | 407 + .../core/src/components/gh-banner/index.tsx | 270 + .../core/src/components/gh-banner/styles.ts | 46 + packages/core/src/components/index.ts | 10 + .../layoutWrapper/defaultLayout/index.tsx | 7 + .../components/layoutWrapper/index.spec.tsx | 186 + .../src/components/layoutWrapper/index.tsx | 121 + .../components/forgotPassword/index.spec.tsx | 172 + .../auth/components/forgotPassword/index.tsx | 118 + .../components/pages/auth/components/index.ts | 4 + .../auth/components/login/index.spec.tsx | 351 + .../pages/auth/components/login/index.tsx | 206 + .../auth/components/register/index.spec.tsx | 281 + .../pages/auth/components/register/index.tsx | 188 + .../components/updatePassword/index.spec.tsx | 109 + .../auth/components/updatePassword/index.tsx | 107 + .../src/components/pages/auth/index.spec.tsx | 37 + .../core/src/components/pages/auth/index.tsx | 52 + .../src/components/pages/error/index.spec.tsx | 89 + .../core/src/components/pages/error/index.tsx | 64 + packages/core/src/components/pages/index.tsx | 7 + .../core/src/components/pages/login/index.tsx | 91 + .../src/components/pages/ready/index.spec.tsx | 37 + .../core/src/components/pages/ready/index.tsx | 38 + .../components/pages/welcome/index.spec.tsx | 35 + .../src/components/pages/welcome/index.tsx | 294 + .../routeChangeHandler/index.spec.tsx | 60 + .../components/routeChangeHandler/index.tsx | 16 + .../src/components/telemetry/index.spec.tsx | 108 + .../core/src/components/telemetry/index.tsx | 58 + .../components/undoableQueue/index.spec.tsx | 79 + .../src/components/undoableQueue/index.tsx | 68 + .../accessControl/IAccessControlContext.ts | 49 + .../core/src/contexts/accessControl/index.tsx | 49 + .../src/contexts/auditLog/IAuditLogContext.ts | 31 + packages/core/src/contexts/auditLog/index.tsx | 17 + .../core/src/contexts/auth/IAuthContext.ts | 27 + packages/core/src/contexts/auth/index.tsx | 203 + .../core/src/contexts/data/IDataContext.ts | 316 + packages/core/src/contexts/data/index.spec.ts | 110 + packages/core/src/contexts/data/index.tsx | 50 + .../contexts/legacy-router/IRouterContext.ts | 37 + .../core/src/contexts/legacy-router/index.tsx | 45 + .../core/src/contexts/live/ILiveContext.ts | 56 + packages/core/src/contexts/live/index.tsx | 16 + .../notification/INotificationContext.ts | 15 + .../core/src/contexts/notification/index.tsx | 20 + .../src/contexts/refine/IRefineContext.ts | 138 + packages/core/src/contexts/refine/index.tsx | 98 + .../src/contexts/resource/IResourceContext.ts | 68 + packages/core/src/contexts/resource/index.tsx | 34 + .../core/src/contexts/router-picker/index.tsx | 21 + packages/core/src/contexts/router/index.tsx | 17 + .../translation/ITranslationContext.ts | 19 + .../src/contexts/translation/index.spec.tsx | 59 + .../core/src/contexts/translation/index.tsx | 24 + .../undoableQueue/IUndoableQueueContext.ts | 6 + .../src/contexts/undoableQueue/actionTypes.ts | 5 + .../src/contexts/undoableQueue/index.spec.tsx | 86 + .../core/src/contexts/undoableQueue/index.ts | 5 + .../undoableQueue/undoableQueueContext.tsx | 83 + .../unsavedWarn/IUnsavedWarnContext.ts | 4 + .../core/src/contexts/unsavedWarn/index.tsx | 17 + .../check-router-prop-misuse/index.spec.ts | 12 + .../helpers/check-router-prop-misuse/index.ts | 30 + .../helpers/flatten-object-keys/index.spec.ts | 95 + .../helpers/flatten-object-keys/index.ts | 38 + .../generateDocumentTitle/index.spec.ts | 126 + .../helpers/generateDocumentTitle/index.ts | 62 + .../helpers/handleMultiple/index.spec.ts | 12 + .../helpers/handleMultiple/index.ts | 7 + .../handlePaginationParams/index.spec.ts | 73 + .../helpers/handlePaginationParams/index.ts | 30 + .../helpers/handleRefineOptions/index.spec.ts | 233 + .../helpers/handleRefineOptions/index.ts | 108 + .../helpers/handleUseParams/index.spec.tsx | 66 + .../helpers/handleUseParams/index.tsx | 9 + .../helpers/hasPermission/index.spec.tsx | 23 + .../helpers/hasPermission/index.ts | 9 + .../helpers/humanizeString/index.spec.tsx | 10 + .../helpers/humanizeString/index.ts | 14 + .../helpers/importCSVMapper/index.spec.ts | 48 + .../helpers/importCSVMapper/index.ts | 15 + .../core/src/definitions/helpers/index.ts | 32 + .../definitions/helpers/keys/index.spec.ts | 462 + .../src/definitions/helpers/keys/index.ts | 336 + .../legacy-resource-transform/index.spec.ts | 43 + .../legacy-resource-transform/index.ts | 30 + .../__tests__/create-resource-key.test.ts | 48 + .../menu/__tests__/create-tree.test.ts | 166 + .../helpers/menu/create-resource-key.ts | 33 + .../definitions/helpers/menu/create-tree.ts | 87 + .../helpers/pick-resource/index.test.ts | 69 + .../helpers/pick-resource/index.ts | 41 + .../helpers/pickDataProvider/index.spec.ts | 45 + .../helpers/pickDataProvider/index.ts | 29 + .../helpers/pickNotDeprecated/index.spec.ts | 28 + .../helpers/pickNotDeprecated/index.ts | 9 + .../property-path-to-array/index.spec.ts | 21 + .../helpers/property-path-to-array/index.ts | 5 + .../helpers/queryKeys/index.spec.ts | 607 + .../definitions/helpers/queryKeys/index.ts | 115 + .../helpers/redirectPage/index.spec.ts | 57 + .../definitions/helpers/redirectPage/index.ts | 28 + .../helpers/routeGenerator/index.spec.ts | 70 + .../helpers/routeGenerator/index.ts | 29 + .../router/__tests__/check-by-segments.ts | 24 + .../helpers/router/__tests__/compose-route.ts | 52 + .../get-action-routes-from-resource.ts | 169 + .../__tests__/get-default-action-path.ts | 47 + .../get-parent-prefix-for-resource.ts | 84 + .../router/__tests__/get-parent-resource.ts | 51 + .../router/__tests__/is-parameter.test.ts | 11 + .../__tests__/is-segment-counts-same.ts | 21 + .../__tests__/match-resource-from-route.ts | 59 + .../router/__tests__/pick-matched-route.ts | 89 + .../router/__tests__/pick-route-params.ts | 18 + .../router/__tests__/prepare-route-params.ts | 26 + .../remove-leading-trailing-slashes.ts | 15 + .../router/__tests__/split-to-segments.ts | 15 + .../helpers/router/check-by-segments.ts | 28 + .../helpers/router/compose-route.ts | 41 + .../router/get-action-routes-from-resource.ts | 71 + .../helpers/router/get-default-action-path.ts | 33 + .../router/get-parent-prefix-for-resource.ts | 39 + .../helpers/router/get-parent-resource.ts | 31 + .../src/definitions/helpers/router/index.ts | 10 + .../helpers/router/is-parameter.ts | 6 + .../helpers/router/is-segment-counts-same.ts | 11 + .../router/match-resource-from-route.ts | 37 + .../helpers/router/pick-matched-route.ts | 61 + .../helpers/router/pick-route-params.ts | 19 + .../helpers/router/prepare-route-params.ts | 20 + .../router/remove-leading-trailing-slashes.ts | 6 + .../helpers/router/split-to-segments.ts | 7 + .../helpers/safe-translate/index.spec.ts | 31 + .../helpers/safe-translate/index.ts | 20 + .../helpers/sanitize-resource/index.spec.ts | 49 + .../helpers/sanitize-resource/index.ts | 38 + .../helpers/sequentialPromises/index.spec.ts | 20 + .../helpers/sequentialPromises/index.ts | 32 + .../treeView/createTreeView/index.spec.ts | 74 + .../helpers/treeView/createTreeView/index.ts | 44 + .../src/definitions/helpers/treeView/index.ts | 1 + .../useActiveAuthProvider/index.spec.ts | 67 + .../helpers/useActiveAuthProvider/index.ts | 30 + .../useInfinitePagination/index.spec.ts | 65 + .../helpers/useInfinitePagination/index.ts | 30 + .../helpers/useMediaQuery/index.spec.ts | 35 + .../helpers/useMediaQuery/index.ts | 17 + .../useUserFriendlyName/index.spec.tsx | 57 + .../helpers/useUserFriendlyName/index.ts | 24 + .../userFriendlyResourceName/index.spec.ts | 19 + .../helpers/userFriendlyResourceName/index.ts | 18 + .../userFriendlySeconds/index.spec.tsx | 11 + .../helpers/userFriendlySeconds/index.ts | 3 + packages/core/src/definitions/index.ts | 3 + .../table/__snapshots__/index.spec.ts.snap | 7 + .../core/src/definitions/table/index.spec.ts | 639 + packages/core/src/definitions/table/index.ts | 192 + .../upload/file2Base64/index.spec.ts | 45 + .../definitions/upload/file2Base64/index.ts | 21 + packages/core/src/definitions/upload/index.ts | 1 + .../core/src/hooks/accessControl/index.ts | 2 + .../hooks/accessControl/useCan/index.spec.tsx | 310 + .../src/hooks/accessControl/useCan/index.ts | 77 + .../hooks/accessControl/useCanWithoutCache.ts | 39 + packages/core/src/hooks/auditLog/index.ts | 2 + .../src/hooks/auditLog/useLog/index.spec.ts | 422 + .../core/src/hooks/auditLog/useLog/index.ts | 155 + .../hooks/auditLog/useLogList/index.spec.ts | 159 + .../src/hooks/auditLog/useLogList/index.ts | 72 + packages/core/src/hooks/auth/index.ts | 10 + .../auth/useForgotPassword/index.spec.ts | 574 + .../src/hooks/auth/useForgotPassword/index.ts | 206 + .../hooks/auth/useGetIdentity/index.spec.ts | 287 + .../src/hooks/auth/useGetIdentity/index.ts | 105 + .../auth/useInvalidateAuthStore/index.ts | 19 + .../auth/useIsAuthenticated/index.spec.ts | 307 + .../hooks/auth/useIsAuthenticated/index.ts | 96 + .../useIsExistAuthentication/index.spec.ts | 43 + .../auth/useIsExistAuthentication/index.ts | 12 + .../src/hooks/auth/useLogin/index.spec.ts | 1005 + .../core/src/hooks/auth/useLogin/index.ts | 252 + .../src/hooks/auth/useLogout/index.spec.ts | 773 + .../core/src/hooks/auth/useLogout/index.ts | 221 + .../src/hooks/auth/useOnError/index.spec.ts | 302 + .../core/src/hooks/auth/useOnError/index.ts | 123 + .../hooks/auth/usePermissions/index.spec.ts | 216 + .../src/hooks/auth/usePermissions/index.ts | 100 + .../src/hooks/auth/useRegister/index.spec.ts | 776 + .../core/src/hooks/auth/useRegister/index.ts | 217 + .../auth/useUpdatePassword/index.spec.ts | 833 + .../src/hooks/auth/useUpdatePassword/index.ts | 254 + .../core/src/hooks/breadcrumb/index.spec.tsx | 182 + packages/core/src/hooks/breadcrumb/index.ts | 135 + packages/core/src/hooks/data/index.ts | 18 + .../core/src/hooks/data/useApiUrl.spec.tsx | 107 + packages/core/src/hooks/data/useApiUrl.ts | 15 + .../core/src/hooks/data/useCreate.spec.tsx | 798 + packages/core/src/hooks/data/useCreate.ts | 301 + .../src/hooks/data/useCreateMany.spec.tsx | 752 + packages/core/src/hooks/data/useCreateMany.ts | 284 + .../core/src/hooks/data/useCustom.spec.tsx | 487 + packages/core/src/hooks/data/useCustom.ts | 232 + .../src/hooks/data/useCustomMutation.spec.tsx | 366 + .../core/src/hooks/data/useCustomMutation.ts | 223 + .../src/hooks/data/useDataProvider.spec.tsx | 64 + .../core/src/hooks/data/useDataProvider.tsx | 39 + .../core/src/hooks/data/useDelete.spec.tsx | 868 + packages/core/src/hooks/data/useDelete.ts | 508 + .../src/hooks/data/useDeleteMany.spec.tsx | 897 + packages/core/src/hooks/data/useDeleteMany.ts | 541 + .../src/hooks/data/useInfiniteList.spec.tsx | 1009 + .../core/src/hooks/data/useInfiniteList.ts | 337 + packages/core/src/hooks/data/useList.spec.tsx | 1211 + packages/core/src/hooks/data/useList.ts | 346 + packages/core/src/hooks/data/useMany.spec.tsx | 962 + packages/core/src/hooks/data/useMany.ts | 262 + packages/core/src/hooks/data/useOne.spec.tsx | 927 + packages/core/src/hooks/data/useOne.ts | 260 + .../core/src/hooks/data/useUpdate.spec.tsx | 1088 + packages/core/src/hooks/data/useUpdate.ts | 610 + .../src/hooks/data/useUpdateMany.spec.tsx | 1196 + packages/core/src/hooks/data/useUpdateMany.ts | 642 + .../core/src/hooks/deepMemo/index.spec.tsx | 41 + packages/core/src/hooks/deepMemo/index.tsx | 17 + .../src/hooks/export/csvDownload.interface.ts | 27 + packages/core/src/hooks/export/index.spec.ts | 248 + packages/core/src/hooks/export/index.ts | 193 + packages/core/src/hooks/form/index.ts | 1 + packages/core/src/hooks/form/useForm.spec.tsx | 1148 + packages/core/src/hooks/form/useForm.ts | 639 + packages/core/src/hooks/import/index.spec.tsx | 544 + packages/core/src/hooks/import/index.tsx | 336 + packages/core/src/hooks/index.ts | 26 + .../core/src/hooks/invalidate/index.spec.tsx | 195 + packages/core/src/hooks/invalidate/index.tsx | 95 + .../core/src/hooks/legacy-router/index.ts | 1 + .../hooks/legacy-router/useRouterContext.ts | 18 + packages/core/src/hooks/live/index.ts | 4 + .../src/hooks/live/useLiveMode/index.spec.ts | 41 + .../core/src/hooks/live/useLiveMode/index.ts | 12 + .../src/hooks/live/usePublish/index.spec.ts | 33 + .../core/src/hooks/live/usePublish/index.ts | 10 + .../useResourceSubscription/index.spec.ts | 274 + .../live/useResourceSubscription/index.ts | 131 + .../hooks/live/useSubscription/index.spec.ts | 164 + .../src/hooks/live/useSubscription/index.ts | 100 + .../core/src/hooks/memoized/index.spec.tsx | 134 + packages/core/src/hooks/memoized/index.tsx | 16 + packages/core/src/hooks/menu/index.ts | 1 + packages/core/src/hooks/menu/useMenu.spec.tsx | 520 + packages/core/src/hooks/menu/useMenu.tsx | 154 + packages/core/src/hooks/modal/index.ts | 1 + .../src/hooks/modal/useModal/index.spec.ts | 70 + .../core/src/hooks/modal/useModal/index.tsx | 29 + .../core/src/hooks/navigation/index.spec.tsx | 405 + packages/core/src/hooks/navigation/index.ts | 420 + packages/core/src/hooks/notification/index.ts | 3 + .../useCancelNotification/index.spec.tsx | 89 + .../useCancelNotification/index.tsx | 16 + .../useHandleNotification/index.spec.tsx | 78 + .../useHandleNotification/index.ts | 26 + .../notification/useNotification/index.ts | 10 + .../core/src/hooks/redirection/index.spec.tsx | 170 + packages/core/src/hooks/redirection/index.ts | 56 + packages/core/src/hooks/refine/index.ts | 5 + .../core/src/hooks/refine/useMutationMode.ts | 22 + .../core/src/hooks/refine/useRefineContext.ts | 41 + .../src/hooks/refine/useSyncWithLocation.ts | 20 + .../src/hooks/refine/useTitle.index.spec.tsx | 27 + packages/core/src/hooks/refine/useTitle.tsx | 15 + .../refine/useWarnAboutChange/index.spec.tsx | 48 + .../hooks/refine/useWarnAboutChange/index.ts | 32 + packages/core/src/hooks/resource/index.ts | 2 + .../hooks/resource/useResource/index.spec.tsx | 465 + .../src/hooks/resource/useResource/index.ts | 198 + .../useResourceWithRoute/index.spec.tsx | 39 + .../resource/useResourceWithRoute/index.ts | 27 + packages/core/src/hooks/router/index.ts | 7 + .../src/hooks/router/use-back/index.spec.tsx | 56 + .../core/src/hooks/router/use-back/index.tsx | 15 + .../router/use-get-to-path/index.spec.ts | 45 + .../src/hooks/router/use-get-to-path/index.ts | 65 + .../src/hooks/router/use-go/index.spec.tsx | 468 + .../core/src/hooks/router/use-go/index.tsx | 101 + .../src/hooks/router/use-link/index.spec.tsx | 62 + .../core/src/hooks/router/use-link/index.tsx | 17 + .../src/hooks/router/use-parse/index.spec.tsx | 56 + .../core/src/hooks/router/use-parse/index.tsx | 25 + .../src/hooks/router/use-parsed/index.spec.ts | 41 + .../src/hooks/router/use-parsed/index.tsx | 12 + .../use-router-misuse-warning/index.spec.ts | 32 + .../router/use-router-misuse-warning/index.ts | 18 + .../hooks/router/use-to-path/index.spec.ts | 25 + .../src/hooks/router/use-to-path/index.ts | 27 + packages/core/src/hooks/show/index.ts | 1 + packages/core/src/hooks/show/useShow.spec.tsx | 410 + packages/core/src/hooks/show/useShow.ts | 175 + packages/core/src/hooks/translate/index.ts | 3 + .../src/hooks/translate/useGetLocale.spec.tsx | 26 + .../core/src/hooks/translate/useGetLocale.ts | 16 + .../src/hooks/translate/useSetLocale.spec.tsx | 31 + .../core/src/hooks/translate/useSetLocale.ts | 14 + .../src/hooks/translate/useTranslate.spec.tsx | 50 + .../core/src/hooks/translate/useTranslate.ts | 40 + packages/core/src/hooks/useKeys/index.tsx | 13 + .../hooks/useLoadingOvertime/index.spec.tsx | 149 + .../src/hooks/useLoadingOvertime/index.ts | 114 + .../core/src/hooks/useMeta/index.spec.tsx | 219 + packages/core/src/hooks/useMeta/index.ts | 35 + .../core/src/hooks/useSelect/index.spec.ts | 1038 + packages/core/src/hooks/useSelect/index.ts | 333 + .../core/src/hooks/useTable/index.spec.ts | 1592 + packages/core/src/hooks/useTable/index.ts | 600 + .../src/hooks/useTelemetryData/index.spec.ts | 334 + .../core/src/hooks/useTelemetryData/index.ts | 76 + packages/core/src/index.tsx | 144 + packages/core/src/interfaces/actions.ts | 16 + .../core/src/interfaces/auditLog/index.ts | 1 + .../core/src/interfaces/auditLog/logData.ts | 15 + packages/core/src/interfaces/auth.tsx | 228 + packages/core/src/interfaces/autoSave.ts | 54 + .../src/interfaces/bindings/access-control.ts | 53 + packages/core/src/interfaces/bindings/auth.ts | 76 + packages/core/src/interfaces/bindings/data.ts | 18 + packages/core/src/interfaces/bindings/i18n.ts | 29 + .../core/src/interfaces/bindings/index.ts | 25 + packages/core/src/interfaces/bindings/live.ts | 56 + .../src/interfaces/bindings/notifications.ts | 25 + .../core/src/interfaces/bindings/resource.ts | 178 + .../core/src/interfaces/bindings/router.ts | 78 + .../core/src/interfaces/customComponents.ts | 28 + .../core/src/interfaces/errors/HttpError.ts | 13 + .../core/src/interfaces/errors/RefineError.ts | 3 + packages/core/src/interfaces/errors/index.ts | 2 + .../core/src/interfaces/form-url-params.ts | 8 + packages/core/src/interfaces/index.ts | 98 + .../core/src/interfaces/live/LiveEvent.ts | 14 + .../core/src/interfaces/live/LiveModeProps.ts | 28 + packages/core/src/interfaces/live/index.ts | 2 + packages/core/src/interfaces/mapDataFn.ts | 3 + .../core/src/interfaces/metaData/fields.ts | 3 + .../metaData/graphqlQueryOptions.ts | 53 + .../core/src/interfaces/metaData/index.ts | 2 + .../src/interfaces/metaData/metaDataQuery.ts | 10 + .../core/src/interfaces/metaData/metaQuery.ts | 9 + .../src/interfaces/metaData/nestedField.ts | 8 + .../metaData/queryBuilderOptions.ts | 8 + .../interfaces/metaData/variableOptions.ts | 9 + packages/core/src/interfaces/mutationMode.ts | 32 + packages/core/src/interfaces/notification.ts | 10 + .../src/interfaces/optimistic-update-map.ts | 49 + packages/core/src/interfaces/prettify.ts | 3 + packages/core/src/interfaces/queryKey.ts | 23 + .../interfaces/resourceErrorRouterParams.ts | 6 + .../src/interfaces/resourceRouterParams.ts | 7 + .../interfaces/successErrorNotification.ts | 33 + packages/core/src/interfaces/telemetry.ts | 15 + .../core/src/interfaces/textTransformers.ts | 20 + packages/core/test/dataMocks.ts | 174 + packages/core/test/index.tsx | 239 + packages/core/test/jest.setup.ts | 19 + packages/core/test/mutation-helpers.ts | 94 + packages/core/test/svgTransform.ts | 8 + packages/core/tsconfig.declarations.json | 37 + packages/core/tsconfig.json | 28 + packages/core/tsconfig.test.json | 16 + packages/core/tsup.config.ts | 22 + packages/create-refine-app/.npmignore | 11 + packages/create-refine-app/CHANGELOG.md | 410 + packages/create-refine-app/README.md | 31 + packages/create-refine-app/jest.config.js | 13 + packages/create-refine-app/package.json | 50 + .../src/example/constants.ts | 3 + .../src/example/download-and-extract.ts | 76 + .../src/example/exists-in-repo.ts | 24 + .../create-refine-app/src/example/git-init.ts | 68 + .../create-refine-app/src/example/index.ts | 211 + .../src/example/install-dependencies.ts | 23 + .../create-refine-app/src/example/make-dir.ts | 16 + .../create-refine-app/src/greeting/index.ts | 20 + packages/create-refine-app/src/index.ts | 105 + packages/create-refine-app/test/jest.setup.ts | 0 .../tsconfig.declarations.json | 21 + packages/create-refine-app/tsconfig.json | 21 + packages/create-refine-app/tsconfig.test.json | 16 + packages/create-refine-app/tsup.config.ts | 24 + packages/demo-sidebar/.npmignore | 11 + packages/demo-sidebar/CHANGELOG.md | 118 + packages/demo-sidebar/LICENSE | 21 + packages/demo-sidebar/jest.config.js | 23 + packages/demo-sidebar/package.json | 56 + .../src/components/DemoSidebar/index.tsx | 138 + .../src/components/DemoSidebar/styles.ts | 22 + .../src/components/DemoSidebar/types.d.ts | 13 + .../src/components/Group/index.tsx | 24 + packages/demo-sidebar/src/components/index.ts | 2 + packages/demo-sidebar/src/hooks/index.ts | 1 + .../src/hooks/useDemoSidebar/index.tsx | 32 + packages/demo-sidebar/src/index.tsx | 2 + .../src/interfaces/DemoSidebarProps.d.ts | 15 + packages/demo-sidebar/test/jest.setup.ts | 16 + .../demo-sidebar/tsconfig.declarations.json | 21 + packages/demo-sidebar/tsconfig.json | 10 + packages/demo-sidebar/tsconfig.test.json | 7 + packages/demo-sidebar/tsup.config.ts | 24 + packages/devtools-internal/.npmignore | 11 + packages/devtools-internal/CHANGELOG.md | 177 + packages/devtools-internal/LICENSE | 21 + packages/devtools-internal/README.md | 37 + packages/devtools-internal/jest.config.js | 15 + packages/devtools-internal/package.json | 56 + packages/devtools-internal/src/clean-stack.ts | 15 + packages/devtools-internal/src/constants.ts | 4 + .../src/create-identifier.ts | 17 + packages/devtools-internal/src/define.d.ts | 1 + .../src/get-package-name-from-filename.ts | 13 + .../src/get-resource-path.ts | 55 + packages/devtools-internal/src/get-trace.ts | 35 + packages/devtools-internal/src/get-xray.ts | 32 + packages/devtools-internal/src/index.ts | 3 + .../devtools-internal/src/is-refine-stack.ts | 9 + packages/devtools-internal/src/listeners.ts | 67 + .../src/use-query-subscription.tsx | 55 + .../tsconfig.declarations.json | 22 + packages/devtools-internal/tsconfig.json | 13 + packages/devtools-internal/tsconfig.test.json | 9 + packages/devtools-internal/tsup.config.ts | 30 + packages/devtools-server/.gitignore | 1 + packages/devtools-server/.npmignore | 11 + packages/devtools-server/CHANGELOG.md | 283 + packages/devtools-server/FEED.md | 13 + packages/devtools-server/LICENSE | 21 + packages/devtools-server/README.md | 37 + packages/devtools-server/jest.config.js | 15 + packages/devtools-server/package.json | 92 + packages/devtools-server/src/cli.ts | 4 + .../devtools-server/src/client/index.html | 31 + packages/devtools-server/src/client/index.tsx | 10 + .../devtools-server/src/client/vite.config.ts | 11 + packages/devtools-server/src/constants.ts | 12 + packages/devtools-server/src/create-db.ts | 34 + packages/devtools-server/src/define.d.ts | 1 + packages/devtools-server/src/feed/get-feed.ts | 68 + packages/devtools-server/src/index.ts | 133 + .../src/packages/get-all-packages.ts | 28 + .../src/packages/get-available-packages.ts | 513 + .../src/packages/get-changelog.ts | 3 + .../src/packages/get-documentation.ts | 3 + .../packages/get-installed-package-data.ts | 24 + .../get-installed-package-json-path.ts | 35 + .../src/packages/get-latest-package-data.ts | 20 + .../get-packages-from-package-json.ts | 16 + .../src/packages/update-package.ts | 22 + .../get-project-id-from-package-json.ts | 25 + .../set-project-id-to-package-json.ts | 15 + .../set-project-id-to-refine-component.ts | 46 + .../src/project-id/transform.ts | 92 + .../src/project-id/update-project-id.ts | 18 + .../devtools-server/src/reload-on-change.ts | 32 + packages/devtools-server/src/serve-api.ts | 169 + packages/devtools-server/src/serve-client.ts | 18 + .../src/serve-open-in-editor.ts | 16 + packages/devtools-server/src/serve-proxy.ts | 193 + packages/devtools-server/src/serve-ws.ts | 51 + packages/devtools-server/src/setup-server.ts | 44 + .../tsconfig.declarations.json | 22 + packages/devtools-server/tsconfig.json | 13 + packages/devtools-server/tsconfig.test.json | 9 + packages/devtools-server/tsup.config.ts | 31 + packages/devtools-shared/.npmignore | 11 + packages/devtools-shared/CHANGELOG.md | 86 + packages/devtools-shared/LICENSE | 21 + packages/devtools-shared/README.md | 37 + packages/devtools-shared/jest.config.js | 15 + packages/devtools-shared/package.json | 55 + packages/devtools-shared/src/context.tsx | 89 + packages/devtools-shared/src/event-types.ts | 71 + packages/devtools-shared/src/feed.ts | 12 + packages/devtools-shared/src/index.ts | 14 + packages/devtools-shared/src/package.ts | 19 + packages/devtools-shared/src/receive.ts | 22 + packages/devtools-shared/src/scopes.ts | 67 + packages/devtools-shared/src/send.ts | 25 + packages/devtools-shared/src/trace.ts | 8 + .../tsconfig.declarations.json | 22 + packages/devtools-shared/tsconfig.json | 13 + packages/devtools-shared/tsconfig.test.json | 9 + packages/devtools-shared/tsup.config.ts | 24 + packages/devtools-ui/.npmignore | 11 + packages/devtools-ui/CHANGELOG.md | 217 + packages/devtools-ui/LICENSE | 21 + packages/devtools-ui/README.md | 37 + packages/devtools-ui/jest.config.js | 16 + packages/devtools-ui/package.json | 83 + packages/devtools-ui/postcss.config.js | 6 + .../src/components/active-item-background.tsx | 27 + .../src/components/add-package-drawer.tsx | 451 + .../src/components/add-package.item.tsx | 117 + .../src/components/authenticated.tsx | 41 + .../devtools-ui/src/components/button.tsx | 30 + .../src/components/checkbox-group.tsx | 83 + .../src/components/coming-soon-text.tsx | 20 + .../src/components/feature-slide.tsx | 232 + .../devtools-ui/src/components/feed-item.tsx | 133 + packages/devtools-ui/src/components/feed.tsx | 60 + .../src/components/filter-field.tsx | 35 + .../src/components/filter-input.tsx | 55 + .../src/components/header-auth-status.tsx | 115 + .../devtools-ui/src/components/header.tsx | 151 + .../devtools-ui/src/components/highlight.tsx | 45 + .../components/icons/arrow-circle-right.tsx | 19 + .../src/components/icons/calendar.tsx | 21 + .../src/components/icons/chatbot.tsx | 31 + .../src/components/icons/check-alt.tsx | 25 + .../src/components/icons/check.tsx | 21 + .../src/components/icons/checkbox-empty.tsx | 22 + .../src/components/icons/checkbox-filled.tsx | 20 + .../src/components/icons/chevron-down.tsx | 19 + .../src/components/icons/close.tsx | 23 + .../src/components/icons/contact.tsx | 31 + .../devtools-ui/src/components/icons/copy.tsx | 23 + .../src/components/icons/filter.tsx | 19 + .../src/components/icons/github.tsx | 17 + .../src/components/icons/google.tsx | 17 + .../src/components/icons/hidden-items-bg.tsx | 17 + .../src/components/icons/horizontal-dots.tsx | 25 + .../src/components/icons/hourglass.tsx | 17 + .../components/icons/inferencer-preview.tsx | 43 + .../devtools-ui/src/components/icons/info.tsx | 21 + .../devtools-ui/src/components/icons/logo.tsx | 98 + .../src/components/icons/maximize.tsx | 18 + .../src/components/icons/monitor.tsx | 23 + .../src/components/icons/notification.tsx | 23 + .../src/components/icons/options.tsx | 31 + .../src/components/icons/overview.tsx | 37 + .../src/components/icons/package-overview.tsx | 19 + .../src/components/icons/playground.tsx | 35 + .../src/components/icons/plus-circle.tsx | 23 + .../src/components/icons/resize-handle.tsx | 27 + .../src/components/icons/resource-viewer.tsx | 35 + .../src/components/icons/search.tsx | 19 + .../src/components/icons/settings.tsx | 25 + .../src/components/icons/sidebar-active.tsx | 52 + .../components/icons/sliding-background.tsx | 56 + .../src/components/icons/snippets.tsx | 31 + .../src/components/icons/ticket.tsx | 27 + .../src/components/icons/update.tsx | 19 + .../src/components/icons/warning.tsx | 25 + .../src/components/initial-layout.tsx | 24 + packages/devtools-ui/src/components/input.tsx | 60 + .../src/components/json-viewer.tsx | 96 + .../devtools-ui/src/components/layout.tsx | 54 + .../components/location-change-handler.tsx | 18 + packages/devtools-ui/src/components/modal.tsx | 153 + .../monitor-applied-filter-group.tsx | 140 + .../src/components/monitor-details.tsx | 447 + .../src/components/monitor-filters.tsx | 339 + .../components/monitor-highlight-handler.tsx | 32 + .../src/components/monitor-table.tsx | 209 + .../devtools-ui/src/components/onboarded.tsx | 54 + .../devtools-ui/src/components/owners.tsx | 67 + .../src/components/package-item.tsx | 308 + .../devtools-ui/src/components/packages.tsx | 207 + .../src/components/project-id-fix-banner.tsx | 114 + .../src/components/project-id-fix-modal.tsx | 271 + .../src/components/raffle-handler.tsx | 112 + .../src/components/relative-time-value.tsx | 23 + .../src/components/resizable-pane.tsx | 134 + .../src/components/resource-value.tsx | 32 + .../devtools-ui/src/components/select.tsx | 242 + .../devtools-ui/src/components/sidebar.tsx | 447 + .../devtools-ui/src/components/status.tsx | 48 + .../devtools-ui/src/components/trace-list.tsx | 33 + packages/devtools-ui/src/devtools.tsx | 125 + .../src/hooks/use-local-storage.test.ts | 42 + .../src/hooks/use-local-storage.ts | 19 + packages/devtools-ui/src/index.ts | 11 + .../devtools-ui/src/interfaces/activity.ts | 7 + packages/devtools-ui/src/interfaces/api.ts | 34 + .../devtools-ui/src/pages/after-login.tsx | 66 + packages/devtools-ui/src/pages/login.tsx | 189 + packages/devtools-ui/src/pages/monitor.tsx | 323 + packages/devtools-ui/src/pages/onboarding.tsx | 189 + packages/devtools-ui/src/pages/overview.tsx | 51 + .../devtools-ui/src/reload-on-changes.tsx | 24 + packages/devtools-ui/src/style.css | 81 + packages/devtools-ui/src/utils/auth.ts | 24 + .../src/utils/clean-file-path/index.test.ts | 33 + .../src/utils/clean-file-path/index.ts | 15 + .../devtools-ui/src/utils/exclude-keys.ts | 10 + .../devtools-ui/src/utils/get-initials.ts | 5 + packages/devtools-ui/src/utils/get-owners.ts | 5 + .../src/utils/get-resource-value.ts | 19 + .../devtools-ui/src/utils/last-location.ts | 8 + .../src/utils/local-storage.test.ts | 48 + .../devtools-ui/src/utils/local-storage.ts | 22 + packages/devtools-ui/src/utils/me.ts | 64 + packages/devtools-ui/src/utils/ory.ts | 11 + packages/devtools-ui/src/utils/packages.ts | 55 + packages/devtools-ui/src/utils/project-id.ts | 62 + .../devtools-ui/src/utils/string-to-color.ts | 11 + packages/devtools-ui/tailwind.config.js | 117 + packages/devtools-ui/test/jest.setup.ts | 2 + .../devtools-ui/tsconfig.declarations.json | 22 + packages/devtools-ui/tsconfig.json | 13 + packages/devtools-ui/tsconfig.test.json | 9 + packages/devtools-ui/tsup.config.ts | 24 + packages/devtools/.npmignore | 11 + packages/devtools/CHANGELOG.md | 220 + packages/devtools/LICENSE | 21 + packages/devtools/README.md | 39 + packages/devtools/jest.config.js | 15 + packages/devtools/package.json | 62 + .../devtools/src/components/devtools-pin.tsx | 63 + .../src/components/devtools-selector.tsx | 112 + .../src/components/icons/arrow-union-icon.tsx | 33 + .../src/components/icons/devtools-icon.tsx | 35 + .../components/icons/resize-handle-icon.tsx | 27 + .../src/components/icons/selector-button.tsx | 19 + .../src/components/resizable-pane.tsx | 283 + .../devtools/src/components/selector-box.tsx | 107 + .../devtools/src/components/selector-hint.tsx | 57 + packages/devtools/src/define.d.ts | 1 + packages/devtools/src/index.ts | 2 + packages/devtools/src/interfaces/placement.ts | 1 + packages/devtools/src/panel.tsx | 116 + packages/devtools/src/provider.tsx | 11 + packages/devtools/src/utilities/index.ts | 124 + .../devtools/src/utilities/use-selector.tsx | 259 + packages/devtools/tsconfig.declarations.json | 22 + packages/devtools/tsconfig.json | 13 + packages/devtools/tsconfig.test.json | 9 + packages/devtools/tsup.config.ts | 30 + packages/graphql/.npmignore | 11 + packages/graphql/CHANGELOG.md | 455 + packages/graphql/LICENSE | 21 + packages/graphql/README.md | 72 + packages/graphql/jest.config.js | 7 + packages/graphql/package.json | 61 + packages/graphql/refine.config.js | 76 + packages/graphql/src/dataProvider/index.ts | 359 + packages/graphql/src/index.ts | 33 + packages/graphql/src/liveProvider/index.ts | 82 + packages/graphql/src/utils/generateFilter.ts | 36 + packages/graphql/src/utils/generateSort.ts | 18 + .../src/utils/generateUseListSubscription.ts | 59 + .../src/utils/generateUseManySubscription.ts | 44 + .../src/utils/generateUseOneSubscription.ts | 43 + packages/graphql/src/utils/index.ts | 5 + packages/graphql/test/create/index.mock.ts | 76 + packages/graphql/test/create/index.spec.ts | 48 + .../graphql/test/createMany/index.mock.ts | 155 + .../graphql/test/createMany/index.spec.ts | 69 + packages/graphql/test/custom/index.mock.ts | 74 + packages/graphql/test/custom/index.spec.ts | 52 + .../graphql/test/deleteMany/index.mock.ts | 121 + .../graphql/test/deleteMany/index.spec.ts | 38 + packages/graphql/test/deleteOne/index.mock.ts | 61 + packages/graphql/test/deleteOne/index.spec.ts | 33 + packages/graphql/test/getList/index.mock.ts | 166 + packages/graphql/test/getList/index.spec.ts | 79 + packages/graphql/test/getMany/index.mock.ts | 50 + packages/graphql/test/getMany/index.spec.ts | 25 + packages/graphql/test/getOne/index.mock.ts | 42 + packages/graphql/test/getOne/index.spec.ts | 20 + packages/graphql/test/gqlClient.ts | 12 + packages/graphql/test/jest.setup.ts | 6 + packages/graphql/test/update/index.mock.ts | 90 + packages/graphql/test/update/index.spec.ts | 49 + .../graphql/test/updateMany/index.mock.ts | 179 + .../graphql/test/updateMany/index.spec.ts | 57 + .../graphql/test/utils/generateFilter.spec.ts | 32 + .../graphql/test/utils/generateSort.spec.ts | 51 + .../utils/generateUseListSubscription.spec.ts | 91 + .../utils/generateUseManySubscription.spec.ts | 50 + .../utils/generateUseOneSubscription.spec.ts | 49 + packages/graphql/tsconfig.declarations.json | 21 + packages/graphql/tsconfig.json | 11 + packages/graphql/tsup.config.ts | 24 + packages/hasura/.gitignore | 4 + packages/hasura/.npmignore | 11 + packages/hasura/CHANGELOG.md | 703 + packages/hasura/LICENSE | 21 + packages/hasura/README.md | 75 + packages/hasura/jest.config.js | 7 + packages/hasura/package.json | 61 + packages/hasura/refine.config.js | 106 + packages/hasura/src/dataProvider/index.ts | 477 + packages/hasura/src/index.ts | 31 + packages/hasura/src/liveProvider/index.ts | 82 + packages/hasura/src/utils/camelizeKeys.ts | 7 + packages/hasura/src/utils/generateFilters.ts | 144 + packages/hasura/src/utils/generateSorting.ts | 25 + .../src/utils/generateUseListSubscription.ts | 80 + .../src/utils/generateUseManySubscription.ts | 50 + .../src/utils/generateUseOneSubscription.ts | 44 + packages/hasura/src/utils/index.ts | 7 + packages/hasura/src/utils/upperCaseValues.ts | 6 + packages/hasura/test/create/index.mock.ts | 101 + packages/hasura/test/create/index.spec.ts | 36 + packages/hasura/test/createMany/index.mock.ts | 229 + packages/hasura/test/createMany/index.spec.ts | 89 + packages/hasura/test/custom/index.mock.ts | 89 + packages/hasura/test/custom/index.spec.ts | 39 + packages/hasura/test/deleteMany/index.mock.ts | 213 + packages/hasura/test/deleteMany/index.spec.ts | 56 + packages/hasura/test/deleteOne/index.mock.ts | 264 + packages/hasura/test/deleteOne/index.spec.ts | 58 + packages/hasura/test/getList/index.mock.ts | 559 + packages/hasura/test/getList/index.spec.ts | 122 + packages/hasura/test/getMany/index.mock.ts | 107 + packages/hasura/test/getMany/index.spec.ts | 73 + packages/hasura/test/getOne/index.mock.ts | 353 + packages/hasura/test/getOne/index.spec.ts | 92 + packages/hasura/test/gqlClient.ts | 23 + packages/hasura/test/jest.setup.js | 11 + packages/hasura/test/update/index.mock.ts | 197 + packages/hasura/test/update/index.spec.ts | 55 + packages/hasura/test/updateMany/index.mock.ts | 223 + packages/hasura/test/updateMany/index.spec.ts | 92 + .../hasura/test/utils/camelizaKeys.spec.ts | 29 + .../hasura/test/utils/generateFilters.spec.ts | 121 + .../hasura/test/utils/generateSorting.spec.ts | 39 + .../utils/generateUseListSubscription.spec.ts | 95 + .../utils/generateUseManySubscription.spec.ts | 32 + .../utils/generateUseOneSubscription.spec.ts | 32 + .../hasura/test/utils/upperCaseValues.spec.ts | 24 + packages/hasura/tsconfig.declarations.json | 21 + packages/hasura/tsconfig.json | 11 + packages/hasura/tsup.config.ts | 14 + packages/inferencer/.npmignore | 11 + packages/inferencer/.npmrc | 1 + packages/inferencer/CHANGELOG.md | 1216 + packages/inferencer/README.md | 69 + packages/inferencer/jest.config.js | 28 + packages/inferencer/package.json | 211 + .../src/components/code-highlight/index.tsx | 76 + packages/inferencer/src/components/index.ts | 3 + .../inferencer/src/components/live/index.tsx | 114 + .../components/shared-code-viewer/index.tsx | 623 + .../src/compose-inferencers/index.test.ts | 43 + .../src/compose-inferencers/index.ts | 27 + .../src/compose-transformers/index.test.ts | 23 + .../src/compose-transformers/index.ts | 24 + .../src/create-inferencer/index.tsx | 433 + .../inferencer/src/field-inferencers/array.ts | 42 + .../src/field-inferencers/boolean.ts | 14 + .../src/field-inferencers/date.test.ts | 29 + .../inferencer/src/field-inferencers/date.ts | 28 + .../inferencer/src/field-inferencers/email.ts | 18 + .../inferencer/src/field-inferencers/image.ts | 17 + .../inferencer/src/field-inferencers/index.ts | 27 + .../src/field-inferencers/nullish.ts | 12 + .../src/field-inferencers/number.ts | 20 + .../src/field-inferencers/object.ts | 109 + .../src/field-inferencers/relation.ts | 23 + .../src/field-inferencers/richtext.ts | 15 + .../inferencer/src/field-inferencers/text.ts | 14 + .../inferencer/src/field-inferencers/url.ts | 17 + .../field-transformers/basic-to-relation.ts | 65 + .../src/field-transformers/image-by-key.ts | 18 + .../src/field-transformers/index.ts | 11 + .../relation-by-resource.ts | 27 + .../relation-to-fieldable.ts | 34 + packages/inferencer/src/index.tsx | 40 + .../__snapshots__/create.test.tsx.snap | 924 + .../__snapshots__/edit.test.tsx.snap | 1040 + .../__snapshots__/index.test.tsx.snap | 3239 + .../__snapshots__/list.test.tsx.snap | 723 + .../__snapshots__/show.test.tsx.snap | 389 + .../antd/__tests__/create.test.tsx | 107 + .../inferencers/antd/__tests__/edit.test.tsx | 107 + .../inferencers/antd/__tests__/index.test.tsx | 93 + .../inferencers/antd/__tests__/list.test.tsx | 109 + .../inferencers/antd/__tests__/show.test.tsx | 110 + .../src/inferencers/antd/code-viewer.tsx | 116 + .../src/inferencers/antd/create.tsx | 421 + .../inferencer/src/inferencers/antd/edit.tsx | 532 + .../inferencer/src/inferencers/antd/error.tsx | 31 + .../inferencer/src/inferencers/antd/index.tsx | 47 + .../inferencer/src/inferencers/antd/list.tsx | 667 + .../src/inferencers/antd/loading.tsx | 15 + .../inferencer/src/inferencers/antd/show.tsx | 661 + .../__snapshots__/create.test.tsx.snap | 10847 ++++ .../__snapshots__/edit.test.tsx.snap | 12611 ++++ .../__snapshots__/index.test.tsx.snap | 46121 +++++++++++++++ .../__snapshots__/list.test.tsx.snap | 14445 +++++ .../__snapshots__/show.test.tsx.snap | 7793 +++ .../chakra-ui/__tests__/create.test.tsx | 107 + .../chakra-ui/__tests__/edit.test.tsx | 107 + .../chakra-ui/__tests__/index.test.tsx | 102 + .../chakra-ui/__tests__/list.test.tsx | 109 + .../chakra-ui/__tests__/show.test.tsx | 110 + .../src/inferencers/chakra-ui/code-viewer.tsx | 143 + .../src/inferencers/chakra-ui/create.tsx | 370 + .../src/inferencers/chakra-ui/edit.tsx | 466 + .../src/inferencers/chakra-ui/error.tsx | 38 + .../src/inferencers/chakra-ui/index.tsx | 47 + .../src/inferencers/chakra-ui/list.tsx | 1022 + .../src/inferencers/chakra-ui/loading.tsx | 19 + .../src/inferencers/chakra-ui/show.tsx | 700 + .../__snapshots__/create.test.tsx.snap | 11924 ++++ .../__snapshots__/edit.test.tsx.snap | 13516 +++++ .../__snapshots__/index.test.tsx.snap | 49249 ++++++++++++++++ .../__snapshots__/list.test.tsx.snap | 14481 +++++ .../__snapshots__/show.test.tsx.snap | 8860 +++ .../headless/__tests__/create.test.tsx | 107 + .../headless/__tests__/edit.test.tsx | 107 + .../headless/__tests__/index.test.tsx | 99 + .../headless/__tests__/list.test.tsx | 109 + .../headless/__tests__/show.test.tsx | 110 + .../src/inferencers/headless/code-viewer.tsx | 285 + .../src/inferencers/headless/create.tsx | 380 + .../src/inferencers/headless/edit.tsx | 466 + .../src/inferencers/headless/error.tsx | 40 + .../src/inferencers/headless/index.tsx | 47 + .../src/inferencers/headless/list.tsx | 942 + .../src/inferencers/headless/loading.tsx | 57 + .../src/inferencers/headless/show.tsx | 768 + packages/inferencer/src/inferencers/index.ts | 4 + .../__snapshots__/create.test.tsx.snap | 5484 ++ .../__snapshots__/edit.test.tsx.snap | 6021 ++ .../__snapshots__/index.test.tsx.snap | 31183 ++++++++++ .../__snapshots__/list.test.tsx.snap | 11840 ++++ .../__snapshots__/show.test.tsx.snap | 7450 +++ .../mantine/__tests__/create.test.tsx | 107 + .../mantine/__tests__/edit.test.tsx | 107 + .../mantine/__tests__/index.test.tsx | 99 + .../mantine/__tests__/list.test.tsx | 109 + .../mantine/__tests__/show.test.tsx | 110 + .../src/inferencers/mantine/code-viewer.tsx | 139 + .../src/inferencers/mantine/create.tsx | 395 + .../src/inferencers/mantine/edit.tsx | 513 + .../src/inferencers/mantine/error.tsx | 22 + .../src/inferencers/mantine/index.tsx | 47 + .../src/inferencers/mantine/list.tsx | 931 + .../src/inferencers/mantine/loading.tsx | 10 + .../src/inferencers/mantine/show.tsx | 720 + .../mui/__snapshots__/index.test.tsx.snap | 48837 +++++++++++++++ .../__snapshots__/create.test.tsx.snap | 14866 +++++ .../__snapshots__/edit.test.tsx.snap | 15877 +++++ .../__snapshots__/list.test.tsx.snap | 9878 ++++ .../__snapshots__/show.test.tsx.snap | 7686 +++ .../inferencers/mui/__tests__/create.test.tsx | 107 + .../inferencers/mui/__tests__/edit.test.tsx | 107 + .../inferencers/mui/__tests__/list.test.tsx | 109 + .../inferencers/mui/__tests__/show.test.tsx | 110 + .../src/inferencers/mui/code-viewer.tsx | 157 + .../inferencer/src/inferencers/mui/create.tsx | 420 + .../inferencer/src/inferencers/mui/edit.tsx | 522 + .../inferencer/src/inferencers/mui/error.tsx | 31 + .../src/inferencers/mui/index.test.tsx | 93 + .../inferencer/src/inferencers/mui/index.tsx | 47 + .../inferencer/src/inferencers/mui/list.tsx | 909 + .../src/inferencers/mui/loading.tsx | 22 + .../inferencer/src/inferencers/mui/show.tsx | 743 + packages/inferencer/src/types/index.ts | 183 + .../inferencer/src/use-infer-fetch/index.tsx | 133 + .../src/use-relation-fetch/index.ts | 361 + .../src/utilities/accessor/index.test.ts | 41 + .../src/utilities/accessor/index.ts | 89 + .../utilities/component-name/index.test.ts | 34 + .../src/utilities/component-name/index.ts | 31 + .../get-fieldable-keys/index.test.ts | 45 + .../src/utilities/get-fieldable-keys/index.ts | 49 + .../src/utilities/get-meta-props/index.ts | 40 + .../utilities/get-option-label/index.test.ts | 59 + .../src/utilities/get-option-label/index.ts | 14 + .../utilities/get-variable-name/index.test.ts | 47 + .../src/utilities/get-variable-name/index.ts | 40 + .../utilities/id-quote-wrapper/index.test.ts | 22 + .../src/utilities/id-quote-wrapper/index.ts | 11 + packages/inferencer/src/utilities/index.ts | 48 + .../src/utilities/is-id-key/index.test.ts | 11 + .../src/utilities/is-id-key/index.ts | 3 + .../inferencer/src/utilities/jsx/index.ts | 48 + .../inferencer/src/utilities/no-op/index.ts | 2 + .../utilities/pick-data-provider/index.tsx | 32 + .../pick-inferred-field/index.test.ts | 29 + .../utilities/pick-inferred-field/index.ts | 22 + .../utilities/prepare-live-code/index.test.ts | 12 + .../src/utilities/prepare-live-code/index.ts | 12 + .../src/utilities/prettier-format/index.ts | 25 + .../src/utilities/pretty-spaces/index.ts | 6 + .../src/utilities/pretty-string/index.test.ts | 19 + .../src/utilities/pretty-string/index.ts | 21 + .../src/utilities/print-imports/index.test.ts | 42 + .../src/utilities/print-imports/index.ts | 33 + .../remove-hidden-code/index.test.ts | 29 + .../src/utilities/remove-hidden-code/index.ts | 9 + .../remove-relation-suffix/index.test.ts | 19 + .../utilities/remove-relation-suffix/index.ts | 9 + .../utilities/replace-exports/index.test.ts | 15 + .../src/utilities/replace-exports/index.ts | 19 + .../utilities/replace-imports/index.test.ts | 26 + .../src/utilities/replace-imports/index.ts | 66 + .../resource-from-inferred/index.test.ts | 27 + .../utilities/resource-from-inferred/index.ts | 36 + .../src/utilities/to-plural/index.test.ts | 15 + .../src/utilities/to-plural/index.ts | 5 + .../src/utilities/to-singular/index.test.ts | 15 + .../src/utilities/to-singular/index.ts | 5 + .../translate-action-title/index.test.ts | 67 + .../utilities/translate-action-title/index.ts | 29 + .../translate-button-title/index.test.ts | 40 + .../utilities/translate-button-title/index.ts | 18 + .../translate-pretty-string/index.test.ts | 57 + .../translate-pretty-string/index.ts | 29 + packages/inferencer/test/dataMocks.ts | 206 + packages/inferencer/test/index.tsx | 101 + packages/inferencer/test/jest.setup.ts | 42 + packages/inferencer/test/svgTransform.ts | 8 + .../inferencer/tsconfig.declarations.json | 27 + packages/inferencer/tsconfig.json | 16 + packages/inferencer/tsconfig.test.json | 16 + packages/inferencer/tsup.config.ts | 33 + packages/kbar/.npmignore | 11 + packages/kbar/CHANGELOG.md | 352 + packages/kbar/LICENSE | 21 + packages/kbar/README.md | 69 + packages/kbar/jest.config.js | 29 + packages/kbar/package.json | 58 + .../kbar/src/components/commandBar/index.tsx | 46 + packages/kbar/src/components/index.ts | 4 + .../kbar/src/components/refineKbar/index.tsx | 15 + .../src/components/renderResults/index.tsx | 32 + .../kbar/src/components/resultItem/index.tsx | 113 + .../kbar/src/definitions/capitalize/index.ts | 6 + packages/kbar/src/definitions/index.ts | 1 + packages/kbar/src/hooks/index.tsx | 1 + .../src/hooks/useRefineKbar/index.spec.tsx | 818 + .../kbar/src/hooks/useRefineKbar/index.tsx | 361 + packages/kbar/src/index.tsx | 62 + packages/kbar/test/dataMocks.ts | 84 + packages/kbar/test/index.tsx | 102 + packages/kbar/test/jest.setup.ts | 21 + packages/kbar/tsconfig.declarations.json | 29 + packages/kbar/tsconfig.json | 19 + packages/kbar/tsconfig.test.json | 7 + packages/kbar/tsup.config.ts | 27 + packages/live-previews/.gitignore | 36 + packages/live-previews/.prettierrc | 9 + packages/live-previews/CHANGELOG.md | 138 + packages/live-previews/Dockerfile | 18 + packages/live-previews/README.md | 3 + packages/live-previews/jest.config.js | 22 + .../k8s/live-previews/.helmignore | 23 + .../k8s/live-previews/Chart.yaml | 24 + .../k8s/live-previews/templates/NOTES.txt | 22 + .../k8s/live-previews/templates/_helpers.tpl | 62 + .../live-previews/templates/deployment.yaml | 61 + .../k8s/live-previews/templates/hpa.yaml | 28 + .../k8s/live-previews/templates/ingress.yaml | 61 + .../k8s/live-previews/templates/service.yaml | 15 + .../templates/serviceaccount.yaml | 12 + .../templates/tests/test-connection.yaml | 15 + .../k8s/live-previews/values.yaml | 68 + packages/live-previews/next.config.js | 18 + packages/live-previews/package.json | 80 + packages/live-previews/pages/404.tsx | 18 + packages/live-previews/pages/_app.tsx | 8 + packages/live-previews/pages/_error.tsx | 39 + packages/live-previews/pages/index.tsx | 18 + packages/live-previews/pages/preview.tsx | 239 + .../public/assets/icons/anchor.svg | 1 + .../public/assets/icons/atom.svg | 1 + .../auction-mallet-judge-hammer-gavel.svg | 1 + .../public/assets/icons/award-cup.svg | 1 + .../public/assets/icons/award-medal.svg | 1 + .../public/assets/icons/badge.svg | 1 + .../live-previews/public/assets/icons/bag.svg | 1 + .../public/assets/icons/bank.svg | 1 + .../public/assets/icons/bar-chart.svg | 1 + .../public/assets/icons/bell.svg | 1 + .../public/assets/icons/binoculars.svg | 1 + .../public/assets/icons/birthday-cake.svg | 1 + .../public/assets/icons/bonfire-camp.svg | 1 + .../live-previews/public/assets/icons/box.svg | 1 + .../public/assets/icons/briefcase.svg | 1 + .../public/assets/icons/bucket.svg | 1 + .../public/assets/icons/building.svg | 1 + .../public/assets/icons/button.svg | 1 + .../public/assets/icons/cake.svg | 1 + .../public/assets/icons/calendar.svg | 1 + .../public/assets/icons/call-bell.svg | 1 + .../public/assets/icons/camera.svg | 1 + .../public/assets/icons/chicken.svg | 1 + .../public/assets/icons/crescent-moon.svg | 1 + .../public/assets/icons/cube.svg | 1 + .../public/assets/icons/diamond.svg | 1 + .../public/assets/icons/direction-sign.svg | 1 + .../public/assets/icons/drink-beer.svg | 1 + .../public/assets/icons/drink-cocktail.svg | 1 + .../public/assets/icons/drink-wine.svg | 1 + .../public/assets/icons/drrink-coffee-cup.svg | 1 + .../public/assets/icons/feather.svg | 1 + .../public/assets/icons/fingerprint.svg | 1 + .../public/assets/icons/fire-flame.svg | 1 + .../public/assets/icons/fish.svg | 1 + .../public/assets/icons/flag.svg | 1 + .../public/assets/icons/gamepad.svg | 1 + .../assets/icons/gaming-cards-clubs.svg | 1 + .../assets/icons/gaming-cards-diamonds.svg | 1 + .../assets/icons/gaming-cards-hearts.svg | 1 + .../assets/icons/gaming-cards-spades.svg | 1 + .../assets/icons/gaming-chess-bishop.svg | 1 + .../assets/icons/gaming-chess-king-crown.svg | 1 + .../icons/gaming-chess-knight-horse.svg | 1 + .../public/assets/icons/gaming-chess-pawn.svg | 1 + .../assets/icons/gaming-chess-queen.svg | 1 + .../assets/icons/gaming-chess-rook-castle.svg | 1 + .../public/assets/icons/gaming-dice.svg | 1 + .../public/assets/icons/gaming-ghost.svg | 1 + .../assets/icons/gaming-monster-invader.svg | 1 + .../public/assets/icons/gaming-skull.svg | 1 + .../assets/icons/gaming-sports-8-ball.svg | 1 + .../assets/icons/gaming-sports-base-ball.svg | 1 + .../icons/gaming-sports-basket-ball.svg | 1 + .../assets/icons/gaming-sports-foot-ball.svg | 1 + .../icons/gaming-sports-soccer-ball.svg | 1 + .../icons/gaming-sports-table-tennis.svg | 1 + .../icons/gaming-sports-tennis-ball.svg | 1 + .../public/assets/icons/gauge-dashboard.svg | 1 + .../public/assets/icons/gift.svg | 1 + .../public/assets/icons/globe.svg | 1 + .../public/assets/icons/hamburger.svg | 1 + .../public/assets/icons/hand.svg | 1 + .../live-previews/public/assets/icons/hat.svg | 1 + .../public/assets/icons/helm-wheel.svg | 1 + .../public/assets/icons/hexagon.svg | 1 + .../public/assets/icons/home.svg | 1 + .../public/assets/icons/hourglass.svg | 1 + .../public/assets/icons/ice-cream.svg | 1 + .../live-previews/public/assets/icons/key.svg | 1 + .../public/assets/icons/label.svg | 1 + .../public/assets/icons/lego-head.svg | 1 + .../public/assets/icons/lego.svg | 1 + .../public/assets/icons/lightbulb.svg | 1 + .../public/assets/icons/lightning.svg | 1 + .../public/assets/icons/magnet.svg | 1 + .../public/assets/icons/mailbox.svg | 1 + .../public/assets/icons/marker.svg | 1 + .../public/assets/icons/meat.svg | 1 + .../public/assets/icons/megaphone.svg | 1 + .../public/assets/icons/message.svg | 1 + .../public/assets/icons/microphone.svg | 1 + .../public/assets/icons/note.svg | 1 + .../public/assets/icons/overview.svg | 1 + .../assets/icons/paint-brush-alternative.svg | 1 + .../public/assets/icons/paint-brush.svg | 1 + .../public/assets/icons/paint-roller.svg | 1 + .../public/assets/icons/paint-spray.svg | 1 + .../public/assets/icons/palette.svg | 1 + .../public/assets/icons/paper-plane.svg | 1 + .../public/assets/icons/pen-alternative.svg | 1 + .../live-previews/public/assets/icons/pen.svg | 1 + .../public/assets/icons/pencil.svg | 1 + .../public/assets/icons/pentagon.svg | 1 + .../public/assets/icons/pie-chart.svg | 1 + .../public/assets/icons/piggy-bank.svg | 1 + .../public/assets/icons/pin-location.svg | 1 + .../public/assets/icons/pin-staple.svg | 1 + .../public/assets/icons/pizza.svg | 1 + .../public/assets/icons/puzzle.svg | 1 + .../public/assets/icons/refine.svg | 1 + .../public/assets/icons/robot.svg | 1 + .../public/assets/icons/rocket.svg | 1 + .../public/assets/icons/sailing-boat.svg | 1 + .../public/assets/icons/scissors.svg | 1 + .../public/assets/icons/server.svg | 1 + .../public/assets/icons/shield.svg | 1 + .../public/assets/icons/shopping-cart.svg | 1 + .../public/assets/icons/snowflake.svg | 1 + .../public/assets/icons/spoon-fork.svg | 1 + .../public/assets/icons/stamp.svg | 1 + .../public/assets/icons/star.svg | 1 + .../public/assets/icons/steering-wheel.svg | 1 + .../public/assets/icons/storage-drive.svg | 1 + .../public/assets/icons/store.svg | 1 + .../public/assets/icons/sun-glasses.svg | 1 + .../live-previews/public/assets/icons/sun.svg | 1 + .../public/assets/icons/ticket.svg | 1 + .../public/assets/icons/time-clock.svg | 1 + .../assets/icons/transport-airplane.svg | 1 + .../public/assets/icons/transport-bus.svg | 1 + .../assets/icons/transport-car-automobile.svg | 1 + .../assets/icons/transport-helicopter.svg | 1 + .../assets/icons/transport-motorcycle.svg | 1 + .../icons/transport-train-metro-subway.svg | 1 + .../icons/transport-walking-pedestrian.svg | 1 + .../public/assets/icons/tyre.svg | 1 + .../public/assets/icons/umbrella.svg | 1 + .../assets/icons/user-person-standing.svg | 1 + .../public/assets/icons/user-person.svg | 1 + .../public/assets/icons/users-persons.svg | 1 + .../public/assets/icons/video.svg | 1 + .../public/assets/icons/wand-alternative.svg | 1 + .../public/assets/icons/water-drop.svg | 1 + .../public/assets/icons/wind.svg | 1 + .../public/assets/icons/world.svg | 1 + .../public/assets/icons/ying-yang.svg | 1 + packages/live-previews/public/favicon.ico | Bin 0 -> 25931 bytes .../live-previews/public/images/flags/de.svg | 1 + .../live-previews/public/images/flags/en.svg | 1 + packages/live-previews/public/loader.gif | Bin 0 -> 126955 bytes .../public/locales/de/common.json | 183 + .../public/locales/en/common.json | 183 + .../src/components/live-error.tsx | 26 + .../live-previews/src/components/loading.tsx | 18 + packages/live-previews/src/scope/airtable.tsx | 7 + .../src/scope/antd-inferencer.tsx | 7 + packages/live-previews/src/scope/antd.tsx | 196 + packages/live-previews/src/scope/appwrite.tsx | 7 + packages/live-previews/src/scope/auth0.tsx | 84 + packages/live-previews/src/scope/axios.tsx | 7 + packages/live-previews/src/scope/casbin.tsx | 7 + .../src/scope/chakra-inferencer.tsx | 7 + packages/live-previews/src/scope/chakra.tsx | 189 + packages/live-previews/src/scope/common.tsx | 159 + packages/live-previews/src/scope/devtools.tsx | 10 + packages/live-previews/src/scope/google.tsx | 78 + packages/live-previews/src/scope/hasura.tsx | 7 + .../src/scope/headless-inferencer.tsx | 7 + packages/live-previews/src/scope/i18n.tsx | 13 + packages/live-previews/src/scope/kbar.tsx | 7 + packages/live-previews/src/scope/keycloak.tsx | 80 + .../src/scope/mantine-inferencer.tsx | 7 + packages/live-previews/src/scope/mantine.tsx | 194 + packages/live-previews/src/scope/map.tsx | 63 + .../src/scope/mui-inferencer.tsx | 7 + packages/live-previews/src/scope/mui.tsx | 247 + packages/live-previews/src/scope/nestjsx.tsx | 7 + .../live-previews/src/scope/react-dom.tsx | 17 + .../src/scope/strapi-graphql.tsx | 7 + .../live-previews/src/scope/strapi-v4.tsx | 7 + packages/live-previews/src/scope/supabase.tsx | 7 + .../live-previews/src/scope/tabler-icons.tsx | 51 + .../live-previews/src/scope/web-vitals.tsx | 13 + packages/live-previews/src/styles/global.css | 159 + .../live-previews/src/utils/check-package.ts | 169 + .../src/utils/development-cookie.ts | 12 + .../src/utils/pretty-spaces.test.ts | 28 + .../live-previews/src/utils/pretty-spaces.ts | 3 + .../src/utils/replace-imports.test.ts | 52 + .../src/utils/replace-imports.ts | 90 + packages/live-previews/src/utils/use-code.ts | 68 + packages/live-previews/tsconfig.json | 25 + packages/live-previews/tsconfig.test.json | 7 + packages/mantine/.npmignore | 11 + packages/mantine/.npmrc | 1 + packages/mantine/CHANGELOG.md | 2026 + packages/mantine/README.md | 72 + packages/mantine/jest.config.js | 27 + packages/mantine/package.json | 80 + packages/mantine/refine.config.js | 669 + .../autoSaveIndicator/index.spec.tsx | 7 + .../components/autoSaveIndicator/index.tsx | 82 + .../src/components/breadcrumb/index.spec.tsx | 73 + .../src/components/breadcrumb/index.tsx | 85 + .../components/buttons/clone/index.spec.tsx | 7 + .../src/components/buttons/clone/index.tsx | 142 + .../components/buttons/create/index.spec.tsx | 7 + .../src/components/buttons/create/index.tsx | 133 + .../components/buttons/delete/index.spec.tsx | 6 + .../src/components/buttons/delete/index.tsx | 197 + .../components/buttons/edit/index.spec.tsx | 6 + .../src/components/buttons/edit/index.tsx | 141 + .../components/buttons/export/index.spec.tsx | 6 + .../src/components/buttons/export/index.tsx | 56 + .../components/buttons/import/index.spec.tsx | 7 + .../src/components/buttons/import/index.tsx | 65 + .../mantine/src/components/buttons/index.tsx | 11 + .../components/buttons/list/index.spec.tsx | 6 + .../src/components/buttons/list/index.tsx | 158 + .../components/buttons/refresh/index.spec.tsx | 6 + .../src/components/buttons/refresh/index.tsx | 99 + .../components/buttons/save/index.spec.tsx | 6 + .../src/components/buttons/save/index.tsx | 53 + .../components/buttons/show/index.spec.tsx | 6 + .../src/components/buttons/show/index.tsx | 140 + .../mantine/src/components/buttons/types.ts | 86 + .../src/components/crud/create/index.spec.tsx | 82 + .../src/components/crud/create/index.tsx | 151 + .../src/components/crud/edit/index.spec.tsx | 586 + .../src/components/crud/edit/index.tsx | 243 + packages/mantine/src/components/crud/index.ts | 5 + .../src/components/crud/list/index.spec.tsx | 57 + .../src/components/crud/list/index.tsx | 111 + .../src/components/crud/show/index.spec.tsx | 516 + .../src/components/crud/show/index.tsx | 227 + packages/mantine/src/components/crud/types.ts | 58 + .../components/fields/boolean/index.spec.tsx | 49 + .../src/components/fields/boolean/index.tsx | 30 + .../src/components/fields/date/index.spec.tsx | 7 + .../src/components/fields/date/index.tsx | 33 + .../components/fields/email/index.spec.tsx | 7 + .../src/components/fields/email/index.tsx | 18 + .../src/components/fields/file/index.spec.tsx | 7 + .../src/components/fields/file/index.tsx | 17 + .../mantine/src/components/fields/index.ts | 10 + .../components/fields/markdown/index.spec.tsx | 7 + .../src/components/fields/markdown/index.tsx | 25 + .../components/fields/number/index.spec.tsx | 7 + .../src/components/fields/number/index.tsx | 33 + .../src/components/fields/tag/index.spec.tsx | 7 + .../src/components/fields/tag/index.tsx | 17 + .../src/components/fields/text/index.spec.tsx | 7 + .../src/components/fields/text/index.tsx | 13 + .../mantine/src/components/fields/types.ts | 50 + .../src/components/fields/url/index.spec.tsx | 7 + .../src/components/fields/url/index.tsx | 24 + packages/mantine/src/components/index.ts | 32 + .../components/layout/header/index.spec.tsx | 7 + .../src/components/layout/header/index.tsx | 23 + .../src/components/layout/index.spec.tsx | 6 + .../mantine/src/components/layout/index.tsx | 53 + .../src/components/layout/sider/index.tsx | 337 + .../src/components/layout/title/index.spec.ts | 6 + .../src/components/layout/title/index.tsx | 36 + .../mantine/src/components/layout/types.ts | 11 + .../components/forgotPassword/index.spec.tsx | 70 + .../auth/components/forgotPassword/index.tsx | 176 + .../components/pages/auth/components/index.ts | 4 + .../auth/components/login/index.spec.tsx | 49 + .../pages/auth/components/login/index.tsx | 262 + .../auth/components/register/index.spec.tsx | 46 + .../pages/auth/components/register/index.tsx | 234 + .../pages/auth/components/styles.ts | 32 + .../components/updatePassword/index.spec.tsx | 46 + .../auth/components/updatePassword/index.tsx | 152 + .../src/components/pages/auth/index.spec.tsx | 6 + .../src/components/pages/auth/index.tsx | 41 + .../src/components/pages/error/index.spec.tsx | 93 + .../src/components/pages/error/index.tsx | 112 + .../mantine/src/components/pages/index.ts | 4 + .../src/components/pages/ready/index.spec.tsx | 37 + .../src/components/pages/ready/index.tsx | 73 + .../components/pages/welcome/index.spec.tsx | 34 + .../src/components/pages/welcome/index.tsx | 10 + .../components/ring-countdown/index.spec.tsx | 14 + .../src/components/ring-countdown/index.tsx | 24 + .../themedLayout/header/index.spec.tsx | 59 + .../components/themedLayout/header/index.tsx | 58 + .../components/themedLayout/index.spec.tsx | 6 + .../src/components/themedLayout/index.tsx | 47 + .../components/themedLayout/sider/index.tsx | 359 + .../themedLayout/title/index.spec.ts | 6 + .../components/themedLayout/title/index.tsx | 76 + .../src/components/themedLayout/types.ts | 13 + .../themedLayoutV2/hamburgerMenu/index.tsx | 53 + .../themedLayoutV2/header/index.spec.tsx | 150 + .../themedLayoutV2/header/index.tsx | 80 + .../components/themedLayoutV2/index.spec.tsx | 6 + .../src/components/themedLayoutV2/index.tsx | 49 + .../themedLayoutV2/sider/index.spec.tsx | 7 + .../components/themedLayoutV2/sider/index.tsx | 333 + .../themedLayoutV2/title/index.spec.ts | 6 + .../components/themedLayoutV2/title/index.tsx | 73 + .../src/components/themedLayoutV2/types.ts | 13 + packages/mantine/src/contexts/form-context.ts | 5 + packages/mantine/src/contexts/index.ts | 5 + .../IThemedLayoutContext.ts | 6 + .../contexts/themedLayoutContext/index.tsx | 33 + .../mantine/src/definitions/button/index.ts | 12 + packages/mantine/src/definitions/index.ts | 1 + packages/mantine/src/hooks/form/index.ts | 3 + .../src/hooks/form/useForm/index.spec.tsx | 264 + .../mantine/src/hooks/form/useForm/index.ts | 265 + .../hooks/form/useModalForm/index.spec.tsx | 47 + .../src/hooks/form/useModalForm/index.ts | 330 + .../src/hooks/form/useStepsForm/index.ts | 141 + packages/mantine/src/hooks/index.ts | 4 + packages/mantine/src/hooks/useSelect/index.ts | 64 + .../src/hooks/useSiderVisible/index.ts | 29 + .../src/hooks/useThemedLayoutContext/index.ts | 22 + packages/mantine/src/index.tsx | 8 + packages/mantine/src/providers/index.ts | 1 + .../src/providers/notificationProvider.tsx | 176 + packages/mantine/src/theme/index.ts | 206 + packages/mantine/src/types/index.d.ts | 4 + packages/mantine/src/types/theme.ts | 14 + packages/mantine/test/dataMocks.ts | 143 + packages/mantine/test/index.tsx | 115 + packages/mantine/test/jest.setup.ts | 40 + packages/mantine/test/svgTransform.ts | 8 + packages/mantine/tsconfig.declarations.json | 37 + packages/mantine/tsconfig.json | 28 + packages/mantine/tsconfig.test.json | 16 + packages/mantine/tsup.config.ts | 25 + packages/medusa/.npmignore | 11 + packages/medusa/CHANGELOG.md | 333 + packages/medusa/LICENSE | 21 + packages/medusa/README.md | 70 + packages/medusa/jest.config.js | 12 + packages/medusa/package.json | 53 + packages/medusa/refine.config.js | 62 + packages/medusa/src/authProvider/index.ts | 78 + packages/medusa/src/dataProvider/index.ts | 188 + packages/medusa/src/index.ts | 4 + packages/medusa/src/utils/axios.ts | 19 + packages/medusa/src/utils/generateFilter.ts | 22 + packages/medusa/src/utils/index.ts | 3 + packages/medusa/src/utils/mapOperator.ts | 12 + packages/medusa/test/create/index.mock.ts | 55 + packages/medusa/test/create/index.spec.ts | 27 + packages/medusa/test/custom/index.mock.ts | 620 + packages/medusa/test/custom/index.spec.ts | 76 + packages/medusa/test/deleteMany/index.mock.ts | 48 + packages/medusa/test/deleteMany/index.spec.ts | 21 + packages/medusa/test/deleteOne/index.mock.ts | 85 + packages/medusa/test/deleteOne/index.spec.ts | 24 + packages/medusa/test/getList/index.mock.ts | 1043 + packages/medusa/test/getList/index.spec.ts | 45 + packages/medusa/test/getOne/index.mock.ts | 445 + packages/medusa/test/getOne/index.spec.ts | 21 + packages/medusa/test/jest.setup.ts | 9 + packages/medusa/test/update/index.mock.ts | 48 + packages/medusa/test/update/index.spec.ts | 26 + packages/medusa/test/updateMany/index.mock.ts | 48 + packages/medusa/test/updateMany/index.spec.ts | 26 + .../medusa/test/utils/generateFilter.spec.ts | 18 + .../medusa/test/utils/mapOperator.spec.ts | 32 + packages/medusa/tsconfig.declarations.json | 21 + packages/medusa/tsconfig.json | 8 + packages/medusa/tsup.config.ts | 24 + packages/mui/.npmignore | 11 + packages/mui/CHANGELOG.md | 2767 + packages/mui/README.md | 76 + packages/mui/jest.config.js | 27 + packages/mui/package.json | 79 + packages/mui/refine.config.js | 646 + .../autoSaveIndicator/index.spec.tsx | 7 + .../components/autoSaveIndicator/index.tsx | 88 + .../src/components/breadcrumb/index.spec.tsx | 53 + .../mui/src/components/breadcrumb/index.tsx | 117 + .../components/buttons/clone/index.spec.tsx | 7 + .../src/components/buttons/clone/index.tsx | 128 + .../components/buttons/create/index.spec.tsx | 7 + .../src/components/buttons/create/index.tsx | 125 + .../components/buttons/delete/index.spec.tsx | 6 + .../src/components/buttons/delete/index.tsx | 185 + .../components/buttons/edit/index.spec.tsx | 6 + .../mui/src/components/buttons/edit/index.tsx | 134 + .../components/buttons/export/index.spec.tsx | 6 + .../src/components/buttons/export/index.tsx | 48 + .../components/buttons/import/index.spec.tsx | 7 + .../src/components/buttons/import/index.tsx | 54 + packages/mui/src/components/buttons/index.tsx | 11 + .../components/buttons/list/index.spec.tsx | 6 + .../mui/src/components/buttons/list/index.tsx | 144 + .../components/buttons/refresh/index.spec.tsx | 6 + .../src/components/buttons/refresh/index.tsx | 87 + .../components/buttons/save/index.spec.tsx | 6 + .../mui/src/components/buttons/save/index.tsx | 45 + .../components/buttons/show/index.spec.tsx | 6 + .../mui/src/components/buttons/show/index.tsx | 128 + packages/mui/src/components/buttons/types.ts | 92 + .../circularDeterminate/index.spec.tsx | 46 + .../components/circularDeterminate/index.tsx | 69 + .../src/components/crud/create/index.spec.tsx | 83 + .../mui/src/components/crud/create/index.tsx | 168 + .../src/components/crud/edit/index.spec.tsx | 480 + .../mui/src/components/crud/edit/index.tsx | 258 + packages/mui/src/components/crud/index.tsx | 6 + .../src/components/crud/list/index.spec.tsx | 54 + .../mui/src/components/crud/list/index.tsx | 128 + .../src/components/crud/show/index.spec.tsx | 490 + .../mui/src/components/crud/show/index.tsx | 235 + packages/mui/src/components/crud/types.ts | 66 + .../components/fields/boolean/index.spec.tsx | 39 + .../src/components/fields/boolean/index.tsx | 32 + .../src/components/fields/date/index.spec.tsx | 7 + .../mui/src/components/fields/date/index.tsx | 34 + .../components/fields/email/index.spec.tsx | 7 + .../mui/src/components/fields/email/index.tsx | 21 + .../src/components/fields/file/index.spec.tsx | 7 + .../mui/src/components/fields/file/index.tsx | 22 + packages/mui/src/components/fields/index.ts | 10 + .../components/fields/markdown/index.spec.tsx | 7 + .../src/components/fields/markdown/index.tsx | 21 + .../components/fields/number/index.spec.tsx | 7 + .../src/components/fields/number/index.tsx | 34 + .../src/components/fields/tag/index.spec.tsx | 7 + .../mui/src/components/fields/tag/index.tsx | 13 + .../src/components/fields/text/index.spec.tsx | 7 + .../mui/src/components/fields/text/index.tsx | 19 + packages/mui/src/components/fields/types.ts | 49 + .../src/components/fields/url/index.spec.tsx | 7 + .../mui/src/components/fields/url/index.tsx | 26 + packages/mui/src/components/index.tsx | 29 + .../src/components/layout/header/index.tsx | 44 + packages/mui/src/components/layout/index.tsx | 50 + .../mui/src/components/layout/sider/index.tsx | 502 + .../mui/src/components/layout/title/index.tsx | 38 + packages/mui/src/components/layout/types.ts | 11 + .../components/forgotPassword/index.spec.tsx | 41 + .../auth/components/forgotPassword/index.tsx | 212 + .../pages/auth/components/index.tsx | 4 + .../auth/components/login/index.spec.tsx | 49 + .../pages/auth/components/login/index.tsx | 341 + .../auth/components/register/index.spec.tsx | 46 + .../pages/auth/components/register/index.tsx | 311 + .../pages/auth/components/styles.ts | 13 + .../components/updatePassword/index.spec.tsx | 46 + .../auth/components/updatePassword/index.tsx | 214 + .../src/components/pages/auth/index.spec.tsx | 6 + .../mui/src/components/pages/auth/index.tsx | 42 + .../src/components/pages/error/index.spec.tsx | 83 + .../mui/src/components/pages/error/index.tsx | 81 + packages/mui/src/components/pages/index.tsx | 6 + .../mui/src/components/pages/login/index.tsx | 231 + .../src/components/pages/ready/index.spec.tsx | 38 + .../mui/src/components/pages/ready/index.tsx | 126 + .../components/pages/welcome/index.spec.tsx | 34 + .../src/components/pages/welcome/index.tsx | 10 + .../components/themedLayout/header/index.tsx | 76 + .../mui/src/components/themedLayout/index.tsx | 58 + .../components/themedLayout/sider/index.tsx | 534 + .../components/themedLayout/title/index.tsx | 78 + .../mui/src/components/themedLayout/types.ts | 13 + .../themedLayoutV2/hamburgerMenu/index.tsx | 49 + .../themedLayoutV2/header/index.spec.tsx | 150 + .../themedLayoutV2/header/index.tsx | 61 + .../src/components/themedLayoutV2/index.tsx | 58 + .../themedLayoutV2/sider/index.spec.tsx | 7 + .../components/themedLayoutV2/sider/index.tsx | 516 + .../components/themedLayoutV2/title/index.tsx | 75 + .../src/components/themedLayoutV2/types.ts | 13 + packages/mui/src/contexts/index.ts | 4 + .../IThemedLayoutContext.ts | 6 + .../contexts/themedLayoutContext/index.tsx | 33 + .../src/definitions/dataGrid/index.spec.ts | 464 + .../mui/src/definitions/dataGrid/index.ts | 237 + packages/mui/src/definitions/index.ts | 1 + packages/mui/src/hooks/index.ts | 8 + .../mui/src/hooks/useAutocomplete/index.ts | 84 + .../mui/src/hooks/useDataGrid/index.spec.ts | 204 + packages/mui/src/hooks/useDataGrid/index.ts | 337 + .../mui/src/hooks/useSiderVisible/index.ts | 29 + .../src/hooks/useThemedLayoutContext/index.ts | 22 + packages/mui/src/index.tsx | 44 + packages/mui/src/interfaces/field.ts | 3 + packages/mui/src/providers/index.tsx | 2 + .../notificationProvider/index.spec.tsx | 136 + .../providers/notificationProvider/index.tsx | 84 + .../refineSnackbarProvider/index.tsx | 25 + packages/mui/src/theme/index.ts | 101 + packages/mui/src/theme/palette/darkPalette.ts | 39 + packages/mui/src/theme/palette/index.tsx | 3 + .../mui/src/theme/palette/lightPalette.ts | 39 + .../mui/src/theme/palette/refinePalette.ts | 114 + packages/mui/src/theme/typography.ts | 17 + packages/mui/src/types/index.d.ts | 4 + packages/mui/test/dataMocks.ts | 95 + packages/mui/test/index.tsx | 100 + packages/mui/test/jest.setup.ts | 23 + packages/mui/test/svgTransform.ts | 8 + packages/mui/tsconfig.declarations.json | 31 + packages/mui/tsconfig.json | 24 + packages/mui/tsconfig.test.json | 16 + packages/mui/tsup.config.ts | 25 + packages/nestjs-query/.npmignore | 11 + packages/nestjs-query/CHANGELOG.md | 206 + packages/nestjs-query/LICENSE | 21 + packages/nestjs-query/README.md | 76 + packages/nestjs-query/jest.config.js | 7 + packages/nestjs-query/package.json | 64 + .../nestjs-query/src/dataProvider/index.ts | 523 + packages/nestjs-query/src/index.ts | 30 + packages/nestjs-query/src/interfaces.ts | 9 + .../nestjs-query/src/liveProvider/index.ts | 75 + packages/nestjs-query/src/utils/graphql.ts | 72 + packages/nestjs-query/src/utils/index.ts | 416 + .../nestjs-query/test/create/index.mock.ts | 173 + .../nestjs-query/test/create/index.spec.ts | 123 + .../test/createMany/index.mock.ts | 234 + .../test/createMany/index.spec.ts | 160 + .../nestjs-query/test/custom/index.mock.ts | 255 + .../nestjs-query/test/custom/index.spec.ts | 224 + .../test/deleteMany/index.mock.ts | 24 + .../test/deleteMany/index.spec.ts | 15 + .../nestjs-query/test/deleteOne/index.mock.ts | 96 + .../nestjs-query/test/deleteOne/index.spec.ts | 55 + .../nestjs-query/test/getList/index.mock.ts | 601 + .../nestjs-query/test/getList/index.spec.ts | 259 + .../nestjs-query/test/getMany/index.mock.ts | 27 + .../nestjs-query/test/getMany/index.spec.ts | 20 + .../nestjs-query/test/getOne/index.mock.ts | 154 + .../nestjs-query/test/getOne/index.spec.ts | 88 + packages/nestjs-query/test/gqlClient.ts | 8 + packages/nestjs-query/test/jest.setup.ts | 8 + .../nestjs-query/test/update/index.mock.ts | 173 + .../nestjs-query/test/update/index.spec.ts | 123 + .../test/updateMany/index.mock.ts | 141 + .../test/updateMany/index.spec.ts | 57 + .../utils/__snapshots__/graphql.spec.ts.snap | 76 + .../nestjs-query/test/utils/graphql.spec.ts | 167 + .../nestjs-query/tsconfig.declarations.json | 21 + packages/nestjs-query/tsconfig.json | 11 + packages/nestjs-query/tsup.config.ts | 14 + packages/nestjsx-crud/.npmignore | 11 + packages/nestjsx-crud/CHANGELOG.md | 503 + packages/nestjsx-crud/LICENSE | 21 + packages/nestjsx-crud/README.md | 70 + packages/nestjsx-crud/jest.config.js | 12 + packages/nestjsx-crud/package.json | 54 + packages/nestjsx-crud/refine.config.js | 82 + packages/nestjsx-crud/src/index.ts | 5 + packages/nestjsx-crud/src/provider.ts | 225 + packages/nestjsx-crud/src/utils/axios.ts | 19 + .../nestjsx-crud/src/utils/handleFilter.ts | 43 + packages/nestjsx-crud/src/utils/handleJoin.ts | 15 + .../src/utils/handlePagination.ts | 18 + packages/nestjsx-crud/src/utils/handleSort.ts | 38 + packages/nestjsx-crud/src/utils/index.ts | 8 + .../nestjsx-crud/src/utils/mapOperator.ts | 45 + .../src/utils/transformErrorMessages.ts | 22 + .../src/utils/transformHttpError.ts | 19 + .../nestjsx-crud/test/create/index.mock.ts | 54 + .../nestjsx-crud/test/create/index.spec.ts | 33 + .../nestjsx-crud/test/custom/index.mock.ts | 369 + .../nestjsx-crud/test/custom/index.spec.ts | 81 + .../test/deleteMany/index.mock.ts | 16 + .../test/deleteMany/index.spec.ts | 20 + .../nestjsx-crud/test/deleteOne/index.mock.ts | 16 + .../nestjsx-crud/test/deleteOne/index.spec.ts | 18 + .../nestjsx-crud/test/getList/index.mock.ts | 2543 + .../nestjsx-crud/test/getList/index.spec.ts | 149 + .../nestjsx-crud/test/getMany/index.mock.ts | 103 + .../nestjsx-crud/test/getMany/index.spec.ts | 23 + .../nestjsx-crud/test/getOne/index.mock.ts | 61 + .../nestjsx-crud/test/getOne/index.spec.ts | 19 + packages/nestjsx-crud/test/jest.setup.ts | 10 + .../nestjsx-crud/test/update/index.mock.ts | 63 + .../nestjsx-crud/test/update/index.spec.ts | 20 + .../test/updateMany/index.mock.ts | 63 + .../test/updateMany/index.spec.ts | 21 + .../test/utils/handleFilter.spec.ts | 210 + .../test/utils/handleJoin.spec.ts | 82 + .../test/utils/handlePagination.spec.ts | 83 + .../test/utils/handleSort.spec.ts | 148 + .../test/utils/mapOperator.spec.ts | 46 + .../test/utils/transformErrorMessages.spec.ts | 19 + .../nestjsx-crud/tsconfig.declarations.json | 21 + packages/nestjsx-crud/tsconfig.json | 11 + packages/nestjsx-crud/tsup.config.ts | 24 + packages/nextjs-router/.npmignore | 11 + packages/nextjs-router/CHANGELOG.md | 709 + packages/nextjs-router/LICENSE | 21 + packages/nextjs-router/README.md | 29 + packages/nextjs-router/jest.config.js | 6 + packages/nextjs-router/package.json | 111 + packages/nextjs-router/src/app/bindings.tsx | 159 + packages/nextjs-router/src/app/index.ts | 8 + .../src/app/navigate-to-resource.tsx | 42 + .../nextjs-router/src/app/refine-routes.tsx | 39 + .../convert-to-number-if-possible/index.ts | 10 + .../params-from-current-path/index.test.tsx | 33 + .../common/params-from-current-path/index.ts | 23 + .../src/common/parse-table-params.ts | 19 + packages/nextjs-router/src/index.ts | 3 + .../nextjs-router/src/legacy-app/index.ts | 8 + .../nextjs-router/src/legacy-app/prompt.tsx | 15 + .../src/legacy-app/route-component.tsx | 233 + .../src/legacy-app/router-component.tsx | 18 + .../src/legacy-app/router-provider.ts | 24 + .../src/legacy-app/use-history.ts | 14 + .../src/legacy-app/use-location.ts | 24 + .../src/legacy-app/use-params.ts | 12 + .../src/legacy-common/handle-refine-params.ts | 45 + .../src/legacy-common/refine-link.tsx | 29 + .../src/legacy-pages/check-authentication.ts | 45 + .../nextjs-router/src/legacy-pages/index.ts | 7 + .../nextjs-router/src/legacy-pages/prompt.tsx | 30 + .../src/legacy-pages/route-component.tsx | 244 + .../src/legacy-pages/router-provider.ts | 15 + .../src/legacy-pages/use-history.ts | 13 + .../src/legacy-pages/use-location.ts | 23 + .../src/legacy-pages/use-params.ts | 15 + packages/nextjs-router/src/legacy/index.ts | 10 + packages/nextjs-router/src/pages/bindings.tsx | 161 + .../src/pages/document-title-handler.tsx | 58 + packages/nextjs-router/src/pages/index.ts | 8 + .../src/pages/navigate-to-resource.tsx | 42 + .../nextjs-router/src/pages/refine-routes.tsx | 43 + .../src/pages/unsaved-changes-notifier.tsx | 61 + .../src/pages/use-document-title.ts | 26 + .../nextjs-router/tsconfig.declarations.json | 21 + packages/nextjs-router/tsconfig.json | 8 + packages/nextjs-router/tsup.config.ts | 32 + packages/react-hook-form/.npmignore | 11 + packages/react-hook-form/CHANGELOG.md | 522 + packages/react-hook-form/LICENSE | 21 + packages/react-hook-form/README.md | 69 + packages/react-hook-form/jest.config.js | 15 + packages/react-hook-form/package.json | 60 + packages/react-hook-form/src/index.ts | 11 + .../src/useForm/index.spec.tsx | 248 + packages/react-hook-form/src/useForm/index.ts | 274 + .../src/useModalForm/index.spec.ts | 274 + .../react-hook-form/src/useModalForm/index.ts | 327 + .../src/useStepsForm/index.spec.ts | 132 + .../react-hook-form/src/useStepsForm/index.ts | 164 + packages/react-hook-form/test/dataMocks.ts | 129 + packages/react-hook-form/test/index.tsx | 63 + .../tsconfig.declarations.json | 22 + packages/react-hook-form/tsconfig.json | 13 + packages/react-hook-form/tsconfig.test.json | 9 + packages/react-hook-form/tsup.config.ts | 17 + packages/react-location/.npmignore | 11 + packages/react-location/CHANGELOG.md | 281 + packages/react-location/LICENSE | 21 + packages/react-location/README.md | 29 + packages/react-location/jest.config.js | 6 + packages/react-location/package.json | 56 + packages/react-location/src/index.ts | 81 + packages/react-location/src/prompt.tsx | 29 + .../react-location/src/resourceComponent.tsx | 161 + .../react-location/src/routerComponent.tsx | 175 + .../react-location/tsconfig.declarations.json | 21 + packages/react-location/tsconfig.json | 11 + packages/react-location/tsup.config.ts | 24 + packages/react-router-v6/.npmignore | 11 + packages/react-router-v6/CHANGELOG.md | 492 + packages/react-router-v6/LICENSE | 21 + packages/react-router-v6/README.md | 29 + packages/react-router-v6/jest.config.js | 6 + packages/react-router-v6/package.json | 78 + packages/react-router-v6/src/bindings.tsx | 146 + .../src/catch-all-navigate.tsx | 16 + .../src/convert-to-number-if-possible.ts | 10 + .../src/create-resource-routes.tsx | 91 + .../src/document-title-handler.tsx | 59 + packages/react-router-v6/src/index.ts | 7 + packages/react-router-v6/src/legacy/index.ts | 72 + .../react-router-v6/src/legacy/prompt.tsx | 20 + .../src/legacy/routeProvider.tsx | 343 + .../src/legacy/routerComponent.tsx | 59 + .../src/navigate-to-resource.tsx | 36 + .../react-router-v6/src/refine-routes.tsx | 18 + .../src/unsaved-changes-notifier.tsx | 32 + .../react-router-v6/src/use-document-title.ts | 26 + .../src/use-prompt-workaround.ts | 81 + .../tsconfig.declarations.json | 22 + packages/react-router-v6/tsconfig.json | 8 + packages/react-router-v6/tsup.config.ts | 28 + packages/react-table/.npmignore | 11 + packages/react-table/CHANGELOG.md | 507 + packages/react-table/LICENSE | 21 + packages/react-table/README.md | 94 + packages/react-table/jest.config.js | 15 + packages/react-table/package.json | 54 + packages/react-table/src/index.ts | 2 + .../react-table/src/useTable/index.spec.ts | 474 + packages/react-table/src/useTable/index.ts | 210 + packages/react-table/src/utils/index.ts | 1 + .../src/utils/useIsFirstRender/index.spec.ts | 29 + .../src/utils/useIsFirstRender/index.ts | 11 + packages/react-table/test/dataMocks.ts | 78 + packages/react-table/test/index.tsx | 39 + .../react-table/tsconfig.declarations.json | 22 + packages/react-table/tsconfig.json | 12 + packages/react-table/tsconfig.test.json | 17 + packages/react-table/tsup.config.ts | 27 + packages/remix/.npmignore | 11 + packages/remix/CHANGELOG.md | 325 + packages/remix/LICENSE | 21 + packages/remix/README.md | 35 + packages/remix/jest.config.js | 6 + packages/remix/package.json | 83 + packages/remix/src/bindings.tsx | 150 + .../src/convert-to-number-if-possible.ts | 10 + packages/remix/src/index.ts | 6 + .../remix/src/legacy/checkAuthentication.ts | 22 + packages/remix/src/legacy/index.ts | 6 + packages/remix/src/legacy/prompt.tsx | 26 + packages/remix/src/legacy/routeComponent.tsx | 245 + packages/remix/src/legacy/routerProvider.ts | 29 + packages/remix/src/legacy/useParams.ts | 65 + packages/remix/src/navigate-to-resource.ts | 39 + .../params-from-current-path/index.test.ts | 33 + .../src/params-from-current-path/index.ts | 23 + packages/remix/src/parse-table-params.ts | 19 + packages/remix/src/refine-routes.tsx | 39 + .../remix/src/unsaved-changes-notifier.tsx | 55 + packages/remix/tsconfig.declarations.json | 21 + packages/remix/tsconfig.json | 11 + packages/remix/tsup.config.ts | 27 + packages/shared/get-refine-core-version.ts | 11 + packages/shared/lodash-replace-plugin.ts | 39 + packages/shared/mark-as-external-plugin.ts | 13 + packages/shared/remove-test-ids-plugin.ts | 24 + .../shared/replace-core-version-plugin.ts | 36 + packages/simple-rest/.npmignore | 11 + packages/simple-rest/CHANGELOG.md | 519 + packages/simple-rest/LICENSE | 21 + packages/simple-rest/README.md | 70 + packages/simple-rest/jest.config.js | 12 + packages/simple-rest/package.json | 54 + packages/simple-rest/refine.config.js | 55 + packages/simple-rest/src/index.ts | 8 + packages/simple-rest/src/provider.ts | 199 + packages/simple-rest/src/utils/axios.ts | 21 + .../simple-rest/src/utils/generateFilter.ts | 30 + .../simple-rest/src/utils/generateSort.ts | 20 + packages/simple-rest/src/utils/index.ts | 4 + packages/simple-rest/src/utils/mapOperator.ts | 15 + .../simple-rest/test/create/index.mock.ts | 36 + .../simple-rest/test/create/index.spec.ts | 22 + .../simple-rest/test/custom/index.mock.ts | 2103 + .../simple-rest/test/custom/index.spec.ts | 71 + .../simple-rest/test/deleteOne/index.mock.ts | 32 + .../simple-rest/test/deleteOne/index.spec.ts | 17 + .../simple-rest/test/getList/index.mock.ts | 1107 + .../simple-rest/test/getList/index.spec.ts | 84 + .../simple-rest/test/getOne/index.mock.ts | 49 + .../simple-rest/test/getOne/index.spec.ts | 20 + packages/simple-rest/test/jest.setup.ts | 9 + .../simple-rest/test/update/index.mock.ts | 32 + .../simple-rest/test/update/index.spec.ts | 27 + .../test/utils/generateFilter.spec.ts | 43 + .../test/utils/generateSort.spec.ts | 34 + .../test/utils/mapOperator.spec.ts | 49 + .../simple-rest/tsconfig.declarations.json | 21 + packages/simple-rest/tsconfig.json | 11 + packages/simple-rest/tsup.config.ts | 24 + packages/strapi-v4/.npmignore | 11 + packages/strapi-v4/CHANGELOG.md | 551 + packages/strapi-v4/LICENSE | 21 + packages/strapi-v4/README.md | 74 + packages/strapi-v4/jest.config.js | 12 + packages/strapi-v4/package.json | 58 + packages/strapi-v4/refine.config.js | 84 + packages/strapi-v4/src/dataProvider.ts | 297 + packages/strapi-v4/src/helpers/auth.ts | 70 + packages/strapi-v4/src/helpers/index.ts | 2 + packages/strapi-v4/src/helpers/normalize.ts | 50 + packages/strapi-v4/src/index.ts | 3 + packages/strapi-v4/src/utils/axios.ts | 19 + .../strapi-v4/src/utils/generateFilter.ts | 64 + packages/strapi-v4/src/utils/generateSort.ts | 15 + packages/strapi-v4/src/utils/index.ts | 7 + packages/strapi-v4/src/utils/mapOperator.ts | 24 + packages/strapi-v4/src/utils/normalizeData.ts | 37 + .../src/utils/transformErrorMessages.ts | 27 + .../strapi-v4/src/utils/transformHttpError.ts | 18 + packages/strapi-v4/test/auth/index.mock.ts | 109 + packages/strapi-v4/test/auth/index.spec.ts | 31 + .../strapi-v4/test/dataProvider/index.mock.ts | 1766 + .../strapi-v4/test/dataProvider/index.spec.ts | 356 + packages/strapi-v4/test/jest.setup.ts | 9 + .../test/utils/generateFilter.spec.ts | 161 + .../strapi-v4/test/utils/generateSort.spec.ts | 17 + .../strapi-v4/test/utils/mapOperator.spec.ts | 25 + .../test/utils/normalizeData.spec.ts | 101 + .../test/utils/transformErrorMessages.spec.ts | 47 + .../test/utils/transformHttpError.spec.ts | 73 + packages/strapi-v4/tsconfig.declarations.json | 21 + packages/strapi-v4/tsconfig.json | 11 + packages/strapi-v4/tsup.config.ts | 24 + packages/strapi/.npmignore | 11 + packages/strapi/CHANGELOG.md | 363 + packages/strapi/LICENSE | 21 + packages/strapi/README.md | 73 + packages/strapi/jest.config.js | 12 + packages/strapi/package.json | 55 + packages/strapi/src/dataProvider.ts | 257 + packages/strapi/src/helpers/auth.ts | 43 + packages/strapi/src/helpers/index.ts | 2 + packages/strapi/src/helpers/normalize.ts | 50 + packages/strapi/src/hooks/index.ts | 1 + packages/strapi/src/hooks/upload.ts | 44 + packages/strapi/src/index.ts | 3 + packages/strapi/test/auth/index.mock.ts | 102 + packages/strapi/test/auth/index.spec.ts | 31 + .../strapi/test/dataProvider/index.mock.ts | 2196 + .../strapi/test/dataProvider/index.spec.ts | 258 + packages/strapi/test/jest.setup.ts | 9 + packages/strapi/tsconfig.declarations.json | 21 + packages/strapi/tsconfig.json | 11 + packages/strapi/tsup.config.ts | 24 + packages/supabase/.npmignore | 11 + packages/supabase/CHANGELOG.md | 777 + packages/supabase/LICENSE | 21 + packages/supabase/README.md | 75 + packages/supabase/jest.config.js | 7 + packages/supabase/package.json | 53 + packages/supabase/refine.config.js | 69 + packages/supabase/src/dataProvider/index.ts | 244 + packages/supabase/src/index.ts | 9 + packages/supabase/src/liveProvider/index.ts | 91 + packages/supabase/src/types/index.ts | 22 + packages/supabase/src/utils/generateFilter.ts | 56 + packages/supabase/src/utils/handleError.ts | 11 + packages/supabase/src/utils/index.ts | 3 + packages/supabase/src/utils/mapOperator.ts | 27 + packages/supabase/test/create/index.mock.ts | 56 + packages/supabase/test/create/index.spec.ts | 27 + .../supabase/test/createMany/index.mock.ts | 76 + .../supabase/test/createMany/index.spec.ts | 42 + packages/supabase/test/custom/index.spec.ts | 17 + .../supabase/test/deleteMany/index.mock.ts | 47 + .../supabase/test/deleteMany/index.spec.ts | 15 + .../supabase/test/deleteOne/index.mock.ts | 47 + .../supabase/test/deleteOne/index.spec.ts | 15 + .../supabase/test/getApiUrl/index.spec.ts | 14 + packages/supabase/test/getList/index.mock.ts | 805 + packages/supabase/test/getList/index.spec.ts | 283 + packages/supabase/test/getMany/index.mock.ts | 108 + packages/supabase/test/getMany/index.spec.ts | 34 + packages/supabase/test/getOne/index.mock.ts | 99 + packages/supabase/test/getOne/index.spec.ts | 30 + packages/supabase/test/jest.setup.ts | 6 + packages/supabase/test/supabaseClient.ts | 9 + packages/supabase/test/update/index.mock.ts | 61 + packages/supabase/test/update/index.spec.ts | 29 + .../supabase/test/updateMany/index.mock.ts | 61 + .../supabase/test/updateMany/index.spec.ts | 29 + .../test/utils/generateFilter.spec.ts | 16 + .../supabase/test/utils/handleError.spec.ts | 26 + .../supabase/test/utils/mapOperator.spec.ts | 54 + packages/supabase/tsconfig.declarations.json | 21 + packages/supabase/tsconfig.json | 8 + packages/supabase/tsup.config.ts | 24 + packages/ui-tests/.npmignore | 10 + packages/ui-tests/CHANGELOG.md | 530 + packages/ui-tests/README.md | 250 + packages/ui-tests/jest.config.js | 26 + packages/ui-tests/package.json | 49 + packages/ui-tests/src/index.tsx | 1 + packages/ui-tests/src/test/dataMocks.tsx | 181 + packages/ui-tests/src/test/index.tsx | 112 + packages/ui-tests/src/test/jest.setup.ts | 16 + packages/ui-tests/src/test/svgTransform.ts | 8 + .../ui-tests/src/tests/autoSaveIndicator.tsx | 44 + packages/ui-tests/src/tests/breadcrumb.tsx | 86 + packages/ui-tests/src/tests/buttons/clone.tsx | 479 + .../ui-tests/src/tests/buttons/create.tsx | 437 + .../ui-tests/src/tests/buttons/delete.tsx | 627 + packages/ui-tests/src/tests/buttons/edit.tsx | 424 + .../ui-tests/src/tests/buttons/export.tsx | 59 + .../ui-tests/src/tests/buttons/import.tsx | 64 + packages/ui-tests/src/tests/buttons/index.tsx | 10 + packages/ui-tests/src/tests/buttons/list.tsx | 425 + .../ui-tests/src/tests/buttons/refresh.tsx | 175 + packages/ui-tests/src/tests/buttons/save.tsx | 69 + packages/ui-tests/src/tests/buttons/show.tsx | 470 + packages/ui-tests/src/tests/crud/create.tsx | 122 + packages/ui-tests/src/tests/crud/edit.tsx | 145 + packages/ui-tests/src/tests/crud/index.tsx | 4 + packages/ui-tests/src/tests/crud/list.tsx | 232 + packages/ui-tests/src/tests/crud/show.tsx | 124 + .../ui-tests/src/tests/fields/boolean.tsx | 39 + packages/ui-tests/src/tests/fields/date.tsx | 57 + packages/ui-tests/src/tests/fields/email.tsx | 19 + packages/ui-tests/src/tests/fields/file.tsx | 33 + packages/ui-tests/src/tests/fields/image.tsx | 27 + packages/ui-tests/src/tests/fields/index.tsx | 10 + .../ui-tests/src/tests/fields/markdown.tsx | 32 + packages/ui-tests/src/tests/fields/number.tsx | 50 + packages/ui-tests/src/tests/fields/tag.tsx | 22 + packages/ui-tests/src/tests/fields/text.tsx | 16 + packages/ui-tests/src/tests/fields/url.tsx | 42 + packages/ui-tests/src/tests/index.tsx | 7 + packages/ui-tests/src/tests/layout/footer.tsx | 18 + packages/ui-tests/src/tests/layout/header.tsx | 71 + packages/ui-tests/src/tests/layout/index.tsx | 5 + packages/ui-tests/src/tests/layout/layout.tsx | 45 + packages/ui-tests/src/tests/layout/sider.tsx | 251 + packages/ui-tests/src/tests/layout/title.tsx | 18 + .../src/tests/pages/auth/authPage.tsx | 42 + .../src/tests/pages/auth/forgotPassword.tsx | 269 + .../ui-tests/src/tests/pages/auth/index.ts | 5 + .../ui-tests/src/tests/pages/auth/login.tsx | 418 + .../src/tests/pages/auth/register.tsx | 348 + .../src/tests/pages/auth/updatePassword.tsx | 232 + packages/ui-tests/src/tests/pages/error.tsx | 70 + packages/ui-tests/src/tests/pages/index.tsx | 3 + packages/ui-tests/src/tests/pages/ready.tsx | 18 + packages/ui-tests/tsconfig.declarations.json | 19 + packages/ui-tests/tsconfig.json | 22 + packages/ui-tests/tsconfig.test.json | 16 + packages/ui-tests/tsup.config.ts | 15 + packages/ui-tests/util.d.ts | 1 + packages/ui-types/.npmignore | 11 + packages/ui-types/CHANGELOG.md | 622 + packages/ui-types/README.md | 250 + packages/ui-types/package.json | 38 + packages/ui-types/src/classNames.ts | 17 + packages/ui-types/src/ids.tsx | 12 + packages/ui-types/src/index.tsx | 62 + packages/ui-types/src/types/breadcrumb.tsx | 20 + packages/ui-types/src/types/button.tsx | 226 + packages/ui-types/src/types/crud.tsx | 376 + packages/ui-types/src/types/field.tsx | 129 + packages/ui-types/src/types/index.tsx | 6 + packages/ui-types/src/types/layout.tsx | 81 + packages/ui-types/src/types/page.tsx | 3 + packages/ui-types/tsconfig.declarations.json | 21 + packages/ui-types/tsconfig.json | 13 + packages/ui-types/tsup.config.ts | 16 + 2479 files changed, 591504 insertions(+) create mode 100644 packages/ably/.npmignore create mode 100644 packages/ably/CHANGELOG.md create mode 100644 packages/ably/LICENSE create mode 100644 packages/ably/README.md create mode 100644 packages/ably/jest.config.js create mode 100644 packages/ably/package.json create mode 100644 packages/ably/src/index.ts create mode 100644 packages/ably/tsconfig.declarations.json create mode 100644 packages/ably/tsconfig.json create mode 100644 packages/ably/tsup.config.ts create mode 100644 packages/airtable/.npmignore create mode 100644 packages/airtable/CHANGELOG.md create mode 100644 packages/airtable/LICENSE create mode 100644 packages/airtable/README.md create mode 100644 packages/airtable/jest.config.js create mode 100644 packages/airtable/package.json create mode 100644 packages/airtable/refine.config.js create mode 100644 packages/airtable/src/dataProvider.ts create mode 100644 packages/airtable/src/index.ts create mode 100644 packages/airtable/src/utils/generateFilter.ts create mode 100644 packages/airtable/src/utils/generateFilterFormula.ts create mode 100644 packages/airtable/src/utils/generateLogicalFilterFormula.ts create mode 100644 packages/airtable/src/utils/generateSort.ts create mode 100644 packages/airtable/src/utils/index.ts create mode 100644 packages/airtable/src/utils/isContainsOperator.ts create mode 100644 packages/airtable/src/utils/isSimpleOperator.ts create mode 100644 packages/airtable/test/create/index.mock.ts create mode 100644 packages/airtable/test/create/index.spec.ts create mode 100644 packages/airtable/test/custom/index.spec.ts create mode 100644 packages/airtable/test/deleteMany/index.mock.ts create mode 100644 packages/airtable/test/deleteMany/index.spec.ts create mode 100644 packages/airtable/test/deleteOne/index.mock.ts create mode 100644 packages/airtable/test/deleteOne/index.spec.ts create mode 100644 packages/airtable/test/getList/index.mock.ts create mode 100644 packages/airtable/test/getList/index.spec.ts create mode 100644 packages/airtable/test/getMany/index.mock.ts create mode 100644 packages/airtable/test/getMany/index.spec.ts create mode 100644 packages/airtable/test/getOne/index.mock.ts create mode 100644 packages/airtable/test/getOne/index.spec.ts create mode 100644 packages/airtable/test/jest.setup.js create mode 100644 packages/airtable/test/update/index.mock.ts create mode 100644 packages/airtable/test/update/index.spec.ts create mode 100644 packages/airtable/test/updateMany/index.mock.ts create mode 100644 packages/airtable/test/updateMany/index.spec.ts create mode 100644 packages/airtable/test/utils/generateFilter.spec.ts create mode 100644 packages/airtable/test/utils/generateFilterFormula.spec.ts create mode 100644 packages/airtable/test/utils/generateLogicalFilterFormula.spec.ts create mode 100644 packages/airtable/test/utils/generateSort.spec.ts create mode 100644 packages/airtable/test/utils/isContainsOperator.spec.ts create mode 100644 packages/airtable/test/utils/isSimpleOperator.spec.ts create mode 100644 packages/airtable/tsconfig.declarations.json create mode 100644 packages/airtable/tsconfig.json create mode 100644 packages/airtable/tsup.config.ts create mode 100644 packages/antd/.npmignore create mode 100644 packages/antd/.npmrc create mode 100644 packages/antd/CHANGELOG.md create mode 100644 packages/antd/README.md create mode 100644 packages/antd/jest.config.js create mode 100644 packages/antd/package.json create mode 100644 packages/antd/refine.config.js create mode 100644 packages/antd/src/assets/styles/reset.css create mode 100644 packages/antd/src/components/autoSaveIndicator/index.spec.tsx create mode 100644 packages/antd/src/components/autoSaveIndicator/index.tsx create mode 100644 packages/antd/src/components/breadcrumb/index.spec.tsx create mode 100644 packages/antd/src/components/breadcrumb/index.tsx create mode 100644 packages/antd/src/components/buttons/clone/index.spec.tsx create mode 100644 packages/antd/src/components/buttons/clone/index.tsx create mode 100644 packages/antd/src/components/buttons/create/index.spec.tsx create mode 100644 packages/antd/src/components/buttons/create/index.tsx create mode 100644 packages/antd/src/components/buttons/delete/index.spec.tsx create mode 100644 packages/antd/src/components/buttons/delete/index.tsx create mode 100644 packages/antd/src/components/buttons/edit/index.spec.tsx create mode 100644 packages/antd/src/components/buttons/edit/index.tsx create mode 100644 packages/antd/src/components/buttons/export/index.spec.tsx create mode 100644 packages/antd/src/components/buttons/export/index.tsx create mode 100644 packages/antd/src/components/buttons/import/index.spec.tsx create mode 100644 packages/antd/src/components/buttons/import/index.tsx create mode 100644 packages/antd/src/components/buttons/index.ts create mode 100644 packages/antd/src/components/buttons/list/index.spec.tsx create mode 100644 packages/antd/src/components/buttons/list/index.tsx create mode 100644 packages/antd/src/components/buttons/refresh/index.spec.tsx create mode 100644 packages/antd/src/components/buttons/refresh/index.tsx create mode 100644 packages/antd/src/components/buttons/save/index.spec.tsx create mode 100644 packages/antd/src/components/buttons/save/index.tsx create mode 100644 packages/antd/src/components/buttons/show/index.spec.tsx create mode 100644 packages/antd/src/components/buttons/show/index.tsx create mode 100644 packages/antd/src/components/buttons/types.ts create mode 100644 packages/antd/src/components/crud/create/index.spec.tsx create mode 100644 packages/antd/src/components/crud/create/index.tsx create mode 100644 packages/antd/src/components/crud/edit/index.spec.tsx create mode 100644 packages/antd/src/components/crud/edit/index.tsx create mode 100644 packages/antd/src/components/crud/index.ts create mode 100644 packages/antd/src/components/crud/list/index.spec.tsx create mode 100644 packages/antd/src/components/crud/list/index.tsx create mode 100644 packages/antd/src/components/crud/show/index.spec.tsx create mode 100644 packages/antd/src/components/crud/show/index.tsx create mode 100644 packages/antd/src/components/crud/types.ts create mode 100644 packages/antd/src/components/fields/boolean/index.spec.tsx create mode 100644 packages/antd/src/components/fields/boolean/index.tsx create mode 100644 packages/antd/src/components/fields/date/index.spec.tsx create mode 100644 packages/antd/src/components/fields/date/index.tsx create mode 100644 packages/antd/src/components/fields/email/index.spec.tsx create mode 100644 packages/antd/src/components/fields/email/index.tsx create mode 100644 packages/antd/src/components/fields/file/index.spec.tsx create mode 100644 packages/antd/src/components/fields/file/index.tsx create mode 100644 packages/antd/src/components/fields/image/index.spec.tsx create mode 100644 packages/antd/src/components/fields/image/index.tsx create mode 100644 packages/antd/src/components/fields/index.ts create mode 100644 packages/antd/src/components/fields/markdown/index.spec.tsx create mode 100644 packages/antd/src/components/fields/markdown/index.tsx create mode 100644 packages/antd/src/components/fields/number/index.spec.tsx create mode 100644 packages/antd/src/components/fields/number/index.tsx create mode 100644 packages/antd/src/components/fields/tag/index.spec.tsx create mode 100644 packages/antd/src/components/fields/tag/index.tsx create mode 100644 packages/antd/src/components/fields/text/index.spec.tsx create mode 100644 packages/antd/src/components/fields/text/index.tsx create mode 100644 packages/antd/src/components/fields/types.ts create mode 100644 packages/antd/src/components/fields/url/index.spec.tsx create mode 100644 packages/antd/src/components/fields/url/index.tsx create mode 100644 packages/antd/src/components/index.ts create mode 100644 packages/antd/src/components/layout/header/index.spec.tsx create mode 100644 packages/antd/src/components/layout/header/index.tsx create mode 100644 packages/antd/src/components/layout/index.spec.tsx create mode 100644 packages/antd/src/components/layout/index.tsx create mode 100644 packages/antd/src/components/layout/sider/index.tsx create mode 100644 packages/antd/src/components/layout/sider/styles.ts create mode 100644 packages/antd/src/components/layout/title/index.tsx create mode 100644 packages/antd/src/components/layout/types.ts create mode 100644 packages/antd/src/components/pageHeader/index.tsx create mode 100644 packages/antd/src/components/pages/auth/components/forgotPassword/index.spec.ts create mode 100644 packages/antd/src/components/pages/auth/components/forgotPassword/index.tsx create mode 100644 packages/antd/src/components/pages/auth/components/index.tsx create mode 100644 packages/antd/src/components/pages/auth/components/login/index.spec.ts create mode 100644 packages/antd/src/components/pages/auth/components/login/index.tsx create mode 100644 packages/antd/src/components/pages/auth/components/register/index.spec.ts create mode 100644 packages/antd/src/components/pages/auth/components/register/index.tsx create mode 100644 packages/antd/src/components/pages/auth/components/styles.ts create mode 100644 packages/antd/src/components/pages/auth/components/updatePassword/index.spec.ts create mode 100644 packages/antd/src/components/pages/auth/components/updatePassword/index.tsx create mode 100644 packages/antd/src/components/pages/auth/index.spec.tsx create mode 100644 packages/antd/src/components/pages/auth/index.tsx create mode 100644 packages/antd/src/components/pages/error/index.spec.tsx create mode 100644 packages/antd/src/components/pages/error/index.tsx create mode 100644 packages/antd/src/components/pages/index.tsx create mode 100644 packages/antd/src/components/pages/login/index.tsx create mode 100644 packages/antd/src/components/pages/login/styles.ts create mode 100644 packages/antd/src/components/pages/ready/index.spec.tsx create mode 100644 packages/antd/src/components/pages/ready/index.tsx create mode 100644 packages/antd/src/components/pages/welcome/index.spec.tsx create mode 100644 packages/antd/src/components/pages/welcome/index.tsx create mode 100644 packages/antd/src/components/table/components/filterDropdown/index.spec.tsx create mode 100644 packages/antd/src/components/table/components/filterDropdown/index.tsx create mode 100644 packages/antd/src/components/table/components/index.ts create mode 100644 packages/antd/src/components/table/index.ts create mode 100644 packages/antd/src/components/themedLayout/header/index.spec.tsx create mode 100644 packages/antd/src/components/themedLayout/header/index.tsx create mode 100644 packages/antd/src/components/themedLayout/index.spec.tsx create mode 100644 packages/antd/src/components/themedLayout/index.tsx create mode 100644 packages/antd/src/components/themedLayout/sider/index.tsx create mode 100644 packages/antd/src/components/themedLayout/sider/styles.ts create mode 100644 packages/antd/src/components/themedLayout/title/index.spec.tsx create mode 100644 packages/antd/src/components/themedLayout/title/index.tsx create mode 100644 packages/antd/src/components/themedLayout/types.ts create mode 100644 packages/antd/src/components/themedLayoutV2/header/index.spec.tsx create mode 100644 packages/antd/src/components/themedLayoutV2/header/index.tsx create mode 100644 packages/antd/src/components/themedLayoutV2/index.spec.tsx create mode 100644 packages/antd/src/components/themedLayoutV2/index.tsx create mode 100644 packages/antd/src/components/themedLayoutV2/sider/index.spec.tsx create mode 100644 packages/antd/src/components/themedLayoutV2/sider/index.tsx create mode 100644 packages/antd/src/components/themedLayoutV2/sider/styles.ts create mode 100644 packages/antd/src/components/themedLayoutV2/title/index.spec.tsx create mode 100644 packages/antd/src/components/themedLayoutV2/title/index.tsx create mode 100644 packages/antd/src/components/themedLayoutV2/types.ts create mode 100644 packages/antd/src/components/undoableNotification/index.spec.tsx create mode 100644 packages/antd/src/components/undoableNotification/index.tsx create mode 100644 packages/antd/src/contexts/index.ts create mode 100644 packages/antd/src/contexts/themedLayoutContext/IThemedLayoutContext.ts create mode 100644 packages/antd/src/contexts/themedLayoutContext/index.tsx create mode 100644 packages/antd/src/definitions/index.ts create mode 100644 packages/antd/src/definitions/table/index.spec.ts create mode 100644 packages/antd/src/definitions/table/index.ts create mode 100644 packages/antd/src/definitions/themes/index.ts create mode 100644 packages/antd/src/definitions/upload/index.spec.ts create mode 100644 packages/antd/src/definitions/upload/index.ts create mode 100644 packages/antd/src/hooks/fields/index.ts create mode 100644 packages/antd/src/hooks/fields/useCheckboxGroup/index.spec.ts create mode 100644 packages/antd/src/hooks/fields/useCheckboxGroup/index.ts create mode 100644 packages/antd/src/hooks/fields/useRadioGroup/index.spec.ts create mode 100644 packages/antd/src/hooks/fields/useRadioGroup/index.ts create mode 100644 packages/antd/src/hooks/fields/useSelect/index.spec.ts create mode 100644 packages/antd/src/hooks/fields/useSelect/index.ts create mode 100644 packages/antd/src/hooks/form/index.ts create mode 100644 packages/antd/src/hooks/form/useDrawerForm/index.spec.tsx create mode 100644 packages/antd/src/hooks/form/useDrawerForm/index.ts create mode 100644 packages/antd/src/hooks/form/useDrawerForm/useDrawerForm.ts create mode 100644 packages/antd/src/hooks/form/useForm.spec.tsx create mode 100644 packages/antd/src/hooks/form/useForm.ts create mode 100644 packages/antd/src/hooks/form/useModalForm/index.spec.tsx create mode 100644 packages/antd/src/hooks/form/useModalForm/index.ts create mode 100644 packages/antd/src/hooks/form/useModalForm/useModalForm.ts create mode 100644 packages/antd/src/hooks/form/useStepsForm/index.ts create mode 100644 packages/antd/src/hooks/form/useStepsForm/useStepsForm.spec.tsx create mode 100644 packages/antd/src/hooks/form/useStepsForm/useStepsForm.ts create mode 100644 packages/antd/src/hooks/import/index.spec.ts create mode 100644 packages/antd/src/hooks/import/index.tsx create mode 100644 packages/antd/src/hooks/index.ts create mode 100644 packages/antd/src/hooks/list/index.ts create mode 100644 packages/antd/src/hooks/list/useSimpleList/index.ts create mode 100644 packages/antd/src/hooks/list/useSimpleList/useSimpleList.spec.ts create mode 100644 packages/antd/src/hooks/list/useSimpleList/useSimpleList.ts create mode 100644 packages/antd/src/hooks/modal/index.ts create mode 100644 packages/antd/src/hooks/modal/useModal/index.spec.ts create mode 100644 packages/antd/src/hooks/modal/useModal/index.tsx create mode 100644 packages/antd/src/hooks/table/index.ts create mode 100644 packages/antd/src/hooks/table/useEditableTable/index.ts create mode 100644 packages/antd/src/hooks/table/useEditableTable/useEditableTable.spec.tsx create mode 100644 packages/antd/src/hooks/table/useEditableTable/useEditableTable.ts create mode 100644 packages/antd/src/hooks/table/useTable/index.ts create mode 100644 packages/antd/src/hooks/table/useTable/paginationLink.tsx create mode 100644 packages/antd/src/hooks/table/useTable/useTable.spec.ts create mode 100644 packages/antd/src/hooks/table/useTable/useTable.ts create mode 100644 packages/antd/src/hooks/useFileUploadState/index.spec.ts create mode 100644 packages/antd/src/hooks/useFileUploadState/index.ts create mode 100644 packages/antd/src/hooks/useSiderVisible/index.ts create mode 100644 packages/antd/src/hooks/useThemedLayoutContext/index.ts create mode 100644 packages/antd/src/index.tsx create mode 100644 packages/antd/src/interfaces/field.ts create mode 100644 packages/antd/src/interfaces/index.ts create mode 100644 packages/antd/src/interfaces/upload.ts create mode 100644 packages/antd/src/providers/index.ts create mode 100644 packages/antd/src/providers/notificationProvider/index.spec.tsx create mode 100644 packages/antd/src/providers/notificationProvider/index.tsx create mode 100644 packages/antd/src/types/index.d.ts create mode 100644 packages/antd/src/types/sunflower.d.ts create mode 100644 packages/antd/test/dataMocks.ts create mode 100644 packages/antd/test/index.tsx create mode 100644 packages/antd/test/jest.setup.ts create mode 100644 packages/antd/test/svgTransform.ts create mode 100644 packages/antd/tsconfig.declarations.json create mode 100644 packages/antd/tsconfig.json create mode 100644 packages/antd/tsconfig.test.json create mode 100644 packages/antd/tsup.config.ts create mode 100644 packages/appwrite/.npmignore create mode 100644 packages/appwrite/CHANGELOG.md create mode 100644 packages/appwrite/LICENSE create mode 100644 packages/appwrite/README.md create mode 100644 packages/appwrite/jest.config.js create mode 100644 packages/appwrite/package.json create mode 100644 packages/appwrite/refine.config.js create mode 100644 packages/appwrite/src/dataProvider.ts create mode 100644 packages/appwrite/src/index.ts create mode 100644 packages/appwrite/src/liveProvider.ts create mode 100644 packages/appwrite/src/utils/generateFilter.ts create mode 100644 packages/appwrite/src/utils/getAppwriteFilters.ts create mode 100644 packages/appwrite/src/utils/getAppwritePagination.ts create mode 100644 packages/appwrite/src/utils/getAppwriteSorting.ts create mode 100644 packages/appwrite/src/utils/getRefineEvent.ts create mode 100644 packages/appwrite/src/utils/index.ts create mode 100644 packages/appwrite/test/appwriteClient.ts create mode 100644 packages/appwrite/test/create/index.mock.ts create mode 100644 packages/appwrite/test/create/index.spec.ts create mode 100644 packages/appwrite/test/createMany/index.mock.ts create mode 100644 packages/appwrite/test/createMany/index.spec.ts create mode 100644 packages/appwrite/test/custom/index.spec.ts create mode 100644 packages/appwrite/test/deleteMany/index.mock.ts create mode 100644 packages/appwrite/test/deleteMany/index.spec.ts create mode 100644 packages/appwrite/test/deleteOne/index.mock.ts create mode 100644 packages/appwrite/test/deleteOne/index.spec.ts create mode 100644 packages/appwrite/test/getApiUrl/index.spec.ts create mode 100644 packages/appwrite/test/getList/index.mock.ts create mode 100644 packages/appwrite/test/getList/index.spec.ts create mode 100644 packages/appwrite/test/getMany/index.mock.ts create mode 100644 packages/appwrite/test/getMany/index.spec.ts create mode 100644 packages/appwrite/test/getOne/index.mock.ts create mode 100644 packages/appwrite/test/getOne/index.spec.ts create mode 100644 packages/appwrite/test/jest.setup.ts create mode 100644 packages/appwrite/test/liveProvider/index.spec.ts create mode 100644 packages/appwrite/test/update/index.mock.ts create mode 100644 packages/appwrite/test/update/index.spec.ts create mode 100644 packages/appwrite/test/updateMany/index.mock.ts create mode 100644 packages/appwrite/test/updateMany/index.spec.ts create mode 100644 packages/appwrite/test/utils/generateFilter.spec.ts create mode 100644 packages/appwrite/test/utils/gerRefineEvent.spec.ts create mode 100644 packages/appwrite/test/utils/getAppwriteFilters.spec.ts create mode 100644 packages/appwrite/test/utils/getAppwritePagination.spec.ts create mode 100644 packages/appwrite/test/utils/getAppwriteSorting.ts create mode 100644 packages/appwrite/tsconfig.declarations.json create mode 100644 packages/appwrite/tsconfig.json create mode 100644 packages/appwrite/tsup.config.ts create mode 100644 packages/chakra-ui/.npmignore create mode 100644 packages/chakra-ui/CHANGELOG.md create mode 100644 packages/chakra-ui/README.md create mode 100644 packages/chakra-ui/jest.config.js create mode 100644 packages/chakra-ui/package.json create mode 100644 packages/chakra-ui/refine.config.js create mode 100644 packages/chakra-ui/src/components/autoSaveIndicator/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/autoSaveIndicator/index.tsx create mode 100644 packages/chakra-ui/src/components/breadcrumb/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/breadcrumb/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/clone/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/buttons/clone/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/create/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/buttons/create/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/delete/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/buttons/delete/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/edit/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/buttons/edit/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/export/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/buttons/export/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/import/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/buttons/import/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/list/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/buttons/list/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/refresh/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/buttons/refresh/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/save/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/buttons/save/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/show/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/buttons/show/index.tsx create mode 100644 packages/chakra-ui/src/components/buttons/types.ts create mode 100644 packages/chakra-ui/src/components/crud/create/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/crud/create/index.tsx create mode 100644 packages/chakra-ui/src/components/crud/edit/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/crud/edit/index.tsx create mode 100644 packages/chakra-ui/src/components/crud/index.ts create mode 100644 packages/chakra-ui/src/components/crud/list/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/crud/list/index.tsx create mode 100644 packages/chakra-ui/src/components/crud/show/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/crud/show/index.tsx create mode 100644 packages/chakra-ui/src/components/crud/types.ts create mode 100644 packages/chakra-ui/src/components/fields/boolean/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/fields/boolean/index.tsx create mode 100644 packages/chakra-ui/src/components/fields/date/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/fields/date/index.tsx create mode 100644 packages/chakra-ui/src/components/fields/email/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/fields/email/index.tsx create mode 100644 packages/chakra-ui/src/components/fields/file/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/fields/file/index.tsx create mode 100644 packages/chakra-ui/src/components/fields/index.ts create mode 100644 packages/chakra-ui/src/components/fields/markdown/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/fields/markdown/index.tsx create mode 100644 packages/chakra-ui/src/components/fields/number/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/fields/number/index.tsx create mode 100644 packages/chakra-ui/src/components/fields/tag/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/fields/tag/index.tsx create mode 100644 packages/chakra-ui/src/components/fields/text/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/fields/text/index.tsx create mode 100644 packages/chakra-ui/src/components/fields/types.ts create mode 100644 packages/chakra-ui/src/components/fields/url/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/fields/url/index.tsx create mode 100644 packages/chakra-ui/src/components/index.ts create mode 100644 packages/chakra-ui/src/components/layout/header/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/layout/header/index.tsx create mode 100644 packages/chakra-ui/src/components/layout/index.tsx create mode 100644 packages/chakra-ui/src/components/layout/sider/index.tsx create mode 100644 packages/chakra-ui/src/components/layout/title/index.spec.ts create mode 100644 packages/chakra-ui/src/components/layout/title/index.tsx create mode 100644 packages/chakra-ui/src/components/layout/types.ts create mode 100644 packages/chakra-ui/src/components/pages/auth/components/forgotPassword/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/pages/auth/components/forgotPassword/index.tsx create mode 100644 packages/chakra-ui/src/components/pages/auth/components/index.ts create mode 100644 packages/chakra-ui/src/components/pages/auth/components/login/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/pages/auth/components/login/index.tsx create mode 100644 packages/chakra-ui/src/components/pages/auth/components/register/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/pages/auth/components/register/index.tsx create mode 100644 packages/chakra-ui/src/components/pages/auth/components/styles.ts create mode 100644 packages/chakra-ui/src/components/pages/auth/components/updatePassword/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/pages/auth/components/updatePassword/index.tsx create mode 100644 packages/chakra-ui/src/components/pages/auth/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/pages/auth/index.tsx create mode 100644 packages/chakra-ui/src/components/pages/error/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/pages/error/index.tsx create mode 100644 packages/chakra-ui/src/components/pages/index.ts create mode 100644 packages/chakra-ui/src/components/pages/ready/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/pages/ready/index.tsx create mode 100644 packages/chakra-ui/src/components/pages/welcome/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/pages/welcome/index.tsx create mode 100644 packages/chakra-ui/src/components/themedLayout/header/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/themedLayout/header/index.tsx create mode 100644 packages/chakra-ui/src/components/themedLayout/index.tsx create mode 100644 packages/chakra-ui/src/components/themedLayout/sider/index.tsx create mode 100644 packages/chakra-ui/src/components/themedLayout/title/index.spec.ts create mode 100644 packages/chakra-ui/src/components/themedLayout/title/index.tsx create mode 100644 packages/chakra-ui/src/components/themedLayout/types.ts create mode 100644 packages/chakra-ui/src/components/themedLayoutV2/hamburgerMenu/index.tsx create mode 100644 packages/chakra-ui/src/components/themedLayoutV2/header/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/themedLayoutV2/header/index.tsx create mode 100644 packages/chakra-ui/src/components/themedLayoutV2/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/themedLayoutV2/index.tsx create mode 100644 packages/chakra-ui/src/components/themedLayoutV2/sider/index.spec.tsx create mode 100644 packages/chakra-ui/src/components/themedLayoutV2/sider/index.tsx create mode 100644 packages/chakra-ui/src/components/themedLayoutV2/title/index.spec.ts create mode 100644 packages/chakra-ui/src/components/themedLayoutV2/title/index.tsx create mode 100644 packages/chakra-ui/src/components/themedLayoutV2/types.ts create mode 100644 packages/chakra-ui/src/components/undoableNotification/index.tsx create mode 100644 packages/chakra-ui/src/contexts/index.ts create mode 100644 packages/chakra-ui/src/contexts/themedLayoutContext/IThemedLayoutContext.ts create mode 100644 packages/chakra-ui/src/contexts/themedLayoutContext/index.tsx create mode 100644 packages/chakra-ui/src/hooks/index.ts create mode 100644 packages/chakra-ui/src/hooks/usePagination/index.ts create mode 100644 packages/chakra-ui/src/hooks/useSiderVisible/index.ts create mode 100644 packages/chakra-ui/src/hooks/useThemedLayoutContext/index.ts create mode 100644 packages/chakra-ui/src/index.tsx create mode 100644 packages/chakra-ui/src/providers/index.ts create mode 100644 packages/chakra-ui/src/providers/notificationProvider.tsx create mode 100644 packages/chakra-ui/src/theme/index.ts create mode 100644 packages/chakra-ui/src/types/index.d.ts create mode 100644 packages/chakra-ui/test/dataMocks.ts create mode 100644 packages/chakra-ui/test/index.tsx create mode 100644 packages/chakra-ui/test/jest.setup.ts create mode 100644 packages/chakra-ui/test/svgTransform.ts create mode 100644 packages/chakra-ui/tsconfig.declarations.json create mode 100644 packages/chakra-ui/tsconfig.json create mode 100644 packages/chakra-ui/tsconfig.test.json create mode 100644 packages/chakra-ui/tsup.config.ts create mode 100644 packages/cli/.npmignore create mode 100644 packages/cli/.npmrc create mode 100644 packages/cli/ANNOUNCEMENTS.md create mode 100644 packages/cli/CHANGELOG.md create mode 100644 packages/cli/README.md create mode 100644 packages/cli/jest.config.js create mode 100644 packages/cli/package.json create mode 100644 packages/cli/src/cli.ts create mode 100644 packages/cli/src/commands/add/create-provider.ts create mode 100644 packages/cli/src/commands/add/create-resource.ts create mode 100644 packages/cli/src/commands/add/index.spec.ts create mode 100644 packages/cli/src/commands/add/index.ts create mode 100644 packages/cli/src/commands/check-updates/index.test.tsx create mode 100644 packages/cli/src/commands/check-updates/index.tsx create mode 100644 packages/cli/src/commands/create-resource/index.ts create mode 100644 packages/cli/src/commands/devtools/index.ts create mode 100644 packages/cli/src/commands/proxy/index.ts create mode 100644 packages/cli/src/commands/runner/build/index.ts create mode 100644 packages/cli/src/commands/runner/dev/index.ts create mode 100644 packages/cli/src/commands/runner/index.ts create mode 100644 packages/cli/src/commands/runner/projectScripts.test.ts create mode 100644 packages/cli/src/commands/runner/projectScripts.ts create mode 100644 packages/cli/src/commands/runner/run/index.ts create mode 100644 packages/cli/src/commands/runner/runScript.ts create mode 100644 packages/cli/src/commands/runner/start/index.ts create mode 100644 packages/cli/src/commands/runner/utils/index.ts create mode 100644 packages/cli/src/commands/swizzle/index.tsx create mode 100644 packages/cli/src/commands/swizzle/install-required-packages/index.spec.ts create mode 100644 packages/cli/src/commands/swizzle/install-required-packages/index.ts create mode 100644 packages/cli/src/commands/update/index.ts create mode 100644 packages/cli/src/commands/update/interactive/index.test.tsx create mode 100644 packages/cli/src/commands/update/interactive/index.ts create mode 100644 packages/cli/src/commands/whoami/index.ts create mode 100644 packages/cli/src/components/swizzle-message/index.tsx create mode 100644 packages/cli/src/components/update-warning-table/index.tsx create mode 100644 packages/cli/src/components/update-warning-table/table.test.ts create mode 100644 packages/cli/src/components/update-warning-table/table.ts create mode 100644 packages/cli/src/definitions/announcement.ts create mode 100644 packages/cli/src/definitions/cardinal.d.ts create mode 100644 packages/cli/src/definitions/index.ts create mode 100644 packages/cli/src/definitions/node.ts create mode 100644 packages/cli/src/definitions/package.ts create mode 100644 packages/cli/src/definitions/projectTypes.ts create mode 100644 packages/cli/src/definitions/refineConfig.ts create mode 100644 packages/cli/src/definitions/uiFrameworks.ts create mode 100644 packages/cli/src/index.ts create mode 100644 packages/cli/src/telemetry/index.ts create mode 100644 packages/cli/src/transformers/add-devtools-component.ts create mode 100644 packages/cli/src/transformers/resource.ts create mode 100644 packages/cli/src/update-notifier/index.test.ts create mode 100644 packages/cli/src/update-notifier/index.tsx create mode 100644 packages/cli/src/utils/announcement/index.tsx create mode 100644 packages/cli/src/utils/array/index.test.ts create mode 100644 packages/cli/src/utils/array/index.ts create mode 100644 packages/cli/src/utils/compile/index.ts create mode 100644 packages/cli/src/utils/encode/index.ts create mode 100644 packages/cli/src/utils/env/index.test.tsx create mode 100644 packages/cli/src/utils/env/index.ts create mode 100644 packages/cli/src/utils/marked-terminal-renderer/index.ts create mode 100644 packages/cli/src/utils/os/index.ts create mode 100644 packages/cli/src/utils/package/index.test.tsx create mode 100644 packages/cli/src/utils/package/index.ts create mode 100644 packages/cli/src/utils/project/index.ts create mode 100644 packages/cli/src/utils/refine/index.test.tsx create mode 100644 packages/cli/src/utils/refine/index.ts create mode 100644 packages/cli/src/utils/resource/index.spec.ts create mode 100644 packages/cli/src/utils/resource/index.ts create mode 100644 packages/cli/src/utils/spinner/index.ts create mode 100644 packages/cli/src/utils/swizzle/appendAfterImports.test.ts create mode 100644 packages/cli/src/utils/swizzle/appendAfterImports.ts create mode 100644 packages/cli/src/utils/swizzle/codes.ts create mode 100644 packages/cli/src/utils/swizzle/getFileContent.ts create mode 100644 packages/cli/src/utils/swizzle/getPathPrefix.ts create mode 100644 packages/cli/src/utils/swizzle/import.test.ts create mode 100644 packages/cli/src/utils/swizzle/import.ts create mode 100644 packages/cli/src/utils/swizzle/index.ts create mode 100644 packages/cli/src/utils/swizzle/parseSwizzleBlocks.test.ts create mode 100644 packages/cli/src/utils/swizzle/parseSwizzleBlocks.ts create mode 100644 packages/cli/src/utils/swizzle/prettierFormat.ts create mode 100644 packages/cli/src/utils/swizzle/provideCliHelpers.ts create mode 100644 packages/cli/src/utils/swizzle/renderCodeMarkdown.ts create mode 100644 packages/cli/src/utils/text/index.test.tsx create mode 100644 packages/cli/src/utils/text/index.ts create mode 100644 packages/cli/templates/provider/demo-access-control-provider.tsx create mode 100644 packages/cli/templates/provider/demo-audit-log-provider.tsx create mode 100644 packages/cli/templates/provider/demo-auth-provider.tsx create mode 100644 packages/cli/templates/provider/demo-data-provider.tsx create mode 100644 packages/cli/templates/provider/demo-i18n-provider.tsx create mode 100644 packages/cli/templates/provider/demo-live-provider.tsx create mode 100644 packages/cli/templates/provider/demo-notification-provider.tsx create mode 100644 packages/cli/templates/resource/create.tsx.hbs create mode 100644 packages/cli/templates/resource/edit.tsx.hbs create mode 100644 packages/cli/templates/resource/index.ts.hbs create mode 100644 packages/cli/templates/resource/list.tsx.hbs create mode 100644 packages/cli/templates/resource/show.tsx.hbs create mode 100644 packages/cli/test/jest.setup.ts create mode 100644 packages/cli/tsconfig.declarations.json create mode 100644 packages/cli/tsconfig.json create mode 100644 packages/cli/tsconfig.test.json create mode 100644 packages/cli/tsup.config.ts create mode 100644 packages/codemod/CHANGELOG.md create mode 100644 packages/codemod/LICENSE create mode 100644 packages/codemod/README.md create mode 100644 packages/codemod/jest.config.js create mode 100644 packages/codemod/package.json create mode 100644 packages/codemod/src/definitions/separated-imports/antd.ts create mode 100644 packages/codemod/src/definitions/separated-imports/chakra.ts create mode 100644 packages/codemod/src/definitions/separated-imports/mantine.ts create mode 100644 packages/codemod/src/definitions/separated-imports/mui.ts create mode 100644 packages/codemod/src/definitions/separated-imports/react-hook-form.ts create mode 100644 packages/codemod/src/definitions/separated-imports/react-query.ts create mode 100644 packages/codemod/src/definitions/separated-imports/react-router-v6.ts create mode 100644 packages/codemod/src/definitions/separated-imports/react-table.ts create mode 100644 packages/codemod/src/helpers/check-antd-version-is-3x.ts create mode 100644 packages/codemod/src/helpers/check-package-lock.ts create mode 100644 packages/codemod/src/helpers/index.ts create mode 100644 packages/codemod/src/helpers/install.ts create mode 100644 packages/codemod/src/helpers/separate-imports.ts create mode 100644 packages/codemod/src/helpers/temp-codemod-config.ts create mode 100644 packages/codemod/src/index.ts create mode 100644 packages/codemod/src/transformations/antd4-to-antd5.ts create mode 100644 packages/codemod/src/transformations/refine1-to-refine2.ts create mode 100644 packages/codemod/src/transformations/refine2-to-refine3.ts create mode 100644 packages/codemod/src/transformations/refine3-to-refine4.ts create mode 100644 packages/codemod/src/transformations/use-data-grid-columns.ts create mode 100644 packages/codemod/src/transformations/v4/add-v3LegacyAuthProviderCompatible-true-to-auth-hooks.ts create mode 100644 packages/codemod/src/transformations/v4/authProvider-to-legacyAuthProvider.ts create mode 100644 packages/codemod/src/transformations/v4/fix-v4-deprecations.ts create mode 100644 packages/codemod/src/transformations/v4/metadata-to-meta.ts create mode 100644 packages/codemod/src/transformations/v4/move-deprecated-access-control.ts create mode 100644 packages/codemod/src/transformations/v4/replace-pankod-imports-with-refinedev.ts create mode 100644 packages/codemod/src/transformations/v4/resourceName-to-resource.ts create mode 100644 packages/codemod/src/transformations/v4/router-to-legacy-router.ts create mode 100644 packages/codemod/src/transformations/v4/separate-imports-antd.ts create mode 100644 packages/codemod/src/transformations/v4/separate-imports-chakra.ts create mode 100644 packages/codemod/src/transformations/v4/separate-imports-mantine.ts create mode 100644 packages/codemod/src/transformations/v4/separate-imports-mui.ts create mode 100644 packages/codemod/src/transformations/v4/separate-imports-react-hook-form.ts create mode 100644 packages/codemod/src/transformations/v4/separate-imports-react-query.ts create mode 100644 packages/codemod/src/transformations/v4/separate-imports-react-router-v6.ts create mode 100644 packages/codemod/src/transformations/v4/separate-imports-react-table.ts create mode 100644 packages/codemod/src/transformations/v4/use-menu-to-core.ts create mode 100644 packages/codemod/test/list.tsx create mode 100644 packages/codemod/tsconfig.json create mode 100644 packages/core/.npmignore create mode 100644 packages/core/.npmrc create mode 100644 packages/core/CHANGELOG.md create mode 100644 packages/core/README.md create mode 100644 packages/core/jest.config.js create mode 100644 packages/core/package.json create mode 100644 packages/core/refine.config.js create mode 100644 packages/core/src/components/authenticated/index.spec.tsx create mode 100644 packages/core/src/components/authenticated/index.tsx create mode 100644 packages/core/src/components/autoSaveIndicator/index.spec.tsx create mode 100644 packages/core/src/components/autoSaveIndicator/index.tsx create mode 100644 packages/core/src/components/canAccess/index.spec.tsx create mode 100644 packages/core/src/components/canAccess/index.tsx create mode 100644 packages/core/src/components/containers/index.ts create mode 100644 packages/core/src/components/containers/refine/index.spec.tsx create mode 100644 packages/core/src/components/containers/refine/index.tsx create mode 100644 packages/core/src/components/gh-banner/index.tsx create mode 100644 packages/core/src/components/gh-banner/styles.ts create mode 100644 packages/core/src/components/index.ts create mode 100644 packages/core/src/components/layoutWrapper/defaultLayout/index.tsx create mode 100644 packages/core/src/components/layoutWrapper/index.spec.tsx create mode 100644 packages/core/src/components/layoutWrapper/index.tsx create mode 100644 packages/core/src/components/pages/auth/components/forgotPassword/index.spec.tsx create mode 100644 packages/core/src/components/pages/auth/components/forgotPassword/index.tsx create mode 100644 packages/core/src/components/pages/auth/components/index.ts create mode 100644 packages/core/src/components/pages/auth/components/login/index.spec.tsx create mode 100644 packages/core/src/components/pages/auth/components/login/index.tsx create mode 100644 packages/core/src/components/pages/auth/components/register/index.spec.tsx create mode 100644 packages/core/src/components/pages/auth/components/register/index.tsx create mode 100644 packages/core/src/components/pages/auth/components/updatePassword/index.spec.tsx create mode 100644 packages/core/src/components/pages/auth/components/updatePassword/index.tsx create mode 100644 packages/core/src/components/pages/auth/index.spec.tsx create mode 100644 packages/core/src/components/pages/auth/index.tsx create mode 100644 packages/core/src/components/pages/error/index.spec.tsx create mode 100644 packages/core/src/components/pages/error/index.tsx create mode 100644 packages/core/src/components/pages/index.tsx create mode 100644 packages/core/src/components/pages/login/index.tsx create mode 100644 packages/core/src/components/pages/ready/index.spec.tsx create mode 100644 packages/core/src/components/pages/ready/index.tsx create mode 100644 packages/core/src/components/pages/welcome/index.spec.tsx create mode 100644 packages/core/src/components/pages/welcome/index.tsx create mode 100644 packages/core/src/components/routeChangeHandler/index.spec.tsx create mode 100644 packages/core/src/components/routeChangeHandler/index.tsx create mode 100644 packages/core/src/components/telemetry/index.spec.tsx create mode 100644 packages/core/src/components/telemetry/index.tsx create mode 100644 packages/core/src/components/undoableQueue/index.spec.tsx create mode 100644 packages/core/src/components/undoableQueue/index.tsx create mode 100644 packages/core/src/contexts/accessControl/IAccessControlContext.ts create mode 100644 packages/core/src/contexts/accessControl/index.tsx create mode 100644 packages/core/src/contexts/auditLog/IAuditLogContext.ts create mode 100644 packages/core/src/contexts/auditLog/index.tsx create mode 100644 packages/core/src/contexts/auth/IAuthContext.ts create mode 100644 packages/core/src/contexts/auth/index.tsx create mode 100644 packages/core/src/contexts/data/IDataContext.ts create mode 100644 packages/core/src/contexts/data/index.spec.ts create mode 100644 packages/core/src/contexts/data/index.tsx create mode 100644 packages/core/src/contexts/legacy-router/IRouterContext.ts create mode 100644 packages/core/src/contexts/legacy-router/index.tsx create mode 100644 packages/core/src/contexts/live/ILiveContext.ts create mode 100644 packages/core/src/contexts/live/index.tsx create mode 100644 packages/core/src/contexts/notification/INotificationContext.ts create mode 100644 packages/core/src/contexts/notification/index.tsx create mode 100644 packages/core/src/contexts/refine/IRefineContext.ts create mode 100644 packages/core/src/contexts/refine/index.tsx create mode 100644 packages/core/src/contexts/resource/IResourceContext.ts create mode 100644 packages/core/src/contexts/resource/index.tsx create mode 100644 packages/core/src/contexts/router-picker/index.tsx create mode 100644 packages/core/src/contexts/router/index.tsx create mode 100644 packages/core/src/contexts/translation/ITranslationContext.ts create mode 100644 packages/core/src/contexts/translation/index.spec.tsx create mode 100644 packages/core/src/contexts/translation/index.tsx create mode 100644 packages/core/src/contexts/undoableQueue/IUndoableQueueContext.ts create mode 100644 packages/core/src/contexts/undoableQueue/actionTypes.ts create mode 100644 packages/core/src/contexts/undoableQueue/index.spec.tsx create mode 100644 packages/core/src/contexts/undoableQueue/index.ts create mode 100644 packages/core/src/contexts/undoableQueue/undoableQueueContext.tsx create mode 100644 packages/core/src/contexts/unsavedWarn/IUnsavedWarnContext.ts create mode 100644 packages/core/src/contexts/unsavedWarn/index.tsx create mode 100644 packages/core/src/definitions/helpers/check-router-prop-misuse/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/check-router-prop-misuse/index.ts create mode 100644 packages/core/src/definitions/helpers/flatten-object-keys/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/flatten-object-keys/index.ts create mode 100644 packages/core/src/definitions/helpers/generateDocumentTitle/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/generateDocumentTitle/index.ts create mode 100644 packages/core/src/definitions/helpers/handleMultiple/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/handleMultiple/index.ts create mode 100644 packages/core/src/definitions/helpers/handlePaginationParams/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/handlePaginationParams/index.ts create mode 100644 packages/core/src/definitions/helpers/handleRefineOptions/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/handleRefineOptions/index.ts create mode 100644 packages/core/src/definitions/helpers/handleUseParams/index.spec.tsx create mode 100644 packages/core/src/definitions/helpers/handleUseParams/index.tsx create mode 100644 packages/core/src/definitions/helpers/hasPermission/index.spec.tsx create mode 100644 packages/core/src/definitions/helpers/hasPermission/index.ts create mode 100644 packages/core/src/definitions/helpers/humanizeString/index.spec.tsx create mode 100644 packages/core/src/definitions/helpers/humanizeString/index.ts create mode 100644 packages/core/src/definitions/helpers/importCSVMapper/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/importCSVMapper/index.ts create mode 100644 packages/core/src/definitions/helpers/index.ts create mode 100644 packages/core/src/definitions/helpers/keys/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/keys/index.ts create mode 100644 packages/core/src/definitions/helpers/legacy-resource-transform/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/legacy-resource-transform/index.ts create mode 100644 packages/core/src/definitions/helpers/menu/__tests__/create-resource-key.test.ts create mode 100644 packages/core/src/definitions/helpers/menu/__tests__/create-tree.test.ts create mode 100644 packages/core/src/definitions/helpers/menu/create-resource-key.ts create mode 100644 packages/core/src/definitions/helpers/menu/create-tree.ts create mode 100644 packages/core/src/definitions/helpers/pick-resource/index.test.ts create mode 100644 packages/core/src/definitions/helpers/pick-resource/index.ts create mode 100644 packages/core/src/definitions/helpers/pickDataProvider/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/pickDataProvider/index.ts create mode 100644 packages/core/src/definitions/helpers/pickNotDeprecated/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/pickNotDeprecated/index.ts create mode 100644 packages/core/src/definitions/helpers/property-path-to-array/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/property-path-to-array/index.ts create mode 100644 packages/core/src/definitions/helpers/queryKeys/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/queryKeys/index.ts create mode 100644 packages/core/src/definitions/helpers/redirectPage/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/redirectPage/index.ts create mode 100644 packages/core/src/definitions/helpers/routeGenerator/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/routeGenerator/index.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/check-by-segments.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/compose-route.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/get-action-routes-from-resource.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/get-default-action-path.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/get-parent-prefix-for-resource.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/get-parent-resource.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/is-parameter.test.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/is-segment-counts-same.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/match-resource-from-route.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/pick-matched-route.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/pick-route-params.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/prepare-route-params.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/remove-leading-trailing-slashes.ts create mode 100644 packages/core/src/definitions/helpers/router/__tests__/split-to-segments.ts create mode 100644 packages/core/src/definitions/helpers/router/check-by-segments.ts create mode 100644 packages/core/src/definitions/helpers/router/compose-route.ts create mode 100644 packages/core/src/definitions/helpers/router/get-action-routes-from-resource.ts create mode 100644 packages/core/src/definitions/helpers/router/get-default-action-path.ts create mode 100644 packages/core/src/definitions/helpers/router/get-parent-prefix-for-resource.ts create mode 100644 packages/core/src/definitions/helpers/router/get-parent-resource.ts create mode 100644 packages/core/src/definitions/helpers/router/index.ts create mode 100644 packages/core/src/definitions/helpers/router/is-parameter.ts create mode 100644 packages/core/src/definitions/helpers/router/is-segment-counts-same.ts create mode 100644 packages/core/src/definitions/helpers/router/match-resource-from-route.ts create mode 100644 packages/core/src/definitions/helpers/router/pick-matched-route.ts create mode 100644 packages/core/src/definitions/helpers/router/pick-route-params.ts create mode 100644 packages/core/src/definitions/helpers/router/prepare-route-params.ts create mode 100644 packages/core/src/definitions/helpers/router/remove-leading-trailing-slashes.ts create mode 100644 packages/core/src/definitions/helpers/router/split-to-segments.ts create mode 100644 packages/core/src/definitions/helpers/safe-translate/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/safe-translate/index.ts create mode 100644 packages/core/src/definitions/helpers/sanitize-resource/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/sanitize-resource/index.ts create mode 100644 packages/core/src/definitions/helpers/sequentialPromises/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/sequentialPromises/index.ts create mode 100644 packages/core/src/definitions/helpers/treeView/createTreeView/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/treeView/createTreeView/index.ts create mode 100644 packages/core/src/definitions/helpers/treeView/index.ts create mode 100644 packages/core/src/definitions/helpers/useActiveAuthProvider/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/useActiveAuthProvider/index.ts create mode 100644 packages/core/src/definitions/helpers/useInfinitePagination/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/useInfinitePagination/index.ts create mode 100644 packages/core/src/definitions/helpers/useMediaQuery/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/useMediaQuery/index.ts create mode 100644 packages/core/src/definitions/helpers/useUserFriendlyName/index.spec.tsx create mode 100644 packages/core/src/definitions/helpers/useUserFriendlyName/index.ts create mode 100644 packages/core/src/definitions/helpers/userFriendlyResourceName/index.spec.ts create mode 100644 packages/core/src/definitions/helpers/userFriendlyResourceName/index.ts create mode 100644 packages/core/src/definitions/helpers/userFriendlySeconds/index.spec.tsx create mode 100644 packages/core/src/definitions/helpers/userFriendlySeconds/index.ts create mode 100644 packages/core/src/definitions/index.ts create mode 100644 packages/core/src/definitions/table/__snapshots__/index.spec.ts.snap create mode 100644 packages/core/src/definitions/table/index.spec.ts create mode 100644 packages/core/src/definitions/table/index.ts create mode 100644 packages/core/src/definitions/upload/file2Base64/index.spec.ts create mode 100644 packages/core/src/definitions/upload/file2Base64/index.ts create mode 100644 packages/core/src/definitions/upload/index.ts create mode 100644 packages/core/src/hooks/accessControl/index.ts create mode 100644 packages/core/src/hooks/accessControl/useCan/index.spec.tsx create mode 100644 packages/core/src/hooks/accessControl/useCan/index.ts create mode 100644 packages/core/src/hooks/accessControl/useCanWithoutCache.ts create mode 100644 packages/core/src/hooks/auditLog/index.ts create mode 100644 packages/core/src/hooks/auditLog/useLog/index.spec.ts create mode 100644 packages/core/src/hooks/auditLog/useLog/index.ts create mode 100644 packages/core/src/hooks/auditLog/useLogList/index.spec.ts create mode 100644 packages/core/src/hooks/auditLog/useLogList/index.ts create mode 100644 packages/core/src/hooks/auth/index.ts create mode 100644 packages/core/src/hooks/auth/useForgotPassword/index.spec.ts create mode 100644 packages/core/src/hooks/auth/useForgotPassword/index.ts create mode 100644 packages/core/src/hooks/auth/useGetIdentity/index.spec.ts create mode 100644 packages/core/src/hooks/auth/useGetIdentity/index.ts create mode 100644 packages/core/src/hooks/auth/useInvalidateAuthStore/index.ts create mode 100644 packages/core/src/hooks/auth/useIsAuthenticated/index.spec.ts create mode 100644 packages/core/src/hooks/auth/useIsAuthenticated/index.ts create mode 100644 packages/core/src/hooks/auth/useIsExistAuthentication/index.spec.ts create mode 100644 packages/core/src/hooks/auth/useIsExistAuthentication/index.ts create mode 100644 packages/core/src/hooks/auth/useLogin/index.spec.ts create mode 100644 packages/core/src/hooks/auth/useLogin/index.ts create mode 100644 packages/core/src/hooks/auth/useLogout/index.spec.ts create mode 100644 packages/core/src/hooks/auth/useLogout/index.ts create mode 100644 packages/core/src/hooks/auth/useOnError/index.spec.ts create mode 100644 packages/core/src/hooks/auth/useOnError/index.ts create mode 100644 packages/core/src/hooks/auth/usePermissions/index.spec.ts create mode 100644 packages/core/src/hooks/auth/usePermissions/index.ts create mode 100644 packages/core/src/hooks/auth/useRegister/index.spec.ts create mode 100644 packages/core/src/hooks/auth/useRegister/index.ts create mode 100644 packages/core/src/hooks/auth/useUpdatePassword/index.spec.ts create mode 100644 packages/core/src/hooks/auth/useUpdatePassword/index.ts create mode 100644 packages/core/src/hooks/breadcrumb/index.spec.tsx create mode 100644 packages/core/src/hooks/breadcrumb/index.ts create mode 100644 packages/core/src/hooks/data/index.ts create mode 100644 packages/core/src/hooks/data/useApiUrl.spec.tsx create mode 100644 packages/core/src/hooks/data/useApiUrl.ts create mode 100644 packages/core/src/hooks/data/useCreate.spec.tsx create mode 100644 packages/core/src/hooks/data/useCreate.ts create mode 100644 packages/core/src/hooks/data/useCreateMany.spec.tsx create mode 100644 packages/core/src/hooks/data/useCreateMany.ts create mode 100644 packages/core/src/hooks/data/useCustom.spec.tsx create mode 100644 packages/core/src/hooks/data/useCustom.ts create mode 100644 packages/core/src/hooks/data/useCustomMutation.spec.tsx create mode 100644 packages/core/src/hooks/data/useCustomMutation.ts create mode 100644 packages/core/src/hooks/data/useDataProvider.spec.tsx create mode 100644 packages/core/src/hooks/data/useDataProvider.tsx create mode 100644 packages/core/src/hooks/data/useDelete.spec.tsx create mode 100644 packages/core/src/hooks/data/useDelete.ts create mode 100644 packages/core/src/hooks/data/useDeleteMany.spec.tsx create mode 100644 packages/core/src/hooks/data/useDeleteMany.ts create mode 100644 packages/core/src/hooks/data/useInfiniteList.spec.tsx create mode 100644 packages/core/src/hooks/data/useInfiniteList.ts create mode 100644 packages/core/src/hooks/data/useList.spec.tsx create mode 100644 packages/core/src/hooks/data/useList.ts create mode 100644 packages/core/src/hooks/data/useMany.spec.tsx create mode 100644 packages/core/src/hooks/data/useMany.ts create mode 100644 packages/core/src/hooks/data/useOne.spec.tsx create mode 100644 packages/core/src/hooks/data/useOne.ts create mode 100644 packages/core/src/hooks/data/useUpdate.spec.tsx create mode 100644 packages/core/src/hooks/data/useUpdate.ts create mode 100644 packages/core/src/hooks/data/useUpdateMany.spec.tsx create mode 100644 packages/core/src/hooks/data/useUpdateMany.ts create mode 100644 packages/core/src/hooks/deepMemo/index.spec.tsx create mode 100644 packages/core/src/hooks/deepMemo/index.tsx create mode 100644 packages/core/src/hooks/export/csvDownload.interface.ts create mode 100644 packages/core/src/hooks/export/index.spec.ts create mode 100644 packages/core/src/hooks/export/index.ts create mode 100644 packages/core/src/hooks/form/index.ts create mode 100644 packages/core/src/hooks/form/useForm.spec.tsx create mode 100644 packages/core/src/hooks/form/useForm.ts create mode 100644 packages/core/src/hooks/import/index.spec.tsx create mode 100644 packages/core/src/hooks/import/index.tsx create mode 100644 packages/core/src/hooks/index.ts create mode 100644 packages/core/src/hooks/invalidate/index.spec.tsx create mode 100644 packages/core/src/hooks/invalidate/index.tsx create mode 100644 packages/core/src/hooks/legacy-router/index.ts create mode 100644 packages/core/src/hooks/legacy-router/useRouterContext.ts create mode 100644 packages/core/src/hooks/live/index.ts create mode 100644 packages/core/src/hooks/live/useLiveMode/index.spec.ts create mode 100644 packages/core/src/hooks/live/useLiveMode/index.ts create mode 100644 packages/core/src/hooks/live/usePublish/index.spec.ts create mode 100644 packages/core/src/hooks/live/usePublish/index.ts create mode 100644 packages/core/src/hooks/live/useResourceSubscription/index.spec.ts create mode 100644 packages/core/src/hooks/live/useResourceSubscription/index.ts create mode 100644 packages/core/src/hooks/live/useSubscription/index.spec.ts create mode 100644 packages/core/src/hooks/live/useSubscription/index.ts create mode 100644 packages/core/src/hooks/memoized/index.spec.tsx create mode 100644 packages/core/src/hooks/memoized/index.tsx create mode 100644 packages/core/src/hooks/menu/index.ts create mode 100644 packages/core/src/hooks/menu/useMenu.spec.tsx create mode 100644 packages/core/src/hooks/menu/useMenu.tsx create mode 100644 packages/core/src/hooks/modal/index.ts create mode 100644 packages/core/src/hooks/modal/useModal/index.spec.ts create mode 100644 packages/core/src/hooks/modal/useModal/index.tsx create mode 100644 packages/core/src/hooks/navigation/index.spec.tsx create mode 100644 packages/core/src/hooks/navigation/index.ts create mode 100644 packages/core/src/hooks/notification/index.ts create mode 100644 packages/core/src/hooks/notification/useCancelNotification/index.spec.tsx create mode 100644 packages/core/src/hooks/notification/useCancelNotification/index.tsx create mode 100644 packages/core/src/hooks/notification/useHandleNotification/index.spec.tsx create mode 100644 packages/core/src/hooks/notification/useHandleNotification/index.ts create mode 100644 packages/core/src/hooks/notification/useNotification/index.ts create mode 100644 packages/core/src/hooks/redirection/index.spec.tsx create mode 100644 packages/core/src/hooks/redirection/index.ts create mode 100644 packages/core/src/hooks/refine/index.ts create mode 100644 packages/core/src/hooks/refine/useMutationMode.ts create mode 100644 packages/core/src/hooks/refine/useRefineContext.ts create mode 100644 packages/core/src/hooks/refine/useSyncWithLocation.ts create mode 100644 packages/core/src/hooks/refine/useTitle.index.spec.tsx create mode 100644 packages/core/src/hooks/refine/useTitle.tsx create mode 100644 packages/core/src/hooks/refine/useWarnAboutChange/index.spec.tsx create mode 100644 packages/core/src/hooks/refine/useWarnAboutChange/index.ts create mode 100644 packages/core/src/hooks/resource/index.ts create mode 100644 packages/core/src/hooks/resource/useResource/index.spec.tsx create mode 100644 packages/core/src/hooks/resource/useResource/index.ts create mode 100644 packages/core/src/hooks/resource/useResourceWithRoute/index.spec.tsx create mode 100644 packages/core/src/hooks/resource/useResourceWithRoute/index.ts create mode 100644 packages/core/src/hooks/router/index.ts create mode 100644 packages/core/src/hooks/router/use-back/index.spec.tsx create mode 100644 packages/core/src/hooks/router/use-back/index.tsx create mode 100644 packages/core/src/hooks/router/use-get-to-path/index.spec.ts create mode 100644 packages/core/src/hooks/router/use-get-to-path/index.ts create mode 100644 packages/core/src/hooks/router/use-go/index.spec.tsx create mode 100644 packages/core/src/hooks/router/use-go/index.tsx create mode 100644 packages/core/src/hooks/router/use-link/index.spec.tsx create mode 100644 packages/core/src/hooks/router/use-link/index.tsx create mode 100644 packages/core/src/hooks/router/use-parse/index.spec.tsx create mode 100644 packages/core/src/hooks/router/use-parse/index.tsx create mode 100644 packages/core/src/hooks/router/use-parsed/index.spec.ts create mode 100644 packages/core/src/hooks/router/use-parsed/index.tsx create mode 100644 packages/core/src/hooks/router/use-router-misuse-warning/index.spec.ts create mode 100644 packages/core/src/hooks/router/use-router-misuse-warning/index.ts create mode 100644 packages/core/src/hooks/router/use-to-path/index.spec.ts create mode 100644 packages/core/src/hooks/router/use-to-path/index.ts create mode 100644 packages/core/src/hooks/show/index.ts create mode 100644 packages/core/src/hooks/show/useShow.spec.tsx create mode 100644 packages/core/src/hooks/show/useShow.ts create mode 100644 packages/core/src/hooks/translate/index.ts create mode 100644 packages/core/src/hooks/translate/useGetLocale.spec.tsx create mode 100644 packages/core/src/hooks/translate/useGetLocale.ts create mode 100644 packages/core/src/hooks/translate/useSetLocale.spec.tsx create mode 100644 packages/core/src/hooks/translate/useSetLocale.ts create mode 100644 packages/core/src/hooks/translate/useTranslate.spec.tsx create mode 100644 packages/core/src/hooks/translate/useTranslate.ts create mode 100644 packages/core/src/hooks/useKeys/index.tsx create mode 100644 packages/core/src/hooks/useLoadingOvertime/index.spec.tsx create mode 100644 packages/core/src/hooks/useLoadingOvertime/index.ts create mode 100644 packages/core/src/hooks/useMeta/index.spec.tsx create mode 100644 packages/core/src/hooks/useMeta/index.ts create mode 100644 packages/core/src/hooks/useSelect/index.spec.ts create mode 100644 packages/core/src/hooks/useSelect/index.ts create mode 100644 packages/core/src/hooks/useTable/index.spec.ts create mode 100644 packages/core/src/hooks/useTable/index.ts create mode 100644 packages/core/src/hooks/useTelemetryData/index.spec.ts create mode 100644 packages/core/src/hooks/useTelemetryData/index.ts create mode 100644 packages/core/src/index.tsx create mode 100644 packages/core/src/interfaces/actions.ts create mode 100644 packages/core/src/interfaces/auditLog/index.ts create mode 100644 packages/core/src/interfaces/auditLog/logData.ts create mode 100644 packages/core/src/interfaces/auth.tsx create mode 100644 packages/core/src/interfaces/autoSave.ts create mode 100644 packages/core/src/interfaces/bindings/access-control.ts create mode 100644 packages/core/src/interfaces/bindings/auth.ts create mode 100644 packages/core/src/interfaces/bindings/data.ts create mode 100644 packages/core/src/interfaces/bindings/i18n.ts create mode 100644 packages/core/src/interfaces/bindings/index.ts create mode 100644 packages/core/src/interfaces/bindings/live.ts create mode 100644 packages/core/src/interfaces/bindings/notifications.ts create mode 100644 packages/core/src/interfaces/bindings/resource.ts create mode 100644 packages/core/src/interfaces/bindings/router.ts create mode 100644 packages/core/src/interfaces/customComponents.ts create mode 100644 packages/core/src/interfaces/errors/HttpError.ts create mode 100644 packages/core/src/interfaces/errors/RefineError.ts create mode 100644 packages/core/src/interfaces/errors/index.ts create mode 100644 packages/core/src/interfaces/form-url-params.ts create mode 100644 packages/core/src/interfaces/index.ts create mode 100644 packages/core/src/interfaces/live/LiveEvent.ts create mode 100644 packages/core/src/interfaces/live/LiveModeProps.ts create mode 100644 packages/core/src/interfaces/live/index.ts create mode 100644 packages/core/src/interfaces/mapDataFn.ts create mode 100644 packages/core/src/interfaces/metaData/fields.ts create mode 100644 packages/core/src/interfaces/metaData/graphqlQueryOptions.ts create mode 100644 packages/core/src/interfaces/metaData/index.ts create mode 100644 packages/core/src/interfaces/metaData/metaDataQuery.ts create mode 100644 packages/core/src/interfaces/metaData/metaQuery.ts create mode 100644 packages/core/src/interfaces/metaData/nestedField.ts create mode 100644 packages/core/src/interfaces/metaData/queryBuilderOptions.ts create mode 100644 packages/core/src/interfaces/metaData/variableOptions.ts create mode 100644 packages/core/src/interfaces/mutationMode.ts create mode 100644 packages/core/src/interfaces/notification.ts create mode 100644 packages/core/src/interfaces/optimistic-update-map.ts create mode 100644 packages/core/src/interfaces/prettify.ts create mode 100644 packages/core/src/interfaces/queryKey.ts create mode 100644 packages/core/src/interfaces/resourceErrorRouterParams.ts create mode 100644 packages/core/src/interfaces/resourceRouterParams.ts create mode 100644 packages/core/src/interfaces/successErrorNotification.ts create mode 100644 packages/core/src/interfaces/telemetry.ts create mode 100644 packages/core/src/interfaces/textTransformers.ts create mode 100644 packages/core/test/dataMocks.ts create mode 100644 packages/core/test/index.tsx create mode 100644 packages/core/test/jest.setup.ts create mode 100644 packages/core/test/mutation-helpers.ts create mode 100644 packages/core/test/svgTransform.ts create mode 100644 packages/core/tsconfig.declarations.json create mode 100644 packages/core/tsconfig.json create mode 100644 packages/core/tsconfig.test.json create mode 100644 packages/core/tsup.config.ts create mode 100644 packages/create-refine-app/.npmignore create mode 100644 packages/create-refine-app/CHANGELOG.md create mode 100644 packages/create-refine-app/README.md create mode 100644 packages/create-refine-app/jest.config.js create mode 100644 packages/create-refine-app/package.json create mode 100644 packages/create-refine-app/src/example/constants.ts create mode 100644 packages/create-refine-app/src/example/download-and-extract.ts create mode 100644 packages/create-refine-app/src/example/exists-in-repo.ts create mode 100644 packages/create-refine-app/src/example/git-init.ts create mode 100644 packages/create-refine-app/src/example/index.ts create mode 100644 packages/create-refine-app/src/example/install-dependencies.ts create mode 100644 packages/create-refine-app/src/example/make-dir.ts create mode 100644 packages/create-refine-app/src/greeting/index.ts create mode 100644 packages/create-refine-app/src/index.ts create mode 100644 packages/create-refine-app/test/jest.setup.ts create mode 100644 packages/create-refine-app/tsconfig.declarations.json create mode 100644 packages/create-refine-app/tsconfig.json create mode 100644 packages/create-refine-app/tsconfig.test.json create mode 100644 packages/create-refine-app/tsup.config.ts create mode 100644 packages/demo-sidebar/.npmignore create mode 100644 packages/demo-sidebar/CHANGELOG.md create mode 100644 packages/demo-sidebar/LICENSE create mode 100644 packages/demo-sidebar/jest.config.js create mode 100644 packages/demo-sidebar/package.json create mode 100644 packages/demo-sidebar/src/components/DemoSidebar/index.tsx create mode 100644 packages/demo-sidebar/src/components/DemoSidebar/styles.ts create mode 100644 packages/demo-sidebar/src/components/DemoSidebar/types.d.ts create mode 100644 packages/demo-sidebar/src/components/Group/index.tsx create mode 100644 packages/demo-sidebar/src/components/index.ts create mode 100644 packages/demo-sidebar/src/hooks/index.ts create mode 100644 packages/demo-sidebar/src/hooks/useDemoSidebar/index.tsx create mode 100644 packages/demo-sidebar/src/index.tsx create mode 100644 packages/demo-sidebar/src/interfaces/DemoSidebarProps.d.ts create mode 100644 packages/demo-sidebar/test/jest.setup.ts create mode 100644 packages/demo-sidebar/tsconfig.declarations.json create mode 100644 packages/demo-sidebar/tsconfig.json create mode 100644 packages/demo-sidebar/tsconfig.test.json create mode 100644 packages/demo-sidebar/tsup.config.ts create mode 100644 packages/devtools-internal/.npmignore create mode 100644 packages/devtools-internal/CHANGELOG.md create mode 100644 packages/devtools-internal/LICENSE create mode 100644 packages/devtools-internal/README.md create mode 100644 packages/devtools-internal/jest.config.js create mode 100644 packages/devtools-internal/package.json create mode 100644 packages/devtools-internal/src/clean-stack.ts create mode 100644 packages/devtools-internal/src/constants.ts create mode 100644 packages/devtools-internal/src/create-identifier.ts create mode 100644 packages/devtools-internal/src/define.d.ts create mode 100644 packages/devtools-internal/src/get-package-name-from-filename.ts create mode 100644 packages/devtools-internal/src/get-resource-path.ts create mode 100644 packages/devtools-internal/src/get-trace.ts create mode 100644 packages/devtools-internal/src/get-xray.ts create mode 100644 packages/devtools-internal/src/index.ts create mode 100644 packages/devtools-internal/src/is-refine-stack.ts create mode 100644 packages/devtools-internal/src/listeners.ts create mode 100644 packages/devtools-internal/src/use-query-subscription.tsx create mode 100644 packages/devtools-internal/tsconfig.declarations.json create mode 100644 packages/devtools-internal/tsconfig.json create mode 100644 packages/devtools-internal/tsconfig.test.json create mode 100644 packages/devtools-internal/tsup.config.ts create mode 100644 packages/devtools-server/.gitignore create mode 100644 packages/devtools-server/.npmignore create mode 100644 packages/devtools-server/CHANGELOG.md create mode 100644 packages/devtools-server/FEED.md create mode 100644 packages/devtools-server/LICENSE create mode 100644 packages/devtools-server/README.md create mode 100644 packages/devtools-server/jest.config.js create mode 100644 packages/devtools-server/package.json create mode 100644 packages/devtools-server/src/cli.ts create mode 100644 packages/devtools-server/src/client/index.html create mode 100644 packages/devtools-server/src/client/index.tsx create mode 100644 packages/devtools-server/src/client/vite.config.ts create mode 100644 packages/devtools-server/src/constants.ts create mode 100644 packages/devtools-server/src/create-db.ts create mode 100644 packages/devtools-server/src/define.d.ts create mode 100644 packages/devtools-server/src/feed/get-feed.ts create mode 100644 packages/devtools-server/src/index.ts create mode 100644 packages/devtools-server/src/packages/get-all-packages.ts create mode 100644 packages/devtools-server/src/packages/get-available-packages.ts create mode 100644 packages/devtools-server/src/packages/get-changelog.ts create mode 100644 packages/devtools-server/src/packages/get-documentation.ts create mode 100644 packages/devtools-server/src/packages/get-installed-package-data.ts create mode 100644 packages/devtools-server/src/packages/get-installed-package-json-path.ts create mode 100644 packages/devtools-server/src/packages/get-latest-package-data.ts create mode 100644 packages/devtools-server/src/packages/get-packages-from-package-json.ts create mode 100644 packages/devtools-server/src/packages/update-package.ts create mode 100644 packages/devtools-server/src/project-id/get-project-id-from-package-json.ts create mode 100644 packages/devtools-server/src/project-id/set-project-id-to-package-json.ts create mode 100644 packages/devtools-server/src/project-id/set-project-id-to-refine-component.ts create mode 100644 packages/devtools-server/src/project-id/transform.ts create mode 100644 packages/devtools-server/src/project-id/update-project-id.ts create mode 100644 packages/devtools-server/src/reload-on-change.ts create mode 100644 packages/devtools-server/src/serve-api.ts create mode 100644 packages/devtools-server/src/serve-client.ts create mode 100644 packages/devtools-server/src/serve-open-in-editor.ts create mode 100644 packages/devtools-server/src/serve-proxy.ts create mode 100644 packages/devtools-server/src/serve-ws.ts create mode 100644 packages/devtools-server/src/setup-server.ts create mode 100644 packages/devtools-server/tsconfig.declarations.json create mode 100644 packages/devtools-server/tsconfig.json create mode 100644 packages/devtools-server/tsconfig.test.json create mode 100644 packages/devtools-server/tsup.config.ts create mode 100644 packages/devtools-shared/.npmignore create mode 100644 packages/devtools-shared/CHANGELOG.md create mode 100644 packages/devtools-shared/LICENSE create mode 100644 packages/devtools-shared/README.md create mode 100644 packages/devtools-shared/jest.config.js create mode 100644 packages/devtools-shared/package.json create mode 100644 packages/devtools-shared/src/context.tsx create mode 100644 packages/devtools-shared/src/event-types.ts create mode 100644 packages/devtools-shared/src/feed.ts create mode 100644 packages/devtools-shared/src/index.ts create mode 100644 packages/devtools-shared/src/package.ts create mode 100644 packages/devtools-shared/src/receive.ts create mode 100644 packages/devtools-shared/src/scopes.ts create mode 100644 packages/devtools-shared/src/send.ts create mode 100644 packages/devtools-shared/src/trace.ts create mode 100644 packages/devtools-shared/tsconfig.declarations.json create mode 100644 packages/devtools-shared/tsconfig.json create mode 100644 packages/devtools-shared/tsconfig.test.json create mode 100644 packages/devtools-shared/tsup.config.ts create mode 100644 packages/devtools-ui/.npmignore create mode 100644 packages/devtools-ui/CHANGELOG.md create mode 100644 packages/devtools-ui/LICENSE create mode 100644 packages/devtools-ui/README.md create mode 100644 packages/devtools-ui/jest.config.js create mode 100644 packages/devtools-ui/package.json create mode 100644 packages/devtools-ui/postcss.config.js create mode 100644 packages/devtools-ui/src/components/active-item-background.tsx create mode 100644 packages/devtools-ui/src/components/add-package-drawer.tsx create mode 100644 packages/devtools-ui/src/components/add-package.item.tsx create mode 100644 packages/devtools-ui/src/components/authenticated.tsx create mode 100644 packages/devtools-ui/src/components/button.tsx create mode 100644 packages/devtools-ui/src/components/checkbox-group.tsx create mode 100644 packages/devtools-ui/src/components/coming-soon-text.tsx create mode 100644 packages/devtools-ui/src/components/feature-slide.tsx create mode 100644 packages/devtools-ui/src/components/feed-item.tsx create mode 100644 packages/devtools-ui/src/components/feed.tsx create mode 100644 packages/devtools-ui/src/components/filter-field.tsx create mode 100644 packages/devtools-ui/src/components/filter-input.tsx create mode 100644 packages/devtools-ui/src/components/header-auth-status.tsx create mode 100644 packages/devtools-ui/src/components/header.tsx create mode 100644 packages/devtools-ui/src/components/highlight.tsx create mode 100644 packages/devtools-ui/src/components/icons/arrow-circle-right.tsx create mode 100644 packages/devtools-ui/src/components/icons/calendar.tsx create mode 100644 packages/devtools-ui/src/components/icons/chatbot.tsx create mode 100644 packages/devtools-ui/src/components/icons/check-alt.tsx create mode 100644 packages/devtools-ui/src/components/icons/check.tsx create mode 100644 packages/devtools-ui/src/components/icons/checkbox-empty.tsx create mode 100644 packages/devtools-ui/src/components/icons/checkbox-filled.tsx create mode 100644 packages/devtools-ui/src/components/icons/chevron-down.tsx create mode 100644 packages/devtools-ui/src/components/icons/close.tsx create mode 100644 packages/devtools-ui/src/components/icons/contact.tsx create mode 100644 packages/devtools-ui/src/components/icons/copy.tsx create mode 100644 packages/devtools-ui/src/components/icons/filter.tsx create mode 100644 packages/devtools-ui/src/components/icons/github.tsx create mode 100644 packages/devtools-ui/src/components/icons/google.tsx create mode 100644 packages/devtools-ui/src/components/icons/hidden-items-bg.tsx create mode 100644 packages/devtools-ui/src/components/icons/horizontal-dots.tsx create mode 100644 packages/devtools-ui/src/components/icons/hourglass.tsx create mode 100644 packages/devtools-ui/src/components/icons/inferencer-preview.tsx create mode 100644 packages/devtools-ui/src/components/icons/info.tsx create mode 100644 packages/devtools-ui/src/components/icons/logo.tsx create mode 100644 packages/devtools-ui/src/components/icons/maximize.tsx create mode 100644 packages/devtools-ui/src/components/icons/monitor.tsx create mode 100644 packages/devtools-ui/src/components/icons/notification.tsx create mode 100644 packages/devtools-ui/src/components/icons/options.tsx create mode 100644 packages/devtools-ui/src/components/icons/overview.tsx create mode 100644 packages/devtools-ui/src/components/icons/package-overview.tsx create mode 100644 packages/devtools-ui/src/components/icons/playground.tsx create mode 100644 packages/devtools-ui/src/components/icons/plus-circle.tsx create mode 100644 packages/devtools-ui/src/components/icons/resize-handle.tsx create mode 100644 packages/devtools-ui/src/components/icons/resource-viewer.tsx create mode 100644 packages/devtools-ui/src/components/icons/search.tsx create mode 100644 packages/devtools-ui/src/components/icons/settings.tsx create mode 100644 packages/devtools-ui/src/components/icons/sidebar-active.tsx create mode 100644 packages/devtools-ui/src/components/icons/sliding-background.tsx create mode 100644 packages/devtools-ui/src/components/icons/snippets.tsx create mode 100644 packages/devtools-ui/src/components/icons/ticket.tsx create mode 100644 packages/devtools-ui/src/components/icons/update.tsx create mode 100644 packages/devtools-ui/src/components/icons/warning.tsx create mode 100644 packages/devtools-ui/src/components/initial-layout.tsx create mode 100644 packages/devtools-ui/src/components/input.tsx create mode 100644 packages/devtools-ui/src/components/json-viewer.tsx create mode 100644 packages/devtools-ui/src/components/layout.tsx create mode 100644 packages/devtools-ui/src/components/location-change-handler.tsx create mode 100644 packages/devtools-ui/src/components/modal.tsx create mode 100644 packages/devtools-ui/src/components/monitor-applied-filter-group.tsx create mode 100644 packages/devtools-ui/src/components/monitor-details.tsx create mode 100644 packages/devtools-ui/src/components/monitor-filters.tsx create mode 100644 packages/devtools-ui/src/components/monitor-highlight-handler.tsx create mode 100644 packages/devtools-ui/src/components/monitor-table.tsx create mode 100644 packages/devtools-ui/src/components/onboarded.tsx create mode 100644 packages/devtools-ui/src/components/owners.tsx create mode 100644 packages/devtools-ui/src/components/package-item.tsx create mode 100644 packages/devtools-ui/src/components/packages.tsx create mode 100644 packages/devtools-ui/src/components/project-id-fix-banner.tsx create mode 100644 packages/devtools-ui/src/components/project-id-fix-modal.tsx create mode 100644 packages/devtools-ui/src/components/raffle-handler.tsx create mode 100644 packages/devtools-ui/src/components/relative-time-value.tsx create mode 100644 packages/devtools-ui/src/components/resizable-pane.tsx create mode 100644 packages/devtools-ui/src/components/resource-value.tsx create mode 100644 packages/devtools-ui/src/components/select.tsx create mode 100644 packages/devtools-ui/src/components/sidebar.tsx create mode 100644 packages/devtools-ui/src/components/status.tsx create mode 100644 packages/devtools-ui/src/components/trace-list.tsx create mode 100644 packages/devtools-ui/src/devtools.tsx create mode 100644 packages/devtools-ui/src/hooks/use-local-storage.test.ts create mode 100644 packages/devtools-ui/src/hooks/use-local-storage.ts create mode 100644 packages/devtools-ui/src/index.ts create mode 100644 packages/devtools-ui/src/interfaces/activity.ts create mode 100644 packages/devtools-ui/src/interfaces/api.ts create mode 100644 packages/devtools-ui/src/pages/after-login.tsx create mode 100644 packages/devtools-ui/src/pages/login.tsx create mode 100644 packages/devtools-ui/src/pages/monitor.tsx create mode 100644 packages/devtools-ui/src/pages/onboarding.tsx create mode 100644 packages/devtools-ui/src/pages/overview.tsx create mode 100644 packages/devtools-ui/src/reload-on-changes.tsx create mode 100644 packages/devtools-ui/src/style.css create mode 100644 packages/devtools-ui/src/utils/auth.ts create mode 100644 packages/devtools-ui/src/utils/clean-file-path/index.test.ts create mode 100644 packages/devtools-ui/src/utils/clean-file-path/index.ts create mode 100644 packages/devtools-ui/src/utils/exclude-keys.ts create mode 100644 packages/devtools-ui/src/utils/get-initials.ts create mode 100644 packages/devtools-ui/src/utils/get-owners.ts create mode 100644 packages/devtools-ui/src/utils/get-resource-value.ts create mode 100644 packages/devtools-ui/src/utils/last-location.ts create mode 100644 packages/devtools-ui/src/utils/local-storage.test.ts create mode 100644 packages/devtools-ui/src/utils/local-storage.ts create mode 100644 packages/devtools-ui/src/utils/me.ts create mode 100644 packages/devtools-ui/src/utils/ory.ts create mode 100644 packages/devtools-ui/src/utils/packages.ts create mode 100644 packages/devtools-ui/src/utils/project-id.ts create mode 100644 packages/devtools-ui/src/utils/string-to-color.ts create mode 100644 packages/devtools-ui/tailwind.config.js create mode 100644 packages/devtools-ui/test/jest.setup.ts create mode 100644 packages/devtools-ui/tsconfig.declarations.json create mode 100644 packages/devtools-ui/tsconfig.json create mode 100644 packages/devtools-ui/tsconfig.test.json create mode 100644 packages/devtools-ui/tsup.config.ts create mode 100644 packages/devtools/.npmignore create mode 100644 packages/devtools/CHANGELOG.md create mode 100644 packages/devtools/LICENSE create mode 100644 packages/devtools/README.md create mode 100644 packages/devtools/jest.config.js create mode 100644 packages/devtools/package.json create mode 100644 packages/devtools/src/components/devtools-pin.tsx create mode 100644 packages/devtools/src/components/devtools-selector.tsx create mode 100644 packages/devtools/src/components/icons/arrow-union-icon.tsx create mode 100644 packages/devtools/src/components/icons/devtools-icon.tsx create mode 100644 packages/devtools/src/components/icons/resize-handle-icon.tsx create mode 100644 packages/devtools/src/components/icons/selector-button.tsx create mode 100644 packages/devtools/src/components/resizable-pane.tsx create mode 100644 packages/devtools/src/components/selector-box.tsx create mode 100644 packages/devtools/src/components/selector-hint.tsx create mode 100644 packages/devtools/src/define.d.ts create mode 100644 packages/devtools/src/index.ts create mode 100644 packages/devtools/src/interfaces/placement.ts create mode 100644 packages/devtools/src/panel.tsx create mode 100644 packages/devtools/src/provider.tsx create mode 100644 packages/devtools/src/utilities/index.ts create mode 100644 packages/devtools/src/utilities/use-selector.tsx create mode 100644 packages/devtools/tsconfig.declarations.json create mode 100644 packages/devtools/tsconfig.json create mode 100644 packages/devtools/tsconfig.test.json create mode 100644 packages/devtools/tsup.config.ts create mode 100644 packages/graphql/.npmignore create mode 100644 packages/graphql/CHANGELOG.md create mode 100644 packages/graphql/LICENSE create mode 100644 packages/graphql/README.md create mode 100644 packages/graphql/jest.config.js create mode 100644 packages/graphql/package.json create mode 100644 packages/graphql/refine.config.js create mode 100644 packages/graphql/src/dataProvider/index.ts create mode 100644 packages/graphql/src/index.ts create mode 100644 packages/graphql/src/liveProvider/index.ts create mode 100644 packages/graphql/src/utils/generateFilter.ts create mode 100644 packages/graphql/src/utils/generateSort.ts create mode 100644 packages/graphql/src/utils/generateUseListSubscription.ts create mode 100644 packages/graphql/src/utils/generateUseManySubscription.ts create mode 100644 packages/graphql/src/utils/generateUseOneSubscription.ts create mode 100644 packages/graphql/src/utils/index.ts create mode 100644 packages/graphql/test/create/index.mock.ts create mode 100644 packages/graphql/test/create/index.spec.ts create mode 100644 packages/graphql/test/createMany/index.mock.ts create mode 100644 packages/graphql/test/createMany/index.spec.ts create mode 100644 packages/graphql/test/custom/index.mock.ts create mode 100644 packages/graphql/test/custom/index.spec.ts create mode 100644 packages/graphql/test/deleteMany/index.mock.ts create mode 100644 packages/graphql/test/deleteMany/index.spec.ts create mode 100644 packages/graphql/test/deleteOne/index.mock.ts create mode 100644 packages/graphql/test/deleteOne/index.spec.ts create mode 100644 packages/graphql/test/getList/index.mock.ts create mode 100644 packages/graphql/test/getList/index.spec.ts create mode 100644 packages/graphql/test/getMany/index.mock.ts create mode 100644 packages/graphql/test/getMany/index.spec.ts create mode 100644 packages/graphql/test/getOne/index.mock.ts create mode 100644 packages/graphql/test/getOne/index.spec.ts create mode 100644 packages/graphql/test/gqlClient.ts create mode 100644 packages/graphql/test/jest.setup.ts create mode 100644 packages/graphql/test/update/index.mock.ts create mode 100644 packages/graphql/test/update/index.spec.ts create mode 100644 packages/graphql/test/updateMany/index.mock.ts create mode 100644 packages/graphql/test/updateMany/index.spec.ts create mode 100644 packages/graphql/test/utils/generateFilter.spec.ts create mode 100644 packages/graphql/test/utils/generateSort.spec.ts create mode 100644 packages/graphql/test/utils/generateUseListSubscription.spec.ts create mode 100644 packages/graphql/test/utils/generateUseManySubscription.spec.ts create mode 100644 packages/graphql/test/utils/generateUseOneSubscription.spec.ts create mode 100644 packages/graphql/tsconfig.declarations.json create mode 100644 packages/graphql/tsconfig.json create mode 100644 packages/graphql/tsup.config.ts create mode 100644 packages/hasura/.gitignore create mode 100644 packages/hasura/.npmignore create mode 100644 packages/hasura/CHANGELOG.md create mode 100644 packages/hasura/LICENSE create mode 100644 packages/hasura/README.md create mode 100644 packages/hasura/jest.config.js create mode 100644 packages/hasura/package.json create mode 100644 packages/hasura/refine.config.js create mode 100644 packages/hasura/src/dataProvider/index.ts create mode 100644 packages/hasura/src/index.ts create mode 100644 packages/hasura/src/liveProvider/index.ts create mode 100644 packages/hasura/src/utils/camelizeKeys.ts create mode 100644 packages/hasura/src/utils/generateFilters.ts create mode 100644 packages/hasura/src/utils/generateSorting.ts create mode 100644 packages/hasura/src/utils/generateUseListSubscription.ts create mode 100644 packages/hasura/src/utils/generateUseManySubscription.ts create mode 100644 packages/hasura/src/utils/generateUseOneSubscription.ts create mode 100644 packages/hasura/src/utils/index.ts create mode 100644 packages/hasura/src/utils/upperCaseValues.ts create mode 100644 packages/hasura/test/create/index.mock.ts create mode 100644 packages/hasura/test/create/index.spec.ts create mode 100644 packages/hasura/test/createMany/index.mock.ts create mode 100644 packages/hasura/test/createMany/index.spec.ts create mode 100644 packages/hasura/test/custom/index.mock.ts create mode 100644 packages/hasura/test/custom/index.spec.ts create mode 100644 packages/hasura/test/deleteMany/index.mock.ts create mode 100644 packages/hasura/test/deleteMany/index.spec.ts create mode 100644 packages/hasura/test/deleteOne/index.mock.ts create mode 100644 packages/hasura/test/deleteOne/index.spec.ts create mode 100644 packages/hasura/test/getList/index.mock.ts create mode 100644 packages/hasura/test/getList/index.spec.ts create mode 100644 packages/hasura/test/getMany/index.mock.ts create mode 100644 packages/hasura/test/getMany/index.spec.ts create mode 100644 packages/hasura/test/getOne/index.mock.ts create mode 100644 packages/hasura/test/getOne/index.spec.ts create mode 100644 packages/hasura/test/gqlClient.ts create mode 100644 packages/hasura/test/jest.setup.js create mode 100644 packages/hasura/test/update/index.mock.ts create mode 100644 packages/hasura/test/update/index.spec.ts create mode 100644 packages/hasura/test/updateMany/index.mock.ts create mode 100644 packages/hasura/test/updateMany/index.spec.ts create mode 100644 packages/hasura/test/utils/camelizaKeys.spec.ts create mode 100644 packages/hasura/test/utils/generateFilters.spec.ts create mode 100644 packages/hasura/test/utils/generateSorting.spec.ts create mode 100644 packages/hasura/test/utils/generateUseListSubscription.spec.ts create mode 100644 packages/hasura/test/utils/generateUseManySubscription.spec.ts create mode 100644 packages/hasura/test/utils/generateUseOneSubscription.spec.ts create mode 100644 packages/hasura/test/utils/upperCaseValues.spec.ts create mode 100644 packages/hasura/tsconfig.declarations.json create mode 100644 packages/hasura/tsconfig.json create mode 100644 packages/hasura/tsup.config.ts create mode 100644 packages/inferencer/.npmignore create mode 100644 packages/inferencer/.npmrc create mode 100644 packages/inferencer/CHANGELOG.md create mode 100644 packages/inferencer/README.md create mode 100644 packages/inferencer/jest.config.js create mode 100644 packages/inferencer/package.json create mode 100644 packages/inferencer/src/components/code-highlight/index.tsx create mode 100644 packages/inferencer/src/components/index.ts create mode 100644 packages/inferencer/src/components/live/index.tsx create mode 100644 packages/inferencer/src/components/shared-code-viewer/index.tsx create mode 100644 packages/inferencer/src/compose-inferencers/index.test.ts create mode 100644 packages/inferencer/src/compose-inferencers/index.ts create mode 100644 packages/inferencer/src/compose-transformers/index.test.ts create mode 100644 packages/inferencer/src/compose-transformers/index.ts create mode 100644 packages/inferencer/src/create-inferencer/index.tsx create mode 100644 packages/inferencer/src/field-inferencers/array.ts create mode 100644 packages/inferencer/src/field-inferencers/boolean.ts create mode 100644 packages/inferencer/src/field-inferencers/date.test.ts create mode 100644 packages/inferencer/src/field-inferencers/date.ts create mode 100644 packages/inferencer/src/field-inferencers/email.ts create mode 100644 packages/inferencer/src/field-inferencers/image.ts create mode 100644 packages/inferencer/src/field-inferencers/index.ts create mode 100644 packages/inferencer/src/field-inferencers/nullish.ts create mode 100644 packages/inferencer/src/field-inferencers/number.ts create mode 100644 packages/inferencer/src/field-inferencers/object.ts create mode 100644 packages/inferencer/src/field-inferencers/relation.ts create mode 100644 packages/inferencer/src/field-inferencers/richtext.ts create mode 100644 packages/inferencer/src/field-inferencers/text.ts create mode 100644 packages/inferencer/src/field-inferencers/url.ts create mode 100644 packages/inferencer/src/field-transformers/basic-to-relation.ts create mode 100644 packages/inferencer/src/field-transformers/image-by-key.ts create mode 100644 packages/inferencer/src/field-transformers/index.ts create mode 100644 packages/inferencer/src/field-transformers/relation-by-resource.ts create mode 100644 packages/inferencer/src/field-transformers/relation-to-fieldable.ts create mode 100644 packages/inferencer/src/index.tsx create mode 100644 packages/inferencer/src/inferencers/antd/__tests__/__snapshots__/create.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/antd/__tests__/__snapshots__/edit.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/antd/__tests__/__snapshots__/index.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/antd/__tests__/__snapshots__/list.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/antd/__tests__/__snapshots__/show.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/antd/__tests__/create.test.tsx create mode 100644 packages/inferencer/src/inferencers/antd/__tests__/edit.test.tsx create mode 100644 packages/inferencer/src/inferencers/antd/__tests__/index.test.tsx create mode 100644 packages/inferencer/src/inferencers/antd/__tests__/list.test.tsx create mode 100644 packages/inferencer/src/inferencers/antd/__tests__/show.test.tsx create mode 100644 packages/inferencer/src/inferencers/antd/code-viewer.tsx create mode 100644 packages/inferencer/src/inferencers/antd/create.tsx create mode 100644 packages/inferencer/src/inferencers/antd/edit.tsx create mode 100644 packages/inferencer/src/inferencers/antd/error.tsx create mode 100644 packages/inferencer/src/inferencers/antd/index.tsx create mode 100644 packages/inferencer/src/inferencers/antd/list.tsx create mode 100644 packages/inferencer/src/inferencers/antd/loading.tsx create mode 100644 packages/inferencer/src/inferencers/antd/show.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/__tests__/__snapshots__/create.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/chakra-ui/__tests__/__snapshots__/edit.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/chakra-ui/__tests__/__snapshots__/index.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/chakra-ui/__tests__/__snapshots__/list.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/chakra-ui/__tests__/__snapshots__/show.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/chakra-ui/__tests__/create.test.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/__tests__/edit.test.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/__tests__/index.test.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/__tests__/list.test.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/__tests__/show.test.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/code-viewer.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/create.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/edit.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/error.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/index.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/list.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/loading.tsx create mode 100644 packages/inferencer/src/inferencers/chakra-ui/show.tsx create mode 100644 packages/inferencer/src/inferencers/headless/__tests__/__snapshots__/create.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/headless/__tests__/__snapshots__/edit.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/headless/__tests__/__snapshots__/index.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/headless/__tests__/__snapshots__/list.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/headless/__tests__/__snapshots__/show.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/headless/__tests__/create.test.tsx create mode 100644 packages/inferencer/src/inferencers/headless/__tests__/edit.test.tsx create mode 100644 packages/inferencer/src/inferencers/headless/__tests__/index.test.tsx create mode 100644 packages/inferencer/src/inferencers/headless/__tests__/list.test.tsx create mode 100644 packages/inferencer/src/inferencers/headless/__tests__/show.test.tsx create mode 100644 packages/inferencer/src/inferencers/headless/code-viewer.tsx create mode 100644 packages/inferencer/src/inferencers/headless/create.tsx create mode 100644 packages/inferencer/src/inferencers/headless/edit.tsx create mode 100644 packages/inferencer/src/inferencers/headless/error.tsx create mode 100644 packages/inferencer/src/inferencers/headless/index.tsx create mode 100644 packages/inferencer/src/inferencers/headless/list.tsx create mode 100644 packages/inferencer/src/inferencers/headless/loading.tsx create mode 100644 packages/inferencer/src/inferencers/headless/show.tsx create mode 100644 packages/inferencer/src/inferencers/index.ts create mode 100644 packages/inferencer/src/inferencers/mantine/__tests__/__snapshots__/create.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/mantine/__tests__/__snapshots__/edit.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/mantine/__tests__/__snapshots__/index.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/mantine/__tests__/__snapshots__/list.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/mantine/__tests__/__snapshots__/show.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/mantine/__tests__/create.test.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/__tests__/edit.test.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/__tests__/index.test.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/__tests__/list.test.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/__tests__/show.test.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/code-viewer.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/create.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/edit.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/error.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/index.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/list.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/loading.tsx create mode 100644 packages/inferencer/src/inferencers/mantine/show.tsx create mode 100644 packages/inferencer/src/inferencers/mui/__snapshots__/index.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/mui/__tests__/__snapshots__/create.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/mui/__tests__/__snapshots__/edit.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/mui/__tests__/__snapshots__/list.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/mui/__tests__/__snapshots__/show.test.tsx.snap create mode 100644 packages/inferencer/src/inferencers/mui/__tests__/create.test.tsx create mode 100644 packages/inferencer/src/inferencers/mui/__tests__/edit.test.tsx create mode 100644 packages/inferencer/src/inferencers/mui/__tests__/list.test.tsx create mode 100644 packages/inferencer/src/inferencers/mui/__tests__/show.test.tsx create mode 100644 packages/inferencer/src/inferencers/mui/code-viewer.tsx create mode 100644 packages/inferencer/src/inferencers/mui/create.tsx create mode 100644 packages/inferencer/src/inferencers/mui/edit.tsx create mode 100644 packages/inferencer/src/inferencers/mui/error.tsx create mode 100644 packages/inferencer/src/inferencers/mui/index.test.tsx create mode 100644 packages/inferencer/src/inferencers/mui/index.tsx create mode 100644 packages/inferencer/src/inferencers/mui/list.tsx create mode 100644 packages/inferencer/src/inferencers/mui/loading.tsx create mode 100644 packages/inferencer/src/inferencers/mui/show.tsx create mode 100644 packages/inferencer/src/types/index.ts create mode 100644 packages/inferencer/src/use-infer-fetch/index.tsx create mode 100644 packages/inferencer/src/use-relation-fetch/index.ts create mode 100644 packages/inferencer/src/utilities/accessor/index.test.ts create mode 100644 packages/inferencer/src/utilities/accessor/index.ts create mode 100644 packages/inferencer/src/utilities/component-name/index.test.ts create mode 100644 packages/inferencer/src/utilities/component-name/index.ts create mode 100644 packages/inferencer/src/utilities/get-fieldable-keys/index.test.ts create mode 100644 packages/inferencer/src/utilities/get-fieldable-keys/index.ts create mode 100644 packages/inferencer/src/utilities/get-meta-props/index.ts create mode 100644 packages/inferencer/src/utilities/get-option-label/index.test.ts create mode 100644 packages/inferencer/src/utilities/get-option-label/index.ts create mode 100644 packages/inferencer/src/utilities/get-variable-name/index.test.ts create mode 100644 packages/inferencer/src/utilities/get-variable-name/index.ts create mode 100644 packages/inferencer/src/utilities/id-quote-wrapper/index.test.ts create mode 100644 packages/inferencer/src/utilities/id-quote-wrapper/index.ts create mode 100644 packages/inferencer/src/utilities/index.ts create mode 100644 packages/inferencer/src/utilities/is-id-key/index.test.ts create mode 100644 packages/inferencer/src/utilities/is-id-key/index.ts create mode 100644 packages/inferencer/src/utilities/jsx/index.ts create mode 100644 packages/inferencer/src/utilities/no-op/index.ts create mode 100644 packages/inferencer/src/utilities/pick-data-provider/index.tsx create mode 100644 packages/inferencer/src/utilities/pick-inferred-field/index.test.ts create mode 100644 packages/inferencer/src/utilities/pick-inferred-field/index.ts create mode 100644 packages/inferencer/src/utilities/prepare-live-code/index.test.ts create mode 100644 packages/inferencer/src/utilities/prepare-live-code/index.ts create mode 100644 packages/inferencer/src/utilities/prettier-format/index.ts create mode 100644 packages/inferencer/src/utilities/pretty-spaces/index.ts create mode 100644 packages/inferencer/src/utilities/pretty-string/index.test.ts create mode 100644 packages/inferencer/src/utilities/pretty-string/index.ts create mode 100644 packages/inferencer/src/utilities/print-imports/index.test.ts create mode 100644 packages/inferencer/src/utilities/print-imports/index.ts create mode 100644 packages/inferencer/src/utilities/remove-hidden-code/index.test.ts create mode 100644 packages/inferencer/src/utilities/remove-hidden-code/index.ts create mode 100644 packages/inferencer/src/utilities/remove-relation-suffix/index.test.ts create mode 100644 packages/inferencer/src/utilities/remove-relation-suffix/index.ts create mode 100644 packages/inferencer/src/utilities/replace-exports/index.test.ts create mode 100644 packages/inferencer/src/utilities/replace-exports/index.ts create mode 100644 packages/inferencer/src/utilities/replace-imports/index.test.ts create mode 100644 packages/inferencer/src/utilities/replace-imports/index.ts create mode 100644 packages/inferencer/src/utilities/resource-from-inferred/index.test.ts create mode 100644 packages/inferencer/src/utilities/resource-from-inferred/index.ts create mode 100644 packages/inferencer/src/utilities/to-plural/index.test.ts create mode 100644 packages/inferencer/src/utilities/to-plural/index.ts create mode 100644 packages/inferencer/src/utilities/to-singular/index.test.ts create mode 100644 packages/inferencer/src/utilities/to-singular/index.ts create mode 100644 packages/inferencer/src/utilities/translate-action-title/index.test.ts create mode 100644 packages/inferencer/src/utilities/translate-action-title/index.ts create mode 100644 packages/inferencer/src/utilities/translate-button-title/index.test.ts create mode 100644 packages/inferencer/src/utilities/translate-button-title/index.ts create mode 100644 packages/inferencer/src/utilities/translate-pretty-string/index.test.ts create mode 100644 packages/inferencer/src/utilities/translate-pretty-string/index.ts create mode 100644 packages/inferencer/test/dataMocks.ts create mode 100644 packages/inferencer/test/index.tsx create mode 100644 packages/inferencer/test/jest.setup.ts create mode 100644 packages/inferencer/test/svgTransform.ts create mode 100644 packages/inferencer/tsconfig.declarations.json create mode 100644 packages/inferencer/tsconfig.json create mode 100644 packages/inferencer/tsconfig.test.json create mode 100644 packages/inferencer/tsup.config.ts create mode 100644 packages/kbar/.npmignore create mode 100644 packages/kbar/CHANGELOG.md create mode 100644 packages/kbar/LICENSE create mode 100644 packages/kbar/README.md create mode 100644 packages/kbar/jest.config.js create mode 100644 packages/kbar/package.json create mode 100644 packages/kbar/src/components/commandBar/index.tsx create mode 100644 packages/kbar/src/components/index.ts create mode 100644 packages/kbar/src/components/refineKbar/index.tsx create mode 100644 packages/kbar/src/components/renderResults/index.tsx create mode 100644 packages/kbar/src/components/resultItem/index.tsx create mode 100644 packages/kbar/src/definitions/capitalize/index.ts create mode 100644 packages/kbar/src/definitions/index.ts create mode 100644 packages/kbar/src/hooks/index.tsx create mode 100644 packages/kbar/src/hooks/useRefineKbar/index.spec.tsx create mode 100644 packages/kbar/src/hooks/useRefineKbar/index.tsx create mode 100644 packages/kbar/src/index.tsx create mode 100644 packages/kbar/test/dataMocks.ts create mode 100644 packages/kbar/test/index.tsx create mode 100644 packages/kbar/test/jest.setup.ts create mode 100644 packages/kbar/tsconfig.declarations.json create mode 100644 packages/kbar/tsconfig.json create mode 100644 packages/kbar/tsconfig.test.json create mode 100644 packages/kbar/tsup.config.ts create mode 100644 packages/live-previews/.gitignore create mode 100644 packages/live-previews/.prettierrc create mode 100644 packages/live-previews/CHANGELOG.md create mode 100755 packages/live-previews/Dockerfile create mode 100644 packages/live-previews/README.md create mode 100644 packages/live-previews/jest.config.js create mode 100644 packages/live-previews/k8s/live-previews/.helmignore create mode 100644 packages/live-previews/k8s/live-previews/Chart.yaml create mode 100644 packages/live-previews/k8s/live-previews/templates/NOTES.txt create mode 100644 packages/live-previews/k8s/live-previews/templates/_helpers.tpl create mode 100644 packages/live-previews/k8s/live-previews/templates/deployment.yaml create mode 100644 packages/live-previews/k8s/live-previews/templates/hpa.yaml create mode 100644 packages/live-previews/k8s/live-previews/templates/ingress.yaml create mode 100644 packages/live-previews/k8s/live-previews/templates/service.yaml create mode 100644 packages/live-previews/k8s/live-previews/templates/serviceaccount.yaml create mode 100644 packages/live-previews/k8s/live-previews/templates/tests/test-connection.yaml create mode 100644 packages/live-previews/k8s/live-previews/values.yaml create mode 100644 packages/live-previews/next.config.js create mode 100644 packages/live-previews/package.json create mode 100644 packages/live-previews/pages/404.tsx create mode 100644 packages/live-previews/pages/_app.tsx create mode 100644 packages/live-previews/pages/_error.tsx create mode 100644 packages/live-previews/pages/index.tsx create mode 100644 packages/live-previews/pages/preview.tsx create mode 100644 packages/live-previews/public/assets/icons/anchor.svg create mode 100644 packages/live-previews/public/assets/icons/atom.svg create mode 100644 packages/live-previews/public/assets/icons/auction-mallet-judge-hammer-gavel.svg create mode 100644 packages/live-previews/public/assets/icons/award-cup.svg create mode 100644 packages/live-previews/public/assets/icons/award-medal.svg create mode 100644 packages/live-previews/public/assets/icons/badge.svg create mode 100644 packages/live-previews/public/assets/icons/bag.svg create mode 100644 packages/live-previews/public/assets/icons/bank.svg create mode 100644 packages/live-previews/public/assets/icons/bar-chart.svg create mode 100644 packages/live-previews/public/assets/icons/bell.svg create mode 100644 packages/live-previews/public/assets/icons/binoculars.svg create mode 100644 packages/live-previews/public/assets/icons/birthday-cake.svg create mode 100644 packages/live-previews/public/assets/icons/bonfire-camp.svg create mode 100644 packages/live-previews/public/assets/icons/box.svg create mode 100644 packages/live-previews/public/assets/icons/briefcase.svg create mode 100644 packages/live-previews/public/assets/icons/bucket.svg create mode 100644 packages/live-previews/public/assets/icons/building.svg create mode 100644 packages/live-previews/public/assets/icons/button.svg create mode 100644 packages/live-previews/public/assets/icons/cake.svg create mode 100644 packages/live-previews/public/assets/icons/calendar.svg create mode 100644 packages/live-previews/public/assets/icons/call-bell.svg create mode 100644 packages/live-previews/public/assets/icons/camera.svg create mode 100644 packages/live-previews/public/assets/icons/chicken.svg create mode 100644 packages/live-previews/public/assets/icons/crescent-moon.svg create mode 100644 packages/live-previews/public/assets/icons/cube.svg create mode 100644 packages/live-previews/public/assets/icons/diamond.svg create mode 100644 packages/live-previews/public/assets/icons/direction-sign.svg create mode 100644 packages/live-previews/public/assets/icons/drink-beer.svg create mode 100644 packages/live-previews/public/assets/icons/drink-cocktail.svg create mode 100644 packages/live-previews/public/assets/icons/drink-wine.svg create mode 100644 packages/live-previews/public/assets/icons/drrink-coffee-cup.svg create mode 100644 packages/live-previews/public/assets/icons/feather.svg create mode 100644 packages/live-previews/public/assets/icons/fingerprint.svg create mode 100644 packages/live-previews/public/assets/icons/fire-flame.svg create mode 100644 packages/live-previews/public/assets/icons/fish.svg create mode 100644 packages/live-previews/public/assets/icons/flag.svg create mode 100644 packages/live-previews/public/assets/icons/gamepad.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-cards-clubs.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-cards-diamonds.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-cards-hearts.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-cards-spades.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-chess-bishop.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-chess-king-crown.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-chess-knight-horse.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-chess-pawn.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-chess-queen.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-chess-rook-castle.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-dice.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-ghost.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-monster-invader.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-skull.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-sports-8-ball.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-sports-base-ball.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-sports-basket-ball.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-sports-foot-ball.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-sports-soccer-ball.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-sports-table-tennis.svg create mode 100644 packages/live-previews/public/assets/icons/gaming-sports-tennis-ball.svg create mode 100644 packages/live-previews/public/assets/icons/gauge-dashboard.svg create mode 100644 packages/live-previews/public/assets/icons/gift.svg create mode 100644 packages/live-previews/public/assets/icons/globe.svg create mode 100644 packages/live-previews/public/assets/icons/hamburger.svg create mode 100644 packages/live-previews/public/assets/icons/hand.svg create mode 100644 packages/live-previews/public/assets/icons/hat.svg create mode 100644 packages/live-previews/public/assets/icons/helm-wheel.svg create mode 100644 packages/live-previews/public/assets/icons/hexagon.svg create mode 100644 packages/live-previews/public/assets/icons/home.svg create mode 100644 packages/live-previews/public/assets/icons/hourglass.svg create mode 100644 packages/live-previews/public/assets/icons/ice-cream.svg create mode 100644 packages/live-previews/public/assets/icons/key.svg create mode 100644 packages/live-previews/public/assets/icons/label.svg create mode 100644 packages/live-previews/public/assets/icons/lego-head.svg create mode 100644 packages/live-previews/public/assets/icons/lego.svg create mode 100644 packages/live-previews/public/assets/icons/lightbulb.svg create mode 100644 packages/live-previews/public/assets/icons/lightning.svg create mode 100644 packages/live-previews/public/assets/icons/magnet.svg create mode 100644 packages/live-previews/public/assets/icons/mailbox.svg create mode 100644 packages/live-previews/public/assets/icons/marker.svg create mode 100644 packages/live-previews/public/assets/icons/meat.svg create mode 100644 packages/live-previews/public/assets/icons/megaphone.svg create mode 100644 packages/live-previews/public/assets/icons/message.svg create mode 100644 packages/live-previews/public/assets/icons/microphone.svg create mode 100644 packages/live-previews/public/assets/icons/note.svg create mode 100644 packages/live-previews/public/assets/icons/overview.svg create mode 100644 packages/live-previews/public/assets/icons/paint-brush-alternative.svg create mode 100644 packages/live-previews/public/assets/icons/paint-brush.svg create mode 100644 packages/live-previews/public/assets/icons/paint-roller.svg create mode 100644 packages/live-previews/public/assets/icons/paint-spray.svg create mode 100644 packages/live-previews/public/assets/icons/palette.svg create mode 100644 packages/live-previews/public/assets/icons/paper-plane.svg create mode 100644 packages/live-previews/public/assets/icons/pen-alternative.svg create mode 100644 packages/live-previews/public/assets/icons/pen.svg create mode 100644 packages/live-previews/public/assets/icons/pencil.svg create mode 100644 packages/live-previews/public/assets/icons/pentagon.svg create mode 100644 packages/live-previews/public/assets/icons/pie-chart.svg create mode 100644 packages/live-previews/public/assets/icons/piggy-bank.svg create mode 100644 packages/live-previews/public/assets/icons/pin-location.svg create mode 100644 packages/live-previews/public/assets/icons/pin-staple.svg create mode 100644 packages/live-previews/public/assets/icons/pizza.svg create mode 100644 packages/live-previews/public/assets/icons/puzzle.svg create mode 100644 packages/live-previews/public/assets/icons/refine.svg create mode 100644 packages/live-previews/public/assets/icons/robot.svg create mode 100644 packages/live-previews/public/assets/icons/rocket.svg create mode 100644 packages/live-previews/public/assets/icons/sailing-boat.svg create mode 100644 packages/live-previews/public/assets/icons/scissors.svg create mode 100644 packages/live-previews/public/assets/icons/server.svg create mode 100644 packages/live-previews/public/assets/icons/shield.svg create mode 100644 packages/live-previews/public/assets/icons/shopping-cart.svg create mode 100644 packages/live-previews/public/assets/icons/snowflake.svg create mode 100644 packages/live-previews/public/assets/icons/spoon-fork.svg create mode 100644 packages/live-previews/public/assets/icons/stamp.svg create mode 100644 packages/live-previews/public/assets/icons/star.svg create mode 100644 packages/live-previews/public/assets/icons/steering-wheel.svg create mode 100644 packages/live-previews/public/assets/icons/storage-drive.svg create mode 100644 packages/live-previews/public/assets/icons/store.svg create mode 100644 packages/live-previews/public/assets/icons/sun-glasses.svg create mode 100644 packages/live-previews/public/assets/icons/sun.svg create mode 100644 packages/live-previews/public/assets/icons/ticket.svg create mode 100644 packages/live-previews/public/assets/icons/time-clock.svg create mode 100644 packages/live-previews/public/assets/icons/transport-airplane.svg create mode 100644 packages/live-previews/public/assets/icons/transport-bus.svg create mode 100644 packages/live-previews/public/assets/icons/transport-car-automobile.svg create mode 100644 packages/live-previews/public/assets/icons/transport-helicopter.svg create mode 100644 packages/live-previews/public/assets/icons/transport-motorcycle.svg create mode 100644 packages/live-previews/public/assets/icons/transport-train-metro-subway.svg create mode 100644 packages/live-previews/public/assets/icons/transport-walking-pedestrian.svg create mode 100644 packages/live-previews/public/assets/icons/tyre.svg create mode 100644 packages/live-previews/public/assets/icons/umbrella.svg create mode 100644 packages/live-previews/public/assets/icons/user-person-standing.svg create mode 100644 packages/live-previews/public/assets/icons/user-person.svg create mode 100644 packages/live-previews/public/assets/icons/users-persons.svg create mode 100644 packages/live-previews/public/assets/icons/video.svg create mode 100644 packages/live-previews/public/assets/icons/wand-alternative.svg create mode 100644 packages/live-previews/public/assets/icons/water-drop.svg create mode 100644 packages/live-previews/public/assets/icons/wind.svg create mode 100644 packages/live-previews/public/assets/icons/world.svg create mode 100644 packages/live-previews/public/assets/icons/ying-yang.svg create mode 100644 packages/live-previews/public/favicon.ico create mode 100644 packages/live-previews/public/images/flags/de.svg create mode 100644 packages/live-previews/public/images/flags/en.svg create mode 100644 packages/live-previews/public/loader.gif create mode 100644 packages/live-previews/public/locales/de/common.json create mode 100644 packages/live-previews/public/locales/en/common.json create mode 100644 packages/live-previews/src/components/live-error.tsx create mode 100644 packages/live-previews/src/components/loading.tsx create mode 100644 packages/live-previews/src/scope/airtable.tsx create mode 100644 packages/live-previews/src/scope/antd-inferencer.tsx create mode 100644 packages/live-previews/src/scope/antd.tsx create mode 100644 packages/live-previews/src/scope/appwrite.tsx create mode 100644 packages/live-previews/src/scope/auth0.tsx create mode 100644 packages/live-previews/src/scope/axios.tsx create mode 100644 packages/live-previews/src/scope/casbin.tsx create mode 100644 packages/live-previews/src/scope/chakra-inferencer.tsx create mode 100644 packages/live-previews/src/scope/chakra.tsx create mode 100644 packages/live-previews/src/scope/common.tsx create mode 100644 packages/live-previews/src/scope/devtools.tsx create mode 100644 packages/live-previews/src/scope/google.tsx create mode 100644 packages/live-previews/src/scope/hasura.tsx create mode 100644 packages/live-previews/src/scope/headless-inferencer.tsx create mode 100644 packages/live-previews/src/scope/i18n.tsx create mode 100644 packages/live-previews/src/scope/kbar.tsx create mode 100644 packages/live-previews/src/scope/keycloak.tsx create mode 100644 packages/live-previews/src/scope/mantine-inferencer.tsx create mode 100644 packages/live-previews/src/scope/mantine.tsx create mode 100644 packages/live-previews/src/scope/map.tsx create mode 100644 packages/live-previews/src/scope/mui-inferencer.tsx create mode 100644 packages/live-previews/src/scope/mui.tsx create mode 100644 packages/live-previews/src/scope/nestjsx.tsx create mode 100644 packages/live-previews/src/scope/react-dom.tsx create mode 100644 packages/live-previews/src/scope/strapi-graphql.tsx create mode 100644 packages/live-previews/src/scope/strapi-v4.tsx create mode 100644 packages/live-previews/src/scope/supabase.tsx create mode 100644 packages/live-previews/src/scope/tabler-icons.tsx create mode 100644 packages/live-previews/src/scope/web-vitals.tsx create mode 100644 packages/live-previews/src/styles/global.css create mode 100644 packages/live-previews/src/utils/check-package.ts create mode 100644 packages/live-previews/src/utils/development-cookie.ts create mode 100644 packages/live-previews/src/utils/pretty-spaces.test.ts create mode 100644 packages/live-previews/src/utils/pretty-spaces.ts create mode 100644 packages/live-previews/src/utils/replace-imports.test.ts create mode 100644 packages/live-previews/src/utils/replace-imports.ts create mode 100644 packages/live-previews/src/utils/use-code.ts create mode 100644 packages/live-previews/tsconfig.json create mode 100644 packages/live-previews/tsconfig.test.json create mode 100644 packages/mantine/.npmignore create mode 100644 packages/mantine/.npmrc create mode 100644 packages/mantine/CHANGELOG.md create mode 100644 packages/mantine/README.md create mode 100644 packages/mantine/jest.config.js create mode 100644 packages/mantine/package.json create mode 100644 packages/mantine/refine.config.js create mode 100644 packages/mantine/src/components/autoSaveIndicator/index.spec.tsx create mode 100644 packages/mantine/src/components/autoSaveIndicator/index.tsx create mode 100644 packages/mantine/src/components/breadcrumb/index.spec.tsx create mode 100644 packages/mantine/src/components/breadcrumb/index.tsx create mode 100644 packages/mantine/src/components/buttons/clone/index.spec.tsx create mode 100644 packages/mantine/src/components/buttons/clone/index.tsx create mode 100644 packages/mantine/src/components/buttons/create/index.spec.tsx create mode 100644 packages/mantine/src/components/buttons/create/index.tsx create mode 100644 packages/mantine/src/components/buttons/delete/index.spec.tsx create mode 100644 packages/mantine/src/components/buttons/delete/index.tsx create mode 100644 packages/mantine/src/components/buttons/edit/index.spec.tsx create mode 100644 packages/mantine/src/components/buttons/edit/index.tsx create mode 100644 packages/mantine/src/components/buttons/export/index.spec.tsx create mode 100644 packages/mantine/src/components/buttons/export/index.tsx create mode 100644 packages/mantine/src/components/buttons/import/index.spec.tsx create mode 100644 packages/mantine/src/components/buttons/import/index.tsx create mode 100644 packages/mantine/src/components/buttons/index.tsx create mode 100644 packages/mantine/src/components/buttons/list/index.spec.tsx create mode 100644 packages/mantine/src/components/buttons/list/index.tsx create mode 100644 packages/mantine/src/components/buttons/refresh/index.spec.tsx create mode 100644 packages/mantine/src/components/buttons/refresh/index.tsx create mode 100644 packages/mantine/src/components/buttons/save/index.spec.tsx create mode 100644 packages/mantine/src/components/buttons/save/index.tsx create mode 100644 packages/mantine/src/components/buttons/show/index.spec.tsx create mode 100644 packages/mantine/src/components/buttons/show/index.tsx create mode 100644 packages/mantine/src/components/buttons/types.ts create mode 100644 packages/mantine/src/components/crud/create/index.spec.tsx create mode 100644 packages/mantine/src/components/crud/create/index.tsx create mode 100644 packages/mantine/src/components/crud/edit/index.spec.tsx create mode 100644 packages/mantine/src/components/crud/edit/index.tsx create mode 100644 packages/mantine/src/components/crud/index.ts create mode 100644 packages/mantine/src/components/crud/list/index.spec.tsx create mode 100644 packages/mantine/src/components/crud/list/index.tsx create mode 100644 packages/mantine/src/components/crud/show/index.spec.tsx create mode 100644 packages/mantine/src/components/crud/show/index.tsx create mode 100644 packages/mantine/src/components/crud/types.ts create mode 100644 packages/mantine/src/components/fields/boolean/index.spec.tsx create mode 100644 packages/mantine/src/components/fields/boolean/index.tsx create mode 100644 packages/mantine/src/components/fields/date/index.spec.tsx create mode 100644 packages/mantine/src/components/fields/date/index.tsx create mode 100644 packages/mantine/src/components/fields/email/index.spec.tsx create mode 100644 packages/mantine/src/components/fields/email/index.tsx create mode 100644 packages/mantine/src/components/fields/file/index.spec.tsx create mode 100644 packages/mantine/src/components/fields/file/index.tsx create mode 100644 packages/mantine/src/components/fields/index.ts create mode 100644 packages/mantine/src/components/fields/markdown/index.spec.tsx create mode 100644 packages/mantine/src/components/fields/markdown/index.tsx create mode 100644 packages/mantine/src/components/fields/number/index.spec.tsx create mode 100644 packages/mantine/src/components/fields/number/index.tsx create mode 100644 packages/mantine/src/components/fields/tag/index.spec.tsx create mode 100644 packages/mantine/src/components/fields/tag/index.tsx create mode 100644 packages/mantine/src/components/fields/text/index.spec.tsx create mode 100644 packages/mantine/src/components/fields/text/index.tsx create mode 100644 packages/mantine/src/components/fields/types.ts create mode 100644 packages/mantine/src/components/fields/url/index.spec.tsx create mode 100644 packages/mantine/src/components/fields/url/index.tsx create mode 100644 packages/mantine/src/components/index.ts create mode 100644 packages/mantine/src/components/layout/header/index.spec.tsx create mode 100644 packages/mantine/src/components/layout/header/index.tsx create mode 100644 packages/mantine/src/components/layout/index.spec.tsx create mode 100644 packages/mantine/src/components/layout/index.tsx create mode 100644 packages/mantine/src/components/layout/sider/index.tsx create mode 100644 packages/mantine/src/components/layout/title/index.spec.ts create mode 100644 packages/mantine/src/components/layout/title/index.tsx create mode 100644 packages/mantine/src/components/layout/types.ts create mode 100644 packages/mantine/src/components/pages/auth/components/forgotPassword/index.spec.tsx create mode 100644 packages/mantine/src/components/pages/auth/components/forgotPassword/index.tsx create mode 100644 packages/mantine/src/components/pages/auth/components/index.ts create mode 100644 packages/mantine/src/components/pages/auth/components/login/index.spec.tsx create mode 100644 packages/mantine/src/components/pages/auth/components/login/index.tsx create mode 100644 packages/mantine/src/components/pages/auth/components/register/index.spec.tsx create mode 100644 packages/mantine/src/components/pages/auth/components/register/index.tsx create mode 100644 packages/mantine/src/components/pages/auth/components/styles.ts create mode 100644 packages/mantine/src/components/pages/auth/components/updatePassword/index.spec.tsx create mode 100644 packages/mantine/src/components/pages/auth/components/updatePassword/index.tsx create mode 100644 packages/mantine/src/components/pages/auth/index.spec.tsx create mode 100644 packages/mantine/src/components/pages/auth/index.tsx create mode 100644 packages/mantine/src/components/pages/error/index.spec.tsx create mode 100644 packages/mantine/src/components/pages/error/index.tsx create mode 100644 packages/mantine/src/components/pages/index.ts create mode 100644 packages/mantine/src/components/pages/ready/index.spec.tsx create mode 100644 packages/mantine/src/components/pages/ready/index.tsx create mode 100644 packages/mantine/src/components/pages/welcome/index.spec.tsx create mode 100644 packages/mantine/src/components/pages/welcome/index.tsx create mode 100644 packages/mantine/src/components/ring-countdown/index.spec.tsx create mode 100644 packages/mantine/src/components/ring-countdown/index.tsx create mode 100644 packages/mantine/src/components/themedLayout/header/index.spec.tsx create mode 100644 packages/mantine/src/components/themedLayout/header/index.tsx create mode 100644 packages/mantine/src/components/themedLayout/index.spec.tsx create mode 100644 packages/mantine/src/components/themedLayout/index.tsx create mode 100644 packages/mantine/src/components/themedLayout/sider/index.tsx create mode 100644 packages/mantine/src/components/themedLayout/title/index.spec.ts create mode 100644 packages/mantine/src/components/themedLayout/title/index.tsx create mode 100644 packages/mantine/src/components/themedLayout/types.ts create mode 100644 packages/mantine/src/components/themedLayoutV2/hamburgerMenu/index.tsx create mode 100644 packages/mantine/src/components/themedLayoutV2/header/index.spec.tsx create mode 100644 packages/mantine/src/components/themedLayoutV2/header/index.tsx create mode 100644 packages/mantine/src/components/themedLayoutV2/index.spec.tsx create mode 100644 packages/mantine/src/components/themedLayoutV2/index.tsx create mode 100644 packages/mantine/src/components/themedLayoutV2/sider/index.spec.tsx create mode 100644 packages/mantine/src/components/themedLayoutV2/sider/index.tsx create mode 100644 packages/mantine/src/components/themedLayoutV2/title/index.spec.ts create mode 100644 packages/mantine/src/components/themedLayoutV2/title/index.tsx create mode 100644 packages/mantine/src/components/themedLayoutV2/types.ts create mode 100644 packages/mantine/src/contexts/form-context.ts create mode 100644 packages/mantine/src/contexts/index.ts create mode 100644 packages/mantine/src/contexts/themedLayoutContext/IThemedLayoutContext.ts create mode 100644 packages/mantine/src/contexts/themedLayoutContext/index.tsx create mode 100644 packages/mantine/src/definitions/button/index.ts create mode 100644 packages/mantine/src/definitions/index.ts create mode 100644 packages/mantine/src/hooks/form/index.ts create mode 100644 packages/mantine/src/hooks/form/useForm/index.spec.tsx create mode 100644 packages/mantine/src/hooks/form/useForm/index.ts create mode 100644 packages/mantine/src/hooks/form/useModalForm/index.spec.tsx create mode 100644 packages/mantine/src/hooks/form/useModalForm/index.ts create mode 100644 packages/mantine/src/hooks/form/useStepsForm/index.ts create mode 100644 packages/mantine/src/hooks/index.ts create mode 100644 packages/mantine/src/hooks/useSelect/index.ts create mode 100644 packages/mantine/src/hooks/useSiderVisible/index.ts create mode 100644 packages/mantine/src/hooks/useThemedLayoutContext/index.ts create mode 100644 packages/mantine/src/index.tsx create mode 100644 packages/mantine/src/providers/index.ts create mode 100644 packages/mantine/src/providers/notificationProvider.tsx create mode 100644 packages/mantine/src/theme/index.ts create mode 100644 packages/mantine/src/types/index.d.ts create mode 100644 packages/mantine/src/types/theme.ts create mode 100644 packages/mantine/test/dataMocks.ts create mode 100644 packages/mantine/test/index.tsx create mode 100644 packages/mantine/test/jest.setup.ts create mode 100644 packages/mantine/test/svgTransform.ts create mode 100644 packages/mantine/tsconfig.declarations.json create mode 100644 packages/mantine/tsconfig.json create mode 100644 packages/mantine/tsconfig.test.json create mode 100644 packages/mantine/tsup.config.ts create mode 100644 packages/medusa/.npmignore create mode 100644 packages/medusa/CHANGELOG.md create mode 100644 packages/medusa/LICENSE create mode 100644 packages/medusa/README.md create mode 100644 packages/medusa/jest.config.js create mode 100644 packages/medusa/package.json create mode 100644 packages/medusa/refine.config.js create mode 100644 packages/medusa/src/authProvider/index.ts create mode 100644 packages/medusa/src/dataProvider/index.ts create mode 100644 packages/medusa/src/index.ts create mode 100644 packages/medusa/src/utils/axios.ts create mode 100644 packages/medusa/src/utils/generateFilter.ts create mode 100644 packages/medusa/src/utils/index.ts create mode 100644 packages/medusa/src/utils/mapOperator.ts create mode 100644 packages/medusa/test/create/index.mock.ts create mode 100644 packages/medusa/test/create/index.spec.ts create mode 100644 packages/medusa/test/custom/index.mock.ts create mode 100644 packages/medusa/test/custom/index.spec.ts create mode 100644 packages/medusa/test/deleteMany/index.mock.ts create mode 100644 packages/medusa/test/deleteMany/index.spec.ts create mode 100644 packages/medusa/test/deleteOne/index.mock.ts create mode 100644 packages/medusa/test/deleteOne/index.spec.ts create mode 100644 packages/medusa/test/getList/index.mock.ts create mode 100644 packages/medusa/test/getList/index.spec.ts create mode 100644 packages/medusa/test/getOne/index.mock.ts create mode 100644 packages/medusa/test/getOne/index.spec.ts create mode 100644 packages/medusa/test/jest.setup.ts create mode 100644 packages/medusa/test/update/index.mock.ts create mode 100644 packages/medusa/test/update/index.spec.ts create mode 100644 packages/medusa/test/updateMany/index.mock.ts create mode 100644 packages/medusa/test/updateMany/index.spec.ts create mode 100644 packages/medusa/test/utils/generateFilter.spec.ts create mode 100644 packages/medusa/test/utils/mapOperator.spec.ts create mode 100644 packages/medusa/tsconfig.declarations.json create mode 100644 packages/medusa/tsconfig.json create mode 100644 packages/medusa/tsup.config.ts create mode 100644 packages/mui/.npmignore create mode 100644 packages/mui/CHANGELOG.md create mode 100644 packages/mui/README.md create mode 100644 packages/mui/jest.config.js create mode 100644 packages/mui/package.json create mode 100644 packages/mui/refine.config.js create mode 100644 packages/mui/src/components/autoSaveIndicator/index.spec.tsx create mode 100644 packages/mui/src/components/autoSaveIndicator/index.tsx create mode 100644 packages/mui/src/components/breadcrumb/index.spec.tsx create mode 100644 packages/mui/src/components/breadcrumb/index.tsx create mode 100644 packages/mui/src/components/buttons/clone/index.spec.tsx create mode 100644 packages/mui/src/components/buttons/clone/index.tsx create mode 100644 packages/mui/src/components/buttons/create/index.spec.tsx create mode 100644 packages/mui/src/components/buttons/create/index.tsx create mode 100644 packages/mui/src/components/buttons/delete/index.spec.tsx create mode 100644 packages/mui/src/components/buttons/delete/index.tsx create mode 100644 packages/mui/src/components/buttons/edit/index.spec.tsx create mode 100644 packages/mui/src/components/buttons/edit/index.tsx create mode 100644 packages/mui/src/components/buttons/export/index.spec.tsx create mode 100644 packages/mui/src/components/buttons/export/index.tsx create mode 100644 packages/mui/src/components/buttons/import/index.spec.tsx create mode 100644 packages/mui/src/components/buttons/import/index.tsx create mode 100644 packages/mui/src/components/buttons/index.tsx create mode 100644 packages/mui/src/components/buttons/list/index.spec.tsx create mode 100644 packages/mui/src/components/buttons/list/index.tsx create mode 100644 packages/mui/src/components/buttons/refresh/index.spec.tsx create mode 100644 packages/mui/src/components/buttons/refresh/index.tsx create mode 100644 packages/mui/src/components/buttons/save/index.spec.tsx create mode 100644 packages/mui/src/components/buttons/save/index.tsx create mode 100644 packages/mui/src/components/buttons/show/index.spec.tsx create mode 100644 packages/mui/src/components/buttons/show/index.tsx create mode 100644 packages/mui/src/components/buttons/types.ts create mode 100644 packages/mui/src/components/circularDeterminate/index.spec.tsx create mode 100644 packages/mui/src/components/circularDeterminate/index.tsx create mode 100644 packages/mui/src/components/crud/create/index.spec.tsx create mode 100644 packages/mui/src/components/crud/create/index.tsx create mode 100644 packages/mui/src/components/crud/edit/index.spec.tsx create mode 100644 packages/mui/src/components/crud/edit/index.tsx create mode 100644 packages/mui/src/components/crud/index.tsx create mode 100644 packages/mui/src/components/crud/list/index.spec.tsx create mode 100644 packages/mui/src/components/crud/list/index.tsx create mode 100644 packages/mui/src/components/crud/show/index.spec.tsx create mode 100644 packages/mui/src/components/crud/show/index.tsx create mode 100644 packages/mui/src/components/crud/types.ts create mode 100644 packages/mui/src/components/fields/boolean/index.spec.tsx create mode 100644 packages/mui/src/components/fields/boolean/index.tsx create mode 100644 packages/mui/src/components/fields/date/index.spec.tsx create mode 100644 packages/mui/src/components/fields/date/index.tsx create mode 100644 packages/mui/src/components/fields/email/index.spec.tsx create mode 100644 packages/mui/src/components/fields/email/index.tsx create mode 100644 packages/mui/src/components/fields/file/index.spec.tsx create mode 100644 packages/mui/src/components/fields/file/index.tsx create mode 100644 packages/mui/src/components/fields/index.ts create mode 100644 packages/mui/src/components/fields/markdown/index.spec.tsx create mode 100644 packages/mui/src/components/fields/markdown/index.tsx create mode 100644 packages/mui/src/components/fields/number/index.spec.tsx create mode 100644 packages/mui/src/components/fields/number/index.tsx create mode 100644 packages/mui/src/components/fields/tag/index.spec.tsx create mode 100644 packages/mui/src/components/fields/tag/index.tsx create mode 100644 packages/mui/src/components/fields/text/index.spec.tsx create mode 100644 packages/mui/src/components/fields/text/index.tsx create mode 100644 packages/mui/src/components/fields/types.ts create mode 100644 packages/mui/src/components/fields/url/index.spec.tsx create mode 100644 packages/mui/src/components/fields/url/index.tsx create mode 100644 packages/mui/src/components/index.tsx create mode 100644 packages/mui/src/components/layout/header/index.tsx create mode 100644 packages/mui/src/components/layout/index.tsx create mode 100644 packages/mui/src/components/layout/sider/index.tsx create mode 100644 packages/mui/src/components/layout/title/index.tsx create mode 100644 packages/mui/src/components/layout/types.ts create mode 100644 packages/mui/src/components/pages/auth/components/forgotPassword/index.spec.tsx create mode 100644 packages/mui/src/components/pages/auth/components/forgotPassword/index.tsx create mode 100644 packages/mui/src/components/pages/auth/components/index.tsx create mode 100644 packages/mui/src/components/pages/auth/components/login/index.spec.tsx create mode 100644 packages/mui/src/components/pages/auth/components/login/index.tsx create mode 100644 packages/mui/src/components/pages/auth/components/register/index.spec.tsx create mode 100644 packages/mui/src/components/pages/auth/components/register/index.tsx create mode 100644 packages/mui/src/components/pages/auth/components/styles.ts create mode 100644 packages/mui/src/components/pages/auth/components/updatePassword/index.spec.tsx create mode 100644 packages/mui/src/components/pages/auth/components/updatePassword/index.tsx create mode 100644 packages/mui/src/components/pages/auth/index.spec.tsx create mode 100644 packages/mui/src/components/pages/auth/index.tsx create mode 100644 packages/mui/src/components/pages/error/index.spec.tsx create mode 100644 packages/mui/src/components/pages/error/index.tsx create mode 100644 packages/mui/src/components/pages/index.tsx create mode 100644 packages/mui/src/components/pages/login/index.tsx create mode 100644 packages/mui/src/components/pages/ready/index.spec.tsx create mode 100644 packages/mui/src/components/pages/ready/index.tsx create mode 100644 packages/mui/src/components/pages/welcome/index.spec.tsx create mode 100644 packages/mui/src/components/pages/welcome/index.tsx create mode 100644 packages/mui/src/components/themedLayout/header/index.tsx create mode 100644 packages/mui/src/components/themedLayout/index.tsx create mode 100644 packages/mui/src/components/themedLayout/sider/index.tsx create mode 100644 packages/mui/src/components/themedLayout/title/index.tsx create mode 100644 packages/mui/src/components/themedLayout/types.ts create mode 100644 packages/mui/src/components/themedLayoutV2/hamburgerMenu/index.tsx create mode 100644 packages/mui/src/components/themedLayoutV2/header/index.spec.tsx create mode 100644 packages/mui/src/components/themedLayoutV2/header/index.tsx create mode 100644 packages/mui/src/components/themedLayoutV2/index.tsx create mode 100644 packages/mui/src/components/themedLayoutV2/sider/index.spec.tsx create mode 100644 packages/mui/src/components/themedLayoutV2/sider/index.tsx create mode 100644 packages/mui/src/components/themedLayoutV2/title/index.tsx create mode 100644 packages/mui/src/components/themedLayoutV2/types.ts create mode 100644 packages/mui/src/contexts/index.ts create mode 100644 packages/mui/src/contexts/themedLayoutContext/IThemedLayoutContext.ts create mode 100644 packages/mui/src/contexts/themedLayoutContext/index.tsx create mode 100644 packages/mui/src/definitions/dataGrid/index.spec.ts create mode 100644 packages/mui/src/definitions/dataGrid/index.ts create mode 100644 packages/mui/src/definitions/index.ts create mode 100644 packages/mui/src/hooks/index.ts create mode 100644 packages/mui/src/hooks/useAutocomplete/index.ts create mode 100644 packages/mui/src/hooks/useDataGrid/index.spec.ts create mode 100644 packages/mui/src/hooks/useDataGrid/index.ts create mode 100644 packages/mui/src/hooks/useSiderVisible/index.ts create mode 100644 packages/mui/src/hooks/useThemedLayoutContext/index.ts create mode 100644 packages/mui/src/index.tsx create mode 100644 packages/mui/src/interfaces/field.ts create mode 100644 packages/mui/src/providers/index.tsx create mode 100644 packages/mui/src/providers/notificationProvider/index.spec.tsx create mode 100644 packages/mui/src/providers/notificationProvider/index.tsx create mode 100644 packages/mui/src/providers/refineSnackbarProvider/index.tsx create mode 100644 packages/mui/src/theme/index.ts create mode 100644 packages/mui/src/theme/palette/darkPalette.ts create mode 100644 packages/mui/src/theme/palette/index.tsx create mode 100644 packages/mui/src/theme/palette/lightPalette.ts create mode 100644 packages/mui/src/theme/palette/refinePalette.ts create mode 100644 packages/mui/src/theme/typography.ts create mode 100644 packages/mui/src/types/index.d.ts create mode 100644 packages/mui/test/dataMocks.ts create mode 100644 packages/mui/test/index.tsx create mode 100644 packages/mui/test/jest.setup.ts create mode 100644 packages/mui/test/svgTransform.ts create mode 100644 packages/mui/tsconfig.declarations.json create mode 100644 packages/mui/tsconfig.json create mode 100644 packages/mui/tsconfig.test.json create mode 100644 packages/mui/tsup.config.ts create mode 100644 packages/nestjs-query/.npmignore create mode 100644 packages/nestjs-query/CHANGELOG.md create mode 100644 packages/nestjs-query/LICENSE create mode 100644 packages/nestjs-query/README.md create mode 100644 packages/nestjs-query/jest.config.js create mode 100644 packages/nestjs-query/package.json create mode 100644 packages/nestjs-query/src/dataProvider/index.ts create mode 100644 packages/nestjs-query/src/index.ts create mode 100644 packages/nestjs-query/src/interfaces.ts create mode 100644 packages/nestjs-query/src/liveProvider/index.ts create mode 100644 packages/nestjs-query/src/utils/graphql.ts create mode 100644 packages/nestjs-query/src/utils/index.ts create mode 100644 packages/nestjs-query/test/create/index.mock.ts create mode 100644 packages/nestjs-query/test/create/index.spec.ts create mode 100644 packages/nestjs-query/test/createMany/index.mock.ts create mode 100644 packages/nestjs-query/test/createMany/index.spec.ts create mode 100644 packages/nestjs-query/test/custom/index.mock.ts create mode 100644 packages/nestjs-query/test/custom/index.spec.ts create mode 100644 packages/nestjs-query/test/deleteMany/index.mock.ts create mode 100644 packages/nestjs-query/test/deleteMany/index.spec.ts create mode 100644 packages/nestjs-query/test/deleteOne/index.mock.ts create mode 100644 packages/nestjs-query/test/deleteOne/index.spec.ts create mode 100644 packages/nestjs-query/test/getList/index.mock.ts create mode 100644 packages/nestjs-query/test/getList/index.spec.ts create mode 100644 packages/nestjs-query/test/getMany/index.mock.ts create mode 100644 packages/nestjs-query/test/getMany/index.spec.ts create mode 100644 packages/nestjs-query/test/getOne/index.mock.ts create mode 100644 packages/nestjs-query/test/getOne/index.spec.ts create mode 100644 packages/nestjs-query/test/gqlClient.ts create mode 100644 packages/nestjs-query/test/jest.setup.ts create mode 100644 packages/nestjs-query/test/update/index.mock.ts create mode 100644 packages/nestjs-query/test/update/index.spec.ts create mode 100644 packages/nestjs-query/test/updateMany/index.mock.ts create mode 100644 packages/nestjs-query/test/updateMany/index.spec.ts create mode 100644 packages/nestjs-query/test/utils/__snapshots__/graphql.spec.ts.snap create mode 100644 packages/nestjs-query/test/utils/graphql.spec.ts create mode 100644 packages/nestjs-query/tsconfig.declarations.json create mode 100644 packages/nestjs-query/tsconfig.json create mode 100644 packages/nestjs-query/tsup.config.ts create mode 100644 packages/nestjsx-crud/.npmignore create mode 100644 packages/nestjsx-crud/CHANGELOG.md create mode 100644 packages/nestjsx-crud/LICENSE create mode 100644 packages/nestjsx-crud/README.md create mode 100644 packages/nestjsx-crud/jest.config.js create mode 100644 packages/nestjsx-crud/package.json create mode 100644 packages/nestjsx-crud/refine.config.js create mode 100644 packages/nestjsx-crud/src/index.ts create mode 100644 packages/nestjsx-crud/src/provider.ts create mode 100644 packages/nestjsx-crud/src/utils/axios.ts create mode 100644 packages/nestjsx-crud/src/utils/handleFilter.ts create mode 100644 packages/nestjsx-crud/src/utils/handleJoin.ts create mode 100644 packages/nestjsx-crud/src/utils/handlePagination.ts create mode 100644 packages/nestjsx-crud/src/utils/handleSort.ts create mode 100644 packages/nestjsx-crud/src/utils/index.ts create mode 100644 packages/nestjsx-crud/src/utils/mapOperator.ts create mode 100644 packages/nestjsx-crud/src/utils/transformErrorMessages.ts create mode 100644 packages/nestjsx-crud/src/utils/transformHttpError.ts create mode 100644 packages/nestjsx-crud/test/create/index.mock.ts create mode 100644 packages/nestjsx-crud/test/create/index.spec.ts create mode 100644 packages/nestjsx-crud/test/custom/index.mock.ts create mode 100644 packages/nestjsx-crud/test/custom/index.spec.ts create mode 100644 packages/nestjsx-crud/test/deleteMany/index.mock.ts create mode 100644 packages/nestjsx-crud/test/deleteMany/index.spec.ts create mode 100644 packages/nestjsx-crud/test/deleteOne/index.mock.ts create mode 100644 packages/nestjsx-crud/test/deleteOne/index.spec.ts create mode 100644 packages/nestjsx-crud/test/getList/index.mock.ts create mode 100644 packages/nestjsx-crud/test/getList/index.spec.ts create mode 100644 packages/nestjsx-crud/test/getMany/index.mock.ts create mode 100644 packages/nestjsx-crud/test/getMany/index.spec.ts create mode 100644 packages/nestjsx-crud/test/getOne/index.mock.ts create mode 100644 packages/nestjsx-crud/test/getOne/index.spec.ts create mode 100644 packages/nestjsx-crud/test/jest.setup.ts create mode 100644 packages/nestjsx-crud/test/update/index.mock.ts create mode 100644 packages/nestjsx-crud/test/update/index.spec.ts create mode 100644 packages/nestjsx-crud/test/updateMany/index.mock.ts create mode 100644 packages/nestjsx-crud/test/updateMany/index.spec.ts create mode 100644 packages/nestjsx-crud/test/utils/handleFilter.spec.ts create mode 100644 packages/nestjsx-crud/test/utils/handleJoin.spec.ts create mode 100644 packages/nestjsx-crud/test/utils/handlePagination.spec.ts create mode 100644 packages/nestjsx-crud/test/utils/handleSort.spec.ts create mode 100644 packages/nestjsx-crud/test/utils/mapOperator.spec.ts create mode 100644 packages/nestjsx-crud/test/utils/transformErrorMessages.spec.ts create mode 100644 packages/nestjsx-crud/tsconfig.declarations.json create mode 100644 packages/nestjsx-crud/tsconfig.json create mode 100644 packages/nestjsx-crud/tsup.config.ts create mode 100644 packages/nextjs-router/.npmignore create mode 100644 packages/nextjs-router/CHANGELOG.md create mode 100644 packages/nextjs-router/LICENSE create mode 100644 packages/nextjs-router/README.md create mode 100644 packages/nextjs-router/jest.config.js create mode 100644 packages/nextjs-router/package.json create mode 100644 packages/nextjs-router/src/app/bindings.tsx create mode 100644 packages/nextjs-router/src/app/index.ts create mode 100644 packages/nextjs-router/src/app/navigate-to-resource.tsx create mode 100644 packages/nextjs-router/src/app/refine-routes.tsx create mode 100644 packages/nextjs-router/src/common/convert-to-number-if-possible/index.ts create mode 100644 packages/nextjs-router/src/common/params-from-current-path/index.test.tsx create mode 100644 packages/nextjs-router/src/common/params-from-current-path/index.ts create mode 100644 packages/nextjs-router/src/common/parse-table-params.ts create mode 100644 packages/nextjs-router/src/index.ts create mode 100644 packages/nextjs-router/src/legacy-app/index.ts create mode 100644 packages/nextjs-router/src/legacy-app/prompt.tsx create mode 100644 packages/nextjs-router/src/legacy-app/route-component.tsx create mode 100644 packages/nextjs-router/src/legacy-app/router-component.tsx create mode 100644 packages/nextjs-router/src/legacy-app/router-provider.ts create mode 100644 packages/nextjs-router/src/legacy-app/use-history.ts create mode 100644 packages/nextjs-router/src/legacy-app/use-location.ts create mode 100644 packages/nextjs-router/src/legacy-app/use-params.ts create mode 100644 packages/nextjs-router/src/legacy-common/handle-refine-params.ts create mode 100644 packages/nextjs-router/src/legacy-common/refine-link.tsx create mode 100644 packages/nextjs-router/src/legacy-pages/check-authentication.ts create mode 100644 packages/nextjs-router/src/legacy-pages/index.ts create mode 100644 packages/nextjs-router/src/legacy-pages/prompt.tsx create mode 100644 packages/nextjs-router/src/legacy-pages/route-component.tsx create mode 100644 packages/nextjs-router/src/legacy-pages/router-provider.ts create mode 100644 packages/nextjs-router/src/legacy-pages/use-history.ts create mode 100644 packages/nextjs-router/src/legacy-pages/use-location.ts create mode 100644 packages/nextjs-router/src/legacy-pages/use-params.ts create mode 100644 packages/nextjs-router/src/legacy/index.ts create mode 100644 packages/nextjs-router/src/pages/bindings.tsx create mode 100644 packages/nextjs-router/src/pages/document-title-handler.tsx create mode 100644 packages/nextjs-router/src/pages/index.ts create mode 100644 packages/nextjs-router/src/pages/navigate-to-resource.tsx create mode 100644 packages/nextjs-router/src/pages/refine-routes.tsx create mode 100644 packages/nextjs-router/src/pages/unsaved-changes-notifier.tsx create mode 100644 packages/nextjs-router/src/pages/use-document-title.ts create mode 100644 packages/nextjs-router/tsconfig.declarations.json create mode 100644 packages/nextjs-router/tsconfig.json create mode 100644 packages/nextjs-router/tsup.config.ts create mode 100644 packages/react-hook-form/.npmignore create mode 100644 packages/react-hook-form/CHANGELOG.md create mode 100644 packages/react-hook-form/LICENSE create mode 100644 packages/react-hook-form/README.md create mode 100644 packages/react-hook-form/jest.config.js create mode 100644 packages/react-hook-form/package.json create mode 100644 packages/react-hook-form/src/index.ts create mode 100644 packages/react-hook-form/src/useForm/index.spec.tsx create mode 100644 packages/react-hook-form/src/useForm/index.ts create mode 100644 packages/react-hook-form/src/useModalForm/index.spec.ts create mode 100644 packages/react-hook-form/src/useModalForm/index.ts create mode 100644 packages/react-hook-form/src/useStepsForm/index.spec.ts create mode 100644 packages/react-hook-form/src/useStepsForm/index.ts create mode 100644 packages/react-hook-form/test/dataMocks.ts create mode 100644 packages/react-hook-form/test/index.tsx create mode 100644 packages/react-hook-form/tsconfig.declarations.json create mode 100644 packages/react-hook-form/tsconfig.json create mode 100644 packages/react-hook-form/tsconfig.test.json create mode 100644 packages/react-hook-form/tsup.config.ts create mode 100644 packages/react-location/.npmignore create mode 100644 packages/react-location/CHANGELOG.md create mode 100644 packages/react-location/LICENSE create mode 100644 packages/react-location/README.md create mode 100644 packages/react-location/jest.config.js create mode 100644 packages/react-location/package.json create mode 100644 packages/react-location/src/index.ts create mode 100644 packages/react-location/src/prompt.tsx create mode 100644 packages/react-location/src/resourceComponent.tsx create mode 100644 packages/react-location/src/routerComponent.tsx create mode 100644 packages/react-location/tsconfig.declarations.json create mode 100644 packages/react-location/tsconfig.json create mode 100644 packages/react-location/tsup.config.ts create mode 100644 packages/react-router-v6/.npmignore create mode 100644 packages/react-router-v6/CHANGELOG.md create mode 100644 packages/react-router-v6/LICENSE create mode 100644 packages/react-router-v6/README.md create mode 100644 packages/react-router-v6/jest.config.js create mode 100644 packages/react-router-v6/package.json create mode 100644 packages/react-router-v6/src/bindings.tsx create mode 100644 packages/react-router-v6/src/catch-all-navigate.tsx create mode 100644 packages/react-router-v6/src/convert-to-number-if-possible.ts create mode 100644 packages/react-router-v6/src/create-resource-routes.tsx create mode 100644 packages/react-router-v6/src/document-title-handler.tsx create mode 100644 packages/react-router-v6/src/index.ts create mode 100644 packages/react-router-v6/src/legacy/index.ts create mode 100644 packages/react-router-v6/src/legacy/prompt.tsx create mode 100644 packages/react-router-v6/src/legacy/routeProvider.tsx create mode 100644 packages/react-router-v6/src/legacy/routerComponent.tsx create mode 100644 packages/react-router-v6/src/navigate-to-resource.tsx create mode 100644 packages/react-router-v6/src/refine-routes.tsx create mode 100644 packages/react-router-v6/src/unsaved-changes-notifier.tsx create mode 100644 packages/react-router-v6/src/use-document-title.ts create mode 100644 packages/react-router-v6/src/use-prompt-workaround.ts create mode 100644 packages/react-router-v6/tsconfig.declarations.json create mode 100644 packages/react-router-v6/tsconfig.json create mode 100644 packages/react-router-v6/tsup.config.ts create mode 100644 packages/react-table/.npmignore create mode 100644 packages/react-table/CHANGELOG.md create mode 100644 packages/react-table/LICENSE create mode 100644 packages/react-table/README.md create mode 100644 packages/react-table/jest.config.js create mode 100644 packages/react-table/package.json create mode 100644 packages/react-table/src/index.ts create mode 100644 packages/react-table/src/useTable/index.spec.ts create mode 100644 packages/react-table/src/useTable/index.ts create mode 100644 packages/react-table/src/utils/index.ts create mode 100644 packages/react-table/src/utils/useIsFirstRender/index.spec.ts create mode 100644 packages/react-table/src/utils/useIsFirstRender/index.ts create mode 100644 packages/react-table/test/dataMocks.ts create mode 100644 packages/react-table/test/index.tsx create mode 100644 packages/react-table/tsconfig.declarations.json create mode 100644 packages/react-table/tsconfig.json create mode 100644 packages/react-table/tsconfig.test.json create mode 100644 packages/react-table/tsup.config.ts create mode 100644 packages/remix/.npmignore create mode 100644 packages/remix/CHANGELOG.md create mode 100644 packages/remix/LICENSE create mode 100644 packages/remix/README.md create mode 100644 packages/remix/jest.config.js create mode 100644 packages/remix/package.json create mode 100644 packages/remix/src/bindings.tsx create mode 100644 packages/remix/src/convert-to-number-if-possible.ts create mode 100644 packages/remix/src/index.ts create mode 100644 packages/remix/src/legacy/checkAuthentication.ts create mode 100644 packages/remix/src/legacy/index.ts create mode 100644 packages/remix/src/legacy/prompt.tsx create mode 100644 packages/remix/src/legacy/routeComponent.tsx create mode 100644 packages/remix/src/legacy/routerProvider.ts create mode 100644 packages/remix/src/legacy/useParams.ts create mode 100644 packages/remix/src/navigate-to-resource.ts create mode 100644 packages/remix/src/params-from-current-path/index.test.ts create mode 100644 packages/remix/src/params-from-current-path/index.ts create mode 100644 packages/remix/src/parse-table-params.ts create mode 100644 packages/remix/src/refine-routes.tsx create mode 100644 packages/remix/src/unsaved-changes-notifier.tsx create mode 100644 packages/remix/tsconfig.declarations.json create mode 100644 packages/remix/tsconfig.json create mode 100644 packages/remix/tsup.config.ts create mode 100644 packages/shared/get-refine-core-version.ts create mode 100644 packages/shared/lodash-replace-plugin.ts create mode 100644 packages/shared/mark-as-external-plugin.ts create mode 100644 packages/shared/remove-test-ids-plugin.ts create mode 100644 packages/shared/replace-core-version-plugin.ts create mode 100644 packages/simple-rest/.npmignore create mode 100644 packages/simple-rest/CHANGELOG.md create mode 100644 packages/simple-rest/LICENSE create mode 100644 packages/simple-rest/README.md create mode 100644 packages/simple-rest/jest.config.js create mode 100644 packages/simple-rest/package.json create mode 100644 packages/simple-rest/refine.config.js create mode 100644 packages/simple-rest/src/index.ts create mode 100644 packages/simple-rest/src/provider.ts create mode 100644 packages/simple-rest/src/utils/axios.ts create mode 100644 packages/simple-rest/src/utils/generateFilter.ts create mode 100644 packages/simple-rest/src/utils/generateSort.ts create mode 100644 packages/simple-rest/src/utils/index.ts create mode 100644 packages/simple-rest/src/utils/mapOperator.ts create mode 100644 packages/simple-rest/test/create/index.mock.ts create mode 100644 packages/simple-rest/test/create/index.spec.ts create mode 100644 packages/simple-rest/test/custom/index.mock.ts create mode 100644 packages/simple-rest/test/custom/index.spec.ts create mode 100644 packages/simple-rest/test/deleteOne/index.mock.ts create mode 100644 packages/simple-rest/test/deleteOne/index.spec.ts create mode 100644 packages/simple-rest/test/getList/index.mock.ts create mode 100644 packages/simple-rest/test/getList/index.spec.ts create mode 100644 packages/simple-rest/test/getOne/index.mock.ts create mode 100644 packages/simple-rest/test/getOne/index.spec.ts create mode 100644 packages/simple-rest/test/jest.setup.ts create mode 100644 packages/simple-rest/test/update/index.mock.ts create mode 100644 packages/simple-rest/test/update/index.spec.ts create mode 100644 packages/simple-rest/test/utils/generateFilter.spec.ts create mode 100644 packages/simple-rest/test/utils/generateSort.spec.ts create mode 100644 packages/simple-rest/test/utils/mapOperator.spec.ts create mode 100644 packages/simple-rest/tsconfig.declarations.json create mode 100644 packages/simple-rest/tsconfig.json create mode 100644 packages/simple-rest/tsup.config.ts create mode 100644 packages/strapi-v4/.npmignore create mode 100644 packages/strapi-v4/CHANGELOG.md create mode 100644 packages/strapi-v4/LICENSE create mode 100644 packages/strapi-v4/README.md create mode 100644 packages/strapi-v4/jest.config.js create mode 100644 packages/strapi-v4/package.json create mode 100644 packages/strapi-v4/refine.config.js create mode 100644 packages/strapi-v4/src/dataProvider.ts create mode 100644 packages/strapi-v4/src/helpers/auth.ts create mode 100644 packages/strapi-v4/src/helpers/index.ts create mode 100644 packages/strapi-v4/src/helpers/normalize.ts create mode 100644 packages/strapi-v4/src/index.ts create mode 100644 packages/strapi-v4/src/utils/axios.ts create mode 100644 packages/strapi-v4/src/utils/generateFilter.ts create mode 100644 packages/strapi-v4/src/utils/generateSort.ts create mode 100644 packages/strapi-v4/src/utils/index.ts create mode 100644 packages/strapi-v4/src/utils/mapOperator.ts create mode 100644 packages/strapi-v4/src/utils/normalizeData.ts create mode 100644 packages/strapi-v4/src/utils/transformErrorMessages.ts create mode 100644 packages/strapi-v4/src/utils/transformHttpError.ts create mode 100644 packages/strapi-v4/test/auth/index.mock.ts create mode 100644 packages/strapi-v4/test/auth/index.spec.ts create mode 100644 packages/strapi-v4/test/dataProvider/index.mock.ts create mode 100644 packages/strapi-v4/test/dataProvider/index.spec.ts create mode 100644 packages/strapi-v4/test/jest.setup.ts create mode 100644 packages/strapi-v4/test/utils/generateFilter.spec.ts create mode 100644 packages/strapi-v4/test/utils/generateSort.spec.ts create mode 100644 packages/strapi-v4/test/utils/mapOperator.spec.ts create mode 100644 packages/strapi-v4/test/utils/normalizeData.spec.ts create mode 100644 packages/strapi-v4/test/utils/transformErrorMessages.spec.ts create mode 100644 packages/strapi-v4/test/utils/transformHttpError.spec.ts create mode 100644 packages/strapi-v4/tsconfig.declarations.json create mode 100644 packages/strapi-v4/tsconfig.json create mode 100644 packages/strapi-v4/tsup.config.ts create mode 100644 packages/strapi/.npmignore create mode 100644 packages/strapi/CHANGELOG.md create mode 100644 packages/strapi/LICENSE create mode 100644 packages/strapi/README.md create mode 100644 packages/strapi/jest.config.js create mode 100644 packages/strapi/package.json create mode 100644 packages/strapi/src/dataProvider.ts create mode 100644 packages/strapi/src/helpers/auth.ts create mode 100644 packages/strapi/src/helpers/index.ts create mode 100644 packages/strapi/src/helpers/normalize.ts create mode 100644 packages/strapi/src/hooks/index.ts create mode 100644 packages/strapi/src/hooks/upload.ts create mode 100644 packages/strapi/src/index.ts create mode 100644 packages/strapi/test/auth/index.mock.ts create mode 100644 packages/strapi/test/auth/index.spec.ts create mode 100644 packages/strapi/test/dataProvider/index.mock.ts create mode 100644 packages/strapi/test/dataProvider/index.spec.ts create mode 100644 packages/strapi/test/jest.setup.ts create mode 100644 packages/strapi/tsconfig.declarations.json create mode 100644 packages/strapi/tsconfig.json create mode 100644 packages/strapi/tsup.config.ts create mode 100644 packages/supabase/.npmignore create mode 100644 packages/supabase/CHANGELOG.md create mode 100644 packages/supabase/LICENSE create mode 100644 packages/supabase/README.md create mode 100644 packages/supabase/jest.config.js create mode 100644 packages/supabase/package.json create mode 100644 packages/supabase/refine.config.js create mode 100644 packages/supabase/src/dataProvider/index.ts create mode 100644 packages/supabase/src/index.ts create mode 100644 packages/supabase/src/liveProvider/index.ts create mode 100644 packages/supabase/src/types/index.ts create mode 100644 packages/supabase/src/utils/generateFilter.ts create mode 100644 packages/supabase/src/utils/handleError.ts create mode 100644 packages/supabase/src/utils/index.ts create mode 100644 packages/supabase/src/utils/mapOperator.ts create mode 100644 packages/supabase/test/create/index.mock.ts create mode 100644 packages/supabase/test/create/index.spec.ts create mode 100644 packages/supabase/test/createMany/index.mock.ts create mode 100644 packages/supabase/test/createMany/index.spec.ts create mode 100644 packages/supabase/test/custom/index.spec.ts create mode 100644 packages/supabase/test/deleteMany/index.mock.ts create mode 100644 packages/supabase/test/deleteMany/index.spec.ts create mode 100644 packages/supabase/test/deleteOne/index.mock.ts create mode 100644 packages/supabase/test/deleteOne/index.spec.ts create mode 100644 packages/supabase/test/getApiUrl/index.spec.ts create mode 100644 packages/supabase/test/getList/index.mock.ts create mode 100644 packages/supabase/test/getList/index.spec.ts create mode 100644 packages/supabase/test/getMany/index.mock.ts create mode 100644 packages/supabase/test/getMany/index.spec.ts create mode 100644 packages/supabase/test/getOne/index.mock.ts create mode 100644 packages/supabase/test/getOne/index.spec.ts create mode 100644 packages/supabase/test/jest.setup.ts create mode 100644 packages/supabase/test/supabaseClient.ts create mode 100644 packages/supabase/test/update/index.mock.ts create mode 100644 packages/supabase/test/update/index.spec.ts create mode 100644 packages/supabase/test/updateMany/index.mock.ts create mode 100644 packages/supabase/test/updateMany/index.spec.ts create mode 100644 packages/supabase/test/utils/generateFilter.spec.ts create mode 100644 packages/supabase/test/utils/handleError.spec.ts create mode 100644 packages/supabase/test/utils/mapOperator.spec.ts create mode 100644 packages/supabase/tsconfig.declarations.json create mode 100644 packages/supabase/tsconfig.json create mode 100644 packages/supabase/tsup.config.ts create mode 100644 packages/ui-tests/.npmignore create mode 100644 packages/ui-tests/CHANGELOG.md create mode 100644 packages/ui-tests/README.md create mode 100644 packages/ui-tests/jest.config.js create mode 100644 packages/ui-tests/package.json create mode 100644 packages/ui-tests/src/index.tsx create mode 100644 packages/ui-tests/src/test/dataMocks.tsx create mode 100644 packages/ui-tests/src/test/index.tsx create mode 100644 packages/ui-tests/src/test/jest.setup.ts create mode 100644 packages/ui-tests/src/test/svgTransform.ts create mode 100644 packages/ui-tests/src/tests/autoSaveIndicator.tsx create mode 100644 packages/ui-tests/src/tests/breadcrumb.tsx create mode 100644 packages/ui-tests/src/tests/buttons/clone.tsx create mode 100644 packages/ui-tests/src/tests/buttons/create.tsx create mode 100644 packages/ui-tests/src/tests/buttons/delete.tsx create mode 100644 packages/ui-tests/src/tests/buttons/edit.tsx create mode 100644 packages/ui-tests/src/tests/buttons/export.tsx create mode 100644 packages/ui-tests/src/tests/buttons/import.tsx create mode 100644 packages/ui-tests/src/tests/buttons/index.tsx create mode 100644 packages/ui-tests/src/tests/buttons/list.tsx create mode 100644 packages/ui-tests/src/tests/buttons/refresh.tsx create mode 100644 packages/ui-tests/src/tests/buttons/save.tsx create mode 100644 packages/ui-tests/src/tests/buttons/show.tsx create mode 100644 packages/ui-tests/src/tests/crud/create.tsx create mode 100644 packages/ui-tests/src/tests/crud/edit.tsx create mode 100644 packages/ui-tests/src/tests/crud/index.tsx create mode 100644 packages/ui-tests/src/tests/crud/list.tsx create mode 100644 packages/ui-tests/src/tests/crud/show.tsx create mode 100644 packages/ui-tests/src/tests/fields/boolean.tsx create mode 100644 packages/ui-tests/src/tests/fields/date.tsx create mode 100644 packages/ui-tests/src/tests/fields/email.tsx create mode 100644 packages/ui-tests/src/tests/fields/file.tsx create mode 100644 packages/ui-tests/src/tests/fields/image.tsx create mode 100644 packages/ui-tests/src/tests/fields/index.tsx create mode 100644 packages/ui-tests/src/tests/fields/markdown.tsx create mode 100644 packages/ui-tests/src/tests/fields/number.tsx create mode 100644 packages/ui-tests/src/tests/fields/tag.tsx create mode 100644 packages/ui-tests/src/tests/fields/text.tsx create mode 100644 packages/ui-tests/src/tests/fields/url.tsx create mode 100644 packages/ui-tests/src/tests/index.tsx create mode 100644 packages/ui-tests/src/tests/layout/footer.tsx create mode 100644 packages/ui-tests/src/tests/layout/header.tsx create mode 100644 packages/ui-tests/src/tests/layout/index.tsx create mode 100644 packages/ui-tests/src/tests/layout/layout.tsx create mode 100644 packages/ui-tests/src/tests/layout/sider.tsx create mode 100644 packages/ui-tests/src/tests/layout/title.tsx create mode 100644 packages/ui-tests/src/tests/pages/auth/authPage.tsx create mode 100644 packages/ui-tests/src/tests/pages/auth/forgotPassword.tsx create mode 100644 packages/ui-tests/src/tests/pages/auth/index.ts create mode 100644 packages/ui-tests/src/tests/pages/auth/login.tsx create mode 100644 packages/ui-tests/src/tests/pages/auth/register.tsx create mode 100644 packages/ui-tests/src/tests/pages/auth/updatePassword.tsx create mode 100644 packages/ui-tests/src/tests/pages/error.tsx create mode 100644 packages/ui-tests/src/tests/pages/index.tsx create mode 100644 packages/ui-tests/src/tests/pages/ready.tsx create mode 100644 packages/ui-tests/tsconfig.declarations.json create mode 100644 packages/ui-tests/tsconfig.json create mode 100644 packages/ui-tests/tsconfig.test.json create mode 100644 packages/ui-tests/tsup.config.ts create mode 100644 packages/ui-tests/util.d.ts create mode 100644 packages/ui-types/.npmignore create mode 100644 packages/ui-types/CHANGELOG.md create mode 100644 packages/ui-types/README.md create mode 100644 packages/ui-types/package.json create mode 100644 packages/ui-types/src/classNames.ts create mode 100644 packages/ui-types/src/ids.tsx create mode 100644 packages/ui-types/src/index.tsx create mode 100644 packages/ui-types/src/types/breadcrumb.tsx create mode 100644 packages/ui-types/src/types/button.tsx create mode 100644 packages/ui-types/src/types/crud.tsx create mode 100644 packages/ui-types/src/types/field.tsx create mode 100644 packages/ui-types/src/types/index.tsx create mode 100644 packages/ui-types/src/types/layout.tsx create mode 100644 packages/ui-types/src/types/page.tsx create mode 100644 packages/ui-types/tsconfig.declarations.json create mode 100644 packages/ui-types/tsconfig.json create mode 100644 packages/ui-types/tsup.config.ts diff --git a/packages/ably/.npmignore b/packages/ably/.npmignore new file mode 100644 index 0000000..3321cad --- /dev/null +++ b/packages/ably/.npmignore @@ -0,0 +1,11 @@ +node_modules +.DS_Store +test +jest.config.js +**/*.spec.ts +**/*.spec.tsx +**/*.test.ts +**/*.test.tsx +tsup.config.ts +tsconfig.test.json +tsconfig.declarations.json \ No newline at end of file diff --git a/packages/ably/CHANGELOG.md b/packages/ably/CHANGELOG.md new file mode 100644 index 0000000..4851d04 --- /dev/null +++ b/packages/ably/CHANGELOG.md @@ -0,0 +1,93 @@ +# @refinedev/ably + +## 4.1.4 + +### Patch Changes + +- [#5425](https://github.com/refinedev/refine/pull/5425) [`190af9fce2`](https://github.com/refinedev/refine/commit/190af9fce292bc46b169e3e121be6bf1c2a939a5) Thanks [@aliemir](https://github.com/aliemir)! - Updated `@refinedev/core` peer dependencies to latest (`^4.46.1`) + +## 4.1.3 + +### Patch Changes + +- [#5330](https://github.com/refinedev/refine/pull/5330) [`7c8827b43d`](https://github.com/refinedev/refine/commit/7c8827b43d9e378818be6ee23032925c97ce02d5) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: upgrade nock library version to ^13.4.0 + +## 4.1.2 + +### Patch Changes + +- [#5022](https://github.com/refinedev/refine/pull/5022) [`80513a4e42f`](https://github.com/refinedev/refine/commit/80513a4e42f8dda39e01157643594a9e4c32001b) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: update README.md + + - fix grammar errors. + - make all README.md files consistent. + - add code example code snippets. + +## 4.1.1 + +### Patch Changes + +- [#5022](https://github.com/refinedev/refine/pull/5022) [`80513a4e42f`](https://github.com/refinedev/refine/commit/80513a4e42f8dda39e01157643594a9e4c32001b) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: update README.md + + - fix grammar errors. + - make all README.md files consistent. + - add code example code snippets. + +## 4.1.0 + +### Minor Changes + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + **Moving to the `@refinedev` scope πŸŽ‰πŸŽ‰** + + Moved to the `@refinedev` scope and updated our packages to use the new scope. From now on, all packages will be published under the `@refinedev` scope with their new names. + + Now, we're also removing the `refine` prefix from all packages. So, the `@pankod/refine-core` package is now `@refinedev/core`, `@pankod/refine-antd` is now `@refinedev/antd`, and so on. + +### Patch Changes + +## 3.31.0 + +### Minor Changes + +- [#3822](https://github.com/refinedev/refine/pull/3822) [`0baa99ba787`](https://github.com/refinedev/refine/commit/0baa99ba7874394d9d28d0a7b29c082c604258fb) Thanks [@BatuhanW](https://github.com/BatuhanW)! - - refine v4 release announcement added to "postinstall". - refine v4 is released πŸŽ‰ The new version is 100% backward compatible. You can upgrade to v4 with a single command! See the migration guide here: https://refine.dev/docs/migration-guide/3x-to-4x + +## 3.30.0 + +### Minor Changes + +- [#3822](https://github.com/refinedev/refine/pull/3822) [`0baa99ba787`](https://github.com/refinedev/refine/commit/0baa99ba7874394d9d28d0a7b29c082c604258fb) Thanks [@BatuhanW](https://github.com/BatuhanW)! - - refine v4 release announcement added to "postinstall". - refine v4 is released πŸŽ‰ The new version is 100% backward compatible. You can upgrade to v4 with a single command! See the migration guide here: https://refine.dev/docs/migration-guide/3x-to-4x + +## 3.29.0 + +### Minor Changes + +- Update type declaration generation with `tsc` instead of `tsup` for better navigation throughout projects source code. + +## 3.28.0 + +### Minor Changes + +- [#2440](https://github.com/refinedev/refine/pull/2440) [`0150dcd070`](https://github.com/refinedev/refine/commit/0150dcd0700253f1c4908e7e5f2e178bb122e9af) Thanks [@aliemir](https://github.com/aliemir)! - Update type declaration generation with `tsc` instead of `tsup` for better navigation throughout projects source code. + +## 3.27.0 + +### Minor Changes + +- All of the refine packages have dependencies on the `@pankod/refine-core` package. So far we have managed these dependencies with `peerDependencies` + `dependencies` but this causes issues like #2183. (having more than one @pankod/refine-core version in node_modules and creating different instances) + + Managing as `peerDependencies` + `devDependencies` seems like the best way for now to avoid such issues. + +## 3.26.0 + +### Minor Changes + +- [#2217](https://github.com/refinedev/refine/pull/2217) [`b4aae00f77`](https://github.com/refinedev/refine/commit/b4aae00f77a2476d847994db21298ae25e4cf6e5) Thanks [@omeraplak](https://github.com/omeraplak)! - All of the refine packages have dependencies on the `@pankod/refine-core` package. So far we have managed these dependencies with `peerDependencies` + `dependencies` but this causes issues like #2183. (having more than one @pankod/refine-core version in node_modules and creating different instances) + + Managing as `peerDependencies` + `devDependencies` seems like the best way for now to avoid such issues. + +## 3.22.2 + +### Patch Changes + +- Updated dependencies [[`2deb19babf`](https://github.com/refinedev/refine/commit/2deb19babfc6db5b00b111ec29aa5ece4c371bbc)]: + - @pankod/refine-core@3.23.2 diff --git a/packages/ably/LICENSE b/packages/ably/LICENSE new file mode 100644 index 0000000..1028bea --- /dev/null +++ b/packages/ably/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Refine Development Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/ably/README.md b/packages/ably/README.md new file mode 100644 index 0000000..c7409d7 --- /dev/null +++ b/packages/ably/README.md @@ -0,0 +1,74 @@ +
+ + refine logo + +
+ +
+ +
+ Home Page | + Discord | + Examples | + Blog | + Documentation + +
+
+ +[![Discord](https://img.shields.io/discord/837692625737613362.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/refine) +[![Twitter Follow](https://img.shields.io/twitter/follow/refine_dev?style=social)](https://twitter.com/refine_dev) + +refine - 100% open source React framework to build web apps 3x faster | Product Hunt + +
+ +
+ +
refine is an open-source, headless React framework for developers building enterprise internal tools, admin panels, dashboards, B2B applications. + +
+ +It eliminates repetitive tasks in CRUD operations and provides industry-standard solutions for critical project components like **authentication**, **access control**, **routing**, **networking**, **state management**, and **i18n**. + +
+ +
+ +# Ably integration for refine + +[Ably](https://ably.com/) reliably distributes realtime data to your users using the publish/subscribe messaging pattern over WebSocket connections. + +[refine](https://refine.dev/) is **headless by design**, offering unlimited styling and customization options. Moreover, refine ships with ready-made integrations for [Ant Design](https://ant.design/), [Material UI](https://mui.com/material-ui/getting-started/overview/), [Mantine](https://mantine.dev/), and [Chakra UI](https://chakra-ui.com/) for convenience. + +refine has connectors for 15+ backend services, including REST API, [GraphQL](https://graphql.org/), and popular services like [Airtable](https://www.airtable.com/), [Strapi](https://strapi.io/), [Supabase](https://supabase.com/), [Firebase](https://firebase.google.com/), and [NestJS](https://nestjs.com/). + +## Installation & Usage + +``` +npm install @refinedev/ably +``` + +```tsx +import { liveProvider, Ably } from "@refinedev/ably"; + +export const ablyClient = new Ably.Realtime("YOUR_API_TOKEN"); + +const App = () => { + return ( + + {/* ... */} + + ); +}; +``` + +## Documentation + +- For more detailed information and usage, refer to the [refine live provider documentation](https://refine.dev/docs/api-references/providers/live-provider/). +- Refer to refine & Ably tutorial on [official Ably docs](https://ably.com/tutorials/react-admin-panel-with-ably-and-refine). +- [Refer to documentation for more info about refine](https://refine.dev/docs/). +- [Step up to refine tutorials](https://refine.dev/docs/tutorial/introduction/index/). diff --git a/packages/ably/jest.config.js b/packages/ably/jest.config.js new file mode 100644 index 0000000..824244a --- /dev/null +++ b/packages/ably/jest.config.js @@ -0,0 +1,6 @@ +module.exports = { + preset: "ts-jest", + rootDir: "./", + displayName: "ably", + testEnvironment: "jsdom", +}; diff --git a/packages/ably/package.json b/packages/ably/package.json new file mode 100644 index 0000000..780a84f --- /dev/null +++ b/packages/ably/package.json @@ -0,0 +1,50 @@ +{ + "name": "@refinedev/ably", + "description": "refine ably live provider. refine is a React-based framework for building internal tools, rapidly. It ships with Ant Design System, an enterprise-level UI toolkit.", + "version": "4.1.4", + "license": "MIT", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "private": false, + "files": [ + "dist", + "src" + ], + "engines": { + "node": ">=10" + }, + "scripts": { + "start": "tsup --watch --format esm,cjs,iife --legacy-output", + "build": "tsup --format esm,cjs,iife --minify --legacy-output", + "test": "jest --passWithNoTests --runInBand", + "prepare": "npm run build" + }, + "author": "refine", + "module": "dist/esm/index.js", + "devDependencies": { + "@refinedev/core": "^4.46.1", + "@esbuild-plugins/node-resolve": "^0.1.4", + "@types/jest": "^29.2.4", + "jest": "^29.3.1", + "jest-environment-jsdom": "^29.3.1", + "nock": "^13.4.0", + "ts-jest": "^29.0.3", + "tslib": "^2.3.1", + "tsup": "^6.7.0" + }, + "dependencies": { + "ably": "^1.2.15" + }, + "peerDependencies": { + "@refinedev/core": "^4.46.1" + }, + "repository": { + "type": "git", + "url": "https://github.com/refinedev/refine.git", + "directory": "packages/ably" + }, + "gitHead": "829f5a516f98c06f666d6be3e6e6099c75c07719", + "publishConfig": { + "access": "public" + } +} diff --git a/packages/ably/src/index.ts b/packages/ably/src/index.ts new file mode 100644 index 0000000..f6444c1 --- /dev/null +++ b/packages/ably/src/index.ts @@ -0,0 +1,57 @@ +import { LiveProvider, LiveEvent } from "@refinedev/core"; +import Ably from "ably/promises"; +import { Types } from "ably"; +interface MessageType extends Types.Message { + data: LiveEvent; +} + +const liveProvider = (client: Ably.Realtime): LiveProvider => { + return { + subscribe: ({ channel, types, params, callback }) => { + const channelInstance = client.channels.get(channel); + + const listener = function (message: MessageType) { + if (types.includes("*") || types.includes(message.data.type)) { + if ( + message.data.type !== "created" && + params?.ids !== undefined && + message.data?.payload?.ids !== undefined + ) { + if ( + params.ids + .map(String) + .filter((value) => + message.data.payload.ids + ?.map(String) + .includes(value), + ).length > 0 + ) { + callback(message.data as LiveEvent); + } + } else { + callback(message.data); + } + } + }; + channelInstance.subscribe(listener); + + return { channelInstance, listener }; + }, + + unsubscribe: (payload: { + channelInstance: Types.RealtimeChannelPromise; + listener: () => void; + }) => { + const { channelInstance, listener } = payload; + channelInstance.unsubscribe(listener); + }, + + publish: (event: LiveEvent) => { + const channelInstance = client.channels.get(event.channel); + + channelInstance.publish(event.type, event); + }, + }; +}; + +export { liveProvider, Ably }; diff --git a/packages/ably/tsconfig.declarations.json b/packages/ably/tsconfig.declarations.json new file mode 100644 index 0000000..53758e8 --- /dev/null +++ b/packages/ably/tsconfig.declarations.json @@ -0,0 +1,21 @@ +{ + "extends": "./tsconfig.json", + "exclude": [ + "node_modules", + "dist", + "test", + "../test/**/*", + "**/*.spec.ts", + "**/*.test.ts", + "**/*.spec.tsx", + "**/*.test.tsx" + ], + "compilerOptions": { + "outDir": "dist", + "declarationDir": "dist", + "declaration": true, + "emitDeclarationOnly": true, + "noEmit": false, + "declarationMap": true + } +} diff --git a/packages/ably/tsconfig.json b/packages/ably/tsconfig.json new file mode 100644 index 0000000..08c7411 --- /dev/null +++ b/packages/ably/tsconfig.json @@ -0,0 +1,11 @@ +{ + "include": [ + "src", + "types" + ], + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "rootDir": "./src", + "baseUrl": ".", + } +} \ No newline at end of file diff --git a/packages/ably/tsup.config.ts b/packages/ably/tsup.config.ts new file mode 100644 index 0000000..12c9fbc --- /dev/null +++ b/packages/ably/tsup.config.ts @@ -0,0 +1,24 @@ +import { defineConfig } from "tsup"; +import { NodeResolvePlugin } from "@esbuild-plugins/node-resolve"; + +export default defineConfig({ + entry: ["src/index.ts"], + splitting: false, + sourcemap: true, + clean: false, + platform: "browser", + esbuildPlugins: [ + NodeResolvePlugin({ + extensions: [".js", "ts", "tsx", "jsx"], + onResolved: (resolved) => { + if (resolved.includes("node_modules")) { + return { + external: true, + }; + } + return resolved; + }, + }), + ], + onSuccess: "tsc --project tsconfig.declarations.json", +}); diff --git a/packages/airtable/.npmignore b/packages/airtable/.npmignore new file mode 100644 index 0000000..3321cad --- /dev/null +++ b/packages/airtable/.npmignore @@ -0,0 +1,11 @@ +node_modules +.DS_Store +test +jest.config.js +**/*.spec.ts +**/*.spec.tsx +**/*.test.ts +**/*.test.tsx +tsup.config.ts +tsconfig.test.json +tsconfig.declarations.json \ No newline at end of file diff --git a/packages/airtable/CHANGELOG.md b/packages/airtable/CHANGELOG.md new file mode 100644 index 0000000..ad450e5 --- /dev/null +++ b/packages/airtable/CHANGELOG.md @@ -0,0 +1,357 @@ +# @refinedev/airtable + +## 4.4.6 + +### Patch Changes + +- [#5425](https://github.com/refinedev/refine/pull/5425) [`190af9fce2`](https://github.com/refinedev/refine/commit/190af9fce292bc46b169e3e121be6bf1c2a939a5) Thanks [@aliemir](https://github.com/aliemir)! - Updated `@refinedev/core` peer dependencies to latest (`^4.46.1`) + +## 4.4.5 + +### Patch Changes + +- [#5330](https://github.com/refinedev/refine/pull/5330) [`7c8827b43d`](https://github.com/refinedev/refine/commit/7c8827b43d9e378818be6ee23032925c97ce02d5) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: upgrade nock library version to ^13.4.0 + +## 4.4.4 + +### Patch Changes + +- [#5022](https://github.com/refinedev/refine/pull/5022) [`80513a4e42f`](https://github.com/refinedev/refine/commit/80513a4e42f8dda39e01157643594a9e4c32001b) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: update README.md + + - fix grammar errors. + - make all README.md files consistent. + - add code example code snippets. + +## 4.4.3 + +### Patch Changes + +- [#5022](https://github.com/refinedev/refine/pull/5022) [`80513a4e42f`](https://github.com/refinedev/refine/commit/80513a4e42f8dda39e01157643594a9e4c32001b) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: update README.md + + - fix grammar errors. + - make all README.md files consistent. + - add code example code snippets. + +## 4.4.2 + +### Patch Changes + +- [#4285](https://github.com/refinedev/refine/pull/4285) [`b5cd3328504`](https://github.com/refinedev/refine/commit/b5cd332850428383e8b43f997cbb0340ac7f0dc6) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fixed: A bug that prevented data providers from being swizzled. + +## 4.4.1 + +### Patch Changes + +- [#4285](https://github.com/refinedev/refine/pull/4285) [`b5cd3328504`](https://github.com/refinedev/refine/commit/b5cd332850428383e8b43f997cbb0340ac7f0dc6) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fixed: A bug that prevented data providers from being swizzled. + +## 4.4.0 + +### Minor Changes + +- [#4276](https://github.com/refinedev/refine/pull/4276) [`740cef82e9e`](https://github.com/refinedev/refine/commit/740cef82e9e71274edb4be1d6936a2b74b73b4ec) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: added swizzle to airtable + +## 4.3.0 + +### Minor Changes + +- [#4276](https://github.com/refinedev/refine/pull/4276) [`740cef82e9e`](https://github.com/refinedev/refine/commit/740cef82e9e71274edb4be1d6936a2b74b73b4ec) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: added swizzle to airtable + +## 4.2.0 + +### Minor Changes + +- [#4276](https://github.com/refinedev/refine/pull/4276) [`740cef82e9e`](https://github.com/refinedev/refine/commit/740cef82e9e71274edb4be1d6936a2b74b73b4ec) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: added swizzle to airtable + +## 4.1.0 + +### Minor Changes + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + + - `metaData` prop is now deprecated for all data provider methods. Use `meta` prop instead. + + > For backward compatibility, we still support `metaData` prop with refine v4. + + ```diff + create: async ({ + - metaData + + meta + }) => { + ... + }, + ``` + + - `sort`, `hasPagination`, and `metaData` parameters of `getList` method are now deprecated. Use `sorters`, `pagination`, and `meta` parameters instead. + + > For backward compatibility, we still support `sort`, `hasPagination` and `metaData` props with refine v4. + + ```diff + getList: async ({ + - sort + + sorters + - hasPagination + + pagination: { mode: "off" | "server | "client" } + - metaData + + meta + }) => { + ... + }, + ``` + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + **Moving to the `@refinedev` scope πŸŽ‰πŸŽ‰** + + Moved to the `@refinedev` scope and updated our packages to use the new scope. From now on, all packages will be published under the `@refinedev` scope with their new names. + + Now, we're also removing the `refine` prefix from all packages. So, the `@pankod/refine-core` package is now `@refinedev/core`, `@pankod/refine-antd` is now `@refinedev/antd`, and so on. + +### Patch Changes + +## 3.35.0 + +### Minor Changes + +- [#3822](https://github.com/refinedev/refine/pull/3822) [`0baa99ba787`](https://github.com/refinedev/refine/commit/0baa99ba7874394d9d28d0a7b29c082c604258fb) Thanks [@BatuhanW](https://github.com/BatuhanW)! - - refine v4 release announcement added to "postinstall". - refine v4 is released πŸŽ‰ The new version is 100% backward compatible. You can upgrade to v4 with a single command! See the migration guide here: https://refine.dev/docs/migration-guide/3x-to-4x + +## 3.34.0 + +### Minor Changes + +- [#3822](https://github.com/refinedev/refine/pull/3822) [`0baa99ba787`](https://github.com/refinedev/refine/commit/0baa99ba7874394d9d28d0a7b29c082c604258fb) Thanks [@BatuhanW](https://github.com/BatuhanW)! - - refine v4 release announcement added to "postinstall". - refine v4 is released πŸŽ‰ The new version is 100% backward compatible. You can upgrade to v4 with a single command! See the migration guide here: https://refine.dev/docs/migration-guide/3x-to-4x + +## 3.33.0 + +### Minor Changes + +- Only `or` was supported as a conditional filter. Now `and` and `or` can be used together and nested. πŸš€ + + ``` + { + operator: "or", + value: [ + { + operator: "and", + value: [ + { + field: "name", + operator: "eq", + value: "John Doe", + }, + { + field: "age", + operator: "eq", + value: 30, + }, + ], + }, + { + operator: "and", + value: [ + { + field: "name", + operator: "eq", + value: "JR Doe", + }, + { + field: "age", + operator: "eq", + value: 1, + }, + ], + }, + ], + } + ``` + +## 3.32.0 + +### Minor Changes + +- [#2751](https://github.com/refinedev/refine/pull/2751) [`addff64c77`](https://github.com/refinedev/refine/commit/addff64c777e4c9f044a1a109cb05453e6e9f762) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - Only `or` was supported as a conditional filter. Now `and` and `or` can be used together and nested. πŸš€ + + ``` + { + operator: "or", + value: [ + { + operator: "and", + value: [ + { + field: "name", + operator: "eq", + value: "John Doe", + }, + { + field: "age", + operator: "eq", + value: 30, + }, + ], + }, + { + operator: "and", + value: [ + { + field: "name", + operator: "eq", + value: "JR Doe", + }, + { + field: "age", + operator: "eq", + value: 1, + }, + ], + }, + ], + } + ``` + +## 3.31.0 + +### Minor Changes + +- Updated `dataProvider` types with `Required` utility to mark `getMany`, `createMany`, `updateMany` and `deleteMany` as implemented. + +## 3.30.0 + +### Minor Changes + +- [#2688](https://github.com/refinedev/refine/pull/2688) [`508045ac30`](https://github.com/refinedev/refine/commit/508045ac30cd3948f68497e13fdf04f7c72ce387) Thanks [@aliemir](https://github.com/aliemir)! - Updated `dataProvider` types with `Required` utility to mark `getMany`, `createMany`, `updateMany` and `deleteMany` as implemented. + +## 3.29.0 + +### Minor Changes + +- Update type declaration generation with `tsc` instead of `tsup` for better navigation throughout projects source code. + +## 3.28.0 + +### Minor Changes + +- [#2440](https://github.com/refinedev/refine/pull/2440) [`0150dcd070`](https://github.com/refinedev/refine/commit/0150dcd0700253f1c4908e7e5f2e178bb122e9af) Thanks [@aliemir](https://github.com/aliemir)! - Update type declaration generation with `tsc` instead of `tsup` for better navigation throughout projects source code. + +## 3.27.0 + +### Minor Changes + +- All of the refine packages have dependencies on the `@pankod/refine-core` package. So far we have managed these dependencies with `peerDependencies` + `dependencies` but this causes issues like #2183. (having more than one @pankod/refine-core version in node_modules and creating different instances) + + Managing as `peerDependencies` + `devDependencies` seems like the best way for now to avoid such issues. + +## 3.26.0 + +### Minor Changes + +- [#2217](https://github.com/refinedev/refine/pull/2217) [`b4aae00f77`](https://github.com/refinedev/refine/commit/b4aae00f77a2476d847994db21298ae25e4cf6e5) Thanks [@omeraplak](https://github.com/omeraplak)! - All of the refine packages have dependencies on the `@pankod/refine-core` package. So far we have managed these dependencies with `peerDependencies` + `dependencies` but this causes issues like #2183. (having more than one @pankod/refine-core version in node_modules and creating different instances) + + Managing as `peerDependencies` + `devDependencies` seems like the best way for now to avoid such issues. + +## 3.25.6 + +### Patch Changes + +- Updated pagination parameters default values and added `hasPagination` property to `getList` method of the data providers. + + **Implementation** + + Updated the `getList` method accordingly to the changes in the `useTable` and `useList` of `@pankod/refine-core`. `hasPagination` is used to disable pagination (defaults to `true`) + + **Use Cases** + + For some resources, there might be no support for pagination or users might want to see all of the data without any pagination, prior to these changes this was not supported in **refine** data providers. + +- Updated dependencies []: + - @pankod/refine-core@3.36.0 + +## 3.25.5 + +### Patch Changes + +- [#2050](https://github.com/refinedev/refine/pull/2050) [`635cfe9fdb`](https://github.com/refinedev/refine/commit/635cfe9fdbfe5940b950ae99c1f0b686c78bb8e5) Thanks [@ozkalai](https://github.com/ozkalai)! - Updated pagination parameters default values and added `hasPagination` property to `getList` method of the data providers. + + **Implementation** + + Updated the `getList` method accordingly to the changes in the `useTable` and `useList` of `@pankod/refine-core`. `hasPagination` is used to disable pagination (defaults to `true`) + + **Use Cases** + + For some resources, there might be no support for pagination or users might want to see all of the data without any pagination, prior to these changes this was not supported in **refine** data providers. + +- Updated dependencies [[`ecde34a9b3`](https://github.com/refinedev/refine/commit/ecde34a9b38ef5667fa863f9ebb9dcb1cfff1651), [`635cfe9fdb`](https://github.com/refinedev/refine/commit/635cfe9fdbfe5940b950ae99c1f0b686c78bb8e5)]: + - @pankod/refine-core@3.35.0 + +## 3.25.4 + +### Patch Changes + +- Updated axios version (0.21.4 to 0.26.1). In this version, the way of sending headers has changed as follows. + + ``` + // old v0.21.4 + axiosInstance.defaults.headers = { Authorization: `Bearer ${data.jwt}` }; + + // new v0.26.1 + axiosInstance.defaults.headers.common["Authorization"] = `Bearer ${data.jwt}`; + ``` + +- Updated dependencies []: + - @pankod/refine-core@3.29.0 + +## 3.25.3 + +### Patch Changes + +- Updated axios version (0.21.4 to 0.26.1). In this version, the way of sending headers has changed as follows. + + ``` + // old v0.21.4 + axiosInstance.defaults.headers = { Authorization: `Bearer ${data.jwt}` }; + + // new v0.26.1 + axiosInstance.defaults.headers.common["Authorization"] = `Bearer ${data.jwt}`; + ``` + +- Updated dependencies []: + - @pankod/refine-core@3.28.0 + +## 3.25.2 + +### Patch Changes + +- Updated axios version (0.21.4 to 0.26.1). In this version, the way of sending headers has changed as follows. + + ``` + // old v0.21.4 + axiosInstance.defaults.headers = { Authorization: `Bearer ${data.jwt}` }; + + // new v0.26.1 + axiosInstance.defaults.headers.common["Authorization"] = `Bearer ${data.jwt}`; + ``` + +- Updated dependencies []: + - @pankod/refine-core@3.27.0 + +## 3.25.1 + +### Patch Changes + +- [#1899](https://github.com/refinedev/refine/pull/1899) [`fbfea418a0`](https://github.com/refinedev/refine/commit/fbfea418a024a527a2b432c634f46a96d4f70d88) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - Updated axios version (0.21.4 to 0.26.1). In this version, the way of sending headers has changed as follows. + + ``` + // old v0.21.4 + axiosInstance.defaults.headers = { Authorization: `Bearer ${data.jwt}` }; + + // new v0.26.1 + axiosInstance.defaults.headers.common["Authorization"] = `Bearer ${data.jwt}`; + ``` + +- Updated dependencies [[`2ba2a96fd2`](https://github.com/refinedev/refine/commit/2ba2a96fd24aa733c355ac9ef4c99b7d48115746)]: + - @pankod/refine-core@3.26.0 + +## 3.22.2 + +### Patch Changes + +- Updated dependencies [[`2deb19babf`](https://github.com/refinedev/refine/commit/2deb19babfc6db5b00b111ec29aa5ece4c371bbc)]: + - @pankod/refine-core@3.23.2 diff --git a/packages/airtable/LICENSE b/packages/airtable/LICENSE new file mode 100644 index 0000000..1028bea --- /dev/null +++ b/packages/airtable/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Refine Development Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/airtable/README.md b/packages/airtable/README.md new file mode 100644 index 0000000..5044d8a --- /dev/null +++ b/packages/airtable/README.md @@ -0,0 +1,70 @@ +
+ + refine logo + +
+ +
+ +
+ Home Page | + Discord | + Examples | + Blog | + Documentation + +
+
+ +[![Discord](https://img.shields.io/discord/837692625737613362.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/refine) +[![Twitter Follow](https://img.shields.io/twitter/follow/refine_dev?style=social)](https://twitter.com/refine_dev) + +refine - 100% open source React framework to build web apps 3x faster | Product Hunt + +
+ +
+ +
refine is an open-source, headless React framework for developers building enterprise internal tools, admin panels, dashboards, B2B applications. + +
+ +It eliminates repetitive tasks in CRUD operations and provides industry-standard solutions for critical project components like **authentication**, **access control**, **routing**, **networking**, **state management**, and **i18n**. + +
+ +# Airtable integration for refine + +[Airtable](https://www.airtable.com/) is a cloud-based platform for creating and sharing relational databases. + +[refine](https://refine.dev/) is **headless by design**, offering unlimited styling and customization options. Moreover, refine ships with ready-made integrations for [Ant Design](https://ant.design/), [Material UI](https://mui.com/material-ui/getting-started/overview/), [Mantine](https://mantine.dev/), and [Chakra UI](https://chakra-ui.com/) for convenience. + +refine has connectors for 15+ backend services, including REST API, [GraphQL](https://graphql.org/), and popular services like [Airtable](https://www.airtable.com/), [Strapi](https://strapi.io/), [Supabase](https://supabase.com/), [Firebase](https://firebase.google.com/), and [NestJS](https://nestjs.com/). + +## Installation & Usage + +``` +npm install @refinedev/airtable +``` + +```tsx +import dataProvider from "@refinedev/airtable"; + +const App = () => { + return ( + + {/* ... */} + + ); +}; +``` + +## Documentation + +- For more detailed information and usage, refer to the [refine data provider documentation](https://refine.dev/docs/core/providers/data-provider). +- [Refer to refine Airtable example](https://refine.dev/docs/examples/data-provider/airtable/). +- [Refer to documentation for more info about refine](https://refine.dev/docs/). +- [Step up to refine tutorials](https://refine.dev/docs/tutorial/introduction/index/). diff --git a/packages/airtable/jest.config.js b/packages/airtable/jest.config.js new file mode 100644 index 0000000..08c8ff4 --- /dev/null +++ b/packages/airtable/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + preset: "ts-jest", + rootDir: "./", + displayName: "airtable", + setupFilesAfterEnv: ["/test/jest.setup.js"], + testEnvironment: "jsdom", +}; diff --git a/packages/airtable/package.json b/packages/airtable/package.json new file mode 100644 index 0000000..a7fb0a8 --- /dev/null +++ b/packages/airtable/package.json @@ -0,0 +1,54 @@ +{ + "name": "@refinedev/airtable", + "description": "refine Airtable data provider. refine is a React-based framework for building internal tools, rapidly. It ships with Ant Design System, an enterprise-level UI toolkit.", + "version": "4.4.6", + "license": "MIT", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "private": false, + "files": [ + "dist", + "src", + "./refine.config.js" + ], + "engines": { + "node": ">=10" + }, + "scripts": { + "start": "tsup --watch --format esm,cjs,iife --legacy-output", + "build": "tsup --format esm,cjs,iife --minify --legacy-output", + "test": "jest --passWithNoTests --runInBand", + "prepare": "npm run build" + }, + "author": "refine", + "module": "dist/esm/index.js", + "devDependencies": { + "@refinedev/core": "4.46.2", + "@esbuild-plugins/node-resolve": "^0.1.4", + "@types/jest": "^29.2.4", + "jest": "^29.3.1", + "jest-environment-jsdom": "^29.3.1", + "nock": "^13.4.0", + "ts-jest": "^29.0.3", + "tslib": "^2.3.1", + "tsup": "^6.7.0" + }, + "dependencies": { + "@qualifyze/airtable-formulator": "^1.0.1", + "airtable": "^0.11.1", + "asyncairtable": "^2.1.0", + "query-string": "^7.1.1" + }, + "peerDependencies": { + "@refinedev/core": "^4.46.1" + }, + "repository": { + "type": "git", + "url": "https://github.com/refinedev/refine.git", + "directory": "packages/airtable" + }, + "gitHead": "829f5a516f98c06f666d6be3e6e6099c75c07719", + "publishConfig": { + "access": "public" + } +} diff --git a/packages/airtable/refine.config.js b/packages/airtable/refine.config.js new file mode 100644 index 0000000..f3faa14 --- /dev/null +++ b/packages/airtable/refine.config.js @@ -0,0 +1,80 @@ +/** @type {import('@refinedev/cli').RefineConfig} */ + +module.exports = { + group: "Data Provider", + swizzle: { + items: [ + { + label: "Data Provider", + requiredPackages: [ + "@qualifyze/airtable-formulator@1.0.1", + "airtable@0.11.1", + "asyncairtable@2.1.0", + "query-string@7.1.1", + ], + files: [ + { + src: "./src/index.ts", + dest: "./providers/airtable/index.ts", + }, + { + src: "./src/dataProvider.ts", + dest: "./providers/airtable/dataProvider.ts", + }, + { + src: "./src/utils/index.ts", + dest: "./providers/airtable/utils/index.ts", + }, + { + src: "./src/utils/generateFilter.ts", + dest: "./providers/airtable/utils/generateFilter.ts", + }, + { + src: "./src/utils/generateFilterFormula.ts", + dest: "./providers/airtable/utils/generateFilterFormula.ts", + }, + { + src: "./src/utils/generateLogicalFilterFormula.ts", + dest: "./providers/airtable/utils/generateLogicalFilterFormula.ts", + }, + { + src: "./src/utils/generateLogicalFilterFormula.ts", + dest: "./providers/airtable/utils/generateLogicalFilterFormula.ts", + }, + { + src: "./src/utils/generateSort.ts", + dest: "./providers/airtable/utils/generateSort.ts", + }, + { + src: "./src/utils/isContainsOperator.ts", + dest: "./providers/airtable/utils/isContainsOperator.ts", + }, + { + src: "./src/utils/isSimpleOperator.ts", + dest: "./providers/airtable/utils/isSimpleOperator.ts", + }, + ], + message: ` + **\`Usage\`** + + \`\`\` + // title: App.tsx + import { dataProvider } from "./providers/airtable"; + + const API_TOKEN = "dummy-api-token"; + const BASE_ID = "dummy-base-id"; + + const App = () => { + return ( + + ); + } + \`\`\` + `, + }, + ], + }, +}; diff --git a/packages/airtable/src/dataProvider.ts b/packages/airtable/src/dataProvider.ts new file mode 100644 index 0000000..d62fa3e --- /dev/null +++ b/packages/airtable/src/dataProvider.ts @@ -0,0 +1,161 @@ +import { DataProvider } from "@refinedev/core"; +import Airtable from "airtable"; +import { AirtableBase } from "airtable/lib/airtable_base"; +import { generateSort, generateFilter } from "./utils"; + +export const dataProvider = ( + apiKey: string, + baseId: string, + airtableClient?: AirtableBase, +): Required => { + const base = + airtableClient || new Airtable({ apiKey: apiKey }).base(baseId); + + return { + getList: async ({ resource, pagination, sorters, filters }) => { + const { + current = 1, + pageSize = 10, + mode = "server", + } = pagination ?? {}; + + const generatedSort = generateSort(sorters) || []; + const queryFilters = generateFilter(filters); + + const { all } = base(resource).select({ + pageSize: 100, + sort: generatedSort, + ...(queryFilters ? { filterByFormula: queryFilters } : {}), + }); + + const data = await all(); + const isServerPaginationEnabled = mode === "server"; + + return { + data: data + .slice( + isServerPaginationEnabled + ? (current - 1) * pageSize + : undefined, + isServerPaginationEnabled + ? current * pageSize + : undefined, + ) + .map((p) => ({ + id: p.id, + ...p.fields, + })) as any, + total: data.length, + }; + }, + + getMany: async ({ resource, ids }) => { + const { all } = base(resource).select({ + pageSize: 100, + }); + + const data = await all(); + + return { + data: data + .filter((p) => ids.includes(p.id)) + .map((p) => ({ + id: p.id, + ...p.fields, + })) as any, + }; + }, + + create: async ({ resource, variables }) => { + const { id, fields } = await base(resource).create(variables); + + return { + data: { + id: id, + ...fields, + } as any, + }; + }, + + createMany: async ({ resource, variables }) => { + const data = await base(resource).create(variables); + + return { + data: data.map((p) => ({ + id: p.id, + ...p.fields, + })) as any, + }; + }, + + update: async ({ resource, id, variables }) => { + const { fields } = await base(resource).update( + id.toString(), + variables, + ); + + return { + data: { + id, + ...fields, + } as any, + }; + }, + + updateMany: async ({ resource, ids, variables }) => { + const requestParams = ids.map((id) => ({ + id: id.toString(), + fields: { ...variables }, + })); + const data = await base(resource).update(requestParams); + + return { + data: data.map((p) => ({ + id: p.id, + ...p.fields, + })) as any, + }; + }, + + getOne: async ({ resource, id }) => { + const { fields } = await base(resource).find(id.toString()); + + return { + data: { + id, + ...fields, + } as any, + }; + }, + + deleteOne: async ({ resource, id }) => { + const { fields } = await base(resource).destroy(id.toString()); + + return { + data: { + id, + ...fields, + } as any, + }; + }, + + deleteMany: async ({ resource, ids }) => { + const data = await base(resource).destroy(ids.map(String)); + + return { + data: data.map((p) => ({ + id: p.id, + ...p.fields, + })) as any, + }; + }, + + getApiUrl: () => { + throw Error("Not implemented on refine-airtable data provider."); + }, + + custom: async () => { + throw Error("Not implemented on refine-airtable data provider."); + }, + }; +}; diff --git a/packages/airtable/src/index.ts b/packages/airtable/src/index.ts new file mode 100644 index 0000000..d1ae584 --- /dev/null +++ b/packages/airtable/src/index.ts @@ -0,0 +1,5 @@ +import { dataProvider } from "./dataProvider"; + +export * from "./utils"; +export * from "./dataProvider"; +export default dataProvider; diff --git a/packages/airtable/src/utils/generateFilter.ts b/packages/airtable/src/utils/generateFilter.ts new file mode 100644 index 0000000..0874474 --- /dev/null +++ b/packages/airtable/src/utils/generateFilter.ts @@ -0,0 +1,12 @@ +import { CrudFilters } from "@refinedev/core"; +import { compile } from "@qualifyze/airtable-formulator"; +import { generateFilterFormula } from "./generateFilterFormula"; + +export const generateFilter = (filters?: CrudFilters): string | undefined => { + if (filters) { + // Top-level array has an implicit AND as per CRUDFilter design - https://refine.dev/docs/guides-and-concepts/data-provider/handling-filters/#logicalfilters + return compile(["AND", ...generateFilterFormula(filters)]); + } + + return undefined; +}; diff --git a/packages/airtable/src/utils/generateFilterFormula.ts b/packages/airtable/src/utils/generateFilterFormula.ts new file mode 100644 index 0000000..3d14479 --- /dev/null +++ b/packages/airtable/src/utils/generateFilterFormula.ts @@ -0,0 +1,17 @@ +import { CrudFilters, LogicalFilter } from "@refinedev/core"; +import { Formula } from "@qualifyze/airtable-formulator"; +import { generateLogicalFilterFormula } from "./generateLogicalFilterFormula"; + +export const generateFilterFormula = (filters: CrudFilters): Formula[] => { + const compound = filters.map((filter): Formula => { + const { operator, value } = filter; + + if (operator === "or") { + return ["OR", ...generateFilterFormula(value)]; + } + + return generateLogicalFilterFormula(filter as LogicalFilter); + }); + + return compound; +}; diff --git a/packages/airtable/src/utils/generateLogicalFilterFormula.ts b/packages/airtable/src/utils/generateLogicalFilterFormula.ts new file mode 100644 index 0000000..46822aa --- /dev/null +++ b/packages/airtable/src/utils/generateLogicalFilterFormula.ts @@ -0,0 +1,50 @@ +import { LogicalFilter } from "@refinedev/core"; +import { isContainsOperator, isContainssOperator } from "./isContainsOperator"; +import { isSimpleOperator, simpleOperatorMapping } from "./isSimpleOperator"; +import { Formula } from "@qualifyze/airtable-formulator"; + +export const generateLogicalFilterFormula = ( + filter: LogicalFilter, +): Formula => { + const { field, operator, value } = filter; + + if (isSimpleOperator(operator)) { + return [simpleOperatorMapping[operator], { field }, value]; + } + + if (isContainssOperator(operator)) { + const mappedOperator = { + containss: "!=", + ncontainss: "=", + } as const; + + return [mappedOperator[operator], ["FIND", value, { field }], 0]; + } + + if (isContainsOperator(operator)) { + const mappedOperator = { + contains: "!=", + ncontains: "=", + } as const; + + const find = [ + "FIND", + ["LOWER", value], + ["LOWER", { field }], + ] as Formula; + + return [mappedOperator[operator], find, 0]; + } + + if (operator === "null") { + return ["=", { field }, ["BLANK"]]; + } + + if (operator === "nnull") { + return ["!=", { field }, ["BLANK"]]; + } + + throw Error( + `Operator ${operator} is not supported for the Airtable data provider`, + ); +}; diff --git a/packages/airtable/src/utils/generateSort.ts b/packages/airtable/src/utils/generateSort.ts new file mode 100644 index 0000000..e2f318c --- /dev/null +++ b/packages/airtable/src/utils/generateSort.ts @@ -0,0 +1,8 @@ +import { CrudSorting } from "@refinedev/core"; + +export const generateSort = (sorters?: CrudSorting) => { + return sorters?.map((item) => ({ + field: item.field, + direction: item.order, + })); +}; diff --git a/packages/airtable/src/utils/index.ts b/packages/airtable/src/utils/index.ts new file mode 100644 index 0000000..ed5cf36 --- /dev/null +++ b/packages/airtable/src/utils/index.ts @@ -0,0 +1,6 @@ +export * from "./isSimpleOperator"; +export * from "./isContainsOperator"; +export * from "./generateLogicalFilterFormula"; +export * from "./generateFilterFormula"; +export * from "./generateFilter"; +export * from "./generateSort"; diff --git a/packages/airtable/src/utils/isContainsOperator.ts b/packages/airtable/src/utils/isContainsOperator.ts new file mode 100644 index 0000000..b959a8b --- /dev/null +++ b/packages/airtable/src/utils/isContainsOperator.ts @@ -0,0 +1,9 @@ +export const isContainssOperator = ( + operator: any, +): operator is "containss" | "ncontainss" => + ["containss", "ncontainss"].includes(operator); + +export const isContainsOperator = ( + operator: any, +): operator is "contains" | "ncontains" => + ["contains", "ncontains"].includes(operator); diff --git a/packages/airtable/src/utils/isSimpleOperator.ts b/packages/airtable/src/utils/isSimpleOperator.ts new file mode 100644 index 0000000..b5a594a --- /dev/null +++ b/packages/airtable/src/utils/isSimpleOperator.ts @@ -0,0 +1,14 @@ +export type SimpleOperators = "eq" | "ne" | "lt" | "lte" | "gt" | "gte"; +import { OperatorSymbol } from "@qualifyze/airtable-formulator"; + +export const simpleOperatorMapping: Record = { + eq: "=", + ne: "!=", + lt: "<", + lte: "<=", + gt: ">", + gte: ">=", +} as const; + +export const isSimpleOperator = (operator: any): operator is SimpleOperators => + Object.keys(simpleOperatorMapping).includes(operator); diff --git a/packages/airtable/test/create/index.mock.ts b/packages/airtable/test/create/index.mock.ts new file mode 100644 index 0000000..854194d --- /dev/null +++ b/packages/airtable/test/create/index.mock.ts @@ -0,0 +1,48 @@ +import nock from "nock"; + +nock("https://api.airtable.com:443", { encodedQueryParams: true }) + .post("/v0/appKYl1H4k9g73sBT/posts/", { + fields: { + title: "foo", + content: "bar", + status: "published", + category: ["recDBRJljBDFH4rIh"], + }, + }) + .query({}) + .reply( + 200, + [ + "1f8b0800000000000003158c3d0f82301400ffcb9bc5b4151d3aa2821227c3e4c750e8436a2a35e53118c27ff7b15eee6e02674143c4a63c16785126dbc622aff7b082d6a1b703e809c89147b6da10980f6468640edfb1f66ee8d0326c0ce12bc41fe8fb323b64d7d2bfb3437e4ae3b983270ba127ec89b3dac4470f33a3885cd9ca7d96b9124a266297a8b4921b2d85966a2d84b8c1fc0704ab8bf4a4000000", + ], + [ + "access-control-allow-headers", + "authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with", + "access-control-allow-methods", + "DELETE,GET,OPTIONS,PATCH,POST,PUT", + "access-control-allow-origin", + "*", + "content-encoding", + "gzip", + "Content-Type", + "application/json; charset=utf-8", + "Date", + "Thu, 24 Jun 2021 13:10:12 GMT", + "Server", + "Tengine", + "Set-Cookie", + "brw=brwhuRDEqN6Ub31j3; path=/; expires=Fri, 24 Jun 2022 13:10:12 GMT; domain=.airtable.com; samesite=none; secure", + "Strict-Transport-Security", + "max-age=31536000; includeSubDomains; preload", + "Vary", + "Accept-Encoding", + "X-Content-Type-Options", + "nosniff", + "X-Frame-Options", + "DENY", + "Content-Length", + "160", + "Connection", + "Close", + ], + ); diff --git a/packages/airtable/test/create/index.spec.ts b/packages/airtable/test/create/index.spec.ts new file mode 100644 index 0000000..adba485 --- /dev/null +++ b/packages/airtable/test/create/index.spec.ts @@ -0,0 +1,26 @@ +import dataProvider from "../../src/index"; +import "./index.mock"; + +describe("create", () => { + it("correct response", async () => { + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).create({ + resource: "posts", + variables: { + title: "foo", + content: "bar", + status: "published", + category: ["recDBRJljBDFH4rIh"], + }, + }); + + const { data } = response; + + expect(data["title"]).toEqual("foo"); + expect(data["status"]).toEqual("published"); + expect(data["category"]).toEqual(["recDBRJljBDFH4rIh"]); + expect(data["content"]).toEqual("bar\n"); + }); +}); diff --git a/packages/airtable/test/custom/index.spec.ts b/packages/airtable/test/custom/index.spec.ts new file mode 100644 index 0000000..e122a82 --- /dev/null +++ b/packages/airtable/test/custom/index.spec.ts @@ -0,0 +1,14 @@ +import dataProvider from "../../src/index"; + +describe("custom", () => { + it("correct get response", async () => { + try { + await dataProvider("keywoytODSr6xAqfg", "appKYl1H4k9g73sBT") + .custom!({ url: "users", method: "get" }); + } catch (error) { + expect(error).toEqual( + Error("Not implemented on refine-airtable data provider."), + ); + } + }); +}); diff --git a/packages/airtable/test/deleteMany/index.mock.ts b/packages/airtable/test/deleteMany/index.mock.ts new file mode 100644 index 0000000..ffae891 --- /dev/null +++ b/packages/airtable/test/deleteMany/index.mock.ts @@ -0,0 +1,41 @@ +import nock from "nock"; + +nock("https://api.airtable.com:443", { encodedQueryParams: true }) + .delete("/v0/appKYl1H4k9g73sBT/posts") + .query({ "records%5B%5D": "recdgFXue7JnGD90w" }) + .reply( + 200, + [ + "1f8b0800000000000003ab562a4a4dce2f4a2956b28aae564a49cd492d494d51b22a292a4dd551ca04b240f229e96e11a5a9e65e79ee2e9606e54ab5b1b5002d0259eb37000000", + ], + [ + "access-control-allow-headers", + "authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with", + "access-control-allow-methods", + "DELETE,GET,OPTIONS,PATCH,POST,PUT", + "access-control-allow-origin", + "*", + "content-encoding", + "gzip", + "Content-Type", + "application/json; charset=utf-8", + "Date", + "Thu, 24 Jun 2021 13:17:00 GMT", + "Server", + "Tengine", + "Set-Cookie", + "brw=brwTjdQAZbqbk0xGk; path=/; expires=Fri, 24 Jun 2022 13:17:00 GMT; domain=.airtable.com; samesite=none; secure", + "Strict-Transport-Security", + "max-age=31536000; includeSubDomains; preload", + "Vary", + "Accept-Encoding", + "X-Content-Type-Options", + "nosniff", + "X-Frame-Options", + "DENY", + "Content-Length", + "71", + "Connection", + "Close", + ], + ); diff --git a/packages/airtable/test/deleteMany/index.spec.ts b/packages/airtable/test/deleteMany/index.spec.ts new file mode 100644 index 0000000..55c016b --- /dev/null +++ b/packages/airtable/test/deleteMany/index.spec.ts @@ -0,0 +1,15 @@ +import dataProvider from "../../src/index"; +import "./index.mock"; + +describe("deleteMany", () => { + it("correct response", async () => { + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).deleteMany!({ resource: "posts", ids: ["recdgFXue7JnGD90w"] }); + + const { data } = response; + + expect(data).not.toBeNull(); + }); +}); diff --git a/packages/airtable/test/deleteOne/index.mock.ts b/packages/airtable/test/deleteOne/index.mock.ts new file mode 100644 index 0000000..b2a4ebf --- /dev/null +++ b/packages/airtable/test/deleteOne/index.mock.ts @@ -0,0 +1,41 @@ +import nock from "nock"; + +nock("https://api.airtable.com:443", { encodedQueryParams: true }) + .delete("/v0/appKYl1H4k9g73sBT/posts/recJEGeL2aB5rGFbC") + .query({}) + .reply( + 200, + [ + "1f8b0800000000000003ab564a49cd492d494d51b22a292a4dd551ca04b2948a5293bd5cdd537d8c129d4c8bdcdd929c956a016e8d991b29000000", + ], + [ + "access-control-allow-headers", + "authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with", + "access-control-allow-methods", + "DELETE,GET,OPTIONS,PATCH,POST,PUT", + "access-control-allow-origin", + "*", + "content-encoding", + "gzip", + "Content-Type", + "application/json; charset=utf-8", + "Date", + "Thu, 24 Jun 2021 13:19:14 GMT", + "Server", + "Tengine", + "Set-Cookie", + "brw=brwInLaPzl4WP7sXu; path=/; expires=Fri, 24 Jun 2022 13:19:13 GMT; domain=.airtable.com; samesite=none; secure", + "Strict-Transport-Security", + "max-age=31536000; includeSubDomains; preload", + "Vary", + "Accept-Encoding", + "X-Content-Type-Options", + "nosniff", + "X-Frame-Options", + "DENY", + "Content-Length", + "59", + "Connection", + "Close", + ], + ); diff --git a/packages/airtable/test/deleteOne/index.spec.ts b/packages/airtable/test/deleteOne/index.spec.ts new file mode 100644 index 0000000..ccb00aa --- /dev/null +++ b/packages/airtable/test/deleteOne/index.spec.ts @@ -0,0 +1,15 @@ +import dataProvider from "../../src/index"; +import "./index.mock"; + +describe("deleteOne", () => { + it("correct response", async () => { + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).deleteOne({ resource: "posts", id: "recJEGeL2aB5rGFbC" }); + + const { data } = response; + + expect(data).not.toBeNull(); + }); +}); diff --git a/packages/airtable/test/getList/index.mock.ts b/packages/airtable/test/getList/index.mock.ts new file mode 100644 index 0000000..a612847 --- /dev/null +++ b/packages/airtable/test/getList/index.mock.ts @@ -0,0 +1,150 @@ +import nock from "nock"; +import url from "url"; + +const commonHeaders = [ + "access-control-allow-headers", + "authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with", + "access-control-allow-methods", + "DELETE,GET,OPTIONS,PATCH,POST,PUT", + "access-control-allow-origin", + "*", + "airtable-uncompressed-content-length", + "380", + "Content-Type", + "application/json; charset=utf-8", + "Date", + "Thu, 24 Jun 2021 12:24:32 GMT", + "Server", + "Tengine", + "Set-Cookie", + "brw=brwHislGvzT3Ws3Yf; path=/; expires=Fri, 24 Jun 2022 12:24:32 GMT; domain=.airtable.com; samesite=none; secure", + "Strict-Transport-Security", + "max-age=31536000; includeSubDomains; preload", + "Vary", + "Accept-Encoding", + "X-Content-Type-Options", + "nosniff", + "X-Frame-Options", + "DENY", + "Content-Length", + "233", + "Connection", + "Close", +]; + +nock("https://api.airtable.com:443", { encodedQueryParams: true }) + .persist() + .get("/v0/appKYl1H4k9g73sBT/posts") + .query((query) => { + if (query.pageSize !== "100") return false; + if (query.filterByFormula === undefined) return false; + + return true; + }) + .reply( + 200, + function () { + const parsed = new url.URL(this.req.path, "http://example.com"); + const query = parsed.searchParams.get("filterByFormula"); + + return JSON.stringify({ + offset: 0, + records: [ + { + fields: { + query, + }, + }, + ], + }); + }, + commonHeaders, + ); + +nock("https://api.airtable.com:443", { encodedQueryParams: true }) + .get("/v0/appKYl1H4k9g73sBT/posts") + .query({ pageSize: "100" }) + .reply( + 200, + [ + "1f8b0800000000000003954fc18ac23014fc157dc7a292562bdaa3c86a570f2215c5ad87da3cd7484cd634825aecb7fb82a0c74598c3639899375382c15c1b5e40f45382e01039a23fdaaea637dee517d58925346027503a4d09565889a41aa394bab6d446f25abb4e923cb3f8abcd95825cc47030ff9687c1f06bdc31f11e360d286c66cf94017fe7ad14c51eb9736965515962b38213525555cf8b5055a94a95e7bd88ccf3520577b219a4773c1147d7256081df64dda61f26be1f056114f65a8cb13529df9ba693b9d027b14bcc6c11dffedbf4d9228307cca9cf27d536f7073da8e6fb7c010000", + ], + [ + "access-control-allow-headers", + "authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with", + "access-control-allow-methods", + "DELETE,GET,OPTIONS,PATCH,POST,PUT", + "access-control-allow-origin", + "*", + "airtable-uncompressed-content-length", + "380", + "content-encoding", + "gzip", + "Content-Type", + "application/json; charset=utf-8", + "Date", + "Thu, 24 Jun 2021 12:24:32 GMT", + "Server", + "Tengine", + "Set-Cookie", + "brw=brwHislGvzT3Ws3Yf; path=/; expires=Fri, 24 Jun 2022 12:24:32 GMT; domain=.airtable.com; samesite=none; secure", + "Strict-Transport-Security", + "max-age=31536000; includeSubDomains; preload", + "Vary", + "Accept-Encoding", + "X-Content-Type-Options", + "nosniff", + "X-Frame-Options", + "DENY", + "Content-Length", + "233", + "Connection", + "Close", + ], + ); + +nock("https://api.airtable.com:443", { encodedQueryParams: true }) + .get("/v0/appKYl1H4k9g73sBT/posts") + .query({ + pageSize: "100", + "sort%5B0%5D%5Bfield%5D": "title", + "sort%5B0%5D%5Bdirection%5D": "desc", + }) + .reply( + 200, + [ + "1f8b0800000000000003958f416bc2401085ff8ace31a86ca211cd518235d64391144b1b0f4976ac2beb6ebbbb426b30bfdd490bf59243857718debc6f785381c1521b6e217aab4070881a63f5b816fa53ec52f3f49c9ca1073b81b2c954605dee4ef62776c0d221a76d993b7cd7e69b6e34743c5b2fe56116cf172393ec61db03279c44621628a5ee6cb491bc0b17020d12ca53716cb6010bfc3e1bf7fd30f5fd2808a37032608cbd52f2566dfa50bcacce7cccbfd42891edd53e4e851476ffbf6ea5560e95232cb79c94a9bafe9d48759da94c79de9f917b5ea6a0f5a3cef0ae9fb6972ba8a00e5b7c010000", + ], + [ + "access-control-allow-headers", + "authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with", + "access-control-allow-methods", + "DELETE,GET,OPTIONS,PATCH,POST,PUT", + "access-control-allow-origin", + "*", + "airtable-uncompressed-content-length", + "380", + "content-encoding", + "gzip", + "Content-Type", + "application/json; charset=utf-8", + "Date", + "Thu, 24 Jun 2021 13:07:26 GMT", + "Server", + "Tengine", + "Set-Cookie", + "brw=brw0sykMWa9glzNWF; path=/; expires=Fri, 24 Jun 2022 13:07:25 GMT; domain=.airtable.com; samesite=none; secure", + "Strict-Transport-Security", + "max-age=31536000; includeSubDomains; preload", + "Vary", + "Accept-Encoding", + "X-Content-Type-Options", + "nosniff", + "X-Frame-Options", + "DENY", + "Content-Length", + "237", + "Connection", + "Close", + ], + ); diff --git a/packages/airtable/test/getList/index.spec.ts b/packages/airtable/test/getList/index.spec.ts new file mode 100644 index 0000000..adf46a9 --- /dev/null +++ b/packages/airtable/test/getList/index.spec.ts @@ -0,0 +1,444 @@ +import { ConditionalFilter } from "@refinedev/core"; +import dataProvider from "../../src/index"; +import "./index.mock"; + +describe("getList", () => { + it("correct response", async () => { + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + }); + + expect(response.data[0]["id"]).toBe("rec9GbXLzd6dxn4Il"); + expect(response.data[0]["title"]).toBe("Hello World 3!"); + expect(response.total).toBe(2); + }); + + it("correct sorting response", async () => { + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + sorters: [ + { + field: "title", + order: "desc", + }, + ], + }); + + expect(response.data[0]["id"]).toBe("recLKRioqifTrPUIz"); + expect(response.data[0]["title"]).toBe("Hello World!"); + expect(response.total).toBe(2); + }); + + it("correct equals filter for strings", async () => { + const filter = { + operator: "eq", + field: "title", + value: "Hello World!", + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must equal exactly string + expect(response.data[0]["query"]).toBe('AND({title}="Hello World!")'); + }); + + it("correct equals filter for numbers", async () => { + const filter = { + operator: "eq", + field: "age", + value: 100, + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must equal exactly number + expect(response.data[0]["query"]).toBe("AND({age}=100)"); + }); + + it("correct not equals filter for strings", async () => { + const filter = { + operator: "ne", + field: "title", + value: "Hello World!", + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must not equal exactly string + expect(response.data[0]["query"]).toBe('AND({title}!="Hello World!")'); + }); + + it("correct not equals filter for numbers", async () => { + const filter = { + operator: "ne", + field: "age", + value: 100, + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must not equal exactly number + expect(response.data[0]["query"]).toBe("AND({age}!=100)"); + }); + + it("correct less than filter", async () => { + const filter = { + operator: "lt", + field: "age", + value: 10, + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must be less than value (as number) + expect(response.data[0]["query"]).toBe("AND({age}<10)"); + }); + + it("correct less than or equal filter", async () => { + const filter = { + operator: "lte", + field: "age", + value: 10, + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must be less than or equal value (as number) + expect(response.data[0]["query"]).toBe("AND({age}<=10)"); + }); + + it("correct greater than filter", async () => { + const filter = { + operator: "gt", + field: "age", + value: 10, + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must be greater than value (as number) + expect(response.data[0]["query"]).toBe("AND({age}>10)"); + }); + + it("correct greater than or equal filter", async () => { + const filter = { + operator: "gte", + field: "age", + value: 10, + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must be greater than or equal value (as number) + expect(response.data[0]["query"]).toBe("AND({age}>=10)"); + }); + + it("correct contains filter", async () => { + const filter = { + operator: "containss", + field: "title", + value: "Hello", + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // must find string in {field} - FIND returns non-zero value + expect(response.data[0]["query"]).toBe('AND(FIND("Hello",{title})!=0)'); + }); + + it("correct not contains filter", async () => { + const filter = { + operator: "ncontainss", + field: "title", + value: "Hello", + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // must not find string in {field} - FIND returns zero + expect(response.data[0]["query"]).toBe('AND(FIND("Hello",{title})=0)'); + }); + + it("correct case-insensitive contains filter", async () => { + const filter = { + operator: "contains", + field: "title", + value: "Hello", + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // must find lower-cased string in lower-cased {field} - lower-casing both values makes it case-insensitive + expect(response.data[0]["query"]).toBe( + 'AND(FIND(LOWER("Hello"),LOWER({title}))!=0)', + ); + }); + + it("correct case-insensitive not contains filter", async () => { + const filter = { + operator: "ncontains", + field: "title", + value: "Hello", + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // must not find lower-cased string in lower-cased {field} - lower-casing both values makes it case-insensitive + expect(response.data[0]["query"]).toBe( + 'AND(FIND(LOWER("Hello"),LOWER({title}))=0)', + ); + }); + + it("correct truthy null filter", async () => { + const filter = { + operator: "null", + field: "title", + value: undefined, + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must be null (blank) + expect(response.data[0]["query"]).toBe("AND({title}=BLANK())"); + }); + + it("correct falsy null filter", async () => { + const filter = { + operator: "nnull", + field: "title", + value: undefined, + } as const; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must not be null (blank) + expect(response.data[0]["query"]).toBe("AND({title}!=BLANK())"); + }); + + it.each(["between", "nbetween"] as const)( + "fails for %s filter", + async (operator) => { + const filter = { + operator, + field: "age", + value: [10, 15], + } as const; + + await expect(() => { + return dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + }).rejects.toThrow( + `Operator ${operator} is not supported for the Airtable data provider`, + ); + }, + ); + + it.each(["in", "nin"] as const)("fails for %s filter", async (operator) => { + const filter = { + operator, + field: "posts", + value: ["uuid-1", "uuid-2"], + } as const; + + await expect(() => { + return dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + }).rejects.toThrow( + `Operator ${operator} is not supported for the Airtable data provider`, + ); + }); + + it("correct 'or' conditional filter", async () => { + const filter = { + operator: "or", + value: [ + { + field: "title", + operator: "eq", + value: "Silver Bullet", + }, + { + field: "title", + operator: "ne", + value: "The Mythical Man Month", + }, + ], + } as ConditionalFilter; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: [filter], + }); + + expect(response.total).toBe(1); + // {field} must either be Silver Bullet or must not be Mythical Man Month + expect(response.data[0]["query"]).toBe( + 'AND(OR({title}="Silver Bullet",{title}!="The Mythical Man Month"))', + ); + }); + + it("correct compound 'or' conditional filter", async () => { + const filters = [ + { + operator: "or", + value: [ + { + field: "title", + operator: "eq", + value: "Silver Bullet", + }, + { + field: "title", + operator: "ne", + value: "The Mythical Man Month", + }, + ], + }, + { + operator: "or", + value: [ + { + field: "age", + operator: "gt", + value: 15, + }, + { + field: "age", + operator: "lt", + value: 25, + }, + ], + }, + ] as ConditionalFilter[]; + + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getList({ + resource: "posts", + filters: filters, + }); + + expect(response.total).toBe(1); + expect(response.data[0]["query"]).toBe( + 'AND(OR({title}="Silver Bullet",{title}!="The Mythical Man Month"),OR({age}>15,{age}<25))', + ); + }); +}); diff --git a/packages/airtable/test/getMany/index.mock.ts b/packages/airtable/test/getMany/index.mock.ts new file mode 100644 index 0000000..03ae66f --- /dev/null +++ b/packages/airtable/test/getMany/index.mock.ts @@ -0,0 +1,43 @@ +import nock from "nock"; + +nock("https://api.airtable.com:443", { encodedQueryParams: true }) + .get("/v0/appKYl1H4k9g73sBT/posts") + .query({ pageSize: "100" }) + .reply( + 200, + [ + "1f8b080000000000000395905d6b83301486ff4a974b69875a959acb526aed1c88d875747a114d5c53b2a48be9585bf4b72f6eeca3e0608373111e5e4e9ef79c8124a590b806f0e10c2806b0039302c55e54851b278d571118828a12d665ce4051c5884e5542685e2ba40e9a83fda160b4de12ac6129b8225c695a2099f18e20451e853cea4fbaf577c151be24cbc05fdfeed51ce48d4e48a23338a54fdd72dbb4ad91e98d6c27b5c6d0f4a133b9364d73039ae1b7a41f14f7d1097bf8953b21bb90ecd7ba94984d9325db4d67f38523c32dc87f7aa31aebc978db7ebcf4b46dc6336e185f0019c67bb7cf832c086362b01692e1c1f80afcdac97253cb82b60bdd9e4ed14d42c533ad5219afc2537f274976a4547fabd423f72fb5bc7903b0079a9c21020000", + ], + [ + "access-control-allow-headers", + "authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with", + "access-control-allow-methods", + "DELETE,GET,OPTIONS,PATCH,POST,PUT", + "access-control-allow-origin", + "*", + "airtable-uncompressed-content-length", + "545", + "content-encoding", + "gzip", + "Content-Type", + "application/json; charset=utf-8", + "Date", + "Thu, 24 Jun 2021 13:20:40 GMT", + "Server", + "Tengine", + "Set-Cookie", + "brw=brwNd7NWRhWftbS0Q; path=/; expires=Fri, 24 Jun 2022 13:20:40 GMT; domain=.airtable.com; samesite=none; secure", + "Strict-Transport-Security", + "max-age=31536000; includeSubDomains; preload", + "Vary", + "Accept-Encoding", + "X-Content-Type-Options", + "nosniff", + "X-Frame-Options", + "DENY", + "Content-Length", + "294", + "Connection", + "Close", + ], + ); diff --git a/packages/airtable/test/getMany/index.spec.ts b/packages/airtable/test/getMany/index.spec.ts new file mode 100644 index 0000000..c7ad548 --- /dev/null +++ b/packages/airtable/test/getMany/index.spec.ts @@ -0,0 +1,20 @@ +import dataProvider from "../../src/index"; +import "./index.mock"; + +describe("getMany", () => { + it("correct response", async () => { + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getMany!({ + resource: "posts", + ids: ["recLKRioqifTrPUIz", "rec9GbXLzd6dxn4Il"], + }); + + const { data } = response; + + expect(data[0]["id"]).toBe("rec9GbXLzd6dxn4Il"); + expect(data[1]["id"]).toBe("recLKRioqifTrPUIz"); + expect(response.data.length).toBe(2); + }); +}); diff --git a/packages/airtable/test/getOne/index.mock.ts b/packages/airtable/test/getOne/index.mock.ts new file mode 100644 index 0000000..5316445 --- /dev/null +++ b/packages/airtable/test/getOne/index.mock.ts @@ -0,0 +1,43 @@ +import nock from "nock"; + +nock("https://api.airtable.com:443", { encodedQueryParams: true }) + .get("/v0/appKYl1H4k9g73sBT/posts/recLKRioqifTrPUIz") + .query({}) + .reply( + 200, + [ + "1f8b08000000000000031dcb410bc2201880e1bf52df790b958cf038c6d8aa430c23283a0cfd560e43523bd4d87fcf757edf6704a341804775d8b7c6bd4c2ffdf1d47c2183dea0d501c4082176f11dfedb802aa24e557511efce7f405c675d16edce0e4559d56bdf3ce0964134d16232355aeb1667e7ad5ec294a0c744b534cfb932c2684e3639e59252c1b8e0db1521e402d30fb10f929e9a000000", + ], + [ + "access-control-allow-headers", + "authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with", + "access-control-allow-methods", + "DELETE,GET,OPTIONS,PATCH,POST,PUT", + "access-control-allow-origin", + "*", + "airtable-uncompressed-content-length", + "154", + "content-encoding", + "gzip", + "Content-Type", + "application/json; charset=utf-8", + "Date", + "Thu, 24 Jun 2021 13:21:53 GMT", + "Server", + "Tengine", + "Set-Cookie", + "brw=brwQBAba4kMeu0MpF; path=/; expires=Fri, 24 Jun 2022 13:21:53 GMT; domain=.airtable.com; samesite=none; secure", + "Strict-Transport-Security", + "max-age=31536000; includeSubDomains; preload", + "Vary", + "Accept-Encoding", + "X-Content-Type-Options", + "nosniff", + "X-Frame-Options", + "DENY", + "Content-Length", + "156", + "Connection", + "Close", + ], + ); diff --git a/packages/airtable/test/getOne/index.spec.ts b/packages/airtable/test/getOne/index.spec.ts new file mode 100644 index 0000000..e41d9e3 --- /dev/null +++ b/packages/airtable/test/getOne/index.spec.ts @@ -0,0 +1,17 @@ +import dataProvider from "../../src/index"; +import "./index.mock"; + +describe("getOne", () => { + it("correct response", async () => { + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).getOne({ resource: "posts", id: "recLKRioqifTrPUIz" }); + + const { data } = response; + + expect(data.title).toBe("Hello World!"); + expect(data.status).toBe("rejected"); + expect(data.category).toEqual(["recDBRJljBDFH4rIh"]); + }); +}); diff --git a/packages/airtable/test/jest.setup.js b/packages/airtable/test/jest.setup.js new file mode 100644 index 0000000..fc7bc51 --- /dev/null +++ b/packages/airtable/test/jest.setup.js @@ -0,0 +1,11 @@ +const fetch = require("node-fetch"); +const nock = require("nock"); + +global.fetch = window.fetch = fetch; +global.Request = window.Request = fetch.Request; +global.Response = window.Response = fetch.Response; + +afterAll(() => { + nock.cleanAll(); + nock.restore(); +}); diff --git a/packages/airtable/test/update/index.mock.ts b/packages/airtable/test/update/index.mock.ts new file mode 100644 index 0000000..7b3e1f0 --- /dev/null +++ b/packages/airtable/test/update/index.mock.ts @@ -0,0 +1,43 @@ +import nock from "nock"; + +nock("https://api.airtable.com:443", { encodedQueryParams: true }) + .patch("/v0/appKYl1H4k9g73sBT/posts/recLKRioqifTrPUIz", { + fields: { title: "Hello World!!" }, + }) + .query({}) + .reply( + 200, + [ + "1f8b08000000000000031dcb410bc2201880e1bfd2bef3162a19e1718cd8aa430c23283a0cfd560e43523bd4d87fcf757edf6704a341804775d8b7c6bd4c2ffdf1d47c2187dea0d501c4082176f11dfedb802aa24e557511efce7f405c675d95edce0e65b5ad57be79c02d8768a2c5646ab4d62dcece5b9d653025e931592dcd73ce8c305a907541b9a454302ef8664908b9c0f4030447c06c9b000000", + ], + [ + "access-control-allow-headers", + "authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with", + "access-control-allow-methods", + "DELETE,GET,OPTIONS,PATCH,POST,PUT", + "access-control-allow-origin", + "*", + "content-encoding", + "gzip", + "Content-Type", + "application/json; charset=utf-8", + "Date", + "Thu, 24 Jun 2021 13:24:42 GMT", + "Server", + "Tengine", + "Set-Cookie", + "brw=brwQrvJXnX0I6wkCt; path=/; expires=Fri, 24 Jun 2022 13:24:42 GMT; domain=.airtable.com; samesite=none; secure", + "Strict-Transport-Security", + "max-age=31536000; includeSubDomains; preload", + "Vary", + "Accept-Encoding", + "X-Content-Type-Options", + "nosniff", + "X-Frame-Options", + "DENY", + "Content-Length", + "157", + "Connection", + "Close", + ], + ); diff --git a/packages/airtable/test/update/index.spec.ts b/packages/airtable/test/update/index.spec.ts new file mode 100644 index 0000000..43da1ea --- /dev/null +++ b/packages/airtable/test/update/index.spec.ts @@ -0,0 +1,21 @@ +import dataProvider from "../../src/index"; +import "./index.mock"; + +describe("update", () => { + it("correct response", async () => { + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).update({ + resource: "posts", + id: "recLKRioqifTrPUIz", + variables: { + title: "Hello World!!", + }, + }); + + const { data } = response; + + expect(data["title"]).toBe("Hello World!!"); + }); +}); diff --git a/packages/airtable/test/updateMany/index.mock.ts b/packages/airtable/test/updateMany/index.mock.ts new file mode 100644 index 0000000..08ae9e1 --- /dev/null +++ b/packages/airtable/test/updateMany/index.mock.ts @@ -0,0 +1,46 @@ +import nock from "nock"; + +nock("https://api.airtable.com:443", { encodedQueryParams: true }) + .patch("/v0/appKYl1H4k9g73sBT/posts/", { + records: [ + { id: "recLKRioqifTrPUIz", fields: { title: "Hello World!!!" } }, + { id: "rec9GbXLzd6dxn4Il", fields: { title: "Hello World!!!" } }, + ], + }) + .query({}) + .reply( + 200, + [ + "1f8b0800000000000003ad8f416bc2401085ff8a996350d9042336471135ad872229169b1c6276d49575577757680de6b73b69412f3d7810e630bcf7bee14d05064b6db885f8ab02c1216e84d9db5ce8a358a7e6fd2339431bd6026593a9c0bac29dec6f6c87a5434e6e5938dc68f343371a7a349cbfcadd70349ef64cb285bc0d4e3889c44c514add5a6823b9e7797021d420c13c15fbc60f59187458bf13446910c4611447832e636c49c97bb997c9ea7376e67dfead7a89fcbfdce1b492c26e1f6b576ae55039c20acb693255d77f1b4d5d672a53be7f130adfcf143ce3a7fc720554f78d147e010000", + ], + [ + "access-control-allow-headers", + "authorization,content-length,content-type,user-agent,x-airtable-application-id,x-airtable-user-agent,x-api-version,x-requested-with", + "access-control-allow-methods", + "DELETE,GET,OPTIONS,PATCH,POST,PUT", + "access-control-allow-origin", + "*", + "content-encoding", + "gzip", + "Content-Type", + "application/json; charset=utf-8", + "Date", + "Thu, 24 Jun 2021 13:26:53 GMT", + "Server", + "Tengine", + "Set-Cookie", + "brw=brwPAe5xxAm5wIYu2; path=/; expires=Fri, 24 Jun 2022 13:26:53 GMT; domain=.airtable.com; samesite=none; secure", + "Strict-Transport-Security", + "max-age=31536000; includeSubDomains; preload", + "Vary", + "Accept-Encoding", + "X-Content-Type-Options", + "nosniff", + "X-Frame-Options", + "DENY", + "Content-Length", + "235", + "Connection", + "Close", + ], + ); diff --git a/packages/airtable/test/updateMany/index.spec.ts b/packages/airtable/test/updateMany/index.spec.ts new file mode 100644 index 0000000..feb4d36 --- /dev/null +++ b/packages/airtable/test/updateMany/index.spec.ts @@ -0,0 +1,22 @@ +import dataProvider from "../../src/index"; +import "./index.mock"; + +describe("updateMany", () => { + it("correct response", async () => { + const response = await dataProvider( + "keywoytODSr6xAqfg", + "appKYl1H4k9g73sBT", + ).updateMany!({ + resource: "posts", + ids: ["recLKRioqifTrPUIz", "rec9GbXLzd6dxn4Il"], + variables: { + title: "Hello World!!!", + }, + }); + + const { data } = response; + + expect(data[0]["title"]).toBe("Hello World!!!"); + expect(data[1]["title"]).toBe("Hello World!!!"); + }); +}); diff --git a/packages/airtable/test/utils/generateFilter.spec.ts b/packages/airtable/test/utils/generateFilter.spec.ts new file mode 100644 index 0000000..d4c02e4 --- /dev/null +++ b/packages/airtable/test/utils/generateFilter.spec.ts @@ -0,0 +1,33 @@ +import { CrudFilters } from "@refinedev/core"; +import { generateFilter } from "../../src/utils"; + +describe("generateFilter", () => { + it("should return undefined when no filters are provided", () => { + expect(generateFilter()).toBeUndefined(); + }); + + it("should return a filter formula when filters are provided", () => { + const filters: CrudFilters = [ + { field: "name", operator: "eq", value: "John" }, + { field: "age", operator: "gte", value: 30 }, + ]; + const expected = 'AND({name}="John",{age}>=30)'; + expect(generateFilter(filters)).toBe(expected); + }); + + it("should return a complex filter formula with nested filters", () => { + const filters: CrudFilters = [ + { + operator: "or", + value: [ + { field: "name", operator: "eq", value: "John" }, + { field: "name", operator: "eq", value: "Jane" }, + ], + }, + { field: "age", operator: "gte", value: 30 }, + ]; + + const expected = 'AND(OR({name}="John",{name}="Jane"),{age}>=30)'; + expect(generateFilter(filters)).toBe(expected); + }); +}); diff --git a/packages/airtable/test/utils/generateFilterFormula.spec.ts b/packages/airtable/test/utils/generateFilterFormula.spec.ts new file mode 100644 index 0000000..8f4dd03 --- /dev/null +++ b/packages/airtable/test/utils/generateFilterFormula.spec.ts @@ -0,0 +1,44 @@ +import { CrudFilters } from "@refinedev/core"; +import { generateFilterFormula } from "../../src/utils"; + +describe("generateFilterFormula", () => { + it("should return an empty array when no filters are provided", () => { + expect(generateFilterFormula([])).toEqual([]); + }); + + it("should return a formula array when filters are provided", () => { + const filters: CrudFilters = [ + { field: "name", operator: "eq", value: "John" }, + { field: "age", operator: "gte", value: 30 }, + ]; + const expected = [ + ["=", { field: "name" }, "John"], + [">=", { field: "age" }, 30], + ]; + + expect(generateFilterFormula(filters)).toEqual(expected); + }); + + it("should return a complex formula array with nested filters", () => { + const filters: CrudFilters = [ + { + operator: "or", + value: [ + { field: "name", operator: "eq", value: "John" }, + { field: "name", operator: "eq", value: "Jane" }, + ], + }, + { field: "age", operator: "gte", value: 30 }, + ]; + const expected = [ + [ + "OR", + ["=", { field: "name" }, "John"], + ["=", { field: "name" }, "Jane"], + ], + [">=", { field: "age" }, 30], + ]; + + expect(generateFilterFormula(filters)).toEqual(expected); + }); +}); diff --git a/packages/airtable/test/utils/generateLogicalFilterFormula.spec.ts b/packages/airtable/test/utils/generateLogicalFilterFormula.spec.ts new file mode 100644 index 0000000..0cdb265 --- /dev/null +++ b/packages/airtable/test/utils/generateLogicalFilterFormula.spec.ts @@ -0,0 +1,58 @@ +import { CrudFilter } from "@refinedev/core"; + +import { generateLogicalFilterFormula } from "../../src/utils"; +import { LogicalFilter } from "@refinedev/core"; + +describe("generateLogicalFilterFormula", () => { + it("should generate a formula for simple operators", () => { + const filter: CrudFilter = { + field: "age", + operator: "gte", + value: 30, + }; + const expected = [">=", { field: "age" }, 30]; + + expect(generateLogicalFilterFormula(filter)).toEqual(expected); + }); + + it("should generate a formula for contains operators", () => { + const filter: CrudFilter = { + field: "name", + operator: "contains", + value: "John", + }; + const expected = [ + "!=", + ["FIND", ["LOWER", "John"], ["LOWER", { field: "name" }]], + 0, + ]; + + expect(generateLogicalFilterFormula(filter)).toEqual(expected); + }); + + it("should generate a formula for null operators", () => { + const filter = { field: "email", operator: "null" } as LogicalFilter; + const expected = ["=", { field: "email" }, ["BLANK"]]; + + expect(generateLogicalFilterFormula(filter)).toEqual(expected); + }); + + it("should generate a formula for nnull operators", () => { + const filter = { field: "email", operator: "nnull" } as LogicalFilter; + const expected = ["!=", { field: "email" }, ["BLANK"]]; + + expect(generateLogicalFilterFormula(filter)).toEqual(expected); + }); + + it("should throw an error for unsupported operators", () => { + const filter = { + field: "age", + operator: "unsupported", + value: 30, + } as unknown as LogicalFilter; + + expect(() => generateLogicalFilterFormula(filter)).toThrowError( + "Operator unsupported is not supported for the Airtable data provider", + ); + }); +}); diff --git a/packages/airtable/test/utils/generateSort.spec.ts b/packages/airtable/test/utils/generateSort.spec.ts new file mode 100644 index 0000000..dced631 --- /dev/null +++ b/packages/airtable/test/utils/generateSort.spec.ts @@ -0,0 +1,22 @@ +import { CrudSorting } from "@refinedev/core"; +import { generateSort } from "../../src/utils"; + +describe("generateSort", () => { + it("should return undefined if no sorters are provided", () => { + expect(generateSort(undefined)).toBeUndefined(); + }); + + it("should generate an array of sorting objects", () => { + const sorters: CrudSorting = [ + { field: "name", order: "asc" }, + { field: "age", order: "desc" }, + ]; + + const expected = [ + { field: "name", direction: "asc" }, + { field: "age", direction: "desc" }, + ]; + + expect(generateSort(sorters)).toEqual(expected); + }); +}); diff --git a/packages/airtable/test/utils/isContainsOperator.spec.ts b/packages/airtable/test/utils/isContainsOperator.spec.ts new file mode 100644 index 0000000..fc5c29b --- /dev/null +++ b/packages/airtable/test/utils/isContainsOperator.spec.ts @@ -0,0 +1,31 @@ +import { isContainssOperator, isContainsOperator } from "../../src/utils"; + +describe("Operators", () => { + describe("isContainssOperator", () => { + it("should return true if operator is containss", () => { + expect(isContainssOperator("containss")).toBe(true); + }); + + it("should return true if operator is ncontainss", () => { + expect(isContainssOperator("ncontainss")).toBe(true); + }); + + it("should return false if operator is not containss or ncontainss", () => { + expect(isContainssOperator("contains")).toBe(false); + }); + }); + + describe("isContainsOperator", () => { + it("should return true if operator is contains", () => { + expect(isContainsOperator("contains")).toBe(true); + }); + + it("should return true if operator is ncontains", () => { + expect(isContainsOperator("ncontains")).toBe(true); + }); + + it("should return false if operator is not contains or ncontains", () => { + expect(isContainsOperator("containss")).toBe(false); + }); + }); +}); diff --git a/packages/airtable/test/utils/isSimpleOperator.spec.ts b/packages/airtable/test/utils/isSimpleOperator.spec.ts new file mode 100644 index 0000000..f815ca7 --- /dev/null +++ b/packages/airtable/test/utils/isSimpleOperator.spec.ts @@ -0,0 +1,30 @@ +import { isSimpleOperator, simpleOperatorMapping } from "../../src/utils"; + +describe("SimpleOperators", () => { + describe("isSimpleOperator", () => { + it("should return true if operator is a simple operator", () => { + expect(isSimpleOperator("eq")).toBe(true); + expect(isSimpleOperator("ne")).toBe(true); + expect(isSimpleOperator("lt")).toBe(true); + expect(isSimpleOperator("lte")).toBe(true); + expect(isSimpleOperator("gt")).toBe(true); + expect(isSimpleOperator("gte")).toBe(true); + }); + + it("should return false if operator is not a simple operator", () => { + expect(isSimpleOperator("contains")).toBe(false); + expect(isSimpleOperator("containss")).toBe(false); + }); + }); + + describe("simpleOperatorMapping", () => { + it("should map simple operators to their corresponding Airtable symbols", () => { + expect(simpleOperatorMapping["eq"]).toBe("="); + expect(simpleOperatorMapping["ne"]).toBe("!="); + expect(simpleOperatorMapping["lt"]).toBe("<"); + expect(simpleOperatorMapping["lte"]).toBe("<="); + expect(simpleOperatorMapping["gt"]).toBe(">"); + expect(simpleOperatorMapping["gte"]).toBe(">="); + }); + }); +}); diff --git a/packages/airtable/tsconfig.declarations.json b/packages/airtable/tsconfig.declarations.json new file mode 100644 index 0000000..53758e8 --- /dev/null +++ b/packages/airtable/tsconfig.declarations.json @@ -0,0 +1,21 @@ +{ + "extends": "./tsconfig.json", + "exclude": [ + "node_modules", + "dist", + "test", + "../test/**/*", + "**/*.spec.ts", + "**/*.test.ts", + "**/*.spec.tsx", + "**/*.test.tsx" + ], + "compilerOptions": { + "outDir": "dist", + "declarationDir": "dist", + "declaration": true, + "emitDeclarationOnly": true, + "noEmit": false, + "declarationMap": true + } +} diff --git a/packages/airtable/tsconfig.json b/packages/airtable/tsconfig.json new file mode 100644 index 0000000..84dec47 --- /dev/null +++ b/packages/airtable/tsconfig.json @@ -0,0 +1,8 @@ +{ + "include": ["src", "types", "refine.config.js"], + "extends": "../../tsconfig.build.json", + "compilerOptions": { + "rootDir": "./src", + "baseUrl": "." + } +} diff --git a/packages/airtable/tsup.config.ts b/packages/airtable/tsup.config.ts new file mode 100644 index 0000000..12c9fbc --- /dev/null +++ b/packages/airtable/tsup.config.ts @@ -0,0 +1,24 @@ +import { defineConfig } from "tsup"; +import { NodeResolvePlugin } from "@esbuild-plugins/node-resolve"; + +export default defineConfig({ + entry: ["src/index.ts"], + splitting: false, + sourcemap: true, + clean: false, + platform: "browser", + esbuildPlugins: [ + NodeResolvePlugin({ + extensions: [".js", "ts", "tsx", "jsx"], + onResolved: (resolved) => { + if (resolved.includes("node_modules")) { + return { + external: true, + }; + } + return resolved; + }, + }), + ], + onSuccess: "tsc --project tsconfig.declarations.json", +}); diff --git a/packages/antd/.npmignore b/packages/antd/.npmignore new file mode 100644 index 0000000..3321cad --- /dev/null +++ b/packages/antd/.npmignore @@ -0,0 +1,11 @@ +node_modules +.DS_Store +test +jest.config.js +**/*.spec.ts +**/*.spec.tsx +**/*.test.ts +**/*.test.tsx +tsup.config.ts +tsconfig.test.json +tsconfig.declarations.json \ No newline at end of file diff --git a/packages/antd/.npmrc b/packages/antd/.npmrc new file mode 100644 index 0000000..e9ee3cb --- /dev/null +++ b/packages/antd/.npmrc @@ -0,0 +1 @@ +legacy-peer-deps=true \ No newline at end of file diff --git a/packages/antd/CHANGELOG.md b/packages/antd/CHANGELOG.md new file mode 100644 index 0000000..54d0aa6 --- /dev/null +++ b/packages/antd/CHANGELOG.md @@ -0,0 +1,3380 @@ +# @refinedev/antd + +## 5.37.2 + +### Patch Changes + +- [#5465](https://github.com/refinedev/refine/pull/5465) [`00e00cbd98`](https://github.com/refinedev/refine/commit/00e00cbd98c34046ab83b299ede83401ae74fec1) Thanks [@aliemir](https://github.com/aliemir)! - Fixed the type issue between `remark-gfm` and `react-markdown`. #5463 + +## 5.37.1 + +### Patch Changes + +- [#5425](https://github.com/refinedev/refine/pull/5425) [`190af9fce2`](https://github.com/refinedev/refine/commit/190af9fce292bc46b169e3e121be6bf1c2a939a5) Thanks [@aliemir](https://github.com/aliemir)! - Updated `@refinedev/core` peer dependencies to latest (`^4.46.1`) + +- Updated dependencies [[`190af9fce2`](https://github.com/refinedev/refine/commit/190af9fce292bc46b169e3e121be6bf1c2a939a5)]: + - @refinedev/ui-types@1.22.4 + +## 5.37.0 + +### Minor Changes + +- [#5307](https://github.com/refinedev/refine/pull/5307) [`f8e407f850`](https://github.com/refinedev/refine/commit/f8e407f85054bccf1e6ff45c84928bc01db7f5eb) Thanks [@jackprogramsjp](https://github.com/jackprogramsjp)! - feat: added `hideForm` props for `LoginPage` and `RegisterPage` for `AuthPage` feature. + + Now with the `hideForm` props feature, you can be able to hide the forms (like email/password) + to only show the OAuth providers. This avoids having to make your own entire AuthPage. + +### Patch Changes + +- [#5207](https://github.com/refinedev/refine/pull/5207) [`30a2834a81`](https://github.com/refinedev/refine/commit/30a2834a819ef857506b5c932500868e458fd319) Thanks [@mjomble](https://github.com/mjomble)! - chore: updated deprecated use of antd Progress + +- [#5269](https://github.com/refinedev/refine/pull/5269) [`a23a0945d3`](https://github.com/refinedev/refine/commit/a23a0945d3fe003ae081fca1c47312dd6bf8c2ee) Thanks [@BatuhanW](https://github.com/BatuhanW)! - feat: add "autoComplete" field for Login pages. + +- [#5325](https://github.com/refinedev/refine/pull/5325) [`7ff54b2060`](https://github.com/refinedev/refine/commit/7ff54b2060b0ce942c4170f744cbdf52d0940434) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fix: `` styling issues on mobile screens. + + chore: new tests are added to ``. + +## 5.36.19 + +### Patch Changes + +- [#5259](https://github.com/refinedev/refine/pull/5259) [`eac3df87ffb`](https://github.com/refinedev/refine/commit/eac3df87ffbf61c913a6c8ea584e1d8c61e8d82e) Thanks [@aliemir](https://github.com/aliemir)! - Updated `` component to extend the `` from `@refinedev/core` with custom elements and render appropriate element based on the state. + +## 5.36.18 + +### Patch Changes + +- [#5199](https://github.com/refinedev/refine/pull/5199) [`2b8d658a17a`](https://github.com/refinedev/refine/commit/2b8d658a17a20ae347ba92b63487418f04ec255c) Thanks [@aliemir](https://github.com/aliemir)! - Now `useSelect`, `useRadioGroup` and `useCheckboxGroup` hooks accept 4th generic type `TOption` which allows you to change the type of options. By default `TOption` will be equal to `BaseOption` type which is `{ label: any; value: any; }`. If you want to change the type of options, you can do it like this: + + ```tsx + import { useSelect } from "@refinedev/antd"; + import { HttpError } from "@refinedev/core"; + + type MyData = { + id: number; + title: string; + description: string; + category: { id: string }; + }; + + type Option = { label: MyData["title"]; value: MyData["id"] }; // equals to { label: string; value: number; } + + useSelect({ + resource: "posts", + }); + ``` + +- [#5199](https://github.com/refinedev/refine/pull/5199) [`2b8d658a17a`](https://github.com/refinedev/refine/commit/2b8d658a17a20ae347ba92b63487418f04ec255c) Thanks [@aliemir](https://github.com/aliemir)! - Updated return types of `useSelect`, `useRadioGroup` and `useCheckboxGroup` hooks to only include properties that actually being returned from the hook. Previously, the return types included all properties of the respective components, which was not correct. + +- [#5201](https://github.com/refinedev/refine/pull/5201) [`760cfbaaa2a`](https://github.com/refinedev/refine/commit/760cfbaaa2ac8b8c070ade1e174784358cc112b0) Thanks [@aliemir](https://github.com/aliemir)! - Handle nested server side validation errors properly in `useForm` + +## 5.36.17 + +### Patch Changes + +- [#5199](https://github.com/refinedev/refine/pull/5199) [`2b8d658a17a`](https://github.com/refinedev/refine/commit/2b8d658a17a20ae347ba92b63487418f04ec255c) Thanks [@aliemir](https://github.com/aliemir)! - Now `useSelect`, `useRadioGroup` and `useCheckboxGroup` hooks accept 4th generic type `TOption` which allows you to change the type of options. By default `TOption` will be equal to `BaseOption` type which is `{ label: any; value: any; }`. If you want to change the type of options, you can do it like this: + + ```tsx + import { useSelect } from "@refinedev/antd"; + import { HttpError } from "@refinedev/core"; + + type MyData = { + id: number; + title: string; + description: string; + category: { id: string }; + }; + + type Option = { label: MyData["title"]; value: MyData["id"] }; // equals to { label: string; value: number; } + + useSelect({ + resource: "posts", + }); + ``` + +- [#5199](https://github.com/refinedev/refine/pull/5199) [`2b8d658a17a`](https://github.com/refinedev/refine/commit/2b8d658a17a20ae347ba92b63487418f04ec255c) Thanks [@aliemir](https://github.com/aliemir)! - Updated return types of `useSelect`, `useRadioGroup` and `useCheckboxGroup` hooks to only include properties that actually being returned from the hook. Previously, the return types included all properties of the respective components, which was not correct. + +- [#5201](https://github.com/refinedev/refine/pull/5201) [`760cfbaaa2a`](https://github.com/refinedev/refine/commit/760cfbaaa2ac8b8c070ade1e174784358cc112b0) Thanks [@aliemir](https://github.com/aliemir)! - Handle nested server side validation errors properly in `useForm` + +## 5.36.16 + +### Patch Changes + +- [#5189](https://github.com/refinedev/refine/pull/5189) [`34b5741289f`](https://github.com/refinedev/refine/commit/34b5741289fec9f1bf1e06b101d1c0965fc5c7e7) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: bump @ant-design/pro-layout dependency to `v7.17.12`. + + Fixes https://github.com/refinedev/refine/issues/5172 + +## 5.36.15 + +### Patch Changes + +- [#5189](https://github.com/refinedev/refine/pull/5189) [`34b5741289f`](https://github.com/refinedev/refine/commit/34b5741289fec9f1bf1e06b101d1c0965fc5c7e7) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: bump @ant-design/pro-layout dependency to `v7.17.12`. + + Fixes https://github.com/refinedev/refine/issues/5172 + +## 5.36.14 + +### Patch Changes + +- [#5134](https://github.com/refinedev/refine/pull/5134) [`e4769b23171`](https://github.com/refinedev/refine/commit/e4769b231716c63e5814718942025044e1a213c3) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fixed: antd default `` is not collapsing. + +## 5.36.13 + +### Patch Changes + +- [#5134](https://github.com/refinedev/refine/pull/5134) [`e4769b23171`](https://github.com/refinedev/refine/commit/e4769b231716c63e5814718942025044e1a213c3) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fixed: antd default `` is not collapsing. + +## 5.36.12 + +### Patch Changes + +- [#5114](https://github.com/refinedev/refine/pull/5114) [`00a9252c5de`](https://github.com/refinedev/refine/commit/00a9252c5de86aad544b0ca7d087c532c6d561fa) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fixed: `` border-bottom removed. + fixed: `` glitches on first render. + +## 5.36.11 + +### Patch Changes + +- [#5114](https://github.com/refinedev/refine/pull/5114) [`00a9252c5de`](https://github.com/refinedev/refine/commit/00a9252c5de86aad544b0ca7d087c532c6d561fa) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fixed: `` border-bottom removed. + fixed: `` glitches on first render. + +## 5.36.10 + +### Patch Changes + +- [#5098](https://github.com/refinedev/refine/pull/5098) [`672f7916af7`](https://github.com/refinedev/refine/commit/672f7916af74ed0d62eb806fde35fd7e56000b23) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fix: `undoableNotification` does not work when using `useNotificationProvider` due to a different `notification` instance. + +## 5.36.9 + +### Patch Changes + +- [#5098](https://github.com/refinedev/refine/pull/5098) [`672f7916af7`](https://github.com/refinedev/refine/commit/672f7916af74ed0d62eb806fde35fd7e56000b23) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fix: `undoableNotification` does not work when using `useNotificationProvider` due to a different `notification` instance. + +## 5.36.8 + +### Patch Changes + +- [#4945](https://github.com/refinedev/refine/pull/4945) [`b838412f0d0`](https://github.com/refinedev/refine/commit/b838412f0d0b790ba95f3c07a899a021d3cd2c84) Thanks [@MahirMahdi](https://github.com/MahirMahdi)! - fix: antd notificationProvider issue + + Antd notification component could not access theme context, now it's fixed. + + This release provides an alternative to exported `notificationProvider` value from type `NotificationProvider` to `() => NotificationProvider`. If you previously had customizations applied to the `notificationProvider` object, you may need to update your code like the following: + + ```diff + - import { notificationProvider } from "@refinedev/antd"; + + import { useNotificationProvider } from "@refinedev/antd"; + + import { App as AntdApp } from "antd"; + + - const myNotificationProvider = { + - ...notificationProvider, + - open: (...args) => { + - // do some operation here + - notificationProvider.open(...args); + - }, + - } + + const myNotificationProvider = () => { + + const notificationProvider = useNotificationProvider(); + + return { + + ...notificationProvider, + + open: (...args) => { + + // do some operation here + + notificationProvider.open(...args); + + }, + + } + + } + } + + const App = () => { + return ( + + + + /* ... */ + + + + ); + } + ``` + +## 5.36.7 + +### Patch Changes + +- [#4945](https://github.com/refinedev/refine/pull/4945) [`b838412f0d0`](https://github.com/refinedev/refine/commit/b838412f0d0b790ba95f3c07a899a021d3cd2c84) Thanks [@MahirMahdi](https://github.com/MahirMahdi)! - fix: antd notificationProvider issue + + Antd notification component could not access theme context, now it's fixed. + + This release provides an alternative to exported `notificationProvider` value from type `NotificationProvider` to `() => NotificationProvider`. If you previously had customizations applied to the `notificationProvider` object, you may need to update your code like the following: + + ```diff + - import { notificationProvider } from "@refinedev/antd"; + + import { useNotificationProvider } from "@refinedev/antd"; + + import { App as AntdApp } from "antd"; + + - const myNotificationProvider = { + - ...notificationProvider, + - open: (...args) => { + - // do some operation here + - notificationProvider.open(...args); + - }, + - } + + const myNotificationProvider = () => { + + const notificationProvider = useNotificationProvider(); + + return { + + ...notificationProvider, + + open: (...args) => { + + // do some operation here + + notificationProvider.open(...args); + + }, + + } + + } + } + + const App = () => { + return ( + + + + /* ... */ + + + + ); + } + ``` + +## 5.36.6 + +### Patch Changes + +- [#5026](https://github.com/refinedev/refine/pull/5026) [`a605e4cd318`](https://github.com/refinedev/refine/commit/a605e4cd318ed5542b46e9e11a86f2c75dbb694b) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: deprecated `` and `` components removed from `swizzle`. + From now on, users can swizzle `` component instead. + + feat: swizzled `` component destination changed to `src/components/layout/` from `src/components/themedLayout`. + +## 5.36.5 + +### Patch Changes + +- [#5026](https://github.com/refinedev/refine/pull/5026) [`a605e4cd318`](https://github.com/refinedev/refine/commit/a605e4cd318ed5542b46e9e11a86f2c75dbb694b) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: deprecated `` and `` components removed from `swizzle`. + From now on, users can swizzle `` component instead. + + feat: swizzled `` component destination changed to `src/components/layout/` from `src/components/themedLayout`. + +## 5.36.4 + +### Patch Changes + +- [#5022](https://github.com/refinedev/refine/pull/5022) [`80513a4e42f`](https://github.com/refinedev/refine/commit/80513a4e42f8dda39e01157643594a9e4c32001b) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: update README.md + + - fix grammar errors. + - make all README.md files consistent. + - add code example code snippets. + +## 5.36.3 + +### Patch Changes + +- [#5022](https://github.com/refinedev/refine/pull/5022) [`80513a4e42f`](https://github.com/refinedev/refine/commit/80513a4e42f8dda39e01157643594a9e4c32001b) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: update README.md + + - fix grammar errors. + - make all README.md files consistent. + - add code example code snippets. + +## 5.36.2 + +### Patch Changes + +- [#4964](https://github.com/refinedev/refine/pull/4964) [`85b1ac0db5f`](https://github.com/refinedev/refine/commit/85b1ac0db5f8e61c7a78137aed0adf4bf2871848) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: update @refinedev/core peer dependency versions. + +## 5.36.1 + +### Patch Changes + +- [#4964](https://github.com/refinedev/refine/pull/4964) [`85b1ac0db5f`](https://github.com/refinedev/refine/commit/85b1ac0db5f8e61c7a78137aed0adf4bf2871848) Thanks [@BatuhanW](https://github.com/BatuhanW)! - chore: update @refinedev/core peer dependency versions. + +## 5.36.0 + +### Minor Changes + +- [#4914](https://github.com/refinedev/refine/pull/4914) [`91a4d0da9f1`](https://github.com/refinedev/refine/commit/91a4d0da9f180ae358a448c7d187cee44f8c2299) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: [`optimisticUpdateMap`](https://refine.dev/docs/api-reference/core/hooks/data/useUpdate/#optimisticupdatemap) prop added to `useForm` hook. This prop allows you to update the data in the cache. + + ```tsx + useForm({ + mutationMode: "optimistic", + optimisticUpdateMap: { + list: true, + many: true, + detail: (previous, values, id) => { + if (!previous) { + return null; + } + + const data = { + id, + ...previous.data, + ...values, + foo: "bar", + }; + + return { + ...previous, + data, + }; + }, + }, + }); + ``` + +### Patch Changes + +- [#4903](https://github.com/refinedev/refine/pull/4903) [`e327cadc011`](https://github.com/refinedev/refine/commit/e327cadc011ce8696d7149252e1ad308005b1eff) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - fix: when using [`useForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useForm/), `autoSave` parameters not passed to `@refinedev/core/useForm` hook. + From now on, you can use `autoSave` parameters in [`useForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useForm/) hook. + + feat: add `invalidateOnUnmount` prop to [`useForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useForm/) hook. + feat: add `invalidateOnUnmount` and `invalidateOnClose` prop to [`useModalForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useModalForm/) and [`useDrawerForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useDrawerForm/) hooks. + From now on, you can use the use this props to invalidate queries upon unmount or close. + +## 5.35.0 + +### Minor Changes + +- [#4914](https://github.com/refinedev/refine/pull/4914) [`91a4d0da9f1`](https://github.com/refinedev/refine/commit/91a4d0da9f180ae358a448c7d187cee44f8c2299) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: [`optimisticUpdateMap`](https://refine.dev/docs/api-reference/core/hooks/data/useUpdate/#optimisticupdatemap) prop added to `useForm` hook. This prop allows you to update the data in the cache. + + ```tsx + useForm({ + mutationMode: "optimistic", + optimisticUpdateMap: { + list: true, + many: true, + detail: (previous, values, id) => { + if (!previous) { + return null; + } + + const data = { + id, + ...previous.data, + ...values, + foo: "bar", + }; + + return { + ...previous, + data, + }; + }, + }, + }); + ``` + +### Patch Changes + +- [#4903](https://github.com/refinedev/refine/pull/4903) [`e327cadc011`](https://github.com/refinedev/refine/commit/e327cadc011ce8696d7149252e1ad308005b1eff) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - fix: when using [`useForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useForm/), `autoSave` parameters not passed to `@refinedev/core/useForm` hook. + From now on, you can use `autoSave` parameters in [`useForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useForm/) hook. + + feat: add `invalidateOnUnmount` prop to [`useForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useForm/) hook. + feat: add `invalidateOnUnmount` and `invalidateOnClose` prop to [`useModalForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useModalForm/) and [`useDrawerForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useDrawerForm/) hooks. + From now on, you can use the use this props to invalidate queries upon unmount or close. + +## 5.34.2 + +### Patch Changes + +- [#4948](https://github.com/refinedev/refine/pull/4948) [`8e5efffbb23`](https://github.com/refinedev/refine/commit/8e5efffbb231bc3163c56f8e823ccb649755a9d4) Thanks [@aliemir](https://github.com/aliemir)! - Keep the hook and component names in builds for better debugging. + +## 5.34.1 + +### Patch Changes + +- [#4948](https://github.com/refinedev/refine/pull/4948) [`8e5efffbb23`](https://github.com/refinedev/refine/commit/8e5efffbb231bc3163c56f8e823ccb649755a9d4) Thanks [@aliemir](https://github.com/aliemir)! - Keep the hook and component names in builds for better debugging. + +## 5.34.0 + +### Minor Changes + +- [#4775](https://github.com/refinedev/refine/pull/4775) [`3052fb22449`](https://github.com/refinedev/refine/commit/3052fb22449c5e35c607e95c060c38ca48e00c82) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fixed: `` does not refresh content #4618. + From now, `` uses `useInvalidate` hook to refresh data instead of `useOne`. + +### Patch Changes + +- [#4772](https://github.com/refinedev/refine/pull/4772) [`c9cc4398e99`](https://github.com/refinedev/refine/commit/c9cc4398e9996a49f7ee9c4c5656661a66b591ad) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fixed: antd `useModalForm` and `useDrawerForm` sends request twice when `syncWithLocation` is true + +- [#4778](https://github.com/refinedev/refine/pull/4778) [`82909db10b4`](https://github.com/refinedev/refine/commit/82909db10b4ac1705e1354bff0c0d95951497725) Thanks [@salihozdemir](https://github.com/salihozdemir)! - fix: fixed the `goToStep` of `useStepsForm` hook return type + +- Updated dependencies [[`3052fb22449`](https://github.com/refinedev/refine/commit/3052fb22449c5e35c607e95c060c38ca48e00c82)]: + - @refinedev/ui-types@1.22.0 + +## 5.33.0 + +### Minor Changes + +- [#4775](https://github.com/refinedev/refine/pull/4775) [`3052fb22449`](https://github.com/refinedev/refine/commit/3052fb22449c5e35c607e95c060c38ca48e00c82) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fixed: `` does not refresh content #4618. + From now, `` uses `useInvalidate` hook to refresh data instead of `useOne`. + +### Patch Changes + +- [#4772](https://github.com/refinedev/refine/pull/4772) [`c9cc4398e99`](https://github.com/refinedev/refine/commit/c9cc4398e9996a49f7ee9c4c5656661a66b591ad) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - fixed: antd `useModalForm` and `useDrawerForm` sends request twice when `syncWithLocation` is true + +- [#4778](https://github.com/refinedev/refine/pull/4778) [`82909db10b4`](https://github.com/refinedev/refine/commit/82909db10b4ac1705e1354bff0c0d95951497725) Thanks [@salihozdemir](https://github.com/salihozdemir)! - fix: fixed the `goToStep` of `useStepsForm` hook return type + +- Updated dependencies [[`3052fb22449`](https://github.com/refinedev/refine/commit/3052fb22449c5e35c607e95c060c38ca48e00c82)]: + - @refinedev/ui-types@1.21.0 + +## 5.32.0 + +### Minor Changes + +- [#4741](https://github.com/refinedev/refine/pull/4741) [`026ccf34356`](https://github.com/refinedev/refine/commit/026ccf34356bc621183894c0ee4518a6645369d1) Thanks [@aliemir](https://github.com/aliemir)! - Added `sideEffects` to `package.json` to help bundlers tree-shake unused code. + +### Patch Changes + +- [#4741](https://github.com/refinedev/refine/pull/4741) [`026ccf34356`](https://github.com/refinedev/refine/commit/026ccf34356bc621183894c0ee4518a6645369d1) Thanks [@aliemir](https://github.com/aliemir)! - Updated `DateField` to set `dayjs` extension in component instead of a global side effect. + +## 5.31.0 + +### Minor Changes + +- [#4741](https://github.com/refinedev/refine/pull/4741) [`026ccf34356`](https://github.com/refinedev/refine/commit/026ccf34356bc621183894c0ee4518a6645369d1) Thanks [@aliemir](https://github.com/aliemir)! - Added `sideEffects` to `package.json` to help bundlers tree-shake unused code. + +### Patch Changes + +- [#4741](https://github.com/refinedev/refine/pull/4741) [`026ccf34356`](https://github.com/refinedev/refine/commit/026ccf34356bc621183894c0ee4518a6645369d1) Thanks [@aliemir](https://github.com/aliemir)! - Updated `DateField` to set `dayjs` extension in component instead of a global side effect. + +## 5.30.0 + +### Minor Changes + +- [#4591](https://github.com/refinedev/refine/pull/4591) [`f8891ead2bd`](https://github.com/refinedev/refine/commit/f8891ead2bdb5f6743bbe9979230aa73ef3e69be) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: `autoSave` feature for [`Edit`](https://refine.dev/docs/api-reference/antd/components/basic-views/edit/#autosaveprops). + [useForm](https://refine.dev/docs/api-reference/antd/hooks/form/useForm/#autosave), [useDrawerForm](https://refine.dev/docs/api-reference/antd/hooks/form/useDrawerForm/#autosave), [useModalForm](https://refine.dev/docs/api-reference/antd/hooks/form/useModalForm/#autosave), [useStepsForm](https://refine.dev/docs/api-reference/antd/hooks/form/useStepsForm/#autosave) hooks now accept `autoSave` object. `enabled` is a boolean value and `debounce` is a number value in milliseconds. `debounce` is optional and default value is `1000`. + + ``` + const { autoSaveProps } = useForm({ + autoSave: { + enabled: true, + debounce: 2000, // not required, default is 1000 + }, + }); + + return ( + + // form fields + + ); + ``` + + feat: Add [``](https://refine.dev/docs/api-reference/antd/components/antd-auto-save-indicator/) component. It comes automatically when `autoSaveProps` is given to the `Edit` page. However, this component can be used to position it in a different place. + + ``` + import { AutoSaveIndicator } from "@refinedev/antd"; + const { autoSaveProps } = useForm({ + autoSave: { + enabled: true, + debounce: 2000, // not required, default is 1000 + }, + }); + + return ( +
+ +
+ ); + ``` + +- [#4652](https://github.com/refinedev/refine/pull/4652) [`96af6d25b7a`](https://github.com/refinedev/refine/commit/96af6d25b7a870a3c1c6fd33c30e0ca2224ed411) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: when the `dataProvider` returns rejected promise with `errors` field, `useForm` will automatically update the error state with the rejected `errors` field. + + [Refer to the server-side form validation documentation for more information. β†’](https://refine.dev/docs/advanced-tutorials/forms/server-side-form-validation/) + +### Patch Changes + +- Updated dependencies [[`f8891ead2bd`](https://github.com/refinedev/refine/commit/f8891ead2bdb5f6743bbe9979230aa73ef3e69be)]: + - @refinedev/ui-types@1.20.0 + +## 5.29.0 + +### Minor Changes + +- [#4591](https://github.com/refinedev/refine/pull/4591) [`f8891ead2bd`](https://github.com/refinedev/refine/commit/f8891ead2bdb5f6743bbe9979230aa73ef3e69be) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: `autoSave` feature for [`Edit`](https://refine.dev/docs/api-reference/antd/components/basic-views/edit/#autosaveprops). + [useForm](https://refine.dev/docs/api-reference/antd/hooks/form/useForm/#autosave), [useDrawerForm](https://refine.dev/docs/api-reference/antd/hooks/form/useDrawerForm/#autosave), [useModalForm](https://refine.dev/docs/api-reference/antd/hooks/form/useModalForm/#autosave), [useStepsForm](https://refine.dev/docs/api-reference/antd/hooks/form/useStepsForm/#autosave) hooks now accept `autoSave` object. `enabled` is a boolean value and `debounce` is a number value in milliseconds. `debounce` is optional and default value is `1000`. + + ``` + const { autoSaveProps } = useForm({ + autoSave: { + enabled: true, + debounce: 2000, // not required, default is 1000 + }, + }); + + return ( + + // form fields + + ); + ``` + + feat: Add [``](https://refine.dev/docs/api-reference/antd/components/antd-auto-save-indicator/) component. It comes automatically when `autoSaveProps` is given to the `Edit` page. However, this component can be used to position it in a different place. + + ``` + import { AutoSaveIndicator } from "@refinedev/antd"; + const { autoSaveProps } = useForm({ + autoSave: { + enabled: true, + debounce: 2000, // not required, default is 1000 + }, + }); + + return ( +
+ +
+ ); + ``` + +- [#4652](https://github.com/refinedev/refine/pull/4652) [`96af6d25b7a`](https://github.com/refinedev/refine/commit/96af6d25b7a870a3c1c6fd33c30e0ca2224ed411) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: when the `dataProvider` returns rejected promise with `errors` field, `useForm` will automatically update the error state with the rejected `errors` field. + + [Refer to the server-side form validation documentation for more information. β†’](https://refine.dev/docs/advanced-tutorials/forms/server-side-form-validation/) + +### Patch Changes + +- Updated dependencies [[`f8891ead2bd`](https://github.com/refinedev/refine/commit/f8891ead2bdb5f6743bbe9979230aa73ef3e69be)]: + - @refinedev/ui-types@1.19.0 + +## 5.28.0 + +### Minor Changes + +- [#4502](https://github.com/refinedev/refine/pull/4502) [`c7872ca621f`](https://github.com/refinedev/refine/commit/c7872ca621fdc6c0edd7ee113520bd898901ed38) Thanks [@Mr0nline](https://github.com/Mr0nline)! - feat: ability to tweak active sider items navigation + + Visiting active sider items triggers page reloads due to them being links. We can now provide activeItemDisabled prop to disable such reloads. + +### Patch Changes + +- [#4607](https://github.com/refinedev/refine/pull/4607) [`fed630dcc3e`](https://github.com/refinedev/refine/commit/fed630dcc3ef291efbfa96ed6f8e5c5448ac16a6) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - test: added tests for ``. + +- [#4609](https://github.com/refinedev/refine/pull/4609) [`48aaf739352`](https://github.com/refinedev/refine/commit/48aaf739352c6d8edc21cb111cc871de8f68549e) Thanks [@salihozdemir](https://github.com/salihozdemir)! - fix: `icon` and `label` alignment in `Breadcrumb` component + + Fixed the issue that the `icon` and `label` to be misaligned in the `Breadcrumb` component. + +- Updated dependencies [[`c7872ca621f`](https://github.com/refinedev/refine/commit/c7872ca621fdc6c0edd7ee113520bd898901ed38)]: + - @refinedev/ui-types@1.18.0 + +## 5.27.0 + +### Minor Changes + +- [#4502](https://github.com/refinedev/refine/pull/4502) [`c7872ca621f`](https://github.com/refinedev/refine/commit/c7872ca621fdc6c0edd7ee113520bd898901ed38) Thanks [@Mr0nline](https://github.com/Mr0nline)! - feat: ability to tweak active sider items navigation + + Visiting active sider items triggers page reloads due to them being links. We can now provide activeItemDisabled prop to disable such reloads. + +### Patch Changes + +- [#4607](https://github.com/refinedev/refine/pull/4607) [`fed630dcc3e`](https://github.com/refinedev/refine/commit/fed630dcc3ef291efbfa96ed6f8e5c5448ac16a6) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - test: added tests for ``. + +- [#4609](https://github.com/refinedev/refine/pull/4609) [`48aaf739352`](https://github.com/refinedev/refine/commit/48aaf739352c6d8edc21cb111cc871de8f68549e) Thanks [@salihozdemir](https://github.com/salihozdemir)! - fix: `icon` and `label` alignment in `Breadcrumb` component + + Fixed the issue that the `icon` and `label` to be misaligned in the `Breadcrumb` component. + +- Updated dependencies [[`c7872ca621f`](https://github.com/refinedev/refine/commit/c7872ca621fdc6c0edd7ee113520bd898901ed38)]: + - @refinedev/ui-types@1.17.0 + +## 5.26.0 + +### Minor Changes + +- [#4523](https://github.com/refinedev/refine/pull/4523) [`18d446b1069`](https://github.com/refinedev/refine/commit/18d446b1069c75b5033d0ce8defcb8c32fcce5cf) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: implement following hooks have `useLoadingOvertime` hook + + - [`useSelect`](https://refine.dev/docs/api-reference/antd/hooks/field/useSelect/#overtimeoptions) + - [`useDrawerForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useDrawerForm/#overtimeoptions) + - [`useForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useForm/#overtimeoptions) + - [`useModalForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useModalForm/#overtimeoptions) + - [`useStepsForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useStepsForm/#overtimeoptions) + - [`useSimpleList`](https://refine.dev/docs/api-reference/antd/hooks/list/useSimpleList/#overtimeoptions) + - [`useTable`](https://refine.dev/docs/api-reference/antd/hooks/table/useTable/#overtimeoptions) + +### Patch Changes + +- [#4527](https://github.com/refinedev/refine/pull/4527) [`ceadcd29fc9`](https://github.com/refinedev/refine/commit/ceadcd29fc9e42c875a4b0a78622e9fc14b4ce42) Thanks [@salihozdemir](https://github.com/salihozdemir)! - fix: prioritization of forgotten `identifier` + + If `identifier` is provided, it will be used instead of `name`. + + ```tsx + import { DeleteButton } from "@refinedev/antd"; + + ; + ``` + + fix: use translate keys with `identifier` + + Previously, the translate keys were generated using resource `name`. This caused issues when you had multiple `resource` usage with the same name. Now the `translate` keys are generated using `identifier` if it's present. + +## 5.25.0 + +### Minor Changes + +- [#4523](https://github.com/refinedev/refine/pull/4523) [`18d446b1069`](https://github.com/refinedev/refine/commit/18d446b1069c75b5033d0ce8defcb8c32fcce5cf) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: implement following hooks have `useLoadingOvertime` hook + + - [`useSelect`](https://refine.dev/docs/api-reference/antd/hooks/field/useSelect/#overtimeoptions) + - [`useDrawerForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useDrawerForm/#overtimeoptions) + - [`useForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useForm/#overtimeoptions) + - [`useModalForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useModalForm/#overtimeoptions) + - [`useStepsForm`](https://refine.dev/docs/api-reference/antd/hooks/form/useStepsForm/#overtimeoptions) + - [`useSimpleList`](https://refine.dev/docs/api-reference/antd/hooks/list/useSimpleList/#overtimeoptions) + - [`useTable`](https://refine.dev/docs/api-reference/antd/hooks/table/useTable/#overtimeoptions) + +### Patch Changes + +- [#4527](https://github.com/refinedev/refine/pull/4527) [`ceadcd29fc9`](https://github.com/refinedev/refine/commit/ceadcd29fc9e42c875a4b0a78622e9fc14b4ce42) Thanks [@salihozdemir](https://github.com/salihozdemir)! - fix: prioritization of forgotten `identifier` + + If `identifier` is provided, it will be used instead of `name`. + + ```tsx + import { DeleteButton } from "@refinedev/antd"; + + ; + ``` + + fix: use translate keys with `identifier` + + Previously, the translate keys were generated using resource `name`. This caused issues when you had multiple `resource` usage with the same name. Now the `translate` keys are generated using `identifier` if it's present. + +## 5.24.0 + +### Minor Changes + +- [#4449](https://github.com/refinedev/refine/pull/4449) [`cc84d61bc5c`](https://github.com/refinedev/refine/commit/cc84d61bc5c8cfc8ac7da391f965471ecad6c445) Thanks [@BatuhanW](https://github.com/BatuhanW)! - feat: updated Create, List, Show, Edit, Delete, Clone buttons to respect new global `accessControlProvider` configuration. + + fix: Delete button's text wasn't rendered as `reason` field of `accessControlProvider`. + + Given the following `can` method: + + ```ts + const accessControlProvider: IAccessControlContext = { + can: async (): Promise => { + return { can: false, reason: "Access Denied!" }; + }, + }; + ``` + + If user is unauthorized, `Delete` button's text should be `Access Denied!` instead of default `Delete`. + + This is the default behaviour for Create, List, Show, Edit, Delete, Clone buttons already. + +## 5.23.0 + +### Minor Changes + +- [#4449](https://github.com/refinedev/refine/pull/4449) [`cc84d61bc5c`](https://github.com/refinedev/refine/commit/cc84d61bc5c8cfc8ac7da391f965471ecad6c445) Thanks [@BatuhanW](https://github.com/BatuhanW)! - feat: updated Create, List, Show, Edit, Delete, Clone buttons to respect new global `accessControlProvider` configuration. + + fix: Delete button's text wasn't rendered as `reason` field of `accessControlProvider`. + + Given the following `can` method: + + ```ts + const accessControlProvider: IAccessControlContext = { + can: async (): Promise => { + return { can: false, reason: "Access Denied!" }; + }, + }; + ``` + + If user is unauthorized, `Delete` button's text should be `Access Denied!` instead of default `Delete`. + + This is the default behaviour for Create, List, Show, Edit, Delete, Clone buttons already. + +## 5.22.0 + +### Minor Changes + +- [#4430](https://github.com/refinedev/refine/pull/4430) [`cf07d59587f`](https://github.com/refinedev/refine/commit/cf07d59587fae2adce97a79b40fdb60b9d9a9527) Thanks [@aliemir](https://github.com/aliemir)! - Updated the `useForm`, `useModalForm`, `useDrawerForm` and `useStepsForm` to accept `queryMeta` and `mutationMeta` properties of the `useForm` hook of `@refinedev/core`. These properties are used to pass specific meta values to the query or mutation. This is useful when you have overlapping values in your data provider's `getOne` and `update` methods. For example, you may want to change the `method` of the mutation to `PATCH` but if you pass it in the `meta` property, you'll end up changing the method of the `getOne` request as well. + + `queryMeta` and `mutationMeta` has precedence over `meta`. This means that if you have the same property in `queryMeta` and `meta`, the value in `queryMeta` will be used. + + **Usage** + + ```tsx + import { useForm } from "@refinedev/core"; + + export const MyEditPage = () => { + const form = useForm({ + // this is passed both to the mutation and the query requests + meta: { + myValue: "myValue", + }, + // this is only passed to the query request + queryMeta: { + propertyOnlyWorksForQuery: "propertyOnlyWorksForQuery", + }, + // this is only passed to the mutation request + mutationMeta: { + propertyOnlyWorksForMutation: "propertyOnlyWorksForMutation", + }, + }); + }; + ``` + +### Patch Changes + +- [#4429](https://github.com/refinedev/refine/pull/4429) [`63daabcb703`](https://github.com/refinedev/refine/commit/63daabcb7037860bc36dff8cc417e9426e9ec027) Thanks [@aliemir](https://github.com/aliemir)! - Fixed the issue of `formLoading` property in return values of `useStepsForm` hook which was not being toggled correctly when the form was submitted or the form data was being fetched. + +- [#4431](https://github.com/refinedev/refine/pull/4431) [`c29a3618cf6`](https://github.com/refinedev/refine/commit/c29a3618cf6b577c36e90ec514f3a691c87aad8f) Thanks [@aliemir](https://github.com/aliemir)! - Updated the TSDoc comments to fix the broken links in the documentation. + +## 5.21.0 + +### Minor Changes + +- [#4430](https://github.com/refinedev/refine/pull/4430) [`cf07d59587f`](https://github.com/refinedev/refine/commit/cf07d59587fae2adce97a79b40fdb60b9d9a9527) Thanks [@aliemir](https://github.com/aliemir)! - Updated the `useForm`, `useModalForm`, `useDrawerForm` and `useStepsForm` to accept `queryMeta` and `mutationMeta` properties of the `useForm` hook of `@refinedev/core`. These properties are used to pass specific meta values to the query or mutation. This is useful when you have overlapping values in your data provider's `getOne` and `update` methods. For example, you may want to change the `method` of the mutation to `PATCH` but if you pass it in the `meta` property, you'll end up changing the method of the `getOne` request as well. + + `queryMeta` and `mutationMeta` has precedence over `meta`. This means that if you have the same property in `queryMeta` and `meta`, the value in `queryMeta` will be used. + + **Usage** + + ```tsx + import { useForm } from "@refinedev/core"; + + export const MyEditPage = () => { + const form = useForm({ + // this is passed both to the mutation and the query requests + meta: { + myValue: "myValue", + }, + // this is only passed to the query request + queryMeta: { + propertyOnlyWorksForQuery: "propertyOnlyWorksForQuery", + }, + // this is only passed to the mutation request + mutationMeta: { + propertyOnlyWorksForMutation: "propertyOnlyWorksForMutation", + }, + }); + }; + ``` + +### Patch Changes + +- [#4429](https://github.com/refinedev/refine/pull/4429) [`63daabcb703`](https://github.com/refinedev/refine/commit/63daabcb7037860bc36dff8cc417e9426e9ec027) Thanks [@aliemir](https://github.com/aliemir)! - Fixed the issue of `formLoading` property in return values of `useStepsForm` hook which was not being toggled correctly when the form was submitted or the form data was being fetched. + +- [#4431](https://github.com/refinedev/refine/pull/4431) [`c29a3618cf6`](https://github.com/refinedev/refine/commit/c29a3618cf6b577c36e90ec514f3a691c87aad8f) Thanks [@aliemir](https://github.com/aliemir)! - Updated the TSDoc comments to fix the broken links in the documentation. + +## 5.20.0 + +### Minor Changes + +- [#4404](https://github.com/refinedev/refine/pull/4404) [`f67967e8c87`](https://github.com/refinedev/refine/commit/f67967e8c871b2252b4c1b827de3656bf153d1ee) Thanks [@salihozdemir](https://github.com/salihozdemir)! - refactor: fix name and state inconsistency in `` + + `useSiderVisible` is deprecated, instead we created a new hook `useThemedLayoutContext` for it. `useThemedLayoutContext` similar to `useSiderVisible` but it returns more meaningful state names. However, `useSiderVisible` is still available for backward compatibility. + + Updated `Sider` and `HamburgerMenu` components using `useThemedLayoutContext`. + + ```tsx + import { useThemedLayoutContext } from "@refinedev/antd"; + + const { + siderCollapsed, + setSiderCollapsed, + mobileSiderOpen, + setMobileSiderOpen, + } = useThemedLayoutContext(); + ``` + +## 5.19.0 + +### Minor Changes + +- [#4404](https://github.com/refinedev/refine/pull/4404) [`f67967e8c87`](https://github.com/refinedev/refine/commit/f67967e8c871b2252b4c1b827de3656bf153d1ee) Thanks [@salihozdemir](https://github.com/salihozdemir)! - refactor: fix name and state inconsistency in `` + + `useSiderVisible` is deprecated, instead we created a new hook `useThemedLayoutContext` for it. `useThemedLayoutContext` similar to `useSiderVisible` but it returns more meaningful state names. However, `useSiderVisible` is still available for backward compatibility. + + Updated `Sider` and `HamburgerMenu` components using `useThemedLayoutContext`. + + ```tsx + import { useThemedLayoutContext } from "@refinedev/antd"; + + const { + siderCollapsed, + setSiderCollapsed, + mobileSiderOpen, + setMobileSiderOpen, + } = useThemedLayoutContext(); + ``` + +## 5.18.2 + +### Patch Changes + +- [#4316](https://github.com/refinedev/refine/pull/4316) [`4690c627e05`](https://github.com/refinedev/refine/commit/4690c627e053a7e35eb8bcb1bfca808308bfa89d) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - fix: fixed `className` for easier selection of all buttons and titles of CRUD components + +## 5.18.1 + +### Patch Changes + +- [#4316](https://github.com/refinedev/refine/pull/4316) [`4690c627e05`](https://github.com/refinedev/refine/commit/4690c627e053a7e35eb8bcb1bfca808308bfa89d) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - fix: fixed `className` for easier selection of all buttons and titles of CRUD components + +## 5.18.0 + +### Minor Changes + +- [#4303](https://github.com/refinedev/refine/pull/4303) [`0c569f42b4e`](https://github.com/refinedev/refine/commit/0c569f42b4e7caec75928fd8a1ebeb337c95ff81) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: added default button props into the renderer functions `headerButtons` and `footerButtons` in CRUD components. + Now, customization of the header and footer buttons can be achieved without losing the default functionality. + + ```tsx + import { + DeleteButton, + EditButton, + ListButton, + RefreshButton, + Show, + } from "@refinedev/antd"; + + const PostShow = () => { + return ( + { + return ( + <> + {/* custom components */} + {listButtonProps && ( + + )} + {editButtonProps && ( + + )} + {deleteButtonProps && ( + + )} + + + ); + }} + > + {/* ... */} + + ); + }; + ``` + +- [#4306](https://github.com/refinedev/refine/pull/4306) [`e6eb4dea627`](https://github.com/refinedev/refine/commit/e6eb4dea6279983d04a9f654ac2cd74915fba075) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: `syncWithLocation.syncId` default to `true` for `useDrawerForm` and `useModalForm`. + +### Patch Changes + +- [#4312](https://github.com/refinedev/refine/pull/4312) [`9a5f79186c1`](https://github.com/refinedev/refine/commit/9a5f79186c107d52e12b8ff87558a3c3dd7807b8) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: added `className` for easier selection of all buttons and titles of CRUD components + +- Updated dependencies [[`0c569f42b4e`](https://github.com/refinedev/refine/commit/0c569f42b4e7caec75928fd8a1ebeb337c95ff81), [`9a5f79186c1`](https://github.com/refinedev/refine/commit/9a5f79186c107d52e12b8ff87558a3c3dd7807b8)]: + - @refinedev/ui-types@1.16.0 + +## 5.17.0 + +### Minor Changes + +- [#4303](https://github.com/refinedev/refine/pull/4303) [`0c569f42b4e`](https://github.com/refinedev/refine/commit/0c569f42b4e7caec75928fd8a1ebeb337c95ff81) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: added default button props into the renderer functions `headerButtons` and `footerButtons` in CRUD components. + Now, customization of the header and footer buttons can be achieved without losing the default functionality. + + ```tsx + import { + DeleteButton, + EditButton, + ListButton, + RefreshButton, + Show, + } from "@refinedev/antd"; + + const PostShow = () => { + return ( + { + return ( + <> + {/* custom components */} + {listButtonProps && ( + + )} + {editButtonProps && ( + + )} + {deleteButtonProps && ( + + )} + + + ); + }} + > + {/* ... */} + + ); + }; + ``` + +- [#4306](https://github.com/refinedev/refine/pull/4306) [`e6eb4dea627`](https://github.com/refinedev/refine/commit/e6eb4dea6279983d04a9f654ac2cd74915fba075) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: `syncWithLocation.syncId` default to `true` for `useDrawerForm` and `useModalForm`. + +### Patch Changes + +- [#4312](https://github.com/refinedev/refine/pull/4312) [`9a5f79186c1`](https://github.com/refinedev/refine/commit/9a5f79186c107d52e12b8ff87558a3c3dd7807b8) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: added `className` for easier selection of all buttons and titles of CRUD components + +- Updated dependencies [[`0c569f42b4e`](https://github.com/refinedev/refine/commit/0c569f42b4e7caec75928fd8a1ebeb337c95ff81), [`9a5f79186c1`](https://github.com/refinedev/refine/commit/9a5f79186c107d52e12b8ff87558a3c3dd7807b8)]: + - @refinedev/ui-types@1.15.0 + +## 5.16.2 + +### Patch Changes + +- [#4295](https://github.com/refinedev/refine/pull/4295) [`7f24a6a2b14`](https://github.com/refinedev/refine/commit/7f24a6a2b14f1e10a2483298b13cc143861fb08f) Thanks [@salihozdemir](https://github.com/salihozdemir)! - chore: bump to latest version of `@refinedev/ui-types` + +- Updated dependencies [[`dc62abc890f`](https://github.com/refinedev/refine/commit/dc62abc890f68be161c7035c28c0118216a9e0ec)]: + - @refinedev/ui-types@1.14.0 + +## 5.16.1 + +### Patch Changes + +- [#4295](https://github.com/refinedev/refine/pull/4295) [`7f24a6a2b14`](https://github.com/refinedev/refine/commit/7f24a6a2b14f1e10a2483298b13cc143861fb08f) Thanks [@salihozdemir](https://github.com/salihozdemir)! - chore: bump to latest version of `@refinedev/ui-types` + +## 5.16.0 + +### Minor Changes + +- [#4272](https://github.com/refinedev/refine/pull/4272) [`420d2442741`](https://github.com/refinedev/refine/commit/420d2442741d211561dd48c72bcb143ee5f44e9e) Thanks [@salihozdemir](https://github.com/salihozdemir)! - feat: added the `fixed` prop to the `` to allow the sider to be fixed + + The prop is optional and defaults to `false`. You can see the usage as follows: + + ```tsx + import { Refine } from "@refinedev/core"; + import { ThemedLayoutV2, ThemedSiderV2 } from "@refinedev/antd"; + + const App: React.FC = () => { + return ( + + }> + {/* ... */} + + + ); + }; + ``` + +- [#4278](https://github.com/refinedev/refine/pull/4278) [`b14f2ad8a70`](https://github.com/refinedev/refine/commit/b14f2ad8a700d5ae157f437a8f610481d88ae09b) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: added `autoSubmitClose` prop to `useEditableTable`. + Now you can choose whether to close the table's row after submitting the form or not. + + ```tsx + const editableTable = useEditableTable({ + autoSubmitClose: false, + }); + ``` + +### Patch Changes + +- [#4267](https://github.com/refinedev/refine/pull/4267) [`5e128c76c16`](https://github.com/refinedev/refine/commit/5e128c76c162cb01822c283e567003a5b6ce62f8) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - fix: `onFinish` prop override on `useDrawerForm` and `useModalForm` hook + + When override `onFinish` prop using the `useDrawerForm` and `useModalForm` hooks, the modal not close after submit the form. + +- [#4277](https://github.com/refinedev/refine/pull/4277) [`7172c1b42d2`](https://github.com/refinedev/refine/commit/7172c1b42d26ade22780527892ce26ceef15c838) Thanks [@salihozdemir](https://github.com/salihozdemir)! - fix: renamed the `` prop `isSticky` to `sticky` + + To provide backwards compatibility, the old prop name is still supported, but it is deprecated and will be removed in the next major version. + + Example: + + ```tsx + import { Refine } from "@refinedev/core"; + import { ThemedLayoutV2, ThemedHeaderV2 } from "@refinedev/antd"; // or @refinedev/chakra-ui, @refinedev/mui, @refinedev/mantine + + const App: React.FC = () => { + return ( + + } + > + {/* ... */} + + + ); + }; + ``` + +## 5.15.0 + +### Minor Changes + +- [#4272](https://github.com/refinedev/refine/pull/4272) [`420d2442741`](https://github.com/refinedev/refine/commit/420d2442741d211561dd48c72bcb143ee5f44e9e) Thanks [@salihozdemir](https://github.com/salihozdemir)! - feat: added the `fixed` prop to the `` to allow the sider to be fixed + + The prop is optional and defaults to `false`. You can see the usage as follows: + + ```tsx + import { Refine } from "@refinedev/core"; + import { ThemedLayoutV2, ThemedSiderV2 } from "@refinedev/antd"; + + const App: React.FC = () => { + return ( + + }> + {/* ... */} + + + ); + }; + ``` + +- [#4278](https://github.com/refinedev/refine/pull/4278) [`b14f2ad8a70`](https://github.com/refinedev/refine/commit/b14f2ad8a700d5ae157f437a8f610481d88ae09b) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: added `autoSubmitClose` prop to `useEditableTable`. + Now you can choose whether to close the table's row after submitting the form or not. + + ```tsx + const editableTable = useEditableTable({ + autoSubmitClose: false, + }); + ``` + +### Patch Changes + +- [#4267](https://github.com/refinedev/refine/pull/4267) [`5e128c76c16`](https://github.com/refinedev/refine/commit/5e128c76c162cb01822c283e567003a5b6ce62f8) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - fix: `onFinish` prop override on `useDrawerForm` and `useModalForm` hook + + When override `onFinish` prop using the `useDrawerForm` and `useModalForm` hooks, the modal not close after submit the form. + +- [#4277](https://github.com/refinedev/refine/pull/4277) [`7172c1b42d2`](https://github.com/refinedev/refine/commit/7172c1b42d26ade22780527892ce26ceef15c838) Thanks [@salihozdemir](https://github.com/salihozdemir)! - fix: renamed the `` prop `isSticky` to `sticky` + + To provide backwards compatibility, the old prop name is still supported, but it is deprecated and will be removed in the next major version. + + Example: + + ```tsx + import { Refine } from "@refinedev/core"; + import { ThemedLayoutV2, ThemedHeaderV2 } from "@refinedev/antd"; // or @refinedev/chakra-ui, @refinedev/mui, @refinedev/mantine + + const App: React.FC = () => { + return ( + + } + > + {/* ... */} + + + ); + }; + ``` + +## 5.14.0 + +### Minor Changes + +- [#4272](https://github.com/refinedev/refine/pull/4272) [`420d2442741`](https://github.com/refinedev/refine/commit/420d2442741d211561dd48c72bcb143ee5f44e9e) Thanks [@salihozdemir](https://github.com/salihozdemir)! - feat: added the `fixed` prop to the `` to allow the sider to be fixed + + The prop is optional and defaults to `false`. You can see the usage as follows: + + ```tsx + import { Refine } from "@refinedev/core"; + import { ThemedLayoutV2, ThemedSiderV2 } from "@refinedev/antd"; + + const App: React.FC = () => { + return ( + + }> + {/* ... */} + + + ); + }; + ``` + +- [#4278](https://github.com/refinedev/refine/pull/4278) [`b14f2ad8a70`](https://github.com/refinedev/refine/commit/b14f2ad8a700d5ae157f437a8f610481d88ae09b) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: added `autoSubmitClose` prop to `useEditableTable`. + Now you can choose whether to close the table's row after submitting the form or not. + + ```tsx + const editableTable = useEditableTable({ + autoSubmitClose: false, + }); + ``` + +### Patch Changes + +- [#4267](https://github.com/refinedev/refine/pull/4267) [`5e128c76c16`](https://github.com/refinedev/refine/commit/5e128c76c162cb01822c283e567003a5b6ce62f8) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - fix: `onFinish` prop override on `useDrawerForm` and `useModalForm` hook + + When override `onFinish` prop using the `useDrawerForm` and `useModalForm` hooks, the modal not close after submit the form. + +- [#4277](https://github.com/refinedev/refine/pull/4277) [`7172c1b42d2`](https://github.com/refinedev/refine/commit/7172c1b42d26ade22780527892ce26ceef15c838) Thanks [@salihozdemir](https://github.com/salihozdemir)! - fix: renamed the `` prop `isSticky` to `sticky` + + To provide backwards compatibility, the old prop name is still supported, but it is deprecated and will be removed in the next major version. + + Example: + + ```tsx + import { Refine } from "@refinedev/core"; + import { ThemedLayoutV2, ThemedHeaderV2 } from "@refinedev/antd"; // or @refinedev/chakra-ui, @refinedev/mui, @refinedev/mantine + + const App: React.FC = () => { + return ( + + } + > + {/* ... */} + + + ); + }; + ``` + +## 5.13.2 + +### Patch Changes + +- [#4241](https://github.com/refinedev/refine/pull/4241) [`fbe109b5a8b`](https://github.com/refinedev/refine/commit/fbe109b5a8ba8f5d870eab2d96b7477508bceec0) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Added new generic types to the `useForm` hooks. Now you can pass the query types and the mutation types to the hook. + +## 5.13.1 + +### Patch Changes + +- [#4241](https://github.com/refinedev/refine/pull/4241) [`fbe109b5a8b`](https://github.com/refinedev/refine/commit/fbe109b5a8ba8f5d870eab2d96b7477508bceec0) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Added new generic types to the `useForm` hooks. Now you can pass the query types and the mutation types to the hook. + +## 5.13.0 + +### Minor Changes + +- [#4209](https://github.com/refinedev/refine/pull/4209) [`3f4b5fef76f`](https://github.com/refinedev/refine/commit/3f4b5fef76f3558fc4466f455b9f55083cf47fc2) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: add `isSticky` prop to `ThemedHeaderV2` component + + ```tsx + import { ThemedHeaderV2, ThemedLayoutV2 } from "@refinedev/antd"; + + const CustomHeader = () => ; + + const App = () => ( + + // ... + + + + // ... + + ); + ``` + +- [#4232](https://github.com/refinedev/refine/pull/4232) [`c99bc0ad7f7`](https://github.com/refinedev/refine/commit/c99bc0ad7f7b71cf47e45a797acdea2325e6fbc8) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: `initialSiderCollapsed` added to `RefineThemedLayoutV2Props` to control initial state of ``. + From now on, you can control the initial collapsed state of `` by passing the `initialSiderCollapsed` prop to ``. + + ```tsx + + {/* .. */} + + ``` + +### Patch Changes + +- Updated dependencies [[`c99bc0ad7f7`](https://github.com/refinedev/refine/commit/c99bc0ad7f7b71cf47e45a797acdea2325e6fbc8), [`3f4b5fef76f`](https://github.com/refinedev/refine/commit/3f4b5fef76f3558fc4466f455b9f55083cf47fc2)]: + - @refinedev/ui-types@1.12.0 + +## 5.12.0 + +### Minor Changes + +- [#4209](https://github.com/refinedev/refine/pull/4209) [`3f4b5fef76f`](https://github.com/refinedev/refine/commit/3f4b5fef76f3558fc4466f455b9f55083cf47fc2) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: add `isSticky` prop to `ThemedHeaderV2` component + + ```tsx + import { ThemedHeaderV2, ThemedLayoutV2 } from "@refinedev/antd"; + + const CustomHeader = () => ; + + const App = () => ( + + // ... + + + + // ... + + ); + ``` + +- [#4232](https://github.com/refinedev/refine/pull/4232) [`c99bc0ad7f7`](https://github.com/refinedev/refine/commit/c99bc0ad7f7b71cf47e45a797acdea2325e6fbc8) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: `initialSiderCollapsed` added to `RefineThemedLayoutV2Props` to control initial state of ``. + From now on, you can control the initial collapsed state of `` by passing the `initialSiderCollapsed` prop to ``. + + ```tsx + + {/* .. */} + + ``` + +### Patch Changes + +- Updated dependencies [[`c99bc0ad7f7`](https://github.com/refinedev/refine/commit/c99bc0ad7f7b71cf47e45a797acdea2325e6fbc8), [`3f4b5fef76f`](https://github.com/refinedev/refine/commit/3f4b5fef76f3558fc4466f455b9f55083cf47fc2)]: + - @refinedev/ui-types@1.11.0 + +## 5.11.0 + +### Minor Changes + +- [#4194](https://github.com/refinedev/refine/pull/4194) [`8df15fe0e4e`](https://github.com/refinedev/refine/commit/8df15fe0e4e0fb2bb81102ed1e3a12a0a9532b80) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: `sorters.mode` prop added to `useTable` and `useDataGrid` hooks. This prop handles the sorting mode of the table. It can be either `server` or `off`. + + - **"off"**: `sorters` are not sent to the server. You can use the `sorters` value to sort the records on the client side. + - **"server"**: Sorting is done on the server side. Records will be fetched by using the `sorters` value. + + feat:`filters.mode` prop added to `useTable` and `useDataGrid` hooks. This prop handles the filtering mode of the table. It can be either `server` or `off`. + + - **"off"**: `filters` are not sent to the server. You can use the `filters` value to filter the records on the client side. + - **"server"**: Filtering is done on the server side. Records will be fetched by using the `filters` value. + +## 5.10.0 + +### Minor Changes + +- [#4194](https://github.com/refinedev/refine/pull/4194) [`8df15fe0e4e`](https://github.com/refinedev/refine/commit/8df15fe0e4e0fb2bb81102ed1e3a12a0a9532b80) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - feat: `sorters.mode` prop added to `useTable` and `useDataGrid` hooks. This prop handles the sorting mode of the table. It can be either `server` or `off`. + + - **"off"**: `sorters` are not sent to the server. You can use the `sorters` value to sort the records on the client side. + - **"server"**: Sorting is done on the server side. Records will be fetched by using the `sorters` value. + + feat:`filters.mode` prop added to `useTable` and `useDataGrid` hooks. This prop handles the filtering mode of the table. It can be either `server` or `off`. + + - **"off"**: `filters` are not sent to the server. You can use the `filters` value to filter the records on the client side. + - **"server"**: Filtering is done on the server side. Records will be fetched by using the `filters` value. + +## 5.9.0 + +### Minor Changes + +- [#4193](https://github.com/refinedev/refine/pull/4193) [`3d28fccc1ca`](https://github.com/refinedev/refine/commit/3d28fccc1ca14cdf316d518935cb6c17500c62a4) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: add `ThemedLayoutV2` component and `useSiderVisible` hook + + `ThemeLayout` is deprecated. Added `ThemedLayoutV2` instead. This update fixed some UI problems in the layout. Also, with the new `useSiderVisible` hook, it's easier to collapse/uncollapse the `Sider`. + + See here for detailed [migration guideline](https://refine.dev/docs/api-reference/antd/components/antd-themed-layout/#migrate-themedlayout-to-themedlayoutv2). + +### Patch Changes + +- Updated dependencies [[`deec38a034a`](https://github.com/refinedev/refine/commit/deec38a034a0b5ab2d7842e428f6fc3a1b8561fa)]: + - @refinedev/ui-types@1.10.0 + +## 5.8.0 + +### Minor Changes + +- [#4193](https://github.com/refinedev/refine/pull/4193) [`3d28fccc1ca`](https://github.com/refinedev/refine/commit/3d28fccc1ca14cdf316d518935cb6c17500c62a4) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: add `ThemedLayoutV2` component and `useSiderVisible` hook + + `ThemeLayout` is deprecated. Added `ThemedLayoutV2` instead. This update fixed some UI problems in the layout. Also, with the new `useSiderVisible` hook, it's easier to collapse/uncollapse the `Sider`. + + See here for detailed [migration guideline](https://refine.dev/docs/api-reference/antd/components/antd-themed-layout/#migrate-themedlayout-to-themedlayoutv2). + +### Patch Changes + +- Updated dependencies [[`deec38a034a`](https://github.com/refinedev/refine/commit/deec38a034a0b5ab2d7842e428f6fc3a1b8561fa)]: + - @refinedev/ui-types@1.9.0 + +## 5.7.0 + +### Minor Changes + +- [#4193](https://github.com/refinedev/refine/pull/4193) [`3d28fccc1ca`](https://github.com/refinedev/refine/commit/3d28fccc1ca14cdf316d518935cb6c17500c62a4) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - feat: add `ThemedLayoutV2` component and `useSiderVisible` hook + + `ThemeLayout` is deprecated. Added `ThemedLayoutV2` instead. This update fixed some UI problems in the layout. Also, with the new `useSiderVisible` hook, it's easier to collapse/uncollapse the `Sider`. + + See here for detailed [migration guideline](https://refine.dev/docs/api-reference/antd/components/antd-themed-layout/#migrate-themedlayout-to-themedlayoutv2). + +### Patch Changes + +- Updated dependencies [[`deec38a034a`](https://github.com/refinedev/refine/commit/deec38a034a0b5ab2d7842e428f6fc3a1b8561fa)]: + - @refinedev/ui-types@1.8.0 + +## 5.6.0 + +### Minor Changes + +- [#4113](https://github.com/refinedev/refine/pull/4113) [`1c13602e308`](https://github.com/refinedev/refine/commit/1c13602e308ffba93099922c144966f25fb2087d) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Added missing third generic parameter to hooks which are using `useQuery` internally. + + For example: + + ```ts + import { useOne, HttpError } from "@refinedev/core"; + + const { data } = useOne<{ count: string }, HttpError, { count: number }>({ + resource: "product-count", + queryOptions: { + select: (rawData) => { + return { + data: { + count: Number(rawData?.data?.count), + }, + }; + }, + }, + }); + + console.log(typeof data?.data.count); // number + ``` + +### Patch Changes + +- [#4113](https://github.com/refinedev/refine/pull/4113) [`1c13602e308`](https://github.com/refinedev/refine/commit/1c13602e308ffba93099922c144966f25fb2087d) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Updated the generic type name of hooks that use `useQuery` to synchronize generic type names with `tanstack-query`. + +## 5.5.2 + +### Patch Changes + +- [#4120](https://github.com/refinedev/refine/pull/4120) [`1f310bd7b69`](https://github.com/refinedev/refine/commit/1f310bd7b6900f534bb57db90d3fc8a6ea4364c9) Thanks [@aliemir](https://github.com/aliemir)! - Fix broken `useModalForm` and `useDrawerForm` with `create` actions. + +## 5.5.1 + +### Patch Changes + +- [#4120](https://github.com/refinedev/refine/pull/4120) [`1f310bd7b69`](https://github.com/refinedev/refine/commit/1f310bd7b6900f534bb57db90d3fc8a6ea4364c9) Thanks [@aliemir](https://github.com/aliemir)! - Fix broken `useModalForm` and `useDrawerForm` with `create` actions. + +## 5.5.0 + +### Minor Changes + +- [#4072](https://github.com/refinedev/refine/pull/4072) [`fad40e6237f`](https://github.com/refinedev/refine/commit/fad40e6237f06f99b1a5cad943cf34cf693a78fb) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - - `` is deprecated. use `` instead with 100% backward compatibility. - https://refine.dev/docs/api-reference/antd/components/antd-themed-layout + +### Patch Changes + +- [#4114](https://github.com/refinedev/refine/pull/4114) [`afdaed3dd83`](https://github.com/refinedev/refine/commit/afdaed3dd8357d6106ed5a4e524d82cfcceaf7ec) Thanks [@aliemir](https://github.com/aliemir)! - Updated `useModalForm` and `useDrawerForm` hook's `show` method to check if there's an `id` present or provided. If there is, it will continue to show the modal/drawer. If not, the modal/drawer will not show. (Resolves #4062) + +## 5.4.0 + +### Minor Changes + +- [#4072](https://github.com/refinedev/refine/pull/4072) [`fad40e6237f`](https://github.com/refinedev/refine/commit/fad40e6237f06f99b1a5cad943cf34cf693a78fb) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - - `` is deprecated. use `` instead with 100% backward compatibility. - https://refine.dev/docs/api-reference/antd/components/antd-themed-layout + +### Patch Changes + +- [#4114](https://github.com/refinedev/refine/pull/4114) [`afdaed3dd83`](https://github.com/refinedev/refine/commit/afdaed3dd8357d6106ed5a4e524d82cfcceaf7ec) Thanks [@aliemir](https://github.com/aliemir)! - Updated `useModalForm` and `useDrawerForm` hook's `show` method to check if there's an `id` present or provided. If there is, it will continue to show the modal/drawer. If not, the modal/drawer will not show. (Resolves #4062) + +## 5.3.14 + +### Patch Changes + +- [#4035](https://github.com/refinedev/refine/pull/4035) [`e0c75450f97`](https://github.com/refinedev/refine/commit/e0c75450f970878fea0ace7db63548c7ba1a1688) Thanks [@salihozdemir](https://github.com/salihozdemir)! - - Re-extending the `SuccessErrorNotification` and `LiveProps` types removed + - `useEditableTable`'s `successNotification` and `errorNotification` props now work according to the mutation result instead of the query result + +## 5.3.13 + +### Patch Changes + +- [#4035](https://github.com/refinedev/refine/pull/4035) [`e0c75450f97`](https://github.com/refinedev/refine/commit/e0c75450f970878fea0ace7db63548c7ba1a1688) Thanks [@salihozdemir](https://github.com/salihozdemir)! - - Re-extending the `SuccessErrorNotification` and `LiveProps` types removed + - `useEditableTable`'s `successNotification` and `errorNotification` props now work according to the mutation result instead of the query result + +## 5.3.12 + +### Patch Changes + +- [#4024](https://github.com/refinedev/refine/pull/4024) [`dc6d2311eb7`](https://github.com/refinedev/refine/commit/dc6d2311eb76a458f828fb15fe26fae1c75bc95a) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - - Added: `wrapperStyles` prop to `` component to allow for custom styles to be passed in. + + - Added: `textDecoration: none` to `` component. + +## 5.3.11 + +### Patch Changes + +- [#4024](https://github.com/refinedev/refine/pull/4024) [`dc6d2311eb7`](https://github.com/refinedev/refine/commit/dc6d2311eb76a458f828fb15fe26fae1c75bc95a) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - - Added: `wrapperStyles` prop to `` component to allow for custom styles to be passed in. + + - Added: `textDecoration: none` to `` component. + +## 5.3.10 + +### Patch Changes + +- [#3997](https://github.com/refinedev/refine/pull/3997) [`f027d8a53b8`](https://github.com/refinedev/refine/commit/f027d8a53b8475f63f3557733c81b9ef040ed0ec) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - - Fixed the unsaved changes dialog is popping up unexpectedly when the user clicks the logs out. + + - The ``'s `onClick` handler was changed to use the `window.confirm` API to manage the confirmation dialog. + +- [#3974](https://github.com/refinedev/refine/pull/3974) [`4dcc20d6a60`](https://github.com/refinedev/refine/commit/4dcc20d6a6097bb81a094e4bcb630504b2a055d2) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Deprecated the `WelcomePage` component. It'll be used from `@refinedev/core` instead. + +## 5.3.9 + +### Patch Changes + +- [#3997](https://github.com/refinedev/refine/pull/3997) [`f027d8a53b8`](https://github.com/refinedev/refine/commit/f027d8a53b8475f63f3557733c81b9ef040ed0ec) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - - Fixed the unsaved changes dialog is popping up unexpectedly when the user clicks the logs out. + + - The ``'s `onClick` handler was changed to use the `window.confirm` API to manage the confirmation dialog. + +- [#3974](https://github.com/refinedev/refine/pull/3974) [`4dcc20d6a60`](https://github.com/refinedev/refine/commit/4dcc20d6a6097bb81a094e4bcb630504b2a055d2) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Deprecated the `WelcomePage` component. It'll be used from `@refinedev/core` instead. + +## 5.3.8 + +### Patch Changes + +- [#3975](https://github.com/refinedev/refine/pull/3975) [`b1e6e32f9a1`](https://github.com/refinedev/refine/commit/b1e6e32f9a19e8f26f95d41c942f90e96ed68372) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - - Fixed the unsaved changes dialog is popping up unexpectedly when the user clicks the logs out. + + - The ``'s `onClick` handler was changed to use the `window.confirm` API to manage the confirmation dialog. + + - `` colors updated to match the new theme colors. + +- Updated dependencies [[`2798f715361`](https://github.com/refinedev/refine/commit/2798f715361c5fd407d09429d94b05b602b50397)]: + - @refinedev/ui-types@1.5.0 + +## 5.3.7 + +### Patch Changes + +- [#3975](https://github.com/refinedev/refine/pull/3975) [`b1e6e32f9a1`](https://github.com/refinedev/refine/commit/b1e6e32f9a19e8f26f95d41c942f90e96ed68372) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - - Fixed the unsaved changes dialog is popping up unexpectedly when the user clicks the logs out. + + - The ``'s `onClick` handler was changed to use the `window.confirm` API to manage the confirmation dialog. + + - `` colors updated to match the new theme colors. + +- Updated dependencies [[`2798f715361`](https://github.com/refinedev/refine/commit/2798f715361c5fd407d09429d94b05b602b50397)]: + - @refinedev/ui-types@1.4.0 + +## 5.3.6 + +### Patch Changes + +- [#3967](https://github.com/refinedev/refine/pull/3967) [`67603562695`](https://github.com/refinedev/refine/commit/67603562695707e9d0bf16908d480fddf6fce7f1) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - Fixed: `` font size was overridden by parent because `` has the default font size. + +## 5.3.5 + +### Patch Changes + +- [#3967](https://github.com/refinedev/refine/pull/3967) [`67603562695`](https://github.com/refinedev/refine/commit/67603562695707e9d0bf16908d480fddf6fce7f1) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - Fixed: `` font size was overridden by parent because `` has the default font size. + +## 5.3.4 + +### Patch Changes + +- [#3949](https://github.com/refinedev/refine/pull/3949) [`836b06a2f67`](https://github.com/refinedev/refine/commit/836b06a2f67ec966247c422e42e11f39e6167288) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - Fixed: font size was "14px". Updated to "20px" on ``, "14px" on ``. + +- [#3956](https://github.com/refinedev/refine/pull/3956) [`c54714ed9ab`](https://github.com/refinedev/refine/commit/c54714ed9abd289edef9a6bef4e85b234a6b6e55) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Fixed an issue where the `` component would throw an error if the `value` prop was set to `undefined`. + +## 5.3.3 + +### Patch Changes + +- [#3949](https://github.com/refinedev/refine/pull/3949) [`836b06a2f67`](https://github.com/refinedev/refine/commit/836b06a2f67ec966247c422e42e11f39e6167288) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - Fixed: font size was "14px". Updated to "20px" on ``, "14px" on ``. + +- [#3956](https://github.com/refinedev/refine/pull/3956) [`c54714ed9ab`](https://github.com/refinedev/refine/commit/c54714ed9abd289edef9a6bef4e85b234a6b6e55) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Fixed an issue where the `` component would throw an error if the `value` prop was set to `undefined`. + +## 5.3.2 + +### Patch Changes + +- [#3931](https://github.com/refinedev/refine/pull/3931) [`d92c8e82868`](https://github.com/refinedev/refine/commit/d92c8e82868519ea7fd37678b74c1d6207a73bcd) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Added missing `autoSubmitClose`, `autoResetForm`, and `defaultVisible` props to `useDrawerForm` hook. + +- [#3911](https://github.com/refinedev/refine/pull/3911) [`5f9c70ebf2f`](https://github.com/refinedev/refine/commit/5f9c70ebf2faeea21eef97286ae7391bb77abfa9) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Fixed `autoSubmitClose` and `autoResetForm` props of `useModalForm` hook to work properly. + +- [#3931](https://github.com/refinedev/refine/pull/3931) [`d92c8e82868`](https://github.com/refinedev/refine/commit/d92c8e82868519ea7fd37678b74c1d6207a73bcd) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Added `autoSubmitClose`, `autoResetForm`, and `defaultVisible` props to `useDrawerForm` hook. + +- [#3948](https://github.com/refinedev/refine/pull/3948) [`b4950503334`](https://github.com/refinedev/refine/commit/b495050333464224f34851c9c57ffab457a3f120) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Fixed the unsaved changes dialog is popping up unexpectedly when the user clicks the delete button or logs out, when the form is dirty. + + - The `` already has a confirmation dialog, so the alert was removed. + - The ``'s `onClick` handler was changed to use the `window.confirm` API to manage the confirmation dialog. + +## 5.3.1 + +### Patch Changes + +- [#3931](https://github.com/refinedev/refine/pull/3931) [`d92c8e82868`](https://github.com/refinedev/refine/commit/d92c8e82868519ea7fd37678b74c1d6207a73bcd) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Added missing `autoSubmitClose`, `autoResetForm`, and `defaultVisible` props to `useDrawerForm` hook. + +- [#3911](https://github.com/refinedev/refine/pull/3911) [`5f9c70ebf2f`](https://github.com/refinedev/refine/commit/5f9c70ebf2faeea21eef97286ae7391bb77abfa9) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Fixed `autoSubmitClose` and `autoResetForm` props of `useModalForm` hook to work properly. + +- [#3931](https://github.com/refinedev/refine/pull/3931) [`d92c8e82868`](https://github.com/refinedev/refine/commit/d92c8e82868519ea7fd37678b74c1d6207a73bcd) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Added `autoSubmitClose`, `autoResetForm`, and `defaultVisible` props to `useDrawerForm` hook. + +- [#3948](https://github.com/refinedev/refine/pull/3948) [`b4950503334`](https://github.com/refinedev/refine/commit/b495050333464224f34851c9c57ffab457a3f120) Thanks [@salihozdemir](https://github.com/salihozdemir)! - Fixed the unsaved changes dialog is popping up unexpectedly when the user clicks the delete button or logs out, when the form is dirty. + + - The `` already has a confirmation dialog, so the alert was removed. + - The ``'s `onClick` handler was changed to use the `window.confirm` API to manage the confirmation dialog. + +## 5.3.0 + +### Minor Changes + +- [#3912](https://github.com/refinedev/refine/pull/3912) [`0ffe70308b2`](https://github.com/refinedev/refine/commit/0ffe70308b24d2d70695399fb0a1b7b76bcf2ccb) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - - `RefineThemes` added. It contains predefined colors for the antd components. + + ```tsx + import { RefineThemes } from "@refinedev/antd"; + import { Refine } from "@refinedev/core"; + import dataProvider from "@refinedev/simple-rest"; + + const App = () => { + // --- + + return ( + + + {/** your app here */} + + + ); + }; + ``` + + - default title with icon added to `AuthPage`. It uses `ThemedTitle` component from `@refinedev/antd`. You can remove it by setting `title` prop to `false`. + + ```tsx + + ``` + + - `title` prop added to `AuthPage`'s `renderContent` prop to use in the custom content. + + ```tsx + { + return ( +
+ {title} +

Extra Header

+ {content} +

Extra Footer

+
+ ); + }} + /> + ``` + + - ``, ``, ``, `` created to use theme colors. + + - `` in `` type changed to `primary`. + - `` type changed to `primary`. + + - `` component uses colors from the theme. + - `` added to `AuthPage` + +### Patch Changes + +- Updated dependencies [[`0ffe70308b2`](https://github.com/refinedev/refine/commit/0ffe70308b24d2d70695399fb0a1b7b76bcf2ccb)]: + - @refinedev/ui-types@1.3.0 + +## 5.2.0 + +### Minor Changes + +- [#3912](https://github.com/refinedev/refine/pull/3912) [`0ffe70308b2`](https://github.com/refinedev/refine/commit/0ffe70308b24d2d70695399fb0a1b7b76bcf2ccb) Thanks [@alicanerdurmaz](https://github.com/alicanerdurmaz)! - - `RefineThemes` added. It contains predefined colors for the antd components. + + ```tsx + import { RefineThemes } from "@refinedev/antd"; + import { Refine } from "@refinedev/core"; + import dataProvider from "@refinedev/simple-rest"; + + const App = () => { + // --- + + return ( + + + {/** your app here */} + + + ); + }; + ``` + + - default title with icon added to `AuthPage`. It uses `ThemedTitle` component from `@refinedev/antd`. You can remove it by setting `title` prop to `false`. + + ```tsx + + ``` + + - `title` prop added to `AuthPage`'s `renderContent` prop to use in the custom content. + + ```tsx + { + return ( +
+ {title} +

Extra Header

+ {content} +

Extra Footer

+
+ ); + }} + /> + ``` + + - ``, ``, ``, `` created to use theme colors. + + - `` in `` type changed to `primary`. + - `` type changed to `primary`. + + - `` component uses colors from the theme. + - `` added to `AuthPage` + +### Patch Changes + +- Updated dependencies [[`0ffe70308b2`](https://github.com/refinedev/refine/commit/0ffe70308b24d2d70695399fb0a1b7b76bcf2ccb)]: + - @refinedev/ui-types@1.2.0 + +## 5.1.2 + +### Patch Changes + +- [#3885](https://github.com/refinedev/refine/pull/3885) [`5495ab7028e`](https://github.com/refinedev/refine/commit/5495ab7028e9cbd576948f2b347e6d00ddc87728) Thanks [@omeraplak](https://github.com/omeraplak)! - fix: header text color + +## 5.1.1 + +### Patch Changes + +- [#3885](https://github.com/refinedev/refine/pull/3885) [`5495ab7028e`](https://github.com/refinedev/refine/commit/5495ab7028e9cbd576948f2b347e6d00ddc87728) Thanks [@omeraplak](https://github.com/omeraplak)! - fix: header text color + +## 5.1.0 + +### Minor Changes + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + Updated the components to match the changes in routing system of `@refinedev/core`. + + ## `meta` property in components + + This includes `meta` props in buttons and `Sider` component. `meta` property can be used to pass additional parameters to the navigation paths. + + For a `posts` resource definition like this: + + ```tsx + + ``` + + You can pass `authorId` to the `ShowButton` component like this: + + ```tsx + + ``` + + This will navigate to `/123/posts/1` path. + + ## `syncWithLocation` support in `useDrawerForm` and `useModalForm` hooks + + `useDrawerForm` and `useModalForm` hooks now support `syncWithLocation` prop. This prop can be used to sync the visibility state of them with the location via query params. + + You can pass a boolean or an object with `key` and `syncId` properties. + + - `key` is used to define the query param key. Default value is inferred from the resource and the action. For example `posts-create` for `posts` resource and `create` action. + + - `syncId` is used to include the `id` property in the query param key. Default value is `false`. This is useful for `edit` and `clone` actions. + + ## Removed props + + `ignoreAccessControlProvider` prop is removed from buttons. + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + Updated buttons with `resource` property. `resourceNameOrRouteName` is now deprecated but kept working until next major version. + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + All **Ant Design** components re-exported from `@refinedev/antd` have been removed. You should import them from `antd` package directly. + + If the package is not installed, you should install it with your package manager: + + ```bash + npm install antd + # or + pnpm add antd + # or + yarn add antd + ``` + + After that, you can import components from `antd` package directly like below: + + ```diff + -import { useTable, SaveButton, Button, Form, Input, Select } from "@refinedev/antd"; + + +import { useTable, SaveButton } from "@refinedev/antd"; + +import { Button, Form, Input, Select } from "antd"; + ``` + +
+ + `Icons` are also removed from `@refinedev/antd`. So, you should import icons from `@ant-design/icons` package directly. + + If the package is not installed, you should install it with your package manager: + + ```bash + npm install @ant-design/icons + # or + pnpm add @ant-design/icons + # or + yarn add @ant-design/icons + ``` + + After that, you can import icons from `@ant-design/icons` package directly like below: + + ```diff + -import { Icons } from "@refinedev/antd"; + -const { EditOutlined } = Icons; + + + import { EditOutlined } from "@ant-design/icons"; + ``` + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + Upgrade `@ant-design/icons` to `^5.0.1` for consistency. + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + + - `useCheckboxGroup`'s `sort` prop is now deprecated. Use `sorters` prop instead. + + ```diff + useCheckboxGroup({ + - sort, + + sorters, + }) + ``` + + - `useSelect`'s `sort` prop is now deprecated. Use `sorters` prop instead. + + ```diff + useSelect({ + - sort, + + sorters, + }) + ``` + + - `useRadioGroup`'s `sort` prop is now deprecated. Use `sorters` prop instead. + + ```diff + useRadioGroup({ + - sort, + + sorters, + }) + ``` + + - `useImport`'s `resourceName` prop is now deprecated. Use `resource` prop instead. + + ```diff + useImport({ + - resourceName, + + resource, + }) + ``` + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + + - `` isnow deprecated. + - Created a `` component to welcome users. + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + Added legacy auth provider and new auth provider support to all components and hooks. + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + + ## πŸͺ„ Migrating your project automatically with refine-codemod ✨ + + [`@refinedev/codemod`](https://github.com/refinedev/refine/tree/master/packages/codemod) package handles the breaking changes for your project automatically, without any manual steps. It migrates your project from `3.x.x` to `4.x.x`. + + Just `cd` into root folder of your project (where `package.json` is contained) and run this command: + + ```sh + npx @refinedev/codemod@latest refine3-to-refine4 + ``` + + And it's done. Now your project uses `refine@4.x.x`. + + ## πŸ“ Changelog + + Deprecated `useMenu` removed from `@refinedev/antd` package. Use `useMenu` from `@refinedev/core` package instead. + + ```diff + - import { useMenu } from "@refinedev/antd"; + + import { useMenu } from "@refinedev/core"; + ``` + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + **Moving to the `@refinedev` scope πŸŽ‰πŸŽ‰** + + Moved to the `@refinedev` scope and updated our packages to use the new scope. From now on, all packages will be published under the `@refinedev` scope with their new names. + + Now, we're also removing the `refine` prefix from all packages. So, the `@pankod/refine-core` package is now `@refinedev/core`, `@pankod/refine-antd` is now `@refinedev/antd`, and so on. + +- Thanks [@aliemir](https://github.com/aliemir), [@alicanerdurmaz](https://github.com/alicanerdurmaz), [@batuhanW](https://github.com/batuhanW), [@salihozdemir](https://github.com/salihozdemir), [@yildirayunlu](https://github.com/yildirayunlu), [@recepkutuk](https://github.com/recepkutuk)! + + ## `useTable` hook + + `useTable` return values and properties are updated. + + - `initialCurrent` and `initialPageSize` props are now deprecated. Use `pagination` prop instead. + - To ensure backward compatibility, `initialCurrent` and `initialPageSize` props will work as before. + + ```diff + useTable({ + - initialCurrent, + - initialPageSize, + + pagination: { + + current, + + pageSize, + + }, + }) + ``` + + - `hasPagination` prop is now deprecated. Use `pagination.mode` instead. + - To ensure backward compatibility, `hasPagination` prop will work as before. + + ```diff + useTable({ + - hasPagination, + + pagination: { + + mode: "off" | "server" | "client", + + }, + }) + ``` + + - `initialSorter` and `permanentSorter` props are now deprecated. Use `sorters.initial` and `sorters.permanent` instead. + - To ensure backward compatibility, `initialSorter` and `permanentSorter` props will work as before. + + ```diff + useTable({ + - initialSorter, + - permanentSorter, + + sorters: { + + initial, + + permanent, + + }, + }) + ``` + + - `initialFilter`, `permanentFilter`, and `defaultSetFilterBehavior` props are now deprecated. Use `filters.initial`, `filters.permanent`, and `filters.defaultBehavior` instead. + - To ensure backward compatibility, `initialFilter`, `permanentFilter`, and `defaultSetFilterBehavior` props will work as before. + + ```diff + useTable({ + - initialFilter, + - permanentFilter, + - defaultSetFilterBehavior, + + filters: { + + initial, + + permanent, + + defaultBehavior, + + }, + }) + ``` + + - `sorter` and `setSorter` return values are now deprecated. Use `sorters` and `setSorters` instead. + - To ensure backward compatibility, `sorter` and `setSorter` return values will work as before. + + ```diff + const { + - sorter, + + sorters, + - setSorter, + + setSorters, + } = useTable(); + ``` + + ## `useSimpleList` hook + + - Now `useSimpleList` hook will not accept all of `` component properties So, you can give their props to `` component directly. + + ```diff + import { useSimpleList } from "@refinedev/antd"; + import { List } from "antd"; + + const { listProps } = useSimpleList({ + resource: "orders", + pagination: { + pageSize: 6, + - simple: true, + }, + }); + + + ``` + + - `initialCurrent` and `initialPageSize` props are now deprecated. Use `pagination` prop instead. + - To ensure backward compatibility, `initialCurrent` and `initialPageSize` props will work as before. + + - ```diff + useSimpleList({ + - initialCurrent, + - initialPageSize, + + pagination: { + + current, + + pageSize, + + }, + }) + ``` + +### Patch Changes + +## 4.9.0 + +### Minor Changes + +- [#3822](https://github.com/refinedev/refine/pull/3822) [`0baa99ba787`](https://github.com/refinedev/refine/commit/0baa99ba7874394d9d28d0a7b29c082c604258fb) Thanks [@BatuhanW](https://github.com/BatuhanW)! - - refine v4 release announcement added to "postinstall". - refine v4 is released πŸŽ‰ The new version is 100% backward compatible. You can upgrade to v4 with a single command! See the migration guide here: https://refine.dev/docs/migration-guide/3x-to-4x + +### Patch Changes + +- Updated dependencies [[`0baa99ba787`](https://github.com/refinedev/refine/commit/0baa99ba7874394d9d28d0a7b29c082c604258fb)]: + - @pankod/refine-ui-types@0.16.0 + +## 4.8.0 + +### Minor Changes + +- [#3822](https://github.com/refinedev/refine/pull/3822) [`0baa99ba787`](https://github.com/refinedev/refine/commit/0baa99ba7874394d9d28d0a7b29c082c604258fb) Thanks [@BatuhanW](https://github.com/BatuhanW)! - - refine v4 release announcement added to "postinstall". - refine v4 is released πŸŽ‰ The new version is 100% backward compatible. You can upgrade to v4 with a single command! See the migration guide here: https://refine.dev/docs/migration-guide/3x-to-4x + +### Patch Changes + +- Updated dependencies [[`0baa99ba787`](https://github.com/refinedev/refine/commit/0baa99ba7874394d9d28d0a7b29c082c604258fb)]: + - @pankod/refine-ui-types@0.15.0 + +## 4.7.3 + +### Patch Changes + +- [#3606](https://github.com/refinedev/refine/pull/3606) [`00c9a5c471a`](https://github.com/refinedev/refine/commit/00c9a5c471a684169f800d65800d87cc8d6b6511) Thanks [@aliemir](https://github.com/aliemir)! - Fixed the issue with `disabled` state in `DeleteButton`'s still opening the popover. + +## 4.7.2 + +### Patch Changes + +- [#3606](https://github.com/refinedev/refine/pull/3606) [`00c9a5c471a`](https://github.com/refinedev/refine/commit/00c9a5c471a684169f800d65800d87cc8d6b6511) Thanks [@aliemir](https://github.com/aliemir)! - Fixed the issue with `disabled` state in `DeleteButton`'s still opening the popover. + +## 4.7.1 + +### Patch Changes + +- [#3399](https://github.com/refinedev/refine/pull/3399) [`22b44a857a8`](https://github.com/refinedev/refine/commit/22b44a857a8ede3473965ab6baff70fc8ae31332) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - Fix `useTable` hook error return type. + +## 4.7.0 + +### Minor Changes + +- [#3324](https://github.com/refinedev/refine/pull/3324) [`9bfb34749bc`](https://github.com/refinedev/refine/commit/9bfb34749bc8ddaaf80ccffbd0ad6d0a4487309b) Thanks [@aliemir](https://github.com/aliemir)! - Added the ability to pass mutation options to `useMutation` hooks in mutation hooks: + - `useForm` + - `useStepsForm` + - `useModalForm` + - `useDrawerForm` + +## 4.6.0 + +### Minor Changes + +- [#3324](https://github.com/refinedev/refine/pull/3324) [`9bfb34749bc`](https://github.com/refinedev/refine/commit/9bfb34749bc8ddaaf80ccffbd0ad6d0a4487309b) Thanks [@aliemir](https://github.com/aliemir)! - Added the ability to pass mutation options to `useMutation` hooks in mutation hooks: + - `useForm` + - `useStepsForm` + - `useModalForm` + - `useDrawerForm` + +## 4.5.0 + +### Minor Changes + +- [#3294](https://github.com/refinedev/refine/pull/3294) [`3c9c8c07d21`](https://github.com/refinedev/refine/commit/3c9c8c07d2183595402d70a3a2bc49093778e183) Thanks [@aliemir](https://github.com/aliemir)! - Remove `getContainer: false` from `useModalForm` and `useDrawerForm` and let it fallback to the default value. Users wanting to override the default value can still do so by passing `getContainer` prop to the `Modal` and `Drawer` components. + +## 4.4.0 + +### Minor Changes + +- [#3294](https://github.com/refinedev/refine/pull/3294) [`3c9c8c07d21`](https://github.com/refinedev/refine/commit/3c9c8c07d2183595402d70a3a2bc49093778e183) Thanks [@aliemir](https://github.com/aliemir)! - Remove `getContainer: false` from `useModalForm` and `useDrawerForm` and let it fallback to the default value. Users wanting to override the default value can still do so by passing `getContainer` prop to the `Modal` and `Drawer` components. + +## 4.3.0 + +### Minor Changes + +- [#3285](https://github.com/refinedev/refine/pull/3285) [`cc2c1f042bf`](https://github.com/refinedev/refine/commit/cc2c1f042bf43ae20c58745cccc815c337e17ae7) Thanks [@omeraplak](https://github.com/omeraplak)! - Added exports for new [``](https://ant.design/components/app), [``](https://ant.design/components/qrcode) and [``](https://ant.design/components/watermark) components. + +## 4.2.0 + +### Minor Changes + +- [#3285](https://github.com/refinedev/refine/pull/3285) [`cc2c1f042bf`](https://github.com/refinedev/refine/commit/cc2c1f042bf43ae20c58745cccc815c337e17ae7) Thanks [@omeraplak](https://github.com/omeraplak)! - Added exports for new [``](https://ant.design/components/app), [``](https://ant.design/components/qrcode) and [``](https://ant.design/components/watermark) components. + +## 4.1.5 + +### Patch Changes + +- [#3273](https://github.com/refinedev/refine/pull/3273) [`a30ba43cce2`](https://github.com/refinedev/refine/commit/a30ba43cce27279deaab60c000dac0537552f7c7) Thanks [@yildirayunlu](https://github.com/yildirayunlu)! - Set the `theme="dark"` of the `Menu` component in `Sider` by default. + +- [`a8d3f648a28`](https://github.com/refinedev/refine/commit/a8d3f648a282329cac04c1dd4b736864d6fbf756) Thanks [@omeraplak](https://github.com/omeraplak)! - Fixed onClick event type of the ` + + ); +}; diff --git a/packages/antd/src/components/buttons/create/index.spec.tsx b/packages/antd/src/components/buttons/create/index.spec.tsx new file mode 100644 index 0000000..ffed856 --- /dev/null +++ b/packages/antd/src/components/buttons/create/index.spec.tsx @@ -0,0 +1,7 @@ +import { buttonCreateTests } from "@refinedev/ui-tests"; + +import { CreateButton } from "./"; + +describe("Create Button", () => { + buttonCreateTests.bind(this)(CreateButton); +}); diff --git a/packages/antd/src/components/buttons/create/index.tsx b/packages/antd/src/components/buttons/create/index.tsx new file mode 100644 index 0000000..9436875 --- /dev/null +++ b/packages/antd/src/components/buttons/create/index.tsx @@ -0,0 +1,117 @@ +import React, { useContext } from "react"; +import { Button } from "antd"; +import { PlusSquareOutlined } from "@ant-design/icons"; +import { + useNavigation, + useTranslate, + useCan, + useResource, + useRouterContext, + useRouterType, + useLink, + AccessControlContext, +} from "@refinedev/core"; +import { + RefineButtonClassNames, + RefineButtonTestIds, +} from "@refinedev/ui-types"; + +import { CreateButtonProps } from "../types"; + +/** + * uses Ant Design's {@link https://ant.design/components/button/ ` + + ); +}; diff --git a/packages/antd/src/components/buttons/delete/index.spec.tsx b/packages/antd/src/components/buttons/delete/index.spec.tsx new file mode 100644 index 0000000..c64dc0b --- /dev/null +++ b/packages/antd/src/components/buttons/delete/index.spec.tsx @@ -0,0 +1,6 @@ +import { buttonDeleteTests } from "@refinedev/ui-tests"; +import { DeleteButton } from "./"; + +describe("Delete Button", () => { + buttonDeleteTests.bind(this)(DeleteButton); +}); diff --git a/packages/antd/src/components/buttons/delete/index.tsx b/packages/antd/src/components/buttons/delete/index.tsx new file mode 100644 index 0000000..d5f03da --- /dev/null +++ b/packages/antd/src/components/buttons/delete/index.tsx @@ -0,0 +1,150 @@ +import React, { useContext } from "react"; +import { Button, Popconfirm } from "antd"; +import { DeleteOutlined } from "@ant-design/icons"; +import { + useDelete, + useTranslate, + useMutationMode, + useCan, + useResource, + pickNotDeprecated, + useWarnAboutChange, + AccessControlContext, +} from "@refinedev/core"; +import { + RefineButtonClassNames, + RefineButtonTestIds, +} from "@refinedev/ui-types"; + +import { DeleteButtonProps } from "../types"; + +/** + * `` uses Ant Design's {@link https://ant.design/components/button/ ` + + ); +}; diff --git a/packages/antd/src/components/buttons/edit/index.spec.tsx b/packages/antd/src/components/buttons/edit/index.spec.tsx new file mode 100644 index 0000000..518a436 --- /dev/null +++ b/packages/antd/src/components/buttons/edit/index.spec.tsx @@ -0,0 +1,6 @@ +import { buttonEditTests } from "@refinedev/ui-tests"; +import { EditButton } from "./"; + +describe("Edit Button", () => { + buttonEditTests.bind(this)(EditButton); +}); diff --git a/packages/antd/src/components/buttons/edit/index.tsx b/packages/antd/src/components/buttons/edit/index.tsx new file mode 100644 index 0000000..72b9a2c --- /dev/null +++ b/packages/antd/src/components/buttons/edit/index.tsx @@ -0,0 +1,118 @@ +import React, { useContext } from "react"; +import { Button } from "antd"; +import { EditOutlined } from "@ant-design/icons"; +import { + useCan, + useNavigation, + useTranslate, + useResource, + useRouterContext, + useRouterType, + useLink, + AccessControlContext, +} from "@refinedev/core"; +import { + RefineButtonClassNames, + RefineButtonTestIds, +} from "@refinedev/ui-types"; + +import { EditButtonProps } from "../types"; + +/** + * `` uses Ant Design's {@link https://ant.design/components/button/ ` + + ); +}; diff --git a/packages/antd/src/components/buttons/export/index.spec.tsx b/packages/antd/src/components/buttons/export/index.spec.tsx new file mode 100644 index 0000000..4f70847 --- /dev/null +++ b/packages/antd/src/components/buttons/export/index.spec.tsx @@ -0,0 +1,6 @@ +import { buttonExportTests } from "@refinedev/ui-tests"; +import { ExportButton } from "./index"; + +describe("", () => { + buttonExportTests.bind(this)(ExportButton); +}); diff --git a/packages/antd/src/components/buttons/export/index.tsx b/packages/antd/src/components/buttons/export/index.tsx new file mode 100644 index 0000000..aa33627 --- /dev/null +++ b/packages/antd/src/components/buttons/export/index.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import { Button } from "antd"; +import { ExportOutlined } from "@ant-design/icons"; +import { useTranslate } from "@refinedev/core"; +import { + RefineButtonClassNames, + RefineButtonTestIds, +} from "@refinedev/ui-types"; + +import { ExportButtonProps } from "../types"; + +/** + * `` is an Ant Design {@link https://ant.design/components/button/ ` + ); +}; diff --git a/packages/antd/src/components/buttons/import/index.spec.tsx b/packages/antd/src/components/buttons/import/index.spec.tsx new file mode 100644 index 0000000..111ed4f --- /dev/null +++ b/packages/antd/src/components/buttons/import/index.spec.tsx @@ -0,0 +1,7 @@ +import { buttonImportTests } from "@refinedev/ui-tests"; + +import { ImportButton } from "./index"; + +describe(" usage with useImport", () => { + buttonImportTests.bind(this)(ImportButton); +}); diff --git a/packages/antd/src/components/buttons/import/index.tsx b/packages/antd/src/components/buttons/import/index.tsx new file mode 100644 index 0000000..29cf4ec --- /dev/null +++ b/packages/antd/src/components/buttons/import/index.tsx @@ -0,0 +1,40 @@ +import React from "react"; +import { Button, Upload } from "antd"; +import { ImportOutlined } from "@ant-design/icons"; +import { useTranslate } from "@refinedev/core"; +import { + RefineButtonClassNames, + RefineButtonTestIds, +} from "@refinedev/ui-types"; + +import { ImportButtonProps } from "../types"; + +/** + * `` is compatible with the {@link https://refine.dev/docs/api-reference/antd/hooks/import/useImport `useImport`} hook and is meant to be used as it's upload button. + * It uses Ant Design's {@link https://ant.design/components/button/ ` + + ); +}; diff --git a/packages/antd/src/components/buttons/index.ts b/packages/antd/src/components/buttons/index.ts new file mode 100644 index 0000000..854d4d7 --- /dev/null +++ b/packages/antd/src/components/buttons/index.ts @@ -0,0 +1,11 @@ +export { CreateButton } from "./create"; +export { EditButton } from "./edit"; +export { DeleteButton } from "./delete"; +export { RefreshButton } from "./refresh"; +export { ShowButton } from "./show"; +export { ListButton } from "./list"; +export { ExportButton } from "./export"; +export { SaveButton } from "./save"; +export { CloneButton } from "./clone"; +export { ImportButton } from "./import"; +export * from "./types"; diff --git a/packages/antd/src/components/buttons/list/index.spec.tsx b/packages/antd/src/components/buttons/list/index.spec.tsx new file mode 100644 index 0000000..a555a06 --- /dev/null +++ b/packages/antd/src/components/buttons/list/index.spec.tsx @@ -0,0 +1,6 @@ +import { buttonListTests } from "@refinedev/ui-tests"; +import { ListButton } from "./"; + +describe("List Button", () => { + buttonListTests.bind(this)(ListButton); +}); diff --git a/packages/antd/src/components/buttons/list/index.tsx b/packages/antd/src/components/buttons/list/index.tsx new file mode 100644 index 0000000..d270274 --- /dev/null +++ b/packages/antd/src/components/buttons/list/index.tsx @@ -0,0 +1,136 @@ +import React, { useContext } from "react"; +import { Button } from "antd"; +import { BarsOutlined } from "@ant-design/icons"; +import { + useCan, + useNavigation, + useTranslate, + useUserFriendlyName, + useResource, + useRouterContext, + useRouterType, + useLink, + pickNotDeprecated, + AccessControlContext, +} from "@refinedev/core"; +import { + RefineButtonClassNames, + RefineButtonTestIds, +} from "@refinedev/ui-types"; + +import { ListButtonProps } from "../types"; + +/** + * `` is using Ant Design's {@link https://ant.design/components/button/ ` + + ); +}; diff --git a/packages/antd/src/components/buttons/refresh/index.spec.tsx b/packages/antd/src/components/buttons/refresh/index.spec.tsx new file mode 100644 index 0000000..49c9cbc --- /dev/null +++ b/packages/antd/src/components/buttons/refresh/index.spec.tsx @@ -0,0 +1,6 @@ +import { buttonRefreshTests } from "@refinedev/ui-tests"; +import { RefreshButton } from "./"; + +describe("Refresh Button", () => { + buttonRefreshTests.bind(this)(RefreshButton); +}); diff --git a/packages/antd/src/components/buttons/refresh/index.tsx b/packages/antd/src/components/buttons/refresh/index.tsx new file mode 100644 index 0000000..3d2d5b9 --- /dev/null +++ b/packages/antd/src/components/buttons/refresh/index.tsx @@ -0,0 +1,76 @@ +import React from "react"; +import { Button } from "antd"; +import { RedoOutlined } from "@ant-design/icons"; +import { + useTranslate, + useResource, + useInvalidate, + queryKeys, + pickDataProvider, +} from "@refinedev/core"; +import { + RefineButtonClassNames, + RefineButtonTestIds, +} from "@refinedev/ui-types"; + +import { RefreshButtonProps } from "../types"; + +import { useQueryClient } from "@tanstack/react-query"; + +/** + * `` uses Ant Design's {@link https://ant.design/components/button/ ` + ); +}; diff --git a/packages/antd/src/components/buttons/save/index.spec.tsx b/packages/antd/src/components/buttons/save/index.spec.tsx new file mode 100644 index 0000000..10676c7 --- /dev/null +++ b/packages/antd/src/components/buttons/save/index.spec.tsx @@ -0,0 +1,6 @@ +import { buttonSaveTests } from "@refinedev/ui-tests"; +import { SaveButton } from "./"; + +describe("Save Button", () => { + buttonSaveTests.bind(this)(SaveButton); +}); diff --git a/packages/antd/src/components/buttons/save/index.tsx b/packages/antd/src/components/buttons/save/index.tsx new file mode 100644 index 0000000..1c93a21 --- /dev/null +++ b/packages/antd/src/components/buttons/save/index.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import { Button } from "antd"; +import { SaveOutlined } from "@ant-design/icons"; +import { useTranslate } from "@refinedev/core"; +import { + RefineButtonClassNames, + RefineButtonTestIds, +} from "@refinedev/ui-types"; + +import { SaveButtonProps } from "../types"; + +/** + * `` uses Ant Design's {@link https://ant.design/components/button/ ` + ); +}; diff --git a/packages/antd/src/components/buttons/show/index.spec.tsx b/packages/antd/src/components/buttons/show/index.spec.tsx new file mode 100644 index 0000000..dab3b90 --- /dev/null +++ b/packages/antd/src/components/buttons/show/index.spec.tsx @@ -0,0 +1,6 @@ +import { buttonShowTests } from "@refinedev/ui-tests"; +import { ShowButton } from "./"; + +describe("Show Button", () => { + buttonShowTests.bind(this)(ShowButton); +}); diff --git a/packages/antd/src/components/buttons/show/index.tsx b/packages/antd/src/components/buttons/show/index.tsx new file mode 100644 index 0000000..1cbdc31 --- /dev/null +++ b/packages/antd/src/components/buttons/show/index.tsx @@ -0,0 +1,117 @@ +import React, { useContext } from "react"; +import { Button } from "antd"; +import { EyeOutlined } from "@ant-design/icons"; +import { + useCan, + useNavigation, + useTranslate, + useResource, + useRouterContext, + useRouterType, + useLink, + AccessControlContext, +} from "@refinedev/core"; +import { + RefineButtonClassNames, + RefineButtonTestIds, +} from "@refinedev/ui-types"; + +import { ShowButtonProps } from "../types"; + +/** + * `` uses Ant Design's {@link https://ant.design/components/button/ ` + + ); +}; diff --git a/packages/antd/src/components/buttons/types.ts b/packages/antd/src/components/buttons/types.ts new file mode 100644 index 0000000..215f8c3 --- /dev/null +++ b/packages/antd/src/components/buttons/types.ts @@ -0,0 +1,44 @@ +import { ButtonProps, UploadProps } from "antd"; +import { + RefineCloneButtonProps, + RefineCreateButtonProps, + RefineDeleteButtonProps, + RefineEditButtonProps, + RefineExportButtonProps, + RefineImportButtonProps, + RefineListButtonProps, + RefineRefreshButtonProps, + RefineSaveButtonProps, + RefineShowButtonProps, +} from "@refinedev/ui-types"; + +export type ShowButtonProps = RefineShowButtonProps; + +export type CloneButtonProps = RefineCloneButtonProps; + +export type CreateButtonProps = RefineCreateButtonProps; + +export type DeleteButtonProps = RefineDeleteButtonProps; + +export type EditButtonProps = RefineEditButtonProps; + +export type ExportButtonProps = RefineExportButtonProps; + +export type ImportButtonProps = RefineImportButtonProps & { + /** + * Sets the button type + * @type [UploadProps](https://ant.design/components/upload/#API) + */ + uploadProps: UploadProps; + /** + * Sets props of the button + * @type [ButtonProps](https://ant.design/components/button/#API) + */ + buttonProps: ButtonProps; +}; + +export type ListButtonProps = RefineListButtonProps; + +export type RefreshButtonProps = RefineRefreshButtonProps; + +export type SaveButtonProps = RefineSaveButtonProps; diff --git a/packages/antd/src/components/crud/create/index.spec.tsx b/packages/antd/src/components/crud/create/index.spec.tsx new file mode 100644 index 0000000..c6e4def --- /dev/null +++ b/packages/antd/src/components/crud/create/index.spec.tsx @@ -0,0 +1,45 @@ +import React, { ReactNode } from "react"; +import { Route, Routes } from "react-router-dom"; +import { crudCreateTests } from "@refinedev/ui-tests"; +import { render, TestWrapper } from "@test"; +import { Create } from "./"; +import { SaveButton } from "@components/buttons"; +import { RefineButtonTestIds } from "@refinedev/ui-types"; + +const renderCreate = (create: ReactNode) => { + return render( + + + , + { + wrapper: TestWrapper({ + routerInitialEntries: ["/posts/create"], + }), + }, + ); +}; + +describe("Create", () => { + crudCreateTests.bind(this)(Create); + + it("should customize default buttons with default props", async () => { + const { queryByTestId } = renderCreate( + { + expect(saveButtonProps).toBeDefined(); + + return ( + <> + + + ); + }} + />, + ); + + expect(queryByTestId(RefineButtonTestIds.SaveButton)).toHaveClass( + "customize-test", + ); + }); +}); diff --git a/packages/antd/src/components/crud/create/index.tsx b/packages/antd/src/components/crud/create/index.tsx new file mode 100644 index 0000000..dcc8920 --- /dev/null +++ b/packages/antd/src/components/crud/create/index.tsx @@ -0,0 +1,144 @@ +import React from "react"; +import { Card, Space, Spin } from "antd"; +import { + useNavigation, + useTranslate, + useUserFriendlyName, + useRefineContext, + useRouterType, + useResource, + useBack, +} from "@refinedev/core"; + +import { + Breadcrumb, + SaveButton, + PageHeader, + SaveButtonProps, +} from "@components"; +import { CreateProps } from "../types"; + +/** + * `` provides us a layout to display the page. + * It does not contain any logic but adds extra functionalities like action buttons and giving titles to the page. + * + * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/create} for more details. + */ +export const Create: React.FC = ({ + title, + saveButtonProps: saveButtonPropsFromProps, + children, + resource: resourceFromProps, + isLoading = false, + breadcrumb: breadcrumbFromProps, + wrapperProps, + headerProps, + contentProps, + headerButtonProps, + headerButtons, + footerButtonProps, + footerButtons, + goBack: goBackFromProps, +}) => { + const translate = useTranslate(); + const { options: { breadcrumb: globalBreadcrumb } = {} } = + useRefineContext(); + + const routerType = useRouterType(); + const back = useBack(); + const { goBack } = useNavigation(); + const getUserFriendlyName = useUserFriendlyName(); + + const { resource, action, identifier } = useResource(resourceFromProps); + + const breadcrumb = + typeof breadcrumbFromProps === "undefined" + ? globalBreadcrumb + : breadcrumbFromProps; + + const saveButtonProps: SaveButtonProps = { + ...(isLoading ? { disabled: true } : {}), + ...saveButtonPropsFromProps, + htmlType: "submit", + }; + + const defaultFooterButtons = ( + <> + + + ); + + return ( +
+ {breadcrumb} ?? undefined + ) : ( + + ) + } + extra={ + + {headerButtons + ? typeof headerButtons === "function" + ? headerButtons({ + defaultButtons: null, + }) + : headerButtons + : null} + + } + {...(headerProps ?? {})} + > + + + {footerButtons + ? typeof footerButtons === "function" + ? footerButtons({ + defaultButtons: + defaultFooterButtons, + saveButtonProps: saveButtonProps, + }) + : footerButtons + : defaultFooterButtons} + , + ]} + {...(contentProps ?? {})} + > + {children} + + + +
+ ); +}; diff --git a/packages/antd/src/components/crud/edit/index.spec.tsx b/packages/antd/src/components/crud/edit/index.spec.tsx new file mode 100644 index 0000000..503c49e --- /dev/null +++ b/packages/antd/src/components/crud/edit/index.spec.tsx @@ -0,0 +1,521 @@ +import React, { ReactNode } from "react"; +import { Route, Routes } from "react-router-dom"; +import { AccessControlProvider } from "@refinedev/core"; +import { Form, Input } from "antd"; + +import { + act, + fireEvent, + ITestWrapperProps, + render, + TestWrapper, + waitFor, + MockJSONServer, +} from "@test"; +import { Edit } from "./"; +import { crudEditTests } from "@refinedev/ui-tests"; +import { RefineButtonTestIds } from "@refinedev/ui-types"; +import { + DeleteButton, + ListButton, + RefreshButton, + SaveButton, +} from "@components/buttons"; +import { useForm } from "@hooks/form"; + +const renderEdit = ( + edit: ReactNode, + accessControlProvider?: AccessControlProvider, + wrapperOptions?: ITestWrapperProps, +) => { + return render( + + + , + { + wrapper: TestWrapper({ + routerInitialEntries: ["/posts/edit/1"], + accessControlProvider, + ...wrapperOptions, + }), + }, + ); +}; + +describe("Edit", () => { + crudEditTests.bind(this)(Edit); + + it("should render optional mutationMode with mutationModeProp prop", async () => { + const container = renderEdit(); + + expect(container).toBeTruthy(); + }); + + describe("render delete button", () => { + it("should render delete button ", async () => { + const { getByText, queryByTestId } = render( + + { + expect(deleteButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + /> + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: true }], + routerInitialEntries: ["/posts/edit/1"], + }), + }, + ); + + expect( + queryByTestId(RefineButtonTestIds.DeleteButton), + ).not.toBeNull(); + + getByText("Edit Post"); + }); + + it("should not render delete button on resource canDelete false", async () => { + const { getByText, queryByTestId } = render( + + { + expect(deleteButtonProps).toBeUndefined(); + return <>{defaultButtons}; + }} + /> + } + > + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: false }], + routerInitialEntries: ["/posts/edit/1"], + }), + }, + ); + + expect(queryByTestId(RefineButtonTestIds.DeleteButton)).toBeNull(); + + getByText("Edit Post"); + }); + + it("should not render delete button on resource canDelete true & canDelete props false on component", async () => { + const { queryByTestId } = render( + + { + expect(deleteButtonProps).toBeUndefined(); + return <>{defaultButtons}; + }} + /> + } + > + , + + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: true }], + routerInitialEntries: ["/posts/edit/1"], + }), + }, + ); + + expect(queryByTestId(RefineButtonTestIds.DeleteButton)).toBeNull(); + }); + + it("should render delete button on resource canDelete false & canDelete props true on component", async () => { + const { queryByTestId } = render( + + { + expect(deleteButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + > + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: false }], + routerInitialEntries: ["/posts/edit/1"], + }), + }, + ); + + expect( + queryByTestId(RefineButtonTestIds.DeleteButton), + ).not.toBeNull(); + }); + + it("should render delete button on resource canDelete false & deleteButtonProps props not null on component", async () => { + const { queryByTestId } = render( + + { + expect(deleteButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + > + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: false }], + routerInitialEntries: ["/posts/edit/1"], + }), + }, + ); + + expect( + queryByTestId(RefineButtonTestIds.DeleteButton), + ).not.toBeNull(); + }); + }); + + describe("accessibility of buttons by accessControlProvider", () => { + it("should render disabled list button and not disabled delete button", async () => { + const { queryByTestId } = renderEdit( + { + expect(deleteButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + />, + { + can: ({ action }) => { + switch (action) { + case "list": + return Promise.resolve({ can: true }); + case "delete": + default: + return Promise.resolve({ can: false }); + } + }, + }, + ); + + await waitFor(() => + expect( + queryByTestId(RefineButtonTestIds.ListButton), + ).not.toBeDisabled(), + ); + await waitFor(() => + expect( + queryByTestId(RefineButtonTestIds.DeleteButton), + ).toBeDisabled(), + ); + }); + + it("should render disabled list button and delete button", async () => { + const { queryByTestId } = renderEdit( + { + expect(listButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + footerButtons={({ defaultButtons, deleteButtonProps }) => { + expect(deleteButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + />, + { + can: ({ action }) => { + switch (action) { + case "list": + case "delete": + return Promise.resolve({ can: false }); + default: + return Promise.resolve({ can: false }); + } + }, + }, + ); + + await waitFor(() => + expect( + queryByTestId(RefineButtonTestIds.ListButton), + ).toBeDisabled(), + ); + await waitFor(() => + expect( + queryByTestId(RefineButtonTestIds.DeleteButton), + ).toBeDisabled(), + ); + }); + + it("should customize default buttons with default props", async () => { + const { queryByTestId } = renderEdit( + { + return ( + <> + + + + ); + }} + footerButtons={({ deleteButtonProps, saveButtonProps }) => { + return ( + <> + + + + ); + }} + />, + { + can: ({ action }) => { + switch (action) { + case "list": + case "delete": + return Promise.resolve({ can: false }); + default: + return Promise.resolve({ can: false }); + } + }, + }, + ); + + await waitFor(() => + expect( + queryByTestId(RefineButtonTestIds.DeleteButton), + ).toBeDisabled(), + ); + await waitFor(() => + expect( + queryByTestId(RefineButtonTestIds.ListButton), + ).toBeDisabled(), + ); + expect(queryByTestId(RefineButtonTestIds.SaveButton)).toHaveClass( + "customize-test", + ); + expect( + queryByTestId(RefineButtonTestIds.RefreshButton), + ).toBeTruthy(); + }); + }); + + describe("list button", () => { + it("should render list button", async () => { + const { queryByTestId } = renderEdit(); + await waitFor(() => + expect( + queryByTestId(RefineButtonTestIds.ListButton), + ).not.toBeNull(), + ); + }); + + it("should not render list button when list resource is undefined", async () => { + const { queryByTestId } = renderEdit( + { + expect(listButtonProps).toBeUndefined(); + return <>{defaultButtons}; + }} + />, + undefined, + { + resources: [{ name: "posts", list: undefined }], + }, + ); + await waitFor(() => + expect( + queryByTestId(RefineButtonTestIds.ListButton), + ).toBeNull(), + ); + }); + + it("should not render list button when has recordItemId", async () => { + const { queryByTestId } = renderEdit( + { + expect(listButtonProps).toBeUndefined(); + return <>{defaultButtons}; + }} + />, + ); + await waitFor(() => + expect( + queryByTestId(RefineButtonTestIds.ListButton), + ).toBeNull(), + ); + }); + }); + + describe("auto save", () => { + const EditPageWithAutoSave = () => { + const { formProps, formLoading, autoSaveProps } = useForm({ + action: "edit", + autoSave: { + enabled: true, + }, + }); + + return ( + + {formLoading &&
loading...
} +
+ + + +
+
+ ); + }; + + it("check idle,loading,success statuses", async () => { + jest.useFakeTimers(); + + const { getByText, getByTestId } = render( + + } + > + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: false }], + routerInitialEntries: ["/posts/edit/1"], + dataProvider: { + ...MockJSONServer, + update: () => { + return new Promise((res) => { + setTimeout( + () => + res({ + data: { + id: "1", + title: "ok", + } as any, + }), + 1000, + ); + }); + }, + }, + }), + }, + ); + + getByText("Edit Post"); + getByText("waiting for changes"); + + // update title and wait + await act(async () => { + fireEvent.change(getByTestId("title"), { + target: { value: "test" }, + }); + + jest.advanceTimersByTime(1100); + }); + + // check saving message + expect(getByText("saving...")).toBeTruthy(); + + await act(async () => { + jest.advanceTimersByTime(1000); + }); + + // check saved message + expect(getByText("saved")).toBeTruthy(); + }); + + it("check error status", async () => { + jest.useFakeTimers(); + + const { getByText, getByTestId } = render( + + } + > + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: false }], + routerInitialEntries: ["/posts/edit/1"], + dataProvider: { + ...MockJSONServer, + update: () => { + return new Promise((res, rej) => { + setTimeout(() => rej("error"), 1000); + }); + }, + }, + }), + }, + ); + + getByText("Edit Post"); + getByText("waiting for changes"); + + // update title and wait + await act(async () => { + fireEvent.change(getByTestId("title"), { + target: { value: "test" }, + }); + + jest.advanceTimersByTime(1100); + }); + + // check saving message + expect(getByText("saving...")).toBeTruthy(); + + await act(async () => { + jest.advanceTimersByTime(1000); + }); + + // check saved message + expect(getByText("auto save failure")).toBeTruthy(); + }); + }); +}); diff --git a/packages/antd/src/components/crud/edit/index.tsx b/packages/antd/src/components/crud/edit/index.tsx new file mode 100644 index 0000000..be26aa8 --- /dev/null +++ b/packages/antd/src/components/crud/edit/index.tsx @@ -0,0 +1,231 @@ +import React from "react"; + +import { Card, Space, Spin } from "antd"; +import { + useMutationMode, + useNavigation, + useTranslate, + useUserFriendlyName, + useRefineContext, + useRouterType, + useBack, + useResource, + useGo, + useToPath, +} from "@refinedev/core"; + +import { + DeleteButton, + RefreshButton, + ListButton, + SaveButton, + Breadcrumb, + PageHeader, + ListButtonProps, + RefreshButtonProps, + DeleteButtonProps, + SaveButtonProps, + AutoSaveIndicator, +} from "@components"; +import { EditProps } from "../types"; + +/** + * `` provides us a layout for displaying the page. + * It does not contain any logic but adds extra functionalities like a refresh button. + * + * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/edit} for more details. + */ +export const Edit: React.FC = ({ + title, + saveButtonProps: saveButtonPropsFromProps, + mutationMode: mutationModeProp, + recordItemId, + children, + deleteButtonProps: deleteButtonPropsFromProps, + canDelete, + resource: resourceFromProps, + isLoading = false, + dataProviderName, + breadcrumb: breadcrumbFromProps, + wrapperProps, + headerProps, + contentProps, + headerButtonProps, + headerButtons, + footerButtonProps, + footerButtons, + goBack: goBackFromProps, + autoSaveProps, +}) => { + const translate = useTranslate(); + const { options: { breadcrumb: globalBreadcrumb } = {} } = + useRefineContext(); + const { mutationMode: mutationModeContext } = useMutationMode(); + const mutationMode = mutationModeProp ?? mutationModeContext; + + const routerType = useRouterType(); + const back = useBack(); + const go = useGo(); + const { goBack, list: legacyGoList } = useNavigation(); + const getUserFriendlyName = useUserFriendlyName(); + + const { + resource, + action, + id: idFromParams, + identifier, + } = useResource(resourceFromProps); + + const goListPath = useToPath({ + resource, + action: "list", + }); + + const id = recordItemId ?? idFromParams; + + const breadcrumb = + typeof breadcrumbFromProps === "undefined" + ? globalBreadcrumb + : breadcrumbFromProps; + + const hasList = resource?.list && !recordItemId; + const isDeleteButtonVisible = + canDelete ?? + ((resource?.meta?.canDelete ?? resource?.canDelete) || + deleteButtonPropsFromProps); + + const listButtonProps: ListButtonProps | undefined = hasList + ? { + ...(isLoading ? { disabled: true } : {}), + resource: routerType === "legacy" ? resource?.route : identifier, + } + : undefined; + + const refreshButtonProps: RefreshButtonProps = { + ...(isLoading ? { disabled: true } : {}), + resource: routerType === "legacy" ? resource?.route : identifier, + recordItemId: id, + dataProviderName, + }; + + const deleteButtonProps: DeleteButtonProps | undefined = + isDeleteButtonVisible + ? { + ...(isLoading ? { disabled: true } : {}), + resource: + routerType === "legacy" ? resource?.route : identifier, + mutationMode, + onSuccess: () => { + if (routerType === "legacy") { + legacyGoList(resource?.route ?? resource?.name ?? ""); + } else { + go({ to: goListPath }); + } + }, + recordItemId: id, + dataProviderName, + ...deleteButtonPropsFromProps, + } + : undefined; + + const saveButtonProps: SaveButtonProps = { + ...(isLoading ? { disabled: true } : {}), + ...saveButtonPropsFromProps, + }; + + const defaultHeaderButtons = ( + <> + {autoSaveProps && } + {hasList && } + + + ); + + const defaultFooterButtons = ( + <> + {isDeleteButtonVisible && } + + + ); + + return ( +
+ + {headerButtons + ? typeof headerButtons === "function" + ? headerButtons({ + defaultButtons: defaultHeaderButtons, + listButtonProps, + refreshButtonProps, + }) + : headerButtons + : defaultHeaderButtons} + + } + breadcrumb={ + typeof breadcrumb !== "undefined" ? ( + <>{breadcrumb} ?? undefined + ) : ( + + ) + } + {...(headerProps ?? {})} + > + + + {footerButtons + ? typeof footerButtons === "function" + ? footerButtons({ + defaultButtons: + defaultFooterButtons, + deleteButtonProps, + saveButtonProps, + }) + : footerButtons + : defaultFooterButtons} + , + ]} + {...(contentProps ?? {})} + > + {children} + + + +
+ ); +}; diff --git a/packages/antd/src/components/crud/index.ts b/packages/antd/src/components/crud/index.ts new file mode 100644 index 0000000..2d302c1 --- /dev/null +++ b/packages/antd/src/components/crud/index.ts @@ -0,0 +1,6 @@ +export { List } from "./list"; +export { Create } from "./create"; +export { Edit } from "./edit"; +export { Show } from "./show"; + +export * from "./types"; diff --git a/packages/antd/src/components/crud/list/index.spec.tsx b/packages/antd/src/components/crud/list/index.spec.tsx new file mode 100644 index 0000000..be07dfe --- /dev/null +++ b/packages/antd/src/components/crud/list/index.spec.tsx @@ -0,0 +1,45 @@ +import React, { ReactNode } from "react"; +import { crudListTests } from "@refinedev/ui-tests"; +import { RefineButtonTestIds } from "@refinedev/ui-types"; +import { Route, Routes } from "react-router-dom"; +import { CreateButton } from "@components/buttons"; +import { render, TestWrapper } from "@test"; +import { List } from "./index"; + +const renderList = (list: ReactNode) => { + return render( + + + , + { + wrapper: TestWrapper({ + routerInitialEntries: ["/posts"], + }), + }, + ); +}; + +describe("", () => { + crudListTests.bind(this)(List); + + it("should customize default buttons with default props", async () => { + const { queryByTestId } = renderList( + { + expect(createButtonProps).toBeDefined(); + + return ( + <> + + + ); + }} + />, + ); + + expect(queryByTestId(RefineButtonTestIds.CreateButton)).toHaveClass( + "customize-test", + ); + }); +}); diff --git a/packages/antd/src/components/crud/list/index.tsx b/packages/antd/src/components/crud/list/index.tsx new file mode 100644 index 0000000..06f32df --- /dev/null +++ b/packages/antd/src/components/crud/list/index.tsx @@ -0,0 +1,115 @@ +import React from "react"; +import { Space } from "antd"; +import { + useTranslate, + useUserFriendlyName, + useRefineContext, + useRouterType, + useResource, +} from "@refinedev/core"; + +import { + Breadcrumb, + CreateButton, + CreateButtonProps, + PageHeader, +} from "@components"; +import { ListProps } from "../types"; + +/** + * `` provides us a layout for displaying the page. + * It does not contain any logic but adds extra functionalities like a refresh button. + * + * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/list} for more details. + */ +export const List: React.FC = ({ + canCreate, + title, + children, + createButtonProps: createButtonPropsFromProps, + resource: resourceFromProps, + wrapperProps, + contentProps, + headerProps, + breadcrumb: breadcrumbFromProps, + headerButtonProps, + headerButtons, +}) => { + const translate = useTranslate(); + const { options: { breadcrumb: globalBreadcrumb } = {} } = + useRefineContext(); + + const routerType = useRouterType(); + const getUserFriendlyName = useUserFriendlyName(); + + const { resource, identifier } = useResource(resourceFromProps); + + const isCreateButtonVisible = + canCreate ?? + ((resource?.canCreate ?? !!resource?.create) || + createButtonPropsFromProps); + + const breadcrumb = + typeof breadcrumbFromProps === "undefined" + ? globalBreadcrumb + : breadcrumbFromProps; + + const createButtonProps: CreateButtonProps | undefined = + isCreateButtonVisible + ? { + size: "middle", + resource: + routerType === "legacy" ? resource?.route : identifier, + ...createButtonPropsFromProps, + } + : undefined; + + const defaultExtra = isCreateButtonVisible ? ( + + ) : null; + + return ( +
+ + {typeof headerButtons === "function" + ? headerButtons({ + defaultButtons: defaultExtra, + createButtonProps, + }) + : headerButtons} + + ) : ( + defaultExtra + ) + } + breadcrumb={ + typeof breadcrumb !== "undefined" ? ( + <>{breadcrumb} ?? undefined + ) : ( + + ) + } + {...(headerProps ?? {})} + > +
{children}
+
+
+ ); +}; diff --git a/packages/antd/src/components/crud/show/index.spec.tsx b/packages/antd/src/components/crud/show/index.spec.tsx new file mode 100644 index 0000000..cd9b7e5 --- /dev/null +++ b/packages/antd/src/components/crud/show/index.spec.tsx @@ -0,0 +1,459 @@ +import React, { ReactNode } from "react"; +import { Route, Routes } from "react-router-dom"; +import { RefineButtonTestIds } from "@refinedev/ui-types"; +import { AccessControlProvider } from "@refinedev/core"; + +import { render, TestWrapper, waitFor } from "@test"; + +import { Show } from "./index"; +import { crudShowTests } from "@refinedev/ui-tests"; +import { + DeleteButton, + EditButton, + ListButton, + RefreshButton, +} from "@components/buttons"; + +const renderShow = ( + show: ReactNode, + accessControlProvider?: AccessControlProvider, +) => { + return render( + + + , + { + wrapper: TestWrapper({ + routerInitialEntries: ["/posts/show/1"], + accessControlProvider, + }), + }, + ); +}; +describe("Show", () => { + crudShowTests.bind(this)(Show as any); + + it("depending on the accessControlProvider it should get the buttons successfully", async () => { + const { getByText, getAllByText, queryByTestId } = renderShow( + { + expect(deleteButtonProps).toBeDefined(); + expect(editButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + />, + { + can: ({ action }) => { + switch (action) { + case "edit": + case "list": + return Promise.resolve({ can: true }); + case "delete": + default: + return Promise.resolve({ can: false }); + } + }, + }, + ); + + await waitFor(() => + expect(getByText("Edit").closest("button")).not.toBeDisabled(), + ); + await waitFor(() => + expect( + getAllByText("Posts")[1].closest("button"), + ).not.toBeDisabled(), + ); + + await waitFor(() => + expect( + queryByTestId(RefineButtonTestIds.DeleteButton), + ).toBeDisabled(), + ); + }); + + it("should render optional recordItemId with resource prop, not render list button", async () => { + const { getByText, queryByTestId } = renderShow( + { + expect(listButtonProps).not.toBeDefined(); + return <>{defaultButtons}; + }} + />, + ); + + getByText("Show Post"); + + expect(queryByTestId(RefineButtonTestIds.ListButton)).toBeNull(); + }); + + describe("render edit button", () => { + it("should render edit button", async () => { + const { getByText, queryByTestId } = render( + + { + expect(editButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + > + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", edit: () => null }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect( + queryByTestId(RefineButtonTestIds.EditButton), + ).not.toBeNull(); + + getByText("Show Post"); + }); + + it("should not render edit button on resource canEdit false", async () => { + const { getByText, queryByTestId } = render( + + { + expect(editButtonProps).not.toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + /> + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts" }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect(queryByTestId(RefineButtonTestIds.EditButton)).toBeNull(); + + getByText("Show Post"); + }); + + it("should not render edit button on resource canEdit true & canEdit props false on component", async () => { + const { queryByTestId } = render( + + { + expect(editButtonProps).not.toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + /> + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", edit: () => null }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect(queryByTestId(RefineButtonTestIds.EditButton)).toBeNull(); + }); + + it("should render edit button on resource canEdit false & canEdit props true on component", async () => { + const { queryByTestId } = render( + + { + expect(editButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + /> + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts" }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect( + queryByTestId(RefineButtonTestIds.EditButton), + ).not.toBeNull(); + }); + + it("should render edit button with recordItemId prop", async () => { + const { getByText, queryByTestId } = render( + + { + expect(editButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + /> + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", edit: () => null }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect( + queryByTestId(RefineButtonTestIds.EditButton), + ).not.toBeNull(); + + getByText("Show Post"); + }); + }); + + describe("render delete button", () => { + it("should render delete button", async () => { + const { queryByTestId } = render( + + { + expect(deleteButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + /> + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: true }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect( + queryByTestId(RefineButtonTestIds.DeleteButton), + ).not.toBeNull(); + }); + + it("should not render delete button on resource canDelete false", async () => { + const { queryByTestId } = render( + + { + expect(deleteButtonProps).not.toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + /> + , + + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: false }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect(queryByTestId(RefineButtonTestIds.DeleteButton)).toBeNull(); + }); + + it("should not render delete button on resource canDelete true & canDelete props false on component", async () => { + const { queryByTestId } = render( + + { + expect(deleteButtonProps).not.toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + /> + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: true }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect(queryByTestId(RefineButtonTestIds.DeleteButton)).toBeNull(); + }); + + it("should render delete button on resource canDelete false & canDelete props true on component", async () => { + const { queryByTestId } = render( + + { + expect(deleteButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + /> + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: false }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect( + queryByTestId(RefineButtonTestIds.DeleteButton), + ).not.toBeNull(); + }); + + it("should render delete button with recordItemId prop", async () => { + const { queryByTestId } = render( + + { + expect(deleteButtonProps).toBeDefined(); + return <>{defaultButtons}; + }} + /> + } + /> + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts", canDelete: true }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect( + queryByTestId(RefineButtonTestIds.DeleteButton), + ).not.toBeNull(); + }); + }); + + it("should customize default buttons with default props", async () => { + const { queryByTestId } = render( + + { + return ( + <> + + + + + + ); + }} + /> + } + /> + , + { + wrapper: TestWrapper({ + resources: [{ name: "posts" }], + routerInitialEntries: ["/posts/show/1"], + }), + }, + ); + + expect(queryByTestId(RefineButtonTestIds.DeleteButton)).not.toBeNull(); + expect(queryByTestId(RefineButtonTestIds.EditButton)).not.toBeNull(); + expect(queryByTestId(RefineButtonTestIds.ListButton)).not.toBeNull(); + expect(queryByTestId(RefineButtonTestIds.RefreshButton)).not.toBeNull(); + }); +}); diff --git a/packages/antd/src/components/crud/show/index.tsx b/packages/antd/src/components/crud/show/index.tsx new file mode 100644 index 0000000..bfb77fd --- /dev/null +++ b/packages/antd/src/components/crud/show/index.tsx @@ -0,0 +1,216 @@ +import React from "react"; +import { Card, Space, Spin } from "antd"; +import { + useNavigation, + useTranslate, + useUserFriendlyName, + useRefineContext, + useResource, + useToPath, + useRouterType, + useBack, + useGo, +} from "@refinedev/core"; + +import { + EditButton, + DeleteButton, + RefreshButton, + ListButton, + Breadcrumb, + PageHeader, + ListButtonProps, + EditButtonProps, + DeleteButtonProps, + RefreshButtonProps, +} from "@components"; +import { ShowProps } from "../types"; + +/** + * `` provides us a layout for displaying the page. + * It does not contain any logic but adds extra functionalities like a refresh button. + * + * @see {@link https://refine.dev/docs/ui-frameworks/antd/components/basic-views/show} for more details. + */ +export const Show: React.FC = ({ + title, + canEdit, + canDelete, + isLoading = false, + children, + resource: resourceFromProps, + recordItemId, + dataProviderName, + breadcrumb: breadcrumbFromProps, + contentProps, + headerProps, + wrapperProps, + headerButtons, + footerButtons, + footerButtonProps, + headerButtonProps, + goBack: goBackFromProps, +}) => { + const translate = useTranslate(); + const { options: { breadcrumb: globalBreadcrumb } = {} } = + useRefineContext(); + + const routerType = useRouterType(); + const back = useBack(); + const go = useGo(); + const { goBack, list: legacyGoList } = useNavigation(); + const getUserFriendlyName = useUserFriendlyName(); + + const { + resource, + action, + id: idFromParams, + identifier, + } = useResource(resourceFromProps); + + const goListPath = useToPath({ + resource, + action: "list", + }); + + const id = recordItemId ?? idFromParams; + + const breadcrumb = + typeof breadcrumbFromProps === "undefined" + ? globalBreadcrumb + : breadcrumbFromProps; + + const hasList = resource?.list && !recordItemId; + const isDeleteButtonVisible = + canDelete ?? resource?.meta?.canDelete ?? resource?.canDelete; + const isEditButtonVisible = + canEdit ?? resource?.canEdit ?? !!resource?.edit; + + const listButtonProps: ListButtonProps | undefined = hasList + ? { + resource: routerType === "legacy" ? resource?.route : identifier, + } + : undefined; + const editButtonProps: EditButtonProps | undefined = isEditButtonVisible + ? { + ...(isLoading ? { disabled: true } : {}), + type: "primary", + resource: routerType === "legacy" ? resource?.route : identifier, + recordItemId: id, + } + : undefined; + const deleteButtonProps: DeleteButtonProps | undefined = + isDeleteButtonVisible + ? { + ...(isLoading ? { disabled: true } : {}), + resource: + routerType === "legacy" ? resource?.route : identifier, + recordItemId: id, + onSuccess: () => { + if (routerType === "legacy") { + legacyGoList(resource?.route ?? resource?.name ?? ""); + } else { + go({ to: goListPath }); + } + }, + dataProviderName, + } + : undefined; + const refreshButtonProps: RefreshButtonProps = { + ...(isLoading ? { disabled: true } : {}), + resource: routerType === "legacy" ? resource?.route : identifier, + recordItemId: id, + dataProviderName, + }; + + const defaultHeaderButtons = ( + <> + {hasList && } + {isEditButtonVisible && } + {isDeleteButtonVisible && } + + + ); + + return ( +
+ + {headerButtons + ? typeof headerButtons === "function" + ? headerButtons({ + defaultButtons: defaultHeaderButtons, + deleteButtonProps, + editButtonProps, + listButtonProps, + refreshButtonProps, + }) + : headerButtons + : defaultHeaderButtons} + + } + breadcrumb={ + typeof breadcrumb !== "undefined" ? ( + <>{breadcrumb} ?? undefined + ) : ( + + ) + } + {...(headerProps ?? {})} + > + + + {typeof footerButtons === "function" + ? footerButtons({ + defaultButtons: null, + }) + : footerButtons} + , + ] + : undefined + } + {...(contentProps ?? {})} + > + {children} + + + +
+ ); +}; diff --git a/packages/antd/src/components/crud/types.ts b/packages/antd/src/components/crud/types.ts new file mode 100644 index 0000000..3dab961 --- /dev/null +++ b/packages/antd/src/components/crud/types.ts @@ -0,0 +1,74 @@ +import { CardProps, SpaceProps } from "antd"; +import { + CreateButtonProps, + DeleteButtonProps, + EditButtonProps, + ListButtonProps, + RefreshButtonProps, + SaveButtonProps, +} from "../buttons/types"; +import { + RefineCrudCreateProps, + RefineCrudEditProps, + RefineCrudListProps, + RefineCrudShowProps, +} from "@refinedev/ui-types"; +import { PageHeaderProps } from "../pageHeader"; + +export type CreateProps = RefineCrudCreateProps< + SaveButtonProps, + SpaceProps, + SpaceProps, + React.DetailedHTMLProps< + React.HTMLAttributes, + HTMLDivElement + >, + PageHeaderProps, + CardProps +>; + +export type EditProps = RefineCrudEditProps< + SaveButtonProps, + DeleteButtonProps, + SpaceProps, + SpaceProps, + React.DetailedHTMLProps< + React.HTMLAttributes, + HTMLDivElement + >, + PageHeaderProps, + CardProps, + {}, + RefreshButtonProps, + ListButtonProps +>; + +export type ListProps = RefineCrudListProps< + CreateButtonProps, + SpaceProps, + React.DetailedHTMLProps< + React.HTMLAttributes, + HTMLDivElement + >, + PageHeaderProps, + React.DetailedHTMLProps< + React.HTMLAttributes, + HTMLDivElement + > +>; + +export type ShowProps = RefineCrudShowProps< + SpaceProps, + SpaceProps, + React.DetailedHTMLProps< + React.HTMLAttributes, + HTMLDivElement + >, + PageHeaderProps, + CardProps, + {}, + EditButtonProps, + DeleteButtonProps, + RefreshButtonProps, + ListButtonProps +>; diff --git a/packages/antd/src/components/fields/boolean/index.spec.tsx b/packages/antd/src/components/fields/boolean/index.spec.tsx new file mode 100644 index 0000000..c07fab4 --- /dev/null +++ b/packages/antd/src/components/fields/boolean/index.spec.tsx @@ -0,0 +1,54 @@ +import React from "react"; +import { fieldBooleanTests } from "@refinedev/ui-tests"; + +import { render, fireEvent } from "@test"; +import { BooleanField } from "./"; + +describe("BooleanField", () => { + fieldBooleanTests.bind(this)(BooleanField); + describe("BooleanField with default props values", () => { + const initialValues = [true, false, "true", "false", "", undefined]; + + const results = ["true", "false", "true", "true", "false", "false"]; + + const iconClass = [ + "anticon-check", + "anticon-close", + "anticon-check", + "anticon-check", + "anticon-close", + "anticon-close", + ]; + + initialValues.forEach((element, index) => { + const testName = + index === 2 || index === 3 || index === 4 + ? `"${initialValues[index]}"` + : initialValues[index]; + + it(`renders boolean field value(${testName}) with correct tooltip text and icon`, async () => { + const baseDom = render( +
+ +
, + ); + + fireEvent.mouseOver( + baseDom.getByTestId("default-field").children[0], + ); + + expect( + await baseDom.findByText(results[index]), + ).toBeInTheDocument(); + + expect( + baseDom + .getByTestId("default-field") + .children[0].children[0].classList.contains( + iconClass[index], + ), + ).toBe(true); + }); + }); + }); +}); diff --git a/packages/antd/src/components/fields/boolean/index.tsx b/packages/antd/src/components/fields/boolean/index.tsx new file mode 100644 index 0000000..9258238 --- /dev/null +++ b/packages/antd/src/components/fields/boolean/index.tsx @@ -0,0 +1,26 @@ +import React from "react"; +import { Tooltip } from "antd"; + +import { CheckOutlined, CloseOutlined } from "@ant-design/icons"; + +import { BooleanFieldProps } from "../types"; + +/** + * This field is used to display boolean values. It uses the {@link https://ant.design/components/tooltip/#header ``} values from Ant Design. + * + * @see {@link https://refine.dev/docs/api-reference/antd/components/fields/boolean} for more details. + */ +export const BooleanField: React.FC = ({ + value, + valueLabelTrue = "true", + valueLabelFalse = "false", + trueIcon = , + falseIcon = , + ...rest +}) => { + return ( + + {value ? {trueIcon} : {falseIcon}} + + ); +}; diff --git a/packages/antd/src/components/fields/date/index.spec.tsx b/packages/antd/src/components/fields/date/index.spec.tsx new file mode 100644 index 0000000..5f837c5 --- /dev/null +++ b/packages/antd/src/components/fields/date/index.spec.tsx @@ -0,0 +1,7 @@ +import { fieldDateTests } from "@refinedev/ui-tests"; + +import { DateField } from "./"; + +describe("DateField", () => { + fieldDateTests.bind(this)(DateField); +}); diff --git a/packages/antd/src/components/fields/date/index.tsx b/packages/antd/src/components/fields/date/index.tsx new file mode 100644 index 0000000..183453d --- /dev/null +++ b/packages/antd/src/components/fields/date/index.tsx @@ -0,0 +1,33 @@ +import React from "react"; +import dayjs from "dayjs"; +import { Typography } from "antd"; + +import LocalizedFormat from "dayjs/plugin/localizedFormat"; + +import { DateFieldProps } from "../types"; + +/** + * This field is used to display dates. It uses {@link https://day.js.org/docs/en/display/format `Day.js`} to display date format. + * + * @see {@link https://refine.dev/docs/api-reference/antd/components/fields/date} for more details. + */ +export const DateField: React.FC = ({ + value, + locales, + format: dateFormat = "L", + ...rest +}) => { + dayjs.extend(LocalizedFormat); + + const defaultLocale = dayjs.locale(); + + const { Text } = Typography; + + return ( + + {dayjs(value) + .locale(locales || defaultLocale) + .format(dateFormat)} + + ); +}; diff --git a/packages/antd/src/components/fields/email/index.spec.tsx b/packages/antd/src/components/fields/email/index.spec.tsx new file mode 100644 index 0000000..874d0d4 --- /dev/null +++ b/packages/antd/src/components/fields/email/index.spec.tsx @@ -0,0 +1,7 @@ +import { fieldEmailTests } from "@refinedev/ui-tests"; + +import { EmailField } from "./"; + +describe("EmailField", () => { + fieldEmailTests.bind(this)(EmailField); +}); diff --git a/packages/antd/src/components/fields/email/index.tsx b/packages/antd/src/components/fields/email/index.tsx new file mode 100644 index 0000000..ca229d6 --- /dev/null +++ b/packages/antd/src/components/fields/email/index.tsx @@ -0,0 +1,20 @@ +import React from "react"; +import { Typography } from "antd"; + +const { Link } = Typography; + +import { EmailFieldProps } from "../types"; + +/** + * This field is used to display email values. It uses the {@link https://ant.design/components/typography/#FAQ ``} component + * of {@link https://ant.design/components/typography ``} from Ant Design. + * + * @see {@link https://refine.dev/docs/api-reference/antd/components/fields/email} for more details. + */ +export const EmailField: React.FC = ({ value, ...rest }) => { + return ( + + {value} + + ); +}; diff --git a/packages/antd/src/components/fields/file/index.spec.tsx b/packages/antd/src/components/fields/file/index.spec.tsx new file mode 100644 index 0000000..ed6a0d1 --- /dev/null +++ b/packages/antd/src/components/fields/file/index.spec.tsx @@ -0,0 +1,7 @@ +import { fieldFileTests } from "@refinedev/ui-tests"; + +import { FileField } from "./"; + +describe("FileField", () => { + fieldFileTests.bind(this)(FileField); +}); diff --git a/packages/antd/src/components/fields/file/index.tsx b/packages/antd/src/components/fields/file/index.tsx new file mode 100644 index 0000000..6c0cb81 --- /dev/null +++ b/packages/antd/src/components/fields/file/index.tsx @@ -0,0 +1,21 @@ +import React from "react"; + +import { UrlField } from "@components"; +import { FileFieldProps } from "../types"; + +/** + * This field is used to display files and uses {@link https://ant.design/components/typography ``} from Ant Design. + * + * @see {@link https://refine.dev/docs/api-reference/antd/components/fields/file} for more details. + */ +export const FileField: React.FC = ({ + title, + src, + ...rest +}) => { + return ( + + {title ?? src} + + ); +}; diff --git a/packages/antd/src/components/fields/image/index.spec.tsx b/packages/antd/src/components/fields/image/index.spec.tsx new file mode 100644 index 0000000..3b7c608 --- /dev/null +++ b/packages/antd/src/components/fields/image/index.spec.tsx @@ -0,0 +1,19 @@ +import { fieldImageTests } from "@refinedev/ui-tests"; + +import { ImageField } from "./"; + +describe("ImageField", () => { + fieldImageTests.bind(this)(ImageField); + + // it("renders image with correct title", () => { + // const imageUrl = "http://placeimg.com/640/480/animals"; + // const { getByTestId } = render( + // , + // ); + + // expect(getByTestId("test-image").children[0]).toHaveProperty( + // "src", + // imageUrl, + // ); + // }); +}); diff --git a/packages/antd/src/components/fields/image/index.tsx b/packages/antd/src/components/fields/image/index.tsx new file mode 100644 index 0000000..91f6e51 --- /dev/null +++ b/packages/antd/src/components/fields/image/index.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import { Image } from "antd"; + +import { ImageFieldProps } from "../types"; + +/** + * This field is used to display images and uses {@link https://ant.design/components/image/#header ``} from Ant Design. + * + * @see {@link https://refine.dev/docs/api-reference/antd/components/fields/image} for more details. + */ +export const ImageField: React.FC = ({ + value, + imageTitle, + ...rest +}) => { + return ; +}; diff --git a/packages/antd/src/components/fields/index.ts b/packages/antd/src/components/fields/index.ts new file mode 100644 index 0000000..afbf67f --- /dev/null +++ b/packages/antd/src/components/fields/index.ts @@ -0,0 +1,11 @@ +export { TextField } from "./text"; +export { TagField } from "./tag"; +export { EmailField } from "./email"; +export { ImageField } from "./image"; +export { BooleanField } from "./boolean"; +export { DateField } from "./date"; +export { FileField } from "./file"; +export { UrlField } from "./url"; +export { NumberField } from "./number"; +export { MarkdownField } from "./markdown"; +export * from "./types"; diff --git a/packages/antd/src/components/fields/markdown/index.spec.tsx b/packages/antd/src/components/fields/markdown/index.spec.tsx new file mode 100644 index 0000000..f5b7b5b --- /dev/null +++ b/packages/antd/src/components/fields/markdown/index.spec.tsx @@ -0,0 +1,7 @@ +import { fieldMarkdownTests } from "@refinedev/ui-tests"; + +import { MarkdownField } from "./"; + +describe("MarkdownField", () => { + fieldMarkdownTests.bind(this)(MarkdownField); +}); diff --git a/packages/antd/src/components/fields/markdown/index.tsx b/packages/antd/src/components/fields/markdown/index.tsx new file mode 100644 index 0000000..67d3ab4 --- /dev/null +++ b/packages/antd/src/components/fields/markdown/index.tsx @@ -0,0 +1,23 @@ +import React from "react"; +import ReactMarkdown from "react-markdown"; +import gfm from "remark-gfm"; + +import { RefineFieldMarkdownProps } from "../types"; + +/** + * This field lets you display markdown content. It supports {@link https://github.github.com/gfm/ GitHub Flavored Markdown}. + * + * @see {@link https://refine.dev/docs/api-reference/antd/components/fields/markdown} for more details. + */ +export const MarkdownField: React.FC = ({ + value = "", +}) => { + // There's an issue related with the type inconsistency of the `remark-gfm` and `remark-rehype` packages, we need to cast the `gfm` as any. (https://github.com/orgs/rehypejs/discussions/63) + return ( + + {value} + + ); +}; diff --git a/packages/antd/src/components/fields/number/index.spec.tsx b/packages/antd/src/components/fields/number/index.spec.tsx new file mode 100644 index 0000000..219a6a2 --- /dev/null +++ b/packages/antd/src/components/fields/number/index.spec.tsx @@ -0,0 +1,7 @@ +import { fieldNumberTests } from "@refinedev/ui-tests"; + +import { NumberField } from "./"; + +describe("NumberField", () => { + fieldNumberTests.bind(this)(NumberField); +}); diff --git a/packages/antd/src/components/fields/number/index.tsx b/packages/antd/src/components/fields/number/index.tsx new file mode 100644 index 0000000..b213af2 --- /dev/null +++ b/packages/antd/src/components/fields/number/index.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import { Typography } from "antd"; + +const { Text } = Typography; + +function toLocaleStringSupportsOptions() { + return !!( + typeof Intl == "object" && + Intl && + typeof Intl.NumberFormat == "function" + ); +} + +import { NumberFieldProps } from "../types"; + +/** + * This field is used to display a number formatted according to the browser locale, right aligned. and uses {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl `Intl`} to display date format. + * + * @see {@link https://refine.dev/docs/api-reference/antd/components/fields/number} for more details. + */ +export const NumberField: React.FC = ({ + value, + locale, + options, + ...rest +}) => { + const number = Number(value); + + return ( + + {toLocaleStringSupportsOptions() + ? number.toLocaleString(locale, options) + : number} + + ); +}; diff --git a/packages/antd/src/components/fields/tag/index.spec.tsx b/packages/antd/src/components/fields/tag/index.spec.tsx new file mode 100644 index 0000000..e1bde0e --- /dev/null +++ b/packages/antd/src/components/fields/tag/index.spec.tsx @@ -0,0 +1,7 @@ +import { fieldTagTests } from "@refinedev/ui-tests"; + +import { TagField } from "./"; + +describe("TagField", () => { + fieldTagTests.bind(this)(TagField); +}); diff --git a/packages/antd/src/components/fields/tag/index.tsx b/packages/antd/src/components/fields/tag/index.tsx new file mode 100644 index 0000000..5d023cf --- /dev/null +++ b/packages/antd/src/components/fields/tag/index.tsx @@ -0,0 +1,13 @@ +import React from "react"; +import { Tag } from "antd"; + +import { TagFieldProps } from "../types"; + +/** + * This field lets you display a value in a tag. It uses Ant Design's {@link https://ant.design/components/tag/ ``} component. + * + * @see {@link https://refine.dev/docs/api-reference/antd/components/fields/tag} for more details. + */ +export const TagField: React.FC = ({ value, ...rest }) => { + return {value?.toString()}; +}; diff --git a/packages/antd/src/components/fields/text/index.spec.tsx b/packages/antd/src/components/fields/text/index.spec.tsx new file mode 100644 index 0000000..0b71942 --- /dev/null +++ b/packages/antd/src/components/fields/text/index.spec.tsx @@ -0,0 +1,7 @@ +import { fieldTextTests } from "@refinedev/ui-tests"; + +import { TextField } from "./"; + +describe("TextField", () => { + fieldTextTests.bind(this)(TextField); +}); diff --git a/packages/antd/src/components/fields/text/index.tsx b/packages/antd/src/components/fields/text/index.tsx new file mode 100644 index 0000000..f3aef15 --- /dev/null +++ b/packages/antd/src/components/fields/text/index.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import { Typography } from "antd"; + +const { Text } = Typography; + +import { TextFieldProps } from "../types"; + +/** + * This field lets you show basic text. It uses Ant Design's {@link https://ant.design/components/typography/#Typography.Text ``} component. + * + * @see {@link https://refine.dev/docs/api-reference/antd/components/fields/text} for more details. + */ +export const TextField: React.FC = ({ value, ...rest }) => { + return {value}; +}; diff --git a/packages/antd/src/components/fields/types.ts b/packages/antd/src/components/fields/types.ts new file mode 100644 index 0000000..ee8f617 --- /dev/null +++ b/packages/antd/src/components/fields/types.ts @@ -0,0 +1,49 @@ +import { ReactChild, ReactNode } from "react"; +import { ConfigType } from "dayjs"; +import { + RefineFieldBooleanProps, + RefineFieldDateProps, + RefineFieldEmailProps, + RefineFieldFileProps, + RefineFieldImageProps, + RefineFieldMarkdownProps as BaseRefineFieldMarkdownProps, + RefineFieldNumberProps, + RefineFieldTagProps, + RefineFieldTextProps, + RefineFieldUrlProps, +} from "@refinedev/ui-types"; +import { ImageProps, TagProps } from "antd"; +import { AbstractTooltipProps } from "antd/lib/tooltip"; +import { TextProps } from "antd/lib/typography/Text"; +import { LinkProps } from "antd/lib/typography/Link"; + +export type BooleanFieldProps = RefineFieldBooleanProps< + unknown, + AbstractTooltipProps +>; + +export type DateFieldProps = RefineFieldDateProps; + +export type EmailFieldProps = RefineFieldEmailProps; + +export type FileFieldProps = RefineFieldFileProps; + +export type ImageFieldProps = RefineFieldImageProps< + string | undefined, + ImageProps, + { + imageTitle?: string; + } +>; + +export type RefineFieldMarkdownProps = BaseRefineFieldMarkdownProps< + string | undefined +>; + +export type NumberFieldProps = RefineFieldNumberProps; + +export type TagFieldProps = RefineFieldTagProps; + +export type TextFieldProps = RefineFieldTextProps; + +export type UrlFieldProps = RefineFieldUrlProps; diff --git a/packages/antd/src/components/fields/url/index.spec.tsx b/packages/antd/src/components/fields/url/index.spec.tsx new file mode 100644 index 0000000..83b86e6 --- /dev/null +++ b/packages/antd/src/components/fields/url/index.spec.tsx @@ -0,0 +1,7 @@ +import { fieldUrlTests } from "@refinedev/ui-tests"; + +import { UrlField } from "./"; + +describe("UrlField", () => { + fieldUrlTests.bind(this)(UrlField); +}); diff --git a/packages/antd/src/components/fields/url/index.tsx b/packages/antd/src/components/fields/url/index.tsx new file mode 100644 index 0000000..624da4c --- /dev/null +++ b/packages/antd/src/components/fields/url/index.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import { Typography } from "antd"; + +const { Link } = Typography; + +import { UrlFieldProps } from "../types"; + +/** + * This field lets you embed a link. It uses Ant Design's {@link https://ant.design/components/typography/ ``} component. + * You can pass a URL in its `value` property and you can show a text in its place by passing any `children`. + * + * @see {@link https://refine.dev/docs/api-reference/antd/components/fields/url} for more details. + */ +export const UrlField: React.FC = ({ + children, + value, + ...rest +}) => { + return ( + + {children ?? value} + + ); +}; diff --git a/packages/antd/src/components/index.ts b/packages/antd/src/components/index.ts new file mode 100644 index 0000000..27bc468 --- /dev/null +++ b/packages/antd/src/components/index.ts @@ -0,0 +1,27 @@ +// Layout +export { Layout } from "./layout"; +export { Header } from "./layout/header"; +export { Sider } from "./layout/sider"; +export { Title } from "./layout/title"; +export * from "./layout/types"; + +export { ThemedLayout } from "./themedLayout"; +export { ThemedHeader } from "./themedLayout/header"; +export { ThemedSider } from "./themedLayout/sider"; +export { ThemedTitle } from "./themedLayout/title"; +export * from "./themedLayout/types"; + +export { ThemedLayoutV2 } from "./themedLayoutV2"; +export { ThemedHeaderV2 } from "./themedLayoutV2/header"; +export { ThemedSiderV2 } from "./themedLayoutV2/sider"; +export { ThemedTitleV2 } from "./themedLayoutV2/title"; +export * from "./themedLayoutV2/types"; + +export * from "./buttons"; +export * from "./crud"; +export * from "./fields"; +export * from "./table"; +export * from "./pages"; +export * from "./breadcrumb"; +export * from "./pageHeader"; +export * from "./autoSaveIndicator"; diff --git a/packages/antd/src/components/layout/header/index.spec.tsx b/packages/antd/src/components/layout/header/index.spec.tsx new file mode 100644 index 0000000..0b156c6 --- /dev/null +++ b/packages/antd/src/components/layout/header/index.spec.tsx @@ -0,0 +1,7 @@ +import { layoutHeaderTests } from "@refinedev/ui-tests"; + +import { Header } from "./index"; + +describe("Header", () => { + layoutHeaderTests.bind(this)(Header); +}); diff --git a/packages/antd/src/components/layout/header/index.tsx b/packages/antd/src/components/layout/header/index.tsx new file mode 100644 index 0000000..53d8d21 --- /dev/null +++ b/packages/antd/src/components/layout/header/index.tsx @@ -0,0 +1,35 @@ +import { useActiveAuthProvider, useGetIdentity } from "@refinedev/core"; +import { Avatar, Layout as AntdLayout, Space, Typography } from "antd"; +import React from "react"; +import { RefineLayoutHeaderProps } from "../types"; +const { Text } = Typography; + +export const Header: React.FC = () => { + const authProvider = useActiveAuthProvider(); + const { data: user } = useGetIdentity({ + v3LegacyAuthProviderCompatible: Boolean(authProvider?.isLegacy), + }); + + const shouldRenderHeader = user && (user.name || user.avatar); + + return shouldRenderHeader ? ( + + + {user?.name && ( + + {user.name} + + )} + {user?.avatar && } + + + ) : null; +}; diff --git a/packages/antd/src/components/layout/index.spec.tsx b/packages/antd/src/components/layout/index.spec.tsx new file mode 100644 index 0000000..27370f9 --- /dev/null +++ b/packages/antd/src/components/layout/index.spec.tsx @@ -0,0 +1,6 @@ +import { layoutLayoutTests } from "@refinedev/ui-tests"; +import { Layout } from "./index"; + +describe("Layout", () => { + layoutLayoutTests.bind(this)(Layout); +}); diff --git a/packages/antd/src/components/layout/index.tsx b/packages/antd/src/components/layout/index.tsx new file mode 100644 index 0000000..86ae72f --- /dev/null +++ b/packages/antd/src/components/layout/index.tsx @@ -0,0 +1,45 @@ +import React from "react"; +import { Grid, Layout as AntdLayout } from "antd"; + +import { Sider as DefaultSider } from "./sider"; +import { Header as DefaultHeader } from "./header"; +import { RefineLayoutLayoutProps } from "./types"; + +/** + * @deprecated use `` instead with 100% backward compatibility. + * @see https://refine.dev/docs/api-reference/antd/components/antd-themed-layout + **/ +export const Layout: React.FC = ({ + children, + Header, + Sider, + Title, + Footer, + OffLayoutArea, +}) => { + const breakpoint = Grid.useBreakpoint(); + const SiderToRender = Sider ?? DefaultSider; + const HeaderToRender = Header ?? DefaultHeader; + const isSmall = typeof breakpoint.sm === "undefined" ? true : breakpoint.sm; + + return ( + + + + + +
+ {children} +
+ {OffLayoutArea && } +
+ {Footer &&