@kollegioai/ui 0.1.0 → 0.1.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/Button.d.mts +38 -0
- package/dist/Button.d.ts +38 -0
- package/dist/Button.js +18 -0
- package/dist/Button.js.map +1 -0
- package/dist/Button.mjs +3 -0
- package/dist/Button.mjs.map +1 -0
- package/dist/EllipsisMenu.d.mts +16 -0
- package/dist/EllipsisMenu.d.ts +16 -0
- package/dist/EllipsisMenu.js +22 -0
- package/dist/EllipsisMenu.js.map +1 -0
- package/dist/EllipsisMenu.mjs +3 -0
- package/dist/EllipsisMenu.mjs.map +1 -0
- package/dist/Tooltip.d.mts +48 -0
- package/dist/Tooltip.d.ts +48 -0
- package/dist/Tooltip.js +22 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/Tooltip.mjs +3 -0
- package/dist/Tooltip.mjs.map +1 -0
- package/dist/chunk-55KQFLN6.js +123 -0
- package/dist/chunk-55KQFLN6.js.map +1 -0
- package/dist/chunk-EBQK5NBX.js +213 -0
- package/dist/chunk-EBQK5NBX.js.map +1 -0
- package/dist/chunk-Q4T6BIJ6.js +184 -0
- package/dist/chunk-Q4T6BIJ6.js.map +1 -0
- package/dist/chunk-RFUSESWB.mjs +186 -0
- package/dist/chunk-RFUSESWB.mjs.map +1 -0
- package/dist/chunk-RYGUHPYX.mjs +181 -0
- package/dist/chunk-RYGUHPYX.mjs.map +1 -0
- package/dist/chunk-XVEIQDTK.mjs +119 -0
- package/dist/chunk-XVEIQDTK.mjs.map +1 -0
- package/dist/index.d.mts +6 -94
- package/dist/index.d.ts +6 -94
- package/dist/index.js +28 -516
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -486
- package/dist/index.mjs.map +1 -1
- package/package.json +19 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Tooltip.tsx"],"names":["React","TooltipPrimitive","jsx","jsxs","ChakraTooltip","Portal","useBreakpointValue","VStack","ReactMarkdown","children","Text","Link","Box"],"mappings":"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","file":"chunk-EBQK5NBX.js","sourcesContent":["import { Box, Link, Text, Tooltip as ChakraTooltip, Portal, VStack, useBreakpointValue } from '@chakra-ui/react';\nimport * as React from 'react';\nimport ReactMarkdown from 'react-markdown';\n\ntype TooltipPositioning = NonNullable<ChakraTooltip.RootProps['positioning']>;\ntype TooltipPlacement = TooltipPositioning['placement'];\ntype TooltipOffset = TooltipPositioning['offset'];\n\nexport interface TooltipProps extends Omit<ChakraTooltip.RootProps, 'children' | 'open'> {\n children: React.ReactNode;\n showArrow?: boolean;\n hasArrow?: boolean;\n portalled?: boolean;\n portalRef?: React.RefObject<HTMLElement | null>;\n content?: React.ReactNode;\n label?: React.ReactNode;\n contentProps?: ChakraTooltip.ContentProps;\n disabled?: boolean;\n isDisabled?: boolean;\n open?: boolean;\n isOpen?: boolean;\n placement?: TooltipPlacement;\n offset?: TooltipOffset;\n closeOnClick?: boolean;\n fontSize?: ChakraTooltip.ContentProps['fontSize'];\n width?: ChakraTooltip.ContentProps['width'];\n w?: ChakraTooltip.ContentProps['w'];\n bg?: ChakraTooltip.ContentProps['bg'];\n color?: ChakraTooltip.ContentProps['color'];\n px?: ChakraTooltip.ContentProps['px'];\n py?: ChakraTooltip.ContentProps['py'];\n borderRadius?: ChakraTooltip.ContentProps['borderRadius'];\n boxShadow?: ChakraTooltip.ContentProps['boxShadow'];\n zIndex?: ChakraTooltip.ContentProps['zIndex'];\n alignSelf?: ChakraTooltip.ContentProps['alignSelf'];\n openOnClick?: boolean;\n clickOpenDurationMs?: number;\n fullWidthTrigger?: boolean;\n}\n\n/** Low-level Chakra v3 tooltip primitive. Prefer `Tooltip` (the markdown wrapper) for app usage. */\nexport const TooltipPrimitive = React.forwardRef<HTMLDivElement, TooltipProps>(function TooltipPrimitive(\n props,\n ref,\n) {\n const {\n showArrow,\n hasArrow,\n children,\n disabled,\n isDisabled,\n portalled = true,\n content,\n label,\n contentProps,\n portalRef,\n open,\n isOpen,\n placement,\n offset,\n closeOnClick,\n fontSize,\n width,\n w,\n bg,\n color,\n px,\n py,\n borderRadius,\n boxShadow,\n zIndex,\n alignSelf,\n openOnClick,\n clickOpenDurationMs = 900,\n fullWidthTrigger = false,\n openDelay = 0,\n closeDelay = 0,\n ...rest\n } = props;\n\n // Tap-to-open when hover is unreliable (phones, many tablets). iOS can still report `(hover: hover)`,\n // so rely on maxTouchPoints / coarse pointer — not hover alone.\n const shouldOpenTooltipOnClick =\n typeof window !== 'undefined' &&\n (navigator.maxTouchPoints > 0 ||\n window.matchMedia?.('(pointer: coarse)')?.matches === true ||\n window.matchMedia?.('(hover: none)')?.matches === true);\n const resolvedOpenOnClick = openOnClick ?? shouldOpenTooltipOnClick;\n\n const [manualOpen, setManualOpen] = React.useState(false);\n const manualOpenTimeoutRef = React.useRef<number | null>(null);\n const triggerRef = React.useRef<HTMLSpanElement | null>(null);\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n\n const clearManualOpenTimeout = React.useCallback(() => {\n if (manualOpenTimeoutRef.current !== null) {\n window.clearTimeout(manualOpenTimeoutRef.current);\n manualOpenTimeoutRef.current = null;\n }\n }, []);\n\n React.useEffect(\n () => () => {\n clearManualOpenTimeout();\n },\n [clearManualOpenTimeout],\n );\n\n // When opened via tap/click, close on any outside click/tap.\n React.useEffect(() => {\n if (!resolvedOpenOnClick || !manualOpen) return;\n\n const onPointerDownCapture = (e: PointerEvent) => {\n const t = e.target;\n if (!(t instanceof Node)) return;\n if (triggerRef.current?.contains(t)) return;\n if (contentRef.current?.contains(t)) return;\n setManualOpen(false);\n clearManualOpenTimeout();\n };\n\n document.addEventListener('pointerdown', onPointerDownCapture, true);\n return () => document.removeEventListener('pointerdown', onPointerDownCapture, true);\n }, [clearManualOpenTimeout, manualOpen, resolvedOpenOnClick]);\n\n const isTooltipDisabled = disabled ?? isDisabled ?? false;\n if (isTooltipDisabled) {\n return <>{children}</>;\n }\n\n const tooltipContent = content ?? label;\n if (!tooltipContent) {\n return <>{children}</>;\n }\n\n const positioning =\n placement !== undefined || offset !== undefined\n ? {\n ...(rest.positioning ?? {}),\n ...(placement !== undefined ? { placement } : {}),\n ...(offset !== undefined ? { offset } : {}),\n }\n : rest.positioning;\n\n const mergedContentProps: ChakraTooltip.ContentProps = {\n fontSize,\n width,\n w,\n bg,\n color,\n px,\n py,\n borderRadius,\n boxShadow,\n zIndex,\n alignSelf,\n ...contentProps,\n };\n\n const openTooltipOnClick = () => {\n if (!resolvedOpenOnClick) {\n return;\n }\n setManualOpen(true);\n clearManualOpenTimeout();\n manualOpenTimeoutRef.current = window.setTimeout(() => {\n setManualOpen(false);\n manualOpenTimeoutRef.current = null;\n }, clickOpenDurationMs);\n };\n\n const triggerChild = (\n <span\n ref={triggerRef}\n onClick={resolvedOpenOnClick ? openTooltipOnClick : undefined}\n style={{\n display: fullWidthTrigger ? 'flex' : 'inline-flex',\n width: fullWidthTrigger ? '100%' : undefined,\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: resolvedOpenOnClick && !fullWidthTrigger ? 44 : undefined,\n minHeight: resolvedOpenOnClick && !fullWidthTrigger ? 44 : undefined,\n cursor: 'pointer',\n WebkitTapHighlightColor: 'transparent',\n color: 'var(--chakra-colors-contentPrimaryStrong)',\n }}\n >\n {children}\n </span>\n );\n\n const rootProps: ChakraTooltip.RootProps = {\n ...rest,\n open: isOpen ?? open ?? (manualOpen ? true : undefined),\n openDelay,\n closeDelay,\n positioning,\n ...(closeOnClick === false ? { closeOnPointerDown: false } : {}),\n };\n\n return (\n <ChakraTooltip.Root {...rootProps}>\n <ChakraTooltip.Trigger asChild>{triggerChild}</ChakraTooltip.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraTooltip.Positioner>\n <ChakraTooltip.Content\n ref={(node) => {\n contentRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n {...mergedContentProps}\n >\n {(showArrow || hasArrow) && (\n <ChakraTooltip.Arrow>\n <ChakraTooltip.ArrowTip />\n </ChakraTooltip.Arrow>\n )}\n {tooltipContent}\n </ChakraTooltip.Content>\n </ChakraTooltip.Positioner>\n </Portal>\n </ChakraTooltip.Root>\n );\n});\n\ninterface KollegioTooltipProps extends Omit<TooltipProps, 'content' | 'children'> {\n label?: string;\n children: React.ReactNode;\n}\n\n/** Brand tooltip: renders markdown `label`, tap-to-open on touch devices. */\nexport const Tooltip = ({ label, children, ...props }: KollegioTooltipProps) => {\n // On touch devices there is no hover; enable tap-to-open.\n const isTouch = useBreakpointValue({ base: true, lg: false }) ?? true;\n return (\n <TooltipPrimitive\n openOnClick={isTouch}\n // Give users time to read on mobile before auto-closing.\n clickOpenDurationMs={isTouch ? 2500 : undefined}\n content={\n label ? (\n <VStack align=\"start\" gap={2} maxW=\"280px\">\n <ReactMarkdown\n components={{\n p: ({ children }) => <Text color={'inherit'}>{children}</Text>,\n strong: ({ children }) => (\n <Text color={'inherit'} display=\"block\" asChild>\n <b>{children}</b>\n </Text>\n ),\n ul: ({ children }) => (\n <VStack as=\"ul\" align=\"start\" gap={1} pl={4}>\n {children}\n </VStack>\n ),\n li: ({ children }) => (\n <Text color={'inherit'} as=\"li\" ml={2} fontSize=\"sm\" lineHeight=\"short\">\n {children}\n </Text>\n ),\n a: ({ href, children }) => (\n <Link href={href ?? '#'} target=\"_blank\" color=\"blue.200\">\n {children}\n </Link>\n ),\n }}\n >\n {label}\n </ReactMarkdown>\n </VStack>\n ) : null\n }\n {...props}\n >\n <span>\n <Box as=\"span\" display=\"inline-block\" cursor=\"default\" _hover={{ cursor: 'pointer' }}>\n {children}\n </Box>\n </span>\n </TooltipPrimitive>\n );\n};\n\nexport default Tooltip;\n"]}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react$1 = require('@chakra-ui/react');
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
// src/Button.tsx
|
|
8
|
+
var VARIANT_STYLES = {
|
|
9
|
+
primary: {
|
|
10
|
+
bg: "backgroundPrimary",
|
|
11
|
+
color: "white",
|
|
12
|
+
border: "1px solid",
|
|
13
|
+
borderColor: "borderBrandOpacity30",
|
|
14
|
+
_hover: { bg: "backgroundPrimarySubtle" }
|
|
15
|
+
},
|
|
16
|
+
primaryStrong: {
|
|
17
|
+
bg: "contentPrimaryStrong",
|
|
18
|
+
color: "white",
|
|
19
|
+
border: "1px solid",
|
|
20
|
+
borderColor: "borderBrandOpacity30",
|
|
21
|
+
_hover: { bg: "backgroundPrimarySubtle" },
|
|
22
|
+
_active: { bg: "backgroundPrimarySubtle" }
|
|
23
|
+
},
|
|
24
|
+
accent: {
|
|
25
|
+
bg: "backgroundAIAccent",
|
|
26
|
+
color: "white",
|
|
27
|
+
border: "1px solid",
|
|
28
|
+
borderColor: "borderBrandOpacity30",
|
|
29
|
+
_hover: { bg: "backgroundAIAccent", opacity: 0.65 }
|
|
30
|
+
},
|
|
31
|
+
outline: {
|
|
32
|
+
bg: "white",
|
|
33
|
+
border: "1px solid",
|
|
34
|
+
borderColor: "borderBrand",
|
|
35
|
+
color: "contentPrimaryStrong",
|
|
36
|
+
_hover: { bg: "white", borderColor: "borderBrand" }
|
|
37
|
+
},
|
|
38
|
+
secondary: {
|
|
39
|
+
bg: "backgroundSuccessAccent",
|
|
40
|
+
color: "contentPrimaryStrong",
|
|
41
|
+
border: "1px solid",
|
|
42
|
+
borderColor: "borderBrandOpacity30",
|
|
43
|
+
_hover: { bg: "backgroundBase3" }
|
|
44
|
+
},
|
|
45
|
+
tertiary: {
|
|
46
|
+
display: "flex",
|
|
47
|
+
gap: "16px",
|
|
48
|
+
alignItems: "center",
|
|
49
|
+
border: "none",
|
|
50
|
+
background: "none",
|
|
51
|
+
padding: "unset",
|
|
52
|
+
color: "contentPrimarySubtle",
|
|
53
|
+
fontSize: "14px",
|
|
54
|
+
_hover: { border: "none", background: "none", textDecoration: "underline" }
|
|
55
|
+
},
|
|
56
|
+
light: {
|
|
57
|
+
color: "contentPrimary",
|
|
58
|
+
background: "white",
|
|
59
|
+
border: "1px solid",
|
|
60
|
+
borderColor: "borderSecondary",
|
|
61
|
+
_hover: { background: "gray.50", borderColor: "borderSecondary" }
|
|
62
|
+
},
|
|
63
|
+
ghost: {
|
|
64
|
+
bg: "transparent",
|
|
65
|
+
color: "contentPrimaryStrong",
|
|
66
|
+
border: "none",
|
|
67
|
+
boxShadow: "none",
|
|
68
|
+
_hover: { bg: "transparent" }
|
|
69
|
+
},
|
|
70
|
+
oauth: {
|
|
71
|
+
bg: "white",
|
|
72
|
+
color: "primaryDark",
|
|
73
|
+
border: "1px solid",
|
|
74
|
+
borderColor: "borderSecondary",
|
|
75
|
+
borderRadius: "8px",
|
|
76
|
+
_hover: { borderColor: "borderBrand" }
|
|
77
|
+
},
|
|
78
|
+
logOut: {
|
|
79
|
+
border: "1px solid",
|
|
80
|
+
borderRadius: "xl",
|
|
81
|
+
borderColor: "black",
|
|
82
|
+
color: "black",
|
|
83
|
+
bg: "backgroundBase2",
|
|
84
|
+
_hover: { bg: "#FFE6E4" }
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
var SIZE_STYLES = {
|
|
88
|
+
sm: {
|
|
89
|
+
h: "26px",
|
|
90
|
+
minH: "26px",
|
|
91
|
+
px: "10px",
|
|
92
|
+
fontSize: "12px",
|
|
93
|
+
lineHeight: "150%",
|
|
94
|
+
borderRadius: "6px"
|
|
95
|
+
},
|
|
96
|
+
md: {
|
|
97
|
+
h: "auto",
|
|
98
|
+
minH: "unset",
|
|
99
|
+
py: "8px",
|
|
100
|
+
px: "12px",
|
|
101
|
+
fontSize: "14px",
|
|
102
|
+
lineHeight: "140%",
|
|
103
|
+
borderRadius: "4px"
|
|
104
|
+
},
|
|
105
|
+
lg: {
|
|
106
|
+
h: "40px",
|
|
107
|
+
minH: "40px",
|
|
108
|
+
py: "12px",
|
|
109
|
+
px: "12px",
|
|
110
|
+
fontSize: "14px",
|
|
111
|
+
lineHeight: "140%",
|
|
112
|
+
borderRadius: "8px"
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var Button = react.forwardRef(function Button2({
|
|
116
|
+
variant = "primary",
|
|
117
|
+
buttonSize,
|
|
118
|
+
fullWidth,
|
|
119
|
+
isLoading,
|
|
120
|
+
leftIcon,
|
|
121
|
+
rightIcon,
|
|
122
|
+
children,
|
|
123
|
+
display,
|
|
124
|
+
alignItems,
|
|
125
|
+
gap,
|
|
126
|
+
flexShrink,
|
|
127
|
+
w,
|
|
128
|
+
width,
|
|
129
|
+
enableTouchEndClickFix = false,
|
|
130
|
+
disabled,
|
|
131
|
+
onClick,
|
|
132
|
+
onTouchEnd,
|
|
133
|
+
...rest
|
|
134
|
+
}, ref) {
|
|
135
|
+
const hasIcons = Boolean(leftIcon || rightIcon);
|
|
136
|
+
const didFireTouchRef = react.useRef(false);
|
|
137
|
+
const resolvedButtonSize = buttonSize ?? (variant === "oauth" ? void 0 : "md");
|
|
138
|
+
const handleTouchEnd = enableTouchEndClickFix ? (e) => {
|
|
139
|
+
onTouchEnd?.(e);
|
|
140
|
+
if (disabled) return;
|
|
141
|
+
e.preventDefault();
|
|
142
|
+
didFireTouchRef.current = true;
|
|
143
|
+
onClick?.(e);
|
|
144
|
+
} : onTouchEnd;
|
|
145
|
+
const handleClick = (e) => {
|
|
146
|
+
if (enableTouchEndClickFix && didFireTouchRef.current) {
|
|
147
|
+
didFireTouchRef.current = false;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
onClick?.(e);
|
|
151
|
+
};
|
|
152
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
153
|
+
react$1.Button,
|
|
154
|
+
{
|
|
155
|
+
ref,
|
|
156
|
+
type: "button",
|
|
157
|
+
variant: "solid",
|
|
158
|
+
loading: isLoading,
|
|
159
|
+
disabled,
|
|
160
|
+
onClick: handleClick,
|
|
161
|
+
onTouchEnd: handleTouchEnd,
|
|
162
|
+
display: display ?? (hasIcons ? "inline-flex" : void 0),
|
|
163
|
+
alignItems: alignItems ?? (hasIcons ? "center" : void 0),
|
|
164
|
+
gap: gap ?? (hasIcons ? "4px" : void 0),
|
|
165
|
+
flexShrink: flexShrink ?? 0,
|
|
166
|
+
w: w ?? width ?? (fullWidth ? "full" : void 0),
|
|
167
|
+
width: width ?? (fullWidth && w == null ? "full" : void 0),
|
|
168
|
+
...VARIANT_STYLES[variant],
|
|
169
|
+
...resolvedButtonSize ? SIZE_STYLES[resolvedButtonSize] : {},
|
|
170
|
+
...rest,
|
|
171
|
+
children: [
|
|
172
|
+
leftIcon,
|
|
173
|
+
children,
|
|
174
|
+
rightIcon
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
);
|
|
178
|
+
});
|
|
179
|
+
var Button_default = Button;
|
|
180
|
+
|
|
181
|
+
exports.Button = Button;
|
|
182
|
+
exports.Button_default = Button_default;
|
|
183
|
+
//# sourceMappingURL=chunk-Q4T6BIJ6.js.map
|
|
184
|
+
//# sourceMappingURL=chunk-Q4T6BIJ6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Button.tsx"],"names":["forwardRef","Button","useRef","jsxs","ChakraButton"],"mappings":";;;;;;;AAyBA,IAAM,cAA6D,GAAA;AAAA,EACjE,OAAS,EAAA;AAAA,IACP,EAAI,EAAA,mBAAA;AAAA,IACJ,KAAO,EAAA,OAAA;AAAA,IACP,MAAQ,EAAA,WAAA;AAAA,IACR,WAAa,EAAA,sBAAA;AAAA,IACb,MAAA,EAAQ,EAAE,EAAA,EAAI,yBAA0B;AAAA,GAC1C;AAAA,EACA,aAAe,EAAA;AAAA,IACb,EAAI,EAAA,sBAAA;AAAA,IACJ,KAAO,EAAA,OAAA;AAAA,IACP,MAAQ,EAAA,WAAA;AAAA,IACR,WAAa,EAAA,sBAAA;AAAA,IACb,MAAA,EAAQ,EAAE,EAAA,EAAI,yBAA0B,EAAA;AAAA,IACxC,OAAA,EAAS,EAAE,EAAA,EAAI,yBAA0B;AAAA,GAC3C;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,EAAI,EAAA,oBAAA;AAAA,IACJ,KAAO,EAAA,OAAA;AAAA,IACP,MAAQ,EAAA,WAAA;AAAA,IACR,WAAa,EAAA,sBAAA;AAAA,IACb,MAAQ,EAAA,EAAE,EAAI,EAAA,oBAAA,EAAsB,SAAS,IAAK;AAAA,GACpD;AAAA,EACA,OAAS,EAAA;AAAA,IACP,EAAI,EAAA,OAAA;AAAA,IACJ,MAAQ,EAAA,WAAA;AAAA,IACR,WAAa,EAAA,aAAA;AAAA,IACb,KAAO,EAAA,sBAAA;AAAA,IACP,MAAQ,EAAA,EAAE,EAAI,EAAA,OAAA,EAAS,aAAa,aAAc;AAAA,GACpD;AAAA,EACA,SAAW,EAAA;AAAA,IACT,EAAI,EAAA,yBAAA;AAAA,IACJ,KAAO,EAAA,sBAAA;AAAA,IACP,MAAQ,EAAA,WAAA;AAAA,IACR,WAAa,EAAA,sBAAA;AAAA,IACb,MAAA,EAAQ,EAAE,EAAA,EAAI,iBAAkB;AAAA,GAClC;AAAA,EACA,QAAU,EAAA;AAAA,IACR,OAAS,EAAA,MAAA;AAAA,IACT,GAAK,EAAA,MAAA;AAAA,IACL,UAAY,EAAA,QAAA;AAAA,IACZ,MAAQ,EAAA,MAAA;AAAA,IACR,UAAY,EAAA,MAAA;AAAA,IACZ,OAAS,EAAA,OAAA;AAAA,IACT,KAAO,EAAA,sBAAA;AAAA,IACP,QAAU,EAAA,MAAA;AAAA,IACV,QAAQ,EAAE,MAAA,EAAQ,QAAQ,UAAY,EAAA,MAAA,EAAQ,gBAAgB,WAAY;AAAA,GAC5E;AAAA,EACA,KAAO,EAAA;AAAA,IACL,KAAO,EAAA,gBAAA;AAAA,IACP,UAAY,EAAA,OAAA;AAAA,IACZ,MAAQ,EAAA,WAAA;AAAA,IACR,WAAa,EAAA,iBAAA;AAAA,IACb,MAAQ,EAAA,EAAE,UAAY,EAAA,SAAA,EAAW,aAAa,iBAAkB;AAAA,GAClE;AAAA,EACA,KAAO,EAAA;AAAA,IACL,EAAI,EAAA,aAAA;AAAA,IACJ,KAAO,EAAA,sBAAA;AAAA,IACP,MAAQ,EAAA,MAAA;AAAA,IACR,SAAW,EAAA,MAAA;AAAA,IACX,MAAA,EAAQ,EAAE,EAAA,EAAI,aAAc;AAAA,GAC9B;AAAA,EACA,KAAO,EAAA;AAAA,IACL,EAAI,EAAA,OAAA;AAAA,IACJ,KAAO,EAAA,aAAA;AAAA,IACP,MAAQ,EAAA,WAAA;AAAA,IACR,WAAa,EAAA,iBAAA;AAAA,IACb,YAAc,EAAA,KAAA;AAAA,IACd,MAAA,EAAQ,EAAE,WAAA,EAAa,aAAc;AAAA,GACvC;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,MAAQ,EAAA,WAAA;AAAA,IACR,YAAc,EAAA,IAAA;AAAA,IACd,WAAa,EAAA,OAAA;AAAA,IACb,KAAO,EAAA,OAAA;AAAA,IACP,EAAI,EAAA,iBAAA;AAAA,IACJ,MAAA,EAAQ,EAAE,EAAA,EAAI,SAAU;AAAA;AAE5B,CAAA;AAEA,IAAM,WAAuD,GAAA;AAAA,EAC3D,EAAI,EAAA;AAAA,IACF,CAAG,EAAA,MAAA;AAAA,IACH,IAAM,EAAA,MAAA;AAAA,IACN,EAAI,EAAA,MAAA;AAAA,IACJ,QAAU,EAAA,MAAA;AAAA,IACV,UAAY,EAAA,MAAA;AAAA,IACZ,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,EAAI,EAAA;AAAA,IACF,CAAG,EAAA,MAAA;AAAA,IACH,IAAM,EAAA,OAAA;AAAA,IACN,EAAI,EAAA,KAAA;AAAA,IACJ,EAAI,EAAA,MAAA;AAAA,IACJ,QAAU,EAAA,MAAA;AAAA,IACV,UAAY,EAAA,MAAA;AAAA,IACZ,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,EAAI,EAAA;AAAA,IACF,CAAG,EAAA,MAAA;AAAA,IACH,IAAM,EAAA,MAAA;AAAA,IACN,EAAI,EAAA,MAAA;AAAA,IACJ,EAAI,EAAA,MAAA;AAAA,IACJ,QAAU,EAAA,MAAA;AAAA,IACV,UAAY,EAAA,MAAA;AAAA,IACZ,YAAc,EAAA;AAAA;AAElB,CAAA;AAca,IAAA,MAAA,GAASA,gBAAmD,CAAA,SAASC,OAChF,CAAA;AAAA,EACE,OAAU,GAAA,SAAA;AAAA,EACV,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EACA,CAAA;AAAA,EACA,KAAA;AAAA,EACA,sBAAyB,GAAA,KAAA;AAAA,EACzB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GACA,EAAA;AACA,EAAM,MAAA,QAAA,GAAW,OAAQ,CAAA,QAAA,IAAY,SAAS,CAAA;AAC9C,EAAM,MAAA,eAAA,GAAkBC,aAAO,KAAK,CAAA;AACpC,EAAA,MAAM,kBAAqB,GAAA,UAAA,KAAe,OAAY,KAAA,OAAA,GAAU,MAAY,GAAA,IAAA,CAAA;AAE5E,EAAM,MAAA,cAAA,GAA4C,sBAC9C,GAAA,CAAC,CAAM,KAAA;AACL,IAAA,UAAA,GAAa,CAAC,CAAA;AACd,IAAA,IAAI,QAAU,EAAA;AACd,IAAA,CAAA,CAAE,cAAe,EAAA;AACjB,IAAA,eAAA,CAAgB,OAAU,GAAA,IAAA;AAC1B,IAAA,OAAA,GAAU,CAA6C,CAAA;AAAA,GAEzD,GAAA,UAAA;AAEJ,EAAM,MAAA,WAAA,GAAsC,CAAC,CAAM,KAAA;AACjD,IAAI,IAAA,sBAAA,IAA0B,gBAAgB,OAAS,EAAA;AACrD,MAAA,eAAA,CAAgB,OAAU,GAAA,KAAA;AAC1B,MAAA;AAAA;AAEF,IAAA,OAAA,GAAU,CAAC,CAAA;AAAA,GACb;AAEA,EACE,uBAAAC,eAAA;AAAA,IAACC,cAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAK,EAAA,QAAA;AAAA,MACL,OAAQ,EAAA,OAAA;AAAA,MACR,OAAS,EAAA,SAAA;AAAA,MACT,QAAA;AAAA,MACA,OAAS,EAAA,WAAA;AAAA,MACT,UAAY,EAAA,cAAA;AAAA,MACZ,OAAA,EAAS,OAAY,KAAA,QAAA,GAAW,aAAgB,GAAA,MAAA,CAAA;AAAA,MAChD,UAAA,EAAY,UAAe,KAAA,QAAA,GAAW,QAAW,GAAA,MAAA,CAAA;AAAA,MACjD,GAAA,EAAK,GAAQ,KAAA,QAAA,GAAW,KAAQ,GAAA,MAAA,CAAA;AAAA,MAChC,YAAY,UAAc,IAAA,CAAA;AAAA,MAC1B,CAAG,EAAA,CAAA,IAAK,KAAU,KAAA,SAAA,GAAY,MAAS,GAAA,MAAA,CAAA;AAAA,MACvC,KAAO,EAAA,KAAA,KAAU,SAAa,IAAA,CAAA,IAAK,OAAO,MAAS,GAAA,MAAA,CAAA;AAAA,MAClD,GAAG,eAAe,OAAO,CAAA;AAAA,MACzB,GAAI,kBAAA,GAAqB,WAAY,CAAA,kBAAkB,IAAI,EAAC;AAAA,MAC5D,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA;AAAA;AAAA,GACH;AAEJ,CAAC;AAED,IAAO,cAAQ,GAAA","file":"chunk-Q4T6BIJ6.js","sourcesContent":["import { Button as ChakraButton, type ButtonProps } from '@chakra-ui/react';\nimport { forwardRef, useRef, type MouseEvent, type ReactNode } from 'react';\n\n/**\n * Variant set merged from both product apps:\n * - client-src: primary, primaryStrong, accent, outline, secondary, ghost, oauth, logOut\n * - counsellor: tertiary, light (its \"secondary\" mapped to `outline`)\n *\n * Components reference kollegio token NAMES (e.g. `backgroundPrimary`). The consuming\n * app's Chakra `createSystem` must include the @kollegioai/tokens colors.\n */\nexport type KollegioButtonVariant =\n | 'primary'\n | 'primaryStrong'\n | 'accent'\n | 'outline'\n | 'secondary'\n | 'tertiary'\n | 'light'\n | 'ghost'\n | 'oauth'\n | 'logOut';\n\nexport type KollegioButtonSize = 'sm' | 'md' | 'lg';\n\nconst VARIANT_STYLES: Record<KollegioButtonVariant, ButtonProps> = {\n primary: {\n bg: 'backgroundPrimary',\n color: 'white',\n border: '1px solid',\n borderColor: 'borderBrandOpacity30',\n _hover: { bg: 'backgroundPrimarySubtle' },\n },\n primaryStrong: {\n bg: 'contentPrimaryStrong',\n color: 'white',\n border: '1px solid',\n borderColor: 'borderBrandOpacity30',\n _hover: { bg: 'backgroundPrimarySubtle' },\n _active: { bg: 'backgroundPrimarySubtle' },\n },\n accent: {\n bg: 'backgroundAIAccent',\n color: 'white',\n border: '1px solid',\n borderColor: 'borderBrandOpacity30',\n _hover: { bg: 'backgroundAIAccent', opacity: 0.65 },\n },\n outline: {\n bg: 'white',\n border: '1px solid',\n borderColor: 'borderBrand',\n color: 'contentPrimaryStrong',\n _hover: { bg: 'white', borderColor: 'borderBrand' },\n },\n secondary: {\n bg: 'backgroundSuccessAccent',\n color: 'contentPrimaryStrong',\n border: '1px solid',\n borderColor: 'borderBrandOpacity30',\n _hover: { bg: 'backgroundBase3' },\n },\n tertiary: {\n display: 'flex',\n gap: '16px',\n alignItems: 'center',\n border: 'none',\n background: 'none',\n padding: 'unset',\n color: 'contentPrimarySubtle',\n fontSize: '14px',\n _hover: { border: 'none', background: 'none', textDecoration: 'underline' },\n },\n light: {\n color: 'contentPrimary',\n background: 'white',\n border: '1px solid',\n borderColor: 'borderSecondary',\n _hover: { background: 'gray.50', borderColor: 'borderSecondary' },\n },\n ghost: {\n bg: 'transparent',\n color: 'contentPrimaryStrong',\n border: 'none',\n boxShadow: 'none',\n _hover: { bg: 'transparent' },\n },\n oauth: {\n bg: 'white',\n color: 'primaryDark',\n border: '1px solid',\n borderColor: 'borderSecondary',\n borderRadius: '8px',\n _hover: { borderColor: 'borderBrand' },\n },\n logOut: {\n border: '1px solid',\n borderRadius: 'xl',\n borderColor: 'black',\n color: 'black',\n bg: 'backgroundBase2',\n _hover: { bg: '#FFE6E4' },\n },\n};\n\nconst SIZE_STYLES: Record<KollegioButtonSize, ButtonProps> = {\n sm: {\n h: '26px',\n minH: '26px',\n px: '10px',\n fontSize: '12px',\n lineHeight: '150%',\n borderRadius: '6px',\n },\n md: {\n h: 'auto',\n minH: 'unset',\n py: '8px',\n px: '12px',\n fontSize: '14px',\n lineHeight: '140%',\n borderRadius: '4px',\n },\n lg: {\n h: '40px',\n minH: '40px',\n py: '12px',\n px: '12px',\n fontSize: '14px',\n lineHeight: '140%',\n borderRadius: '8px',\n },\n};\n\nexport type KollegioButtonProps = Omit<ButtonProps, 'variant'> & {\n variant?: KollegioButtonVariant;\n /** Kollegio sizing preset — not Chakra's `size` prop. */\n buttonSize?: KollegioButtonSize;\n fullWidth?: boolean;\n isLoading?: boolean;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n /** iOS Safari: fire on touchend so fixed/mobile CTAs respond reliably. */\n enableTouchEndClickFix?: boolean;\n};\n\nexport const Button = forwardRef<HTMLButtonElement, KollegioButtonProps>(function Button(\n {\n variant = 'primary',\n buttonSize,\n fullWidth,\n isLoading,\n leftIcon,\n rightIcon,\n children,\n display,\n alignItems,\n gap,\n flexShrink,\n w,\n width,\n enableTouchEndClickFix = false,\n disabled,\n onClick,\n onTouchEnd,\n ...rest\n },\n ref,\n) {\n const hasIcons = Boolean(leftIcon || rightIcon);\n const didFireTouchRef = useRef(false);\n const resolvedButtonSize = buttonSize ?? (variant === 'oauth' ? undefined : 'md');\n\n const handleTouchEnd: ButtonProps['onTouchEnd'] = enableTouchEndClickFix\n ? (e) => {\n onTouchEnd?.(e);\n if (disabled) return;\n e.preventDefault();\n didFireTouchRef.current = true;\n onClick?.(e as unknown as MouseEvent<HTMLButtonElement>);\n }\n : onTouchEnd;\n\n const handleClick: ButtonProps['onClick'] = (e) => {\n if (enableTouchEndClickFix && didFireTouchRef.current) {\n didFireTouchRef.current = false;\n return;\n }\n onClick?.(e);\n };\n\n return (\n <ChakraButton\n ref={ref}\n type=\"button\"\n variant=\"solid\"\n loading={isLoading}\n disabled={disabled}\n onClick={handleClick}\n onTouchEnd={handleTouchEnd}\n display={display ?? (hasIcons ? 'inline-flex' : undefined)}\n alignItems={alignItems ?? (hasIcons ? 'center' : undefined)}\n gap={gap ?? (hasIcons ? '4px' : undefined)}\n flexShrink={flexShrink ?? 0}\n w={w ?? width ?? (fullWidth ? 'full' : undefined)}\n width={width ?? (fullWidth && w == null ? 'full' : undefined)}\n {...VARIANT_STYLES[variant]}\n {...(resolvedButtonSize ? SIZE_STYLES[resolvedButtonSize] : {})}\n {...rest}\n >\n {leftIcon}\n {children}\n {rightIcon}\n </ChakraButton>\n );\n});\n\nexport default Button;\n"]}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { Tooltip as Tooltip$1, Portal, useBreakpointValue, Box, VStack, Link, Text } from '@chakra-ui/react';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import ReactMarkdown from 'react-markdown';
|
|
4
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
// src/Tooltip.tsx
|
|
7
|
+
var TooltipPrimitive = React.forwardRef(function TooltipPrimitive2(props, ref) {
|
|
8
|
+
const {
|
|
9
|
+
showArrow,
|
|
10
|
+
hasArrow,
|
|
11
|
+
children,
|
|
12
|
+
disabled,
|
|
13
|
+
isDisabled,
|
|
14
|
+
portalled = true,
|
|
15
|
+
content,
|
|
16
|
+
label,
|
|
17
|
+
contentProps,
|
|
18
|
+
portalRef,
|
|
19
|
+
open,
|
|
20
|
+
isOpen,
|
|
21
|
+
placement,
|
|
22
|
+
offset,
|
|
23
|
+
closeOnClick,
|
|
24
|
+
fontSize,
|
|
25
|
+
width,
|
|
26
|
+
w,
|
|
27
|
+
bg,
|
|
28
|
+
color,
|
|
29
|
+
px,
|
|
30
|
+
py,
|
|
31
|
+
borderRadius,
|
|
32
|
+
boxShadow,
|
|
33
|
+
zIndex,
|
|
34
|
+
alignSelf,
|
|
35
|
+
openOnClick,
|
|
36
|
+
clickOpenDurationMs = 900,
|
|
37
|
+
fullWidthTrigger = false,
|
|
38
|
+
openDelay = 0,
|
|
39
|
+
closeDelay = 0,
|
|
40
|
+
...rest
|
|
41
|
+
} = props;
|
|
42
|
+
const shouldOpenTooltipOnClick = typeof window !== "undefined" && (navigator.maxTouchPoints > 0 || window.matchMedia?.("(pointer: coarse)")?.matches === true || window.matchMedia?.("(hover: none)")?.matches === true);
|
|
43
|
+
const resolvedOpenOnClick = openOnClick ?? shouldOpenTooltipOnClick;
|
|
44
|
+
const [manualOpen, setManualOpen] = React.useState(false);
|
|
45
|
+
const manualOpenTimeoutRef = React.useRef(null);
|
|
46
|
+
const triggerRef = React.useRef(null);
|
|
47
|
+
const contentRef = React.useRef(null);
|
|
48
|
+
const clearManualOpenTimeout = React.useCallback(() => {
|
|
49
|
+
if (manualOpenTimeoutRef.current !== null) {
|
|
50
|
+
window.clearTimeout(manualOpenTimeoutRef.current);
|
|
51
|
+
manualOpenTimeoutRef.current = null;
|
|
52
|
+
}
|
|
53
|
+
}, []);
|
|
54
|
+
React.useEffect(
|
|
55
|
+
() => () => {
|
|
56
|
+
clearManualOpenTimeout();
|
|
57
|
+
},
|
|
58
|
+
[clearManualOpenTimeout]
|
|
59
|
+
);
|
|
60
|
+
React.useEffect(() => {
|
|
61
|
+
if (!resolvedOpenOnClick || !manualOpen) return;
|
|
62
|
+
const onPointerDownCapture = (e) => {
|
|
63
|
+
const t = e.target;
|
|
64
|
+
if (!(t instanceof Node)) return;
|
|
65
|
+
if (triggerRef.current?.contains(t)) return;
|
|
66
|
+
if (contentRef.current?.contains(t)) return;
|
|
67
|
+
setManualOpen(false);
|
|
68
|
+
clearManualOpenTimeout();
|
|
69
|
+
};
|
|
70
|
+
document.addEventListener("pointerdown", onPointerDownCapture, true);
|
|
71
|
+
return () => document.removeEventListener("pointerdown", onPointerDownCapture, true);
|
|
72
|
+
}, [clearManualOpenTimeout, manualOpen, resolvedOpenOnClick]);
|
|
73
|
+
const isTooltipDisabled = disabled ?? isDisabled ?? false;
|
|
74
|
+
if (isTooltipDisabled) {
|
|
75
|
+
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
76
|
+
}
|
|
77
|
+
const tooltipContent = content ?? label;
|
|
78
|
+
if (!tooltipContent) {
|
|
79
|
+
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
80
|
+
}
|
|
81
|
+
const positioning = placement !== void 0 || offset !== void 0 ? {
|
|
82
|
+
...rest.positioning ?? {},
|
|
83
|
+
...placement !== void 0 ? { placement } : {},
|
|
84
|
+
...offset !== void 0 ? { offset } : {}
|
|
85
|
+
} : rest.positioning;
|
|
86
|
+
const mergedContentProps = {
|
|
87
|
+
fontSize,
|
|
88
|
+
width,
|
|
89
|
+
w,
|
|
90
|
+
bg,
|
|
91
|
+
color,
|
|
92
|
+
px,
|
|
93
|
+
py,
|
|
94
|
+
borderRadius,
|
|
95
|
+
boxShadow,
|
|
96
|
+
zIndex,
|
|
97
|
+
alignSelf,
|
|
98
|
+
...contentProps
|
|
99
|
+
};
|
|
100
|
+
const openTooltipOnClick = () => {
|
|
101
|
+
if (!resolvedOpenOnClick) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
setManualOpen(true);
|
|
105
|
+
clearManualOpenTimeout();
|
|
106
|
+
manualOpenTimeoutRef.current = window.setTimeout(() => {
|
|
107
|
+
setManualOpen(false);
|
|
108
|
+
manualOpenTimeoutRef.current = null;
|
|
109
|
+
}, clickOpenDurationMs);
|
|
110
|
+
};
|
|
111
|
+
const triggerChild = /* @__PURE__ */ jsx(
|
|
112
|
+
"span",
|
|
113
|
+
{
|
|
114
|
+
ref: triggerRef,
|
|
115
|
+
onClick: resolvedOpenOnClick ? openTooltipOnClick : void 0,
|
|
116
|
+
style: {
|
|
117
|
+
display: fullWidthTrigger ? "flex" : "inline-flex",
|
|
118
|
+
width: fullWidthTrigger ? "100%" : void 0,
|
|
119
|
+
alignItems: "center",
|
|
120
|
+
justifyContent: "center",
|
|
121
|
+
minWidth: resolvedOpenOnClick && !fullWidthTrigger ? 44 : void 0,
|
|
122
|
+
minHeight: resolvedOpenOnClick && !fullWidthTrigger ? 44 : void 0,
|
|
123
|
+
cursor: "pointer",
|
|
124
|
+
WebkitTapHighlightColor: "transparent",
|
|
125
|
+
color: "var(--chakra-colors-contentPrimaryStrong)"
|
|
126
|
+
},
|
|
127
|
+
children
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
const rootProps = {
|
|
131
|
+
...rest,
|
|
132
|
+
open: isOpen ?? open ?? (manualOpen ? true : void 0),
|
|
133
|
+
openDelay,
|
|
134
|
+
closeDelay,
|
|
135
|
+
positioning,
|
|
136
|
+
...closeOnClick === false ? { closeOnPointerDown: false } : {}
|
|
137
|
+
};
|
|
138
|
+
return /* @__PURE__ */ jsxs(Tooltip$1.Root, { ...rootProps, children: [
|
|
139
|
+
/* @__PURE__ */ jsx(Tooltip$1.Trigger, { asChild: true, children: triggerChild }),
|
|
140
|
+
/* @__PURE__ */ jsx(Portal, { disabled: !portalled, container: portalRef, children: /* @__PURE__ */ jsx(Tooltip$1.Positioner, { children: /* @__PURE__ */ jsxs(
|
|
141
|
+
Tooltip$1.Content,
|
|
142
|
+
{
|
|
143
|
+
ref: (node) => {
|
|
144
|
+
contentRef.current = node;
|
|
145
|
+
if (typeof ref === "function") ref(node);
|
|
146
|
+
else if (ref) ref.current = node;
|
|
147
|
+
},
|
|
148
|
+
...mergedContentProps,
|
|
149
|
+
children: [
|
|
150
|
+
(showArrow || hasArrow) && /* @__PURE__ */ jsx(Tooltip$1.Arrow, { children: /* @__PURE__ */ jsx(Tooltip$1.ArrowTip, {}) }),
|
|
151
|
+
tooltipContent
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
) }) })
|
|
155
|
+
] });
|
|
156
|
+
});
|
|
157
|
+
var Tooltip = ({ label, children, ...props }) => {
|
|
158
|
+
const isTouch = useBreakpointValue({ base: true, lg: false }) ?? true;
|
|
159
|
+
return /* @__PURE__ */ jsx(
|
|
160
|
+
TooltipPrimitive,
|
|
161
|
+
{
|
|
162
|
+
openOnClick: isTouch,
|
|
163
|
+
clickOpenDurationMs: isTouch ? 2500 : void 0,
|
|
164
|
+
content: label ? /* @__PURE__ */ jsx(VStack, { align: "start", gap: 2, maxW: "280px", children: /* @__PURE__ */ jsx(
|
|
165
|
+
ReactMarkdown,
|
|
166
|
+
{
|
|
167
|
+
components: {
|
|
168
|
+
p: ({ children: children2 }) => /* @__PURE__ */ jsx(Text, { color: "inherit", children: children2 }),
|
|
169
|
+
strong: ({ children: children2 }) => /* @__PURE__ */ jsx(Text, { color: "inherit", display: "block", asChild: true, children: /* @__PURE__ */ jsx("b", { children: children2 }) }),
|
|
170
|
+
ul: ({ children: children2 }) => /* @__PURE__ */ jsx(VStack, { as: "ul", align: "start", gap: 1, pl: 4, children: children2 }),
|
|
171
|
+
li: ({ children: children2 }) => /* @__PURE__ */ jsx(Text, { color: "inherit", as: "li", ml: 2, fontSize: "sm", lineHeight: "short", children: children2 }),
|
|
172
|
+
a: ({ href, children: children2 }) => /* @__PURE__ */ jsx(Link, { href: href ?? "#", target: "_blank", color: "blue.200", children: children2 })
|
|
173
|
+
},
|
|
174
|
+
children: label
|
|
175
|
+
}
|
|
176
|
+
) }) : null,
|
|
177
|
+
...props,
|
|
178
|
+
children: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Box, { as: "span", display: "inline-block", cursor: "default", _hover: { cursor: "pointer" }, children }) })
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
};
|
|
182
|
+
var Tooltip_default = Tooltip;
|
|
183
|
+
|
|
184
|
+
export { Tooltip, TooltipPrimitive, Tooltip_default };
|
|
185
|
+
//# sourceMappingURL=chunk-RFUSESWB.mjs.map
|
|
186
|
+
//# sourceMappingURL=chunk-RFUSESWB.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Tooltip.tsx"],"names":["TooltipPrimitive","ChakraTooltip","children"],"mappings":"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","file":"chunk-RFUSESWB.mjs","sourcesContent":["import { Box, Link, Text, Tooltip as ChakraTooltip, Portal, VStack, useBreakpointValue } from '@chakra-ui/react';\nimport * as React from 'react';\nimport ReactMarkdown from 'react-markdown';\n\ntype TooltipPositioning = NonNullable<ChakraTooltip.RootProps['positioning']>;\ntype TooltipPlacement = TooltipPositioning['placement'];\ntype TooltipOffset = TooltipPositioning['offset'];\n\nexport interface TooltipProps extends Omit<ChakraTooltip.RootProps, 'children' | 'open'> {\n children: React.ReactNode;\n showArrow?: boolean;\n hasArrow?: boolean;\n portalled?: boolean;\n portalRef?: React.RefObject<HTMLElement | null>;\n content?: React.ReactNode;\n label?: React.ReactNode;\n contentProps?: ChakraTooltip.ContentProps;\n disabled?: boolean;\n isDisabled?: boolean;\n open?: boolean;\n isOpen?: boolean;\n placement?: TooltipPlacement;\n offset?: TooltipOffset;\n closeOnClick?: boolean;\n fontSize?: ChakraTooltip.ContentProps['fontSize'];\n width?: ChakraTooltip.ContentProps['width'];\n w?: ChakraTooltip.ContentProps['w'];\n bg?: ChakraTooltip.ContentProps['bg'];\n color?: ChakraTooltip.ContentProps['color'];\n px?: ChakraTooltip.ContentProps['px'];\n py?: ChakraTooltip.ContentProps['py'];\n borderRadius?: ChakraTooltip.ContentProps['borderRadius'];\n boxShadow?: ChakraTooltip.ContentProps['boxShadow'];\n zIndex?: ChakraTooltip.ContentProps['zIndex'];\n alignSelf?: ChakraTooltip.ContentProps['alignSelf'];\n openOnClick?: boolean;\n clickOpenDurationMs?: number;\n fullWidthTrigger?: boolean;\n}\n\n/** Low-level Chakra v3 tooltip primitive. Prefer `Tooltip` (the markdown wrapper) for app usage. */\nexport const TooltipPrimitive = React.forwardRef<HTMLDivElement, TooltipProps>(function TooltipPrimitive(\n props,\n ref,\n) {\n const {\n showArrow,\n hasArrow,\n children,\n disabled,\n isDisabled,\n portalled = true,\n content,\n label,\n contentProps,\n portalRef,\n open,\n isOpen,\n placement,\n offset,\n closeOnClick,\n fontSize,\n width,\n w,\n bg,\n color,\n px,\n py,\n borderRadius,\n boxShadow,\n zIndex,\n alignSelf,\n openOnClick,\n clickOpenDurationMs = 900,\n fullWidthTrigger = false,\n openDelay = 0,\n closeDelay = 0,\n ...rest\n } = props;\n\n // Tap-to-open when hover is unreliable (phones, many tablets). iOS can still report `(hover: hover)`,\n // so rely on maxTouchPoints / coarse pointer — not hover alone.\n const shouldOpenTooltipOnClick =\n typeof window !== 'undefined' &&\n (navigator.maxTouchPoints > 0 ||\n window.matchMedia?.('(pointer: coarse)')?.matches === true ||\n window.matchMedia?.('(hover: none)')?.matches === true);\n const resolvedOpenOnClick = openOnClick ?? shouldOpenTooltipOnClick;\n\n const [manualOpen, setManualOpen] = React.useState(false);\n const manualOpenTimeoutRef = React.useRef<number | null>(null);\n const triggerRef = React.useRef<HTMLSpanElement | null>(null);\n const contentRef = React.useRef<HTMLDivElement | null>(null);\n\n const clearManualOpenTimeout = React.useCallback(() => {\n if (manualOpenTimeoutRef.current !== null) {\n window.clearTimeout(manualOpenTimeoutRef.current);\n manualOpenTimeoutRef.current = null;\n }\n }, []);\n\n React.useEffect(\n () => () => {\n clearManualOpenTimeout();\n },\n [clearManualOpenTimeout],\n );\n\n // When opened via tap/click, close on any outside click/tap.\n React.useEffect(() => {\n if (!resolvedOpenOnClick || !manualOpen) return;\n\n const onPointerDownCapture = (e: PointerEvent) => {\n const t = e.target;\n if (!(t instanceof Node)) return;\n if (triggerRef.current?.contains(t)) return;\n if (contentRef.current?.contains(t)) return;\n setManualOpen(false);\n clearManualOpenTimeout();\n };\n\n document.addEventListener('pointerdown', onPointerDownCapture, true);\n return () => document.removeEventListener('pointerdown', onPointerDownCapture, true);\n }, [clearManualOpenTimeout, manualOpen, resolvedOpenOnClick]);\n\n const isTooltipDisabled = disabled ?? isDisabled ?? false;\n if (isTooltipDisabled) {\n return <>{children}</>;\n }\n\n const tooltipContent = content ?? label;\n if (!tooltipContent) {\n return <>{children}</>;\n }\n\n const positioning =\n placement !== undefined || offset !== undefined\n ? {\n ...(rest.positioning ?? {}),\n ...(placement !== undefined ? { placement } : {}),\n ...(offset !== undefined ? { offset } : {}),\n }\n : rest.positioning;\n\n const mergedContentProps: ChakraTooltip.ContentProps = {\n fontSize,\n width,\n w,\n bg,\n color,\n px,\n py,\n borderRadius,\n boxShadow,\n zIndex,\n alignSelf,\n ...contentProps,\n };\n\n const openTooltipOnClick = () => {\n if (!resolvedOpenOnClick) {\n return;\n }\n setManualOpen(true);\n clearManualOpenTimeout();\n manualOpenTimeoutRef.current = window.setTimeout(() => {\n setManualOpen(false);\n manualOpenTimeoutRef.current = null;\n }, clickOpenDurationMs);\n };\n\n const triggerChild = (\n <span\n ref={triggerRef}\n onClick={resolvedOpenOnClick ? openTooltipOnClick : undefined}\n style={{\n display: fullWidthTrigger ? 'flex' : 'inline-flex',\n width: fullWidthTrigger ? '100%' : undefined,\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: resolvedOpenOnClick && !fullWidthTrigger ? 44 : undefined,\n minHeight: resolvedOpenOnClick && !fullWidthTrigger ? 44 : undefined,\n cursor: 'pointer',\n WebkitTapHighlightColor: 'transparent',\n color: 'var(--chakra-colors-contentPrimaryStrong)',\n }}\n >\n {children}\n </span>\n );\n\n const rootProps: ChakraTooltip.RootProps = {\n ...rest,\n open: isOpen ?? open ?? (manualOpen ? true : undefined),\n openDelay,\n closeDelay,\n positioning,\n ...(closeOnClick === false ? { closeOnPointerDown: false } : {}),\n };\n\n return (\n <ChakraTooltip.Root {...rootProps}>\n <ChakraTooltip.Trigger asChild>{triggerChild}</ChakraTooltip.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraTooltip.Positioner>\n <ChakraTooltip.Content\n ref={(node) => {\n contentRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n {...mergedContentProps}\n >\n {(showArrow || hasArrow) && (\n <ChakraTooltip.Arrow>\n <ChakraTooltip.ArrowTip />\n </ChakraTooltip.Arrow>\n )}\n {tooltipContent}\n </ChakraTooltip.Content>\n </ChakraTooltip.Positioner>\n </Portal>\n </ChakraTooltip.Root>\n );\n});\n\ninterface KollegioTooltipProps extends Omit<TooltipProps, 'content' | 'children'> {\n label?: string;\n children: React.ReactNode;\n}\n\n/** Brand tooltip: renders markdown `label`, tap-to-open on touch devices. */\nexport const Tooltip = ({ label, children, ...props }: KollegioTooltipProps) => {\n // On touch devices there is no hover; enable tap-to-open.\n const isTouch = useBreakpointValue({ base: true, lg: false }) ?? true;\n return (\n <TooltipPrimitive\n openOnClick={isTouch}\n // Give users time to read on mobile before auto-closing.\n clickOpenDurationMs={isTouch ? 2500 : undefined}\n content={\n label ? (\n <VStack align=\"start\" gap={2} maxW=\"280px\">\n <ReactMarkdown\n components={{\n p: ({ children }) => <Text color={'inherit'}>{children}</Text>,\n strong: ({ children }) => (\n <Text color={'inherit'} display=\"block\" asChild>\n <b>{children}</b>\n </Text>\n ),\n ul: ({ children }) => (\n <VStack as=\"ul\" align=\"start\" gap={1} pl={4}>\n {children}\n </VStack>\n ),\n li: ({ children }) => (\n <Text color={'inherit'} as=\"li\" ml={2} fontSize=\"sm\" lineHeight=\"short\">\n {children}\n </Text>\n ),\n a: ({ href, children }) => (\n <Link href={href ?? '#'} target=\"_blank\" color=\"blue.200\">\n {children}\n </Link>\n ),\n }}\n >\n {label}\n </ReactMarkdown>\n </VStack>\n ) : null\n }\n {...props}\n >\n <span>\n <Box as=\"span\" display=\"inline-block\" cursor=\"default\" _hover={{ cursor: 'pointer' }}>\n {children}\n </Box>\n </span>\n </TooltipPrimitive>\n );\n};\n\nexport default Tooltip;\n"]}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { Button as Button$1 } from '@chakra-ui/react';
|
|
2
|
+
import { forwardRef, useRef } from 'react';
|
|
3
|
+
import { jsxs } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/Button.tsx
|
|
6
|
+
var VARIANT_STYLES = {
|
|
7
|
+
primary: {
|
|
8
|
+
bg: "backgroundPrimary",
|
|
9
|
+
color: "white",
|
|
10
|
+
border: "1px solid",
|
|
11
|
+
borderColor: "borderBrandOpacity30",
|
|
12
|
+
_hover: { bg: "backgroundPrimarySubtle" }
|
|
13
|
+
},
|
|
14
|
+
primaryStrong: {
|
|
15
|
+
bg: "contentPrimaryStrong",
|
|
16
|
+
color: "white",
|
|
17
|
+
border: "1px solid",
|
|
18
|
+
borderColor: "borderBrandOpacity30",
|
|
19
|
+
_hover: { bg: "backgroundPrimarySubtle" },
|
|
20
|
+
_active: { bg: "backgroundPrimarySubtle" }
|
|
21
|
+
},
|
|
22
|
+
accent: {
|
|
23
|
+
bg: "backgroundAIAccent",
|
|
24
|
+
color: "white",
|
|
25
|
+
border: "1px solid",
|
|
26
|
+
borderColor: "borderBrandOpacity30",
|
|
27
|
+
_hover: { bg: "backgroundAIAccent", opacity: 0.65 }
|
|
28
|
+
},
|
|
29
|
+
outline: {
|
|
30
|
+
bg: "white",
|
|
31
|
+
border: "1px solid",
|
|
32
|
+
borderColor: "borderBrand",
|
|
33
|
+
color: "contentPrimaryStrong",
|
|
34
|
+
_hover: { bg: "white", borderColor: "borderBrand" }
|
|
35
|
+
},
|
|
36
|
+
secondary: {
|
|
37
|
+
bg: "backgroundSuccessAccent",
|
|
38
|
+
color: "contentPrimaryStrong",
|
|
39
|
+
border: "1px solid",
|
|
40
|
+
borderColor: "borderBrandOpacity30",
|
|
41
|
+
_hover: { bg: "backgroundBase3" }
|
|
42
|
+
},
|
|
43
|
+
tertiary: {
|
|
44
|
+
display: "flex",
|
|
45
|
+
gap: "16px",
|
|
46
|
+
alignItems: "center",
|
|
47
|
+
border: "none",
|
|
48
|
+
background: "none",
|
|
49
|
+
padding: "unset",
|
|
50
|
+
color: "contentPrimarySubtle",
|
|
51
|
+
fontSize: "14px",
|
|
52
|
+
_hover: { border: "none", background: "none", textDecoration: "underline" }
|
|
53
|
+
},
|
|
54
|
+
light: {
|
|
55
|
+
color: "contentPrimary",
|
|
56
|
+
background: "white",
|
|
57
|
+
border: "1px solid",
|
|
58
|
+
borderColor: "borderSecondary",
|
|
59
|
+
_hover: { background: "gray.50", borderColor: "borderSecondary" }
|
|
60
|
+
},
|
|
61
|
+
ghost: {
|
|
62
|
+
bg: "transparent",
|
|
63
|
+
color: "contentPrimaryStrong",
|
|
64
|
+
border: "none",
|
|
65
|
+
boxShadow: "none",
|
|
66
|
+
_hover: { bg: "transparent" }
|
|
67
|
+
},
|
|
68
|
+
oauth: {
|
|
69
|
+
bg: "white",
|
|
70
|
+
color: "primaryDark",
|
|
71
|
+
border: "1px solid",
|
|
72
|
+
borderColor: "borderSecondary",
|
|
73
|
+
borderRadius: "8px",
|
|
74
|
+
_hover: { borderColor: "borderBrand" }
|
|
75
|
+
},
|
|
76
|
+
logOut: {
|
|
77
|
+
border: "1px solid",
|
|
78
|
+
borderRadius: "xl",
|
|
79
|
+
borderColor: "black",
|
|
80
|
+
color: "black",
|
|
81
|
+
bg: "backgroundBase2",
|
|
82
|
+
_hover: { bg: "#FFE6E4" }
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
var SIZE_STYLES = {
|
|
86
|
+
sm: {
|
|
87
|
+
h: "26px",
|
|
88
|
+
minH: "26px",
|
|
89
|
+
px: "10px",
|
|
90
|
+
fontSize: "12px",
|
|
91
|
+
lineHeight: "150%",
|
|
92
|
+
borderRadius: "6px"
|
|
93
|
+
},
|
|
94
|
+
md: {
|
|
95
|
+
h: "auto",
|
|
96
|
+
minH: "unset",
|
|
97
|
+
py: "8px",
|
|
98
|
+
px: "12px",
|
|
99
|
+
fontSize: "14px",
|
|
100
|
+
lineHeight: "140%",
|
|
101
|
+
borderRadius: "4px"
|
|
102
|
+
},
|
|
103
|
+
lg: {
|
|
104
|
+
h: "40px",
|
|
105
|
+
minH: "40px",
|
|
106
|
+
py: "12px",
|
|
107
|
+
px: "12px",
|
|
108
|
+
fontSize: "14px",
|
|
109
|
+
lineHeight: "140%",
|
|
110
|
+
borderRadius: "8px"
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
var Button = forwardRef(function Button2({
|
|
114
|
+
variant = "primary",
|
|
115
|
+
buttonSize,
|
|
116
|
+
fullWidth,
|
|
117
|
+
isLoading,
|
|
118
|
+
leftIcon,
|
|
119
|
+
rightIcon,
|
|
120
|
+
children,
|
|
121
|
+
display,
|
|
122
|
+
alignItems,
|
|
123
|
+
gap,
|
|
124
|
+
flexShrink,
|
|
125
|
+
w,
|
|
126
|
+
width,
|
|
127
|
+
enableTouchEndClickFix = false,
|
|
128
|
+
disabled,
|
|
129
|
+
onClick,
|
|
130
|
+
onTouchEnd,
|
|
131
|
+
...rest
|
|
132
|
+
}, ref) {
|
|
133
|
+
const hasIcons = Boolean(leftIcon || rightIcon);
|
|
134
|
+
const didFireTouchRef = useRef(false);
|
|
135
|
+
const resolvedButtonSize = buttonSize ?? (variant === "oauth" ? void 0 : "md");
|
|
136
|
+
const handleTouchEnd = enableTouchEndClickFix ? (e) => {
|
|
137
|
+
onTouchEnd?.(e);
|
|
138
|
+
if (disabled) return;
|
|
139
|
+
e.preventDefault();
|
|
140
|
+
didFireTouchRef.current = true;
|
|
141
|
+
onClick?.(e);
|
|
142
|
+
} : onTouchEnd;
|
|
143
|
+
const handleClick = (e) => {
|
|
144
|
+
if (enableTouchEndClickFix && didFireTouchRef.current) {
|
|
145
|
+
didFireTouchRef.current = false;
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
onClick?.(e);
|
|
149
|
+
};
|
|
150
|
+
return /* @__PURE__ */ jsxs(
|
|
151
|
+
Button$1,
|
|
152
|
+
{
|
|
153
|
+
ref,
|
|
154
|
+
type: "button",
|
|
155
|
+
variant: "solid",
|
|
156
|
+
loading: isLoading,
|
|
157
|
+
disabled,
|
|
158
|
+
onClick: handleClick,
|
|
159
|
+
onTouchEnd: handleTouchEnd,
|
|
160
|
+
display: display ?? (hasIcons ? "inline-flex" : void 0),
|
|
161
|
+
alignItems: alignItems ?? (hasIcons ? "center" : void 0),
|
|
162
|
+
gap: gap ?? (hasIcons ? "4px" : void 0),
|
|
163
|
+
flexShrink: flexShrink ?? 0,
|
|
164
|
+
w: w ?? width ?? (fullWidth ? "full" : void 0),
|
|
165
|
+
width: width ?? (fullWidth && w == null ? "full" : void 0),
|
|
166
|
+
...VARIANT_STYLES[variant],
|
|
167
|
+
...resolvedButtonSize ? SIZE_STYLES[resolvedButtonSize] : {},
|
|
168
|
+
...rest,
|
|
169
|
+
children: [
|
|
170
|
+
leftIcon,
|
|
171
|
+
children,
|
|
172
|
+
rightIcon
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
);
|
|
176
|
+
});
|
|
177
|
+
var Button_default = Button;
|
|
178
|
+
|
|
179
|
+
export { Button, Button_default };
|
|
180
|
+
//# sourceMappingURL=chunk-RYGUHPYX.mjs.map
|
|
181
|
+
//# sourceMappingURL=chunk-RYGUHPYX.mjs.map
|