@js-empire/emperor-ui 1.3.5 → 1.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/emperor-ui.js +60624 -157
- package/dist/emperor-ui.umd.cjs +17 -17
- package/dist/index.d.ts +3 -0
- package/package.json +7 -3
- package/.cursor/rules/code-conventions.mdc +0 -50
- package/.husky/pre-commit +0 -4
- package/.prettierrc +0 -10
- package/.storybook/main.ts +0 -24
- package/.storybook/preview.ts +0 -19
- package/.storybook/vitest.setup.ts +0 -7
- package/.vscode/extensions.json +0 -1
- package/dist/index-31cOfB5-.js +0 -290
- package/dist/index-BwRbIPvN.js +0 -60566
- package/dist/index-DOyt37_Z.js +0 -5
- package/dist/src-UW24ZMRV-DMRqgyf4.js +0 -5
- package/eslint.config.js +0 -34
- package/index.html +0 -13
- package/public/icons/emperor-ui-logo.ico +0 -0
- package/public/images/avatar-female.jpg +0 -0
- package/public/images/avatar-male.jpg +0 -0
- package/public/images/emperor-ui-logo.png +0 -0
- package/src/animations/blink.ts +0 -26
- package/src/animations/floating.ts +0 -12
- package/src/animations/index.ts +0 -2
- package/src/components/atoms/brand/brand.stories.tsx +0 -27
- package/src/components/atoms/brand/brand.tsx +0 -56
- package/src/components/atoms/brand/index.ts +0 -1
- package/src/components/atoms/brand/styles/classes.ts +0 -9
- package/src/components/atoms/brand/styles/index.ts +0 -2
- package/src/components/atoms/brand/styles/styles.ts +0 -0
- package/src/components/atoms/color-picker/color-picker.tsx +0 -12
- package/src/components/atoms/color-picker/free-color-picker.tsx +0 -58
- package/src/components/atoms/color-picker/index.ts +0 -3
- package/src/components/atoms/color-picker/preset-color-picker.tsx +0 -66
- package/src/components/atoms/color-picker/stories/color-picker.stories.tsx +0 -63
- package/src/components/atoms/column/column.stories.tsx +0 -37
- package/src/components/atoms/column/column.tsx +0 -21
- package/src/components/atoms/column/index.ts +0 -1
- package/src/components/atoms/container/column.stories.tsx +0 -37
- package/src/components/atoms/container/container.tsx +0 -28
- package/src/components/atoms/container/index.ts +0 -1
- package/src/components/atoms/copy-button/copy-button.tsx +0 -73
- package/src/components/atoms/copy-button/index.ts +0 -1
- package/src/components/atoms/copy-button/stories/copy-button.stories.tsx +0 -21
- package/src/components/atoms/field/field.tsx +0 -81
- package/src/components/atoms/field/index.ts +0 -3
- package/src/components/atoms/field/styles/classes.ts +0 -9
- package/src/components/atoms/field/styles/index.ts +0 -1
- package/src/components/atoms/field/units/autocomplete-field.tsx +0 -49
- package/src/components/atoms/field/units/checkbox-field.tsx +0 -35
- package/src/components/atoms/field/units/index.ts +0 -7
- package/src/components/atoms/field/units/input-field.tsx +0 -35
- package/src/components/atoms/field/units/radio-field.tsx +0 -43
- package/src/components/atoms/field/units/select-field.tsx +0 -50
- package/src/components/atoms/field/units/switch-field.tsx +0 -35
- package/src/components/atoms/field/units/textarea-field.tsx +0 -37
- package/src/components/atoms/filter/filter.tsx +0 -93
- package/src/components/atoms/filter/index.ts +0 -3
- package/src/components/atoms/filter/stories/filter.stories.tsx +0 -238
- package/src/components/atoms/filter/styles/classes.ts +0 -20
- package/src/components/atoms/filter/styles/index.ts +0 -1
- package/src/components/atoms/filter/units/autocomplete-filter.tsx +0 -66
- package/src/components/atoms/filter/units/checkbox-filter.tsx +0 -42
- package/src/components/atoms/filter/units/checkbox-group-filter.tsx +0 -68
- package/src/components/atoms/filter/units/date-filter.tsx +0 -46
- package/src/components/atoms/filter/units/index.ts +0 -9
- package/src/components/atoms/filter/units/numeric-filter.tsx +0 -41
- package/src/components/atoms/filter/units/range-filter.tsx +0 -65
- package/src/components/atoms/filter/units/search-filter.tsx +0 -53
- package/src/components/atoms/filter/units/select-filter.tsx +0 -57
- package/src/components/atoms/filter/units/switch-filter.tsx +0 -35
- package/src/components/atoms/index.ts +0 -11
- package/src/components/atoms/portal/index.ts +0 -1
- package/src/components/atoms/portal/portal.stories.tsx +0 -43
- package/src/components/atoms/portal/portal.tsx +0 -25
- package/src/components/atoms/row/index.ts +0 -1
- package/src/components/atoms/row/row.stories.tsx +0 -37
- package/src/components/atoms/row/row.tsx +0 -26
- package/src/components/atoms/theme-switch/index.ts +0 -1
- package/src/components/atoms/theme-switch/styles/classes.ts +0 -16
- package/src/components/atoms/theme-switch/styles/index.ts +0 -1
- package/src/components/atoms/theme-switch/theme-switch.stories.tsx +0 -26
- package/src/components/atoms/theme-switch/theme-switch.tsx +0 -54
- package/src/components/atoms/uploader/components/avatar-label.tsx +0 -102
- package/src/components/atoms/uploader/components/index.ts +0 -8
- package/src/components/atoms/uploader/components/upload-file-error-box.tsx +0 -40
- package/src/components/atoms/uploader/components/upload-file-input.tsx +0 -36
- package/src/components/atoms/uploader/components/upload-file-label.tsx +0 -92
- package/src/components/atoms/uploader/components/upload-file-listing.tsx +0 -64
- package/src/components/atoms/uploader/components/uploader-title.tsx +0 -21
- package/src/components/atoms/uploader/components/uploader.tsx +0 -58
- package/src/components/atoms/uploader/components/view-image-modal.tsx +0 -41
- package/src/components/atoms/uploader/index.ts +0 -1
- package/src/components/atoms/uploader/stories/uploader.stories.tsx +0 -201
- package/src/components/index.ts +0 -4
- package/src/components/molecules/index.ts +0 -4
- package/src/components/molecules/item-card/components/actions/index.ts +0 -3
- package/src/components/molecules/item-card/components/actions/item-actions-buttons.tsx +0 -43
- package/src/components/molecules/item-card/components/actions/item-actions-dropdown.tsx +0 -57
- package/src/components/molecules/item-card/components/actions/item-actions-overlay.tsx +0 -50
- package/src/components/molecules/item-card/components/additions/index.ts +0 -2
- package/src/components/molecules/item-card/components/additions/item-banner.tsx +0 -22
- package/src/components/molecules/item-card/components/additions/loading-item.tsx +0 -88
- package/src/components/molecules/item-card/components/card/index.ts +0 -4
- package/src/components/molecules/item-card/components/card/item-card-body.tsx +0 -74
- package/src/components/molecules/item-card/components/card/item-card-footer.tsx +0 -79
- package/src/components/molecules/item-card/components/card/item-card-header.tsx +0 -69
- package/src/components/molecules/item-card/components/card/item-card.tsx +0 -123
- package/src/components/molecules/item-card/components/index.ts +0 -3
- package/src/components/molecules/item-card/index.ts +0 -2
- package/src/components/molecules/item-card/stories/item-card.stories.tsx +0 -218
- package/src/components/molecules/item-card/styles/classes.ts +0 -141
- package/src/components/molecules/item-card/styles/index.ts +0 -1
- package/src/components/molecules/nav-bar/index.ts +0 -3
- package/src/components/molecules/nav-bar/nav-bar-item.tsx +0 -64
- package/src/components/molecules/nav-bar/nav-bar.tsx +0 -57
- package/src/components/molecules/nav-bar/stories/hover-effect/nav-bar-hover-effect.stories.tsx +0 -52
- package/src/components/molecules/nav-bar/stories/nav-bar.stories.tsx +0 -50
- package/src/components/molecules/nav-bar/styles/classes.ts +0 -68
- package/src/components/molecules/nav-bar/styles/index.ts +0 -2
- package/src/components/molecules/nav-bar/styles/styles.ts +0 -85
- package/src/components/molecules/nav-bar/sub-items-box.tsx +0 -58
- package/src/components/molecules/scaffold/index.ts +0 -2
- package/src/components/molecules/scaffold/scaffold.stories.tsx +0 -21
- package/src/components/molecules/scaffold/scaffold.tsx +0 -23
- package/src/components/molecules/scaffold/styles/index.ts +0 -1
- package/src/components/molecules/scaffold/styles/scaffold-classes.ts +0 -10
- package/src/components/molecules/side-bar/compact-side-bar.tsx +0 -77
- package/src/components/molecules/side-bar/index.ts +0 -1
- package/src/components/molecules/side-bar/side-bar-drawer.tsx +0 -113
- package/src/components/molecules/side-bar/side-bar.stories.tsx +0 -111
- package/src/components/molecules/side-bar/side-bar.tsx +0 -31
- package/src/components/molecules/side-bar/styles/classes.ts +0 -28
- package/src/components/molecules/side-bar/styles/index.ts +0 -2
- package/src/components/molecules/side-bar/styles/styles.ts +0 -13
- package/src/components/organisms/deletion-confirmor/deletion-confirmor.tsx +0 -110
- package/src/components/organisms/deletion-confirmor/index.ts +0 -3
- package/src/components/organisms/deletion-confirmor/stories/components.tsx +0 -25
- package/src/components/organisms/deletion-confirmor/stories/deletion-confirmor.stories.tsx +0 -78
- package/src/components/organisms/deletion-confirmor/styles/classes.ts +0 -28
- package/src/components/organisms/deletion-confirmor/styles/index.ts +0 -2
- package/src/components/organisms/deletion-confirmor/styles/styles.ts +0 -4
- package/src/components/organisms/footer/copy-rights-box.tsx +0 -27
- package/src/components/organisms/footer/footer.tsx +0 -75
- package/src/components/organisms/footer/index.ts +0 -5
- package/src/components/organisms/footer/policies-box.tsx +0 -27
- package/src/components/organisms/footer/quick-links-box.tsx +0 -46
- package/src/components/organisms/footer/social-links-box.tsx +0 -33
- package/src/components/organisms/footer/stories/footer.stories.tsx +0 -61
- package/src/components/organisms/footer/styles/classes.ts +0 -71
- package/src/components/organisms/footer/styles/index.ts +0 -2
- package/src/components/organisms/footer/styles/styles.ts +0 -6
- package/src/components/organisms/form-builder/form-builder.stories.tsx +0 -144
- package/src/components/organisms/form-builder/form-builder.tsx +0 -75
- package/src/components/organisms/form-builder/index.ts +0 -1
- package/src/components/organisms/header/header.tsx +0 -87
- package/src/components/organisms/header/index.ts +0 -1
- package/src/components/organisms/header/segmented-header-content.tsx +0 -29
- package/src/components/organisms/header/stories/header.stories.tsx +0 -144
- package/src/components/organisms/header/styles/classes.ts +0 -22
- package/src/components/organisms/header/styles/index.ts +0 -2
- package/src/components/organisms/header/styles/styles.ts +0 -39
- package/src/components/organisms/index.ts +0 -6
- package/src/components/organisms/item-details/index.ts +0 -1
- package/src/components/organisms/item-details/item-details.tsx +0 -6
- package/src/components/organisms/listings/empty-listings.tsx +0 -80
- package/src/components/organisms/listings/index.ts +0 -3
- package/src/components/organisms/listings/listings.tsx +0 -96
- package/src/components/organisms/listings/stories/grid-listings.stories.tsx +0 -153
- package/src/components/organisms/listings/stories/list-listings.stories.tsx +0 -171
- package/src/components/organisms/listings/styles/classes.ts +0 -49
- package/src/components/organisms/listings/styles/index.ts +0 -2
- package/src/components/organisms/listings/styles/styles.ts +0 -6
- package/src/components/templates/index.ts +0 -1
- package/src/components/templates/landing-page/index.ts +0 -1
- package/src/components/templates/landing-page/landing-page.stories.tsx +0 -21
- package/src/components/templates/landing-page/landing-page.tsx +0 -57
- package/src/components/templates/landing-page/styles/classes.ts +0 -11
- package/src/components/templates/landing-page/styles/index.ts +0 -1
- package/src/constants/animations.ts +0 -14
- package/src/constants/card.tsx +0 -42
- package/src/constants/defaults.ts +0 -59
- package/src/constants/fake.ts +0 -5
- package/src/constants/footer.tsx +0 -157
- package/src/constants/index.ts +0 -6
- package/src/constants/uploader.ts +0 -27
- package/src/context/emperor-ui-context.ts +0 -6
- package/src/context/form-builder-context.tsx +0 -8
- package/src/context/index.ts +0 -4
- package/src/context/navigation-context.ts +0 -6
- package/src/context/uploader-context.ts +0 -6
- package/src/enums/index.ts +0 -2
- package/src/enums/placeholders.ts +0 -4
- package/src/enums/preserved-keys.ts +0 -3
- package/src/examples/index.ts +0 -1
- package/src/hooks/index.ts +0 -8
- package/src/hooks/use-emperor-ui.ts +0 -12
- package/src/hooks/use-filters.ts +0 -20
- package/src/hooks/use-form-builder-context.ts +0 -16
- package/src/hooks/use-navigation.ts +0 -12
- package/src/hooks/use-search-params-handler.tsx +0 -186
- package/src/hooks/use-uploader-context.ts +0 -14
- package/src/hooks/use-uploader.tsx +0 -164
- package/src/hooks/use-window-size.tsx +0 -53
- package/src/i18n/configs/i18n.ts +0 -7
- package/src/i18n/configs/index.ts +0 -1
- package/src/i18n/constants/index.ts +0 -1
- package/src/i18n/constants/locales.ts +0 -4
- package/src/i18n/index.ts +0 -5
- package/src/i18n/locales/ar.ts +0 -15
- package/src/i18n/locales/atoms/ar.ts +0 -18
- package/src/i18n/locales/atoms/en.ts +0 -18
- package/src/i18n/locales/atoms/index.ts +0 -2
- package/src/i18n/locales/common/ar.ts +0 -1
- package/src/i18n/locales/common/en.ts +0 -1
- package/src/i18n/locales/common/index.ts +0 -2
- package/src/i18n/locales/en.ts +0 -15
- package/src/i18n/locales/index.ts +0 -4
- package/src/i18n/locales/molecules/ar.ts +0 -1
- package/src/i18n/locales/molecules/en.ts +0 -1
- package/src/i18n/locales/molecules/index.ts +0 -2
- package/src/i18n/locales/organisms/ar.ts +0 -11
- package/src/i18n/locales/organisms/en.ts +0 -11
- package/src/i18n/locales/organisms/index.ts +0 -2
- package/src/i18n/locales/templates/ar.ts +0 -1
- package/src/i18n/locales/templates/en.ts +0 -1
- package/src/i18n/locales/templates/index.ts +0 -2
- package/src/i18n/locales/toasts/ar.ts +0 -1
- package/src/i18n/locales/toasts/en.ts +0 -1
- package/src/i18n/locales/toasts/index.ts +0 -2
- package/src/i18n/types/index.ts +0 -2
- package/src/i18n/types/locale.ts +0 -5
- package/src/i18n/types/toasts.ts +0 -3
- package/src/i18n/utils/get-locales.ts +0 -4
- package/src/i18n/utils/index.ts +0 -2
- package/src/i18n/utils/localize.ts +0 -15
- package/src/index.ts +0 -12
- package/src/mocks/constants.ts +0 -103
- package/src/mocks/deletion-confirmor.ts +0 -16
- package/src/mocks/header.tsx +0 -118
- package/src/mocks/index.ts +0 -6
- package/src/mocks/listings.tsx +0 -154
- package/src/mocks/locales/index.ts +0 -1
- package/src/mocks/locales/uploader.ts +0 -33
- package/src/mocks/types.ts +0 -64
- package/src/providers/config-provider.tsx +0 -72
- package/src/providers/emperor-ui-provider.tsx +0 -35
- package/src/providers/form-builder-provider-context.tsx +0 -18
- package/src/providers/index.ts +0 -6
- package/src/providers/navigation-provider.tsx +0 -42
- package/src/providers/theme-provider.tsx +0 -16
- package/src/providers/uploader-provider.tsx +0 -53
- package/src/styles/globals.css +0 -38
- package/src/styles/hero.ts +0 -3
- package/src/styles/index.css +0 -18
- package/src/types/components/atoms/brand.ts +0 -13
- package/src/types/components/atoms/color-picker/color-picker.ts +0 -21
- package/src/types/components/atoms/color-picker/index.ts +0 -1
- package/src/types/components/atoms/column.ts +0 -3
- package/src/types/components/atoms/container.ts +0 -3
- package/src/types/components/atoms/field/field.ts +0 -61
- package/src/types/components/atoms/field/index.ts +0 -1
- package/src/types/components/atoms/filter/filter.ts +0 -52
- package/src/types/components/atoms/filter/index.ts +0 -2
- package/src/types/components/atoms/filter/select-filter.ts +0 -8
- package/src/types/components/atoms/index.ts +0 -9
- package/src/types/components/atoms/portal.ts +0 -6
- package/src/types/components/atoms/row.ts +0 -3
- package/src/types/components/atoms/uploader.ts +0 -102
- package/src/types/components/index.ts +0 -4
- package/src/types/components/molecules/footer/footer.ts +0 -68
- package/src/types/components/molecules/footer/index.ts +0 -1
- package/src/types/components/molecules/header/header.ts +0 -51
- package/src/types/components/molecules/header/index.ts +0 -1
- package/src/types/components/molecules/index.ts +0 -9
- package/src/types/components/molecules/item-card/index.ts +0 -1
- package/src/types/components/molecules/item-card/item-card.ts +0 -69
- package/src/types/components/molecules/item-details/index.ts +0 -1
- package/src/types/components/molecules/item-details/item-details.ts +0 -9
- package/src/types/components/molecules/listings/index.ts +0 -1
- package/src/types/components/molecules/listings/listings.ts +0 -29
- package/src/types/components/molecules/nav-bar/index.ts +0 -1
- package/src/types/components/molecules/nav-bar/nav-bar.ts +0 -66
- package/src/types/components/molecules/scaffold/index.ts +0 -1
- package/src/types/components/molecules/scaffold/scaffold.ts +0 -9
- package/src/types/components/molecules/side-bar/index.ts +0 -1
- package/src/types/components/molecules/side-bar/side-bar.ts +0 -40
- package/src/types/components/molecules/theme-switch/index.ts +0 -1
- package/src/types/components/molecules/theme-switch/theme-switch.ts +0 -9
- package/src/types/components/organisms/deletion-confirmor/deletion-confirmor.ts +0 -22
- package/src/types/components/organisms/deletion-confirmor/index.ts +0 -1
- package/src/types/components/organisms/filters/filters.ts +0 -11
- package/src/types/components/organisms/filters/index.ts +0 -1
- package/src/types/components/organisms/form-builder/context.ts +0 -6
- package/src/types/components/organisms/form-builder/form-builder.ts +0 -39
- package/src/types/components/organisms/form-builder/index.ts +0 -2
- package/src/types/components/organisms/index.ts +0 -3
- package/src/types/components/templates/index.ts +0 -1
- package/src/types/components/templates/landing-page.ts +0 -10
- package/src/types/context/config.ts +0 -24
- package/src/types/context/index.ts +0 -4
- package/src/types/context/localization.ts +0 -24
- package/src/types/context/navigation.ts +0 -17
- package/src/types/context/theme.ts +0 -33
- package/src/types/index.ts +0 -3
- package/src/types/shared/components.ts +0 -13
- package/src/types/shared/index.ts +0 -1
- package/src/utils/cn.ts +0 -6
- package/src/utils/compress-images.ts +0 -36
- package/src/utils/index.ts +0 -5
- package/src/utils/locales.ts +0 -54
- package/src/utils/storybook.tsx +0 -15
- package/src/utils/uploader.ts +0 -167
- package/tsconfig.app.json +0 -37
- package/tsconfig.json +0 -7
- package/tsconfig.node.json +0 -25
- package/vite.config.ts +0 -44
- package/vitest.shims.d.ts +0 -1
package/src/enums/index.ts
DELETED
package/src/examples/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./";
|
package/src/hooks/index.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export * from "./use-emperor-ui";
|
|
2
|
-
export * from "./use-navigation";
|
|
3
|
-
export * from "./use-search-params-handler";
|
|
4
|
-
export * from "./use-uploader-context";
|
|
5
|
-
export * from "./use-uploader";
|
|
6
|
-
export * from "./use-window-size";
|
|
7
|
-
export * from "./use-filters";
|
|
8
|
-
export * from "./use-form-builder-context";
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { EmperorUIContext } from "@/context";
|
|
2
|
-
import { useContext } from "react";
|
|
3
|
-
|
|
4
|
-
export function useEmperorUI() {
|
|
5
|
-
const context = useContext(EmperorUIContext);
|
|
6
|
-
|
|
7
|
-
if (!context) {
|
|
8
|
-
throw new Error("useEmperorUI must be used within a EmperorUIProvider");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
return context;
|
|
12
|
-
}
|
package/src/hooks/use-filters.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useMemo } from "react";
|
|
4
|
-
import { useSearchParamsHandler } from "@/hooks";
|
|
5
|
-
|
|
6
|
-
export function useFilters<
|
|
7
|
-
FiltersType extends Record<string, string | number | boolean>,
|
|
8
|
-
>() {
|
|
9
|
-
const { allParams, clearParams } = useSearchParamsHandler();
|
|
10
|
-
|
|
11
|
-
const filters = useMemo(() => {
|
|
12
|
-
if (!Object.keys(allParams).length) {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return allParams as unknown as FiltersType;
|
|
17
|
-
}, [allParams]);
|
|
18
|
-
|
|
19
|
-
return { filters, clearFilters: clearParams };
|
|
20
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { FormBuilderContext } from "@/context";
|
|
2
|
-
import { FormBuilderValue } from "@/types";
|
|
3
|
-
import { useContext } from "react";
|
|
4
|
-
import { FieldValues } from "react-hook-form";
|
|
5
|
-
|
|
6
|
-
export function useFormBuilder<TSchema extends FieldValues>() {
|
|
7
|
-
const context = useContext(FormBuilderContext) as FormBuilderValue<TSchema>;
|
|
8
|
-
|
|
9
|
-
if (!context) {
|
|
10
|
-
throw new Error(
|
|
11
|
-
"'useFormBuilder' must be used within a 'FormBuilderProvider', make sure to wrap 'Field' components with 'FormBuilder' as well.",
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return context;
|
|
16
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { NavigationContext } from "@/context";
|
|
2
|
-
import { useContext } from "react";
|
|
3
|
-
|
|
4
|
-
export function useNavigation() {
|
|
5
|
-
const context = useContext(NavigationContext);
|
|
6
|
-
|
|
7
|
-
if (!context) {
|
|
8
|
-
throw new Error("useNavigation must be used within a NavigationProvider");
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
return context;
|
|
12
|
-
}
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useCallback, useEffect, useState } from "react";
|
|
4
|
-
|
|
5
|
-
const URL_SEARCH_PARAMS_CHANGE_EVENT = "URLSearchParamsChange";
|
|
6
|
-
|
|
7
|
-
export function useSearchParamsHandler() {
|
|
8
|
-
const getAllParams = useCallback((): Record<string, string> => {
|
|
9
|
-
if (typeof window === "undefined") {
|
|
10
|
-
return {};
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const currentSearchParams = new URLSearchParams(window.location.search);
|
|
14
|
-
|
|
15
|
-
return Array.from(currentSearchParams.entries()).reduce<
|
|
16
|
-
Record<string, string>
|
|
17
|
-
>((paramsRecord, [key, value]) => {
|
|
18
|
-
paramsRecord[key] = value;
|
|
19
|
-
return paramsRecord;
|
|
20
|
-
}, {});
|
|
21
|
-
}, []);
|
|
22
|
-
|
|
23
|
-
const [allParams, setAllParams] = useState<Record<string, string>>(() =>
|
|
24
|
-
getAllParams(),
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
const updateUrlSearchParams = useCallback(
|
|
28
|
-
({ searchParams }: { searchParams: URLSearchParams }) => {
|
|
29
|
-
if (typeof window === "undefined") return;
|
|
30
|
-
|
|
31
|
-
const searchParamsString = searchParams.toString();
|
|
32
|
-
const searchPath = searchParamsString ? `?${searchParamsString}` : "";
|
|
33
|
-
const newPath = `${window.location.pathname}${searchPath}${window.location.hash}`;
|
|
34
|
-
const currentPath = `${window.location.pathname}${window.location.search}${window.location.hash}`;
|
|
35
|
-
|
|
36
|
-
if (newPath === currentPath) return;
|
|
37
|
-
|
|
38
|
-
window.history.replaceState(window.history.state, "", newPath);
|
|
39
|
-
window.dispatchEvent(new Event(URL_SEARCH_PARAMS_CHANGE_EVENT));
|
|
40
|
-
},
|
|
41
|
-
[],
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
const setParams = useCallback(
|
|
45
|
-
({
|
|
46
|
-
params,
|
|
47
|
-
options = { replace: true },
|
|
48
|
-
}: {
|
|
49
|
-
params: Record<string, string | number | boolean | undefined | null>;
|
|
50
|
-
options?: { replace?: boolean };
|
|
51
|
-
}) => {
|
|
52
|
-
if (typeof window === "undefined") return;
|
|
53
|
-
|
|
54
|
-
const nextSearchParams = new URLSearchParams(window.location.search);
|
|
55
|
-
let hasChanges = false;
|
|
56
|
-
|
|
57
|
-
Object.entries(params).forEach(([key, value]) => {
|
|
58
|
-
if (value === undefined || value === null || value === "") {
|
|
59
|
-
const hasKey = nextSearchParams.has(key);
|
|
60
|
-
nextSearchParams.delete(key);
|
|
61
|
-
if (hasKey) {
|
|
62
|
-
hasChanges = true;
|
|
63
|
-
}
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const serializedValue = String(value);
|
|
68
|
-
|
|
69
|
-
if (options.replace) {
|
|
70
|
-
const existingValues = nextSearchParams.getAll(key);
|
|
71
|
-
const isAlreadyReplaced =
|
|
72
|
-
existingValues.length === 1 &&
|
|
73
|
-
existingValues[0] === serializedValue;
|
|
74
|
-
|
|
75
|
-
if (isAlreadyReplaced) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
nextSearchParams.delete(key);
|
|
80
|
-
nextSearchParams.append(key, serializedValue);
|
|
81
|
-
hasChanges = true;
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const existingValues = nextSearchParams.getAll(key);
|
|
86
|
-
const hasMatchingValue = existingValues.some(
|
|
87
|
-
(existingValue) => existingValue === serializedValue,
|
|
88
|
-
);
|
|
89
|
-
|
|
90
|
-
if (!hasMatchingValue) {
|
|
91
|
-
nextSearchParams.append(key, serializedValue);
|
|
92
|
-
hasChanges = true;
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
if (!hasChanges) return;
|
|
97
|
-
|
|
98
|
-
updateUrlSearchParams({ searchParams: nextSearchParams });
|
|
99
|
-
},
|
|
100
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
101
|
-
[],
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
const deleteParam = useCallback(
|
|
105
|
-
({ key }: { key: string }) => {
|
|
106
|
-
if (typeof window === "undefined") {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
const nextSearchParams = new URLSearchParams(window.location.search);
|
|
111
|
-
nextSearchParams.delete(key);
|
|
112
|
-
updateUrlSearchParams({ searchParams: nextSearchParams });
|
|
113
|
-
},
|
|
114
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
115
|
-
[],
|
|
116
|
-
);
|
|
117
|
-
|
|
118
|
-
const deleteParams = useCallback(
|
|
119
|
-
({ keys }: { keys: string[] }) => {
|
|
120
|
-
if (typeof window === "undefined") return;
|
|
121
|
-
|
|
122
|
-
const nextSearchParams = new URLSearchParams(window.location.search);
|
|
123
|
-
let hasChanges = false;
|
|
124
|
-
keys.forEach((key) => {
|
|
125
|
-
const hasKey = nextSearchParams.has(key);
|
|
126
|
-
nextSearchParams.delete(key);
|
|
127
|
-
if (hasKey) {
|
|
128
|
-
hasChanges = true;
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
if (!hasChanges) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
updateUrlSearchParams({ searchParams: nextSearchParams });
|
|
137
|
-
},
|
|
138
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
139
|
-
[],
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
const clearParams = useCallback(() => {
|
|
143
|
-
if (typeof window === "undefined") return;
|
|
144
|
-
|
|
145
|
-
if (!window.location.search) {
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
updateUrlSearchParams({ searchParams: new URLSearchParams() });
|
|
150
|
-
}, [updateUrlSearchParams]);
|
|
151
|
-
|
|
152
|
-
const getParam = useCallback((name: string) => {
|
|
153
|
-
if (typeof window === "undefined") return null;
|
|
154
|
-
|
|
155
|
-
const currentSearchParams = new URLSearchParams(window.location.search);
|
|
156
|
-
return currentSearchParams.get(name);
|
|
157
|
-
}, []);
|
|
158
|
-
|
|
159
|
-
useEffect(() => {
|
|
160
|
-
if (typeof window === "undefined") {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const syncAllParams = () => {
|
|
165
|
-
setAllParams(getAllParams());
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
syncAllParams();
|
|
169
|
-
window.addEventListener("popstate", syncAllParams);
|
|
170
|
-
window.addEventListener(URL_SEARCH_PARAMS_CHANGE_EVENT, syncAllParams);
|
|
171
|
-
|
|
172
|
-
return () => {
|
|
173
|
-
window.removeEventListener("popstate", syncAllParams);
|
|
174
|
-
window.removeEventListener(URL_SEARCH_PARAMS_CHANGE_EVENT, syncAllParams);
|
|
175
|
-
};
|
|
176
|
-
}, [getAllParams]);
|
|
177
|
-
|
|
178
|
-
return {
|
|
179
|
-
getParam,
|
|
180
|
-
allParams,
|
|
181
|
-
setParams,
|
|
182
|
-
deleteParam,
|
|
183
|
-
deleteParams,
|
|
184
|
-
clearParams,
|
|
185
|
-
};
|
|
186
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { UploaderContext } from "@/context";
|
|
2
|
-
import { useContext } from "react";
|
|
3
|
-
|
|
4
|
-
export function useUploaderContext() {
|
|
5
|
-
const context = useContext(UploaderContext);
|
|
6
|
-
|
|
7
|
-
if (!context) {
|
|
8
|
-
throw new Error(
|
|
9
|
-
"useUploaderContext must be used within a UploaderProvider",
|
|
10
|
-
);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
return context;
|
|
14
|
-
}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { addToast } from "@heroui/toast";
|
|
4
|
-
import { FileObject, UseUploadFileProps, UseUploadFileReturn } from "@/types";
|
|
5
|
-
import { useState } from "react";
|
|
6
|
-
import { useEmperorUI } from "@/hooks";
|
|
7
|
-
import {
|
|
8
|
-
validateUploadedFiles,
|
|
9
|
-
getAllowedTypes,
|
|
10
|
-
refineUploadedFiles,
|
|
11
|
-
mergeUploaderLocale,
|
|
12
|
-
} from "@/utils";
|
|
13
|
-
import { ONE_MEGABYTE } from "@/constants";
|
|
14
|
-
import { Locale, getLocales } from "@/i18n";
|
|
15
|
-
|
|
16
|
-
export const useUploader = ({
|
|
17
|
-
labelContent,
|
|
18
|
-
labelId,
|
|
19
|
-
fileTypes,
|
|
20
|
-
isRequired = false,
|
|
21
|
-
isDraggable = true,
|
|
22
|
-
isMulti = false,
|
|
23
|
-
preventDuplicates = true,
|
|
24
|
-
maxCount = 10,
|
|
25
|
-
maxFileSize = ONE_MEGABYTE * 10,
|
|
26
|
-
compressFiles = false,
|
|
27
|
-
onChange = () => {},
|
|
28
|
-
locales,
|
|
29
|
-
}: UseUploadFileProps): UseUploadFileReturn => {
|
|
30
|
-
const { config } = useEmperorUI();
|
|
31
|
-
const [files, setFiles] = useState<FileObject[]>([]);
|
|
32
|
-
const [isLoading, setIsLoading] = useState(false);
|
|
33
|
-
|
|
34
|
-
const configLocales = config?.interLocalization?.locales;
|
|
35
|
-
const lang =
|
|
36
|
-
config?.interLocalization?.lang ||
|
|
37
|
-
config?.interLocalization?.defaultLanguage ||
|
|
38
|
-
"en";
|
|
39
|
-
|
|
40
|
-
const defaultLocale = getLocales(lang);
|
|
41
|
-
const uploaderLocale = mergeUploaderLocale({
|
|
42
|
-
defaultUploaderLocale: defaultLocale.atoms.uploader,
|
|
43
|
-
configUploaderLocale: (configLocales?.[lang] as Locale | undefined)?.atoms
|
|
44
|
-
?.uploader,
|
|
45
|
-
contextUploaderLocale: locales,
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// remove a specific uploaded file
|
|
49
|
-
const handleClearFile = (fileName?: string) => {
|
|
50
|
-
setFiles((prev) => prev?.filter((file) => file?.file?.name !== fileName));
|
|
51
|
-
|
|
52
|
-
// Reset the input value to allow re-uploading the same file
|
|
53
|
-
if (labelId) {
|
|
54
|
-
const input = document.getElementById(labelId) as HTMLInputElement;
|
|
55
|
-
if (input) {
|
|
56
|
-
input.value = "";
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
// handle the uploading process including the window upload and the drag-and-drop upload
|
|
62
|
-
const onInputChange = async (
|
|
63
|
-
event: React.ChangeEvent<HTMLInputElement> &
|
|
64
|
-
React.DragEvent<HTMLLabelElement>,
|
|
65
|
-
): Promise<void | string | null> => {
|
|
66
|
-
console.log("files: ", event.target.files);
|
|
67
|
-
|
|
68
|
-
if (
|
|
69
|
-
(!event.target.files || !event.target.files?.[0]) &&
|
|
70
|
-
(!event?.dataTransfer?.files || !event?.dataTransfer?.files[0])
|
|
71
|
-
) {
|
|
72
|
-
return addToast({
|
|
73
|
-
title: uploaderLocale.errorUploadingFile,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// validate the file type according to the given allowed types
|
|
78
|
-
const allowedTypes = getAllowedTypes(fileTypes);
|
|
79
|
-
|
|
80
|
-
// verify if the files exist
|
|
81
|
-
if (!event.target.files && !event.dataTransfer.files) return;
|
|
82
|
-
|
|
83
|
-
// get the uploaded files
|
|
84
|
-
const uploadedFiles = Array.from(
|
|
85
|
-
event.target.files || event.dataTransfer.files,
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
// validate the files' length and prevent exceeded files only in the multiple-mode
|
|
89
|
-
if (
|
|
90
|
-
isMulti &&
|
|
91
|
-
(uploadedFiles?.length > maxCount ||
|
|
92
|
-
files?.length + uploadedFiles?.length > maxCount)
|
|
93
|
-
) {
|
|
94
|
-
addToast({
|
|
95
|
-
title: `${uploaderLocale.maxNumImages} ${maxCount}`,
|
|
96
|
-
});
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// validate the files' types according to the given allowed types
|
|
101
|
-
if (
|
|
102
|
-
!uploadedFiles
|
|
103
|
-
?.map((file) => file?.type)
|
|
104
|
-
?.every((type) => allowedTypes.includes(type))
|
|
105
|
-
) {
|
|
106
|
-
addToast({
|
|
107
|
-
title: uploaderLocale.errorUploadedTypes,
|
|
108
|
-
});
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// validate the files' sizes if none of them exceeds the maximum allowed size
|
|
113
|
-
// validate files' names to ensure there are no duplicates if specified
|
|
114
|
-
const { compressedFiles, isInValid } = await validateUploadedFiles({
|
|
115
|
-
uploadedFiles,
|
|
116
|
-
maxFileSize,
|
|
117
|
-
compressFiles,
|
|
118
|
-
preventDuplicates,
|
|
119
|
-
files,
|
|
120
|
-
uploaderLocale,
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
if (isInValid) return;
|
|
124
|
-
|
|
125
|
-
setIsLoading(true);
|
|
126
|
-
|
|
127
|
-
await Promise.all(
|
|
128
|
-
await refineUploadedFiles({
|
|
129
|
-
uploadedFiles: compressedFiles,
|
|
130
|
-
uploaderLocale,
|
|
131
|
-
allowedTypes,
|
|
132
|
-
isMulti,
|
|
133
|
-
setFiles,
|
|
134
|
-
}),
|
|
135
|
-
).finally(() => {
|
|
136
|
-
setIsLoading(false);
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
setTimeout(() => {
|
|
140
|
-
onChange();
|
|
141
|
-
}, 200);
|
|
142
|
-
|
|
143
|
-
// Reset the input value to allow re-uploading the same file
|
|
144
|
-
// Only reset for input change events, not drag events
|
|
145
|
-
if (event.target && "value" in event.target && event.target.files) {
|
|
146
|
-
(event.target as HTMLInputElement).value = "";
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
return {
|
|
151
|
-
files,
|
|
152
|
-
fileTypes,
|
|
153
|
-
labelId,
|
|
154
|
-
isRequired,
|
|
155
|
-
labelContent,
|
|
156
|
-
isDraggable,
|
|
157
|
-
isMulti,
|
|
158
|
-
handleClearFile,
|
|
159
|
-
onInputChange,
|
|
160
|
-
setFiles,
|
|
161
|
-
isLoading,
|
|
162
|
-
locales,
|
|
163
|
-
};
|
|
164
|
-
};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useEffect, useMemo, useState } from "react";
|
|
4
|
-
|
|
5
|
-
const SCREENS = {
|
|
6
|
-
sm: 640,
|
|
7
|
-
md: 768,
|
|
8
|
-
lg: 1024,
|
|
9
|
-
xl: 1280,
|
|
10
|
-
"2xl": 1536,
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export const useWindowSize = () => {
|
|
14
|
-
const [size, setSize] = useState({ width: 0, height: 0 });
|
|
15
|
-
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
function updateSize() {
|
|
18
|
-
setSize({ width: window.innerWidth, height: window.innerHeight });
|
|
19
|
-
}
|
|
20
|
-
window.addEventListener("resize", updateSize);
|
|
21
|
-
updateSize();
|
|
22
|
-
|
|
23
|
-
return () => window.removeEventListener("resize", updateSize);
|
|
24
|
-
}, []);
|
|
25
|
-
|
|
26
|
-
const currentScreen: "base" | "sm" | "md" | "lg" | "xl" | "2xl" =
|
|
27
|
-
useMemo(() => {
|
|
28
|
-
if (size?.width > SCREENS?.["2xl"]) return "2xl";
|
|
29
|
-
else if (size?.width > SCREENS?.xl) return "xl";
|
|
30
|
-
else if (size?.width > SCREENS?.lg) return "lg";
|
|
31
|
-
else if (size?.width > SCREENS?.md) return "md";
|
|
32
|
-
else if (size?.width > SCREENS?.sm) return "sm";
|
|
33
|
-
else return "base";
|
|
34
|
-
}, [size]);
|
|
35
|
-
|
|
36
|
-
const isSmallDevice = useMemo(
|
|
37
|
-
() => ["base", "sm", "md"].includes(currentScreen),
|
|
38
|
-
[currentScreen],
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
const isExtraSmallDevice = useMemo(
|
|
42
|
-
() => ["base"].includes(currentScreen),
|
|
43
|
-
[currentScreen],
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
return {
|
|
47
|
-
viewportWidth: size.width,
|
|
48
|
-
viewportHeight: size.height,
|
|
49
|
-
currentScreen,
|
|
50
|
-
isSmallDevice,
|
|
51
|
-
isExtraSmallDevice,
|
|
52
|
-
};
|
|
53
|
-
};
|
package/src/i18n/configs/i18n.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./i18n";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./locales";
|
package/src/i18n/index.ts
DELETED
package/src/i18n/locales/ar.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { commonAr } from "./common";
|
|
2
|
-
import { toastsAr } from "./toasts";
|
|
3
|
-
import { atomsAr } from "./atoms";
|
|
4
|
-
import { moleculesAr } from "./molecules";
|
|
5
|
-
import { organismsAr } from "./organisms";
|
|
6
|
-
import { templatesAr } from "./templates";
|
|
7
|
-
|
|
8
|
-
export const ar = {
|
|
9
|
-
common: commonAr,
|
|
10
|
-
toasts: toastsAr,
|
|
11
|
-
atoms: atomsAr,
|
|
12
|
-
molecules: moleculesAr,
|
|
13
|
-
organisms: organismsAr,
|
|
14
|
-
templates: templatesAr,
|
|
15
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export const atomsAr = {
|
|
2
|
-
colorPicker: {
|
|
3
|
-
invalidColorFormat: "يرجى إدخال لون صالح (مثال: #000000 أو #fff)",
|
|
4
|
-
},
|
|
5
|
-
uploader: {
|
|
6
|
-
dropHere: "أسقط الملف هنا",
|
|
7
|
-
selectFile: "حدد ملفًا أو اسحبه وأفلته هنا",
|
|
8
|
-
selectionTypes: "JPG, PNG أو PDF، حجم الملف لا يزيد عن 10MB",
|
|
9
|
-
selectBtn: "حدد ملف",
|
|
10
|
-
errorUploadingFile: "لم يتم تحميل أي ملف",
|
|
11
|
-
maxNumImages: "تم تجاوز الحد الأقصى للصور المرفوعة: ",
|
|
12
|
-
errorUploadedTypes: "نوع الملف المرفوع غير مسموح به",
|
|
13
|
-
maxSizeExceededError:
|
|
14
|
-
"يمكنك فقط رفع ملفات/صور بحجم أقل من MAX_FILE_SIZE ميغابايت، بينما حجم الملف الذي رفعته هو UPLOADED_FILE_SIZE ميغابايت",
|
|
15
|
-
duplicatesDenied:
|
|
16
|
-
"لا يمكنك رفع صور تحمل نفس الاسم، يمكنك إعادة تسميتها قبل عملية الرفع",
|
|
17
|
-
},
|
|
18
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export const atomsEn = {
|
|
2
|
-
colorPicker: {
|
|
3
|
-
invalidColorFormat: "Please enter a valid color (e.g., #000000 or #fff)",
|
|
4
|
-
},
|
|
5
|
-
uploader: {
|
|
6
|
-
dropHere: "Drop file here",
|
|
7
|
-
selectFile: "Select a file or drag and drop here",
|
|
8
|
-
selectionTypes: "JPG, PNG or PDF, file size no more than 10MB",
|
|
9
|
-
selectBtn: "Select file",
|
|
10
|
-
errorUploadingFile: "No file was uploaded",
|
|
11
|
-
maxNumImages: "Maximum number of uploaded images exceeded: ",
|
|
12
|
-
errorUploadedTypes: "The uploaded file type is not allowed.",
|
|
13
|
-
maxSizeExceededError:
|
|
14
|
-
"You can only upload files/images with less than MAX_FILE_SIZE Mega Bytes, you're file's size is UPLOADED_FILE_SIZE Mega Bytes",
|
|
15
|
-
duplicatesDenied:
|
|
16
|
-
"You can't upload images with duplicate names, you may rename them before the upload process",
|
|
17
|
-
},
|
|
18
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const commonAr = {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const commonEn = {};
|
package/src/i18n/locales/en.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { commonEn } from "./common";
|
|
2
|
-
import { toastsEn } from "./toasts";
|
|
3
|
-
import { atomsEn } from "./atoms";
|
|
4
|
-
import { moleculesEn } from "./molecules";
|
|
5
|
-
import { organismsEn } from "./organisms";
|
|
6
|
-
import { templatesEn } from "./templates";
|
|
7
|
-
|
|
8
|
-
export const en = {
|
|
9
|
-
common: commonEn,
|
|
10
|
-
toasts: toastsEn,
|
|
11
|
-
atoms: atomsEn,
|
|
12
|
-
molecules: moleculesEn,
|
|
13
|
-
organisms: organismsEn,
|
|
14
|
-
templates: templatesEn,
|
|
15
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const moleculesAr = {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const moleculesEn = {};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export const organismsEn = {
|
|
2
|
-
deletionConfirmor: {
|
|
3
|
-
confirm: "Confirm",
|
|
4
|
-
decline: "Decline",
|
|
5
|
-
},
|
|
6
|
-
listings: {
|
|
7
|
-
emptyTitle: "No listings found",
|
|
8
|
-
emptyDescription:
|
|
9
|
-
"We couldn't find any listings matching your search. Try adjusting your filters or check back later.",
|
|
10
|
-
},
|
|
11
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const templatesAr = {};
|