@almadar/ui 4.56.4 → 4.57.2
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/avl/index.cjs +190 -6
- package/dist/avl/index.js +191 -7
- package/dist/components/atoms/Badge.d.ts +7 -0
- package/dist/components/index.cjs +192 -6
- package/dist/components/index.js +193 -7
- package/dist/components/molecules/TagInput.d.ts +52 -0
- package/dist/components/molecules/index.d.ts +2 -0
- package/dist/marketing/index.cjs +21 -2
- package/dist/marketing/index.d.cts +7 -0
- package/dist/marketing/index.js +22 -3
- package/dist/providers/index.cjs +190 -6
- package/dist/providers/index.js +190 -6
- package/dist/runtime/index.cjs +190 -6
- package/dist/runtime/index.js +190 -6
- package/package.json +1 -1
package/dist/avl/index.cjs
CHANGED
|
@@ -6432,7 +6432,7 @@ var init_Badge = __esm({
|
|
|
6432
6432
|
lg: "px-3 py-1.5 text-base"
|
|
6433
6433
|
};
|
|
6434
6434
|
Badge = React96__namespace.default.forwardRef(
|
|
6435
|
-
({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
|
|
6435
|
+
({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
|
|
6436
6436
|
const iconSizes3 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
|
|
6437
6437
|
const resolvedIcon = typeof icon === "string" ? (() => {
|
|
6438
6438
|
const I = resolveIcon(icon);
|
|
@@ -6446,12 +6446,31 @@ var init_Badge = __esm({
|
|
|
6446
6446
|
"inline-flex items-center gap-1 font-bold rounded-sm",
|
|
6447
6447
|
variantStyles3[variant],
|
|
6448
6448
|
sizeStyles3[size],
|
|
6449
|
+
onRemove && "pr-1",
|
|
6449
6450
|
className
|
|
6450
6451
|
),
|
|
6451
6452
|
...props,
|
|
6452
6453
|
children: [
|
|
6453
6454
|
resolvedIcon,
|
|
6454
|
-
children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label)
|
|
6455
|
+
children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label),
|
|
6456
|
+
onRemove ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
6457
|
+
"button",
|
|
6458
|
+
{
|
|
6459
|
+
type: "button",
|
|
6460
|
+
"aria-label": removeLabel ?? "Remove",
|
|
6461
|
+
onClick: (e) => {
|
|
6462
|
+
e.stopPropagation();
|
|
6463
|
+
onRemove();
|
|
6464
|
+
},
|
|
6465
|
+
className: cn(
|
|
6466
|
+
"inline-flex items-center justify-center rounded-sm",
|
|
6467
|
+
"hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
|
|
6468
|
+
"transition-colors",
|
|
6469
|
+
size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
|
|
6470
|
+
),
|
|
6471
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.X, { className: iconSizes3[size] })
|
|
6472
|
+
}
|
|
6473
|
+
) : null
|
|
6455
6474
|
]
|
|
6456
6475
|
}
|
|
6457
6476
|
);
|
|
@@ -13813,7 +13832,7 @@ var init_MapView = __esm({
|
|
|
13813
13832
|
shadowSize: [41, 41]
|
|
13814
13833
|
});
|
|
13815
13834
|
L.Marker.prototype.options.icon = defaultIcon;
|
|
13816
|
-
const { useEffect: useEffect88, useRef: useRef88, useCallback:
|
|
13835
|
+
const { useEffect: useEffect88, useRef: useRef88, useCallback: useCallback129, useState: useState123 } = React96__namespace.default;
|
|
13817
13836
|
const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
|
|
13818
13837
|
const { useEventBus: useEventBus3 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
|
|
13819
13838
|
function MapUpdater({ centerLat, centerLng, zoom }) {
|
|
@@ -13858,8 +13877,8 @@ var init_MapView = __esm({
|
|
|
13858
13877
|
showAttribution = true
|
|
13859
13878
|
}) {
|
|
13860
13879
|
const eventBus = useEventBus3();
|
|
13861
|
-
const [clickedPosition, setClickedPosition] =
|
|
13862
|
-
const handleMapClick =
|
|
13880
|
+
const [clickedPosition, setClickedPosition] = useState123(null);
|
|
13881
|
+
const handleMapClick = useCallback129((lat, lng) => {
|
|
13863
13882
|
if (showClickedPin) {
|
|
13864
13883
|
setClickedPosition({ lat, lng });
|
|
13865
13884
|
}
|
|
@@ -13868,7 +13887,7 @@ var init_MapView = __esm({
|
|
|
13868
13887
|
eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
|
|
13869
13888
|
}
|
|
13870
13889
|
}, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
|
|
13871
|
-
const handleMarkerClick =
|
|
13890
|
+
const handleMarkerClick = useCallback129((marker) => {
|
|
13872
13891
|
onMarkerClick?.(marker);
|
|
13873
13892
|
if (markerClickEvent) {
|
|
13874
13893
|
eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
|
|
@@ -33285,6 +33304,98 @@ var init_TagCloud = __esm({
|
|
|
33285
33304
|
TagCloud.displayName = "TagCloud";
|
|
33286
33305
|
}
|
|
33287
33306
|
});
|
|
33307
|
+
var TagInput;
|
|
33308
|
+
var init_TagInput = __esm({
|
|
33309
|
+
"components/molecules/TagInput.tsx"() {
|
|
33310
|
+
"use client";
|
|
33311
|
+
init_cn();
|
|
33312
|
+
init_useEventBus();
|
|
33313
|
+
init_Input();
|
|
33314
|
+
init_Badge();
|
|
33315
|
+
init_Stack();
|
|
33316
|
+
init_Typography();
|
|
33317
|
+
TagInput = ({
|
|
33318
|
+
value,
|
|
33319
|
+
onChange,
|
|
33320
|
+
placeholder,
|
|
33321
|
+
disabled = false,
|
|
33322
|
+
variant = "default",
|
|
33323
|
+
unique = true,
|
|
33324
|
+
helperText,
|
|
33325
|
+
className,
|
|
33326
|
+
addEvent,
|
|
33327
|
+
removeEvent
|
|
33328
|
+
}) => {
|
|
33329
|
+
const eventBus = useEventBus();
|
|
33330
|
+
const [draft, setDraft] = React96.useState("");
|
|
33331
|
+
const commit = React96.useCallback(() => {
|
|
33332
|
+
const tag = draft.trim();
|
|
33333
|
+
if (!tag) return;
|
|
33334
|
+
if (unique && value.includes(tag)) {
|
|
33335
|
+
setDraft("");
|
|
33336
|
+
return;
|
|
33337
|
+
}
|
|
33338
|
+
const next = [...value, tag];
|
|
33339
|
+
onChange?.(next);
|
|
33340
|
+
if (addEvent) {
|
|
33341
|
+
eventBus.emit(`UI:${addEvent}`, { tag, value: next });
|
|
33342
|
+
}
|
|
33343
|
+
setDraft("");
|
|
33344
|
+
}, [draft, value, onChange, unique, addEvent, eventBus]);
|
|
33345
|
+
const removeAt = React96.useCallback(
|
|
33346
|
+
(index) => {
|
|
33347
|
+
if (disabled) return;
|
|
33348
|
+
const tag = value[index];
|
|
33349
|
+
const next = value.slice();
|
|
33350
|
+
next.splice(index, 1);
|
|
33351
|
+
onChange?.(next);
|
|
33352
|
+
if (removeEvent) {
|
|
33353
|
+
eventBus.emit(`UI:${removeEvent}`, { tag, index, value: next });
|
|
33354
|
+
}
|
|
33355
|
+
},
|
|
33356
|
+
[value, onChange, disabled, removeEvent, eventBus]
|
|
33357
|
+
);
|
|
33358
|
+
const handleKeyDown = React96.useCallback(
|
|
33359
|
+
(e) => {
|
|
33360
|
+
if (disabled) return;
|
|
33361
|
+
if (e.key === "Enter") {
|
|
33362
|
+
e.preventDefault();
|
|
33363
|
+
commit();
|
|
33364
|
+
} else if (e.key === "Backspace" && draft.length === 0 && value.length > 0) {
|
|
33365
|
+
e.preventDefault();
|
|
33366
|
+
removeAt(value.length - 1);
|
|
33367
|
+
}
|
|
33368
|
+
},
|
|
33369
|
+
[commit, draft.length, value, removeAt, disabled]
|
|
33370
|
+
);
|
|
33371
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: cn("w-full", className), children: [
|
|
33372
|
+
value.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(HStack, { gap: "xs", className: "flex-wrap", children: value.map((tag, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
33373
|
+
Badge,
|
|
33374
|
+
{
|
|
33375
|
+
variant,
|
|
33376
|
+
size: "sm",
|
|
33377
|
+
onRemove: disabled ? void 0 : () => removeAt(index),
|
|
33378
|
+
removeLabel: `Remove ${tag}`,
|
|
33379
|
+
children: tag
|
|
33380
|
+
},
|
|
33381
|
+
`${tag}-${index}`
|
|
33382
|
+
)) }) : null,
|
|
33383
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
33384
|
+
Input,
|
|
33385
|
+
{
|
|
33386
|
+
value: draft,
|
|
33387
|
+
placeholder: placeholder ?? "Type and press Enter\u2026",
|
|
33388
|
+
disabled,
|
|
33389
|
+
onChange: (e) => setDraft(e.target.value),
|
|
33390
|
+
onKeyDown: handleKeyDown
|
|
33391
|
+
}
|
|
33392
|
+
),
|
|
33393
|
+
helperText ? /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", color: "muted", children: helperText }) : null
|
|
33394
|
+
] });
|
|
33395
|
+
};
|
|
33396
|
+
TagInput.displayName = "TagInput";
|
|
33397
|
+
}
|
|
33398
|
+
});
|
|
33288
33399
|
var ShowcaseCard;
|
|
33289
33400
|
var init_ShowcaseCard = __esm({
|
|
33290
33401
|
"components/molecules/ShowcaseCard.tsx"() {
|
|
@@ -36903,6 +37014,75 @@ var init_GradientDivider = __esm({
|
|
|
36903
37014
|
GradientDivider.displayName = "GradientDivider";
|
|
36904
37015
|
}
|
|
36905
37016
|
});
|
|
37017
|
+
var MarketingFooter;
|
|
37018
|
+
var init_MarketingFooter = __esm({
|
|
37019
|
+
"components/molecules/MarketingFooter.tsx"() {
|
|
37020
|
+
"use client";
|
|
37021
|
+
init_cn();
|
|
37022
|
+
init_Box();
|
|
37023
|
+
init_Stack();
|
|
37024
|
+
init_Typography();
|
|
37025
|
+
MarketingFooter = ({
|
|
37026
|
+
columns,
|
|
37027
|
+
copyright,
|
|
37028
|
+
logo,
|
|
37029
|
+
className
|
|
37030
|
+
}) => {
|
|
37031
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
37032
|
+
Box,
|
|
37033
|
+
{
|
|
37034
|
+
as: "footer",
|
|
37035
|
+
className: cn(
|
|
37036
|
+
"bg-surface",
|
|
37037
|
+
"border-t border-border",
|
|
37038
|
+
"pt-12 pb-8 px-4",
|
|
37039
|
+
className
|
|
37040
|
+
),
|
|
37041
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
37042
|
+
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "lg", align: "start", className: "flex-wrap w-full justify-between", children: [
|
|
37043
|
+
logo && /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "sm", className: "min-w-[140px] mb-4", children: logo.href ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: logo.href, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: logo.src, alt: logo.alt, className: "h-8 w-auto" }) }) : /* @__PURE__ */ jsxRuntime.jsx("img", { src: logo.src, alt: logo.alt, className: "h-8 w-auto" }) }),
|
|
37044
|
+
columns.map((col) => /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", className: "min-w-[140px] mb-4", children: [
|
|
37045
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
37046
|
+
Typography,
|
|
37047
|
+
{
|
|
37048
|
+
variant: "body2",
|
|
37049
|
+
className: "font-semibold text-foreground mb-1",
|
|
37050
|
+
children: col.title
|
|
37051
|
+
}
|
|
37052
|
+
),
|
|
37053
|
+
col.items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
37054
|
+
"a",
|
|
37055
|
+
{
|
|
37056
|
+
href: item.href,
|
|
37057
|
+
className: cn(
|
|
37058
|
+
"text-sm no-underline",
|
|
37059
|
+
"text-foreground/60",
|
|
37060
|
+
"hover:text-accent",
|
|
37061
|
+
"transition-colors duration-150"
|
|
37062
|
+
),
|
|
37063
|
+
target: item.href.startsWith("http") ? "_blank" : void 0,
|
|
37064
|
+
rel: item.href.startsWith("http") ? "noopener noreferrer" : void 0,
|
|
37065
|
+
children: item.label
|
|
37066
|
+
},
|
|
37067
|
+
item.label
|
|
37068
|
+
))
|
|
37069
|
+
] }, col.title))
|
|
37070
|
+
] }),
|
|
37071
|
+
copyright && /* @__PURE__ */ jsxRuntime.jsx(
|
|
37072
|
+
Typography,
|
|
37073
|
+
{
|
|
37074
|
+
variant: "caption",
|
|
37075
|
+
className: "text-foreground/30 text-center w-full pt-6",
|
|
37076
|
+
children: copyright
|
|
37077
|
+
}
|
|
37078
|
+
)
|
|
37079
|
+
] })
|
|
37080
|
+
}
|
|
37081
|
+
);
|
|
37082
|
+
};
|
|
37083
|
+
MarketingFooter.displayName = "MarketingFooter";
|
|
37084
|
+
}
|
|
37085
|
+
});
|
|
36906
37086
|
var PullQuote;
|
|
36907
37087
|
var init_PullQuote = __esm({
|
|
36908
37088
|
"components/molecules/PullQuote.tsx"() {
|
|
@@ -53744,6 +53924,7 @@ var init_component_registry_generated = __esm({
|
|
|
53744
53924
|
init_List();
|
|
53745
53925
|
init_LoadingState();
|
|
53746
53926
|
init_MarkdownContent();
|
|
53927
|
+
init_MarketingFooter();
|
|
53747
53928
|
init_MasterDetail();
|
|
53748
53929
|
init_MasterDetailLayout();
|
|
53749
53930
|
init_MatrixQuestion();
|
|
@@ -53843,6 +54024,7 @@ var init_component_registry_generated = __esm({
|
|
|
53843
54024
|
init_Table();
|
|
53844
54025
|
init_Tabs();
|
|
53845
54026
|
init_TagCloud();
|
|
54027
|
+
init_TagInput();
|
|
53846
54028
|
init_TeamCard();
|
|
53847
54029
|
init_TeamOrganism();
|
|
53848
54030
|
init_TextHighlight();
|
|
@@ -54043,6 +54225,7 @@ var init_component_registry_generated = __esm({
|
|
|
54043
54225
|
"MapView": MapViewPattern,
|
|
54044
54226
|
"MapViewPattern": MapViewPattern,
|
|
54045
54227
|
"MarkdownContent": MarkdownContent,
|
|
54228
|
+
"MarketingFooter": MarketingFooter,
|
|
54046
54229
|
"MasterDetail": MasterDetail,
|
|
54047
54230
|
"MasterDetailLayout": MasterDetailLayout,
|
|
54048
54231
|
"MatrixQuestion": MatrixQuestion,
|
|
@@ -54158,6 +54341,7 @@ var init_component_registry_generated = __esm({
|
|
|
54158
54341
|
"Table": Table,
|
|
54159
54342
|
"Tabs": Tabs,
|
|
54160
54343
|
"TagCloud": TagCloud,
|
|
54344
|
+
"TagInput": TagInput,
|
|
54161
54345
|
"TeamCard": TeamCard,
|
|
54162
54346
|
"TeamOrganism": TeamOrganism,
|
|
54163
54347
|
"TextHighlight": TextHighlight,
|
package/dist/avl/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { createLogger, isLogLevelEnabled } from '@almadar/logger';
|
|
|
6
6
|
import ELK from 'elkjs/lib/elk.bundled.js';
|
|
7
7
|
import { MarkerType, Handle, Position, getBezierPath, EdgeLabelRenderer, BaseEdge, ReactFlowProvider, useNodesState, useEdgesState, useReactFlow, ReactFlow, Controls, Background, BackgroundVariant } from '@xyflow/react';
|
|
8
8
|
import * as LucideIcons from 'lucide-react';
|
|
9
|
-
import { Loader2,
|
|
9
|
+
import { Loader2, X, ChevronDown, Check, Copy, AlertTriangle, Info, AlertCircle, CheckCircle, List, Printer, ChevronRight, ChevronLeft, GitBranch, Pencil, Eye, Plus, ArrowRight, Trash, Code, FileText, WrapText, Trash2, Menu as Menu$1, Search, Bell, LogOut, ZoomOut, ZoomIn, Download, FileQuestion, Inbox, XCircle, Filter, Pause, Play, RotateCcw, Package, Calendar, MoreHorizontal, Image as Image$1, Upload, Minus, ArrowLeft, Camera, RefreshCw, HelpCircle, ChevronUp, MessageSquare, Flag, Type, Heading1, Heading2, Heading3, ListOrdered, Quote, Eraser, Star, TrendingUp, TrendingDown, ArrowUp, ArrowDown, MoreVertical, Sun, Moon, Circle, Clock, CheckCircle2, FileWarning, GitCommit, AlignLeft, Columns, SkipForward, Bug, Send, Wrench, User, Tag, DollarSign, Coffee, Users, Zap, Sword, Move, Heart, Shield } from 'lucide-react';
|
|
10
10
|
import { evaluate, createMinimalContext } from '@almadar/evaluator';
|
|
11
11
|
import { createPortal } from 'react-dom';
|
|
12
12
|
import { Link, Outlet, useLocation } from 'react-router-dom';
|
|
@@ -6386,7 +6386,7 @@ var init_Badge = __esm({
|
|
|
6386
6386
|
lg: "px-3 py-1.5 text-base"
|
|
6387
6387
|
};
|
|
6388
6388
|
Badge = React96__default.forwardRef(
|
|
6389
|
-
({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
|
|
6389
|
+
({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
|
|
6390
6390
|
const iconSizes3 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
|
|
6391
6391
|
const resolvedIcon = typeof icon === "string" ? (() => {
|
|
6392
6392
|
const I = resolveIcon(icon);
|
|
@@ -6400,12 +6400,31 @@ var init_Badge = __esm({
|
|
|
6400
6400
|
"inline-flex items-center gap-1 font-bold rounded-sm",
|
|
6401
6401
|
variantStyles3[variant],
|
|
6402
6402
|
sizeStyles3[size],
|
|
6403
|
+
onRemove && "pr-1",
|
|
6403
6404
|
className
|
|
6404
6405
|
),
|
|
6405
6406
|
...props,
|
|
6406
6407
|
children: [
|
|
6407
6408
|
resolvedIcon,
|
|
6408
|
-
children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label)
|
|
6409
|
+
children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label),
|
|
6410
|
+
onRemove ? /* @__PURE__ */ jsx(
|
|
6411
|
+
"button",
|
|
6412
|
+
{
|
|
6413
|
+
type: "button",
|
|
6414
|
+
"aria-label": removeLabel ?? "Remove",
|
|
6415
|
+
onClick: (e) => {
|
|
6416
|
+
e.stopPropagation();
|
|
6417
|
+
onRemove();
|
|
6418
|
+
},
|
|
6419
|
+
className: cn(
|
|
6420
|
+
"inline-flex items-center justify-center rounded-sm",
|
|
6421
|
+
"hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
|
|
6422
|
+
"transition-colors",
|
|
6423
|
+
size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
|
|
6424
|
+
),
|
|
6425
|
+
children: /* @__PURE__ */ jsx(X, { className: iconSizes3[size] })
|
|
6426
|
+
}
|
|
6427
|
+
) : null
|
|
6409
6428
|
]
|
|
6410
6429
|
}
|
|
6411
6430
|
);
|
|
@@ -13767,7 +13786,7 @@ var init_MapView = __esm({
|
|
|
13767
13786
|
shadowSize: [41, 41]
|
|
13768
13787
|
});
|
|
13769
13788
|
L.Marker.prototype.options.icon = defaultIcon;
|
|
13770
|
-
const { useEffect: useEffect88, useRef: useRef88, useCallback:
|
|
13789
|
+
const { useEffect: useEffect88, useRef: useRef88, useCallback: useCallback129, useState: useState123 } = React96__default;
|
|
13771
13790
|
const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
|
|
13772
13791
|
const { useEventBus: useEventBus3 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
|
|
13773
13792
|
function MapUpdater({ centerLat, centerLng, zoom }) {
|
|
@@ -13812,8 +13831,8 @@ var init_MapView = __esm({
|
|
|
13812
13831
|
showAttribution = true
|
|
13813
13832
|
}) {
|
|
13814
13833
|
const eventBus = useEventBus3();
|
|
13815
|
-
const [clickedPosition, setClickedPosition] =
|
|
13816
|
-
const handleMapClick =
|
|
13834
|
+
const [clickedPosition, setClickedPosition] = useState123(null);
|
|
13835
|
+
const handleMapClick = useCallback129((lat, lng) => {
|
|
13817
13836
|
if (showClickedPin) {
|
|
13818
13837
|
setClickedPosition({ lat, lng });
|
|
13819
13838
|
}
|
|
@@ -13822,7 +13841,7 @@ var init_MapView = __esm({
|
|
|
13822
13841
|
eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
|
|
13823
13842
|
}
|
|
13824
13843
|
}, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
|
|
13825
|
-
const handleMarkerClick =
|
|
13844
|
+
const handleMarkerClick = useCallback129((marker) => {
|
|
13826
13845
|
onMarkerClick?.(marker);
|
|
13827
13846
|
if (markerClickEvent) {
|
|
13828
13847
|
eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
|
|
@@ -33239,6 +33258,98 @@ var init_TagCloud = __esm({
|
|
|
33239
33258
|
TagCloud.displayName = "TagCloud";
|
|
33240
33259
|
}
|
|
33241
33260
|
});
|
|
33261
|
+
var TagInput;
|
|
33262
|
+
var init_TagInput = __esm({
|
|
33263
|
+
"components/molecules/TagInput.tsx"() {
|
|
33264
|
+
"use client";
|
|
33265
|
+
init_cn();
|
|
33266
|
+
init_useEventBus();
|
|
33267
|
+
init_Input();
|
|
33268
|
+
init_Badge();
|
|
33269
|
+
init_Stack();
|
|
33270
|
+
init_Typography();
|
|
33271
|
+
TagInput = ({
|
|
33272
|
+
value,
|
|
33273
|
+
onChange,
|
|
33274
|
+
placeholder,
|
|
33275
|
+
disabled = false,
|
|
33276
|
+
variant = "default",
|
|
33277
|
+
unique = true,
|
|
33278
|
+
helperText,
|
|
33279
|
+
className,
|
|
33280
|
+
addEvent,
|
|
33281
|
+
removeEvent
|
|
33282
|
+
}) => {
|
|
33283
|
+
const eventBus = useEventBus();
|
|
33284
|
+
const [draft, setDraft] = useState("");
|
|
33285
|
+
const commit = useCallback(() => {
|
|
33286
|
+
const tag = draft.trim();
|
|
33287
|
+
if (!tag) return;
|
|
33288
|
+
if (unique && value.includes(tag)) {
|
|
33289
|
+
setDraft("");
|
|
33290
|
+
return;
|
|
33291
|
+
}
|
|
33292
|
+
const next = [...value, tag];
|
|
33293
|
+
onChange?.(next);
|
|
33294
|
+
if (addEvent) {
|
|
33295
|
+
eventBus.emit(`UI:${addEvent}`, { tag, value: next });
|
|
33296
|
+
}
|
|
33297
|
+
setDraft("");
|
|
33298
|
+
}, [draft, value, onChange, unique, addEvent, eventBus]);
|
|
33299
|
+
const removeAt = useCallback(
|
|
33300
|
+
(index) => {
|
|
33301
|
+
if (disabled) return;
|
|
33302
|
+
const tag = value[index];
|
|
33303
|
+
const next = value.slice();
|
|
33304
|
+
next.splice(index, 1);
|
|
33305
|
+
onChange?.(next);
|
|
33306
|
+
if (removeEvent) {
|
|
33307
|
+
eventBus.emit(`UI:${removeEvent}`, { tag, index, value: next });
|
|
33308
|
+
}
|
|
33309
|
+
},
|
|
33310
|
+
[value, onChange, disabled, removeEvent, eventBus]
|
|
33311
|
+
);
|
|
33312
|
+
const handleKeyDown = useCallback(
|
|
33313
|
+
(e) => {
|
|
33314
|
+
if (disabled) return;
|
|
33315
|
+
if (e.key === "Enter") {
|
|
33316
|
+
e.preventDefault();
|
|
33317
|
+
commit();
|
|
33318
|
+
} else if (e.key === "Backspace" && draft.length === 0 && value.length > 0) {
|
|
33319
|
+
e.preventDefault();
|
|
33320
|
+
removeAt(value.length - 1);
|
|
33321
|
+
}
|
|
33322
|
+
},
|
|
33323
|
+
[commit, draft.length, value, removeAt, disabled]
|
|
33324
|
+
);
|
|
33325
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: cn("w-full", className), children: [
|
|
33326
|
+
value.length > 0 ? /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap", children: value.map((tag, index) => /* @__PURE__ */ jsx(
|
|
33327
|
+
Badge,
|
|
33328
|
+
{
|
|
33329
|
+
variant,
|
|
33330
|
+
size: "sm",
|
|
33331
|
+
onRemove: disabled ? void 0 : () => removeAt(index),
|
|
33332
|
+
removeLabel: `Remove ${tag}`,
|
|
33333
|
+
children: tag
|
|
33334
|
+
},
|
|
33335
|
+
`${tag}-${index}`
|
|
33336
|
+
)) }) : null,
|
|
33337
|
+
/* @__PURE__ */ jsx(
|
|
33338
|
+
Input,
|
|
33339
|
+
{
|
|
33340
|
+
value: draft,
|
|
33341
|
+
placeholder: placeholder ?? "Type and press Enter\u2026",
|
|
33342
|
+
disabled,
|
|
33343
|
+
onChange: (e) => setDraft(e.target.value),
|
|
33344
|
+
onKeyDown: handleKeyDown
|
|
33345
|
+
}
|
|
33346
|
+
),
|
|
33347
|
+
helperText ? /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: helperText }) : null
|
|
33348
|
+
] });
|
|
33349
|
+
};
|
|
33350
|
+
TagInput.displayName = "TagInput";
|
|
33351
|
+
}
|
|
33352
|
+
});
|
|
33242
33353
|
var ShowcaseCard;
|
|
33243
33354
|
var init_ShowcaseCard = __esm({
|
|
33244
33355
|
"components/molecules/ShowcaseCard.tsx"() {
|
|
@@ -36857,6 +36968,75 @@ var init_GradientDivider = __esm({
|
|
|
36857
36968
|
GradientDivider.displayName = "GradientDivider";
|
|
36858
36969
|
}
|
|
36859
36970
|
});
|
|
36971
|
+
var MarketingFooter;
|
|
36972
|
+
var init_MarketingFooter = __esm({
|
|
36973
|
+
"components/molecules/MarketingFooter.tsx"() {
|
|
36974
|
+
"use client";
|
|
36975
|
+
init_cn();
|
|
36976
|
+
init_Box();
|
|
36977
|
+
init_Stack();
|
|
36978
|
+
init_Typography();
|
|
36979
|
+
MarketingFooter = ({
|
|
36980
|
+
columns,
|
|
36981
|
+
copyright,
|
|
36982
|
+
logo,
|
|
36983
|
+
className
|
|
36984
|
+
}) => {
|
|
36985
|
+
return /* @__PURE__ */ jsx(
|
|
36986
|
+
Box,
|
|
36987
|
+
{
|
|
36988
|
+
as: "footer",
|
|
36989
|
+
className: cn(
|
|
36990
|
+
"bg-surface",
|
|
36991
|
+
"border-t border-border",
|
|
36992
|
+
"pt-12 pb-8 px-4",
|
|
36993
|
+
className
|
|
36994
|
+
),
|
|
36995
|
+
children: /* @__PURE__ */ jsxs(VStack, { gap: "lg", className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: [
|
|
36996
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "lg", align: "start", className: "flex-wrap w-full justify-between", children: [
|
|
36997
|
+
logo && /* @__PURE__ */ jsx(VStack, { gap: "sm", className: "min-w-[140px] mb-4", children: logo.href ? /* @__PURE__ */ jsx("a", { href: logo.href, children: /* @__PURE__ */ jsx("img", { src: logo.src, alt: logo.alt, className: "h-8 w-auto" }) }) : /* @__PURE__ */ jsx("img", { src: logo.src, alt: logo.alt, className: "h-8 w-auto" }) }),
|
|
36998
|
+
columns.map((col) => /* @__PURE__ */ jsxs(VStack, { gap: "sm", className: "min-w-[140px] mb-4", children: [
|
|
36999
|
+
/* @__PURE__ */ jsx(
|
|
37000
|
+
Typography,
|
|
37001
|
+
{
|
|
37002
|
+
variant: "body2",
|
|
37003
|
+
className: "font-semibold text-foreground mb-1",
|
|
37004
|
+
children: col.title
|
|
37005
|
+
}
|
|
37006
|
+
),
|
|
37007
|
+
col.items.map((item) => /* @__PURE__ */ jsx(
|
|
37008
|
+
"a",
|
|
37009
|
+
{
|
|
37010
|
+
href: item.href,
|
|
37011
|
+
className: cn(
|
|
37012
|
+
"text-sm no-underline",
|
|
37013
|
+
"text-foreground/60",
|
|
37014
|
+
"hover:text-accent",
|
|
37015
|
+
"transition-colors duration-150"
|
|
37016
|
+
),
|
|
37017
|
+
target: item.href.startsWith("http") ? "_blank" : void 0,
|
|
37018
|
+
rel: item.href.startsWith("http") ? "noopener noreferrer" : void 0,
|
|
37019
|
+
children: item.label
|
|
37020
|
+
},
|
|
37021
|
+
item.label
|
|
37022
|
+
))
|
|
37023
|
+
] }, col.title))
|
|
37024
|
+
] }),
|
|
37025
|
+
copyright && /* @__PURE__ */ jsx(
|
|
37026
|
+
Typography,
|
|
37027
|
+
{
|
|
37028
|
+
variant: "caption",
|
|
37029
|
+
className: "text-foreground/30 text-center w-full pt-6",
|
|
37030
|
+
children: copyright
|
|
37031
|
+
}
|
|
37032
|
+
)
|
|
37033
|
+
] })
|
|
37034
|
+
}
|
|
37035
|
+
);
|
|
37036
|
+
};
|
|
37037
|
+
MarketingFooter.displayName = "MarketingFooter";
|
|
37038
|
+
}
|
|
37039
|
+
});
|
|
36860
37040
|
var PullQuote;
|
|
36861
37041
|
var init_PullQuote = __esm({
|
|
36862
37042
|
"components/molecules/PullQuote.tsx"() {
|
|
@@ -53698,6 +53878,7 @@ var init_component_registry_generated = __esm({
|
|
|
53698
53878
|
init_List();
|
|
53699
53879
|
init_LoadingState();
|
|
53700
53880
|
init_MarkdownContent();
|
|
53881
|
+
init_MarketingFooter();
|
|
53701
53882
|
init_MasterDetail();
|
|
53702
53883
|
init_MasterDetailLayout();
|
|
53703
53884
|
init_MatrixQuestion();
|
|
@@ -53797,6 +53978,7 @@ var init_component_registry_generated = __esm({
|
|
|
53797
53978
|
init_Table();
|
|
53798
53979
|
init_Tabs();
|
|
53799
53980
|
init_TagCloud();
|
|
53981
|
+
init_TagInput();
|
|
53800
53982
|
init_TeamCard();
|
|
53801
53983
|
init_TeamOrganism();
|
|
53802
53984
|
init_TextHighlight();
|
|
@@ -53997,6 +54179,7 @@ var init_component_registry_generated = __esm({
|
|
|
53997
54179
|
"MapView": MapViewPattern,
|
|
53998
54180
|
"MapViewPattern": MapViewPattern,
|
|
53999
54181
|
"MarkdownContent": MarkdownContent,
|
|
54182
|
+
"MarketingFooter": MarketingFooter,
|
|
54000
54183
|
"MasterDetail": MasterDetail,
|
|
54001
54184
|
"MasterDetailLayout": MasterDetailLayout,
|
|
54002
54185
|
"MatrixQuestion": MatrixQuestion,
|
|
@@ -54112,6 +54295,7 @@ var init_component_registry_generated = __esm({
|
|
|
54112
54295
|
"Table": Table,
|
|
54113
54296
|
"Tabs": Tabs,
|
|
54114
54297
|
"TagCloud": TagCloud,
|
|
54298
|
+
"TagInput": TagInput,
|
|
54115
54299
|
"TeamCard": TeamCard,
|
|
54116
54300
|
"TeamOrganism": TeamOrganism,
|
|
54117
54301
|
"TextHighlight": TextHighlight,
|
|
@@ -12,5 +12,12 @@ export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
|
12
12
|
label?: string | number;
|
|
13
13
|
/** Icon name (Lucide icon string) or React node */
|
|
14
14
|
icon?: React.ReactNode;
|
|
15
|
+
/** When set, renders a small X button on the right of the badge that
|
|
16
|
+
* invokes this handler — turns the badge into a removable chip.
|
|
17
|
+
* Used by the TagInput molecule and other "list of removable values"
|
|
18
|
+
* surfaces. */
|
|
19
|
+
onRemove?: () => void;
|
|
20
|
+
/** Accessible label for the remove button. Defaults to "Remove". */
|
|
21
|
+
removeLabel?: string;
|
|
15
22
|
}
|
|
16
23
|
export declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
|