@rebasepro/studio 0.6.0 → 0.6.1

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/index.umd.js CHANGED
@@ -4819,194 +4819,201 @@ return result;
4819
4819
  open: helpOpen,
4820
4820
  onOpenChange: setHelpOpen,
4821
4821
  maxWidth: "3xl",
4822
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogContent, {
4823
- className: "p-4 sm:p-6 lg:p-8 flex flex-col gap-6",
4824
- children: [
4825
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4826
- variant: "h5",
4827
- className: "mb-2",
4828
- children: t("studio_policy_help_title")
4829
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4830
- className: "text-text-secondary dark:text-text-secondary-dark",
4831
- children: t("studio_policy_help_intro")
4832
- })] }),
4833
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4834
- className: "flex flex-col gap-4",
4835
- children: [
4836
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Paper, {
4837
- className: (0, _rebasepro_ui.cls)("p-4 sm:p-5 flex flex-col gap-1", _rebasepro_ui.defaultBorderMixin),
4838
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4839
- variant: "subtitle2",
4840
- className: "text-primary dark:text-primary-light font-medium",
4841
- children: t("studio_policy_help_step1_title")
4842
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4843
- variant: "body2",
4844
- className: "text-text-secondary dark:text-text-secondary-dark",
4845
- children: t("studio_policy_help_step1_desc")
4846
- })]
4847
- }),
4848
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Paper, {
4849
- className: (0, _rebasepro_ui.cls)("p-4 sm:p-5 flex flex-col gap-1", _rebasepro_ui.defaultBorderMixin),
4850
- children: [
4851
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4852
- variant: "subtitle2",
4853
- className: "text-primary dark:text-primary-light font-medium",
4854
- children: t("studio_policy_help_step2_title")
4855
- }),
4856
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4857
- variant: "body2",
4858
- className: "text-text-secondary dark:text-text-secondary-dark mb-1",
4859
- children: t("studio_policy_help_step2_desc")
4860
- }),
4861
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", {
4862
- className: "list-disc pl-5 space-y-1 text-sm text-text-secondary dark:text-text-secondary-dark",
4863
- children: [
4864
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [
4865
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: "public" }),
4866
- ": ",
4867
- t("studio_policy_help_role_public")
4868
- ] }),
4869
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [
4870
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: "authenticated" }),
4871
- ": ",
4872
- t("studio_policy_help_role_authenticated")
4873
- ] }),
4874
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [
4875
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: "anon" }),
4876
- ": ",
4877
- t("studio_policy_help_role_anon")
4878
- ] })
4879
- ]
4880
- })
4881
- ]
4882
- }),
4883
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Paper, {
4884
- className: (0, _rebasepro_ui.cls)("p-4 sm:p-5 flex flex-col gap-1", _rebasepro_ui.defaultBorderMixin),
4885
- children: [
4886
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4887
- variant: "subtitle2",
4888
- className: "text-primary dark:text-primary-light font-medium",
4889
- children: t("studio_policy_help_step3_title")
4890
- }),
4891
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4892
- variant: "body2",
4893
- className: "text-text-secondary dark:text-text-secondary-dark mb-1",
4894
- children: t("studio_policy_help_step3_desc")
4895
- }),
4896
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4897
- className: (0, _rebasepro_ui.cls)("bg-surface-100 dark:bg-surface-950 px-3 py-2 rounded-md font-mono text-sm my-2", _rebasepro_ui.defaultBorderMixin),
4898
- children: "Example: auth.uid() = user_id"
4899
- }),
4900
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4901
- variant: "caption",
4902
- className: "text-text-secondary dark:text-text-secondary-dark",
4903
- children: t("studio_policy_help_step3_example")
4904
- })
4905
- ]
4906
- }),
4907
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Paper, {
4908
- className: (0, _rebasepro_ui.cls)("p-4 sm:p-5 flex flex-col gap-1", _rebasepro_ui.defaultBorderMixin),
4909
- children: [
4910
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4911
- variant: "subtitle2",
4912
- className: "text-primary dark:text-primary-light font-medium",
4913
- children: t("studio_policy_help_step4_title")
4914
- }),
4915
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4916
- variant: "body2",
4917
- className: "text-text-secondary dark:text-text-secondary-dark mb-1",
4918
- children: t("studio_policy_help_step4_desc")
4919
- }),
4920
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4921
- className: (0, _rebasepro_ui.cls)("bg-surface-100 dark:bg-surface-950 px-3 py-2 rounded-md font-mono text-sm my-2", _rebasepro_ui.defaultBorderMixin),
4922
- children: "Example: auth.uid() = user_id"
4923
- }),
4924
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4925
- variant: "caption",
4926
- className: "text-text-secondary dark:text-text-secondary-dark",
4927
- children: t("studio_policy_help_step4_example")
4928
- })
4929
- ]
4930
- }),
4931
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Paper, {
4932
- className: (0, _rebasepro_ui.cls)("p-4 sm:p-5 flex flex-col gap-2 bg-primary/5 dark:bg-primary-bg-dark/10", _rebasepro_ui.defaultBorderMixin),
4933
- children: [
4934
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4822
+ children: [
4823
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.DialogTitle, {
4824
+ hidden: true,
4825
+ children: "Row-Level Security Help"
4826
+ }),
4827
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogContent, {
4828
+ className: "p-4 sm:p-6 lg:p-8 flex flex-col gap-6",
4829
+ children: [
4830
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4831
+ variant: "h5",
4832
+ className: "mb-2",
4833
+ children: t("studio_policy_help_title")
4834
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4835
+ className: "text-text-secondary dark:text-text-secondary-dark",
4836
+ children: t("studio_policy_help_intro")
4837
+ })] }),
4838
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4839
+ className: "flex flex-col gap-4",
4840
+ children: [
4841
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Paper, {
4842
+ className: (0, _rebasepro_ui.cls)("p-4 sm:p-5 flex flex-col gap-1", _rebasepro_ui.defaultBorderMixin),
4843
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4935
4844
  variant: "subtitle2",
4936
4845
  className: "text-primary dark:text-primary-light font-medium",
4937
- children: t("studio_policy_help_auth_vars_title")
4938
- }),
4939
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4846
+ children: t("studio_policy_help_step1_title")
4847
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4940
4848
  variant: "body2",
4941
4849
  className: "text-text-secondary dark:text-text-secondary-dark",
4942
- children: t("studio_policy_help_auth_vars_desc")
4943
- }),
4944
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", {
4945
- className: "list-disc pl-5 space-y-2 text-sm text-text-secondary dark:text-text-secondary-dark font-normal",
4946
- children: [
4947
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4948
- className: "bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap",
4949
- children: "auth.uid()"
4950
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4951
- className: "block mt-0.5",
4952
- children: ["Returns the current user's ID as text. Example: ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4953
- className: "bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]",
4954
- children: "auth.uid() = user_id"
4955
- })]
4956
- })] }),
4957
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4958
- className: "bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap",
4959
- children: "auth.jwt()"
4960
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4961
- className: "block mt-0.5",
4962
- children: ["Returns the full JWT payload as JSONB so you can check custom claims. Example: ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4963
- className: "bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]",
4964
- children: "auth.jwt() ->> 'email' = 'admin@example.com'"
4965
- })]
4966
- })] }),
4967
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4968
- className: "bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap",
4969
- children: "auth.roles()"
4970
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4971
- className: "block mt-0.5",
4972
- children: ["Returns the user's role IDs as a comma-separated string. Best used with: ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4973
- className: "bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]",
4974
- children: "string_to_array(auth.roles(), ',') @> ARRAY['admin']"
4975
- })]
4976
- })] })
4977
- ]
4978
- })
4979
- ]
4980
- })
4981
- ]
4982
- }),
4983
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4984
- className: (0, _rebasepro_ui.cls)("mt-2 flex flex-col sm:flex-row justify-between items-start sm:items-center bg-primary/5 dark:bg-primary-bg-dark/10 p-4 rounded-xl border border-primary/10 dark:border-primary/20", _rebasepro_ui.defaultBorderMixin),
4985
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4986
- variant: "body2",
4987
- className: "text-primary dark:text-primary-light mb-4 sm:mb-0 max-w-md",
4988
- children: t("studio_policy_help_docs_cta")
4989
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
4990
- component: "a",
4991
- href: "https://www.postgresql.org/docs/current/sql-createpolicy.html",
4992
- target: "_blank",
4993
- variant: "outlined",
4994
- color: "primary",
4995
- size: "small",
4996
- className: "whitespace-nowrap flex-shrink-0",
4997
- children: t("studio_policy_help_read_docs")
4998
- })]
4850
+ children: t("studio_policy_help_step1_desc")
4851
+ })]
4852
+ }),
4853
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Paper, {
4854
+ className: (0, _rebasepro_ui.cls)("p-4 sm:p-5 flex flex-col gap-1", _rebasepro_ui.defaultBorderMixin),
4855
+ children: [
4856
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4857
+ variant: "subtitle2",
4858
+ className: "text-primary dark:text-primary-light font-medium",
4859
+ children: t("studio_policy_help_step2_title")
4860
+ }),
4861
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4862
+ variant: "body2",
4863
+ className: "text-text-secondary dark:text-text-secondary-dark mb-1",
4864
+ children: t("studio_policy_help_step2_desc")
4865
+ }),
4866
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", {
4867
+ className: "list-disc pl-5 space-y-1 text-sm text-text-secondary dark:text-text-secondary-dark",
4868
+ children: [
4869
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [
4870
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: "public" }),
4871
+ ": ",
4872
+ t("studio_policy_help_role_public")
4873
+ ] }),
4874
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [
4875
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: "authenticated" }),
4876
+ ": ",
4877
+ t("studio_policy_help_role_authenticated")
4878
+ ] }),
4879
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [
4880
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: "anon" }),
4881
+ ": ",
4882
+ t("studio_policy_help_role_anon")
4883
+ ] })
4884
+ ]
4885
+ })
4886
+ ]
4887
+ }),
4888
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Paper, {
4889
+ className: (0, _rebasepro_ui.cls)("p-4 sm:p-5 flex flex-col gap-1", _rebasepro_ui.defaultBorderMixin),
4890
+ children: [
4891
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4892
+ variant: "subtitle2",
4893
+ className: "text-primary dark:text-primary-light font-medium",
4894
+ children: t("studio_policy_help_step3_title")
4895
+ }),
4896
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4897
+ variant: "body2",
4898
+ className: "text-text-secondary dark:text-text-secondary-dark mb-1",
4899
+ children: t("studio_policy_help_step3_desc")
4900
+ }),
4901
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4902
+ className: (0, _rebasepro_ui.cls)("bg-surface-100 dark:bg-surface-950 px-3 py-2 rounded-md font-mono text-sm my-2", _rebasepro_ui.defaultBorderMixin),
4903
+ children: "Example: auth.uid() = user_id"
4904
+ }),
4905
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4906
+ variant: "caption",
4907
+ className: "text-text-secondary dark:text-text-secondary-dark",
4908
+ children: t("studio_policy_help_step3_example")
4909
+ })
4910
+ ]
4911
+ }),
4912
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Paper, {
4913
+ className: (0, _rebasepro_ui.cls)("p-4 sm:p-5 flex flex-col gap-1", _rebasepro_ui.defaultBorderMixin),
4914
+ children: [
4915
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4916
+ variant: "subtitle2",
4917
+ className: "text-primary dark:text-primary-light font-medium",
4918
+ children: t("studio_policy_help_step4_title")
4919
+ }),
4920
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4921
+ variant: "body2",
4922
+ className: "text-text-secondary dark:text-text-secondary-dark mb-1",
4923
+ children: t("studio_policy_help_step4_desc")
4924
+ }),
4925
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4926
+ className: (0, _rebasepro_ui.cls)("bg-surface-100 dark:bg-surface-950 px-3 py-2 rounded-md font-mono text-sm my-2", _rebasepro_ui.defaultBorderMixin),
4927
+ children: "Example: auth.uid() = user_id"
4928
+ }),
4929
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4930
+ variant: "caption",
4931
+ className: "text-text-secondary dark:text-text-secondary-dark",
4932
+ children: t("studio_policy_help_step4_example")
4933
+ })
4934
+ ]
4935
+ }),
4936
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Paper, {
4937
+ className: (0, _rebasepro_ui.cls)("p-4 sm:p-5 flex flex-col gap-2 bg-primary/5 dark:bg-primary-bg-dark/10", _rebasepro_ui.defaultBorderMixin),
4938
+ children: [
4939
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4940
+ variant: "subtitle2",
4941
+ className: "text-primary dark:text-primary-light font-medium",
4942
+ children: t("studio_policy_help_auth_vars_title")
4943
+ }),
4944
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4945
+ variant: "body2",
4946
+ className: "text-text-secondary dark:text-text-secondary-dark",
4947
+ children: t("studio_policy_help_auth_vars_desc")
4948
+ }),
4949
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", {
4950
+ className: "list-disc pl-5 space-y-2 text-sm text-text-secondary dark:text-text-secondary-dark font-normal",
4951
+ children: [
4952
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4953
+ className: "bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap",
4954
+ children: "auth.uid()"
4955
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4956
+ className: "block mt-0.5",
4957
+ children: ["Returns the current user's ID as text. Example: ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4958
+ className: "bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]",
4959
+ children: "auth.uid() = user_id"
4960
+ })]
4961
+ })] }),
4962
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4963
+ className: "bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap",
4964
+ children: "auth.jwt()"
4965
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4966
+ className: "block mt-0.5",
4967
+ children: ["Returns the full JWT payload as JSONB so you can check custom claims. Example: ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4968
+ className: "bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]",
4969
+ children: "auth.jwt() ->> 'email' = 'admin@example.com'"
4970
+ })]
4971
+ })] }),
4972
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4973
+ className: "bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap",
4974
+ children: "auth.roles()"
4975
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4976
+ className: "block mt-0.5",
4977
+ children: ["Returns the user's role IDs as a comma-separated string. Best used with: ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", {
4978
+ className: "bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]",
4979
+ children: "string_to_array(auth.roles(), ',') @> ARRAY['admin']"
4980
+ })]
4981
+ })] })
4982
+ ]
4983
+ })
4984
+ ]
4985
+ })
4986
+ ]
4987
+ }),
4988
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4989
+ className: (0, _rebasepro_ui.cls)("mt-2 flex flex-col sm:flex-row justify-between items-start sm:items-center bg-primary/5 dark:bg-primary-bg-dark/10 p-4 rounded-xl border border-primary/10 dark:border-primary/20", _rebasepro_ui.defaultBorderMixin),
4990
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
4991
+ variant: "body2",
4992
+ className: "text-primary dark:text-primary-light mb-4 sm:mb-0 max-w-md",
4993
+ children: t("studio_policy_help_docs_cta")
4994
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
4995
+ component: "a",
4996
+ href: "https://www.postgresql.org/docs/current/sql-createpolicy.html",
4997
+ target: "_blank",
4998
+ variant: "outlined",
4999
+ color: "primary",
5000
+ size: "small",
5001
+ className: "whitespace-nowrap flex-shrink-0",
5002
+ children: t("studio_policy_help_read_docs")
5003
+ })]
5004
+ })
5005
+ ]
5006
+ }),
5007
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.DialogActions, {
5008
+ className: "p-4 sm:px-6 sm:pb-6 pt-0 border-t-0",
5009
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
5010
+ onClick: () => setHelpOpen(false),
5011
+ variant: "filled",
5012
+ color: "primary",
5013
+ children: t("studio_policy_help_got_it")
4999
5014
  })
5000
- ]
5001
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.DialogActions, {
5002
- className: "p-4 sm:px-6 sm:pb-6 pt-0 border-t-0",
5003
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
5004
- onClick: () => setHelpOpen(false),
5005
- variant: "filled",
5006
- color: "primary",
5007
- children: t("studio_policy_help_got_it")
5008
5015
  })
5009
- })]
5016
+ ]
5010
5017
  })
5011
5018
  ] });
5012
5019
  };
@@ -6180,30 +6187,37 @@ return result;
6180
6187
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Dialog, {
6181
6188
  open: deleteDialogOpen,
6182
6189
  onOpenChange: setDeleteDialogOpen,
6183
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogContent, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
6184
- variant: "subtitle1",
6185
- className: "mb-2",
6186
- children: "Delete File?"
6187
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Typography, {
6188
- className: "text-surface-accent-600 dark:text-surface-accent-400",
6189
- children: [
6190
- "Are you sure you want to delete \"",
6191
- file.name,
6192
- "\"? This action cannot be undone."
6193
- ]
6194
- })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogActions, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
6195
- variant: "text",
6196
- onClick: () => setDeleteDialogOpen(false),
6197
- children: "Cancel"
6198
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
6199
- variant: "filled",
6200
- color: "error",
6201
- onClick: () => {
6202
- setDeleteDialogOpen(false);
6203
- onDelete();
6204
- },
6205
- children: "Delete"
6206
- })] })]
6190
+ children: [
6191
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.DialogTitle, {
6192
+ hidden: true,
6193
+ children: "Delete File"
6194
+ }),
6195
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogContent, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
6196
+ variant: "subtitle1",
6197
+ className: "mb-2",
6198
+ children: "Delete File?"
6199
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Typography, {
6200
+ className: "text-surface-accent-600 dark:text-surface-accent-400",
6201
+ children: [
6202
+ "Are you sure you want to delete \"",
6203
+ file.name,
6204
+ "\"? This action cannot be undone."
6205
+ ]
6206
+ })] }),
6207
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogActions, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
6208
+ variant: "text",
6209
+ onClick: () => setDeleteDialogOpen(false),
6210
+ children: "Cancel"
6211
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
6212
+ variant: "filled",
6213
+ color: "error",
6214
+ onClick: () => {
6215
+ setDeleteDialogOpen(false);
6216
+ onDelete();
6217
+ },
6218
+ children: "Delete"
6219
+ })] })
6220
+ ]
6207
6221
  })] });
6208
6222
  }
6209
6223
  var StorageView$1;
@@ -7094,31 +7108,38 @@ return result;
7094
7108
  setDeleteDialogTarget(null);
7095
7109
  }
7096
7110
  },
7097
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogContent, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
7098
- variant: "subtitle1",
7099
- className: "font-semibold mb-2",
7100
- children: deleteDialogTarget === "selection" ? `Delete ${selectedPaths.size} item${selectedPaths.size !== 1 ? "s" : ""}?` : deleteDialogTarget ? `Delete folder "${deleteDialogTarget.name}"?` : "Delete?"
7101
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
7102
- variant: "body2",
7103
- color: "secondary",
7104
- children: deleteDialogTarget === "selection" ? "This will permanently delete all selected files and folders, including their contents. This action cannot be undone." : "This will permanently delete the folder and all of its contents. This action cannot be undone."
7105
- })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogActions, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
7106
- variant: "text",
7107
- onClick: () => {
7108
- setDeleteDialogOpen(false);
7109
- setDeleteDialogTarget(null);
7110
- },
7111
- disabled: deleting,
7112
- children: "Cancel"
7113
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.LoadingButton, {
7114
- color: "error",
7115
- loading: deleting,
7116
- onClick: deleteDialogTarget === "selection" ? handleBulkDelete : handleConfirmDeleteFolder,
7117
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Trash2Icon, {
7118
- size: 14,
7119
- className: "mr-1"
7120
- }), "Delete"]
7121
- })] })]
7111
+ children: [
7112
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.DialogTitle, {
7113
+ hidden: true,
7114
+ children: "Delete Confirmation"
7115
+ }),
7116
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogContent, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
7117
+ variant: "subtitle1",
7118
+ className: "font-semibold mb-2",
7119
+ children: deleteDialogTarget === "selection" ? `Delete ${selectedPaths.size} item${selectedPaths.size !== 1 ? "s" : ""}?` : deleteDialogTarget ? `Delete folder "${deleteDialogTarget.name}"?` : "Delete?"
7120
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
7121
+ variant: "body2",
7122
+ color: "secondary",
7123
+ children: deleteDialogTarget === "selection" ? "This will permanently delete all selected files and folders, including their contents. This action cannot be undone." : "This will permanently delete the folder and all of its contents. This action cannot be undone."
7124
+ })] }),
7125
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogActions, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
7126
+ variant: "text",
7127
+ onClick: () => {
7128
+ setDeleteDialogOpen(false);
7129
+ setDeleteDialogTarget(null);
7130
+ },
7131
+ disabled: deleting,
7132
+ children: "Cancel"
7133
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.LoadingButton, {
7134
+ color: "error",
7135
+ loading: deleting,
7136
+ onClick: deleteDialogTarget === "selection" ? handleBulkDelete : handleConfirmDeleteFolder,
7137
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Trash2Icon, {
7138
+ size: 14,
7139
+ className: "mr-1"
7140
+ }), "Delete"]
7141
+ })] })
7142
+ ]
7122
7143
  }),
7123
7144
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Dialog, {
7124
7145
  open: newFolderDialogOpen,
@@ -7128,13 +7149,12 @@ return result;
7128
7149
  setNewFolderName("");
7129
7150
  }
7130
7151
  },
7131
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogContent, { children: [
7132
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Typography, {
7133
- variant: "subtitle1",
7134
- className: "font-semibold mb-4",
7152
+ children: [
7153
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.DialogTitle, {
7154
+ hidden: true,
7135
7155
  children: "New Folder"
7136
7156
  }),
7137
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.TextField, {
7157
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogContent, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.TextField, {
7138
7158
  autoFocus: true,
7139
7159
  size: "small",
7140
7160
  label: "Folder name",
@@ -7148,8 +7168,7 @@ return result;
7148
7168
  },
7149
7169
  disabled: creatingFolder,
7150
7170
  placeholder: "Enter folder name"
7151
- }),
7152
- currentPath && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Typography, {
7171
+ }), currentPath && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.Typography, {
7153
7172
  variant: "caption",
7154
7173
  color: "secondary",
7155
7174
  className: "mt-2",
@@ -7161,25 +7180,26 @@ return result;
7161
7180
  "/"
7162
7181
  ]
7163
7182
  })]
7164
- })
7165
- ] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogActions, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
7166
- variant: "text",
7167
- onClick: () => {
7168
- setNewFolderDialogOpen(false);
7169
- setNewFolderName("");
7170
- },
7171
- disabled: creatingFolder,
7172
- children: "Cancel"
7173
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.LoadingButton, {
7174
- color: "primary",
7175
- loading: creatingFolder,
7176
- disabled: !newFolderName.trim(),
7177
- onClick: handleCreateFolder,
7178
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.FolderPlusIcon, {
7179
- size: 14,
7180
- className: "mr-1"
7181
- }), "Create"]
7182
- })] })]
7183
+ })] }),
7184
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.DialogActions, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.Button, {
7185
+ variant: "text",
7186
+ onClick: () => {
7187
+ setNewFolderDialogOpen(false);
7188
+ setNewFolderName("");
7189
+ },
7190
+ disabled: creatingFolder,
7191
+ children: "Cancel"
7192
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_rebasepro_ui.LoadingButton, {
7193
+ color: "primary",
7194
+ loading: creatingFolder,
7195
+ disabled: !newFolderName.trim(),
7196
+ onClick: handleCreateFolder,
7197
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_rebasepro_ui.FolderPlusIcon, {
7198
+ size: 14,
7199
+ className: "mr-1"
7200
+ }), "Create"]
7201
+ })] })
7202
+ ]
7183
7203
  })
7184
7204
  ]
7185
7205
  });