@borisj74/bv-ds 0.1.7 → 0.1.9

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.cjs CHANGED
@@ -2,7 +2,14 @@
2
2
 
3
3
  var React28 = require('react');
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
+ var reactBigCalendar = require('react-big-calendar');
6
+ var dateFns = require('date-fns');
7
+ var locale$1 = require('date-fns/locale');
5
8
  var bvDsIcons = require('@borisj74/bv-ds-icons');
9
+ var react = require('@tiptap/react');
10
+ var starterKit = require('@tiptap/starter-kit');
11
+ var extensionTextAlign = require('@tiptap/extension-text-align');
12
+ var extensionPlaceholder = require('@tiptap/extension-placeholder');
6
13
 
7
14
  function _interopNamespace(e) {
8
15
  if (e && e.__esModule) return e;
@@ -4884,10 +4891,10 @@ function ActivityFeed({
4884
4891
  }
4885
4892
  );
4886
4893
  }
4887
- function ringGeometry(diameter, stroke, value, opts = {}) {
4894
+ function ringGeometry(diameter, stroke2, value, opts = {}) {
4888
4895
  const { ringIndex = 0, ringGap = 0, arcFraction = 1 } = opts;
4889
4896
  const center = diameter / 2;
4890
- const radius = center - stroke / 2 - ringIndex * (stroke + ringGap);
4897
+ const radius = center - stroke2 / 2 - ringIndex * (stroke2 + ringGap);
4891
4898
  const circumference = 2 * Math.PI * radius;
4892
4899
  const arc = circumference * arcFraction;
4893
4900
  const filled = Math.max(0, Math.min(100, value)) / 100 * arc;
@@ -4895,7 +4902,7 @@ function ringGeometry(diameter, stroke, value, opts = {}) {
4895
4902
  }
4896
4903
  function RingPair({
4897
4904
  geo,
4898
- stroke,
4905
+ stroke: stroke2,
4899
4906
  trackClass = "stroke-utility-neutral-100",
4900
4907
  progressClass,
4901
4908
  progressColor,
@@ -4911,7 +4918,7 @@ function RingPair({
4911
4918
  r: radius,
4912
4919
  fill: "none",
4913
4920
  className: trackClass,
4914
- strokeWidth: stroke,
4921
+ strokeWidth: stroke2,
4915
4922
  strokeDasharray: `${arc} ${circumference}`
4916
4923
  }
4917
4924
  ),
@@ -4924,7 +4931,7 @@ function RingPair({
4924
4931
  fill: "none",
4925
4932
  className: clsx_default(!progressColor && progressClass),
4926
4933
  stroke: progressColor,
4927
- strokeWidth: stroke,
4934
+ strokeWidth: stroke2,
4928
4935
  strokeLinecap: linecap,
4929
4936
  strokeDasharray: `${filled} ${circumference}`
4930
4937
  }
@@ -4956,10 +4963,10 @@ function ActivityGauge({
4956
4963
  legend = "none",
4957
4964
  className
4958
4965
  }) {
4959
- const { diameter, stroke, gap, valueClass } = sizeSpecs[size];
4966
+ const { diameter, stroke: stroke2, gap, valueClass } = sizeSpecs[size];
4960
4967
  const center = diameter / 2;
4961
4968
  const rings = series.map((s2, i) => {
4962
- const geo = ringGeometry(diameter, stroke, s2.value, { ringIndex: i, ringGap: gap });
4969
+ const geo = ringGeometry(diameter, stroke2, s2.value, { ringIndex: i, ringGap: gap });
4963
4970
  const strokeClass = DEFAULT_STROKE_CLASSES[i % DEFAULT_STROKE_CLASSES.length];
4964
4971
  return { radius: geo.radius, circumference: geo.circumference, filled: geo.filled, strokeClass, custom: s2.color };
4965
4972
  });
@@ -4981,7 +4988,7 @@ function ActivityGauge({
4981
4988
  r: r2.radius,
4982
4989
  fill: "none",
4983
4990
  className: TRACK_STROKE_CLASS,
4984
- strokeWidth: stroke
4991
+ strokeWidth: stroke2
4985
4992
  }
4986
4993
  ),
4987
4994
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4993,7 +5000,7 @@ function ActivityGauge({
4993
5000
  fill: "none",
4994
5001
  className: clsx_default(!r2.custom && r2.strokeClass),
4995
5002
  stroke: r2.custom,
4996
- strokeWidth: stroke,
5003
+ strokeWidth: stroke2,
4997
5004
  strokeLinecap: "round",
4998
5005
  strokeDasharray: `${r2.filled} ${r2.circumference - r2.filled}`
4999
5006
  }
@@ -6118,6 +6125,91 @@ function ButtonUtility({
6118
6125
  ) : null
6119
6126
  ] });
6120
6127
  }
6128
+ function IconBox({ size = 20, className, children }) {
6129
+ const icon = React28.isValidElement(children) ? React28.cloneElement(children, {
6130
+ viewBox: children.props.viewBox ?? "0 0 24 24",
6131
+ className: clsx_default("w-full h-full", children.props.className)
6132
+ }) : children;
6133
+ return /* @__PURE__ */ jsxRuntime.jsx(
6134
+ "span",
6135
+ {
6136
+ className: clsx_default("relative flex shrink-0 items-center justify-center", className),
6137
+ style: { width: size, height: size },
6138
+ children: icon
6139
+ }
6140
+ );
6141
+ }
6142
+ function CalendarHeader({
6143
+ title,
6144
+ range: range6,
6145
+ supportingText,
6146
+ badge,
6147
+ dateIcon,
6148
+ actions,
6149
+ className
6150
+ }) {
6151
+ const subtitle = range6 ?? supportingText;
6152
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6153
+ "div",
6154
+ {
6155
+ className: clsx_default(
6156
+ "flex flex-wrap items-start justify-between gap-lg font-body",
6157
+ className
6158
+ ),
6159
+ children: [
6160
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-lg", children: [
6161
+ dateIcon,
6162
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-xxs", children: [
6163
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-md", children: [
6164
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-bold text-text-primary", children: title }),
6165
+ badge
6166
+ ] }),
6167
+ subtitle ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-text-tertiary", children: subtitle }) : null
6168
+ ] })
6169
+ ] }),
6170
+ actions ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-md", children: actions }) : null
6171
+ ]
6172
+ }
6173
+ );
6174
+ }
6175
+ function CalendarColumnHeader({
6176
+ weekday,
6177
+ date: date2,
6178
+ type,
6179
+ current = false,
6180
+ orientation = "vertical",
6181
+ breakpoint = "desktop",
6182
+ className
6183
+ }) {
6184
+ const state = type ?? (current ? "selected" : "default");
6185
+ return /* @__PURE__ */ jsxRuntime.jsxs(
6186
+ "div",
6187
+ {
6188
+ className: clsx_default(
6189
+ "flex items-center justify-center gap-md py-md font-body",
6190
+ orientation === "vertical" && "flex-col gap-xs",
6191
+ breakpoint === "desktop" && "w-[160px]",
6192
+ className
6193
+ ),
6194
+ children: [
6195
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-text-quaternary", children: weekday }),
6196
+ /* @__PURE__ */ jsxRuntime.jsx(
6197
+ "span",
6198
+ {
6199
+ className: clsx_default(
6200
+ "flex items-center justify-center text-xs font-semibold",
6201
+ state === "selected" && "size-6 rounded-full bg-bg-brand-solid text-white",
6202
+ state === "today" && "border-b-2 border-border-brand pb-xxs text-text-brand-secondary",
6203
+ state === "default" && "text-text-secondary"
6204
+ ),
6205
+ "aria-current": state !== "default" ? "date" : void 0,
6206
+ children: date2
6207
+ }
6208
+ )
6209
+ ]
6210
+ }
6211
+ );
6212
+ }
6121
6213
  var dotClasses = {
6122
6214
  neutral: "bg-utility-neutral-500",
6123
6215
  brand: "bg-utility-brand-500",
@@ -6209,6 +6301,281 @@ function CalendarEvent({
6209
6301
  }
6210
6302
  );
6211
6303
  }
6304
+ var DEFAULT_OPTIONS = [
6305
+ { value: "day", label: "Day view", shortcut: "\u2318D" },
6306
+ { value: "week", label: "Week view", shortcut: "\u2318W" },
6307
+ { value: "month", label: "Month view", shortcut: "\u2318M" }
6308
+ ];
6309
+ function Chevron2() {
6310
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5 shrink-0", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(
6311
+ "path",
6312
+ {
6313
+ d: "m5 7.5 5 5 5-5",
6314
+ stroke: "currentColor",
6315
+ strokeWidth: "1.667",
6316
+ strokeLinecap: "round",
6317
+ strokeLinejoin: "round"
6318
+ }
6319
+ ) });
6320
+ }
6321
+ function CalendarViewDropdown({
6322
+ value,
6323
+ onChange,
6324
+ onSelect,
6325
+ open: openProp,
6326
+ onOpenChange,
6327
+ options = DEFAULT_OPTIONS,
6328
+ className
6329
+ }) {
6330
+ const [internalOpen, setInternalOpen] = React28.useState(false);
6331
+ const isControlled = openProp !== void 0;
6332
+ const open = isControlled ? openProp : internalOpen;
6333
+ const setOpen = (next) => {
6334
+ if (!isControlled) setInternalOpen(next);
6335
+ onOpenChange?.(next);
6336
+ };
6337
+ const selected = options.find((o) => o.value === value) ?? options[0];
6338
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx_default("relative inline-block font-body", className), children: [
6339
+ /* @__PURE__ */ jsxRuntime.jsxs(
6340
+ "button",
6341
+ {
6342
+ type: "button",
6343
+ "aria-haspopup": "listbox",
6344
+ "aria-expanded": open,
6345
+ onClick: () => setOpen(!open),
6346
+ className: "inline-flex items-center gap-md rounded-md border border-border-primary bg-bg-primary px-lg py-md text-sm font-semibold text-text-secondary shadow-skeuomorphic transition-colors hover:bg-bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-brand focus-visible:ring-offset-2 focus-visible:ring-offset-bg-primary",
6347
+ children: [
6348
+ selected.label,
6349
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-fg-quaternary", children: /* @__PURE__ */ jsxRuntime.jsx(Chevron2, {}) })
6350
+ ]
6351
+ }
6352
+ ),
6353
+ open ? /* @__PURE__ */ jsxRuntime.jsx(
6354
+ "ul",
6355
+ {
6356
+ role: "listbox",
6357
+ className: "absolute left-0 z-10 mt-xs min-w-[200px] rounded-md border border-border-secondary bg-bg-primary p-xs shadow-lg",
6358
+ children: options.map((opt) => {
6359
+ const isSelected = opt.value === value;
6360
+ return /* @__PURE__ */ jsxRuntime.jsx("li", { role: "option", "aria-selected": isSelected, children: /* @__PURE__ */ jsxRuntime.jsxs(
6361
+ "button",
6362
+ {
6363
+ type: "button",
6364
+ onClick: () => {
6365
+ onChange?.(opt.value);
6366
+ onSelect?.(opt.value);
6367
+ setOpen(false);
6368
+ },
6369
+ className: "flex w-full items-center gap-md rounded-sm px-md py-xs text-sm font-medium text-text-secondary transition-colors hover:bg-bg-primary-hover",
6370
+ children: [
6371
+ /* @__PURE__ */ jsxRuntime.jsx(
6372
+ "span",
6373
+ {
6374
+ className: clsx_default(
6375
+ "flex size-4 shrink-0 items-center justify-center rounded-full border",
6376
+ isSelected ? "border-border-brand" : "border-border-primary"
6377
+ ),
6378
+ children: isSelected ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-2 rounded-full bg-bg-brand-solid" }) : null
6379
+ }
6380
+ ),
6381
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 text-left", children: opt.label }),
6382
+ opt.shortcut ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-text-quaternary", children: opt.shortcut }) : null
6383
+ ]
6384
+ }
6385
+ ) }, opt.value);
6386
+ })
6387
+ }
6388
+ ) : null
6389
+ ] });
6390
+ }
6391
+ var localizer = reactBigCalendar.dateFnsLocalizer({
6392
+ format: dateFns.format,
6393
+ parse: dateFns.parse,
6394
+ // Monday-first week, matching the Figma column-header order (Mon…Sun).
6395
+ startOfWeek: (date2) => dateFns.startOfWeek(date2, { weekStartsOn: 1 }),
6396
+ getDay: dateFns.getDay,
6397
+ locales: { "en-US": locale$1.enUS }
6398
+ });
6399
+ var rbcStructural = clsx_default(
6400
+ "h-full font-body",
6401
+ "[&_.rbc-month-view]:flex [&_.rbc-month-view]:flex-1 [&_.rbc-month-view]:flex-col [&_.rbc-month-view]:overflow-hidden",
6402
+ "[&_.rbc-month-header]:flex [&_.rbc-month-header]:flex-row",
6403
+ "[&_.rbc-header]:min-w-0 [&_.rbc-header]:flex-1 [&_.rbc-header]:overflow-hidden",
6404
+ "[&_.rbc-month-row]:relative [&_.rbc-month-row]:flex [&_.rbc-month-row]:min-h-[120px] [&_.rbc-month-row]:flex-1 [&_.rbc-month-row]:flex-col [&_.rbc-month-row]:overflow-hidden",
6405
+ "[&_.rbc-row-bg]:absolute [&_.rbc-row-bg]:inset-0 [&_.rbc-row-bg]:flex [&_.rbc-row-bg]:flex-row",
6406
+ "[&_.rbc-day-bg]:min-w-0 [&_.rbc-day-bg]:flex-1 [&_.rbc-day-bg]:border-b [&_.rbc-day-bg]:border-r [&_.rbc-day-bg]:border-border-secondary [&_.rbc-day-bg]:bg-bg-primary",
6407
+ "[&_.rbc-off-range-bg]:!bg-bg-secondary-alt",
6408
+ "[&_.rbc-row-content]:relative [&_.rbc-row-content]:z-[1] [&_.rbc-row-content]:flex [&_.rbc-row-content]:flex-1 [&_.rbc-row-content]:flex-col",
6409
+ "[&_.rbc-row]:flex [&_.rbc-row]:flex-row",
6410
+ "[&_.rbc-date-cell]:min-w-0 [&_.rbc-date-cell]:flex-1",
6411
+ "[&_.rbc-off-range]:opacity-50",
6412
+ "[&_.rbc-row-segment]:min-w-0 [&_.rbc-row-segment]:px-md [&_.rbc-row-segment]:pb-xxs",
6413
+ "[&_.rbc-event]:block [&_.rbc-event]:w-full [&_.rbc-event]:outline-none",
6414
+ "[&_.rbc-show-more]:block [&_.rbc-show-more]:px-md [&_.rbc-show-more]:text-xs [&_.rbc-show-more]:font-semibold [&_.rbc-show-more]:text-utility-neutral-500"
6415
+ );
6416
+ function NavArrow({ dir }) {
6417
+ return /* @__PURE__ */ jsxRuntime.jsx(IconBox, { size: 20, children: dir === "left" ? /* @__PURE__ */ jsxRuntime.jsx(bvDsIcons.ArrowLeft, {}) : /* @__PURE__ */ jsxRuntime.jsx(bvDsIcons.ArrowRight, {}) });
6418
+ }
6419
+ function Calendar({
6420
+ events,
6421
+ defaultView = "month",
6422
+ defaultDate,
6423
+ onNavigate,
6424
+ onView,
6425
+ onSelectEvent,
6426
+ onSelectSlot,
6427
+ onAddEvent,
6428
+ className
6429
+ }) {
6430
+ const [date2, setDate] = React28.useState(defaultDate ?? new Date(2027, 0, 1));
6431
+ const [view, setView] = React28.useState(defaultView);
6432
+ const [selected, setSelected] = React28.useState(null);
6433
+ const handleNavigate = React28.useCallback(
6434
+ (next) => {
6435
+ setDate(next);
6436
+ onNavigate?.(next);
6437
+ },
6438
+ [onNavigate]
6439
+ );
6440
+ const handleView = React28.useCallback(
6441
+ (next) => {
6442
+ setView(next);
6443
+ onView?.(next);
6444
+ },
6445
+ [onView]
6446
+ );
6447
+ const handleSelectSlot = React28.useCallback(
6448
+ (slot) => {
6449
+ setSelected(slot.start);
6450
+ onSelectSlot?.(slot);
6451
+ },
6452
+ [onSelectSlot]
6453
+ );
6454
+ const components = React28.useMemo(
6455
+ () => ({
6456
+ // Header bar → CalendarHeader primitive + nav/view/add controls.
6457
+ toolbar: (tb) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b border-border-secondary px-3xl py-2xl", children: /* @__PURE__ */ jsxRuntime.jsx(
6458
+ CalendarHeader,
6459
+ {
6460
+ title: tb.label,
6461
+ actions: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-lg", children: [
6462
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center overflow-hidden rounded-md border border-border-primary shadow-xs", children: [
6463
+ /* @__PURE__ */ jsxRuntime.jsx(
6464
+ "button",
6465
+ {
6466
+ type: "button",
6467
+ "aria-label": "Previous",
6468
+ onClick: () => tb.onNavigate("PREV"),
6469
+ className: "flex items-center justify-center bg-bg-primary px-[10px] py-md text-fg-quaternary transition-colors hover:bg-bg-primary-hover",
6470
+ children: /* @__PURE__ */ jsxRuntime.jsx(NavArrow, { dir: "left" })
6471
+ }
6472
+ ),
6473
+ /* @__PURE__ */ jsxRuntime.jsx(
6474
+ "button",
6475
+ {
6476
+ type: "button",
6477
+ onClick: () => tb.onNavigate("TODAY"),
6478
+ className: "border-x border-border-primary bg-bg-primary px-[14px] py-md text-sm font-semibold text-text-secondary transition-colors hover:bg-bg-primary-hover",
6479
+ children: "Today"
6480
+ }
6481
+ ),
6482
+ /* @__PURE__ */ jsxRuntime.jsx(
6483
+ "button",
6484
+ {
6485
+ type: "button",
6486
+ "aria-label": "Next",
6487
+ onClick: () => tb.onNavigate("NEXT"),
6488
+ className: "flex items-center justify-center bg-bg-primary px-[10px] py-md text-fg-quaternary transition-colors hover:bg-bg-primary-hover",
6489
+ children: /* @__PURE__ */ jsxRuntime.jsx(NavArrow, { dir: "right" })
6490
+ }
6491
+ )
6492
+ ] }),
6493
+ /* @__PURE__ */ jsxRuntime.jsx(
6494
+ CalendarViewDropdown,
6495
+ {
6496
+ value: tb.view,
6497
+ onChange: (v) => tb.onView(v)
6498
+ }
6499
+ ),
6500
+ onAddEvent && /* @__PURE__ */ jsxRuntime.jsxs(
6501
+ "button",
6502
+ {
6503
+ type: "button",
6504
+ onClick: onAddEvent,
6505
+ className: "flex items-center gap-xs rounded-md border-2 border-white/[0.12] bg-bg-brand-solid px-lg py-md text-sm font-semibold text-text-white shadow-skeuomorphic",
6506
+ children: [
6507
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "opacity-60", children: /* @__PURE__ */ jsxRuntime.jsx(IconBox, { size: 20, children: /* @__PURE__ */ jsxRuntime.jsx(bvDsIcons.Plus, {}) }) }),
6508
+ "Add event"
6509
+ ]
6510
+ }
6511
+ )
6512
+ ] })
6513
+ }
6514
+ ) }),
6515
+ month: {
6516
+ // Weekday column header → CalendarColumnHeader primitive.
6517
+ header: ({ label }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full items-center justify-center border-b border-r border-border-secondary bg-bg-primary p-md", children: /* @__PURE__ */ jsxRuntime.jsx(CalendarColumnHeader, { weekday: label, date: "" }) }),
6518
+ // Date-number circle (Figma 7991:81840): default / today / selected.
6519
+ dateHeader: ({ date: cellDate, label }) => {
6520
+ const today = dateFns.isSameDay(cellDate, /* @__PURE__ */ new Date());
6521
+ const isSel = selected ? dateFns.isSameDay(cellDate, selected) : false;
6522
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex p-md", children: /* @__PURE__ */ jsxRuntime.jsx(
6523
+ "span",
6524
+ {
6525
+ className: clsx_default(
6526
+ "flex size-6 items-center justify-center rounded-full text-xs font-semibold",
6527
+ today ? "bg-bg-brand-solid text-text-white" : isSel ? "bg-bg-secondary text-text-secondary" : "text-text-secondary"
6528
+ ),
6529
+ children: label
6530
+ }
6531
+ ) });
6532
+ },
6533
+ // Event chip → CalendarEvent primitive (desktop, filled).
6534
+ event: ({ event }) => /* @__PURE__ */ jsxRuntime.jsx(
6535
+ CalendarEvent,
6536
+ {
6537
+ title: event.title,
6538
+ time: event.allDay ? void 0 : dateFns.format(event.start, "h:mm a"),
6539
+ color: event.color ?? "brand",
6540
+ filled: true
6541
+ }
6542
+ )
6543
+ }
6544
+ }),
6545
+ [onAddEvent, selected]
6546
+ );
6547
+ return /* @__PURE__ */ jsxRuntime.jsx(
6548
+ "div",
6549
+ {
6550
+ className: clsx_default(
6551
+ "flex w-full flex-col overflow-hidden rounded-xl border border-border-secondary bg-bg-primary shadow-xs",
6552
+ className
6553
+ ),
6554
+ children: /* @__PURE__ */ jsxRuntime.jsx(
6555
+ reactBigCalendar.Calendar,
6556
+ {
6557
+ localizer,
6558
+ events,
6559
+ date: date2,
6560
+ view,
6561
+ onNavigate: handleNavigate,
6562
+ onView: handleView,
6563
+ views: ["month", "week", "day"],
6564
+ selectable: true,
6565
+ popup: true,
6566
+ startAccessor: "start",
6567
+ endAccessor: "end",
6568
+ onSelectEvent: (e) => onSelectEvent?.(e),
6569
+ onSelectSlot: handleSelectSlot,
6570
+ messages: { showMore: (total) => `${total} more\u2026` },
6571
+ components,
6572
+ className: rbcStructural,
6573
+ style: { height: 800 }
6574
+ }
6575
+ )
6576
+ }
6577
+ );
6578
+ }
6212
6579
  function PlusIcon2() {
6213
6580
  return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-4", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(
6214
6581
  "path",
@@ -6346,44 +6713,6 @@ function CalendarCellDayWeekView({
6346
6713
  }
6347
6714
  );
6348
6715
  }
6349
- function CalendarColumnHeader({
6350
- weekday,
6351
- date: date2,
6352
- type,
6353
- current = false,
6354
- orientation = "vertical",
6355
- breakpoint = "desktop",
6356
- className
6357
- }) {
6358
- const state = type ?? (current ? "selected" : "default");
6359
- return /* @__PURE__ */ jsxRuntime.jsxs(
6360
- "div",
6361
- {
6362
- className: clsx_default(
6363
- "flex items-center justify-center gap-md py-md font-body",
6364
- orientation === "vertical" && "flex-col gap-xs",
6365
- breakpoint === "desktop" && "w-[160px]",
6366
- className
6367
- ),
6368
- children: [
6369
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-text-quaternary", children: weekday }),
6370
- /* @__PURE__ */ jsxRuntime.jsx(
6371
- "span",
6372
- {
6373
- className: clsx_default(
6374
- "flex items-center justify-center text-xs font-semibold",
6375
- state === "selected" && "size-6 rounded-full bg-bg-brand-solid text-white",
6376
- state === "today" && "border-b-2 border-border-brand pb-xxs text-text-brand-secondary",
6377
- state === "default" && "text-text-secondary"
6378
- ),
6379
- "aria-current": state !== "default" ? "date" : void 0,
6380
- children: date2
6381
- }
6382
- )
6383
- ]
6384
- }
6385
- );
6386
- }
6387
6716
  function CalendarDateIcon({ month, day, className }) {
6388
6717
  return /* @__PURE__ */ jsxRuntime.jsxs(
6389
6718
  "div",
@@ -6462,39 +6791,6 @@ function CalendarEventDayWeekView({
6462
6791
  }
6463
6792
  );
6464
6793
  }
6465
- function CalendarHeader({
6466
- title,
6467
- range: range6,
6468
- supportingText,
6469
- badge,
6470
- dateIcon,
6471
- actions,
6472
- className
6473
- }) {
6474
- const subtitle = range6 ?? supportingText;
6475
- return /* @__PURE__ */ jsxRuntime.jsxs(
6476
- "div",
6477
- {
6478
- className: clsx_default(
6479
- "flex flex-wrap items-start justify-between gap-lg font-body",
6480
- className
6481
- ),
6482
- children: [
6483
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-lg", children: [
6484
- dateIcon,
6485
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-xxs", children: [
6486
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-md", children: [
6487
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-bold text-text-primary", children: title }),
6488
- badge
6489
- ] }),
6490
- subtitle ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-text-tertiary", children: subtitle }) : null
6491
- ] })
6492
- ] }),
6493
- actions ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-md", children: actions }) : null
6494
- ]
6495
- }
6496
- );
6497
- }
6498
6794
  function CalendarRowLabel({ label, time: time2, className }) {
6499
6795
  return /* @__PURE__ */ jsxRuntime.jsx(
6500
6796
  "div",
@@ -6528,93 +6824,6 @@ function CalendarTimemarker({
6528
6824
  /* @__PURE__ */ jsxRuntime.jsx(Line, {})
6529
6825
  ] }) });
6530
6826
  }
6531
- var DEFAULT_OPTIONS = [
6532
- { value: "day", label: "Day view", shortcut: "\u2318D" },
6533
- { value: "week", label: "Week view", shortcut: "\u2318W" },
6534
- { value: "month", label: "Month view", shortcut: "\u2318M" }
6535
- ];
6536
- function Chevron2() {
6537
- return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5 shrink-0", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(
6538
- "path",
6539
- {
6540
- d: "m5 7.5 5 5 5-5",
6541
- stroke: "currentColor",
6542
- strokeWidth: "1.667",
6543
- strokeLinecap: "round",
6544
- strokeLinejoin: "round"
6545
- }
6546
- ) });
6547
- }
6548
- function CalendarViewDropdown({
6549
- value,
6550
- onChange,
6551
- onSelect,
6552
- open: openProp,
6553
- onOpenChange,
6554
- options = DEFAULT_OPTIONS,
6555
- className
6556
- }) {
6557
- const [internalOpen, setInternalOpen] = React28.useState(false);
6558
- const isControlled = openProp !== void 0;
6559
- const open = isControlled ? openProp : internalOpen;
6560
- const setOpen = (next) => {
6561
- if (!isControlled) setInternalOpen(next);
6562
- onOpenChange?.(next);
6563
- };
6564
- const selected = options.find((o) => o.value === value) ?? options[0];
6565
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx_default("relative inline-block font-body", className), children: [
6566
- /* @__PURE__ */ jsxRuntime.jsxs(
6567
- "button",
6568
- {
6569
- type: "button",
6570
- "aria-haspopup": "listbox",
6571
- "aria-expanded": open,
6572
- onClick: () => setOpen(!open),
6573
- className: "inline-flex items-center gap-md rounded-md border border-border-primary bg-bg-primary px-lg py-md text-sm font-semibold text-text-secondary shadow-skeuomorphic transition-colors hover:bg-bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-brand focus-visible:ring-offset-2 focus-visible:ring-offset-bg-primary",
6574
- children: [
6575
- selected.label,
6576
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-fg-quaternary", children: /* @__PURE__ */ jsxRuntime.jsx(Chevron2, {}) })
6577
- ]
6578
- }
6579
- ),
6580
- open ? /* @__PURE__ */ jsxRuntime.jsx(
6581
- "ul",
6582
- {
6583
- role: "listbox",
6584
- className: "absolute left-0 z-10 mt-xs min-w-[200px] rounded-md border border-border-secondary bg-bg-primary p-xs shadow-lg",
6585
- children: options.map((opt) => {
6586
- const isSelected = opt.value === value;
6587
- return /* @__PURE__ */ jsxRuntime.jsx("li", { role: "option", "aria-selected": isSelected, children: /* @__PURE__ */ jsxRuntime.jsxs(
6588
- "button",
6589
- {
6590
- type: "button",
6591
- onClick: () => {
6592
- onChange?.(opt.value);
6593
- onSelect?.(opt.value);
6594
- setOpen(false);
6595
- },
6596
- className: "flex w-full items-center gap-md rounded-sm px-md py-xs text-sm font-medium text-text-secondary transition-colors hover:bg-bg-primary-hover",
6597
- children: [
6598
- /* @__PURE__ */ jsxRuntime.jsx(
6599
- "span",
6600
- {
6601
- className: clsx_default(
6602
- "flex size-4 shrink-0 items-center justify-center rounded-full border",
6603
- isSelected ? "border-border-brand" : "border-border-primary"
6604
- ),
6605
- children: isSelected ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-2 rounded-full bg-bg-brand-solid" }) : null
6606
- }
6607
- ),
6608
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 text-left", children: opt.label }),
6609
- opt.shortcut ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-text-quaternary", children: opt.shortcut }) : null
6610
- ]
6611
- }
6612
- ) }, opt.value);
6613
- })
6614
- }
6615
- ) : null
6616
- ] });
6617
- }
6618
6827
  function CardHeader({
6619
6828
  title,
6620
6829
  description,
@@ -7701,20 +7910,20 @@ var import_isFunction2 = __toESM(require_isFunction());
7701
7910
 
7702
7911
  // node_modules/recharts/es6/util/LogUtils.js
7703
7912
  var isDev = process.env.NODE_ENV !== "production";
7704
- var warn = function warn2(condition, format2) {
7913
+ var warn = function warn2(condition, format3) {
7705
7914
  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
7706
7915
  args[_key - 2] = arguments[_key];
7707
7916
  }
7708
7917
  if (isDev && typeof console !== "undefined" && console.warn) {
7709
- if (format2 === void 0) {
7918
+ if (format3 === void 0) {
7710
7919
  console.warn("LogUtils requires an error message argument");
7711
7920
  }
7712
7921
  if (!condition) {
7713
- if (format2 === void 0) {
7922
+ if (format3 === void 0) {
7714
7923
  console.warn("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");
7715
7924
  } else {
7716
7925
  var argIndex = 0;
7717
- console.warn(format2.replace(/%s/g, function() {
7926
+ console.warn(format3.replace(/%s/g, function() {
7718
7927
  return args[argIndex++];
7719
7928
  }));
7720
7929
  }
@@ -10728,7 +10937,7 @@ var DecimalCSS = /* @__PURE__ */ (function() {
10728
10937
  }
10729
10938
  }], [{
10730
10939
  key: "parse",
10731
- value: function parse(str) {
10940
+ value: function parse2(str) {
10732
10941
  var _NUM_SPLIT_REGEX$exec;
10733
10942
  var _ref = (_NUM_SPLIT_REGEX$exec = NUM_SPLIT_REGEX.exec(str)) !== null && _NUM_SPLIT_REGEX$exec !== void 0 ? _NUM_SPLIT_REGEX$exec : [], _ref2 = _slicedToArray3(_ref, 3), numStr = _ref2[1], unit2 = _ref2[2];
10734
10943
  return new DecimalCSS2(parseFloat(numStr), unit2 !== null && unit2 !== void 0 ? unit2 : "");
@@ -11718,10 +11927,10 @@ function color_formatHsl() {
11718
11927
  function color_formatRgb() {
11719
11928
  return this.rgb().formatRgb();
11720
11929
  }
11721
- function color(format2) {
11930
+ function color(format3) {
11722
11931
  var m, l;
11723
- format2 = (format2 + "").trim().toLowerCase();
11724
- return (m = reHex.exec(format2)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) : l === 3 ? new Rgb(m >> 8 & 15 | m >> 4 & 240, m >> 4 & 15 | m & 240, (m & 15) << 4 | m & 15, 1) : l === 8 ? rgba(m >> 24 & 255, m >> 16 & 255, m >> 8 & 255, (m & 255) / 255) : l === 4 ? rgba(m >> 12 & 15 | m >> 8 & 240, m >> 8 & 15 | m >> 4 & 240, m >> 4 & 15 | m & 240, ((m & 15) << 4 | m & 15) / 255) : null) : (m = reRgbInteger.exec(format2)) ? new Rgb(m[1], m[2], m[3], 1) : (m = reRgbPercent.exec(format2)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) : (m = reRgbaInteger.exec(format2)) ? rgba(m[1], m[2], m[3], m[4]) : (m = reRgbaPercent.exec(format2)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) : (m = reHslPercent.exec(format2)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) : (m = reHslaPercent.exec(format2)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) : named.hasOwnProperty(format2) ? rgbn(named[format2]) : format2 === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null;
11932
+ format3 = (format3 + "").trim().toLowerCase();
11933
+ return (m = reHex.exec(format3)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) : l === 3 ? new Rgb(m >> 8 & 15 | m >> 4 & 240, m >> 4 & 15 | m & 240, (m & 15) << 4 | m & 15, 1) : l === 8 ? rgba(m >> 24 & 255, m >> 16 & 255, m >> 8 & 255, (m & 255) / 255) : l === 4 ? rgba(m >> 12 & 15 | m >> 8 & 240, m >> 8 & 15 | m >> 4 & 240, m >> 4 & 15 | m & 240, ((m & 15) << 4 | m & 15) / 255) : null) : (m = reRgbInteger.exec(format3)) ? new Rgb(m[1], m[2], m[3], 1) : (m = reRgbPercent.exec(format3)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) : (m = reRgbaInteger.exec(format3)) ? rgba(m[1], m[2], m[3], m[4]) : (m = reRgbaPercent.exec(format3)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) : (m = reHslPercent.exec(format3)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) : (m = reHslaPercent.exec(format3)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) : named.hasOwnProperty(format3) ? rgbn(named[format3]) : format3 === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null;
11725
11934
  }
11726
11935
  function rgbn(n) {
11727
11936
  return new Rgb(n >> 16 & 255, n >> 8 & 255, n & 255, 1);
@@ -12273,7 +12482,7 @@ function locale_default(locale3) {
12273
12482
  var prefix2 = (options && options.prefix !== void 0 ? options.prefix : "") + (symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : ""), suffix = (symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "") + (options && options.suffix !== void 0 ? options.suffix : "");
12274
12483
  var formatType = formatTypes_default[type], maybeSuffix = /[defgprs%]/.test(type);
12275
12484
  precision = precision === void 0 ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision));
12276
- function format2(value) {
12485
+ function format3(value) {
12277
12486
  var valuePrefix = prefix2, valueSuffix = suffix, i, n, c2;
12278
12487
  if (type === "c") {
12279
12488
  valueSuffix = formatType(value) + valueSuffix;
@@ -12316,10 +12525,10 @@ function locale_default(locale3) {
12316
12525
  }
12317
12526
  return numerals(value);
12318
12527
  }
12319
- format2.toString = function() {
12528
+ format3.toString = function() {
12320
12529
  return specifier + "";
12321
12530
  };
12322
- return format2;
12531
+ return format3;
12323
12532
  }
12324
12533
  function formatPrefix2(specifier, value) {
12325
12534
  var e = Math.max(-8, Math.min(8, Math.floor(exponent_default(value) / 3))) * 3, k2 = Math.pow(10, -e), f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier), { suffix: prefixes[8 + e / 3] });
@@ -12335,7 +12544,7 @@ function locale_default(locale3) {
12335
12544
 
12336
12545
  // node_modules/d3-format/src/defaultLocale.js
12337
12546
  var locale;
12338
- var format;
12547
+ var format2;
12339
12548
  var formatPrefix;
12340
12549
  defaultLocale({
12341
12550
  thousands: ",",
@@ -12344,7 +12553,7 @@ defaultLocale({
12344
12553
  });
12345
12554
  function defaultLocale(definition) {
12346
12555
  locale = locale_default(definition);
12347
- format = locale.format;
12556
+ format2 = locale.format;
12348
12557
  formatPrefix = locale.formatPrefix;
12349
12558
  return locale;
12350
12559
  }
@@ -12389,7 +12598,7 @@ function tickFormat(start, stop, count, specifier) {
12389
12598
  break;
12390
12599
  }
12391
12600
  }
12392
- return format(specifier);
12601
+ return format2(specifier);
12393
12602
  }
12394
12603
 
12395
12604
  // node_modules/d3-scale/src/linear.js
@@ -12568,7 +12777,7 @@ function loggish(transform) {
12568
12777
  if (specifier == null) specifier = base === 10 ? "s" : ",";
12569
12778
  if (typeof specifier !== "function") {
12570
12779
  if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;
12571
- specifier = format(specifier);
12780
+ specifier = format2(specifier);
12572
12781
  }
12573
12782
  if (count === Infinity) return specifier;
12574
12783
  const k2 = Math.max(1, base * count / scale.ticks().length);
@@ -13261,14 +13470,14 @@ function formatLocale(locale3) {
13261
13470
  utcFormats.c = newFormat(locale_dateTime, utcFormats);
13262
13471
  function newFormat(specifier, formats2) {
13263
13472
  return function(date2) {
13264
- var string = [], i = -1, j = 0, n = specifier.length, c2, pad4, format2;
13473
+ var string = [], i = -1, j = 0, n = specifier.length, c2, pad4, format3;
13265
13474
  if (!(date2 instanceof Date)) date2 = /* @__PURE__ */ new Date(+date2);
13266
13475
  while (++i < n) {
13267
13476
  if (specifier.charCodeAt(i) === 37) {
13268
13477
  string.push(specifier.slice(j, i));
13269
13478
  if ((pad4 = pads[c2 = specifier.charAt(++i)]) != null) c2 = specifier.charAt(++i);
13270
13479
  else pad4 = c2 === "e" ? " " : "0";
13271
- if (format2 = formats2[c2]) c2 = format2(date2, pad4);
13480
+ if (format3 = formats2[c2]) c2 = format3(date2, pad4);
13272
13481
  string.push(c2);
13273
13482
  j = i + 1;
13274
13483
  }
@@ -13319,14 +13528,14 @@ function formatLocale(locale3) {
13319
13528
  };
13320
13529
  }
13321
13530
  function parseSpecifier(d, specifier, string, j) {
13322
- var i = 0, n = specifier.length, m = string.length, c2, parse;
13531
+ var i = 0, n = specifier.length, m = string.length, c2, parse2;
13323
13532
  while (i < n) {
13324
13533
  if (j >= m) return -1;
13325
13534
  c2 = specifier.charCodeAt(i++);
13326
13535
  if (c2 === 37) {
13327
13536
  c2 = specifier.charAt(i++);
13328
- parse = parses[c2 in pads ? specifier.charAt(i++) : c2];
13329
- if (!parse || (j = parse(d, string, j)) < 0) return -1;
13537
+ parse2 = parses[c2 in pads ? specifier.charAt(i++) : c2];
13538
+ if (!parse2 || (j = parse2(d, string, j)) < 0) return -1;
13330
13539
  } else if (c2 != string.charCodeAt(j++)) {
13331
13540
  return -1;
13332
13541
  }
@@ -13699,9 +13908,9 @@ function date(t) {
13699
13908
  function number3(t) {
13700
13909
  return t instanceof Date ? +t : +/* @__PURE__ */ new Date(+t);
13701
13910
  }
13702
- function calendar(ticks2, tickInterval, year, month, week, day, hour, minute, second2, format2) {
13911
+ function calendar(ticks2, tickInterval, year, month, week, day, hour, minute, second2, format3) {
13703
13912
  var scale = continuous(), invert = scale.invert, domain = scale.domain;
13704
- var formatMillisecond = format2(".%L"), formatSecond = format2(":%S"), formatMinute = format2("%I:%M"), formatHour = format2("%I %p"), formatDay = format2("%a %d"), formatWeek = format2("%b %d"), formatMonth = format2("%B"), formatYear2 = format2("%Y");
13913
+ var formatMillisecond = format3(".%L"), formatSecond = format3(":%S"), formatMinute = format3("%I:%M"), formatHour = format3("%I %p"), formatDay = format3("%a %d"), formatWeek = format3("%b %d"), formatMonth = format3("%B"), formatYear2 = format3("%Y");
13705
13914
  function tickFormat2(date2) {
13706
13915
  return (second2(date2) < date2 ? formatMillisecond : minute(date2) < date2 ? formatSecond : hour(date2) < date2 ? formatMinute : day(date2) < date2 ? formatHour : month(date2) < date2 ? week(date2) < date2 ? formatDay : formatWeek : year(date2) < date2 ? formatMonth : formatYear2)(date2);
13707
13916
  }
@@ -13716,7 +13925,7 @@ function calendar(ticks2, tickInterval, year, month, week, day, hour, minute, se
13716
13925
  return ticks2(d[0], d[d.length - 1], interval == null ? 10 : interval);
13717
13926
  };
13718
13927
  scale.tickFormat = function(count, specifier) {
13719
- return specifier == null ? tickFormat2 : format2(specifier);
13928
+ return specifier == null ? tickFormat2 : format3(specifier);
13720
13929
  };
13721
13930
  scale.nice = function(interval) {
13722
13931
  var d = domain();
@@ -13724,7 +13933,7 @@ function calendar(ticks2, tickInterval, year, month, week, day, hour, minute, se
13724
13933
  return interval ? domain(nice(d, interval)) : scale;
13725
13934
  };
13726
13935
  scale.copy = function() {
13727
- return copy(scale, calendar(ticks2, tickInterval, year, month, week, day, hour, minute, second2, format2));
13936
+ return copy(scale, calendar(ticks2, tickInterval, year, month, week, day, hour, minute, second2, format3));
13728
13937
  };
13729
13938
  return scale;
13730
13939
  }
@@ -15793,15 +16002,15 @@ var getMainColorOfGraphicItem = function getMainColorOfGraphicItem2(item) {
15793
16002
  var _item$type;
15794
16003
  var _ref = item, displayName = _ref.type.displayName;
15795
16004
  var defaultedProps = (_item$type = item.type) !== null && _item$type !== void 0 && _item$type.defaultProps ? _objectSpread10(_objectSpread10({}, item.type.defaultProps), item.props) : item.props;
15796
- var stroke = defaultedProps.stroke, fill = defaultedProps.fill;
16005
+ var stroke2 = defaultedProps.stroke, fill = defaultedProps.fill;
15797
16006
  var result;
15798
16007
  switch (displayName) {
15799
16008
  case "Line":
15800
- result = stroke;
16009
+ result = stroke2;
15801
16010
  break;
15802
16011
  case "Area":
15803
16012
  case "Radar":
15804
- result = stroke && stroke !== "none" ? stroke : fill;
16013
+ result = stroke2 && stroke2 !== "none" ? stroke2 : fill;
15805
16014
  break;
15806
16015
  default:
15807
16016
  result = fill;
@@ -18465,18 +18674,18 @@ var getTransitionVal = function getTransitionVal2(props, duration, easing) {
18465
18674
  }).join(",");
18466
18675
  };
18467
18676
  var isDev2 = process.env.NODE_ENV !== "production";
18468
- var warn3 = function warn4(condition, format2, a2, b, c2, d, e, f) {
18677
+ var warn3 = function warn4(condition, format3, a2, b, c2, d, e, f) {
18469
18678
  if (isDev2 && typeof console !== "undefined" && console.warn) {
18470
- if (format2 === void 0) {
18679
+ if (format3 === void 0) {
18471
18680
  console.warn("LogUtils requires an error message argument");
18472
18681
  }
18473
18682
  if (!condition) {
18474
- if (format2 === void 0) {
18683
+ if (format3 === void 0) {
18475
18684
  console.warn("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");
18476
18685
  } else {
18477
18686
  var args = [a2, b, c2, d, e, f];
18478
18687
  var argIndex = 0;
18479
- console.warn(format2.replace(/%s/g, function() {
18688
+ console.warn(format3.replace(/%s/g, function() {
18480
18689
  return args[argIndex++];
18481
18690
  }));
18482
18691
  }
@@ -20311,7 +20520,7 @@ var PolarRadiusAxis = /* @__PURE__ */ (function(_PureComponent) {
20311
20520
  key: "renderTicks",
20312
20521
  value: function renderTicks() {
20313
20522
  var _this = this;
20314
- var _this$props4 = this.props, ticks2 = _this$props4.ticks, tick = _this$props4.tick, angle = _this$props4.angle, tickFormatter = _this$props4.tickFormatter, stroke = _this$props4.stroke, others = _objectWithoutProperties14(_this$props4, _excluded24);
20523
+ var _this$props4 = this.props, ticks2 = _this$props4.ticks, tick = _this$props4.tick, angle = _this$props4.angle, tickFormatter = _this$props4.tickFormatter, stroke2 = _this$props4.stroke, others = _objectWithoutProperties14(_this$props4, _excluded24);
20315
20524
  var textAnchor = this.getTickTextAnchor();
20316
20525
  var axisProps = filterProps(others, false);
20317
20526
  var customTickProps = filterProps(tick, false);
@@ -20322,7 +20531,7 @@ var PolarRadiusAxis = /* @__PURE__ */ (function(_PureComponent) {
20322
20531
  transform: "rotate(".concat(90 - angle, ", ").concat(coord.x, ", ").concat(coord.y, ")")
20323
20532
  }, axisProps), {}, {
20324
20533
  stroke: "none",
20325
- fill: stroke
20534
+ fill: stroke2
20326
20535
  }, customTickProps), {}, {
20327
20536
  index: i
20328
20537
  }, coord), {}, {
@@ -20600,7 +20809,7 @@ var PolarAngleAxis = /* @__PURE__ */ (function(_PureComponent) {
20600
20809
  key: "renderTicks",
20601
20810
  value: function renderTicks() {
20602
20811
  var _this = this;
20603
- var _this$props3 = this.props, ticks2 = _this$props3.ticks, tick = _this$props3.tick, tickLine = _this$props3.tickLine, tickFormatter = _this$props3.tickFormatter, stroke = _this$props3.stroke;
20812
+ var _this$props3 = this.props, ticks2 = _this$props3.ticks, tick = _this$props3.tick, tickLine = _this$props3.tickLine, tickFormatter = _this$props3.tickFormatter, stroke2 = _this$props3.stroke;
20604
20813
  var axisProps = filterProps(this.props, false);
20605
20814
  var customTickProps = filterProps(tick, false);
20606
20815
  var tickLineProps = _objectSpread23(_objectSpread23({}, axisProps), {}, {
@@ -20613,7 +20822,7 @@ var PolarAngleAxis = /* @__PURE__ */ (function(_PureComponent) {
20613
20822
  textAnchor
20614
20823
  }, axisProps), {}, {
20615
20824
  stroke: "none",
20616
- fill: stroke
20825
+ fill: stroke2
20617
20826
  }, customTickProps), {}, {
20618
20827
  index: i,
20619
20828
  payload: entry,
@@ -22547,9 +22756,9 @@ var Brush = /* @__PURE__ */ (function(_PureComponent) {
22547
22756
  }, {
22548
22757
  key: "renderBackground",
22549
22758
  value: function renderBackground() {
22550
- var _this$props6 = this.props, x2 = _this$props6.x, y2 = _this$props6.y, width = _this$props6.width, height = _this$props6.height, fill = _this$props6.fill, stroke = _this$props6.stroke;
22759
+ var _this$props6 = this.props, x2 = _this$props6.x, y2 = _this$props6.y, width = _this$props6.width, height = _this$props6.height, fill = _this$props6.fill, stroke2 = _this$props6.stroke;
22551
22760
  return /* @__PURE__ */ React28__namespace.default.createElement("rect", {
22552
- stroke,
22761
+ stroke: stroke2,
22553
22762
  fill,
22554
22763
  x: x2,
22555
22764
  y: y2,
@@ -22624,7 +22833,7 @@ var Brush = /* @__PURE__ */ (function(_PureComponent) {
22624
22833
  }, {
22625
22834
  key: "renderSlide",
22626
22835
  value: function renderSlide(startX, endX) {
22627
- var _this$props9 = this.props, y2 = _this$props9.y, height = _this$props9.height, stroke = _this$props9.stroke, travellerWidth = _this$props9.travellerWidth;
22836
+ var _this$props9 = this.props, y2 = _this$props9.y, height = _this$props9.height, stroke2 = _this$props9.stroke, travellerWidth = _this$props9.travellerWidth;
22628
22837
  var x2 = Math.min(startX, endX) + travellerWidth;
22629
22838
  var width = Math.max(Math.abs(endX - startX) - travellerWidth, 0);
22630
22839
  return /* @__PURE__ */ React28__namespace.default.createElement("rect", {
@@ -22637,7 +22846,7 @@ var Brush = /* @__PURE__ */ (function(_PureComponent) {
22637
22846
  cursor: "move"
22638
22847
  },
22639
22848
  stroke: "none",
22640
- fill: stroke,
22849
+ fill: stroke2,
22641
22850
  fillOpacity: 0.2,
22642
22851
  x: x2,
22643
22852
  y: y2,
@@ -22648,12 +22857,12 @@ var Brush = /* @__PURE__ */ (function(_PureComponent) {
22648
22857
  }, {
22649
22858
  key: "renderText",
22650
22859
  value: function renderText() {
22651
- var _this$props10 = this.props, startIndex = _this$props10.startIndex, endIndex = _this$props10.endIndex, y2 = _this$props10.y, height = _this$props10.height, travellerWidth = _this$props10.travellerWidth, stroke = _this$props10.stroke;
22860
+ var _this$props10 = this.props, startIndex = _this$props10.startIndex, endIndex = _this$props10.endIndex, y2 = _this$props10.y, height = _this$props10.height, travellerWidth = _this$props10.travellerWidth, stroke2 = _this$props10.stroke;
22652
22861
  var _this$state4 = this.state, startX = _this$state4.startX, endX = _this$state4.endX;
22653
22862
  var offset = 5;
22654
22863
  var attrs = {
22655
22864
  pointerEvents: "none",
22656
- fill: stroke
22865
+ fill: stroke2
22657
22866
  };
22658
22867
  return /* @__PURE__ */ React28__namespace.default.createElement(Layer, {
22659
22868
  className: "recharts-brush-texts"
@@ -22690,14 +22899,14 @@ var Brush = /* @__PURE__ */ (function(_PureComponent) {
22690
22899
  }], [{
22691
22900
  key: "renderDefaultTraveller",
22692
22901
  value: function renderDefaultTraveller(props) {
22693
- var x2 = props.x, y2 = props.y, width = props.width, height = props.height, stroke = props.stroke;
22902
+ var x2 = props.x, y2 = props.y, width = props.width, height = props.height, stroke2 = props.stroke;
22694
22903
  var lineY = Math.floor(y2 + height / 2) - 1;
22695
22904
  return /* @__PURE__ */ React28__namespace.default.createElement(React28__namespace.default.Fragment, null, /* @__PURE__ */ React28__namespace.default.createElement("rect", {
22696
22905
  x: x2,
22697
22906
  y: y2,
22698
22907
  width,
22699
22908
  height,
22700
- fill: stroke,
22909
+ fill: stroke2,
22701
22910
  stroke: "none"
22702
22911
  }), /* @__PURE__ */ React28__namespace.default.createElement("line", {
22703
22912
  x1: x2 + 1,
@@ -25212,7 +25421,7 @@ var CartesianAxis = /* @__PURE__ */ (function(_Component) {
25212
25421
  */
25213
25422
  function renderTicks(ticks2, fontSize, letterSpacing) {
25214
25423
  var _this2 = this;
25215
- var _this$props6 = this.props, tickLine = _this$props6.tickLine, stroke = _this$props6.stroke, tick = _this$props6.tick, tickFormatter = _this$props6.tickFormatter, unit2 = _this$props6.unit;
25424
+ var _this$props6 = this.props, tickLine = _this$props6.tickLine, stroke2 = _this$props6.stroke, tick = _this$props6.tick, tickFormatter = _this$props6.tickFormatter, unit2 = _this$props6.unit;
25216
25425
  var finalTicks = getTicks(_objectSpread37(_objectSpread37({}, this.props), {}, {
25217
25426
  ticks: ticks2
25218
25427
  }), fontSize, letterSpacing);
@@ -25230,7 +25439,7 @@ var CartesianAxis = /* @__PURE__ */ (function(_Component) {
25230
25439
  verticalAnchor
25231
25440
  }, axisProps), {}, {
25232
25441
  stroke: "none",
25233
- fill: stroke
25442
+ fill: stroke2
25234
25443
  }, customTickProps), tickCoord), {}, {
25235
25444
  index: i,
25236
25445
  payload: entry,
@@ -28922,13 +29131,13 @@ function ChartMini({
28922
29131
  className,
28923
29132
  style
28924
29133
  }) {
28925
- const stroke = resolveColor(color2, trend);
29134
+ const stroke2 = resolveColor(color2, trend);
28926
29135
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className, style: { width, height, ...style }, children: /* @__PURE__ */ jsxRuntime.jsx(ResponsiveContainer, { width: "100%", height: "100%", children: /* @__PURE__ */ jsxRuntime.jsx(LineChart, { data, margin: { top: 4, right: 4, bottom: 4, left: 4 }, children: /* @__PURE__ */ jsxRuntime.jsx(
28927
29136
  Line2,
28928
29137
  {
28929
29138
  type: "monotone",
28930
29139
  dataKey: "value",
28931
- stroke,
29140
+ stroke: stroke2,
28932
29141
  strokeWidth: 2,
28933
29142
  dot: false,
28934
29143
  isAnimationActive: false
@@ -31101,8 +31310,8 @@ function LoadingIndicator({
31101
31310
  if (variant === "dot-circle") {
31102
31311
  spinner = /* @__PURE__ */ jsxRuntime.jsx(DotCircle, { px });
31103
31312
  } else {
31104
- const stroke = borderPx[size];
31105
- const r2 = (px - stroke) / 2;
31313
+ const stroke2 = borderPx[size];
31314
+ const r2 = (px - stroke2) / 2;
31106
31315
  const c2 = 2 * Math.PI * r2;
31107
31316
  spinner = /* @__PURE__ */ jsxRuntime.jsxs(
31108
31317
  "svg",
@@ -31120,7 +31329,7 @@ function LoadingIndicator({
31120
31329
  r: r2,
31121
31330
  fill: "none",
31122
31331
  className: "stroke-bg-quaternary",
31123
- strokeWidth: stroke
31332
+ strokeWidth: stroke2
31124
31333
  }
31125
31334
  ),
31126
31335
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -31131,7 +31340,7 @@ function LoadingIndicator({
31131
31340
  r: r2,
31132
31341
  fill: "none",
31133
31342
  className: "stroke-fg-brand-primary",
31134
- strokeWidth: stroke,
31343
+ strokeWidth: stroke2,
31135
31344
  strokeDasharray: c2,
31136
31345
  strokeDashoffset: c2 * 0.75,
31137
31346
  strokeLinecap: variant === "line-spinner" ? "round" : "butt"
@@ -31957,20 +32166,6 @@ function MultiSelect({
31957
32166
  hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: clsx_default("text-sm", invalid ? "text-text-error-primary" : "text-text-tertiary"), children: hint })
31958
32167
  ] });
31959
32168
  }
31960
- function IconBox({ size = 20, className, children }) {
31961
- const icon = React28.isValidElement(children) ? React28.cloneElement(children, {
31962
- viewBox: children.props.viewBox ?? "0 0 24 24",
31963
- className: clsx_default("w-full h-full", children.props.className)
31964
- }) : children;
31965
- return /* @__PURE__ */ jsxRuntime.jsx(
31966
- "span",
31967
- {
31968
- className: clsx_default("relative flex shrink-0 items-center justify-center", className),
31969
- style: { width: size, height: size },
31970
- children: icon
31971
- }
31972
- );
31973
- }
31974
32169
  var LayeredAvatar = ({ src, online }) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative inline-flex size-10 shrink-0 rounded-full border-[0.75px] border-border-secondary-alt bg-bg-primary p-[1px] shadow-xs", children: [
31975
32170
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-full overflow-hidden rounded-full border-[0.5px] border-[rgba(0,0,0,0.16)]", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt: "", className: "size-full rounded-full object-cover" }) }),
31976
32171
  online !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
@@ -32376,7 +32571,7 @@ function NumberInput({
32376
32571
  const dec = () => set2(value - step);
32377
32572
  const inc = () => set2(value + step);
32378
32573
  const Minus = /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.167 10h11.666", stroke: "currentColor", strokeWidth: "1.67", strokeLinecap: "round" }) });
32379
- const Plus = /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 4.167v11.666M4.167 10h11.666", stroke: "currentColor", strokeWidth: "1.67", strokeLinecap: "round" }) });
32574
+ const Plus2 = /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 4.167v11.666M4.167 10h11.666", stroke: "currentColor", strokeWidth: "1.67", strokeLinecap: "round" }) });
32380
32575
  const Chevron5 = ({ up }) => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 12 12", fill: "none", className: clsx_default("size-3", up && "rotate-180"), "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 4.5 6 7.5 9 4.5", stroke: "currentColor", strokeWidth: "1.2", strokeLinecap: "round", strokeLinejoin: "round" }) });
32381
32576
  const numberEl = /* @__PURE__ */ jsxRuntime.jsx(
32382
32577
  "input",
@@ -32399,7 +32594,7 @@ function NumberInput({
32399
32594
  const box = layout === "horizontal" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx_default(boxClasses(destructive), "gap-0 overflow-hidden p-0"), children: [
32400
32595
  /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: dec, disabled, "aria-label": "Decrease", className: "flex items-center justify-center border-r border-border-primary p-2.5 text-fg-quaternary hover:bg-bg-primary-hover disabled:opacity-60", children: Minus }),
32401
32596
  numberEl,
32402
- /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: inc, disabled, "aria-label": "Increase", className: "flex items-center justify-center border-l border-border-primary p-2.5 text-fg-quaternary hover:bg-bg-primary-hover disabled:opacity-60", children: Plus })
32597
+ /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: inc, disabled, "aria-label": "Increase", className: "flex items-center justify-center border-l border-border-primary p-2.5 text-fg-quaternary hover:bg-bg-primary-hover disabled:opacity-60", children: Plus2 })
32403
32598
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx_default(boxClasses(destructive), "gap-0 overflow-hidden p-0"), children: [
32404
32599
  numberEl,
32405
32600
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col self-stretch border-l border-border-primary", children: [
@@ -32489,8 +32684,8 @@ function PaginationNumberBase({
32489
32684
  }
32490
32685
  );
32491
32686
  }
32492
- var ArrowLeft = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15.83 10H4.17M4.17 10l5 5M4.17 10l5-5", stroke: "currentColor", strokeWidth: "1.67", strokeLinecap: "round", strokeLinejoin: "round" }) });
32493
- var ArrowRight = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.17 10h11.66M15.83 10l-5 5M15.83 10l-5-5", stroke: "currentColor", strokeWidth: "1.67", strokeLinecap: "round", strokeLinejoin: "round" }) });
32687
+ var ArrowLeft2 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15.83 10H4.17M4.17 10l5 5M4.17 10l5-5", stroke: "currentColor", strokeWidth: "1.67", strokeLinecap: "round", strokeLinejoin: "round" }) });
32688
+ var ArrowRight2 = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", className: "size-5", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4.17 10h11.66M15.83 10l-5 5M15.83 10l-5-5", stroke: "currentColor", strokeWidth: "1.67", strokeLinecap: "round", strokeLinejoin: "round" }) });
32494
32689
  function PaginationButtonGroupBase({
32495
32690
  cellType = "number",
32496
32691
  active = false,
@@ -32519,11 +32714,11 @@ function PaginationButtonGroupBase({
32519
32714
  ),
32520
32715
  ...rest,
32521
32716
  children: [
32522
- isLeading && (icon ?? /* @__PURE__ */ jsxRuntime.jsx(ArrowLeft, {})),
32717
+ isLeading && (icon ?? /* @__PURE__ */ jsxRuntime.jsx(ArrowLeft2, {})),
32523
32718
  (isLeading || isTrailing) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-xxs", children: children ?? (isLeading ? "Previous" : "Next") }),
32524
- isTrailing && (icon ?? /* @__PURE__ */ jsxRuntime.jsx(ArrowRight, {})),
32719
+ isTrailing && (icon ?? /* @__PURE__ */ jsxRuntime.jsx(ArrowRight2, {})),
32525
32720
  isNumber3 && children,
32526
- isIcon && (icon ?? /* @__PURE__ */ jsxRuntime.jsx(ArrowRight, {}))
32721
+ isIcon && (icon ?? /* @__PURE__ */ jsxRuntime.jsx(ArrowRight2, {}))
32527
32722
  ]
32528
32723
  }
32529
32724
  );
@@ -32728,22 +32923,22 @@ function ProgressCircle({
32728
32923
  size = "xxs",
32729
32924
  className
32730
32925
  }) {
32731
- const { d, stroke, valueClass, labelClass } = SPECS[size];
32926
+ const { d, stroke: stroke2, valueClass, labelClass } = SPECS[size];
32732
32927
  const isHalf = shape === "half";
32733
- const geo = ringGeometry(d, stroke, value, { arcFraction: isHalf ? 0.5 : 1 });
32928
+ const geo = ringGeometry(d, stroke2, value, { arcFraction: isHalf ? 0.5 : 1 });
32734
32929
  const center = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center text-center", children: [
32735
32930
  label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: clsx_default("font-medium text-text-tertiary", labelClass), children: label }),
32736
32931
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: clsx_default("font-display font-semibold text-text-primary", valueClass), children: valueText ?? `${value}%` })
32737
32932
  ] });
32738
32933
  if (isHalf) {
32739
- const h = geo.center + stroke;
32934
+ const h = geo.center + stroke2;
32740
32935
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx_default("relative", className), style: { width: d, height: h }, children: [
32741
- /* @__PURE__ */ jsxRuntime.jsx("svg", { width: d, height: d, viewBox: `0 0 ${d} ${d}`, className: "absolute left-0 top-0", role: "img", "aria-label": `${value}%`, children: /* @__PURE__ */ jsxRuntime.jsx("g", { transform: `rotate(180 ${geo.center} ${geo.center})`, children: /* @__PURE__ */ jsxRuntime.jsx(RingPair, { geo, stroke, trackClass: "stroke-bg-quaternary", progressClass: "stroke-fg-brand-primary" }) }) }),
32936
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { width: d, height: d, viewBox: `0 0 ${d} ${d}`, className: "absolute left-0 top-0", role: "img", "aria-label": `${value}%`, children: /* @__PURE__ */ jsxRuntime.jsx("g", { transform: `rotate(180 ${geo.center} ${geo.center})`, children: /* @__PURE__ */ jsxRuntime.jsx(RingPair, { geo, stroke: stroke2, trackClass: "stroke-bg-quaternary", progressClass: "stroke-fg-brand-primary" }) }) }),
32742
32937
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-0 left-1/2 -translate-x-1/2", children: center })
32743
32938
  ] });
32744
32939
  }
32745
32940
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx_default("relative", className), style: { width: d, height: d }, children: [
32746
- /* @__PURE__ */ jsxRuntime.jsx("svg", { width: d, height: d, viewBox: `0 0 ${d} ${d}`, className: "block", role: "img", "aria-label": `${value}%`, children: /* @__PURE__ */ jsxRuntime.jsx("g", { transform: `rotate(-90 ${geo.center} ${geo.center})`, children: /* @__PURE__ */ jsxRuntime.jsx(RingPair, { geo, stroke, trackClass: "stroke-bg-quaternary", progressClass: "stroke-fg-brand-primary" }) }) }),
32941
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { width: d, height: d, viewBox: `0 0 ${d} ${d}`, className: "block", role: "img", "aria-label": `${value}%`, children: /* @__PURE__ */ jsxRuntime.jsx("g", { transform: `rotate(-90 ${geo.center} ${geo.center})`, children: /* @__PURE__ */ jsxRuntime.jsx(RingPair, { geo, stroke: stroke2, trackClass: "stroke-bg-quaternary", progressClass: "stroke-fg-brand-primary" }) }) }),
32747
32942
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: center })
32748
32943
  ] });
32749
32944
  }
@@ -33705,6 +33900,137 @@ function TextEditorTooltip({ children, className, ...rest }) {
33705
33900
  }
33706
33901
  );
33707
33902
  }
33903
+ function useTextEditor({
33904
+ placeholder,
33905
+ content,
33906
+ editable = true,
33907
+ onUpdate
33908
+ } = {}) {
33909
+ return react.useEditor({
33910
+ editable,
33911
+ content: content ?? "",
33912
+ extensions: [
33913
+ starterKit.StarterKit.configure({ link: { openOnClick: false } }),
33914
+ extensionTextAlign.TextAlign.configure({ types: ["heading", "paragraph"] }),
33915
+ extensionPlaceholder.Placeholder.configure({ placeholder: placeholder ?? "" })
33916
+ ],
33917
+ onUpdate: ({ editor }) => onUpdate?.(editor.getHTML())
33918
+ });
33919
+ }
33920
+ var stroke = {
33921
+ fill: "none",
33922
+ stroke: "currentColor",
33923
+ strokeWidth: 2,
33924
+ strokeLinecap: "round",
33925
+ strokeLinejoin: "round"
33926
+ };
33927
+ var ItalicIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", ...stroke, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 4h-9M14 20H5M15 4 9 20" }) });
33928
+ var UnderlineIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", ...stroke, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 4v6a6 6 0 0 0 12 0V4M4 21h16" }) });
33929
+ var StrikeIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", ...stroke, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 12h16M16 7.5A4 3 0 0 0 8 8M8 16.5a4 3 0 0 0 8-.5" }) });
33930
+ var HeadingIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", ...stroke, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6 4v16M18 4v16M6 12h12" }) });
33931
+ var BulletListIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", ...stroke, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 6h11M9 12h11M9 18h11M4.5 6h.01M4.5 12h.01M4.5 18h.01" }) });
33932
+ var OrderedListIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", ...stroke, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 6h10M10 12h10M10 18h10M4 4v4M3 14h2l-2 3h2" }) });
33933
+ var proseClass = clsx_default(
33934
+ "font-body text-sm text-text-primary",
33935
+ "[&_.ProseMirror]:min-h-[80px] [&_.ProseMirror]:outline-none",
33936
+ "[&_.ProseMirror_p]:my-0",
33937
+ "[&_.ProseMirror_ul]:list-disc [&_.ProseMirror_ul]:pl-2xl",
33938
+ "[&_.ProseMirror_ol]:list-decimal [&_.ProseMirror_ol]:pl-2xl",
33939
+ "[&_.ProseMirror_h2]:text-lg [&_.ProseMirror_h2]:font-semibold [&_.ProseMirror_h2]:text-text-primary",
33940
+ "[&_.ProseMirror_a]:text-text-brand-secondary [&_.ProseMirror_a]:underline",
33941
+ // Placeholder (extension adds .is-editor-empty + data-placeholder).
33942
+ "[&_.ProseMirror_p.is-editor-empty:first-child]:before:pointer-events-none",
33943
+ "[&_.ProseMirror_p.is-editor-empty:first-child]:before:float-left",
33944
+ "[&_.ProseMirror_p.is-editor-empty:first-child]:before:h-0",
33945
+ "[&_.ProseMirror_p.is-editor-empty:first-child]:before:text-text-placeholder",
33946
+ "[&_.ProseMirror_p.is-editor-empty:first-child]:before:content-[attr(data-placeholder)]"
33947
+ );
33948
+ function TextEditor({
33949
+ placeholder,
33950
+ content,
33951
+ onUpdate,
33952
+ disabled = false,
33953
+ className
33954
+ }) {
33955
+ const editor = useTextEditor({ placeholder, content, editable: !disabled, onUpdate });
33956
+ React28.useEffect(() => {
33957
+ editor?.setEditable(!disabled);
33958
+ }, [editor, disabled]);
33959
+ const isActive = (name, attrs) => editor?.isActive(name, attrs) ?? false;
33960
+ const setLink = () => {
33961
+ if (!editor) return;
33962
+ const prev = editor.getAttributes("link").href ?? "";
33963
+ const url = window.prompt("Link URL", prev);
33964
+ if (url === null) return;
33965
+ const chain = editor.chain().focus().extendMarkRange("link");
33966
+ if (url === "") chain.unsetLink().run();
33967
+ else chain.setLink({ href: url }).run();
33968
+ };
33969
+ const ToolbarButton = ({
33970
+ label,
33971
+ icon,
33972
+ active,
33973
+ onRun
33974
+ }) => /* @__PURE__ */ jsxRuntime.jsx(
33975
+ ButtonUtility,
33976
+ {
33977
+ variant: "ghost",
33978
+ label,
33979
+ icon: /* @__PURE__ */ jsxRuntime.jsx(IconBox, { size: 20, children: icon }),
33980
+ "aria-pressed": active,
33981
+ disabled: disabled || !editor,
33982
+ className: active ? "!bg-bg-secondary !text-fg-secondary" : void 0,
33983
+ onMouseDown: (e) => e.preventDefault(),
33984
+ onClick: onRun
33985
+ }
33986
+ );
33987
+ return /* @__PURE__ */ jsxRuntime.jsxs(
33988
+ "div",
33989
+ {
33990
+ className: clsx_default(
33991
+ "relative flex flex-col overflow-hidden rounded-xl border border-border-primary bg-bg-primary",
33992
+ "focus-within:ring-2 focus-within:ring-border-brand",
33993
+ disabled && "opacity-60",
33994
+ className
33995
+ ),
33996
+ children: [
33997
+ /* @__PURE__ */ jsxRuntime.jsxs(TextEditorToolbar, { className: "w-full !rounded-none !border-l-0 !border-r-0 !border-t-0 !shadow-none", children: [
33998
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Bold", icon: /* @__PURE__ */ jsxRuntime.jsx(bvDsIcons.Bold01, {}), active: isActive("bold"), onRun: () => editor?.chain().focus().toggleBold().run() }),
33999
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Italic", icon: /* @__PURE__ */ jsxRuntime.jsx(ItalicIcon, {}), active: isActive("italic"), onRun: () => editor?.chain().focus().toggleItalic().run() }),
34000
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Underline", icon: /* @__PURE__ */ jsxRuntime.jsx(UnderlineIcon, {}), active: isActive("underline"), onRun: () => editor?.chain().focus().toggleUnderline().run() }),
34001
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Strikethrough", icon: /* @__PURE__ */ jsxRuntime.jsx(StrikeIcon, {}), active: isActive("strike"), onRun: () => editor?.chain().focus().toggleStrike().run() }),
34002
+ /* @__PURE__ */ jsxRuntime.jsx(TextEditorToolbarDivider, {}),
34003
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Heading", icon: /* @__PURE__ */ jsxRuntime.jsx(HeadingIcon, {}), active: isActive("heading", { level: 2 }), onRun: () => editor?.chain().focus().toggleHeading({ level: 2 }).run() }),
34004
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Bullet list", icon: /* @__PURE__ */ jsxRuntime.jsx(BulletListIcon, {}), active: isActive("bulletList"), onRun: () => editor?.chain().focus().toggleBulletList().run() }),
34005
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Ordered list", icon: /* @__PURE__ */ jsxRuntime.jsx(OrderedListIcon, {}), active: isActive("orderedList"), onRun: () => editor?.chain().focus().toggleOrderedList().run() }),
34006
+ /* @__PURE__ */ jsxRuntime.jsx(TextEditorToolbarDivider, {}),
34007
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Align left", icon: /* @__PURE__ */ jsxRuntime.jsx(bvDsIcons.AlignLeft, {}), active: editor?.isActive({ textAlign: "left" }) ?? false, onRun: () => editor?.chain().focus().setTextAlign("left").run() }),
34008
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Align center", icon: /* @__PURE__ */ jsxRuntime.jsx(bvDsIcons.AlignCenter, {}), active: editor?.isActive({ textAlign: "center" }) ?? false, onRun: () => editor?.chain().focus().setTextAlign("center").run() }),
34009
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Align right", icon: /* @__PURE__ */ jsxRuntime.jsx(bvDsIcons.AlignRight, {}), active: editor?.isActive({ textAlign: "right" }) ?? false, onRun: () => editor?.chain().focus().setTextAlign("right").run() }),
34010
+ /* @__PURE__ */ jsxRuntime.jsx(TextEditorToolbarDivider, {}),
34011
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "Link", icon: /* @__PURE__ */ jsxRuntime.jsx(bvDsIcons.Link01, {}), active: isActive("link"), onRun: setLink })
34012
+ ] }),
34013
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative min-h-[120px] px-3xl py-2xl", children: [
34014
+ /* @__PURE__ */ jsxRuntime.jsx(react.EditorContent, { editor, className: proseClass }),
34015
+ editor?.isActive("link") && /* @__PURE__ */ jsxRuntime.jsxs(TextEditorTooltip, { className: "absolute right-3xl top-md z-10", children: [
34016
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "max-w-[160px] truncate px-xs text-xs text-text-secondary", children: String(editor.getAttributes("link").href ?? "") }),
34017
+ /* @__PURE__ */ jsxRuntime.jsx(ButtonUtility, { variant: "ghost", size: "xs", label: "Edit link", icon: /* @__PURE__ */ jsxRuntime.jsx(IconBox, { size: 16, children: /* @__PURE__ */ jsxRuntime.jsx(bvDsIcons.Link01, {}) }), onClick: setLink }),
34018
+ /* @__PURE__ */ jsxRuntime.jsx(
34019
+ ButtonUtility,
34020
+ {
34021
+ variant: "ghost",
34022
+ size: "xs",
34023
+ label: "Remove link",
34024
+ icon: /* @__PURE__ */ jsxRuntime.jsx(IconBox, { size: 16, children: /* @__PURE__ */ jsxRuntime.jsx(bvDsIcons.XClose, {}) }),
34025
+ onClick: () => editor.chain().focus().extendMarkRange("link").unsetLink().run()
34026
+ }
34027
+ )
34028
+ ] })
34029
+ ] })
34030
+ ]
34031
+ }
34032
+ );
34033
+ }
33708
34034
  function TextareaInputField({
33709
34035
  size = "md",
33710
34036
  label,
@@ -34098,6 +34424,7 @@ exports.ButtonDestructive = ButtonDestructive;
34098
34424
  exports.ButtonGroup = ButtonGroup;
34099
34425
  exports.ButtonGroupSegment = ButtonGroupSegment;
34100
34426
  exports.ButtonUtility = ButtonUtility;
34427
+ exports.Calendar = Calendar;
34101
34428
  exports.CalendarCell = CalendarCell;
34102
34429
  exports.CalendarCellDayWeekView = CalendarCellDayWeekView;
34103
34430
  exports.CalendarColumnHeader = CalendarColumnHeader;
@@ -34217,6 +34544,7 @@ exports.TableHeaderLabel = TableHeaderLabel;
34217
34544
  exports.Tabs = Tabs;
34218
34545
  exports.Tag = Tag;
34219
34546
  exports.TagsInputField = TagsInputField;
34547
+ exports.TextEditor = TextEditor;
34220
34548
  exports.TextEditorToolbar = TextEditorToolbar;
34221
34549
  exports.TextEditorToolbarDivider = TextEditorToolbarDivider;
34222
34550
  exports.TextEditorTooltip = TextEditorTooltip;
@@ -34230,5 +34558,6 @@ exports.TreeViewItem = TreeViewItem;
34230
34558
  exports.VerificationCodeInput = VerificationCodeInput;
34231
34559
  exports.illustrations = illustrations_exports;
34232
34560
  exports.useContextMenu = useContextMenu;
34561
+ exports.useTextEditor = useTextEditor;
34233
34562
  //# sourceMappingURL=index.cjs.map
34234
34563
  //# sourceMappingURL=index.cjs.map