@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.
Files changed (190) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +36 -0
  3. package/src/index.d.ts +40 -0
  4. package/src/index.d.ts.map +1 -0
  5. package/src/index.js +38 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/a11y-control.d.ts +58 -0
  8. package/src/lib/a11y-control.d.ts.map +1 -0
  9. package/src/lib/a11y-control.js +74 -0
  10. package/src/lib/a11y-control.js.map +1 -0
  11. package/src/lib/a11y.d.ts +87 -0
  12. package/src/lib/a11y.d.ts.map +1 -0
  13. package/src/lib/a11y.js +96 -0
  14. package/src/lib/a11y.js.map +1 -0
  15. package/src/lib/ai/ai-context-menu.d.ts +140 -0
  16. package/src/lib/ai/ai-context-menu.d.ts.map +1 -0
  17. package/src/lib/ai/ai-context-menu.js +66 -0
  18. package/src/lib/ai/ai-context-menu.js.map +1 -0
  19. package/src/lib/ai/ai-send-dialog.d.ts +1263 -0
  20. package/src/lib/ai/ai-send-dialog.d.ts.map +1 -0
  21. package/src/lib/ai/ai-send-dialog.js +288 -0
  22. package/src/lib/ai/ai-send-dialog.js.map +1 -0
  23. package/src/lib/ai/send-context-to-ai.d.ts +29 -0
  24. package/src/lib/ai/send-context-to-ai.d.ts.map +1 -0
  25. package/src/lib/ai/send-context-to-ai.js +127 -0
  26. package/src/lib/ai/send-context-to-ai.js.map +1 -0
  27. package/src/lib/assert-defined-input.d.ts +26 -0
  28. package/src/lib/assert-defined-input.d.ts.map +1 -0
  29. package/src/lib/assert-defined-input.js +47 -0
  30. package/src/lib/assert-defined-input.js.map +1 -0
  31. package/src/lib/block.d.ts +36 -0
  32. package/src/lib/block.d.ts.map +1 -0
  33. package/src/lib/block.js +55 -0
  34. package/src/lib/block.js.map +1 -0
  35. package/src/lib/bootstrap.d.ts +32 -0
  36. package/src/lib/bootstrap.d.ts.map +1 -0
  37. package/src/lib/bootstrap.js +60 -0
  38. package/src/lib/bootstrap.js.map +1 -0
  39. package/src/lib/bridge.d.ts +56 -0
  40. package/src/lib/bridge.d.ts.map +1 -0
  41. package/src/lib/bridge.js +81 -0
  42. package/src/lib/bridge.js.map +1 -0
  43. package/src/lib/component.d.ts +46 -0
  44. package/src/lib/component.d.ts.map +1 -0
  45. package/src/lib/component.js +118 -0
  46. package/src/lib/component.js.map +1 -0
  47. package/src/lib/composition.d.ts +17 -0
  48. package/src/lib/composition.d.ts.map +1 -0
  49. package/src/lib/composition.js +28 -0
  50. package/src/lib/composition.js.map +1 -0
  51. package/src/lib/craft-defaults.d.ts +2 -0
  52. package/src/lib/craft-defaults.d.ts.map +1 -0
  53. package/src/lib/craft-defaults.js +41 -0
  54. package/src/lib/craft-defaults.js.map +1 -0
  55. package/src/lib/craft-host-tokens.d.ts +6 -0
  56. package/src/lib/craft-host-tokens.d.ts.map +1 -0
  57. package/src/lib/craft-host-tokens.js +7 -0
  58. package/src/lib/craft-host-tokens.js.map +1 -0
  59. package/src/lib/craft-router-outlet.d.ts +15 -0
  60. package/src/lib/craft-router-outlet.d.ts.map +1 -0
  61. package/src/lib/craft-router-outlet.js +10 -0
  62. package/src/lib/craft-router-outlet.js.map +1 -0
  63. package/src/lib/css-vars.d.ts +31 -0
  64. package/src/lib/css-vars.d.ts.map +1 -0
  65. package/src/lib/css-vars.js +43 -0
  66. package/src/lib/css-vars.js.map +1 -0
  67. package/src/lib/css-vars.type.d.ts +151 -0
  68. package/src/lib/css-vars.type.d.ts.map +1 -0
  69. package/src/lib/css-vars.type.js +1 -0
  70. package/src/lib/css-vars.type.js.map +1 -0
  71. package/src/lib/defer.d.ts +31 -0
  72. package/src/lib/defer.d.ts.map +1 -0
  73. package/src/lib/defer.js +19 -0
  74. package/src/lib/defer.js.map +1 -0
  75. package/src/lib/directive.d.ts +9 -0
  76. package/src/lib/directive.d.ts.map +1 -0
  77. package/src/lib/directive.js +31 -0
  78. package/src/lib/directive.js.map +1 -0
  79. package/src/lib/each-scheduling.d.ts +59 -0
  80. package/src/lib/each-scheduling.d.ts.map +1 -0
  81. package/src/lib/each-scheduling.js +120 -0
  82. package/src/lib/each-scheduling.js.map +1 -0
  83. package/src/lib/each.d.ts +29 -0
  84. package/src/lib/each.d.ts.map +1 -0
  85. package/src/lib/each.js +23 -0
  86. package/src/lib/each.js.map +1 -0
  87. package/src/lib/factory-runtime.d.ts +5 -0
  88. package/src/lib/factory-runtime.d.ts.map +1 -0
  89. package/src/lib/factory-runtime.js +26 -0
  90. package/src/lib/factory-runtime.js.map +1 -0
  91. package/src/lib/field-exception-block.d.ts +96 -0
  92. package/src/lib/field-exception-block.d.ts.map +1 -0
  93. package/src/lib/field-exception-block.js +44 -0
  94. package/src/lib/field-exception-block.js.map +1 -0
  95. package/src/lib/host-runtime.d.ts +60 -0
  96. package/src/lib/host-runtime.d.ts.map +1 -0
  97. package/src/lib/host-runtime.js +16 -0
  98. package/src/lib/host-runtime.js.map +1 -0
  99. package/src/lib/hydrate.d.ts +15 -0
  100. package/src/lib/hydrate.d.ts.map +1 -0
  101. package/src/lib/hydrate.js +79 -0
  102. package/src/lib/hydrate.js.map +1 -0
  103. package/src/lib/hyperscript.d.ts +148 -0
  104. package/src/lib/hyperscript.d.ts.map +1 -0
  105. package/src/lib/hyperscript.js +96 -0
  106. package/src/lib/hyperscript.js.map +1 -0
  107. package/src/lib/if-block.d.ts +8 -0
  108. package/src/lib/if-block.d.ts.map +1 -0
  109. package/src/lib/if-block.js +16 -0
  110. package/src/lib/if-block.js.map +1 -0
  111. package/src/lib/locator.d.ts +170 -0
  112. package/src/lib/locator.d.ts.map +1 -0
  113. package/src/lib/locator.js +151 -0
  114. package/src/lib/locator.js.map +1 -0
  115. package/src/lib/match-block.d.ts +38 -0
  116. package/src/lib/match-block.d.ts.map +1 -0
  117. package/src/lib/match-block.js +29 -0
  118. package/src/lib/match-block.js.map +1 -0
  119. package/src/lib/pending-block.d.ts +125 -0
  120. package/src/lib/pending-block.d.ts.map +1 -0
  121. package/src/lib/pending-block.js +48 -0
  122. package/src/lib/pending-block.js.map +1 -0
  123. package/src/lib/project.d.ts +19 -0
  124. package/src/lib/project.d.ts.map +1 -0
  125. package/src/lib/project.js +56 -0
  126. package/src/lib/project.js.map +1 -0
  127. package/src/lib/render/hydration-metadata.d.ts +3 -0
  128. package/src/lib/render/hydration-metadata.d.ts.map +1 -0
  129. package/src/lib/render/hydration-metadata.js +8 -0
  130. package/src/lib/render/hydration-metadata.js.map +1 -0
  131. package/src/lib/render/hydration.d.ts +24 -0
  132. package/src/lib/render/hydration.d.ts.map +1 -0
  133. package/src/lib/render/hydration.js +181 -0
  134. package/src/lib/render/hydration.js.map +1 -0
  135. package/src/lib/render/interpreter.d.ts +32 -0
  136. package/src/lib/render/interpreter.d.ts.map +1 -0
  137. package/src/lib/render/interpreter.js +3588 -0
  138. package/src/lib/render/interpreter.js.map +1 -0
  139. package/src/lib/render/server-style-collector.d.ts +6 -0
  140. package/src/lib/render/server-style-collector.d.ts.map +1 -0
  141. package/src/lib/render/server-style-collector.js +23 -0
  142. package/src/lib/render/server-style-collector.js.map +1 -0
  143. package/src/lib/render/ssr-coordinator.d.ts +20 -0
  144. package/src/lib/render/ssr-coordinator.d.ts.map +1 -0
  145. package/src/lib/render/ssr-coordinator.js +99 -0
  146. package/src/lib/render/ssr-coordinator.js.map +1 -0
  147. package/src/lib/render/string-dom.d.ts +9 -0
  148. package/src/lib/render/string-dom.d.ts.map +1 -0
  149. package/src/lib/render/string-dom.js +377 -0
  150. package/src/lib/render/string-dom.js.map +1 -0
  151. package/src/lib/render/style-registry.d.ts +14 -0
  152. package/src/lib/render/style-registry.d.ts.map +1 -0
  153. package/src/lib/render/style-registry.js +79 -0
  154. package/src/lib/render/style-registry.js.map +1 -0
  155. package/src/lib/render/style-scope.d.ts +30 -0
  156. package/src/lib/render/style-scope.d.ts.map +1 -0
  157. package/src/lib/render/style-scope.js +261 -0
  158. package/src/lib/render/style-scope.js.map +1 -0
  159. package/src/lib/render/vnode.d.ts +330 -0
  160. package/src/lib/render/vnode.d.ts.map +1 -0
  161. package/src/lib/render/vnode.js +293 -0
  162. package/src/lib/render/vnode.js.map +1 -0
  163. package/src/lib/server-render.d.ts +34 -0
  164. package/src/lib/server-render.d.ts.map +1 -0
  165. package/src/lib/server-render.js +84 -0
  166. package/src/lib/server-render.js.map +1 -0
  167. package/src/lib/start.d.ts +13 -0
  168. package/src/lib/start.d.ts.map +1 -0
  169. package/src/lib/start.js +20 -0
  170. package/src/lib/start.js.map +1 -0
  171. package/src/lib/template-contract.d.ts +347 -0
  172. package/src/lib/template-contract.d.ts.map +1 -0
  173. package/src/lib/template-contract.js +1 -0
  174. package/src/lib/template-contract.js.map +1 -0
  175. package/src/lib/template.d.ts +11 -0
  176. package/src/lib/template.d.ts.map +1 -0
  177. package/src/lib/template.js +21 -0
  178. package/src/lib/template.js.map +1 -0
  179. package/src/lib/testing.d.ts +157 -0
  180. package/src/lib/testing.d.ts.map +1 -0
  181. package/src/lib/testing.js +416 -0
  182. package/src/lib/testing.js.map +1 -0
  183. package/src/lib/types.d.ts +442 -0
  184. package/src/lib/types.d.ts.map +1 -0
  185. package/src/lib/types.js +22 -0
  186. package/src/lib/types.js.map +1 -0
  187. package/testing/public-api.d.ts +3 -0
  188. package/testing/public-api.d.ts.map +1 -0
  189. package/testing/public-api.js +3 -0
  190. 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"]}