@solidxai/core-ui 0.1.14-beta.9 → 0.1.15-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/components/common/DropzonePlaceholder.d.ts +2 -1
  2. package/dist/components/common/DropzonePlaceholder.d.ts.map +1 -1
  3. package/dist/components/common/DropzonePlaceholder.js +10 -7
  4. package/dist/components/common/DropzonePlaceholder.js.map +1 -1
  5. package/dist/components/common/DropzonePlaceholder.tsx +14 -9
  6. package/dist/components/core/card/CardItem.js +1 -1
  7. package/dist/components/core/card/CardItem.js.map +1 -1
  8. package/dist/components/core/card/CardItem.tsx +1 -1
  9. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  10. package/dist/components/core/card/SolidCardView.js +2 -2
  11. package/dist/components/core/card/SolidCardView.js.map +1 -1
  12. package/dist/components/core/card/SolidCardView.tsx +7 -12
  13. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  14. package/dist/components/core/common/SolidGlobalSearchElement.js +101 -86
  15. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  16. package/dist/components/core/common/SolidGlobalSearchElement.tsx +161 -98
  17. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  18. package/dist/components/core/form/SolidFormView.js +96 -72
  19. package/dist/components/core/form/SolidFormView.js.map +1 -1
  20. package/dist/components/core/form/SolidFormView.tsx +39 -17
  21. package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
  22. package/dist/components/core/form/fields/SolidMediaMultipleField.js +3 -2
  23. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  24. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +3 -1
  25. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  26. package/dist/components/core/form/fields/SolidMediaSingleField.js +3 -2
  27. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  28. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +3 -1
  29. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts +1 -0
  30. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  31. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +20 -2
  32. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  33. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +29 -2
  34. package/dist/components/core/form/fields/solidFields.module.css +7 -0
  35. package/dist/components/core/kanban/KanbanCard.js +1 -1
  36. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  37. package/dist/components/core/kanban/KanbanCard.tsx +1 -1
  38. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  39. package/dist/components/core/kanban/SolidKanbanView.js +7 -1
  40. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  41. package/dist/components/core/kanban/SolidKanbanView.tsx +10 -5
  42. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  43. package/dist/components/core/list/SolidListView.js +44 -88
  44. package/dist/components/core/list/SolidListView.js.map +1 -1
  45. package/dist/components/core/list/SolidListView.tsx +19 -93
  46. package/dist/components/core/list/SolidListViewColumn.d.ts +2 -1
  47. package/dist/components/core/list/SolidListViewColumn.d.ts.map +1 -1
  48. package/dist/components/core/list/SolidListViewColumn.js +2 -2
  49. package/dist/components/core/list/SolidListViewColumn.js.map +1 -1
  50. package/dist/components/core/list/SolidListViewColumn.tsx +4 -3
  51. package/dist/components/core/list/columns/SolidRelationColumn.d.ts +1 -1
  52. package/dist/components/core/list/columns/SolidRelationColumn.d.ts.map +1 -1
  53. package/dist/components/core/list/columns/SolidRelationColumn.js +2 -2
  54. package/dist/components/core/list/columns/SolidRelationColumn.js.map +1 -1
  55. package/dist/components/core/list/columns/SolidRelationColumn.tsx +2 -2
  56. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts +2 -2
  57. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
  58. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +5 -4
  59. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  60. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +5 -4
  61. package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
  62. package/dist/components/core/model/FieldMetaDataForm.js +147 -97
  63. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  64. package/dist/components/core/model/FieldMetaDataForm.tsx +123 -31
  65. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  66. package/dist/components/core/tree/SolidTreeView.js +1 -1
  67. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  68. package/dist/components/core/tree/SolidTreeView.tsx +4 -12
  69. package/dist/components/layout/AdminHeaderActions.js +1 -1
  70. package/dist/components/layout/AdminHeaderActions.js.map +1 -1
  71. package/dist/components/layout/AdminHeaderActions.tsx +1 -1
  72. package/dist/helpers/getAcceptedFileTypes.d.ts +12 -2
  73. package/dist/helpers/getAcceptedFileTypes.d.ts.map +1 -1
  74. package/dist/helpers/getAcceptedFileTypes.js +72 -16
  75. package/dist/helpers/getAcceptedFileTypes.js.map +1 -1
  76. package/dist/helpers/getAcceptedFileTypes.tsx +101 -18
  77. package/dist/helpers/registry.js +2 -1
  78. package/dist/helpers/registry.js.map +1 -1
  79. package/dist/helpers/registry.ts +3 -1
  80. package/dist/index.d.ts +1 -1
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js.map +1 -1
  83. package/dist/index.ts +1 -2
  84. package/dist/resources/globals.css +259 -109
  85. package/dist/resources/solid-responsive.css +1 -5
  86. package/dist/resources/solid-tailwind-generated.css +1 -1
  87. package/dist/resources/themes/solid-light-modern/theme.css +3 -4
  88. package/dist/types/index.d.ts +2 -4
  89. package/dist/types/solid-core.d.ts +4 -13
  90. package/package.json +1 -1
@@ -1907,18 +1907,10 @@ export const SolidTreeView = forwardRef<SolidTreeViewHandle, SolidTreeViewParams
1907
1907
 
1908
1908
  {solidTreeViewMetaData?.data?.solidView?.layout?.attrs.enableGlobalSearch === true && (
1909
1909
  <>
1910
- <div className="max-[576px]:hidden sm:hidden lg:flex w-full mt-3 lg:mt-0 lg:min-w-0">
1911
- <SolidGlobalSearchElement
1912
- viewType="tree"
1913
- showSaveFilterPopup={showSaveFilterPopup}
1914
- setShowSaveFilterPopup={setShowSaveFilterPopup}
1915
- ref={solidGlobalSearchElementRef}
1916
- viewData={solidTreeViewMetaData}
1917
- handleApplyCustomFilter={handleApplyCustomFilter}
1918
- filterPredicates={filterPredicates}
1919
- />
1920
- </div>
1921
- <div className={`${showGlobalSearchElement ? "lg:flex" : "hidden"} lg:hidden mt-3 lg:mt-0 w-full lg:min-w-0`}>
1910
+ {/* Base `hidden` must be avoided here: the consuming app's Tailwind CSS loads after this
1911
+ library's generated CSS, so the app's base `.hidden` would override our media-scoped
1912
+ `lg:flex`. Only media-scoped visibility classes are safe on this element. */}
1913
+ <div className={`${showGlobalSearchElement ? "flex" : "max-lg:hidden lg:flex"} w-full mt-3 lg:mt-0 lg:min-w-0`}>
1922
1914
  <SolidGlobalSearchElement
1923
1915
  viewType="tree"
1924
1916
  showSaveFilterPopup={showSaveFilterPopup}
@@ -63,7 +63,7 @@ export var AdminHeaderActions = function (_a) {
63
63
  if (variant === "sidebar") {
64
64
  return (_jsx("div", { className: "solid-sidebar-mobile-actions md:hidden ".concat(className).trim(), children: actions.map(function (action) { return (_jsx("button", { type: "button", className: "solid-sidebar-mobile-action", onClick: action.onClick, title: action.title, "aria-label": action.title, children: action.label }, action.key)); }) }));
65
65
  }
66
- return (_jsxs("div", { className: "solid-admin-header-actions hidden md:flex ".concat(className).trim(), children: [_jsx(BackendReconnectIndicator, {}), actions.map(function (action) {
66
+ return (_jsxs("div", { className: "solid-admin-header-actions max-md:hidden lg:flex ".concat(className).trim(), children: [_jsx(BackendReconnectIndicator, {}), actions.map(function (action) {
67
67
  if (action.key === "studio") {
68
68
  return (_jsxs("button", { type: "button", className: "solid-studio-trigger-btn", onClick: action.onClick, title: action.title, "aria-label": action.title, children: [action.icon, _jsx("span", { className: "solid-studio-trigger-label", children: action.label })] }, action.key));
69
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AdminHeaderActions.js","sourceRoot":"","sources":["../../../src/components/layout/AdminHeaderActions.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ReactNode, useContext, useMemo } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\n// import { usePathname } from \"../../hooks/usePathname\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { env } from \"../../adapters/env\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { enterStudioMode } from \"../../redux/features/solidStudioSlice\";\nimport { LayoutContext } from \"./context/layoutcontext\";\nimport { BackendReconnectIndicator } from \"../common/BackendReconnectIndicator\";\nimport { useGetSolidSettingsQuery } from \"../../redux/api/solidSettingsApi\";\nimport { getSettingsMap } from \"../../helpers/settingsPayload\";\n\ntype AdminHeaderActionsProps = {\n variant: \"header\" | \"sidebar\";\n className?: string;\n};\n\ntype AdminAction = {\n key: string;\n label: string;\n onClick: () => void;\n title: string;\n icon?: ReactNode;\n};\n\nexport const StudioSparkleIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M7 1v2M7 11v2M1 7h2M11 7h2M2.93 2.93l1.41 1.41M9.66 9.66l1.41 1.41M2.93 11.07l1.41-1.41M9.66 4.34l1.41-1.41\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n <circle cx=\"7\" cy=\"7\" r=\"2\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n </svg>\n);\n\nconst ThemeToggleIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 3l0 18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 9l4.65 -4.65\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 14.3l7.37 -7.37\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 19.6l8.85 -8.85\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const AdminHeaderActions = ({ variant, className = \"\" }: AdminHeaderActionsProps) => {\n // const pathname = usePathname();\n const router = useRouter();\n const dispatch = useDispatch();\n const { data: session } = useSession();\n const { toggleThemeMode, themeMode } = useContext(LayoutContext);\n const { data: solidSettingsData } = useGetSolidSettingsQuery(undefined);\n const user = session?.user;\n const isAdmin = hasAnyRole(user?.roles, [\"Admin\"]);\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n const settingsMap = useMemo(() => getSettingsMap(solidSettingsData), [solidSettingsData]);\n const showThemeToggle = settingsMap?.showThemeToggle === true || settingsMap?.showThemeToggle === \"true\";\n // const showBack = /\\/admin\\/core\\/[^/]+\\/[^/]+\\/form\\/[^/]+/.test(pathname);\n\n const actions: AdminAction[] = [\n ...(isAdmin && isDev && !isStudioMode\n ? [{\n key: \"studio\",\n label: \"Studio\",\n onClick: () => {\n dispatch(enterStudioMode());\n router.push(\"/studio\");\n },\n title: \"Enter SolidX Studio\",\n icon: <StudioSparkleIcon />,\n }]\n : []),\n ...(showThemeToggle\n ? [{\n key: \"theme\",\n label: themeMode === \"dark\" ? \"Light Mode\" : \"Dark Mode\",\n onClick: toggleThemeMode,\n title: \"Toggle theme\",\n icon: <ThemeToggleIcon />,\n }]\n : []),\n // ...(showBack\n // ? [{\n // key: \"back\",\n // label: \"Back\",\n // onClick: () => router.back(),\n // title: \"Go back\",\n // }]\n // : []),\n ];\n\n if (!actions.length) {\n return null;\n }\n\n if (variant === \"sidebar\") {\n return (\n <div className={`solid-sidebar-mobile-actions md:hidden ${className}`.trim()}>\n {actions.map((action) => (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-sidebar-mobile-action\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.label}\n </button>\n ))}\n </div>\n );\n }\n\n return (\n <div className={`solid-admin-header-actions hidden md:flex ${className}`.trim()}>\n <BackendReconnectIndicator />\n {actions.map((action) => {\n if (action.key === \"studio\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-studio-trigger-btn\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.icon}\n <span className=\"solid-studio-trigger-label\">{action.label}</span>\n </button>\n );\n }\n\n if (action.key === \"theme\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-theme-toggle\"\n onClick={action.onClick}\n aria-label={action.title}\n title={action.title}\n >\n {action.icon}\n <span className=\"solid-sr-only\">{action.label}</span>\n </button>\n );\n }\n\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-back-btn\"\n onClick={action.onClick}\n aria-label={action.title}\n >\n {action.label}\n </button>\n );\n })}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"AdminHeaderActions.js","sourceRoot":"","sources":["../../../src/components/layout/AdminHeaderActions.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ReactNode, useContext, useMemo } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\n// import { usePathname } from \"../../hooks/usePathname\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { env } from \"../../adapters/env\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { enterStudioMode } from \"../../redux/features/solidStudioSlice\";\nimport { LayoutContext } from \"./context/layoutcontext\";\nimport { BackendReconnectIndicator } from \"../common/BackendReconnectIndicator\";\nimport { useGetSolidSettingsQuery } from \"../../redux/api/solidSettingsApi\";\nimport { getSettingsMap } from \"../../helpers/settingsPayload\";\n\ntype AdminHeaderActionsProps = {\n variant: \"header\" | \"sidebar\";\n className?: string;\n};\n\ntype AdminAction = {\n key: string;\n label: string;\n onClick: () => void;\n title: string;\n icon?: ReactNode;\n};\n\nexport const StudioSparkleIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M7 1v2M7 11v2M1 7h2M11 7h2M2.93 2.93l1.41 1.41M9.66 9.66l1.41 1.41M2.93 11.07l1.41-1.41M9.66 4.34l1.41-1.41\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n <circle cx=\"7\" cy=\"7\" r=\"2\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n </svg>\n);\n\nconst ThemeToggleIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 3l0 18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 9l4.65 -4.65\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 14.3l7.37 -7.37\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 19.6l8.85 -8.85\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const AdminHeaderActions = ({ variant, className = \"\" }: AdminHeaderActionsProps) => {\n // const pathname = usePathname();\n const router = useRouter();\n const dispatch = useDispatch();\n const { data: session } = useSession();\n const { toggleThemeMode, themeMode } = useContext(LayoutContext);\n const { data: solidSettingsData } = useGetSolidSettingsQuery(undefined);\n const user = session?.user;\n const isAdmin = hasAnyRole(user?.roles, [\"Admin\"]);\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n const settingsMap = useMemo(() => getSettingsMap(solidSettingsData), [solidSettingsData]);\n const showThemeToggle = settingsMap?.showThemeToggle === true || settingsMap?.showThemeToggle === \"true\";\n // const showBack = /\\/admin\\/core\\/[^/]+\\/[^/]+\\/form\\/[^/]+/.test(pathname);\n\n const actions: AdminAction[] = [\n ...(isAdmin && isDev && !isStudioMode\n ? [{\n key: \"studio\",\n label: \"Studio\",\n onClick: () => {\n dispatch(enterStudioMode());\n router.push(\"/studio\");\n },\n title: \"Enter SolidX Studio\",\n icon: <StudioSparkleIcon />,\n }]\n : []),\n ...(showThemeToggle\n ? [{\n key: \"theme\",\n label: themeMode === \"dark\" ? \"Light Mode\" : \"Dark Mode\",\n onClick: toggleThemeMode,\n title: \"Toggle theme\",\n icon: <ThemeToggleIcon />,\n }]\n : []),\n // ...(showBack\n // ? [{\n // key: \"back\",\n // label: \"Back\",\n // onClick: () => router.back(),\n // title: \"Go back\",\n // }]\n // : []),\n ];\n\n if (!actions.length) {\n return null;\n }\n\n if (variant === \"sidebar\") {\n return (\n <div className={`solid-sidebar-mobile-actions md:hidden ${className}`.trim()}>\n {actions.map((action) => (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-sidebar-mobile-action\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.label}\n </button>\n ))}\n </div>\n );\n }\n\n return (\n <div className={`solid-admin-header-actions max-md:hidden lg:flex ${className}`.trim()}>\n <BackendReconnectIndicator />\n {actions.map((action) => {\n if (action.key === \"studio\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-studio-trigger-btn\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.icon}\n <span className=\"solid-studio-trigger-label\">{action.label}</span>\n </button>\n );\n }\n\n if (action.key === \"theme\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-theme-toggle\"\n onClick={action.onClick}\n aria-label={action.title}\n title={action.title}\n >\n {action.icon}\n <span className=\"solid-sr-only\">{action.label}</span>\n </button>\n );\n }\n\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-back-btn\"\n onClick={action.onClick}\n aria-label={action.title}\n >\n {action.label}\n </button>\n );\n })}\n </div>\n );\n};\n"]}
@@ -112,7 +112,7 @@ export const AdminHeaderActions = ({ variant, className = "" }: AdminHeaderActio
112
112
  }
113
113
 
114
114
  return (
115
- <div className={`solid-admin-header-actions hidden md:flex ${className}`.trim()}>
115
+ <div className={`solid-admin-header-actions max-md:hidden lg:flex ${className}`.trim()}>
116
116
  <BackendReconnectIndicator />
117
117
  {actions.map((action) => {
118
118
  if (action.key === "studio") {
@@ -1,4 +1,14 @@
1
- export default function getAcceptedFileTypes(mediaTypes: string[]): {
2
- [k: string]: never[];
1
+ export type MediaConfig = {
2
+ mediaFileTypeDefinitions?: Array<{
3
+ mediaType: string;
4
+ extension: string;
5
+ }>;
3
6
  };
7
+ export declare const getAvailableMediaExtensionOptions: (mediaTypes?: string[] | null, mediaFileTypeDefinitions?: MediaConfig["mediaFileTypeDefinitions"] | null) => Array<{
8
+ label: string;
9
+ value: string;
10
+ }>;
11
+ export declare const getAllowedMediaTypesLabel: (mediaTypes?: string[] | null) => string;
12
+ export declare const getAllowedMediaExtensionsLabel: (mediaAllowedExtensions?: string[] | null) => string | null;
13
+ export default function getAcceptedFileTypes(mediaTypes?: string[] | null, mediaAllowedExtensions?: string[] | null, mediaConfig?: MediaConfig | null): Record<string, string[]>;
4
14
  //# sourceMappingURL=getAcceptedFileTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getAcceptedFileTypes.d.ts","sourceRoot":"","sources":["../../src/helpers/getAcceptedFileTypes.tsx"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE;;EAqBhE"}
1
+ {"version":3,"file":"getAcceptedFileTypes.d.ts","sourceRoot":"","sources":["../../src/helpers/getAcceptedFileTypes.tsx"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACtB,wBAAwB,CAAC,EAAE,KAAK,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACN,CAAC;AAuCF,eAAO,MAAM,iCAAiC,gBAAiB,MAAM,EAAE,GAAG,IAAI,6BAA6B,WAAW,CAAC,0BAA0B,CAAC,GAAG,IAAI,KAAG,MAAM;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKjM,CAAC;AAEF,eAAO,MAAM,yBAAyB,gBAAiB,MAAM,EAAE,GAAG,IAAI,KAAG,MAWxE,CAAC;AAEF,eAAO,MAAM,8BAA8B,4BAA6B,MAAM,EAAE,GAAG,IAAI,KAAG,MAAM,GAAG,IAOlG,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,sBAAsB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,4BA+BpJ"}
@@ -1,20 +1,76 @@
1
- export default function getAcceptedFileTypes(mediaTypes) {
2
- if (!mediaTypes || mediaTypes.length === 0)
3
- return {}; // Default empty
4
- var fileTypeMapping = {
5
- image: "image/*",
6
- audio: "audio/*",
7
- video: "video/*",
8
- pdf: "application/pdf",
9
- file: "",
10
- };
11
- // If "file" exists in mediaTypes, allow all files
12
- if (mediaTypes.includes("file")) {
1
+ var MEDIA_TYPE_LABELS = {
2
+ image: "Images",
3
+ audio: "Audio",
4
+ video: "Video",
5
+ file: "Documents and archives",
6
+ pdf: "PDF",
7
+ };
8
+ var normalizeExtensions = function (extensions) { return Array.from(new Set((Array.isArray(extensions) ? extensions : [])
9
+ .map(function (extension) { return String(extension || "").trim().toLowerCase().replace(/^\./, ""); })
10
+ .filter(Boolean))); };
11
+ var normalizeMediaTypes = function (mediaTypes) { return Array.from(new Set((Array.isArray(mediaTypes) ? mediaTypes : [])
12
+ .map(function (type) { return String(type || "").trim().toLowerCase(); })
13
+ .filter(Boolean))); };
14
+ var getCategoryExtensions = function (mediaTypes, mediaFileTypeDefinitions) {
15
+ var allowedMediaTypes = new Set(normalizeMediaTypes(mediaTypes));
16
+ if (allowedMediaTypes.size === 0) {
17
+ return [];
18
+ }
19
+ return normalizeExtensions((mediaFileTypeDefinitions !== null && mediaFileTypeDefinitions !== void 0 ? mediaFileTypeDefinitions : [])
20
+ .filter(function (fileType) { return allowedMediaTypes.has(String((fileType === null || fileType === void 0 ? void 0 : fileType.mediaType) || "").toLowerCase()); })
21
+ .map(function (fileType) { return String((fileType === null || fileType === void 0 ? void 0 : fileType.extension) || "").trim().toLowerCase(); }));
22
+ };
23
+ export var getAvailableMediaExtensionOptions = function (mediaTypes, mediaFileTypeDefinitions) {
24
+ return getCategoryExtensions(mediaTypes, mediaFileTypeDefinitions).map(function (extension) { return ({
25
+ label: ".".concat(extension),
26
+ value: extension,
27
+ }); });
28
+ };
29
+ export var getAllowedMediaTypesLabel = function (mediaTypes) {
30
+ var normalizedMediaTypes = normalizeMediaTypes(mediaTypes);
31
+ if (normalizedMediaTypes.length === 0) {
32
+ return "Any file";
33
+ }
34
+ var labels = normalizedMediaTypes.map(function (type) { return MEDIA_TYPE_LABELS[type] || type.toUpperCase(); });
35
+ return labels.length > 0 ? labels.join(", ") : "Any file";
36
+ };
37
+ export var getAllowedMediaExtensionsLabel = function (mediaAllowedExtensions) {
38
+ var selectedExtensions = normalizeExtensions(mediaAllowedExtensions);
39
+ if (selectedExtensions.length === 0) {
40
+ return null;
41
+ }
42
+ return selectedExtensions.map(function (extension) { return ".".concat(extension); }).join(", ");
43
+ };
44
+ export default function getAcceptedFileTypes(mediaTypes, mediaAllowedExtensions, mediaConfig) {
45
+ var effectiveExtensions = normalizeExtensions(mediaAllowedExtensions);
46
+ if (effectiveExtensions.length > 0) {
47
+ return {
48
+ "application/octet-stream": effectiveExtensions.map(function (extension) { return ".".concat(extension); }),
49
+ };
50
+ }
51
+ var normalizedMediaTypes = normalizeMediaTypes(mediaTypes);
52
+ if (normalizedMediaTypes.length === 0) {
53
+ return {};
54
+ }
55
+ var categoryExtensions = getCategoryExtensions(mediaTypes, mediaConfig === null || mediaConfig === void 0 ? void 0 : mediaConfig.mediaFileTypeDefinitions);
56
+ var allowedExtensions = categoryExtensions.map(function (extension) { return ".".concat(extension); });
57
+ var acceptGroups = [];
58
+ if (normalizedMediaTypes.includes("image"))
59
+ acceptGroups.push("image/*");
60
+ if (normalizedMediaTypes.includes("audio"))
61
+ acceptGroups.push("audio/*");
62
+ if (normalizedMediaTypes.includes("video"))
63
+ acceptGroups.push("video/*");
64
+ if (normalizedMediaTypes.includes("pdf"))
65
+ acceptGroups.push("application/pdf");
66
+ if (normalizedMediaTypes.includes("file"))
67
+ acceptGroups.push("application/*", "text/*");
68
+ if (acceptGroups.length === 0) {
13
69
  return {};
14
70
  }
15
- var acceptedTypes = mediaTypes
16
- .map(function (type) { return fileTypeMapping[type.toLowerCase()]; })
17
- .filter(Boolean); // Remove undefined values
18
- return acceptedTypes.length > 0 ? Object.fromEntries(acceptedTypes.map(function (type) { return [type, []]; })) : {};
71
+ return acceptGroups.reduce(function (acceptMap, acceptGroup) {
72
+ acceptMap[acceptGroup] = allowedExtensions;
73
+ return acceptMap;
74
+ }, {});
19
75
  }
20
76
  //# sourceMappingURL=getAcceptedFileTypes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getAcceptedFileTypes.js","sourceRoot":"","sources":["../../src/helpers/getAcceptedFileTypes.tsx"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,UAAoB;IAC7D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC,CAAC,gBAAgB;IAEvE,IAAM,eAAe,GAA2B;QAC5C,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,iBAAiB;QACtB,IAAI,EAAE,EAAE;KACX,CAAC;IAEF,kDAAkD;IAClD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC7B,OAAO,EAAE,CAAC;KACb;IAED,IAAM,aAAa,GAAG,UAAU;SAC3B,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAnC,CAAmC,CAAC;SAChD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B;IAEhD,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,CAAC,IAAI,EAAE,EAAE,CAAC,EAAV,CAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrG,CAAC","sourcesContent":["export default function getAcceptedFileTypes(mediaTypes: string[]) {\n if (!mediaTypes || mediaTypes.length === 0) return {}; // Default empty\n\n const fileTypeMapping: Record<string, string> = {\n image: \"image/*\",\n audio: \"audio/*\",\n video: \"video/*\",\n pdf: \"application/pdf\",\n file: \"\",\n };\n\n // If \"file\" exists in mediaTypes, allow all files\n if (mediaTypes.includes(\"file\")) {\n return {};\n }\n\n const acceptedTypes = mediaTypes\n .map(type => fileTypeMapping[type.toLowerCase()])\n .filter(Boolean); // Remove undefined values\n\n return acceptedTypes.length > 0 ? Object.fromEntries(acceptedTypes.map(type => [type, []])) : {};\n}"]}
1
+ {"version":3,"file":"getAcceptedFileTypes.js","sourceRoot":"","sources":["../../src/helpers/getAcceptedFileTypes.tsx"],"names":[],"mappings":"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","sourcesContent":["export type MediaConfig = {\n mediaFileTypeDefinitions?: Array<{\n mediaType: string;\n extension: string;\n }>;\n};\n\nconst MEDIA_TYPE_LABELS: Record<string, string> = {\n image: \"Images\",\n audio: \"Audio\",\n video: \"Video\",\n file: \"Documents and archives\",\n pdf: \"PDF\",\n};\n\nconst normalizeExtensions = (extensions?: string[] | null): string[] => Array.from(\n new Set(\n (Array.isArray(extensions) ? extensions : [])\n .map((extension) => String(extension || \"\").trim().toLowerCase().replace(/^\\./, \"\"))\n .filter(Boolean)\n )\n);\n\nconst normalizeMediaTypes = (mediaTypes?: string[] | null): string[] => Array.from(\n new Set(\n (Array.isArray(mediaTypes) ? mediaTypes : [])\n .map((type) => String(type || \"\").trim().toLowerCase())\n .filter(Boolean)\n )\n);\n\nconst getCategoryExtensions = (mediaTypes?: string[] | null, mediaFileTypeDefinitions?: MediaConfig[\"mediaFileTypeDefinitions\"] | null): string[] => {\n const allowedMediaTypes = new Set(normalizeMediaTypes(mediaTypes));\n if (allowedMediaTypes.size === 0) {\n return [];\n }\n\n return normalizeExtensions(\n (mediaFileTypeDefinitions ?? [])\n .filter((fileType) => allowedMediaTypes.has(String(fileType?.mediaType || \"\").toLowerCase()))\n .map((fileType) => String(fileType?.extension || \"\").trim().toLowerCase())\n );\n};\n\nexport const getAvailableMediaExtensionOptions = (mediaTypes?: string[] | null, mediaFileTypeDefinitions?: MediaConfig[\"mediaFileTypeDefinitions\"] | null): Array<{ label: string; value: string }> => {\n return getCategoryExtensions(mediaTypes, mediaFileTypeDefinitions).map((extension) => ({\n label: `.${extension}`,\n value: extension,\n }));\n};\n\nexport const getAllowedMediaTypesLabel = (mediaTypes?: string[] | null): string => {\n const normalizedMediaTypes = normalizeMediaTypes(mediaTypes);\n if (normalizedMediaTypes.length === 0) {\n return \"Any file\";\n }\n\n const labels = normalizedMediaTypes.map(\n (type) => MEDIA_TYPE_LABELS[type] || type.toUpperCase()\n );\n\n return labels.length > 0 ? labels.join(\", \") : \"Any file\";\n};\n\nexport const getAllowedMediaExtensionsLabel = (mediaAllowedExtensions?: string[] | null): string | null => {\n const selectedExtensions = normalizeExtensions(mediaAllowedExtensions);\n if (selectedExtensions.length === 0) {\n return null;\n }\n\n return selectedExtensions.map((extension) => `.${extension}`).join(\", \");\n};\n\nexport default function getAcceptedFileTypes(mediaTypes?: string[] | null, mediaAllowedExtensions?: string[] | null, mediaConfig?: MediaConfig | null) {\n const effectiveExtensions = normalizeExtensions(mediaAllowedExtensions);\n if (effectiveExtensions.length > 0) {\n return {\n \"application/octet-stream\": effectiveExtensions.map((extension) => `.${extension}`),\n };\n }\n\n const normalizedMediaTypes = normalizeMediaTypes(mediaTypes);\n if (normalizedMediaTypes.length === 0) {\n return {};\n }\n\n const categoryExtensions = getCategoryExtensions(mediaTypes, mediaConfig?.mediaFileTypeDefinitions);\n const allowedExtensions = categoryExtensions.map((extension) => `.${extension}`);\n const acceptGroups: string[] = [];\n\n if (normalizedMediaTypes.includes(\"image\")) acceptGroups.push(\"image/*\");\n if (normalizedMediaTypes.includes(\"audio\")) acceptGroups.push(\"audio/*\");\n if (normalizedMediaTypes.includes(\"video\")) acceptGroups.push(\"video/*\");\n if (normalizedMediaTypes.includes(\"pdf\")) acceptGroups.push(\"application/pdf\");\n if (normalizedMediaTypes.includes(\"file\")) acceptGroups.push(\"application/*\", \"text/*\");\n\n if (acceptGroups.length === 0) {\n return {};\n }\n\n return acceptGroups.reduce<Record<string, string[]>>((acceptMap, acceptGroup) => {\n acceptMap[acceptGroup] = allowedExtensions;\n return acceptMap;\n }, {});\n}\n"]}
@@ -1,22 +1,105 @@
1
- export default function getAcceptedFileTypes(mediaTypes: string[]) {
2
- if (!mediaTypes || mediaTypes.length === 0) return {}; // Default empty
3
-
4
- const fileTypeMapping: Record<string, string> = {
5
- image: "image/*",
6
- audio: "audio/*",
7
- video: "video/*",
8
- pdf: "application/pdf",
9
- file: "",
10
- };
11
-
12
- // If "file" exists in mediaTypes, allow all files
13
- if (mediaTypes.includes("file")) {
1
+ export type MediaConfig = {
2
+ mediaFileTypeDefinitions?: Array<{
3
+ mediaType: string;
4
+ extension: string;
5
+ }>;
6
+ };
7
+
8
+ const MEDIA_TYPE_LABELS: Record<string, string> = {
9
+ image: "Images",
10
+ audio: "Audio",
11
+ video: "Video",
12
+ file: "Documents and archives",
13
+ pdf: "PDF",
14
+ };
15
+
16
+ const normalizeExtensions = (extensions?: string[] | null): string[] => Array.from(
17
+ new Set(
18
+ (Array.isArray(extensions) ? extensions : [])
19
+ .map((extension) => String(extension || "").trim().toLowerCase().replace(/^\./, ""))
20
+ .filter(Boolean)
21
+ )
22
+ );
23
+
24
+ const normalizeMediaTypes = (mediaTypes?: string[] | null): string[] => Array.from(
25
+ new Set(
26
+ (Array.isArray(mediaTypes) ? mediaTypes : [])
27
+ .map((type) => String(type || "").trim().toLowerCase())
28
+ .filter(Boolean)
29
+ )
30
+ );
31
+
32
+ const getCategoryExtensions = (mediaTypes?: string[] | null, mediaFileTypeDefinitions?: MediaConfig["mediaFileTypeDefinitions"] | null): string[] => {
33
+ const allowedMediaTypes = new Set(normalizeMediaTypes(mediaTypes));
34
+ if (allowedMediaTypes.size === 0) {
35
+ return [];
36
+ }
37
+
38
+ return normalizeExtensions(
39
+ (mediaFileTypeDefinitions ?? [])
40
+ .filter((fileType) => allowedMediaTypes.has(String(fileType?.mediaType || "").toLowerCase()))
41
+ .map((fileType) => String(fileType?.extension || "").trim().toLowerCase())
42
+ );
43
+ };
44
+
45
+ export const getAvailableMediaExtensionOptions = (mediaTypes?: string[] | null, mediaFileTypeDefinitions?: MediaConfig["mediaFileTypeDefinitions"] | null): Array<{ label: string; value: string }> => {
46
+ return getCategoryExtensions(mediaTypes, mediaFileTypeDefinitions).map((extension) => ({
47
+ label: `.${extension}`,
48
+ value: extension,
49
+ }));
50
+ };
51
+
52
+ export const getAllowedMediaTypesLabel = (mediaTypes?: string[] | null): string => {
53
+ const normalizedMediaTypes = normalizeMediaTypes(mediaTypes);
54
+ if (normalizedMediaTypes.length === 0) {
55
+ return "Any file";
56
+ }
57
+
58
+ const labels = normalizedMediaTypes.map(
59
+ (type) => MEDIA_TYPE_LABELS[type] || type.toUpperCase()
60
+ );
61
+
62
+ return labels.length > 0 ? labels.join(", ") : "Any file";
63
+ };
64
+
65
+ export const getAllowedMediaExtensionsLabel = (mediaAllowedExtensions?: string[] | null): string | null => {
66
+ const selectedExtensions = normalizeExtensions(mediaAllowedExtensions);
67
+ if (selectedExtensions.length === 0) {
68
+ return null;
69
+ }
70
+
71
+ return selectedExtensions.map((extension) => `.${extension}`).join(", ");
72
+ };
73
+
74
+ export default function getAcceptedFileTypes(mediaTypes?: string[] | null, mediaAllowedExtensions?: string[] | null, mediaConfig?: MediaConfig | null) {
75
+ const effectiveExtensions = normalizeExtensions(mediaAllowedExtensions);
76
+ if (effectiveExtensions.length > 0) {
77
+ return {
78
+ "application/octet-stream": effectiveExtensions.map((extension) => `.${extension}`),
79
+ };
80
+ }
81
+
82
+ const normalizedMediaTypes = normalizeMediaTypes(mediaTypes);
83
+ if (normalizedMediaTypes.length === 0) {
14
84
  return {};
15
85
  }
16
86
 
17
- const acceptedTypes = mediaTypes
18
- .map(type => fileTypeMapping[type.toLowerCase()])
19
- .filter(Boolean); // Remove undefined values
87
+ const categoryExtensions = getCategoryExtensions(mediaTypes, mediaConfig?.mediaFileTypeDefinitions);
88
+ const allowedExtensions = categoryExtensions.map((extension) => `.${extension}`);
89
+ const acceptGroups: string[] = [];
90
+
91
+ if (normalizedMediaTypes.includes("image")) acceptGroups.push("image/*");
92
+ if (normalizedMediaTypes.includes("audio")) acceptGroups.push("audio/*");
93
+ if (normalizedMediaTypes.includes("video")) acceptGroups.push("video/*");
94
+ if (normalizedMediaTypes.includes("pdf")) acceptGroups.push("application/pdf");
95
+ if (normalizedMediaTypes.includes("file")) acceptGroups.push("application/*", "text/*");
96
+
97
+ if (acceptGroups.length === 0) {
98
+ return {};
99
+ }
20
100
 
21
- return acceptedTypes.length > 0 ? Object.fromEntries(acceptedTypes.map(type => [type, []])) : {};
22
- }
101
+ return acceptGroups.reduce<Record<string, string[]>>((acceptMap, acceptGroup) => {
102
+ acceptMap[acceptGroup] = allowedExtensions;
103
+ return acceptMap;
104
+ }, {});
105
+ }
@@ -27,7 +27,7 @@ import { DefaultSelectionStaticAutocompleteFormEditWidget, DefaultSelectionStati
27
27
  import { DefaultShortTextFormEditWidget, DefaultShortTextFormViewWidget, MaskedShortTextFormViewWidget, MaskedShortTextFormEditWidget, MaskedShortTextListViewWidget } from "../components/core/form/fields/SolidShortTextField";
28
28
  import { DefaultRelationManyToOneFormEditWidget, DefaultRelationManyToOneFormViewWidget, PseudoRelationManyToOneFormWidget } from "../components/core/form/fields/relations/SolidRelationManyToOneField";
29
29
  import { DefaultRelationOneToManyFormEditWidget, DefaultRelationOneToManyFormViewWidget, PseudoRelationOneToManyFormWidget } from "../components/core/form/fields/relations/SolidRelationOneToManyField";
30
- import { DefaultRelationManyToManyAutoCompleteFormEditWidget, DefaultRelationManyToManyCheckBoxFormEditWidget, DefaultRelationManyToManyListFormEditWidget } from "../components/core/form/fields/relations/SolidRelationManyToManyField";
30
+ import { DefaultRelationManyToManyAutoCompleteFormEditWidget, DefaultRelationManyToManyCheckBoxFormEditWidget, DefaultRelationManyToManyFormViewWidget, DefaultRelationManyToManyListFormEditWidget } from "../components/core/form/fields/relations/SolidRelationManyToManyField";
31
31
  import { DefaultBooleanListWidget } from "../components/core/list/columns/SolidBooleanColumn";
32
32
  import { DefaultTextListWidget } from "../components/core/list/columns/SolidShortTextColumn";
33
33
  import { DefaultMediaSingleListWidget } from "../components/core/list/columns/SolidMediaSingleColumn";
@@ -256,6 +256,7 @@ registerExtensionComponent("DefaultMediaMultipleFormViewWidget", DefaultMediaMul
256
256
  // - relation.many2one
257
257
  registerExtensionComponent("DefaultRelationManyToOneFormViewWidget", DefaultRelationManyToOneFormViewWidget, ExtensionComponentTypes.formFieldViewWidget);
258
258
  // - relation.many2many
259
+ registerExtensionComponent("DefaultRelationManyToManyFormViewWidget", DefaultRelationManyToManyFormViewWidget, ExtensionComponentTypes.formFieldViewWidget);
259
260
  // - relation.one2many
260
261
  registerExtensionComponent("DefaultRelationOneToManyFormViewWidget", DefaultRelationOneToManyFormViewWidget, ExtensionComponentTypes.formFieldViewWidget);
261
262
  // ...