@krak-stack/registry 0.1.35 → 0.1.37
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/README.md +39 -1
- package/dist/components/ui/data-table.js +1 -1
- package/dist/components/ui/effect-form.d.ts +1 -1
- package/dist/components/ui/effect-form.js +62 -59
- package/dist/components/ui/error-component.js +1 -1
- package/dist/components/ui/form.js +61 -58
- package/dist/components/ui/icon-input.js +66 -63
- package/dist/components/ui/sidebar-layout.js +2 -2
- package/dist/components/ui/virtualized-combobox.js +61 -58
- package/dist/lib/docs.js +3 -3
- package/dist/lib/docs.server.js +2 -2
- package/dist/lib/documentation-toolkit.d.ts +1 -1
- package/dist/lib/documentation-toolkit.js +3 -3
- package/dist/lib/httpapi-cli.d.ts +2 -2
- package/dist/lib/httpapi-cli.js +15 -15
- package/dist/lib/httpapi-client.d.ts +3 -3
- package/dist/lib/httpapi-client.js +2 -2
- package/dist/lib/httpapi-helpers.d.ts +1 -1
- package/dist/lib/httpapi-helpers.js +1 -1
- package/dist/lib/httpapi-mcp.d.ts +2 -2
- package/dist/lib/httpapi-mcp.js +4 -4
- package/dist/lib/httpapi-toolkit.d.ts +1 -1
- package/dist/lib/httpapi-toolkit.js +4 -4
- package/dist/lib/query.js +2 -2
- package/dist/lib/webfetch-toolkit.d.ts +2 -2
- package/dist/lib/webfetch-toolkit.js +4 -4
- package/dist/services/agent/client/atom.d.ts +1 -1
- package/dist/services/agent/client/index.js +4 -4
- package/dist/services/agent/index.d.ts +1 -1
- package/dist/services/agent/index.js +1 -1
- package/dist/services/agent/schema.d.ts +1 -1
- package/dist/services/agent/schema.js +3 -3
- package/dist/services/health/api.builder.d.ts +10 -10
- package/dist/services/health/api.group.d.ts +1 -1
- package/dist/services/health/index.js +2 -2
- package/dist/services/notification/channels/ses/index.js +4 -4
- package/dist/services/opentelemetry/api.d.ts +2 -2
- package/dist/services/opentelemetry/api.js +4 -4
- package/dist/services/opentelemetry/browser.d.ts +1 -1
- package/dist/services/opentelemetry/browser.js +2 -2
- package/dist/services/s3/index.js +6 -6
- package/package.json +7 -5
- package/patches/@lucas-barake%2Feffect-form-react@0.26.0-beta.5.patch +66 -0
- package/patches/@lucas-barake%2Feffect-form@0.25.0-beta.6.patch +86 -0
- 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/
|
|
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/
|
|
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/
|
|
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/
|
|
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
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
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
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
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/
|
|
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
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
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
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
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/
|
|
10
|
-
import { AsyncResult, Atom } from "effect/
|
|
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
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
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
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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(
|
|
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/
|
|
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
|
]
|