@krak-stack/registry 0.1.34 → 0.1.36

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.
Files changed (45) hide show
  1. package/README.md +39 -1
  2. package/dist/components/ui/data-table.js +1 -1
  3. package/dist/components/ui/effect-form.d.ts +1 -1
  4. package/dist/components/ui/effect-form.js +62 -59
  5. package/dist/components/ui/error-component.js +1 -1
  6. package/dist/components/ui/form.js +61 -58
  7. package/dist/components/ui/icon-input.js +66 -63
  8. package/dist/components/ui/sidebar-layout.js +2 -2
  9. package/dist/components/ui/virtualized-combobox.js +61 -58
  10. package/dist/lib/docs.js +3 -3
  11. package/dist/lib/docs.server.js +2 -2
  12. package/dist/lib/documentation-toolkit.d.ts +1 -1
  13. package/dist/lib/documentation-toolkit.js +3 -3
  14. package/dist/lib/httpapi-cli.d.ts +2 -2
  15. package/dist/lib/httpapi-cli.js +15 -15
  16. package/dist/lib/httpapi-client.d.ts +3 -3
  17. package/dist/lib/httpapi-client.js +2 -2
  18. package/dist/lib/httpapi-helpers.d.ts +1 -1
  19. package/dist/lib/httpapi-helpers.js +1 -1
  20. package/dist/lib/httpapi-mcp.d.ts +2 -2
  21. package/dist/lib/httpapi-mcp.js +4 -4
  22. package/dist/lib/httpapi-toolkit.d.ts +1 -1
  23. package/dist/lib/httpapi-toolkit.js +4 -4
  24. package/dist/lib/query.js +2 -2
  25. package/dist/lib/webfetch-toolkit.d.ts +2 -2
  26. package/dist/lib/webfetch-toolkit.js +4 -4
  27. package/dist/services/agent/client/atom.d.ts +1 -1
  28. package/dist/services/agent/client/index.js +4 -4
  29. package/dist/services/agent/index.d.ts +1 -1
  30. package/dist/services/agent/index.js +1 -1
  31. package/dist/services/agent/schema.d.ts +1 -1
  32. package/dist/services/agent/schema.js +3 -3
  33. package/dist/services/health/api.builder.d.ts +10 -10
  34. package/dist/services/health/api.group.d.ts +1 -1
  35. package/dist/services/health/index.js +2 -2
  36. package/dist/services/notification/channels/ses/index.js +4 -4
  37. package/dist/services/opentelemetry/api.d.ts +2 -2
  38. package/dist/services/opentelemetry/api.js +13 -4
  39. package/dist/services/opentelemetry/browser.d.ts +15 -7
  40. package/dist/services/opentelemetry/browser.js +62 -13
  41. package/dist/services/s3/index.js +6 -6
  42. package/package.json +7 -5
  43. package/patches/@lucas-barake%2Feffect-form-react@0.26.0-beta.5.patch +66 -0
  44. package/patches/@lucas-barake%2Feffect-form@0.25.0-beta.6.patch +86 -0
  45. package/patches/README.md +31 -0
package/README.md CHANGED
@@ -6,6 +6,44 @@ Tree-shakable runtime components and Effect services from the KrakStack shadcn r
6
6
  bun add @krak-stack/registry
7
7
  ```
8
8
 
9
+ ## Temporary Effect form patches
10
+
11
+ This interim release supports stable Effect 4, but the published form betas still
12
+ use removed Effect import paths. Applications using Effect forms must apply both
13
+ compatibility patches at their package-manager root; installing Registry alone
14
+ does not apply them automatically.
15
+
16
+ After installing Registry, copy its bundled patches into your application:
17
+
18
+ ```sh
19
+ mkdir -p patches
20
+ cp node_modules/@krak-stack/registry/patches/*.patch patches/
21
+ ```
22
+
23
+ Merge these fields into the application's root `package.json`, preserving any
24
+ existing overrides and patches:
25
+
26
+ ```json
27
+ {
28
+ "overrides": {
29
+ "@lucas-barake/effect-form": "0.25.0-beta.6",
30
+ "@lucas-barake/effect-form-react": "0.26.0-beta.5"
31
+ },
32
+ "patchedDependencies": {
33
+ "@lucas-barake/effect-form@0.25.0-beta.6": "patches/@lucas-barake%2Feffect-form@0.25.0-beta.6.patch",
34
+ "@lucas-barake/effect-form-react@0.26.0-beta.5": "patches/@lucas-barake%2Feffect-form-react@0.26.0-beta.5.patch"
35
+ }
36
+ }
37
+ ```
38
+
39
+ Run `bun install` and commit the patches, manifest, and lockfile. Other package
40
+ managers require equivalent patch configuration. See the bundled
41
+ `patches/README.md` for provenance and removal instructions after
42
+ [upstream release PR #111](https://github.com/lucas-barake/effect-form/pull/111)
43
+ is published.
44
+
45
+ ## Usage
46
+
9
47
  Import only the subpaths used by the application:
10
48
 
11
49
  ```tsx
@@ -53,7 +91,7 @@ const appLayer = appRoutes.pipe(Layer.provideMerge(HttpApiOtlp.layer));
53
91
  Install browser telemetry globally on the Atom runtime used by the API client:
54
92
 
55
93
  ```ts
56
- import { Atom } from "effect/unstable/reactivity";
94
+ import { Atom } from "effect/reactivity";
57
95
  import { BrowserOtlp } from "@krak-stack/registry/opentelemetry/browser";
58
96
 
59
97
  const apiRuntime = Atom.context();
@@ -2,7 +2,7 @@
2
2
  import { useAtom, useAtomSet } from "@effect/atom-react";
3
3
  import { BrowserKeyValueStore } from "@effect/platform-browser";
4
4
  import { DateTime, Option, Schema } from "effect";
5
- import { AsyncResult, Atom } from "effect/unstable/reactivity";
5
+ import { AsyncResult, Atom } from "effect/reactivity";
6
6
  import {
7
7
  ArrowDown,
8
8
  ArrowUp,
@@ -1,7 +1,7 @@
1
1
  import type { ComponentProps, JSX, ReactNode } from "react";
2
2
  import { FormReact } from "@lucas-barake/effect-form-react";
3
3
  import { Option } from "effect";
4
- import { AsyncResult, Atom } from "effect/unstable/reactivity";
4
+ import { AsyncResult, Atom } from "effect/reactivity";
5
5
  import { type FilePickerMessageTranslations } from "./file-picker.js";
6
6
  import { type VirtualizedComboboxMessageTranslations, type VirtualizedComboboxOption } from "./virtualized-combobox.js";
7
7
  export type EffectFormMessages = {
@@ -2,7 +2,7 @@
2
2
  import { useAtomSet, useAtomValue } from "@effect/atom-react";
3
3
  import { Block } from "@tanstack/react-router";
4
4
  import { Cause, Option, Schema as Schema2 } from "effect";
5
- import { AsyncResult } from "effect/unstable/reactivity";
5
+ import { AsyncResult } from "effect/reactivity";
6
6
  import { Languages, Loader2, Plus, Trash } from "lucide-react";
7
7
 
8
8
  // ../../src/components/ui/alert-dialog.tsx
@@ -949,7 +949,7 @@ function InputGroupInput({
949
949
 
950
950
  // ../../src/components/ui/virtualized-combobox.tsx
951
951
  import { useKrakstackLocale as useKrakstackLocale2 } from "@krak-stack/registry/krakstack-provider";
952
- import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
952
+ import { jsx as jsx12, jsxs as jsxs5, Fragment as Fragment2 } from "react/jsx-runtime";
953
953
  "use client";
954
954
  var messages2 = {
955
955
  en: {
@@ -1026,65 +1026,68 @@ var VirtualizedComboboxList = ({
1026
1026
  if (element)
1027
1027
  virtualizer.measure();
1028
1028
  }, [virtualizer]);
1029
- if (filteredItems.length === 0) {
1030
- return /* @__PURE__ */ jsx12("div", {
1031
- className: "text-muted-foreground py-6 text-center text-sm",
1032
- children: emptyLabel
1033
- });
1034
- }
1035
- return /* @__PURE__ */ jsx12(ComboboxPrimitive.List, {
1036
- className: "scroll-py-1 overflow-auto overscroll-contain p-1",
1037
- ref: handleScrollElementRef,
1038
- style: {
1039
- height: Math.min(virtualizer.getTotalSize() + 8, 288),
1040
- maxHeight: "var(--available-height)"
1041
- },
1042
- children: /* @__PURE__ */ jsx12("div", {
1043
- className: "relative w-full",
1044
- role: "presentation",
1045
- style: { height: virtualizer.getTotalSize() },
1046
- children: virtualizer.getVirtualItems().map((virtualItem) => {
1047
- const entry = entries[virtualItem.index];
1048
- if (!entry)
1049
- return null;
1050
- const style = {
1051
- height: virtualItem.size,
1052
- transform: `translateY(${virtualItem.start}px)`
1053
- };
1054
- if (entry.kind === "group") {
1055
- return /* @__PURE__ */ jsx12(ComboboxPrimitive.Group, {
1056
- className: "contents",
1057
- children: /* @__PURE__ */ jsx12(ComboboxPrimitive.GroupLabel, {
1058
- className: "text-muted-foreground absolute top-0 left-0 w-full px-2 pt-3 pb-1 text-xs",
1029
+ return /* @__PURE__ */ jsxs5(Fragment2, {
1030
+ children: [
1031
+ filteredItems.length === 0 && /* @__PURE__ */ jsx12("div", {
1032
+ className: "text-muted-foreground flex min-h-0 flex-1 flex-col items-center justify-center overflow-auto py-6 text-center text-sm",
1033
+ children: emptyLabel
1034
+ }),
1035
+ /* @__PURE__ */ jsx12(ComboboxPrimitive.List, {
1036
+ className: "min-h-0 flex-1 scroll-py-1 overflow-auto overscroll-contain p-1",
1037
+ hidden: filteredItems.length === 0,
1038
+ ref: handleScrollElementRef,
1039
+ style: {
1040
+ height: Math.min(virtualizer.getTotalSize() + 8, 288),
1041
+ maxHeight: "var(--available-height)"
1042
+ },
1043
+ children: /* @__PURE__ */ jsx12("div", {
1044
+ className: "relative w-full",
1045
+ role: "presentation",
1046
+ style: { height: virtualizer.getTotalSize() },
1047
+ children: virtualizer.getVirtualItems().map((virtualItem) => {
1048
+ const entry = entries[virtualItem.index];
1049
+ if (!entry)
1050
+ return null;
1051
+ const style = {
1052
+ height: virtualItem.size,
1053
+ transform: `translateY(${virtualItem.start}px)`
1054
+ };
1055
+ if (entry.kind === "group") {
1056
+ return /* @__PURE__ */ jsx12(ComboboxPrimitive.Group, {
1057
+ className: "contents",
1058
+ children: /* @__PURE__ */ jsx12(ComboboxPrimitive.GroupLabel, {
1059
+ className: "text-muted-foreground absolute top-0 left-0 w-full px-2 pt-3 pb-1 text-xs",
1060
+ "data-index": virtualItem.index,
1061
+ ref: virtualizer.measureElement,
1062
+ style,
1063
+ children: entry.label
1064
+ })
1065
+ }, entry.key);
1066
+ }
1067
+ return /* @__PURE__ */ jsxs5(ComboboxPrimitive.Item, {
1068
+ "aria-posinset": entry.index + 1,
1069
+ "aria-setsize": filteredItems.length,
1070
+ className: "data-highlighted:bg-accent data-highlighted:text-accent-foreground absolute top-0 left-0 flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50",
1059
1071
  "data-index": virtualItem.index,
1072
+ index: entry.index,
1060
1073
  ref: virtualizer.measureElement,
1061
1074
  style,
1062
- children: entry.label
1063
- })
1064
- }, entry.key);
1065
- }
1066
- return /* @__PURE__ */ jsxs5(ComboboxPrimitive.Item, {
1067
- "aria-posinset": entry.index + 1,
1068
- "aria-setsize": filteredItems.length,
1069
- className: "data-highlighted:bg-accent data-highlighted:text-accent-foreground absolute top-0 left-0 flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50",
1070
- "data-index": virtualItem.index,
1071
- index: entry.index,
1072
- ref: virtualizer.measureElement,
1073
- style,
1074
- value: entry.item,
1075
- children: [
1076
- renderItem?.(entry.item) ?? /* @__PURE__ */ jsx12("span", {
1077
- className: "min-w-0 truncate",
1078
- children: entry.item.label
1079
- }),
1080
- /* @__PURE__ */ jsx12(ComboboxPrimitive.ItemIndicator, {
1081
- className: "absolute right-2 flex size-4 items-center justify-center",
1082
- children: /* @__PURE__ */ jsx12(Check, {})
1083
- })
1084
- ]
1085
- }, entry.item.value);
1075
+ value: entry.item,
1076
+ children: [
1077
+ renderItem?.(entry.item) ?? /* @__PURE__ */ jsx12("span", {
1078
+ className: "min-w-0 truncate",
1079
+ children: entry.item.label
1080
+ }),
1081
+ /* @__PURE__ */ jsx12(ComboboxPrimitive.ItemIndicator, {
1082
+ className: "absolute right-2 flex size-4 items-center justify-center",
1083
+ children: /* @__PURE__ */ jsx12(Check, {})
1084
+ })
1085
+ ]
1086
+ }, entry.item.value);
1087
+ })
1088
+ })
1086
1089
  })
1087
- })
1090
+ ]
1088
1091
  });
1089
1092
  };
1090
1093
  var VirtualizedComboboxContent = ({
@@ -1106,10 +1109,10 @@ var VirtualizedComboboxContent = ({
1106
1109
  side: "bottom",
1107
1110
  sideOffset: 6,
1108
1111
  children: /* @__PURE__ */ jsxs5(ComboboxPrimitive.Popup, {
1109
- className: cn("relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-0 origin-(--transform-origin) overflow-hidden rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-in-95", contentClassName),
1112
+ className: cn("relative flex max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-0 origin-(--transform-origin) flex-col overflow-hidden rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-in-95", contentClassName),
1110
1113
  children: [
1111
1114
  /* @__PURE__ */ jsx12("div", {
1112
- className: "min-w-0 p-1 pb-0",
1115
+ className: "min-w-0 shrink-0 p-1 pb-0",
1113
1116
  children: /* @__PURE__ */ jsx12(InputGroup, {
1114
1117
  className: "border-input/30 bg-input/30 h-8 w-full min-w-0 shadow-none",
1115
1118
  children: /* @__PURE__ */ jsx12(ComboboxPrimitive.Input, {
@@ -6,7 +6,7 @@ import {
6
6
  import { CircleAlert, RefreshCw } from "lucide-react";
7
7
  import { useMemo, useState as useState2 } from "react";
8
8
  import { Option, Schema } from "effect";
9
- import { HttpClientError, HttpTraceContext } from "effect/unstable/http";
9
+ import { HttpClientError, HttpTraceContext } from "effect/http";
10
10
 
11
11
  // ../../src/components/ui/button.tsx
12
12
  import { Button as ButtonPrimitive } from "@base-ui/react/button";
@@ -954,7 +954,7 @@ function InputGroupInput({
954
954
 
955
955
  // ../../src/components/ui/virtualized-combobox.tsx
956
956
  import { useKrakstackLocale as useKrakstackLocale2 } from "@krak-stack/registry/krakstack-provider";
957
- import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
957
+ import { jsx as jsx12, jsxs as jsxs5, Fragment as Fragment2 } from "react/jsx-runtime";
958
958
  "use client";
959
959
  var messages2 = {
960
960
  en: {
@@ -1031,65 +1031,68 @@ var VirtualizedComboboxList = ({
1031
1031
  if (element)
1032
1032
  virtualizer.measure();
1033
1033
  }, [virtualizer]);
1034
- if (filteredItems.length === 0) {
1035
- return /* @__PURE__ */ jsx12("div", {
1036
- className: "text-muted-foreground py-6 text-center text-sm",
1037
- children: emptyLabel
1038
- });
1039
- }
1040
- return /* @__PURE__ */ jsx12(ComboboxPrimitive.List, {
1041
- className: "scroll-py-1 overflow-auto overscroll-contain p-1",
1042
- ref: handleScrollElementRef,
1043
- style: {
1044
- height: Math.min(virtualizer.getTotalSize() + 8, 288),
1045
- maxHeight: "var(--available-height)"
1046
- },
1047
- children: /* @__PURE__ */ jsx12("div", {
1048
- className: "relative w-full",
1049
- role: "presentation",
1050
- style: { height: virtualizer.getTotalSize() },
1051
- children: virtualizer.getVirtualItems().map((virtualItem) => {
1052
- const entry = entries[virtualItem.index];
1053
- if (!entry)
1054
- return null;
1055
- const style = {
1056
- height: virtualItem.size,
1057
- transform: `translateY(${virtualItem.start}px)`
1058
- };
1059
- if (entry.kind === "group") {
1060
- return /* @__PURE__ */ jsx12(ComboboxPrimitive.Group, {
1061
- className: "contents",
1062
- children: /* @__PURE__ */ jsx12(ComboboxPrimitive.GroupLabel, {
1063
- className: "text-muted-foreground absolute top-0 left-0 w-full px-2 pt-3 pb-1 text-xs",
1034
+ return /* @__PURE__ */ jsxs5(Fragment2, {
1035
+ children: [
1036
+ filteredItems.length === 0 && /* @__PURE__ */ jsx12("div", {
1037
+ className: "text-muted-foreground flex min-h-0 flex-1 flex-col items-center justify-center overflow-auto py-6 text-center text-sm",
1038
+ children: emptyLabel
1039
+ }),
1040
+ /* @__PURE__ */ jsx12(ComboboxPrimitive.List, {
1041
+ className: "min-h-0 flex-1 scroll-py-1 overflow-auto overscroll-contain p-1",
1042
+ hidden: filteredItems.length === 0,
1043
+ ref: handleScrollElementRef,
1044
+ style: {
1045
+ height: Math.min(virtualizer.getTotalSize() + 8, 288),
1046
+ maxHeight: "var(--available-height)"
1047
+ },
1048
+ children: /* @__PURE__ */ jsx12("div", {
1049
+ className: "relative w-full",
1050
+ role: "presentation",
1051
+ style: { height: virtualizer.getTotalSize() },
1052
+ children: virtualizer.getVirtualItems().map((virtualItem) => {
1053
+ const entry = entries[virtualItem.index];
1054
+ if (!entry)
1055
+ return null;
1056
+ const style = {
1057
+ height: virtualItem.size,
1058
+ transform: `translateY(${virtualItem.start}px)`
1059
+ };
1060
+ if (entry.kind === "group") {
1061
+ return /* @__PURE__ */ jsx12(ComboboxPrimitive.Group, {
1062
+ className: "contents",
1063
+ children: /* @__PURE__ */ jsx12(ComboboxPrimitive.GroupLabel, {
1064
+ className: "text-muted-foreground absolute top-0 left-0 w-full px-2 pt-3 pb-1 text-xs",
1065
+ "data-index": virtualItem.index,
1066
+ ref: virtualizer.measureElement,
1067
+ style,
1068
+ children: entry.label
1069
+ })
1070
+ }, entry.key);
1071
+ }
1072
+ return /* @__PURE__ */ jsxs5(ComboboxPrimitive.Item, {
1073
+ "aria-posinset": entry.index + 1,
1074
+ "aria-setsize": filteredItems.length,
1075
+ className: "data-highlighted:bg-accent data-highlighted:text-accent-foreground absolute top-0 left-0 flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50",
1064
1076
  "data-index": virtualItem.index,
1077
+ index: entry.index,
1065
1078
  ref: virtualizer.measureElement,
1066
1079
  style,
1067
- children: entry.label
1068
- })
1069
- }, entry.key);
1070
- }
1071
- return /* @__PURE__ */ jsxs5(ComboboxPrimitive.Item, {
1072
- "aria-posinset": entry.index + 1,
1073
- "aria-setsize": filteredItems.length,
1074
- className: "data-highlighted:bg-accent data-highlighted:text-accent-foreground absolute top-0 left-0 flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50",
1075
- "data-index": virtualItem.index,
1076
- index: entry.index,
1077
- ref: virtualizer.measureElement,
1078
- style,
1079
- value: entry.item,
1080
- children: [
1081
- renderItem?.(entry.item) ?? /* @__PURE__ */ jsx12("span", {
1082
- className: "min-w-0 truncate",
1083
- children: entry.item.label
1084
- }),
1085
- /* @__PURE__ */ jsx12(ComboboxPrimitive.ItemIndicator, {
1086
- className: "absolute right-2 flex size-4 items-center justify-center",
1087
- children: /* @__PURE__ */ jsx12(Check, {})
1088
- })
1089
- ]
1090
- }, entry.item.value);
1080
+ value: entry.item,
1081
+ children: [
1082
+ renderItem?.(entry.item) ?? /* @__PURE__ */ jsx12("span", {
1083
+ className: "min-w-0 truncate",
1084
+ children: entry.item.label
1085
+ }),
1086
+ /* @__PURE__ */ jsx12(ComboboxPrimitive.ItemIndicator, {
1087
+ className: "absolute right-2 flex size-4 items-center justify-center",
1088
+ children: /* @__PURE__ */ jsx12(Check, {})
1089
+ })
1090
+ ]
1091
+ }, entry.item.value);
1092
+ })
1093
+ })
1091
1094
  })
1092
- })
1095
+ ]
1093
1096
  });
1094
1097
  };
1095
1098
  var VirtualizedComboboxContent = ({
@@ -1111,10 +1114,10 @@ var VirtualizedComboboxContent = ({
1111
1114
  side: "bottom",
1112
1115
  sideOffset: 6,
1113
1116
  children: /* @__PURE__ */ jsxs5(ComboboxPrimitive.Popup, {
1114
- className: cn("relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-0 origin-(--transform-origin) overflow-hidden rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-in-95", contentClassName),
1117
+ className: cn("relative flex max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-0 origin-(--transform-origin) flex-col overflow-hidden rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-in-95", contentClassName),
1115
1118
  children: [
1116
1119
  /* @__PURE__ */ jsx12("div", {
1117
- className: "min-w-0 p-1 pb-0",
1120
+ className: "min-w-0 shrink-0 p-1 pb-0",
1118
1121
  children: /* @__PURE__ */ jsx12(InputGroup, {
1119
1122
  className: "border-input/30 bg-input/30 h-8 w-full min-w-0 shadow-none",
1120
1123
  children: /* @__PURE__ */ jsx12(ComboboxPrimitive.Input, {
@@ -6,8 +6,8 @@ import {
6
6
  HttpClient,
7
7
  HttpClientRequest,
8
8
  HttpClientResponse
9
- } from "effect/unstable/http";
10
- import { AsyncResult, Atom } from "effect/unstable/reactivity";
9
+ } from "effect/http";
10
+ import { AsyncResult, Atom } from "effect/reactivity";
11
11
  import { useDeferredValue, useState } from "react";
12
12
  import { Icon } from "@iconify/react";
13
13
  import { ExternalLink, Search } from "lucide-react";
@@ -131,7 +131,7 @@ function InputGroupInput({
131
131
 
132
132
  // ../../src/components/ui/virtualized-combobox.tsx
133
133
  import { useKrakstackLocale } from "@krak-stack/registry/krakstack-provider";
134
- import { jsx as jsx4, jsxs } from "react/jsx-runtime";
134
+ import { jsx as jsx4, jsxs, Fragment } from "react/jsx-runtime";
135
135
  "use client";
136
136
  var messages = {
137
137
  en: {
@@ -208,65 +208,68 @@ var VirtualizedComboboxList = ({
208
208
  if (element)
209
209
  virtualizer.measure();
210
210
  }, [virtualizer]);
211
- if (filteredItems.length === 0) {
212
- return /* @__PURE__ */ jsx4("div", {
213
- className: "text-muted-foreground py-6 text-center text-sm",
214
- children: emptyLabel
215
- });
216
- }
217
- return /* @__PURE__ */ jsx4(ComboboxPrimitive.List, {
218
- className: "scroll-py-1 overflow-auto overscroll-contain p-1",
219
- ref: handleScrollElementRef,
220
- style: {
221
- height: Math.min(virtualizer.getTotalSize() + 8, 288),
222
- maxHeight: "var(--available-height)"
223
- },
224
- children: /* @__PURE__ */ jsx4("div", {
225
- className: "relative w-full",
226
- role: "presentation",
227
- style: { height: virtualizer.getTotalSize() },
228
- children: virtualizer.getVirtualItems().map((virtualItem) => {
229
- const entry = entries[virtualItem.index];
230
- if (!entry)
231
- return null;
232
- const style = {
233
- height: virtualItem.size,
234
- transform: `translateY(${virtualItem.start}px)`
235
- };
236
- if (entry.kind === "group") {
237
- return /* @__PURE__ */ jsx4(ComboboxPrimitive.Group, {
238
- className: "contents",
239
- children: /* @__PURE__ */ jsx4(ComboboxPrimitive.GroupLabel, {
240
- className: "text-muted-foreground absolute top-0 left-0 w-full px-2 pt-3 pb-1 text-xs",
211
+ return /* @__PURE__ */ jsxs(Fragment, {
212
+ children: [
213
+ filteredItems.length === 0 && /* @__PURE__ */ jsx4("div", {
214
+ className: "text-muted-foreground flex min-h-0 flex-1 flex-col items-center justify-center overflow-auto py-6 text-center text-sm",
215
+ children: emptyLabel
216
+ }),
217
+ /* @__PURE__ */ jsx4(ComboboxPrimitive.List, {
218
+ className: "min-h-0 flex-1 scroll-py-1 overflow-auto overscroll-contain p-1",
219
+ hidden: filteredItems.length === 0,
220
+ ref: handleScrollElementRef,
221
+ style: {
222
+ height: Math.min(virtualizer.getTotalSize() + 8, 288),
223
+ maxHeight: "var(--available-height)"
224
+ },
225
+ children: /* @__PURE__ */ jsx4("div", {
226
+ className: "relative w-full",
227
+ role: "presentation",
228
+ style: { height: virtualizer.getTotalSize() },
229
+ children: virtualizer.getVirtualItems().map((virtualItem) => {
230
+ const entry = entries[virtualItem.index];
231
+ if (!entry)
232
+ return null;
233
+ const style = {
234
+ height: virtualItem.size,
235
+ transform: `translateY(${virtualItem.start}px)`
236
+ };
237
+ if (entry.kind === "group") {
238
+ return /* @__PURE__ */ jsx4(ComboboxPrimitive.Group, {
239
+ className: "contents",
240
+ children: /* @__PURE__ */ jsx4(ComboboxPrimitive.GroupLabel, {
241
+ className: "text-muted-foreground absolute top-0 left-0 w-full px-2 pt-3 pb-1 text-xs",
242
+ "data-index": virtualItem.index,
243
+ ref: virtualizer.measureElement,
244
+ style,
245
+ children: entry.label
246
+ })
247
+ }, entry.key);
248
+ }
249
+ return /* @__PURE__ */ jsxs(ComboboxPrimitive.Item, {
250
+ "aria-posinset": entry.index + 1,
251
+ "aria-setsize": filteredItems.length,
252
+ className: "data-highlighted:bg-accent data-highlighted:text-accent-foreground absolute top-0 left-0 flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50",
241
253
  "data-index": virtualItem.index,
254
+ index: entry.index,
242
255
  ref: virtualizer.measureElement,
243
256
  style,
244
- children: entry.label
245
- })
246
- }, entry.key);
247
- }
248
- return /* @__PURE__ */ jsxs(ComboboxPrimitive.Item, {
249
- "aria-posinset": entry.index + 1,
250
- "aria-setsize": filteredItems.length,
251
- className: "data-highlighted:bg-accent data-highlighted:text-accent-foreground absolute top-0 left-0 flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50",
252
- "data-index": virtualItem.index,
253
- index: entry.index,
254
- ref: virtualizer.measureElement,
255
- style,
256
- value: entry.item,
257
- children: [
258
- renderItem?.(entry.item) ?? /* @__PURE__ */ jsx4("span", {
259
- className: "min-w-0 truncate",
260
- children: entry.item.label
261
- }),
262
- /* @__PURE__ */ jsx4(ComboboxPrimitive.ItemIndicator, {
263
- className: "absolute right-2 flex size-4 items-center justify-center",
264
- children: /* @__PURE__ */ jsx4(Check, {})
265
- })
266
- ]
267
- }, entry.item.value);
257
+ value: entry.item,
258
+ children: [
259
+ renderItem?.(entry.item) ?? /* @__PURE__ */ jsx4("span", {
260
+ className: "min-w-0 truncate",
261
+ children: entry.item.label
262
+ }),
263
+ /* @__PURE__ */ jsx4(ComboboxPrimitive.ItemIndicator, {
264
+ className: "absolute right-2 flex size-4 items-center justify-center",
265
+ children: /* @__PURE__ */ jsx4(Check, {})
266
+ })
267
+ ]
268
+ }, entry.item.value);
269
+ })
270
+ })
268
271
  })
269
- })
272
+ ]
270
273
  });
271
274
  };
272
275
  var VirtualizedComboboxContent = ({
@@ -288,10 +291,10 @@ var VirtualizedComboboxContent = ({
288
291
  side: "bottom",
289
292
  sideOffset: 6,
290
293
  children: /* @__PURE__ */ jsxs(ComboboxPrimitive.Popup, {
291
- className: cn("relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-0 origin-(--transform-origin) overflow-hidden rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-in-95", contentClassName),
294
+ className: cn("relative flex max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-0 origin-(--transform-origin) flex-col overflow-hidden rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-in-95", contentClassName),
292
295
  children: [
293
296
  /* @__PURE__ */ jsx4("div", {
294
- className: "min-w-0 p-1 pb-0",
297
+ className: "min-w-0 shrink-0 p-1 pb-0",
295
298
  children: /* @__PURE__ */ jsx4(InputGroup, {
296
299
  className: "border-input/30 bg-input/30 h-8 w-full min-w-0 shadow-none",
297
300
  children: /* @__PURE__ */ jsx4(ComboboxPrimitive.Input, {
@@ -447,7 +450,7 @@ function VirtualizedCombobox(props) {
447
450
 
448
451
  // ../../src/components/ui/icon-input.tsx
449
452
  import { useKrakstackLocale as useKrakstackLocale2 } from "@krak-stack/registry/krakstack-provider";
450
- import { jsx as jsx5, jsxs as jsxs2, Fragment } from "react/jsx-runtime";
453
+ import { jsx as jsx5, jsxs as jsxs2, Fragment as Fragment2 } from "react/jsx-runtime";
451
454
  var IconifySearchResponse = Schema.Struct({
452
455
  icons: Schema.Array(Schema.String)
453
456
  }).pipe(Schema.annotate({ identifier: "IconifySearchResponse" }));
@@ -512,7 +515,7 @@ function IconInput({
512
515
  const selectedItem = value ? { label: value, value } : null;
513
516
  return /* @__PURE__ */ jsx5(VirtualizedCombobox, {
514
517
  ariaLabel: copy.select,
515
- contentClassName: "w-80",
518
+ contentClassName: "h-80 w-80",
516
519
  emptyLabel: isWaiting ? null : /* @__PURE__ */ jsxs2("div", {
517
520
  className: "text-muted-foreground flex flex-col items-center gap-2 px-3",
518
521
  children: [
@@ -565,7 +568,7 @@ function IconInput({
565
568
  setIsOpen(false);
566
569
  },
567
570
  placeholder: copy.select,
568
- renderItem: (item) => /* @__PURE__ */ jsxs2(Fragment, {
571
+ renderItem: (item) => /* @__PURE__ */ jsxs2(Fragment2, {
569
572
  children: [
570
573
  /* @__PURE__ */ jsx5(Icon, {
571
574
  className: "size-5 shrink-0",
@@ -1,7 +1,7 @@
1
1
  // ../../src/components/ui/sidebar-layout.tsx
2
2
  import { Link, Outlet, useRouterState } from "@tanstack/react-router";
3
3
  import { Option, Schema as Schema2 } from "effect";
4
- import { Cookies } from "effect/unstable/http";
4
+ import { Cookies } from "effect/http";
5
5
  import { useState as useState3 } from "react";
6
6
 
7
7
  // ../../src/components/ui/badge.tsx
@@ -745,7 +745,7 @@ function SidebarLayout({
745
745
  ]
746
746
  }),
747
747
  /* @__PURE__ */ jsx5("div", {
748
- className: contentClassName ?? "flex flex-col gap-6 px-5 py-6 md:px-8",
748
+ className: cn("isolate", contentClassName ?? "flex flex-col gap-6 px-5 py-6 md:px-8"),
749
749
  children: children ?? /* @__PURE__ */ jsx5(Outlet, {})
750
750
  })
751
751
  ]