@stackframe/stack 2.4.4 → 2.4.6

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.
@@ -4,6 +4,6 @@ import React__default from 'react';
4
4
  declare function CardFrame({ children, fullPage }: {
5
5
  children: React__default.ReactNode;
6
6
  fullPage?: boolean;
7
- }): string | number | boolean | Iterable<React__default.ReactNode> | Promise<React__default.AwaitedReactNode> | react_jsx_runtime.JSX.Element | null | undefined;
7
+ }): string | number | boolean | react_jsx_runtime.JSX.Element | Iterable<React__default.ReactNode> | Promise<React__default.AwaitedReactNode> | null | undefined;
8
8
 
9
9
  export { CardFrame as default };
@@ -4,6 +4,6 @@ import React__default from 'react';
4
4
  declare function CardFrame({ children, fullPage }: {
5
5
  children: React__default.ReactNode;
6
6
  fullPage?: boolean;
7
- }): string | number | boolean | Iterable<React__default.ReactNode> | Promise<React__default.AwaitedReactNode> | react_jsx_runtime.JSX.Element | null | undefined;
7
+ }): string | number | boolean | react_jsx_runtime.JSX.Element | Iterable<React__default.ReactNode> | Promise<React__default.AwaitedReactNode> | null | undefined;
8
8
 
9
9
  export { CardFrame as default };
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
 
20
30
  // src/components/user-avatar.tsx
@@ -25,12 +35,20 @@ __export(user_avatar_exports, {
25
35
  module.exports = __toCommonJS(user_avatar_exports);
26
36
  var import_rx = require("react-icons/rx");
27
37
  var import__ = require("..");
38
+ var import_constants = require("../utils/constants");
39
+ var import_styled_components = __toESM(require("styled-components"));
28
40
  var import_jsx_runtime = require("react/jsx-runtime");
41
+ var StyledIcon = (0, import_styled_components.default)(import_rx.RxPerson)`
42
+ color: ${import_constants.SECONDARY_FONT_COLORS.light};
43
+ html[data-stack-theme='dark'] & {
44
+ color: ${import_constants.SECONDARY_FONT_COLORS.dark};
45
+ }
46
+ `;
29
47
  function UserAvatar(props) {
30
48
  const user = props.user;
31
49
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import__.Avatar, { style: { height: props.size, width: props.size }, children: [
32
50
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.AvatarImage, { src: user?.profileImageUrl || "" }),
33
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.AvatarFallback, { children: user ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.Text, { style: { fontWeight: 500 }, children: (user?.displayName || user?.primaryEmail)?.slice(0, 2).toUpperCase() }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_rx.RxPerson, { size: props.size }) })
51
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.AvatarFallback, { children: user ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.Text, { style: { fontWeight: 500 }, children: (user?.displayName || user?.primaryEmail)?.slice(0, 2).toUpperCase() }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StyledIcon, { size: props.size }) })
34
52
  ] });
35
53
  }
36
54
  //# sourceMappingURL=user-avatar.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/user-avatar.tsx"],"sourcesContent":["import { RxPerson } from \"react-icons/rx\";\nimport { Avatar, AvatarFallback, AvatarImage, Text } from \"..\";\nimport { User } from \"../lib/stack-app\";\n\nexport default function UserAvatar(props: { size?: number, user: User | null }) {\n const user = props.user;\n return (\n <Avatar style={{ height: props.size, width: props.size }}>\n <AvatarImage src={user?.profileImageUrl || ''} />\n <AvatarFallback>\n {user ? \n <Text style={{ fontWeight: 500 }}>\n {(user?.displayName || user?.primaryEmail)?.slice(0, 2).toUpperCase()}\n </Text> :\n <RxPerson size={props.size} />}\n </AvatarFallback>\n </Avatar>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAyB;AACzB,eAA0D;AAMtD;AAHW,SAAR,WAA4B,OAA6C;AAC9E,QAAM,OAAO,MAAM;AACnB,SACE,6CAAC,mBAAO,OAAO,EAAE,QAAQ,MAAM,MAAM,OAAO,MAAM,KAAK,GACrD;AAAA,gDAAC,wBAAY,KAAK,MAAM,mBAAmB,IAAI;AAAA,IAC/C,4CAAC,2BACE,iBACC,4CAAC,iBAAK,OAAO,EAAE,YAAY,IAAI,GAC3B,iBAAM,eAAe,MAAM,eAAe,MAAM,GAAG,CAAC,EAAE,YAAY,GACtE,IACA,4CAAC,sBAAS,MAAM,MAAM,MAAM,GAChC;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/user-avatar.tsx"],"sourcesContent":["import { RxPerson } from \"react-icons/rx\";\nimport { Avatar, AvatarFallback, AvatarImage, Text } from \"..\";\nimport { User } from \"../lib/stack-app\";\nimport { SECONDARY_FONT_COLORS } from \"../utils/constants\";\nimport styled from \"styled-components\";\n\n\nconst StyledIcon = styled(RxPerson)`\n color: ${SECONDARY_FONT_COLORS.light};\n html[data-stack-theme='dark'] & {\n color: ${SECONDARY_FONT_COLORS.dark};\n }\n`;\n\nexport default function UserAvatar(props: { size?: number, user: User | null }) {\n const user = props.user;\n return (\n <Avatar style={{ height: props.size, width: props.size }}>\n <AvatarImage src={user?.profileImageUrl || ''} />\n <AvatarFallback>\n {user ? \n <Text style={{ fontWeight: 500 }}>\n {(user?.displayName || user?.primaryEmail)?.slice(0, 2).toUpperCase()}\n </Text> :\n <StyledIcon size={props.size} />}\n </AvatarFallback>\n </Avatar>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAyB;AACzB,eAA0D;AAE1D,uBAAsC;AACtC,+BAAmB;AAaf;AAVJ,IAAM,iBAAa,yBAAAA,SAAO,kBAAQ;AAAA,WACvB,uCAAsB,KAAK;AAAA;AAAA,aAEzB,uCAAsB,IAAI;AAAA;AAAA;AAIxB,SAAR,WAA4B,OAA6C;AAC9E,QAAM,OAAO,MAAM;AACnB,SACE,6CAAC,mBAAO,OAAO,EAAE,QAAQ,MAAM,MAAM,OAAO,MAAM,KAAK,GACrD;AAAA,gDAAC,wBAAY,KAAK,MAAM,mBAAmB,IAAI;AAAA,IAC/C,4CAAC,2BACE,iBACC,4CAAC,iBAAK,OAAO,EAAE,YAAY,IAAI,GAC3B,iBAAM,eAAe,MAAM,eAAe,MAAM,GAAG,CAAC,EAAE,YAAY,GACtE,IACA,4CAAC,cAAW,MAAM,MAAM,MAAM,GAClC;AAAA,KACF;AAEJ;","names":["styled"]}
@@ -130,7 +130,7 @@ var StyledButton = import_styled_components.default.button`
130
130
  font-family: ${import_constants.FONT_FAMILY};
131
131
  font-size: ${import_constants.FONT_SIZES.md};
132
132
  opacity: ${(props) => props.disabled ? 0.5 : 1};
133
- transition: background-color 0.2s;
133
+ transition: background-color 0.05s;
134
134
  cursor: pointer;
135
135
  position: relative;
136
136
  &:disabled {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components-core/button.tsx"],"sourcesContent":["'use client';\n\nimport React, { useMemo } from \"react\";\nimport { useDesign } from \"../providers/design-provider\";\nimport Color from 'color';\nimport styled from 'styled-components';\nimport { BORDER_RADIUS, FONT_FAMILY, FONT_SIZES } from \"../utils/constants\";\nimport LoadingIndicator from \"./loading-indicator\";\n\nfunction getColors({\n propsColor, \n colors, \n variant, \n}: {\n propsColor?: string, \n colors: { primaryColor: string, secondaryColor: string, backgroundColor: string },\n variant: 'primary' | 'secondary' | 'warning',\n}): { \n bgColor: string, \n hoverBgColor: string,\n activeBgColor: string,\n textColor: string,\n} {\n let bgColor;\n switch (variant) {\n case 'primary': {\n bgColor = colors.primaryColor;\n break;\n }\n case 'secondary': {\n bgColor = colors.secondaryColor;\n break;\n }\n case 'warning': {\n bgColor = '#ff4500';\n break;\n }\n }\n if (propsColor) {\n bgColor = propsColor;\n }\n\n const c = Color(bgColor);\n const pc = Color(colors.primaryColor);\n\n const changeColor = (value: number) => {\n return c.hsl(c.hue(), c.saturationl(), c.lightness() + value).toString();\n };\n \n const getAlpha = (alpha: number) => {\n return Color(\n pc.isDark() ? 'white' : 'black'\n ).alpha(alpha).toString();\n };\n\n if (c.alpha() === 0) {\n return {\n bgColor: 'transparent',\n hoverBgColor: getAlpha(0.1),\n activeBgColor: getAlpha(0.2),\n textColor: colors.primaryColor,\n };\n } else if (c.isLight()) {\n return {\n bgColor,\n hoverBgColor: changeColor(-10),\n activeBgColor: changeColor(-20),\n textColor: 'black',\n };\n } else {\n return {\n bgColor,\n hoverBgColor: changeColor(10),\n activeBgColor: changeColor(20),\n textColor: 'white',\n };\n }\n}\n\nexport type ButtonProps = {\n variant?: 'primary' | 'secondary' | 'warning',\n color?: string,\n size?: 'sm' | 'md' | 'lg',\n loading?: boolean,\n onClick?: (() => void) | (() => Promise<void>),\n} & Omit<React.HTMLProps<HTMLButtonElement>, 'size' | 'type' | 'onClick'>\n\ntype ButtonColors = {\n bgColor: string, \n hoverBgColor: string,\n activeBgColor: string,\n textColor: string,\n}\n\nconst StyledButton = styled.button<{\n $size: 'sm' | 'md' | 'lg',\n $loading: boolean,\n $colors: {\n dark: ButtonColors,\n light: ButtonColors,\n },\n}>`\n border: 0;\n border-radius: ${BORDER_RADIUS};\n padding: ${props => {\n switch (props.$size) {\n case 'sm': { return '0rem 0.75rem'; }\n case 'md': { return '0rem 1rem'; }\n case 'lg': { return '0rem 2rem'; }\n }\n }};\n height: ${props => {\n switch (props.$size) {\n case 'sm': { return '2rem'; }\n case 'md': { return '2.5rem'; }\n case 'lg': { return '3rem'; }\n }\n }};\n font-family: ${FONT_FAMILY};\n font-size: ${FONT_SIZES.md};\n opacity: ${props => props.disabled ? 0.5 : 1};\n transition: background-color 0.2s;\n cursor: pointer;\n position: relative;\n &:disabled {\n cursor: auto;\n opacity: 0.5;\n }\n\n background-color: ${props => props.$colors.light.bgColor};\n color: ${props => props.$colors.light.textColor};\n &:not([disabled]) {\n &:active,&:hover:active {\n background-color: ${props => props.$colors.light.activeBgColor};\n }\n &:hover {\n background-color: ${props => props.$colors.light.hoverBgColor};\n }\n }\n\n html[data-stack-theme='dark'] & {\n background-color: ${props => props.$colors.dark.bgColor};\n color: ${props => props.$colors.dark.textColor};\n &:not([disabled]) {\n &:active,&:hover:active {\n background-color: ${props => props.$colors.dark.activeBgColor};\n }\n &:hover {\n background-color: ${props => props.$colors.dark.hoverBgColor};\n }\n }\n }\n`;\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({\n variant='primary',\n size='md',\n loading=false,\n ...props\n }, ref) => {\n const { colors } = useDesign();\n\n const { dark, light } = useMemo(() => {\n return {\n dark: getColors({ propsColor: props.color, colors: colors.dark, variant }),\n light: getColors({ propsColor: props.color, colors: colors.light, variant }),\n };\n }, [props.color, colors, variant]);\n\n return (\n <StyledButton\n ref={ref}\n $size={size}\n $loading={loading}\n $colors={{ dark, light }}\n {...props}\n >\n <span style={{ position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', visibility: loading ? 'visible' : 'hidden' }}>\n <LoadingIndicator color={{ light: light.textColor, dark: dark.textColor }}/>\n </span>\n <span style={{ visibility: loading ? 'hidden' : 'visible', whiteSpace: 'nowrap' }}>\n {props.children}\n </span>\n </StyledButton>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport {\n Button,\n};\n"],"mappings":"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","names":["Color","styled","React","LoadingIndicator"]}
1
+ {"version":3,"sources":["../../src/components-core/button.tsx"],"sourcesContent":["'use client';\n\nimport React, { useMemo } from \"react\";\nimport { useDesign } from \"../providers/design-provider\";\nimport Color from 'color';\nimport styled from 'styled-components';\nimport { BORDER_RADIUS, FONT_FAMILY, FONT_SIZES } from \"../utils/constants\";\nimport LoadingIndicator from \"./loading-indicator\";\n\nfunction getColors({\n propsColor, \n colors, \n variant, \n}: {\n propsColor?: string, \n colors: { primaryColor: string, secondaryColor: string, backgroundColor: string },\n variant: 'primary' | 'secondary' | 'warning',\n}): { \n bgColor: string, \n hoverBgColor: string,\n activeBgColor: string,\n textColor: string,\n} {\n let bgColor;\n switch (variant) {\n case 'primary': {\n bgColor = colors.primaryColor;\n break;\n }\n case 'secondary': {\n bgColor = colors.secondaryColor;\n break;\n }\n case 'warning': {\n bgColor = '#ff4500';\n break;\n }\n }\n if (propsColor) {\n bgColor = propsColor;\n }\n\n const c = Color(bgColor);\n const pc = Color(colors.primaryColor);\n\n const changeColor = (value: number) => {\n return c.hsl(c.hue(), c.saturationl(), c.lightness() + value).toString();\n };\n \n const getAlpha = (alpha: number) => {\n return Color(\n pc.isDark() ? 'white' : 'black'\n ).alpha(alpha).toString();\n };\n\n if (c.alpha() === 0) {\n return {\n bgColor: 'transparent',\n hoverBgColor: getAlpha(0.1),\n activeBgColor: getAlpha(0.2),\n textColor: colors.primaryColor,\n };\n } else if (c.isLight()) {\n return {\n bgColor,\n hoverBgColor: changeColor(-10),\n activeBgColor: changeColor(-20),\n textColor: 'black',\n };\n } else {\n return {\n bgColor,\n hoverBgColor: changeColor(10),\n activeBgColor: changeColor(20),\n textColor: 'white',\n };\n }\n}\n\nexport type ButtonProps = {\n variant?: 'primary' | 'secondary' | 'warning',\n color?: string,\n size?: 'sm' | 'md' | 'lg',\n loading?: boolean,\n onClick?: (() => void) | (() => Promise<void>),\n} & Omit<React.HTMLProps<HTMLButtonElement>, 'size' | 'type' | 'onClick'>\n\ntype ButtonColors = {\n bgColor: string, \n hoverBgColor: string,\n activeBgColor: string,\n textColor: string,\n}\n\nconst StyledButton = styled.button<{\n $size: 'sm' | 'md' | 'lg',\n $loading: boolean,\n $colors: {\n dark: ButtonColors,\n light: ButtonColors,\n },\n}>`\n border: 0;\n border-radius: ${BORDER_RADIUS};\n padding: ${props => {\n switch (props.$size) {\n case 'sm': { return '0rem 0.75rem'; }\n case 'md': { return '0rem 1rem'; }\n case 'lg': { return '0rem 2rem'; }\n }\n }};\n height: ${props => {\n switch (props.$size) {\n case 'sm': { return '2rem'; }\n case 'md': { return '2.5rem'; }\n case 'lg': { return '3rem'; }\n }\n }};\n font-family: ${FONT_FAMILY};\n font-size: ${FONT_SIZES.md};\n opacity: ${props => props.disabled ? 0.5 : 1};\n transition: background-color 0.05s;\n cursor: pointer;\n position: relative;\n &:disabled {\n cursor: auto;\n opacity: 0.5;\n }\n\n background-color: ${props => props.$colors.light.bgColor};\n color: ${props => props.$colors.light.textColor};\n &:not([disabled]) {\n &:active,&:hover:active {\n background-color: ${props => props.$colors.light.activeBgColor};\n }\n &:hover {\n background-color: ${props => props.$colors.light.hoverBgColor};\n }\n }\n\n html[data-stack-theme='dark'] & {\n background-color: ${props => props.$colors.dark.bgColor};\n color: ${props => props.$colors.dark.textColor};\n &:not([disabled]) {\n &:active,&:hover:active {\n background-color: ${props => props.$colors.dark.activeBgColor};\n }\n &:hover {\n background-color: ${props => props.$colors.dark.hoverBgColor};\n }\n }\n }\n`;\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({\n variant='primary',\n size='md',\n loading=false,\n ...props\n }, ref) => {\n const { colors } = useDesign();\n\n const { dark, light } = useMemo(() => {\n return {\n dark: getColors({ propsColor: props.color, colors: colors.dark, variant }),\n light: getColors({ propsColor: props.color, colors: colors.light, variant }),\n };\n }, [props.color, colors, variant]);\n\n return (\n <StyledButton\n ref={ref}\n $size={size}\n $loading={loading}\n $colors={{ dark, light }}\n {...props}\n >\n <span style={{ position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', visibility: loading ? 'visible' : 'hidden' }}>\n <LoadingIndicator color={{ light: light.textColor, dark: dark.textColor }}/>\n </span>\n <span style={{ visibility: loading ? 'hidden' : 'visible', whiteSpace: 'nowrap' }}>\n {props.children}\n </span>\n </StyledButton>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport {\n Button,\n};\n"],"mappings":"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","names":["Color","styled","React","LoadingIndicator"]}
@@ -12,18 +12,18 @@ import React__default from 'react';
12
12
  declare const Button: React__default.ForwardRefExoticComponent<Omit<Omit<ButtonProps, "ref"> & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
13
13
  declare const Input: React__default.ForwardRefExoticComponent<Omit<Omit<React__default.InputHTMLAttributes<HTMLInputElement> & Pick<React__default.HTMLProps<HTMLInputElement>, "ref">, "ref"> & React__default.RefAttributes<HTMLInputElement>, "ref"> & React__default.RefAttributes<HTMLInputElement>>;
14
14
  declare const Container: React__default.ForwardRefExoticComponent<Omit<{
15
- size?: number | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
15
+ size?: number | "sm" | "md" | "lg" | "xs" | "xl" | undefined;
16
16
  } & Omit<React__default.HTMLProps<HTMLDivElement>, "size">, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
17
17
  declare const Separator: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_separator.SeparatorProps & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
18
18
  declare const Label: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_label.LabelProps & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>>;
19
19
  declare const Link: React__default.ForwardRefExoticComponent<Omit<Omit<{
20
- size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
20
+ size?: "sm" | "md" | "lg" | "xs" | "xl" | undefined;
21
21
  href: string | url.Url;
22
22
  } & Omit<React__default.HTMLProps<HTMLLinkElement>, "size" | "href">, "ref"> & React__default.RefAttributes<HTMLAnchorElement>, "ref"> & React__default.RefAttributes<HTMLAnchorElement>>;
23
23
  declare const Text: React__default.ForwardRefExoticComponent<Omit<Omit<{
24
24
  variant?: "primary" | "secondary" | "warning" | "success" | undefined;
25
- as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | undefined;
26
- size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
25
+ as?: "h2" | "h3" | "p" | "h1" | "h4" | "h5" | "h6" | undefined;
26
+ size?: "sm" | "md" | "lg" | "xs" | "xl" | undefined;
27
27
  } & Omit<React__default.HTMLProps<HTMLParagraphElement>, "size">, "ref"> & React__default.RefAttributes<HTMLParagraphElement>, "ref"> & React__default.RefAttributes<HTMLParagraphElement>>;
28
28
  declare const Popover: React__default.ForwardRefExoticComponent<_radix_ui_react_popover.PopoverProps & React__default.RefAttributes<never>>;
29
29
  declare const PopoverTrigger: React__default.ForwardRefExoticComponent<Omit<_radix_ui_react_popover.PopoverTriggerProps & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
@@ -12,18 +12,18 @@ import React__default from 'react';
12
12
  declare const Button: React__default.ForwardRefExoticComponent<Omit<Omit<ButtonProps, "ref"> & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
13
13
  declare const Input: React__default.ForwardRefExoticComponent<Omit<Omit<React__default.InputHTMLAttributes<HTMLInputElement> & Pick<React__default.HTMLProps<HTMLInputElement>, "ref">, "ref"> & React__default.RefAttributes<HTMLInputElement>, "ref"> & React__default.RefAttributes<HTMLInputElement>>;
14
14
  declare const Container: React__default.ForwardRefExoticComponent<Omit<{
15
- size?: number | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
15
+ size?: number | "sm" | "md" | "lg" | "xs" | "xl" | undefined;
16
16
  } & Omit<React__default.HTMLProps<HTMLDivElement>, "size">, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
17
17
  declare const Separator: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_separator.SeparatorProps & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
18
18
  declare const Label: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_label.LabelProps & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>>;
19
19
  declare const Link: React__default.ForwardRefExoticComponent<Omit<Omit<{
20
- size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
20
+ size?: "sm" | "md" | "lg" | "xs" | "xl" | undefined;
21
21
  href: string | url.Url;
22
22
  } & Omit<React__default.HTMLProps<HTMLLinkElement>, "size" | "href">, "ref"> & React__default.RefAttributes<HTMLAnchorElement>, "ref"> & React__default.RefAttributes<HTMLAnchorElement>>;
23
23
  declare const Text: React__default.ForwardRefExoticComponent<Omit<Omit<{
24
24
  variant?: "primary" | "secondary" | "warning" | "success" | undefined;
25
- as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | undefined;
26
- size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
25
+ as?: "h2" | "h3" | "p" | "h1" | "h4" | "h5" | "h6" | undefined;
26
+ size?: "sm" | "md" | "lg" | "xs" | "xl" | undefined;
27
27
  } & Omit<React__default.HTMLProps<HTMLParagraphElement>, "size">, "ref"> & React__default.RefAttributes<HTMLParagraphElement>, "ref"> & React__default.RefAttributes<HTMLParagraphElement>>;
28
28
  declare const Popover: React__default.ForwardRefExoticComponent<_radix_ui_react_popover.PopoverProps & React__default.RefAttributes<never>>;
29
29
  declare const PopoverTrigger: React__default.ForwardRefExoticComponent<Omit<_radix_ui_react_popover.PopoverTriggerProps & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
@@ -1,12 +1,20 @@
1
1
  // src/components/user-avatar.tsx
2
2
  import { RxPerson } from "react-icons/rx";
3
3
  import { Avatar, AvatarFallback, AvatarImage, Text } from "..";
4
+ import { SECONDARY_FONT_COLORS } from "../utils/constants";
5
+ import styled from "styled-components";
4
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
+ var StyledIcon = styled(RxPerson)`
8
+ color: ${SECONDARY_FONT_COLORS.light};
9
+ html[data-stack-theme='dark'] & {
10
+ color: ${SECONDARY_FONT_COLORS.dark};
11
+ }
12
+ `;
5
13
  function UserAvatar(props) {
6
14
  const user = props.user;
7
15
  return /* @__PURE__ */ jsxs(Avatar, { style: { height: props.size, width: props.size }, children: [
8
16
  /* @__PURE__ */ jsx(AvatarImage, { src: user?.profileImageUrl || "" }),
9
- /* @__PURE__ */ jsx(AvatarFallback, { children: user ? /* @__PURE__ */ jsx(Text, { style: { fontWeight: 500 }, children: (user?.displayName || user?.primaryEmail)?.slice(0, 2).toUpperCase() }) : /* @__PURE__ */ jsx(RxPerson, { size: props.size }) })
17
+ /* @__PURE__ */ jsx(AvatarFallback, { children: user ? /* @__PURE__ */ jsx(Text, { style: { fontWeight: 500 }, children: (user?.displayName || user?.primaryEmail)?.slice(0, 2).toUpperCase() }) : /* @__PURE__ */ jsx(StyledIcon, { size: props.size }) })
10
18
  ] });
11
19
  }
12
20
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/user-avatar.tsx"],"sourcesContent":["import { RxPerson } from \"react-icons/rx\";\nimport { Avatar, AvatarFallback, AvatarImage, Text } from \"..\";\nimport { User } from \"../lib/stack-app\";\n\nexport default function UserAvatar(props: { size?: number, user: User | null }) {\n const user = props.user;\n return (\n <Avatar style={{ height: props.size, width: props.size }}>\n <AvatarImage src={user?.profileImageUrl || ''} />\n <AvatarFallback>\n {user ? \n <Text style={{ fontWeight: 500 }}>\n {(user?.displayName || user?.primaryEmail)?.slice(0, 2).toUpperCase()}\n </Text> :\n <RxPerson size={props.size} />}\n </AvatarFallback>\n </Avatar>\n );\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;AACzB,SAAS,QAAQ,gBAAgB,aAAa,YAAY;AAMtD,SACE,KADF;AAHW,SAAR,WAA4B,OAA6C;AAC9E,QAAM,OAAO,MAAM;AACnB,SACE,qBAAC,UAAO,OAAO,EAAE,QAAQ,MAAM,MAAM,OAAO,MAAM,KAAK,GACrD;AAAA,wBAAC,eAAY,KAAK,MAAM,mBAAmB,IAAI;AAAA,IAC/C,oBAAC,kBACE,iBACC,oBAAC,QAAK,OAAO,EAAE,YAAY,IAAI,GAC3B,iBAAM,eAAe,MAAM,eAAe,MAAM,GAAG,CAAC,EAAE,YAAY,GACtE,IACA,oBAAC,YAAS,MAAM,MAAM,MAAM,GAChC;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/user-avatar.tsx"],"sourcesContent":["import { RxPerson } from \"react-icons/rx\";\nimport { Avatar, AvatarFallback, AvatarImage, Text } from \"..\";\nimport { User } from \"../lib/stack-app\";\nimport { SECONDARY_FONT_COLORS } from \"../utils/constants\";\nimport styled from \"styled-components\";\n\n\nconst StyledIcon = styled(RxPerson)`\n color: ${SECONDARY_FONT_COLORS.light};\n html[data-stack-theme='dark'] & {\n color: ${SECONDARY_FONT_COLORS.dark};\n }\n`;\n\nexport default function UserAvatar(props: { size?: number, user: User | null }) {\n const user = props.user;\n return (\n <Avatar style={{ height: props.size, width: props.size }}>\n <AvatarImage src={user?.profileImageUrl || ''} />\n <AvatarFallback>\n {user ? \n <Text style={{ fontWeight: 500 }}>\n {(user?.displayName || user?.primaryEmail)?.slice(0, 2).toUpperCase()}\n </Text> :\n <StyledIcon size={props.size} />}\n </AvatarFallback>\n </Avatar>\n );\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;AACzB,SAAS,QAAQ,gBAAgB,aAAa,YAAY;AAE1D,SAAS,6BAA6B;AACtC,OAAO,YAAY;AAaf,SACE,KADF;AAVJ,IAAM,aAAa,OAAO,QAAQ;AAAA,WACvB,sBAAsB,KAAK;AAAA;AAAA,aAEzB,sBAAsB,IAAI;AAAA;AAAA;AAIxB,SAAR,WAA4B,OAA6C;AAC9E,QAAM,OAAO,MAAM;AACnB,SACE,qBAAC,UAAO,OAAO,EAAE,QAAQ,MAAM,MAAM,OAAO,MAAM,KAAK,GACrD;AAAA,wBAAC,eAAY,KAAK,MAAM,mBAAmB,IAAI;AAAA,IAC/C,oBAAC,kBACE,iBACC,oBAAC,QAAK,OAAO,EAAE,YAAY,IAAI,GAC3B,iBAAM,eAAe,MAAM,eAAe,MAAM,GAAG,CAAC,EAAE,YAAY,GACtE,IACA,oBAAC,cAAW,MAAM,MAAM,MAAM,GAClC;AAAA,KACF;AAEJ;","names":[]}
@@ -97,7 +97,7 @@ var StyledButton = styled.button`
97
97
  font-family: ${FONT_FAMILY};
98
98
  font-size: ${FONT_SIZES.md};
99
99
  opacity: ${(props) => props.disabled ? 0.5 : 1};
100
- transition: background-color 0.2s;
100
+ transition: background-color 0.05s;
101
101
  cursor: pointer;
102
102
  position: relative;
103
103
  &:disabled {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components-core/button.tsx"],"sourcesContent":["'use client';\n\nimport React, { useMemo } from \"react\";\nimport { useDesign } from \"../providers/design-provider\";\nimport Color from 'color';\nimport styled from 'styled-components';\nimport { BORDER_RADIUS, FONT_FAMILY, FONT_SIZES } from \"../utils/constants\";\nimport LoadingIndicator from \"./loading-indicator\";\n\nfunction getColors({\n propsColor, \n colors, \n variant, \n}: {\n propsColor?: string, \n colors: { primaryColor: string, secondaryColor: string, backgroundColor: string },\n variant: 'primary' | 'secondary' | 'warning',\n}): { \n bgColor: string, \n hoverBgColor: string,\n activeBgColor: string,\n textColor: string,\n} {\n let bgColor;\n switch (variant) {\n case 'primary': {\n bgColor = colors.primaryColor;\n break;\n }\n case 'secondary': {\n bgColor = colors.secondaryColor;\n break;\n }\n case 'warning': {\n bgColor = '#ff4500';\n break;\n }\n }\n if (propsColor) {\n bgColor = propsColor;\n }\n\n const c = Color(bgColor);\n const pc = Color(colors.primaryColor);\n\n const changeColor = (value: number) => {\n return c.hsl(c.hue(), c.saturationl(), c.lightness() + value).toString();\n };\n \n const getAlpha = (alpha: number) => {\n return Color(\n pc.isDark() ? 'white' : 'black'\n ).alpha(alpha).toString();\n };\n\n if (c.alpha() === 0) {\n return {\n bgColor: 'transparent',\n hoverBgColor: getAlpha(0.1),\n activeBgColor: getAlpha(0.2),\n textColor: colors.primaryColor,\n };\n } else if (c.isLight()) {\n return {\n bgColor,\n hoverBgColor: changeColor(-10),\n activeBgColor: changeColor(-20),\n textColor: 'black',\n };\n } else {\n return {\n bgColor,\n hoverBgColor: changeColor(10),\n activeBgColor: changeColor(20),\n textColor: 'white',\n };\n }\n}\n\nexport type ButtonProps = {\n variant?: 'primary' | 'secondary' | 'warning',\n color?: string,\n size?: 'sm' | 'md' | 'lg',\n loading?: boolean,\n onClick?: (() => void) | (() => Promise<void>),\n} & Omit<React.HTMLProps<HTMLButtonElement>, 'size' | 'type' | 'onClick'>\n\ntype ButtonColors = {\n bgColor: string, \n hoverBgColor: string,\n activeBgColor: string,\n textColor: string,\n}\n\nconst StyledButton = styled.button<{\n $size: 'sm' | 'md' | 'lg',\n $loading: boolean,\n $colors: {\n dark: ButtonColors,\n light: ButtonColors,\n },\n}>`\n border: 0;\n border-radius: ${BORDER_RADIUS};\n padding: ${props => {\n switch (props.$size) {\n case 'sm': { return '0rem 0.75rem'; }\n case 'md': { return '0rem 1rem'; }\n case 'lg': { return '0rem 2rem'; }\n }\n }};\n height: ${props => {\n switch (props.$size) {\n case 'sm': { return '2rem'; }\n case 'md': { return '2.5rem'; }\n case 'lg': { return '3rem'; }\n }\n }};\n font-family: ${FONT_FAMILY};\n font-size: ${FONT_SIZES.md};\n opacity: ${props => props.disabled ? 0.5 : 1};\n transition: background-color 0.2s;\n cursor: pointer;\n position: relative;\n &:disabled {\n cursor: auto;\n opacity: 0.5;\n }\n\n background-color: ${props => props.$colors.light.bgColor};\n color: ${props => props.$colors.light.textColor};\n &:not([disabled]) {\n &:active,&:hover:active {\n background-color: ${props => props.$colors.light.activeBgColor};\n }\n &:hover {\n background-color: ${props => props.$colors.light.hoverBgColor};\n }\n }\n\n html[data-stack-theme='dark'] & {\n background-color: ${props => props.$colors.dark.bgColor};\n color: ${props => props.$colors.dark.textColor};\n &:not([disabled]) {\n &:active,&:hover:active {\n background-color: ${props => props.$colors.dark.activeBgColor};\n }\n &:hover {\n background-color: ${props => props.$colors.dark.hoverBgColor};\n }\n }\n }\n`;\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({\n variant='primary',\n size='md',\n loading=false,\n ...props\n }, ref) => {\n const { colors } = useDesign();\n\n const { dark, light } = useMemo(() => {\n return {\n dark: getColors({ propsColor: props.color, colors: colors.dark, variant }),\n light: getColors({ propsColor: props.color, colors: colors.light, variant }),\n };\n }, [props.color, colors, variant]);\n\n return (\n <StyledButton\n ref={ref}\n $size={size}\n $loading={loading}\n $colors={{ dark, light }}\n {...props}\n >\n <span style={{ position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', visibility: loading ? 'visible' : 'hidden' }}>\n <LoadingIndicator color={{ light: light.textColor, dark: dark.textColor }}/>\n </span>\n <span style={{ visibility: loading ? 'hidden' : 'visible', whiteSpace: 'nowrap' }}>\n {props.children}\n </span>\n </StyledButton>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport {\n Button,\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components-core/button.tsx"],"sourcesContent":["'use client';\n\nimport React, { useMemo } from \"react\";\nimport { useDesign } from \"../providers/design-provider\";\nimport Color from 'color';\nimport styled from 'styled-components';\nimport { BORDER_RADIUS, FONT_FAMILY, FONT_SIZES } from \"../utils/constants\";\nimport LoadingIndicator from \"./loading-indicator\";\n\nfunction getColors({\n propsColor, \n colors, \n variant, \n}: {\n propsColor?: string, \n colors: { primaryColor: string, secondaryColor: string, backgroundColor: string },\n variant: 'primary' | 'secondary' | 'warning',\n}): { \n bgColor: string, \n hoverBgColor: string,\n activeBgColor: string,\n textColor: string,\n} {\n let bgColor;\n switch (variant) {\n case 'primary': {\n bgColor = colors.primaryColor;\n break;\n }\n case 'secondary': {\n bgColor = colors.secondaryColor;\n break;\n }\n case 'warning': {\n bgColor = '#ff4500';\n break;\n }\n }\n if (propsColor) {\n bgColor = propsColor;\n }\n\n const c = Color(bgColor);\n const pc = Color(colors.primaryColor);\n\n const changeColor = (value: number) => {\n return c.hsl(c.hue(), c.saturationl(), c.lightness() + value).toString();\n };\n \n const getAlpha = (alpha: number) => {\n return Color(\n pc.isDark() ? 'white' : 'black'\n ).alpha(alpha).toString();\n };\n\n if (c.alpha() === 0) {\n return {\n bgColor: 'transparent',\n hoverBgColor: getAlpha(0.1),\n activeBgColor: getAlpha(0.2),\n textColor: colors.primaryColor,\n };\n } else if (c.isLight()) {\n return {\n bgColor,\n hoverBgColor: changeColor(-10),\n activeBgColor: changeColor(-20),\n textColor: 'black',\n };\n } else {\n return {\n bgColor,\n hoverBgColor: changeColor(10),\n activeBgColor: changeColor(20),\n textColor: 'white',\n };\n }\n}\n\nexport type ButtonProps = {\n variant?: 'primary' | 'secondary' | 'warning',\n color?: string,\n size?: 'sm' | 'md' | 'lg',\n loading?: boolean,\n onClick?: (() => void) | (() => Promise<void>),\n} & Omit<React.HTMLProps<HTMLButtonElement>, 'size' | 'type' | 'onClick'>\n\ntype ButtonColors = {\n bgColor: string, \n hoverBgColor: string,\n activeBgColor: string,\n textColor: string,\n}\n\nconst StyledButton = styled.button<{\n $size: 'sm' | 'md' | 'lg',\n $loading: boolean,\n $colors: {\n dark: ButtonColors,\n light: ButtonColors,\n },\n}>`\n border: 0;\n border-radius: ${BORDER_RADIUS};\n padding: ${props => {\n switch (props.$size) {\n case 'sm': { return '0rem 0.75rem'; }\n case 'md': { return '0rem 1rem'; }\n case 'lg': { return '0rem 2rem'; }\n }\n }};\n height: ${props => {\n switch (props.$size) {\n case 'sm': { return '2rem'; }\n case 'md': { return '2.5rem'; }\n case 'lg': { return '3rem'; }\n }\n }};\n font-family: ${FONT_FAMILY};\n font-size: ${FONT_SIZES.md};\n opacity: ${props => props.disabled ? 0.5 : 1};\n transition: background-color 0.05s;\n cursor: pointer;\n position: relative;\n &:disabled {\n cursor: auto;\n opacity: 0.5;\n }\n\n background-color: ${props => props.$colors.light.bgColor};\n color: ${props => props.$colors.light.textColor};\n &:not([disabled]) {\n &:active,&:hover:active {\n background-color: ${props => props.$colors.light.activeBgColor};\n }\n &:hover {\n background-color: ${props => props.$colors.light.hoverBgColor};\n }\n }\n\n html[data-stack-theme='dark'] & {\n background-color: ${props => props.$colors.dark.bgColor};\n color: ${props => props.$colors.dark.textColor};\n &:not([disabled]) {\n &:active,&:hover:active {\n background-color: ${props => props.$colors.dark.activeBgColor};\n }\n &:hover {\n background-color: ${props => props.$colors.dark.hoverBgColor};\n }\n }\n }\n`;\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({\n variant='primary',\n size='md',\n loading=false,\n ...props\n }, ref) => {\n const { colors } = useDesign();\n\n const { dark, light } = useMemo(() => {\n return {\n dark: getColors({ propsColor: props.color, colors: colors.dark, variant }),\n light: getColors({ propsColor: props.color, colors: colors.light, variant }),\n };\n }, [props.color, colors, variant]);\n\n return (\n <StyledButton\n ref={ref}\n $size={size}\n $loading={loading}\n $colors={{ dark, light }}\n {...props}\n >\n <span style={{ position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', visibility: loading ? 'visible' : 'hidden' }}>\n <LoadingIndicator color={{ light: light.textColor, dark: dark.textColor }}/>\n </span>\n <span style={{ visibility: loading ? 'hidden' : 'visible', whiteSpace: 'nowrap' }}>\n {props.children}\n </span>\n </StyledButton>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nexport {\n Button,\n};\n"],"mappings":";;;AAEA,OAAO,SAAS,eAAe;AAC/B,SAAS,iBAAiB;AAC1B,OAAO,WAAW;AAClB,OAAO,YAAY;AACnB,SAAS,eAAe,aAAa,kBAAkB;AACvD,OAAO,sBAAsB;AAoKvB,SAQI,KARJ;AAlKN,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AACF,GASE;AACA,MAAI;AACJ,UAAQ,SAAS;AAAA,IACf,KAAK,WAAW;AACd,gBAAU,OAAO;AACjB;AAAA,IACF;AAAA,IACA,KAAK,aAAa;AAChB,gBAAU,OAAO;AACjB;AAAA,IACF;AAAA,IACA,KAAK,WAAW;AACd,gBAAU;AACV;AAAA,IACF;AAAA,EACF;AACA,MAAI,YAAY;AACd,cAAU;AAAA,EACZ;AAEA,QAAM,IAAI,MAAM,OAAO;AACvB,QAAM,KAAK,MAAM,OAAO,YAAY;AAEpC,QAAM,cAAc,CAAC,UAAkB;AACrC,WAAO,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,YAAY,GAAG,EAAE,UAAU,IAAI,KAAK,EAAE,SAAS;AAAA,EACzE;AAEA,QAAM,WAAW,CAAC,UAAkB;AAClC,WAAO;AAAA,MACL,GAAG,OAAO,IAAI,UAAU;AAAA,IAC1B,EAAE,MAAM,KAAK,EAAE,SAAS;AAAA,EAC1B;AAEA,MAAI,EAAE,MAAM,MAAM,GAAG;AACnB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,cAAc,SAAS,GAAG;AAAA,MAC1B,eAAe,SAAS,GAAG;AAAA,MAC3B,WAAW,OAAO;AAAA,IACpB;AAAA,EACF,WAAW,EAAE,QAAQ,GAAG;AACtB,WAAO;AAAA,MACL;AAAA,MACA,cAAc,YAAY,GAAG;AAAA,MAC7B,eAAe,YAAY,GAAG;AAAA,MAC9B,WAAW;AAAA,IACb;AAAA,EACF,OAAO;AACL,WAAO;AAAA,MACL;AAAA,MACA,cAAc,YAAY,EAAE;AAAA,MAC5B,eAAe,YAAY,EAAE;AAAA,MAC7B,WAAW;AAAA,IACb;AAAA,EACF;AACF;AAiBA,IAAM,eAAe,OAAO;AAAA;AAAA,mBAST,aAAa;AAAA,aACnB,WAAS;AAClB,UAAQ,MAAM,OAAO;AAAA,IACnB,KAAK,MAAM;AAAE,aAAO;AAAA,IAAgB;AAAA,IACpC,KAAK,MAAM;AAAE,aAAO;AAAA,IAAa;AAAA,IACjC,KAAK,MAAM;AAAE,aAAO;AAAA,IAAa;AAAA,EACnC;AACF,CAAC;AAAA,YACS,WAAS;AACjB,UAAQ,MAAM,OAAO;AAAA,IACnB,KAAK,MAAM;AAAE,aAAO;AAAA,IAAQ;AAAA,IAC5B,KAAK,MAAM;AAAE,aAAO;AAAA,IAAU;AAAA,IAC9B,KAAK,MAAM;AAAE,aAAO;AAAA,IAAQ;AAAA,EAC9B;AACF,CAAC;AAAA,iBACc,WAAW;AAAA,eACb,WAAW,EAAE;AAAA,aACf,WAAS,MAAM,WAAW,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBASxB,WAAS,MAAM,QAAQ,MAAM,OAAO;AAAA,WAC/C,WAAS,MAAM,QAAQ,MAAM,SAAS;AAAA;AAAA;AAAA,0BAGvB,WAAS,MAAM,QAAQ,MAAM,aAAa;AAAA;AAAA;AAAA,0BAG1C,WAAS,MAAM,QAAQ,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,wBAK3C,WAAS,MAAM,QAAQ,KAAK,OAAO;AAAA,aAC9C,WAAS,MAAM,QAAQ,KAAK,SAAS;AAAA;AAAA;AAAA,4BAGtB,WAAS,MAAM,QAAQ,KAAK,aAAa;AAAA;AAAA;AAAA,4BAGzC,WAAS,MAAM,QAAQ,KAAK,YAAY;AAAA;AAAA;AAAA;AAAA;AAMpE,IAAM,SAAS,MAAM;AAAA,EACnB,CAAC;AAAA,IACC,UAAQ;AAAA,IACR,OAAK;AAAA,IACL,UAAQ;AAAA,IACR,GAAG;AAAA,EACL,GAAG,QAAQ;AACT,UAAM,EAAE,OAAO,IAAI,UAAU;AAE7B,UAAM,EAAE,MAAM,MAAM,IAAI,QAAQ,MAAM;AACpC,aAAO;AAAA,QACL,MAAM,UAAU,EAAE,YAAY,MAAM,OAAO,QAAQ,OAAO,MAAM,QAAQ,CAAC;AAAA,QACzE,OAAO,UAAU,EAAE,YAAY,MAAM,OAAO,QAAQ,OAAO,OAAO,QAAQ,CAAC;AAAA,MAC7E;AAAA,IACF,GAAG,CAAC,MAAM,OAAO,QAAQ,OAAO,CAAC;AAEjC,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,QACV,SAAS,EAAE,MAAM,MAAM;AAAA,QACtB,GAAG;AAAA,QAEJ;AAAA,8BAAC,UAAK,OAAO,EAAE,UAAU,YAAY,KAAK,OAAO,MAAM,OAAO,WAAW,yBAAyB,YAAY,UAAU,YAAY,SAAS,GAC3I,8BAAC,oBAAiB,OAAO,EAAE,OAAO,MAAM,WAAW,MAAM,KAAK,UAAU,GAAE,GAC5E;AAAA,UACA,oBAAC,UAAK,OAAO,EAAE,YAAY,UAAU,WAAW,WAAW,YAAY,SAAS,GAC7E,gBAAM,UACT;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,OAAO,cAAc;","names":[]}
@@ -16,6 +16,7 @@ import { filterUndefined, omit } from "@stackframe/stack-shared/dist/utils/objec
16
16
  import { neverResolve, resolved, runAsynchronously, wait } from "@stackframe/stack-shared/dist/utils/promises";
17
17
  import { AsyncCache } from "@stackframe/stack-shared/dist/utils/caches";
18
18
  import { suspend } from "@stackframe/stack-shared/dist/utils/react";
19
+ var clientVersion = "js @stackframe/stack@2.4.6";
19
20
  function permissionDefinitionScopeToType(scope) {
20
21
  return { "any-team": "team", "specific-team": "team", "global": "global" }[scope.type];
21
22
  }
@@ -195,6 +196,7 @@ var _StackClientAppImpl = class __StackClientAppImpl {
195
196
  this._interface = new StackClientInterface({
196
197
  baseUrl: options.baseUrl ?? getDefaultBaseUrl(),
197
198
  projectId: options.projectId ?? getDefaultProjectId(),
199
+ clientVersion,
198
200
  publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey()
199
201
  });
200
202
  }
@@ -308,8 +310,7 @@ var _StackClientAppImpl = class __StackClientAppImpl {
308
310
  return permissions.find((p) => p.id === permissionId) ?? null;
309
311
  },
310
312
  async hasPermission(scope, permissionId) {
311
- const permissions = await this.listPermissions(scope);
312
- return permissions.some((p) => p.id === permissionId);
313
+ return await this.getPermission(scope, permissionId) !== null;
313
314
  },
314
315
  toJson() {
315
316
  return json;
@@ -368,22 +369,6 @@ var _StackClientAppImpl = class __StackClientAppImpl {
368
369
  return currentUser;
369
370
  }
370
371
  }
371
- _userToJson(user) {
372
- return {
373
- projectId: user.projectId,
374
- id: user.id,
375
- displayName: user.displayName,
376
- primaryEmail: user.primaryEmail,
377
- primaryEmailVerified: user.primaryEmailVerified,
378
- profileImageUrl: user.profileImageUrl,
379
- signedUpAtMillis: user.signedUpAt.getTime(),
380
- clientMetadata: user.clientMetadata,
381
- authMethod: user.authMethod,
382
- hasPassword: user.hasPassword,
383
- authWithEmail: user.authWithEmail,
384
- oauthProviders: user.oauthProviders
385
- };
386
- }
387
372
  _projectAdminFromJson(data, adminInterface, onRefresh) {
388
373
  if (data.id !== adminInterface.projectId) {
389
374
  throw new Error(`The project ID of the provided project JSON (${data.id}) does not match the project ID of the app (${adminInterface.projectId})! This is a Stack bug.`);
@@ -421,6 +406,7 @@ var _StackClientAppImpl = class __StackClientAppImpl {
421
406
  return new StackAdminInterface({
422
407
  baseUrl: this._interface.options.baseUrl,
423
408
  projectId: forProjectId,
409
+ clientVersion,
424
410
  projectOwnerTokens: tokenStore
425
411
  });
426
412
  }
@@ -755,24 +741,21 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
755
741
  return await this._interface.listTeamMemberPermissions({ teamId, userId, type, direct });
756
742
  });
757
743
  constructor(options) {
758
- if ("interface" in options) {
759
- super({
760
- interface: options.interface,
761
- tokenStore: options.tokenStore,
762
- urls: options.urls
763
- });
764
- } else {
765
- super({
766
- interface: new StackServerInterface({
767
- baseUrl: options.baseUrl ?? getDefaultBaseUrl(),
768
- projectId: options.projectId ?? getDefaultProjectId(),
769
- publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),
770
- secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey()
771
- }),
772
- tokenStore: options.tokenStore,
773
- urls: options.urls ?? {}
774
- });
775
- }
744
+ super("interface" in options ? {
745
+ interface: options.interface,
746
+ tokenStore: options.tokenStore,
747
+ urls: options.urls
748
+ } : {
749
+ interface: new StackServerInterface({
750
+ baseUrl: options.baseUrl ?? getDefaultBaseUrl(),
751
+ projectId: options.projectId ?? getDefaultProjectId(),
752
+ clientVersion,
753
+ publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),
754
+ secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey()
755
+ }),
756
+ tokenStore: options.tokenStore,
757
+ urls: options.urls ?? {}
758
+ });
776
759
  }
777
760
  _serverUserFromJson(json) {
778
761
  if (json === null)
@@ -856,7 +839,7 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
856
839
  return permissions.some((p) => p.id === permissionId);
857
840
  },
858
841
  toJson() {
859
- return app._serverUserToJson(this);
842
+ return json;
860
843
  }
861
844
  };
862
845
  }
@@ -928,23 +911,6 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
928
911
  }
929
912
  };
930
913
  }
931
- _serverUserToJson(user) {
932
- return {
933
- projectId: user.projectId,
934
- id: user.id,
935
- displayName: user.displayName,
936
- primaryEmail: user.primaryEmail,
937
- primaryEmailVerified: user.primaryEmailVerified,
938
- profileImageUrl: user.profileImageUrl,
939
- signedUpAtMillis: user.signedUpAt.getTime(),
940
- clientMetadata: user.clientMetadata,
941
- serverMetadata: user.serverMetadata,
942
- authMethod: user.authMethod,
943
- hasPassword: user.hasPassword,
944
- authWithEmail: user.authWithEmail,
945
- oauthProviders: user.oauthProviders
946
- };
947
- }
948
914
  _serverTeamFromJson(json) {
949
915
  const app = this;
950
916
  return {
@@ -1105,6 +1071,7 @@ var _StackAdminAppImpl = class extends _StackServerAppImpl {
1105
1071
  interface: new StackAdminInterface({
1106
1072
  baseUrl: options.baseUrl ?? getDefaultBaseUrl(),
1107
1073
  projectId: options.projectId ?? getDefaultProjectId(),
1074
+ clientVersion,
1108
1075
  ..."projectOwnerTokens" in options ? {
1109
1076
  projectOwnerTokens: options.projectOwnerTokens
1110
1077
  } : {