@craft-ts/component 0.7.0-beta.13
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/LICENSE +21 -0
- package/package.json +36 -0
- package/src/index.d.ts +40 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +38 -0
- package/src/index.js.map +1 -0
- package/src/lib/a11y-control.d.ts +58 -0
- package/src/lib/a11y-control.d.ts.map +1 -0
- package/src/lib/a11y-control.js +74 -0
- package/src/lib/a11y-control.js.map +1 -0
- package/src/lib/a11y.d.ts +87 -0
- package/src/lib/a11y.d.ts.map +1 -0
- package/src/lib/a11y.js +96 -0
- package/src/lib/a11y.js.map +1 -0
- package/src/lib/ai/ai-context-menu.d.ts +140 -0
- package/src/lib/ai/ai-context-menu.d.ts.map +1 -0
- package/src/lib/ai/ai-context-menu.js +66 -0
- package/src/lib/ai/ai-context-menu.js.map +1 -0
- package/src/lib/ai/ai-send-dialog.d.ts +1263 -0
- package/src/lib/ai/ai-send-dialog.d.ts.map +1 -0
- package/src/lib/ai/ai-send-dialog.js +288 -0
- package/src/lib/ai/ai-send-dialog.js.map +1 -0
- package/src/lib/ai/send-context-to-ai.d.ts +29 -0
- package/src/lib/ai/send-context-to-ai.d.ts.map +1 -0
- package/src/lib/ai/send-context-to-ai.js +127 -0
- package/src/lib/ai/send-context-to-ai.js.map +1 -0
- package/src/lib/assert-defined-input.d.ts +26 -0
- package/src/lib/assert-defined-input.d.ts.map +1 -0
- package/src/lib/assert-defined-input.js +47 -0
- package/src/lib/assert-defined-input.js.map +1 -0
- package/src/lib/block.d.ts +36 -0
- package/src/lib/block.d.ts.map +1 -0
- package/src/lib/block.js +55 -0
- package/src/lib/block.js.map +1 -0
- package/src/lib/bootstrap.d.ts +32 -0
- package/src/lib/bootstrap.d.ts.map +1 -0
- package/src/lib/bootstrap.js +60 -0
- package/src/lib/bootstrap.js.map +1 -0
- package/src/lib/bridge.d.ts +56 -0
- package/src/lib/bridge.d.ts.map +1 -0
- package/src/lib/bridge.js +81 -0
- package/src/lib/bridge.js.map +1 -0
- package/src/lib/component.d.ts +46 -0
- package/src/lib/component.d.ts.map +1 -0
- package/src/lib/component.js +118 -0
- package/src/lib/component.js.map +1 -0
- package/src/lib/composition.d.ts +17 -0
- package/src/lib/composition.d.ts.map +1 -0
- package/src/lib/composition.js +28 -0
- package/src/lib/composition.js.map +1 -0
- package/src/lib/craft-defaults.d.ts +2 -0
- package/src/lib/craft-defaults.d.ts.map +1 -0
- package/src/lib/craft-defaults.js +41 -0
- package/src/lib/craft-defaults.js.map +1 -0
- package/src/lib/craft-host-tokens.d.ts +6 -0
- package/src/lib/craft-host-tokens.d.ts.map +1 -0
- package/src/lib/craft-host-tokens.js +7 -0
- package/src/lib/craft-host-tokens.js.map +1 -0
- package/src/lib/craft-router-outlet.d.ts +15 -0
- package/src/lib/craft-router-outlet.d.ts.map +1 -0
- package/src/lib/craft-router-outlet.js +10 -0
- package/src/lib/craft-router-outlet.js.map +1 -0
- package/src/lib/css-vars.d.ts +31 -0
- package/src/lib/css-vars.d.ts.map +1 -0
- package/src/lib/css-vars.js +43 -0
- package/src/lib/css-vars.js.map +1 -0
- package/src/lib/css-vars.type.d.ts +151 -0
- package/src/lib/css-vars.type.d.ts.map +1 -0
- package/src/lib/css-vars.type.js +1 -0
- package/src/lib/css-vars.type.js.map +1 -0
- package/src/lib/defer.d.ts +31 -0
- package/src/lib/defer.d.ts.map +1 -0
- package/src/lib/defer.js +19 -0
- package/src/lib/defer.js.map +1 -0
- package/src/lib/directive.d.ts +9 -0
- package/src/lib/directive.d.ts.map +1 -0
- package/src/lib/directive.js +31 -0
- package/src/lib/directive.js.map +1 -0
- package/src/lib/each-scheduling.d.ts +59 -0
- package/src/lib/each-scheduling.d.ts.map +1 -0
- package/src/lib/each-scheduling.js +120 -0
- package/src/lib/each-scheduling.js.map +1 -0
- package/src/lib/each.d.ts +29 -0
- package/src/lib/each.d.ts.map +1 -0
- package/src/lib/each.js +23 -0
- package/src/lib/each.js.map +1 -0
- package/src/lib/factory-runtime.d.ts +5 -0
- package/src/lib/factory-runtime.d.ts.map +1 -0
- package/src/lib/factory-runtime.js +26 -0
- package/src/lib/factory-runtime.js.map +1 -0
- package/src/lib/field-exception-block.d.ts +96 -0
- package/src/lib/field-exception-block.d.ts.map +1 -0
- package/src/lib/field-exception-block.js +44 -0
- package/src/lib/field-exception-block.js.map +1 -0
- package/src/lib/host-runtime.d.ts +60 -0
- package/src/lib/host-runtime.d.ts.map +1 -0
- package/src/lib/host-runtime.js +16 -0
- package/src/lib/host-runtime.js.map +1 -0
- package/src/lib/hydrate.d.ts +15 -0
- package/src/lib/hydrate.d.ts.map +1 -0
- package/src/lib/hydrate.js +79 -0
- package/src/lib/hydrate.js.map +1 -0
- package/src/lib/hyperscript.d.ts +148 -0
- package/src/lib/hyperscript.d.ts.map +1 -0
- package/src/lib/hyperscript.js +96 -0
- package/src/lib/hyperscript.js.map +1 -0
- package/src/lib/if-block.d.ts +8 -0
- package/src/lib/if-block.d.ts.map +1 -0
- package/src/lib/if-block.js +16 -0
- package/src/lib/if-block.js.map +1 -0
- package/src/lib/locator.d.ts +170 -0
- package/src/lib/locator.d.ts.map +1 -0
- package/src/lib/locator.js +151 -0
- package/src/lib/locator.js.map +1 -0
- package/src/lib/match-block.d.ts +38 -0
- package/src/lib/match-block.d.ts.map +1 -0
- package/src/lib/match-block.js +29 -0
- package/src/lib/match-block.js.map +1 -0
- package/src/lib/pending-block.d.ts +125 -0
- package/src/lib/pending-block.d.ts.map +1 -0
- package/src/lib/pending-block.js +48 -0
- package/src/lib/pending-block.js.map +1 -0
- package/src/lib/project.d.ts +19 -0
- package/src/lib/project.d.ts.map +1 -0
- package/src/lib/project.js +56 -0
- package/src/lib/project.js.map +1 -0
- package/src/lib/render/hydration-metadata.d.ts +3 -0
- package/src/lib/render/hydration-metadata.d.ts.map +1 -0
- package/src/lib/render/hydration-metadata.js +8 -0
- package/src/lib/render/hydration-metadata.js.map +1 -0
- package/src/lib/render/hydration.d.ts +24 -0
- package/src/lib/render/hydration.d.ts.map +1 -0
- package/src/lib/render/hydration.js +181 -0
- package/src/lib/render/hydration.js.map +1 -0
- package/src/lib/render/interpreter.d.ts +32 -0
- package/src/lib/render/interpreter.d.ts.map +1 -0
- package/src/lib/render/interpreter.js +3588 -0
- package/src/lib/render/interpreter.js.map +1 -0
- package/src/lib/render/server-style-collector.d.ts +6 -0
- package/src/lib/render/server-style-collector.d.ts.map +1 -0
- package/src/lib/render/server-style-collector.js +23 -0
- package/src/lib/render/server-style-collector.js.map +1 -0
- package/src/lib/render/ssr-coordinator.d.ts +20 -0
- package/src/lib/render/ssr-coordinator.d.ts.map +1 -0
- package/src/lib/render/ssr-coordinator.js +99 -0
- package/src/lib/render/ssr-coordinator.js.map +1 -0
- package/src/lib/render/string-dom.d.ts +9 -0
- package/src/lib/render/string-dom.d.ts.map +1 -0
- package/src/lib/render/string-dom.js +377 -0
- package/src/lib/render/string-dom.js.map +1 -0
- package/src/lib/render/style-registry.d.ts +14 -0
- package/src/lib/render/style-registry.d.ts.map +1 -0
- package/src/lib/render/style-registry.js +79 -0
- package/src/lib/render/style-registry.js.map +1 -0
- package/src/lib/render/style-scope.d.ts +30 -0
- package/src/lib/render/style-scope.d.ts.map +1 -0
- package/src/lib/render/style-scope.js +261 -0
- package/src/lib/render/style-scope.js.map +1 -0
- package/src/lib/render/vnode.d.ts +330 -0
- package/src/lib/render/vnode.d.ts.map +1 -0
- package/src/lib/render/vnode.js +293 -0
- package/src/lib/render/vnode.js.map +1 -0
- package/src/lib/server-render.d.ts +34 -0
- package/src/lib/server-render.d.ts.map +1 -0
- package/src/lib/server-render.js +84 -0
- package/src/lib/server-render.js.map +1 -0
- package/src/lib/start.d.ts +13 -0
- package/src/lib/start.d.ts.map +1 -0
- package/src/lib/start.js +20 -0
- package/src/lib/start.js.map +1 -0
- package/src/lib/template-contract.d.ts +347 -0
- package/src/lib/template-contract.d.ts.map +1 -0
- package/src/lib/template-contract.js +1 -0
- package/src/lib/template-contract.js.map +1 -0
- package/src/lib/template.d.ts +11 -0
- package/src/lib/template.d.ts.map +1 -0
- package/src/lib/template.js +21 -0
- package/src/lib/template.js.map +1 -0
- package/src/lib/testing.d.ts +157 -0
- package/src/lib/testing.d.ts.map +1 -0
- package/src/lib/testing.js +416 -0
- package/src/lib/testing.js.map +1 -0
- package/src/lib/types.d.ts +442 -0
- package/src/lib/types.d.ts.map +1 -0
- package/src/lib/types.js +22 -0
- package/src/lib/types.js.map +1 -0
- package/testing/public-api.d.ts +3 -0
- package/testing/public-api.d.ts.map +1 -0
- package/testing/public-api.js +3 -0
- package/testing/public-api.js.map +1 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { Input, Output } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Context menu shown at the pointer position when a component is
|
|
4
|
+
* right-clicked. Mounted imperatively by the AI overlay controller.
|
|
5
|
+
*/
|
|
6
|
+
export declare const AiContextMenu: import("../types").CraftComponent<{
|
|
7
|
+
x: import("../types").InputValue<number>;
|
|
8
|
+
y: import("../types").InputValue<number>;
|
|
9
|
+
onSelect: () => void;
|
|
10
|
+
onDismiss: () => void;
|
|
11
|
+
}, {
|
|
12
|
+
deps: {};
|
|
13
|
+
propertiesDeps: {};
|
|
14
|
+
provided: {};
|
|
15
|
+
publicProperties: {
|
|
16
|
+
x: import("../types").InputValue<number>;
|
|
17
|
+
y: import("../types").InputValue<number>;
|
|
18
|
+
onSelect: () => void;
|
|
19
|
+
onDismiss: () => void;
|
|
20
|
+
};
|
|
21
|
+
missingProvider: {};
|
|
22
|
+
}, (x: Input<number>, y: Input<number>, onSelect: Output<() => void>, onDismiss: Output<() => void>) => {
|
|
23
|
+
x: Input<number>;
|
|
24
|
+
y: Input<number>;
|
|
25
|
+
onSelect: Output<() => void>;
|
|
26
|
+
onDismiss: Output<() => void>;
|
|
27
|
+
}, {
|
|
28
|
+
readonly styles: "\n .craft-ai-menu {\n position: fixed;\n min-width: 180px;\n background: #ffffff;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);\n padding: 4px;\n pointer-events: auto;\n font-family:\n system-ui,\n -apple-system,\n sans-serif;\n font-size: 13px;\n color: #111827;\n }\n .craft-ai-menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 6px 10px;\n background: transparent;\n border: none;\n text-align: left;\n cursor: pointer;\n border-radius: 4px;\n }\n .craft-ai-menu-item:hover {\n background: #f3f4f6;\n }\n ";
|
|
29
|
+
}, (x: Input<number>, y: Input<number>, onSelect: Output<() => void>, onDismiss: Output<() => void>) => {
|
|
30
|
+
x: Input<number>;
|
|
31
|
+
y: Input<number>;
|
|
32
|
+
onSelect: Output<() => void>;
|
|
33
|
+
onDismiss: Output<() => void>;
|
|
34
|
+
}, import("../render/vnode").CraftNodeChildrenDependencies<import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<[import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"✨">, "span", NoInfer<{
|
|
35
|
+
readonly 'aria-hidden': "true";
|
|
36
|
+
}>, "✨", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>, import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"Send to IA">, "span", Record<never, never>, "Send to IA", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>]>, "button", NoInfer<{
|
|
37
|
+
readonly type: "button";
|
|
38
|
+
readonly role: "menuitem";
|
|
39
|
+
readonly class: "craft-ai-menu-item";
|
|
40
|
+
readonly click: () => Generator<unknown, void, unknown>;
|
|
41
|
+
}>, [import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"✨">, "span", NoInfer<{
|
|
42
|
+
readonly 'aria-hidden': "true";
|
|
43
|
+
}>, "✨", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>, import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"Send to IA">, "span", Record<never, never>, "Send to IA", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>], "aiSendToIa", string, never, never, {
|
|
44
|
+
readonly required: never;
|
|
45
|
+
readonly optional: never;
|
|
46
|
+
readonly declared: never;
|
|
47
|
+
readonly inherited: never;
|
|
48
|
+
readonly nonInherited: never;
|
|
49
|
+
readonly unknownCss: false;
|
|
50
|
+
}, never, never>>, "div", NoInfer<{
|
|
51
|
+
readonly class: "craft-ai-menu";
|
|
52
|
+
readonly role: "menu";
|
|
53
|
+
readonly tabIndex: -1;
|
|
54
|
+
readonly 'aria-label': "Component actions";
|
|
55
|
+
readonly style: () => {
|
|
56
|
+
left: string;
|
|
57
|
+
top: string;
|
|
58
|
+
};
|
|
59
|
+
readonly click: (event: MouseEvent) => void;
|
|
60
|
+
readonly contextmenu: (event: MouseEvent) => void;
|
|
61
|
+
}>, import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<[import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"✨">, "span", NoInfer<{
|
|
62
|
+
readonly 'aria-hidden': "true";
|
|
63
|
+
}>, "✨", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>, import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"Send to IA">, "span", Record<never, never>, "Send to IA", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>]>, "button", NoInfer<{
|
|
64
|
+
readonly type: "button";
|
|
65
|
+
readonly role: "menuitem";
|
|
66
|
+
readonly class: "craft-ai-menu-item";
|
|
67
|
+
readonly click: () => Generator<unknown, void, unknown>;
|
|
68
|
+
}>, [import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"✨">, "span", NoInfer<{
|
|
69
|
+
readonly 'aria-hidden': "true";
|
|
70
|
+
}>, "✨", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>, import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"Send to IA">, "span", Record<never, never>, "Send to IA", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>], "aiSendToIa", string, never, never, {
|
|
71
|
+
readonly required: never;
|
|
72
|
+
readonly optional: never;
|
|
73
|
+
readonly declared: never;
|
|
74
|
+
readonly inherited: never;
|
|
75
|
+
readonly nonInherited: never;
|
|
76
|
+
readonly unknownCss: false;
|
|
77
|
+
}, never, never>, "aiContextMenu", string, never, never, {
|
|
78
|
+
readonly required: never;
|
|
79
|
+
readonly optional: never;
|
|
80
|
+
readonly declared: never;
|
|
81
|
+
readonly inherited: never;
|
|
82
|
+
readonly nonInherited: never;
|
|
83
|
+
readonly unknownCss: false;
|
|
84
|
+
}, never, never>>, ({ x, y, onSelect }: {
|
|
85
|
+
x: () => Generator<unknown, number, unknown>;
|
|
86
|
+
y: () => Generator<unknown, number, unknown>;
|
|
87
|
+
onSelect: import("../types").YieldableTemplateCallback<[], void, unknown, "onSelect">;
|
|
88
|
+
onDismiss: import("../types").YieldableTemplateCallback<[], void, unknown, "onDismiss">;
|
|
89
|
+
}) => import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<[import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"✨">, "span", NoInfer<{
|
|
90
|
+
readonly 'aria-hidden': "true";
|
|
91
|
+
}>, "✨", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>, import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"Send to IA">, "span", Record<never, never>, "Send to IA", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>]>, "button", NoInfer<{
|
|
92
|
+
readonly type: "button";
|
|
93
|
+
readonly role: "menuitem";
|
|
94
|
+
readonly class: "craft-ai-menu-item";
|
|
95
|
+
readonly click: () => Generator<unknown, void, unknown>;
|
|
96
|
+
}>, [import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"✨">, "span", NoInfer<{
|
|
97
|
+
readonly 'aria-hidden': "true";
|
|
98
|
+
}>, "✨", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>, import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"Send to IA">, "span", Record<never, never>, "Send to IA", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>], "aiSendToIa", string, never, never, {
|
|
99
|
+
readonly required: never;
|
|
100
|
+
readonly optional: never;
|
|
101
|
+
readonly declared: never;
|
|
102
|
+
readonly inherited: never;
|
|
103
|
+
readonly nonInherited: never;
|
|
104
|
+
readonly unknownCss: false;
|
|
105
|
+
}, never, never>>, "div", NoInfer<{
|
|
106
|
+
readonly class: "craft-ai-menu";
|
|
107
|
+
readonly role: "menu";
|
|
108
|
+
readonly tabIndex: -1;
|
|
109
|
+
readonly 'aria-label': "Component actions";
|
|
110
|
+
readonly style: () => {
|
|
111
|
+
left: string;
|
|
112
|
+
top: string;
|
|
113
|
+
};
|
|
114
|
+
readonly click: (event: MouseEvent) => void;
|
|
115
|
+
readonly contextmenu: (event: MouseEvent) => void;
|
|
116
|
+
}>, import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<[import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"✨">, "span", NoInfer<{
|
|
117
|
+
readonly 'aria-hidden': "true";
|
|
118
|
+
}>, "✨", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>, import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"Send to IA">, "span", Record<never, never>, "Send to IA", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>]>, "button", NoInfer<{
|
|
119
|
+
readonly type: "button";
|
|
120
|
+
readonly role: "menuitem";
|
|
121
|
+
readonly class: "craft-ai-menu-item";
|
|
122
|
+
readonly click: () => Generator<unknown, void, unknown>;
|
|
123
|
+
}>, [import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"✨">, "span", NoInfer<{
|
|
124
|
+
readonly 'aria-hidden': "true";
|
|
125
|
+
}>, "✨", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>, import("../render/vnode").ElementNode<import("../render/vnode").CraftNodeChildrenDependencies<"Send to IA">, "span", Record<never, never>, "Send to IA", string | undefined, string, never, never, import("../css-vars.type").EmptyCssVarContract, never, never>], "aiSendToIa", string, never, never, {
|
|
126
|
+
readonly required: never;
|
|
127
|
+
readonly optional: never;
|
|
128
|
+
readonly declared: never;
|
|
129
|
+
readonly inherited: never;
|
|
130
|
+
readonly nonInherited: never;
|
|
131
|
+
readonly unknownCss: false;
|
|
132
|
+
}, never, never>, "aiContextMenu", string, never, never, {
|
|
133
|
+
readonly required: never;
|
|
134
|
+
readonly optional: never;
|
|
135
|
+
readonly declared: never;
|
|
136
|
+
readonly inherited: never;
|
|
137
|
+
readonly nonInherited: never;
|
|
138
|
+
readonly unknownCss: false;
|
|
139
|
+
}, never, never>, "AiContextMenu", never, {}, never>;
|
|
140
|
+
//# sourceMappingURL=ai-context-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-context-menu.d.ts","sourceRoot":"","sources":["../../../../../../libs/component/src/lib/ai/ai-context-menu.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,aAAa;;;oBAwCC,IAAI;qBACH,IAAI;;;;;;;;wBADL,IAAI;yBACH,IAAI;;;OAHzB,KAAK,CAAC,MAAM,CAAC,KACb,KAAK,CAAC,MAAM,CAAC,YACN,MAAM,CAAC,MAAM,IAAI,CAAC,aACjB,MAAM,CAAC,MAAM,IAAI,CAAC;;;2BADN,IAAI;4BACH,IAAI;;;OAHzB,KAAK,CAAC,MAAM,CAAC,KACb,KAAK,CAAC,MAAM,CAAC,YACN,MAAM,CAAC,MAAM,IAAI,CAAC,aACjB,MAAM,CAAC,MAAM,IAAI,CAAC;;;2BADN,IAAI;4BACH,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;4BA0BT,UAAU;kCACJ,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BADhB,UAAU;kCACJ,UAAU;;;;;;;;;;;;;;;;;;;;;;;;oDAatC,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { fromEventToSource$ } from '@craft-ts/core';
|
|
2
|
+
import { craftComponent } from '../component';
|
|
3
|
+
import { button, div, span } from '../hyperscript';
|
|
4
|
+
/**
|
|
5
|
+
* Context menu shown at the pointer position when a component is
|
|
6
|
+
* right-clicked. Mounted imperatively by the AI overlay controller.
|
|
7
|
+
*/
|
|
8
|
+
export const AiContextMenu = craftComponent('AiContextMenu', {
|
|
9
|
+
styles: `
|
|
10
|
+
.craft-ai-menu {
|
|
11
|
+
position: fixed;
|
|
12
|
+
min-width: 180px;
|
|
13
|
+
background: #ffffff;
|
|
14
|
+
border: 1px solid #d1d5db;
|
|
15
|
+
border-radius: 6px;
|
|
16
|
+
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
|
|
17
|
+
padding: 4px;
|
|
18
|
+
pointer-events: auto;
|
|
19
|
+
font-family:
|
|
20
|
+
system-ui,
|
|
21
|
+
-apple-system,
|
|
22
|
+
sans-serif;
|
|
23
|
+
font-size: 13px;
|
|
24
|
+
color: #111827;
|
|
25
|
+
}
|
|
26
|
+
.craft-ai-menu-item {
|
|
27
|
+
display: flex;
|
|
28
|
+
align-items: center;
|
|
29
|
+
gap: 8px;
|
|
30
|
+
width: 100%;
|
|
31
|
+
padding: 6px 10px;
|
|
32
|
+
background: transparent;
|
|
33
|
+
border: none;
|
|
34
|
+
text-align: left;
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
border-radius: 4px;
|
|
37
|
+
}
|
|
38
|
+
.craft-ai-menu-item:hover {
|
|
39
|
+
background: #f3f4f6;
|
|
40
|
+
}
|
|
41
|
+
`,
|
|
42
|
+
}, (x, y, onSelect, onDismiss) => {
|
|
43
|
+
// Clicks inside the menu stop propagating, so anything reaching the
|
|
44
|
+
// document is an outside click.
|
|
45
|
+
fromEventToSource$(document, 'click').subscribe(() => onDismiss());
|
|
46
|
+
fromEventToSource$(document, 'keydown').subscribe((event) => {
|
|
47
|
+
if (event.key === 'Escape') {
|
|
48
|
+
onDismiss();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return { x, y, onSelect, onDismiss };
|
|
52
|
+
}, ({ x, y, onSelect }) => div('aiContextMenu', {
|
|
53
|
+
class: 'craft-ai-menu',
|
|
54
|
+
role: 'menu',
|
|
55
|
+
tabIndex: -1,
|
|
56
|
+
'aria-label': 'Component actions',
|
|
57
|
+
style: () => ({ left: `${x()}px`, top: `${y()}px` }),
|
|
58
|
+
click: (event) => event.stopPropagation(),
|
|
59
|
+
contextmenu: (event) => event.preventDefault(),
|
|
60
|
+
}, button('aiSendToIa', {
|
|
61
|
+
type: 'button',
|
|
62
|
+
role: 'menuitem',
|
|
63
|
+
class: 'craft-ai-menu-item',
|
|
64
|
+
click: () => onSelect(),
|
|
65
|
+
}, [span({ 'aria-hidden': 'true' }, '✨'), span('Send to IA')])));
|
|
66
|
+
//# sourceMappingURL=ai-context-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-context-menu.js","sourceRoot":"","sources":["../../../../../../libs/component/src/lib/ai/ai-context-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGnD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CACzC,eAAe,EACf;IACE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgCP;CACF,EACD,CACE,CAAgB,EAChB,CAAgB,EAChB,QAA4B,EAC5B,SAA6B,EAC7B,EAAE;IACF,oEAAoE;IACpE,gCAAgC;IAChC,kBAAkB,CAAa,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAC/D,SAAS,EAAE,CACZ,CAAC;IACF,kBAAkB,CAAgB,QAAQ,EAAE,SAAS,CAAC,CAAC,SAAS,CAC9D,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC3B,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACvC,CAAC,EACD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CACrB,GAAG,CACD,eAAe,EACf;IACE,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,CAAC,CAAC;IACZ,YAAY,EAAE,mBAAmB;IACjC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACpD,KAAK,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE;IACrD,WAAW,EAAE,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE;CAC3D,EACD,MAAM,CACJ,YAAY,EACZ;IACE,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,oBAAoB;IAC3B,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;CACxB,EACD,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAC3D,CACF,CACJ,CAAC","sourcesContent":["import { fromEventToSource$ } from '@craft-ts/core';\nimport { craftComponent } from '../component';\nimport { button, div, span } from '../hyperscript';\nimport type { Input, Output } from '../types';\n\n/**\n * Context menu shown at the pointer position when a component is\n * right-clicked. Mounted imperatively by the AI overlay controller.\n */\nexport const AiContextMenu = craftComponent(\n 'AiContextMenu',\n {\n styles: `\n .craft-ai-menu {\n position: fixed;\n min-width: 180px;\n background: #ffffff;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);\n padding: 4px;\n pointer-events: auto;\n font-family:\n system-ui,\n -apple-system,\n sans-serif;\n font-size: 13px;\n color: #111827;\n }\n .craft-ai-menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 6px 10px;\n background: transparent;\n border: none;\n text-align: left;\n cursor: pointer;\n border-radius: 4px;\n }\n .craft-ai-menu-item:hover {\n background: #f3f4f6;\n }\n `,\n },\n (\n x: Input<number>,\n y: Input<number>,\n onSelect: Output<() => void>,\n onDismiss: Output<() => void>,\n ) => {\n // Clicks inside the menu stop propagating, so anything reaching the\n // document is an outside click.\n fromEventToSource$<MouseEvent>(document, 'click').subscribe(() =>\n onDismiss(),\n );\n fromEventToSource$<KeyboardEvent>(document, 'keydown').subscribe(\n (event) => {\n if (event.key === 'Escape') {\n onDismiss();\n }\n },\n );\n\n return { x, y, onSelect, onDismiss };\n },\n ({ x, y, onSelect }) =>\n div(\n 'aiContextMenu',\n {\n class: 'craft-ai-menu',\n role: 'menu',\n tabIndex: -1,\n 'aria-label': 'Component actions',\n style: () => ({ left: `${x()}px`, top: `${y()}px` }),\n click: (event: MouseEvent) => event.stopPropagation(),\n contextmenu: (event: MouseEvent) => event.preventDefault(),\n },\n button(\n 'aiSendToIa',\n {\n type: 'button',\n role: 'menuitem',\n class: 'craft-ai-menu-item',\n click: () => onSelect(),\n },\n [span({ 'aria-hidden': 'true' }, '✨'), span('Send to IA')],\n ),\n ),\n);\n"]}
|