@almadar/ui 4.56.4 → 4.57.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1571,7 +1571,7 @@ var init_Badge = __esm({
1571
1571
  lg: "px-3 py-1.5 text-base"
1572
1572
  };
1573
1573
  Badge = React84__default.forwardRef(
1574
- ({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
1574
+ ({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
1575
1575
  const iconSizes3 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
1576
1576
  const resolvedIcon = typeof icon === "string" ? (() => {
1577
1577
  const I = resolveIcon(icon);
@@ -1585,12 +1585,31 @@ var init_Badge = __esm({
1585
1585
  "inline-flex items-center gap-1 font-bold rounded-sm",
1586
1586
  variantStyles3[variant],
1587
1587
  sizeStyles3[size],
1588
+ onRemove && "pr-1",
1588
1589
  className
1589
1590
  ),
1590
1591
  ...props,
1591
1592
  children: [
1592
1593
  resolvedIcon,
1593
- children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label)
1594
+ children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label),
1595
+ onRemove ? /* @__PURE__ */ jsx(
1596
+ "button",
1597
+ {
1598
+ type: "button",
1599
+ "aria-label": removeLabel ?? "Remove",
1600
+ onClick: (e) => {
1601
+ e.stopPropagation();
1602
+ onRemove();
1603
+ },
1604
+ className: cn(
1605
+ "inline-flex items-center justify-center rounded-sm",
1606
+ "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
1607
+ "transition-colors",
1608
+ size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
1609
+ ),
1610
+ children: /* @__PURE__ */ jsx(X, { className: iconSizes3[size] })
1611
+ }
1612
+ ) : null
1594
1613
  ]
1595
1614
  }
1596
1615
  );
@@ -9392,7 +9411,7 @@ var init_MapView = __esm({
9392
9411
  shadowSize: [41, 41]
9393
9412
  });
9394
9413
  L.Marker.prototype.options.icon = defaultIcon;
9395
- const { useEffect: useEffect68, useRef: useRef65, useCallback: useCallback112, useState: useState97 } = React84__default;
9414
+ const { useEffect: useEffect68, useRef: useRef65, useCallback: useCallback113, useState: useState98 } = React84__default;
9396
9415
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
9397
9416
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
9398
9417
  function MapUpdater({ centerLat, centerLng, zoom }) {
@@ -9437,8 +9456,8 @@ var init_MapView = __esm({
9437
9456
  showAttribution = true
9438
9457
  }) {
9439
9458
  const eventBus = useEventBus2();
9440
- const [clickedPosition, setClickedPosition] = useState97(null);
9441
- const handleMapClick = useCallback112((lat, lng) => {
9459
+ const [clickedPosition, setClickedPosition] = useState98(null);
9460
+ const handleMapClick = useCallback113((lat, lng) => {
9442
9461
  if (showClickedPin) {
9443
9462
  setClickedPosition({ lat, lng });
9444
9463
  }
@@ -9447,7 +9466,7 @@ var init_MapView = __esm({
9447
9466
  eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
9448
9467
  }
9449
9468
  }, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
9450
- const handleMarkerClick = useCallback112((marker) => {
9469
+ const handleMarkerClick = useCallback113((marker) => {
9451
9470
  onMarkerClick?.(marker);
9452
9471
  if (markerClickEvent) {
9453
9472
  eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
@@ -29651,6 +29670,98 @@ var init_TagCloud = __esm({
29651
29670
  TagCloud.displayName = "TagCloud";
29652
29671
  }
29653
29672
  });
29673
+ var TagInput;
29674
+ var init_TagInput = __esm({
29675
+ "components/molecules/TagInput.tsx"() {
29676
+ "use client";
29677
+ init_cn();
29678
+ init_useEventBus();
29679
+ init_Input();
29680
+ init_Badge();
29681
+ init_Stack();
29682
+ init_Typography();
29683
+ TagInput = ({
29684
+ value,
29685
+ onChange,
29686
+ placeholder,
29687
+ disabled = false,
29688
+ variant = "default",
29689
+ unique = true,
29690
+ helperText,
29691
+ className,
29692
+ addEvent,
29693
+ removeEvent
29694
+ }) => {
29695
+ const eventBus = useEventBus();
29696
+ const [draft, setDraft] = useState("");
29697
+ const commit = useCallback(() => {
29698
+ const tag = draft.trim();
29699
+ if (!tag) return;
29700
+ if (unique && value.includes(tag)) {
29701
+ setDraft("");
29702
+ return;
29703
+ }
29704
+ const next = [...value, tag];
29705
+ onChange?.(next);
29706
+ if (addEvent) {
29707
+ eventBus.emit(`UI:${addEvent}`, { tag, value: next });
29708
+ }
29709
+ setDraft("");
29710
+ }, [draft, value, onChange, unique, addEvent, eventBus]);
29711
+ const removeAt = useCallback(
29712
+ (index) => {
29713
+ if (disabled) return;
29714
+ const tag = value[index];
29715
+ const next = value.slice();
29716
+ next.splice(index, 1);
29717
+ onChange?.(next);
29718
+ if (removeEvent) {
29719
+ eventBus.emit(`UI:${removeEvent}`, { tag, index, value: next });
29720
+ }
29721
+ },
29722
+ [value, onChange, disabled, removeEvent, eventBus]
29723
+ );
29724
+ const handleKeyDown = useCallback(
29725
+ (e) => {
29726
+ if (disabled) return;
29727
+ if (e.key === "Enter") {
29728
+ e.preventDefault();
29729
+ commit();
29730
+ } else if (e.key === "Backspace" && draft.length === 0 && value.length > 0) {
29731
+ e.preventDefault();
29732
+ removeAt(value.length - 1);
29733
+ }
29734
+ },
29735
+ [commit, draft.length, value, removeAt, disabled]
29736
+ );
29737
+ return /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: cn("w-full", className), children: [
29738
+ value.length > 0 ? /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap", children: value.map((tag, index) => /* @__PURE__ */ jsx(
29739
+ Badge,
29740
+ {
29741
+ variant,
29742
+ size: "sm",
29743
+ onRemove: disabled ? void 0 : () => removeAt(index),
29744
+ removeLabel: `Remove ${tag}`,
29745
+ children: tag
29746
+ },
29747
+ `${tag}-${index}`
29748
+ )) }) : null,
29749
+ /* @__PURE__ */ jsx(
29750
+ Input,
29751
+ {
29752
+ value: draft,
29753
+ placeholder: placeholder ?? "Type and press Enter\u2026",
29754
+ disabled,
29755
+ onChange: (e) => setDraft(e.target.value),
29756
+ onKeyDown: handleKeyDown
29757
+ }
29758
+ ),
29759
+ helperText ? /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: helperText }) : null
29760
+ ] });
29761
+ };
29762
+ TagInput.displayName = "TagInput";
29763
+ }
29764
+ });
29654
29765
  var ShowcaseCard;
29655
29766
  var init_ShowcaseCard = __esm({
29656
29767
  "components/molecules/ShowcaseCard.tsx"() {
@@ -45104,6 +45215,7 @@ var init_component_registry_generated = __esm({
45104
45215
  init_Table();
45105
45216
  init_Tabs();
45106
45217
  init_TagCloud();
45218
+ init_TagInput();
45107
45219
  init_TeamCard();
45108
45220
  init_TeamOrganism();
45109
45221
  init_TextHighlight();
@@ -45419,6 +45531,7 @@ var init_component_registry_generated = __esm({
45419
45531
  "Table": Table,
45420
45532
  "Tabs": Tabs,
45421
45533
  "TagCloud": TagCloud,
45534
+ "TagInput": TagInput,
45422
45535
  "TeamCard": TeamCard,
45423
45536
  "TeamOrganism": TeamOrganism,
45424
45537
  "TextHighlight": TextHighlight,
@@ -1901,7 +1901,7 @@ var init_Badge = __esm({
1901
1901
  lg: "px-3 py-1.5 text-base"
1902
1902
  };
1903
1903
  Badge = React83__namespace.default.forwardRef(
1904
- ({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
1904
+ ({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
1905
1905
  const iconSizes3 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
1906
1906
  const resolvedIcon = typeof icon === "string" ? (() => {
1907
1907
  const I = resolveIcon(icon);
@@ -1915,12 +1915,31 @@ var init_Badge = __esm({
1915
1915
  "inline-flex items-center gap-1 font-bold rounded-sm",
1916
1916
  variantStyles3[variant],
1917
1917
  sizeStyles3[size],
1918
+ onRemove && "pr-1",
1918
1919
  className
1919
1920
  ),
1920
1921
  ...props,
1921
1922
  children: [
1922
1923
  resolvedIcon,
1923
- children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label)
1924
+ children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label),
1925
+ onRemove ? /* @__PURE__ */ jsxRuntime.jsx(
1926
+ "button",
1927
+ {
1928
+ type: "button",
1929
+ "aria-label": removeLabel ?? "Remove",
1930
+ onClick: (e) => {
1931
+ e.stopPropagation();
1932
+ onRemove();
1933
+ },
1934
+ className: cn(
1935
+ "inline-flex items-center justify-center rounded-sm",
1936
+ "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
1937
+ "transition-colors",
1938
+ size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
1939
+ ),
1940
+ children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.X, { className: iconSizes3[size] })
1941
+ }
1942
+ ) : null
1924
1943
  ]
1925
1944
  }
1926
1945
  );
@@ -9326,7 +9345,7 @@ var init_MapView = __esm({
9326
9345
  shadowSize: [41, 41]
9327
9346
  });
9328
9347
  L.Marker.prototype.options.icon = defaultIcon;
9329
- const { useEffect: useEffect69, useRef: useRef65, useCallback: useCallback112, useState: useState100 } = React83__namespace.default;
9348
+ const { useEffect: useEffect69, useRef: useRef65, useCallback: useCallback113, useState: useState101 } = React83__namespace.default;
9330
9349
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
9331
9350
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
9332
9351
  function MapUpdater({ centerLat, centerLng, zoom }) {
@@ -9371,8 +9390,8 @@ var init_MapView = __esm({
9371
9390
  showAttribution = true
9372
9391
  }) {
9373
9392
  const eventBus = useEventBus2();
9374
- const [clickedPosition, setClickedPosition] = useState100(null);
9375
- const handleMapClick = useCallback112((lat, lng) => {
9393
+ const [clickedPosition, setClickedPosition] = useState101(null);
9394
+ const handleMapClick = useCallback113((lat, lng) => {
9376
9395
  if (showClickedPin) {
9377
9396
  setClickedPosition({ lat, lng });
9378
9397
  }
@@ -9381,7 +9400,7 @@ var init_MapView = __esm({
9381
9400
  eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
9382
9401
  }
9383
9402
  }, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
9384
- const handleMarkerClick = useCallback112((marker) => {
9403
+ const handleMarkerClick = useCallback113((marker) => {
9385
9404
  onMarkerClick?.(marker);
9386
9405
  if (markerClickEvent) {
9387
9406
  eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
@@ -29264,6 +29283,98 @@ var init_TagCloud = __esm({
29264
29283
  TagCloud.displayName = "TagCloud";
29265
29284
  }
29266
29285
  });
29286
+ var TagInput;
29287
+ var init_TagInput = __esm({
29288
+ "components/molecules/TagInput.tsx"() {
29289
+ "use client";
29290
+ init_cn();
29291
+ init_useEventBus();
29292
+ init_Input();
29293
+ init_Badge();
29294
+ init_Stack();
29295
+ init_Typography();
29296
+ TagInput = ({
29297
+ value,
29298
+ onChange,
29299
+ placeholder,
29300
+ disabled = false,
29301
+ variant = "default",
29302
+ unique = true,
29303
+ helperText,
29304
+ className,
29305
+ addEvent,
29306
+ removeEvent
29307
+ }) => {
29308
+ const eventBus = useEventBus();
29309
+ const [draft, setDraft] = React83.useState("");
29310
+ const commit = React83.useCallback(() => {
29311
+ const tag = draft.trim();
29312
+ if (!tag) return;
29313
+ if (unique && value.includes(tag)) {
29314
+ setDraft("");
29315
+ return;
29316
+ }
29317
+ const next = [...value, tag];
29318
+ onChange?.(next);
29319
+ if (addEvent) {
29320
+ eventBus.emit(`UI:${addEvent}`, { tag, value: next });
29321
+ }
29322
+ setDraft("");
29323
+ }, [draft, value, onChange, unique, addEvent, eventBus]);
29324
+ const removeAt = React83.useCallback(
29325
+ (index) => {
29326
+ if (disabled) return;
29327
+ const tag = value[index];
29328
+ const next = value.slice();
29329
+ next.splice(index, 1);
29330
+ onChange?.(next);
29331
+ if (removeEvent) {
29332
+ eventBus.emit(`UI:${removeEvent}`, { tag, index, value: next });
29333
+ }
29334
+ },
29335
+ [value, onChange, disabled, removeEvent, eventBus]
29336
+ );
29337
+ const handleKeyDown = React83.useCallback(
29338
+ (e) => {
29339
+ if (disabled) return;
29340
+ if (e.key === "Enter") {
29341
+ e.preventDefault();
29342
+ commit();
29343
+ } else if (e.key === "Backspace" && draft.length === 0 && value.length > 0) {
29344
+ e.preventDefault();
29345
+ removeAt(value.length - 1);
29346
+ }
29347
+ },
29348
+ [commit, draft.length, value, removeAt, disabled]
29349
+ );
29350
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: cn("w-full", className), children: [
29351
+ value.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(HStack, { gap: "xs", className: "flex-wrap", children: value.map((tag, index) => /* @__PURE__ */ jsxRuntime.jsx(
29352
+ Badge,
29353
+ {
29354
+ variant,
29355
+ size: "sm",
29356
+ onRemove: disabled ? void 0 : () => removeAt(index),
29357
+ removeLabel: `Remove ${tag}`,
29358
+ children: tag
29359
+ },
29360
+ `${tag}-${index}`
29361
+ )) }) : null,
29362
+ /* @__PURE__ */ jsxRuntime.jsx(
29363
+ Input,
29364
+ {
29365
+ value: draft,
29366
+ placeholder: placeholder ?? "Type and press Enter\u2026",
29367
+ disabled,
29368
+ onChange: (e) => setDraft(e.target.value),
29369
+ onKeyDown: handleKeyDown
29370
+ }
29371
+ ),
29372
+ helperText ? /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", color: "muted", children: helperText }) : null
29373
+ ] });
29374
+ };
29375
+ TagInput.displayName = "TagInput";
29376
+ }
29377
+ });
29267
29378
  var ShowcaseCard;
29268
29379
  var init_ShowcaseCard = __esm({
29269
29380
  "components/molecules/ShowcaseCard.tsx"() {
@@ -44736,6 +44847,7 @@ var init_component_registry_generated = __esm({
44736
44847
  init_Table();
44737
44848
  init_Tabs();
44738
44849
  init_TagCloud();
44850
+ init_TagInput();
44739
44851
  init_TeamCard();
44740
44852
  init_TeamOrganism();
44741
44853
  init_TextHighlight();
@@ -45051,6 +45163,7 @@ var init_component_registry_generated = __esm({
45051
45163
  "Table": Table,
45052
45164
  "Tabs": Tabs,
45053
45165
  "TagCloud": TagCloud,
45166
+ "TagInput": TagInput,
45054
45167
  "TeamCard": TeamCard,
45055
45168
  "TeamOrganism": TeamOrganism,
45056
45169
  "TextHighlight": TextHighlight,
@@ -1855,7 +1855,7 @@ var init_Badge = __esm({
1855
1855
  lg: "px-3 py-1.5 text-base"
1856
1856
  };
1857
1857
  Badge = React83__default.forwardRef(
1858
- ({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
1858
+ ({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
1859
1859
  const iconSizes3 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
1860
1860
  const resolvedIcon = typeof icon === "string" ? (() => {
1861
1861
  const I = resolveIcon(icon);
@@ -1869,12 +1869,31 @@ var init_Badge = __esm({
1869
1869
  "inline-flex items-center gap-1 font-bold rounded-sm",
1870
1870
  variantStyles3[variant],
1871
1871
  sizeStyles3[size],
1872
+ onRemove && "pr-1",
1872
1873
  className
1873
1874
  ),
1874
1875
  ...props,
1875
1876
  children: [
1876
1877
  resolvedIcon,
1877
- children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label)
1878
+ children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label),
1879
+ onRemove ? /* @__PURE__ */ jsx(
1880
+ "button",
1881
+ {
1882
+ type: "button",
1883
+ "aria-label": removeLabel ?? "Remove",
1884
+ onClick: (e) => {
1885
+ e.stopPropagation();
1886
+ onRemove();
1887
+ },
1888
+ className: cn(
1889
+ "inline-flex items-center justify-center rounded-sm",
1890
+ "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
1891
+ "transition-colors",
1892
+ size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
1893
+ ),
1894
+ children: /* @__PURE__ */ jsx(X, { className: iconSizes3[size] })
1895
+ }
1896
+ ) : null
1878
1897
  ]
1879
1898
  }
1880
1899
  );
@@ -9280,7 +9299,7 @@ var init_MapView = __esm({
9280
9299
  shadowSize: [41, 41]
9281
9300
  });
9282
9301
  L.Marker.prototype.options.icon = defaultIcon;
9283
- const { useEffect: useEffect69, useRef: useRef65, useCallback: useCallback112, useState: useState100 } = React83__default;
9302
+ const { useEffect: useEffect69, useRef: useRef65, useCallback: useCallback113, useState: useState101 } = React83__default;
9284
9303
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
9285
9304
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
9286
9305
  function MapUpdater({ centerLat, centerLng, zoom }) {
@@ -9325,8 +9344,8 @@ var init_MapView = __esm({
9325
9344
  showAttribution = true
9326
9345
  }) {
9327
9346
  const eventBus = useEventBus2();
9328
- const [clickedPosition, setClickedPosition] = useState100(null);
9329
- const handleMapClick = useCallback112((lat, lng) => {
9347
+ const [clickedPosition, setClickedPosition] = useState101(null);
9348
+ const handleMapClick = useCallback113((lat, lng) => {
9330
9349
  if (showClickedPin) {
9331
9350
  setClickedPosition({ lat, lng });
9332
9351
  }
@@ -9335,7 +9354,7 @@ var init_MapView = __esm({
9335
9354
  eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
9336
9355
  }
9337
9356
  }, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
9338
- const handleMarkerClick = useCallback112((marker) => {
9357
+ const handleMarkerClick = useCallback113((marker) => {
9339
9358
  onMarkerClick?.(marker);
9340
9359
  if (markerClickEvent) {
9341
9360
  eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
@@ -29218,6 +29237,98 @@ var init_TagCloud = __esm({
29218
29237
  TagCloud.displayName = "TagCloud";
29219
29238
  }
29220
29239
  });
29240
+ var TagInput;
29241
+ var init_TagInput = __esm({
29242
+ "components/molecules/TagInput.tsx"() {
29243
+ "use client";
29244
+ init_cn();
29245
+ init_useEventBus();
29246
+ init_Input();
29247
+ init_Badge();
29248
+ init_Stack();
29249
+ init_Typography();
29250
+ TagInput = ({
29251
+ value,
29252
+ onChange,
29253
+ placeholder,
29254
+ disabled = false,
29255
+ variant = "default",
29256
+ unique = true,
29257
+ helperText,
29258
+ className,
29259
+ addEvent,
29260
+ removeEvent
29261
+ }) => {
29262
+ const eventBus = useEventBus();
29263
+ const [draft, setDraft] = useState("");
29264
+ const commit = useCallback(() => {
29265
+ const tag = draft.trim();
29266
+ if (!tag) return;
29267
+ if (unique && value.includes(tag)) {
29268
+ setDraft("");
29269
+ return;
29270
+ }
29271
+ const next = [...value, tag];
29272
+ onChange?.(next);
29273
+ if (addEvent) {
29274
+ eventBus.emit(`UI:${addEvent}`, { tag, value: next });
29275
+ }
29276
+ setDraft("");
29277
+ }, [draft, value, onChange, unique, addEvent, eventBus]);
29278
+ const removeAt = useCallback(
29279
+ (index) => {
29280
+ if (disabled) return;
29281
+ const tag = value[index];
29282
+ const next = value.slice();
29283
+ next.splice(index, 1);
29284
+ onChange?.(next);
29285
+ if (removeEvent) {
29286
+ eventBus.emit(`UI:${removeEvent}`, { tag, index, value: next });
29287
+ }
29288
+ },
29289
+ [value, onChange, disabled, removeEvent, eventBus]
29290
+ );
29291
+ const handleKeyDown = useCallback(
29292
+ (e) => {
29293
+ if (disabled) return;
29294
+ if (e.key === "Enter") {
29295
+ e.preventDefault();
29296
+ commit();
29297
+ } else if (e.key === "Backspace" && draft.length === 0 && value.length > 0) {
29298
+ e.preventDefault();
29299
+ removeAt(value.length - 1);
29300
+ }
29301
+ },
29302
+ [commit, draft.length, value, removeAt, disabled]
29303
+ );
29304
+ return /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: cn("w-full", className), children: [
29305
+ value.length > 0 ? /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap", children: value.map((tag, index) => /* @__PURE__ */ jsx(
29306
+ Badge,
29307
+ {
29308
+ variant,
29309
+ size: "sm",
29310
+ onRemove: disabled ? void 0 : () => removeAt(index),
29311
+ removeLabel: `Remove ${tag}`,
29312
+ children: tag
29313
+ },
29314
+ `${tag}-${index}`
29315
+ )) }) : null,
29316
+ /* @__PURE__ */ jsx(
29317
+ Input,
29318
+ {
29319
+ value: draft,
29320
+ placeholder: placeholder ?? "Type and press Enter\u2026",
29321
+ disabled,
29322
+ onChange: (e) => setDraft(e.target.value),
29323
+ onKeyDown: handleKeyDown
29324
+ }
29325
+ ),
29326
+ helperText ? /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: helperText }) : null
29327
+ ] });
29328
+ };
29329
+ TagInput.displayName = "TagInput";
29330
+ }
29331
+ });
29221
29332
  var ShowcaseCard;
29222
29333
  var init_ShowcaseCard = __esm({
29223
29334
  "components/molecules/ShowcaseCard.tsx"() {
@@ -44690,6 +44801,7 @@ var init_component_registry_generated = __esm({
44690
44801
  init_Table();
44691
44802
  init_Tabs();
44692
44803
  init_TagCloud();
44804
+ init_TagInput();
44693
44805
  init_TeamCard();
44694
44806
  init_TeamOrganism();
44695
44807
  init_TextHighlight();
@@ -45005,6 +45117,7 @@ var init_component_registry_generated = __esm({
45005
45117
  "Table": Table,
45006
45118
  "Tabs": Tabs,
45007
45119
  "TagCloud": TagCloud,
45120
+ "TagInput": TagInput,
45008
45121
  "TeamCard": TeamCard,
45009
45122
  "TeamOrganism": TeamOrganism,
45010
45123
  "TextHighlight": TextHighlight,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "4.56.4",
3
+ "version": "4.57.1",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "sideEffects": [