@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/index.js CHANGED
@@ -1,522 +1,34 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
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
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ 'use strict';
29
2
 
30
- // src/index.ts
31
- var index_exports = {};
32
- __export(index_exports, {
33
- Button: () => Button,
34
- EllipsisMenu: () => EllipsisMenu,
35
- EllipsisMenuOption: () => EllipsisMenuOption,
36
- KollegioButton: () => Button_default,
37
- Tooltip: () => Tooltip,
38
- TooltipPrimitive: () => TooltipPrimitive
39
- });
40
- module.exports = __toCommonJS(index_exports);
3
+ var chunkQ4T6BIJ6_js = require('./chunk-Q4T6BIJ6.js');
4
+ var chunk55KQFLN6_js = require('./chunk-55KQFLN6.js');
5
+ var chunkEBQK5NBX_js = require('./chunk-EBQK5NBX.js');
41
6
 
42
- // src/Button.tsx
43
- var import_react = require("@chakra-ui/react");
44
- var import_react2 = require("react");
45
- var import_jsx_runtime = require("react/jsx-runtime");
46
- var VARIANT_STYLES = {
47
- primary: {
48
- bg: "backgroundPrimary",
49
- color: "white",
50
- border: "1px solid",
51
- borderColor: "borderBrandOpacity30",
52
- _hover: { bg: "backgroundPrimarySubtle" }
53
- },
54
- primaryStrong: {
55
- bg: "contentPrimaryStrong",
56
- color: "white",
57
- border: "1px solid",
58
- borderColor: "borderBrandOpacity30",
59
- _hover: { bg: "backgroundPrimarySubtle" },
60
- _active: { bg: "backgroundPrimarySubtle" }
61
- },
62
- accent: {
63
- bg: "backgroundAIAccent",
64
- color: "white",
65
- border: "1px solid",
66
- borderColor: "borderBrandOpacity30",
67
- _hover: { bg: "backgroundAIAccent", opacity: 0.65 }
68
- },
69
- outline: {
70
- bg: "white",
71
- border: "1px solid",
72
- borderColor: "borderBrand",
73
- color: "contentPrimaryStrong",
74
- _hover: { bg: "white", borderColor: "borderBrand" }
75
- },
76
- secondary: {
77
- bg: "backgroundSuccessAccent",
78
- color: "contentPrimaryStrong",
79
- border: "1px solid",
80
- borderColor: "borderBrandOpacity30",
81
- _hover: { bg: "backgroundBase3" }
82
- },
83
- tertiary: {
84
- display: "flex",
85
- gap: "16px",
86
- alignItems: "center",
87
- border: "none",
88
- background: "none",
89
- padding: "unset",
90
- color: "contentPrimarySubtle",
91
- fontSize: "14px",
92
- _hover: { border: "none", background: "none", textDecoration: "underline" }
93
- },
94
- light: {
95
- color: "contentPrimary",
96
- background: "white",
97
- border: "1px solid",
98
- borderColor: "borderSecondary",
99
- _hover: { background: "gray.50", borderColor: "borderSecondary" }
100
- },
101
- ghost: {
102
- bg: "transparent",
103
- color: "contentPrimaryStrong",
104
- border: "none",
105
- boxShadow: "none",
106
- _hover: { bg: "transparent" }
107
- },
108
- oauth: {
109
- bg: "white",
110
- color: "primaryDark",
111
- border: "1px solid",
112
- borderColor: "borderSecondary",
113
- borderRadius: "8px",
114
- _hover: { borderColor: "borderBrand" }
115
- },
116
- logOut: {
117
- border: "1px solid",
118
- borderRadius: "xl",
119
- borderColor: "black",
120
- color: "black",
121
- bg: "backgroundBase2",
122
- _hover: { bg: "#FFE6E4" }
123
- }
124
- };
125
- var SIZE_STYLES = {
126
- sm: {
127
- h: "26px",
128
- minH: "26px",
129
- px: "10px",
130
- fontSize: "12px",
131
- lineHeight: "150%",
132
- borderRadius: "6px"
133
- },
134
- md: {
135
- h: "auto",
136
- minH: "unset",
137
- py: "8px",
138
- px: "12px",
139
- fontSize: "14px",
140
- lineHeight: "140%",
141
- borderRadius: "4px"
142
- },
143
- lg: {
144
- h: "40px",
145
- minH: "40px",
146
- py: "12px",
147
- px: "12px",
148
- fontSize: "14px",
149
- lineHeight: "140%",
150
- borderRadius: "8px"
151
- }
152
- };
153
- var Button = (0, import_react2.forwardRef)(function Button2({
154
- variant = "primary",
155
- buttonSize,
156
- fullWidth,
157
- isLoading,
158
- leftIcon,
159
- rightIcon,
160
- children,
161
- display,
162
- alignItems,
163
- gap,
164
- flexShrink,
165
- w,
166
- width,
167
- enableTouchEndClickFix = false,
168
- disabled,
169
- onClick,
170
- onTouchEnd,
171
- ...rest
172
- }, ref) {
173
- const hasIcons = Boolean(leftIcon || rightIcon);
174
- const didFireTouchRef = (0, import_react2.useRef)(false);
175
- const resolvedButtonSize = buttonSize ?? (variant === "oauth" ? void 0 : "md");
176
- const handleTouchEnd = enableTouchEndClickFix ? (e) => {
177
- onTouchEnd?.(e);
178
- if (disabled) return;
179
- e.preventDefault();
180
- didFireTouchRef.current = true;
181
- onClick?.(e);
182
- } : onTouchEnd;
183
- const handleClick = (e) => {
184
- if (enableTouchEndClickFix && didFireTouchRef.current) {
185
- didFireTouchRef.current = false;
186
- return;
187
- }
188
- onClick?.(e);
189
- };
190
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
191
- import_react.Button,
192
- {
193
- ref,
194
- type: "button",
195
- variant: "solid",
196
- loading: isLoading,
197
- disabled,
198
- onClick: handleClick,
199
- onTouchEnd: handleTouchEnd,
200
- display: display ?? (hasIcons ? "inline-flex" : void 0),
201
- alignItems: alignItems ?? (hasIcons ? "center" : void 0),
202
- gap: gap ?? (hasIcons ? "4px" : void 0),
203
- flexShrink: flexShrink ?? 0,
204
- w: w ?? width ?? (fullWidth ? "full" : void 0),
205
- width: width ?? (fullWidth && w == null ? "full" : void 0),
206
- ...VARIANT_STYLES[variant],
207
- ...resolvedButtonSize ? SIZE_STYLES[resolvedButtonSize] : {},
208
- ...rest,
209
- children: [
210
- leftIcon,
211
- children,
212
- rightIcon
213
- ]
214
- }
215
- );
216
- });
217
- var Button_default = Button;
218
7
 
219
- // src/Tooltip.tsx
220
- var import_react3 = require("@chakra-ui/react");
221
- var React = __toESM(require("react"));
222
- var import_react_markdown = __toESM(require("react-markdown"));
223
- var import_jsx_runtime2 = require("react/jsx-runtime");
224
- var TooltipPrimitive = React.forwardRef(function TooltipPrimitive2(props, ref) {
225
- const {
226
- showArrow,
227
- hasArrow,
228
- children,
229
- disabled,
230
- isDisabled,
231
- portalled = true,
232
- content,
233
- label,
234
- contentProps,
235
- portalRef,
236
- open,
237
- isOpen,
238
- placement,
239
- offset,
240
- closeOnClick,
241
- fontSize,
242
- width,
243
- w,
244
- bg,
245
- color,
246
- px,
247
- py,
248
- borderRadius,
249
- boxShadow,
250
- zIndex,
251
- alignSelf,
252
- openOnClick,
253
- clickOpenDurationMs = 900,
254
- fullWidthTrigger = false,
255
- openDelay = 0,
256
- closeDelay = 0,
257
- ...rest
258
- } = props;
259
- const shouldOpenTooltipOnClick = typeof window !== "undefined" && (navigator.maxTouchPoints > 0 || window.matchMedia?.("(pointer: coarse)")?.matches === true || window.matchMedia?.("(hover: none)")?.matches === true);
260
- const resolvedOpenOnClick = openOnClick ?? shouldOpenTooltipOnClick;
261
- const [manualOpen, setManualOpen] = React.useState(false);
262
- const manualOpenTimeoutRef = React.useRef(null);
263
- const triggerRef = React.useRef(null);
264
- const contentRef = React.useRef(null);
265
- const clearManualOpenTimeout = React.useCallback(() => {
266
- if (manualOpenTimeoutRef.current !== null) {
267
- window.clearTimeout(manualOpenTimeoutRef.current);
268
- manualOpenTimeoutRef.current = null;
269
- }
270
- }, []);
271
- React.useEffect(
272
- () => () => {
273
- clearManualOpenTimeout();
274
- },
275
- [clearManualOpenTimeout]
276
- );
277
- React.useEffect(() => {
278
- if (!resolvedOpenOnClick || !manualOpen) return;
279
- const onPointerDownCapture = (e) => {
280
- const t = e.target;
281
- if (!(t instanceof Node)) return;
282
- if (triggerRef.current?.contains(t)) return;
283
- if (contentRef.current?.contains(t)) return;
284
- setManualOpen(false);
285
- clearManualOpenTimeout();
286
- };
287
- document.addEventListener("pointerdown", onPointerDownCapture, true);
288
- return () => document.removeEventListener("pointerdown", onPointerDownCapture, true);
289
- }, [clearManualOpenTimeout, manualOpen, resolvedOpenOnClick]);
290
- const isTooltipDisabled = disabled ?? isDisabled ?? false;
291
- if (isTooltipDisabled) {
292
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, { children });
293
- }
294
- const tooltipContent = content ?? label;
295
- if (!tooltipContent) {
296
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, { children });
297
- }
298
- const positioning = placement !== void 0 || offset !== void 0 ? {
299
- ...rest.positioning ?? {},
300
- ...placement !== void 0 ? { placement } : {},
301
- ...offset !== void 0 ? { offset } : {}
302
- } : rest.positioning;
303
- const mergedContentProps = {
304
- fontSize,
305
- width,
306
- w,
307
- bg,
308
- color,
309
- px,
310
- py,
311
- borderRadius,
312
- boxShadow,
313
- zIndex,
314
- alignSelf,
315
- ...contentProps
316
- };
317
- const openTooltipOnClick = () => {
318
- if (!resolvedOpenOnClick) {
319
- return;
320
- }
321
- setManualOpen(true);
322
- clearManualOpenTimeout();
323
- manualOpenTimeoutRef.current = window.setTimeout(() => {
324
- setManualOpen(false);
325
- manualOpenTimeoutRef.current = null;
326
- }, clickOpenDurationMs);
327
- };
328
- const triggerChild = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
329
- "span",
330
- {
331
- ref: triggerRef,
332
- onClick: resolvedOpenOnClick ? openTooltipOnClick : void 0,
333
- style: {
334
- display: fullWidthTrigger ? "flex" : "inline-flex",
335
- width: fullWidthTrigger ? "100%" : void 0,
336
- alignItems: "center",
337
- justifyContent: "center",
338
- minWidth: resolvedOpenOnClick && !fullWidthTrigger ? 44 : void 0,
339
- minHeight: resolvedOpenOnClick && !fullWidthTrigger ? 44 : void 0,
340
- cursor: "pointer",
341
- WebkitTapHighlightColor: "transparent",
342
- color: "var(--chakra-colors-contentPrimaryStrong)"
343
- },
344
- children
345
- }
346
- );
347
- const rootProps = {
348
- ...rest,
349
- open: isOpen ?? open ?? (manualOpen ? true : void 0),
350
- openDelay,
351
- closeDelay,
352
- positioning,
353
- ...closeOnClick === false ? { closeOnPointerDown: false } : {}
354
- };
355
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react3.Tooltip.Root, { ...rootProps, children: [
356
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.Tooltip.Trigger, { asChild: true, children: triggerChild }),
357
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.Portal, { disabled: !portalled, container: portalRef, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.Tooltip.Positioner, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
358
- import_react3.Tooltip.Content,
359
- {
360
- ref: (node) => {
361
- contentRef.current = node;
362
- if (typeof ref === "function") ref(node);
363
- else if (ref) ref.current = node;
364
- },
365
- ...mergedContentProps,
366
- children: [
367
- (showArrow || hasArrow) && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.Tooltip.Arrow, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.Tooltip.ArrowTip, {}) }),
368
- tooltipContent
369
- ]
370
- }
371
- ) }) })
372
- ] });
373
- });
374
- var Tooltip = ({ label, children, ...props }) => {
375
- const isTouch = (0, import_react3.useBreakpointValue)({ base: true, lg: false }) ?? true;
376
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
377
- TooltipPrimitive,
378
- {
379
- openOnClick: isTouch,
380
- clickOpenDurationMs: isTouch ? 2500 : void 0,
381
- content: label ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.VStack, { align: "start", gap: 2, maxW: "280px", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
382
- import_react_markdown.default,
383
- {
384
- components: {
385
- p: ({ children: children2 }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.Text, { color: "inherit", children: children2 }),
386
- strong: ({ children: children2 }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.Text, { color: "inherit", display: "block", asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("b", { children: children2 }) }),
387
- ul: ({ children: children2 }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.VStack, { as: "ul", align: "start", gap: 1, pl: 4, children: children2 }),
388
- li: ({ children: children2 }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.Text, { color: "inherit", as: "li", ml: 2, fontSize: "sm", lineHeight: "short", children: children2 }),
389
- a: ({ href, children: children2 }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.Link, { href: href ?? "#", target: "_blank", color: "blue.200", children: children2 })
390
- },
391
- children: label
392
- }
393
- ) }) : null,
394
- ...props,
395
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.Box, { as: "span", display: "inline-block", cursor: "default", _hover: { cursor: "pointer" }, children }) })
396
- }
397
- );
398
- };
399
8
 
400
- // src/EllipsisMenu.tsx
401
- var import_react4 = require("@chakra-ui/react");
402
- var import_react5 = require("react");
403
- var import_jsx_runtime3 = require("react/jsx-runtime");
404
- var DotsVerticalIcon = ({ size = 20 }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("svg", { width: size, height: size, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
405
- "path",
406
- {
407
- d: "M10 10.833a.833.833 0 100-1.666.833.833 0 000 1.666zM10 5a.833.833 0 100-1.667A.833.833 0 0010 5zM10 16.667A.833.833 0 1010 15a.833.833 0 000 1.667z",
408
- stroke: "currentColor",
409
- strokeWidth: "1.667",
410
- strokeLinecap: "round",
411
- strokeLinejoin: "round"
412
- }
413
- ) });
414
- var EllipsisMenu = ({ children }) => {
415
- const [showDropdown, setShowDropdown] = (0, import_react5.useState)(false);
416
- const menuRef = (0, import_react5.useRef)(null);
417
- (0, import_react5.useEffect)(() => {
418
- const handleClickOutside = (event) => {
419
- if (menuRef.current && !menuRef.current.contains(event.target)) {
420
- setShowDropdown(false);
421
- }
422
- };
423
- if (showDropdown) {
424
- document.addEventListener("mousedown", handleClickOutside);
425
- } else {
426
- document.removeEventListener("mousedown", handleClickOutside);
427
- }
428
- return () => {
429
- document.removeEventListener("mousedown", handleClickOutside);
430
- };
431
- }, [showDropdown]);
432
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react4.Box, { position: "relative", ref: menuRef, children: [
433
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
434
- import_react4.Box,
435
- {
436
- padding: "2px",
437
- tabIndex: 0,
438
- color: "contentPrimaryStrong",
439
- onKeyDown: (e) => {
440
- e.stopPropagation();
441
- },
442
- onClick: (event) => {
443
- event.stopPropagation();
444
- setShowDropdown(true);
445
- },
446
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DotsVerticalIcon, {})
447
- }
448
- ),
449
- showDropdown && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
450
- import_react4.VStack,
451
- {
452
- position: "absolute",
453
- right: "10px",
454
- top: "5px",
455
- bg: "white",
456
- rounded: "8px",
457
- border: "1px solid",
458
- borderColor: "borderSecondary",
459
- zIndex: "10",
460
- boxShadow: "0px 4px 4px rgba(0, 0, 0, 0.05)",
461
- width: "216px",
462
- gap: 0,
463
- overflow: "scroll",
464
- css: {
465
- "&::-webkit-scrollbar": { display: "none" },
466
- scrollbarWidth: "none",
467
- msOverflowStyle: "none"
468
- },
469
- children: import_react5.Children.map(children, (child) => {
470
- if (!(0, import_react5.isValidElement)(child)) {
471
- return child;
472
- }
473
- const originalOnClick = child.props.onClick;
474
- const handleClick = () => {
475
- setShowDropdown(false);
476
- if (typeof originalOnClick === "function") {
477
- originalOnClick();
478
- }
479
- };
480
- return (0, import_react5.cloneElement)(child, {
481
- onClick: handleClick
482
- });
483
- })
484
- }
485
- )
486
- ] });
487
- };
488
- var EllipsisMenuOption = ({
489
- text,
490
- onClick,
491
- color = "contentPrimaryStrong",
492
- loading = false
493
- }) => {
494
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react4.Box, { display: "flex", justifyContent: "space-between", width: "100%", _hover: { background: "backgroundBase1" }, children: [
495
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
496
- import_react4.Text,
497
- {
498
- tabIndex: 0,
499
- fontSize: "14px",
500
- color: loading ? "contentPrimarySubtle" : color,
501
- cursor: loading ? "not-allowed" : "pointer",
502
- width: "full",
503
- onClick,
504
- textAlign: "start",
505
- px: 2,
506
- py: 1.5,
507
- children: text
508
- }
509
- ),
510
- loading && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react4.Spinner, { size: "sm", color: "contentPrimarySubtle", alignSelf: "center", mr: 2 })
511
- ] });
512
- };
513
- // Annotate the CommonJS export names for ESM import in node:
514
- 0 && (module.exports = {
515
- Button,
516
- EllipsisMenu,
517
- EllipsisMenuOption,
518
- KollegioButton,
519
- Tooltip,
520
- TooltipPrimitive
9
+ Object.defineProperty(exports, "Button", {
10
+ enumerable: true,
11
+ get: function () { return chunkQ4T6BIJ6_js.Button; }
12
+ });
13
+ Object.defineProperty(exports, "KollegioButton", {
14
+ enumerable: true,
15
+ get: function () { return chunkQ4T6BIJ6_js.Button_default; }
16
+ });
17
+ Object.defineProperty(exports, "EllipsisMenu", {
18
+ enumerable: true,
19
+ get: function () { return chunk55KQFLN6_js.EllipsisMenu; }
20
+ });
21
+ Object.defineProperty(exports, "EllipsisMenuOption", {
22
+ enumerable: true,
23
+ get: function () { return chunk55KQFLN6_js.EllipsisMenuOption; }
24
+ });
25
+ Object.defineProperty(exports, "Tooltip", {
26
+ enumerable: true,
27
+ get: function () { return chunkEBQK5NBX_js.Tooltip; }
28
+ });
29
+ Object.defineProperty(exports, "TooltipPrimitive", {
30
+ enumerable: true,
31
+ get: function () { return chunkEBQK5NBX_js.TooltipPrimitive; }
521
32
  });
33
+ //# sourceMappingURL=index.js.map
522
34
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/Button.tsx","../src/Tooltip.tsx","../src/EllipsisMenu.tsx"],"sourcesContent":["export { Button, default as KollegioButton } from './Button';\nexport type { KollegioButtonProps, KollegioButtonVariant, KollegioButtonSize } from './Button';\n\nexport { Tooltip, TooltipPrimitive } from './Tooltip';\nexport type { TooltipProps } from './Tooltip';\n\nexport { EllipsisMenu, EllipsisMenuOption } from './EllipsisMenu';\n","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","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","import { Box, Spinner, Text, VStack } from '@chakra-ui/react';\nimport {\n Children,\n cloneElement,\n isValidElement,\n useEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nconst DotsVerticalIcon = ({ size = 20 }: { size?: number }) => (\n <svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10 10.833a.833.833 0 100-1.666.833.833 0 000 1.666zM10 5a.833.833 0 100-1.667A.833.833 0 0010 5zM10 16.667A.833.833 0 1010 15a.833.833 0 000 1.667z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\ninterface EllipsisMenuProps {\n children: ReactNode;\n}\n\ninterface EllipsisMenuOptionProps {\n text: string;\n onClick: () => void;\n color?: string;\n loading?: boolean;\n}\n\nexport const EllipsisMenu = ({ children }: EllipsisMenuProps) => {\n const [showDropdown, setShowDropdown] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setShowDropdown(false);\n }\n };\n\n if (showDropdown) {\n document.addEventListener('mousedown', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [showDropdown]);\n\n return (\n <Box position={'relative'} ref={menuRef}>\n <Box\n padding={'2px'}\n tabIndex={0}\n color=\"contentPrimaryStrong\"\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onClick={(event) => {\n event.stopPropagation(); // Prevents parent click event\n setShowDropdown(true);\n }}\n >\n <DotsVerticalIcon />\n </Box>\n {showDropdown && (\n <VStack\n position=\"absolute\"\n right=\"10px\"\n top=\"5px\"\n bg=\"white\"\n rounded=\"8px\"\n border=\"1px solid\"\n borderColor={'borderSecondary'}\n zIndex=\"10\"\n boxShadow=\"0px 4px 4px rgba(0, 0, 0, 0.05)\"\n width={'216px'}\n gap={0}\n overflow={'scroll'}\n css={{\n '&::-webkit-scrollbar': { display: 'none' },\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n }}\n >\n {Children.map(children, (child) => {\n if (!isValidElement(child)) {\n return child;\n }\n\n const originalOnClick = (child.props as { onClick?: () => void }).onClick;\n\n const handleClick = () => {\n setShowDropdown(false);\n if (typeof originalOnClick === 'function') {\n originalOnClick();\n }\n };\n\n return cloneElement(child as ReactElement<{ onClick?: () => void }>, {\n onClick: handleClick,\n });\n })}\n </VStack>\n )}\n </Box>\n );\n};\n\nexport const EllipsisMenuOption = ({\n text,\n onClick,\n color = 'contentPrimaryStrong',\n loading = false,\n}: EllipsisMenuOptionProps) => {\n return (\n <Box display={'flex'} justifyContent={'space-between'} width={'100%'} _hover={{ background: 'backgroundBase1' }}>\n <Text\n tabIndex={0}\n fontSize=\"14px\"\n color={loading ? 'contentPrimarySubtle' : color}\n cursor={loading ? 'not-allowed' : 'pointer'}\n width={'full'}\n onClick={onClick}\n textAlign={'start'}\n px={2}\n py={1.5}\n >\n {text}\n </Text>\n {loading && <Spinner size=\"sm\" color=\"contentPrimarySubtle\" alignSelf=\"center\" mr={2} />}\n </Box>\n );\n};\n\nexport default EllipsisMenu;\n"],"mappings":"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","names":["import_react","Button","ChakraButton","import_react","import_jsx_runtime","TooltipPrimitive","ChakraTooltip","ReactMarkdown","children","import_react","import_jsx_runtime"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}